Beispiel #1
0
    def createCustomFillBox(self):
        # create layout for custom fill
        scroll_area = ForceResizeScrollArea()
        grid_layout = DynamicGridLayout(400)
        dynamic_widget = QtGui.QWidget()
        dynamic_widget.setLayout(grid_layout)
        scroll_area.setWidgetResizable(True)
        level_names = self.object.level_names
        grid_widgets = []

        # populate rows
        for index, label in enumerate(level_names):
            color = self.object.level_color(index)
            item = CustomFillWidget(index, label, color)
            item.colorChanged.connect(self.object.set_level_color)
            item.opacityChanged.connect(self.object.set_level_opacity)
            item.buttonColorChanged.connect(self.updateButtonColor)
            item.patternChanged.connect(self.object.set_level_pattern)
            item.colormapChanged.connect(self.updateButtonColor)
            item.createColormapRequest.connect(self.createColormap)
            item.setColor(color)
            item.changeOpacity(100)
            item.attributeChanged.connect(self.preview.update)
            grid_widgets.append(item)

        # adding widgets(plural) only calls build grid once instead of once for each widget
        grid_layout.setColumnWidth(int(grid_widgets[-1].minimumSizeHint().width()))
        grid_layout.addNewWidgets(grid_widgets)
        scroll_area.setWidget(dynamic_widget)

        return scroll_area
Beispiel #2
0
    def __init__(self):
        super(DictEditorWidget, self).__init__()
        self.valid_keys = None
        self.key_value_rows = []
        self.grid = DynamicGridLayout(350)
        self.clearing = False

        wrap = QVBoxLayout()

        add_button = QPushButton()
        add_button.setText("New Line")
        add_button.clicked.connect(self.insertRow)

        self.setLayout(wrap)
        wrap.addLayout(self.grid)
        wrap.addWidget(add_button)
Beispiel #3
0
    def createCustomFillBox(self):
        # create layout for custom fill
        scroll_area = ForceResizeScrollArea()
        grid_layout = DynamicGridLayout(400)
        dynamic_widget = QtGui.QWidget()
        dynamic_widget.setLayout(grid_layout)
        scroll_area.setWidgetResizable(True)
        level_names = self.object.level_names
        grid_widgets = []

        # populate rows
        for index, label in enumerate(level_names):
            color = self.object.level_color(index)
            item = CustomFillWidget(index, label, color)
            item.colorChanged.connect(self.object.set_level_color)
            item.opacityChanged.connect(self.object.set_level_opacity)
            item.buttonColorChanged.connect(self.updateButtonColor)
            item.patternChanged.connect(self.object.set_level_pattern)
            item.colormapChanged.connect(self.updateButtonColor)
            item.createColormapRequest.connect(self.createColormap)
            item.setColor(color)
            item.changeOpacity(100)
            item.attributeChanged.connect(self.preview.update)
            grid_widgets.append(item)

        # adding widgets(plural) only calls build grid once instead of once for each widget
        grid_layout.setColumnWidth(
            int(grid_widgets[-1].minimumSizeHint().width()))
        grid_layout.addNewWidgets(grid_widgets)
        scroll_area.setWidget(dynamic_widget)

        return scroll_area
Beispiel #4
0
    def __init__(self):
        super(DictEditorWidget, self).__init__()
        self.valid_keys = None
        self.key_value_rows = []
        self.grid = DynamicGridLayout(350)
        self.clearing = False

        wrap = QVBoxLayout()

        add_button = QPushButton()
        add_button.setText("New Line")
        add_button.clicked.connect(self.insertRow)

        self.setLayout(wrap)
        wrap.addLayout(self.grid)
        wrap.addWidget(add_button)
