Пример #1
0
    def remove_opacity_stop_at_position(self, n):
        if len(self._opacity) > 1:
            message = {"opacity": self._opacity[n][1], "location": self._opacity[n][0]}
            messenger.publish("opacity_removed", message)

        del self._opacity[n]
        self.update()
Пример #2
0
 def add_layer(self):
     # Add layer just below 'New Layer' button
     position = self.layout.count() - 1
     messenger.publish("layer_added", {"index": position})
     name = "Layer " + str(self.layer_count)
     self.layer_count += 1
     self.layout.insertWidget(1, LayerView(name), alignment=Qt.AlignCenter)
Пример #3
0
 def onChanged(self, text):
     if text != self.combo_text:
         messenger.publish("layer_gui_type_changed", {
             "value": text,
             "elem": self.layer_view
         })
         self.combo_text = text
Пример #4
0
    def initUI(self, name):
        self.setMinimumSize(240, 40)
        self.setMaximumWidth(300)
        self.font = QFont()
        self.font.setFamily("Arial")
        self.font.setPointSize(14)

        layout = QHBoxLayout()
        self.setLayout(layout)
        layout.setContentsMargins(0, 0, 0, 0)

        # Add toggle visibility button
        self.toggle_visible = QPushButton()
        self.checked = True
        self.toggle_visible.setFlat(True)
        self.visible_icon = QIcon("resources/visible.png")
        self.toggle_visible.setIcon(self.visible_icon)
        self.toggle_visible.setMaximumWidth(18)
        self.toggle_visible.clicked.connect(self.visibility_toggled)

        self.toggle_visible.setStyleSheet(
            "background-color: rgb(205, 205, 205);")
        layout.addWidget(self.toggle_visible)

        # Add layer name
        label = QLabel(name)
        label.setFont(self.font)
        layout.addWidget(label)

        # Add layer order buttons button
        arrow_buttons = ArrowButtons()
        arrow_buttons.arrow_up_callback = self.arrow_up_pressed
        arrow_buttons.arrow_down_callback = self.arrow_down_pressed
        layout.addWidget(arrow_buttons)

        # Add settings button
        settingsIcon = QIcon("resources/settings.png")
        settings = QPushButton()
        settings.setIcon(settingsIcon)
        settings.setMaximumWidth(30)
        settings.setStyleSheet("background-color: white; shadow: none")
        settings.clicked.connect(lambda: self.settings_windows.show())
        layout.addWidget(settings)

        # Add delete button
        delIcon = QIcon("resources/delete.png")
        delete = QPushButton()
        delete.clicked.connect(
            lambda: messenger.publish("delete_gui_clicked", {"elem": self}))
        delete.setIcon(delIcon)
        delete.setMaximumWidth(30)
        delete.setStyleSheet("background-color: white; shadow: none")
        layout.addWidget(delete)

        # Setup behavior when layer is clicked
        selected_action = lambda event: messenger.publish(
            "layer_gui_selected", {"elem": self})
        self.mouseReleaseEvent = selected_action
        selected_action(None)
Пример #5
0
    def choose_interior_color(self):
        dlg = QtWidgets.QColorDialog(self)
        dlg.setCurrentColor(QtGui.QColor(self.interior_color))

        if dlg.exec_():
            self.interior_color = dlg.currentColor().name()
            message = {"color": self.interior_color}
            messenger.publish("interior_color_changed", message)
Пример #6
0
    def remove_gradient_stop_at_position(self, n):
        if len(self._gradient) > 1:
            message = {"color": self._gradient[n][1], "location": self._gradient[n][0]}
            messenger.publish("color_removed", message)

        del self._gradient[n]
        self.gradientChanged.emit()
        self.update()
Пример #7
0
    def layer_selected(self, event):
        if self.selected_layer:
            self.selected_layer.setStyleSheet("background-color: white")
        event["elem"].setStyleSheet("background-color: rgb(205, 205, 205)")
        self.selected_layer = event["elem"]

        layer_index = self.gui_index_to_fractal_index(event["elem"])
        messenger.publish("selected_layer_changed", {"index": layer_index})
Пример #8
0
    def submit(self):
        self.original_value = self.value
        opacity_list = self.gradient_gui._opacity
        for location, opacity, window in opacity_list:
            if window is self.parent_window:
                messenger.publish("opacity_gui_changed", {"location": location, "value": self.value})

        self.parent_window.hide()
Пример #9
0
    def change_opacity(self, event):
        changed = False
        for i in range(len(self._opacity)):
            if self._opacity[i][0] == event["location"]:
                self._opacity[i] = (self._opacity[i][0], event["value"], self._opacity[i][2])
                changed = True

        if changed:
            messenger.publish("opacity_changed", event)
