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()
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))
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()
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)