Beispiel #5
0
class DictEditorWidget(QWidget):
    dictEdited = Signal(dict)

    def __init__(self):
        super(DictEditorWidget, self).__init__()
        self.valid_keys = None
        self.key_value_rows = []
        self.grid = DynamicGridLayout(350)
        self.clearing = False

        wrap = QVBoxLayout()

        add_button = QPushButton()
        add_button.setText("New Line")
        add_button.clicked.connect(self.insertRow)

        self.setLayout(wrap)
        wrap.addLayout(self.grid)
        wrap.addWidget(add_button)

    # Update Combo Boxes
    def updateCBoxes(self, cur_row):
        cur_text = cur_row.key()

        for row in self.key_value_rows:
            check_text = row.key()
            # check if boxes match and set to blank if so
            if row != cur_row:
                if check_text == cur_text:
                    # accessing edit_key here
                    row.edit_key.setCurrentIndex(0)

    # check if valid for emission
    def checkKeyValues(self):
        keys = []
        values = []
        for row in self.key_value_rows:
            l_text = row.key()
            r_text = row.value()
            if l_text and l_text not in keys:
                keys.append(l_text)
                values.append(r_text)
        return keys, values

    def emitSignal(self):
        keys, values = self.checkKeyValues()
        if keys and values:
            self.dictEdited.emit(dict(zip(keys, values)))

    # populate if dictionary is given
    def insertRow(self, key="", value=""):
        if self.valid_keys and len(
                self.grid.getWidgets()) >= len(self.valid_keys) - 1:
            return

        new_row = KeyValueRow(key, value, self.valid_keys, self)
        new_row.updatedKey.connect(self.emitSignal)
        new_row.updatedValue.connect(self.emitSignal)
        new_row.clickedRemove.connect(self.removeRow)

        if not self.valid_keys:
            validator = InputChecker(new_row, self.grid.getWidgets())
            new_row.setKeyValidator(validator)
        if self.valid_keys:
            new_row.updatedKey.connect(self.updateCBoxes)

        self.grid.addNewWidget(new_row)
        self.key_value_rows.append(new_row)

    def removeRow(self, row_widget):
        # Remove from list
        self.key_value_rows.remove(row_widget)

        # remove from reflow
        self.grid.removeWidget(row_widget)

        # delete widget
        row_widget.deleteLater()

        if not self.clearing:
            self.emitSignal()

    # set valid keys to be selected
    # must call setValidKeys before calling setDict
    def setValidKeys(self, keys):
        self.valid_keys = keys
        self.valid_keys.insert(0, "")

    # set inital dictionary values
    def setDict(self, dictionary):
        self.clear()

        for key in sorted(dictionary.keys()):
            self.insertRow(key, dictionary[key])

    # return valid keys
    def validKeys(self):
        return self.valid_keys

    # return dictionary
    def dict(self):
        keys = []
        values = []
        for row in self.key_value_rows:
            keys.append(row.key())
            values.append(row.value())
        return dict(zip(keys, values))

    def clear(self):
        self.grid.clearWidget()
        self.clearing = True

        while self.key_value_rows:
            row = self.key_value_rows[0]
            self.removeRow(row)

        self.clearing = False
Beispiel #6
0
class DictEditorWidget(QWidget):
    dictEdited = Signal(dict)

    def __init__(self):
        super(DictEditorWidget, self).__init__()
        self.valid_keys = None
        self.key_value_rows = []
        self.grid = DynamicGridLayout(350)
        self.clearing = False

        wrap = QVBoxLayout()

        add_button = QPushButton()
        add_button.setText("New Line")
        add_button.clicked.connect(self.insertRow)

        self.setLayout(wrap)
        wrap.addLayout(self.grid)
        wrap.addWidget(add_button)

    # Update Combo Boxes
    def updateCBoxes(self, cur_row):
        cur_text = cur_row.key()

        for row in self.key_value_rows:
            check_text = row.key()
            # check if boxes match and set to blank if so
            if row != cur_row:
                if check_text == cur_text:
                    # accessing edit_key here
                    row.edit_key.setCurrentIndex(0)

    # check if valid for emission
    def checkKeyValues(self):
        keys = []
        values = []
        for row in self.key_value_rows:
            l_text = row.key()
            r_text = row.value()
            if l_text and l_text not in keys:
                keys.append(l_text)
                values.append(r_text)
        return keys, values

    def emitSignal(self):
        keys, values = self.checkKeyValues()
        if keys and values:
            self.dictEdited.emit(dict(zip(keys, values)))

    # populate if dictionary is given
    def insertRow(self, key="", value=""):
        if self.valid_keys and len(self.grid.getWidgets()) >= len(self.valid_keys) - 1:
            return

        new_row = KeyValueRow(key, value, self.valid_keys, self)
        new_row.updatedKey.connect(self.emitSignal)
        new_row.updatedValue.connect(self.emitSignal)
        new_row.clickedRemove.connect(self.removeRow)

        if not self.valid_keys:
            validator = InputChecker(new_row, self.grid.getWidgets())
            new_row.setKeyValidator(validator)
        if self.valid_keys:
            new_row.updatedKey.connect(self.updateCBoxes)

        self.grid.addNewWidget(new_row)
        self.key_value_rows.append(new_row)

    def removeRow(self, row_widget):
        # Remove from list
        self.key_value_rows.remove(row_widget)

        # remove from reflow
        self.grid.removeWidget(row_widget)

        # delete widget
        row_widget.deleteLater()

        if not self.clearing:
            self.emitSignal()

    # set valid keys to be selected
    # must call setValidKeys before calling setDict
    def setValidKeys(self, keys):
        self.valid_keys = keys
        self.valid_keys.insert(0, "")

    # set inital dictionary values
    def setDict(self, dictionary):
        self.clear()

        for key in sorted(dictionary.keys()):
            self.insertRow(key, dictionary[key])

    # return valid keys
    def validKeys(self):
        return self.valid_keys

    # return dictionary
    def dict(self):
        keys = []
        values = []
        for row in self.key_value_rows:
            keys.append(row.key())
            values.append(row.value())
        return dict(zip(keys, values))

    def clear(self):
        self.grid.clearWidget()
        self.clearing = True

        while self.key_value_rows:
            row = self.key_value_rows[0]
            self.removeRow(row)

        self.clearing = False