Пример #10
0
    def setColorAtPosition(self, n, color):
        if n < len(self._gradient):
            stop, _ = self._gradient[n]
            self._gradient[n] = stop, color

            message = {"color": self._gradient[n][1], "location": self._gradient[n][0]}
            messenger.publish("color_changed", message)

            self.gradientChanged.emit()
            self.update()
Пример #11
0
    def visibility_toggled(self):
        self.checked = not self.checked
        icon = self.visible_icon if self.checked else QIcon()
        self.toggle_visible.setIcon(icon)

        if self.checked:
            self.toggle_visible.setStyleSheet('border:none')
        else:
            self.toggle_visible.setStyleSheet('border:black')

        messenger.publish("layer_gui_toggled", {
            "value": self.checked,
            "elem": self
        })
Пример #12
0
    def mouseReleaseEvent(self, e):
        if self._drag_position is not None:
            message = {"color": self._gradient[self._drag_position][1],
                          "location": self._gradient[self._drag_position][0],
                          "old_location" : self._old_position}
            messenger.publish("color_moved", message)
        if self._opacity_drag_position is not None:
            message = {"opacity": self._opacity[self._opacity_drag_position][1],
                          "location": self._opacity[self._opacity_drag_position][0],
                          "old_location" : self._opacity_old_position}
            messenger.publish("opacity_moved", message)

        self._drag_position = None
        self._opacity_drag_position = None
        self._sort_gradient()
        self._sort_opacity()
Пример #13
0
    def layer_moved(self, event):
        layer_index = self.gui_index_to_fractal_index(event["elem"])
        gui_index = self.layout.indexOf(event["elem"])
        # Ignore bad values
        if (layer_index is 0 and event["value"] is "down") or (
                layer_index is self.layout.count() - 2
                and event["value"] is "up"):
            return

        self.layout.removeWidget(event["elem"])
        new_index = gui_index - 1 if event["value"] is "up" else gui_index + 1
        self.layout.insertWidget(new_index, event["elem"])

        messenger.publish("layer_moved", {
            "value": event["value"],
            "index": layer_index
        })
Пример #14
0
    def add_opacity_stop(self, stop):
        # Stop is a value 0...1, find the point to insert this stop
        # in the list.
        assert 0.0 <= stop <= 1.0

        index = -1
        for n, g in enumerate(self._opacity):
            if g[0] > stop:
                # Insert before this entry, with specified or next color.
                self._opacity.insert(n, (stop, OPACITY_DEFAULT, OpacitySliderWindow(self)))
                index = n
                break
        if index == -1:
            # Insert at end of list
            index = len(self._gradient) - 1
            self._opacity.append((stop, OPACITY_DEFAULT, OpacitySliderWindow(self)))

        message = {"opacity" : self._opacity[index][1], "location": self._opacity[index][0]}
        messenger.publish("opacity_added", message)

        self.update()
Пример #15
0
    def add_gradient_stop(self, stop, color=None):
        # Stop is a value 0...1, find the point to insert this stop
        # in the list.
        assert 0.0 <= stop <= 1.0

        index = -1
        for n, g in enumerate(self._gradient):
            if g[0] > stop:
                # Insert before this entry, with specified or next color.
                self._gradient.insert(n, (stop, color or '#ffffff'))
                index = n
                break
        if index == -1:
            # Insert at end of list
            index = len(self._gradient)
            self._gradient.append((stop, color or '#ffffff'))

        self._constrain_gradient()

        message = {"color" : self._gradient[index][1], "location": self._gradient[index][0]}
        messenger.publish("color_added", message)

        self.gradientChanged.emit()
        self.update()
Пример #16
0
 def keyPressEvent(self, e):
     messenger.publish("key_pressed", {"event": e})
Пример #17
0
 def layer_type_changed(self, event):
     layer_index = self.gui_index_to_fractal_index(event["elem"])
     messenger.publish("layer_type_changed", {
         "index": layer_index,
         "value": event["value"]
     })
Пример #18
0
 def remove_layer(self, event):
     layer_index = self.gui_index_to_fractal_index(event["elem"])
     if event["elem"] is self.selected_layer:
         self.selected_layer = None
     event["elem"].deleteLater()
     messenger.publish("layer_removed", {"index": layer_index})
Пример #19
0
 def forward_layer_toggle_event(self, event):
     event["index"] = self.gui_index_to_fractal_index(event["elem"])
     del event["elem"]
     messenger.publish("layer_toggled", event)
Пример #20
0
 def wheelEvent(self, event):
     messenger.publish("mouse_wheel_moved", {"event": event})
Пример #21
0
 def arrow_down_pressed(self):
     messenger.publish("layer_gui_moved", {"value": "down", "elem": self})