Ejemplo n.º 1
0
class ViewerToolbar(QWidget):
    thumb_size_changed = Signal()

    def __init__(self, *args, **kwargs):
        super(ViewerToolbar, self).__init__(*args, **kwargs)

        self._thumb_size = QSlider()

        self._build_ui()
        self._build_connections()
        self._setup_ui()

    def _build_ui(self):
        self._thumb_size.setRange(100, 400)
        self._thumb_size.setValue(settings.thumb_size)
        self._thumb_size.setOrientation(Qt.Horizontal)
        self._thumb_size.setFixedWidth(300)

        lyt_main = QHBoxLayout()
        lyt_main.setContentsMargins(0, 0, 0, 0)
        lyt_main.setSpacing(0)
        lyt_main.addStretch()
        lyt_main.addWidget(QLabel('%d %%' % self._thumb_size.minimum()))
        lyt_main.addSpacing(5)
        lyt_main.addWidget(self._thumb_size)
        lyt_main.addSpacing(5)
        lyt_main.addWidget(QLabel('%d %%' % self._thumb_size.maximum()))
        self.setLayout(lyt_main)

    def _build_connections(self):
        self._thumb_size.valueChanged.connect(self._thumb_size_changed)

    def _setup_ui(self):
        pass

    def _thumb_size_changed(self):
        settings.thumb_size = self._thumb_size.value()
        self.thumb_size_changed.emit()
Ejemplo n.º 2
0
class Color(QWidget):
    changed = Signal(object, object, object)

    def __init__(self, parent=None):
        QWidget.__init__(self, parent)

        self.hue = QSlider()
        self.hue.setMaximum(100)
        self.hue.setOrientation(Qt.Horizontal)
        self.hue.valueChanged.connect(self._changed)

        self.saturation = QSlider()
        self.saturation.setMaximum(100)
        self.saturation.setOrientation(Qt.Horizontal)
        self.saturation.valueChanged.connect(self._changed)

        self.value = QSlider()
        self.value.setMaximum(100)
        self.value.setOrientation(Qt.Horizontal)
        self.value.valueChanged.connect(self._changed)

        layout = QGridLayout(self)
        layout.addWidget(QLabel("H"))
        layout.addWidget(QLabel("S"))
        layout.addWidget(QLabel("V"))
        layout.addWidget(self.hue, 0, 1)
        layout.addWidget(self.saturation, 1, 1)
        layout.addWidget(self.value, 2, 1)

    def set_rgb(self, r, g, b):
        h, s, v = colorsys.rgb_to_hsv(r / 255.0, g / 255.0, b / 255.0)
        self.hue.setValue(h * 100)
        self.saturation.setValue(s * 100)
        self.value.setValue(v * 100)

    def _changed(self):
        r, g, b = colorsys.hsv_to_rgb(
            self.hue.value() / 100.0,
            self.saturation.value() / 100.0,
            self.value.value() / 100.0,
        )
        self.changed.emit(int(r * 255), int(g * 255), int(b * 255))
Ejemplo n.º 3
0
class ColorPicker(BaseEditor, object):

    attr_type = 'color'

    def __init__(self, parent=None, **kwargs):
        super(ColorPicker, self).__init__(parent=parent, **kwargs)

        self._default_value = (125, 125, 125)
        self.attr = None

        self.normalized = kwargs.get('normalized', False)
        self.min = kwargs.get('min', 0)
        self.max = kwargs.get('max', 99)
        self.color = kwargs.get('color', QColor(1.0, 1.0, 1.0))
        self.mult = kwargs.get('mult', 0.1)

        self.color_swatch = color.ColorSwatch(parent=self,
                                              color=self.color,
                                              normalized=self.normalized)
        self.color_swatch.setMaximumSize(QSize(75, 20))
        self.color_swatch.setMinimumSize(QSize(75, 20))
        self.color_swatch.set_color(color=self.color)
        self.main_layout.addWidget(self.color_swatch)

        self.slider = QSlider(self)
        self.slider.setOrientation(Qt.Horizontal)
        self.slider.setValue(self.max)
        self.main_layout.addWidget(self.slider)

        self.set_max(self.max)
        self.set_min(self.min)

        self.slider.valueChanged.connect(self.OnSliderChanged)
        self.slider.sliderReleased.connect(self.OnSliderReleased)
        self.color_swatch.clicked.connect(self.OnColorPicked)

    # region Properties
    def get_rgb(self):
        return self.color_swatch.qcolor.getRgb()[0:3]

    def get_rgbF(self):
        return self.color_swatch.qcolor.getRgbF()[0:3]

    def get_hsv(self):
        return self.color_swatch.qcolor.getHsv()[0:3]

    def get_hsvF(self):
        return self.color_swatch.qcolor.getHsvF()[0:3]

    rgb = property(get_rgb)
    rgbF = property(get_rgbF)
    hsv = property(get_hsv)
    gsvF = property(get_hsvF)

    def OnSliderChanged(self):
        slider_value = float(self.slider.value())
        if not self._current_value:
            LOGGER.debug(
                'Caching color: (%d, %d, %d)' %
                (self.color_swatch.color[0], self.color_swatch.color[1],
                 self.color_swatch.color[2]))
            self._current_value = self.color_swatch.color
        current_color = QColor(*self._current_value)
        darker = 200 - slider_value
        new_color = current_color.darker(darker)
        self.color_swatch.qcolor = new_color
        self.color_swatch._update()

    def OnSliderReleased(self):
        """
        Updates items color when the slider handle is released
        """

        color = self.color_swatch.color
        self.color_swatch._update()
        self.OnValueUpdated()

    def OnColorPicked(self):
        """
        Event to call color picker
        """

        dialog = QColorDialog(self.color_swatch.qcolor, self)
        if dialog.exec_():
            self.color_swatch.setPalette(QPalette(dialog.currentColor()))
            self.color_swatch.qcolor = dialog.currentColor()
            self.color_swatch._update()
            self.OnValueUpdated()

    def get_value(self):
        return self.color_swatch.color

    def initialize_editor(self):
        editor_value = self.default_value

        node_values = self.values
        if node_values:
            if len(node_values) > 1:
                pass
            elif len(node_values) == 1:
                if node_values[0]:
                    editor_value = node_values[0]

                self.color_swatch.set_color(editor_value)

    def set_connected(self, conn):
        if conn != self._connection:
            self._connection = conn
            self.value_line.setText(conn)
            self.color_swatch.setEnabled(False)

    def sizeHint(self):
        return QSize(350, 27)

    def set_attr(self, value):
        self.attr = value
        return self.attr

    def get_attr(self):
        return self.attr

    def set_min(self, value):
        """
        Sets the slider minimum value
        :param value: int, slider minimum value
        """

        self.min = value
        self.slider.setMinimum(value)

    def set_max(self, value):
        """
        Sets the silder maximum value
        :param value: int, slider maximum value
        """

        self.max = value
        self.slider.setMaximum(value)

    def get_qcolor(self):
        return self.color_swatch.qcolor

    def set_color(self, value):
        return self.color_swatch.set_color(color=value)

    def _update(self):
        return self.color_swatch._update()
Ejemplo n.º 4
0
class View(QFrame):
    graphicsView = None
    label = None
    label2 = None
    selectModeButton = None
    dragModeButton = None
    openGlButton = None
    antialiasButton = None
    resetButton = None
    zoomSlider = None
    rotateSlider = None

    def __init__(self, name, parent=None):
        super(View, self).__init__(parent)
        self.init_ui(name)

    def init_ui(self, name):
        self.setFrameStyle(QFrame.Sunken | QFrame.StyledPanel)
        self.graphicsView = GraphicsView(self)
        self.graphicsView.setRenderHint(QPainter.Antialiasing, False)
        self.graphicsView.setDragMode(QGraphicsView.RubberBandDrag)
        self.graphicsView.setOptimizationFlags(QGraphicsView.DontSavePainterState)
        self.graphicsView.setViewportUpdateMode(QGraphicsView.SmartViewportUpdate)
        self.graphicsView.setTransformationAnchor(QGraphicsView.AnchorUnderMouse)

        size = self.style().pixelMetric(QStyle.PM_ToolBarIconSize)
        iconSize = QSize(size, size)

        zoomInIcon = QToolButton()
        zoomInIcon.setAutoRepeat(True)
        zoomInIcon.setAutoRepeatInterval(33)
        zoomInIcon.setAutoRepeatDelay(0)
        zoomInIcon.setIcon(QIcon(":/zoomin.png"))
        zoomInIcon.setIconSize(iconSize)
        zoomOutIcon = QToolButton()
        zoomOutIcon.setAutoRepeat(True)
        zoomOutIcon.setAutoRepeatInterval(33)
        zoomOutIcon.setAutoRepeatDelay(0)
        zoomOutIcon.setIcon(QIcon(":/zoomout.png"))
        zoomOutIcon.setIconSize(iconSize)
        self.zoomSlider = QSlider()
        self.zoomSlider.setMinimum(0)
        self.zoomSlider.setMaximum(500)
        self.zoomSlider.setValue(250)
        self.zoomSlider.setTickPosition(QSlider.TicksRight)

        # Zoom slider layout
        zoomSliderLayout = QVBoxLayout()
        zoomSliderLayout.addWidget(zoomInIcon)
        zoomSliderLayout.addWidget(self.zoomSlider)
        zoomSliderLayout.addWidget(zoomOutIcon)

        rotateLeftIcon = QToolButton()
        rotateLeftIcon.setIcon(QIcon(":/rotateleft.png"))
        rotateLeftIcon.setIconSize(iconSize)
        rotateRightIcon = QToolButton()
        rotateRightIcon.setIcon(QIcon(":/rotateright.png"))
        rotateRightIcon.setIconSize(iconSize)
        self.rotateSlider = QSlider()
        self.rotateSlider.setOrientation(Qt.Horizontal)
        self.rotateSlider.setMinimum(-360)
        self.rotateSlider.setMaximum(360)
        self.rotateSlider.setValue(0)
        self.rotateSlider.setTickPosition(QSlider.TicksBelow)

        # Rotate slider layout
        rotateSliderLayout = QHBoxLayout()
        rotateSliderLayout.addWidget(rotateLeftIcon)
        rotateSliderLayout.addWidget(self.rotateSlider)
        rotateSliderLayout.addWidget(rotateRightIcon)

        self.resetButton = QToolButton()
        self.resetButton.setText("0")
        self.resetButton.setEnabled(False)

        # Label layout
        labelLayout = QHBoxLayout()
        self.label = QLabel(name)
        self.label2 = QLabel("Pointer Mode")
        self.selectModeButton = QToolButton()
        self.selectModeButton.setText("Select")
        self.selectModeButton.setCheckable(True)
        self.selectModeButton.setChecked(True)
        self.dragModeButton = QToolButton()
        self.dragModeButton.setText("Drag")
        self.dragModeButton.setCheckable(True)
        self.dragModeButton.setChecked(False)
        self.antialiasButton = QToolButton()
        self.antialiasButton.setText("Antialiasing")
        self.antialiasButton.setCheckable(True)
        self.antialiasButton.setChecked(False)
        self.openGlButton = QToolButton()
        self.openGlButton.setText("OpenGL")
        self.openGlButton.setCheckable(True)
        self.openGlButton.setEnabled(QGLFormat.hasOpenGL())

        pointerModeGroup = QButtonGroup()
        pointerModeGroup.setExclusive(True)
        pointerModeGroup.addButton(self.selectModeButton)
        pointerModeGroup.addButton(self.dragModeButton)

        labelLayout.addWidget(self.label)
        labelLayout.addStretch()
        labelLayout.addWidget(self.label2)
        labelLayout.addWidget(self.selectModeButton)
        labelLayout.addWidget(self.dragModeButton)
        labelLayout.addStretch()
        labelLayout.addWidget(self.antialiasButton)
        labelLayout.addWidget(self.openGlButton)

        topLayout = QGridLayout()
        topLayout.addLayout(labelLayout, 0, 0)
        topLayout.addWidget(self.graphicsView, 1, 0)
        topLayout.addLayout(zoomSliderLayout, 1, 1)
        topLayout.addLayout(rotateSliderLayout, 2, 0)
        topLayout.addWidget(self.resetButton, 2, 1)
        self.setLayout(topLayout)

        self.resetButton.clicked.connect(self.resetView)
        self.zoomSlider.valueChanged.connect(self.setupTransform)
        self.rotateSlider.valueChanged.connect(self.setupTransform)

        self.graphicsView.verticalScrollBar().valueChanged.connect(self.setResetButtonEnabled)
        self.graphicsView.horizontalScrollBar().valueChanged.connect(self.setResetButtonEnabled)
        self.selectModeButton.toggled.connect(self.togglePointerMode)
        self.dragModeButton.toggled.connect(self.togglePointerMode)
        self.antialiasButton.toggled.connect(self.toggleAntialiasing)
        self.openGlButton.toggled.connect(self.toggleOpenGL)
        rotateLeftIcon.clicked.connect(self.rotateLeft)
        rotateRightIcon.clicked.connect(self.rotateRight)
        zoomInIcon.clicked.connect(self.zoomIn)
        zoomOutIcon.clicked.connect(self.zoomOut)

        self.setupTransform()

    def view(self):
        return self.graphicsView

    @Slot()
    def zoomIn(self):
        self.zoomSlider.setValue(self.zoomSlider.value() + 1)

    @Slot()
    def zoomOut(self):
        self.zoomSlider.setValue(self.zoomSlider.value() - 1)

    @Slot()
    def resetView(self):
        self.zoomSlider.setValue(250)
        self.rotateSlider.setValue(0)
        self.setupTransform()
        self.graphicsView.ensureVisible(QRectF(0, 0, 0, 0))

        self.resetButton.setEnabled(False)

    @Slot()
    def setResetButtonEnabled(self):
        self.resetButton.setEnabled(True)

    @Slot()
    def setupTransform(self):
        scale = pow(2.0, (self.zoomSlider.value() - 250) / 50.0)
        trans = QTransform()
        trans.scale(scale, scale)
        trans.rotate(self.rotateSlider.value())

        self.graphicsView.setTransform(trans)
        self.setResetButtonEnabled()

    @Slot()
    def togglePointerMode(self):
        self.graphicsView.setDragMode(
            QGraphicsView.RubberBandDrag if self.selectModeButton.isChecked() else QGraphicsView.ScrollHandDrag)
        self.graphicsView.setInteractive(self.selectModeButton.isChecked())

    @Slot()
    def toggleOpenGL(self):
        self.graphicsView.setViewport(
            QGLWidget(QGLFormat(QGL.SampleBuffers)) if self.openGlButton.isChecked() else QWidget())

    @Slot()
    def toggleAntialiasing(self):
        self.graphicsView.setRenderHint(QPainter.Antialiasing, self.antialiasButton.isChecked())

    @Slot()
    def rotateLeft(self):
        self.rotateSlider.setValue(self.rotateSlider.value() - 10)

    @Slot()
    def rotateRight(self):
        self.rotateSlider.setValue(self.rotateSlider.value() + 10)