- structural changes in Preferences from David Robertson
This commit is contained in:
@@ -683,6 +683,100 @@ class NumericalEvalTupleEntry(FCEntry):
|
||||
self.setValidator(validator)
|
||||
|
||||
|
||||
class FCColorEntry(QtWidgets.QFrame):
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
|
||||
self.entry = FCEntry()
|
||||
|
||||
self.button = QtWidgets.QPushButton()
|
||||
self.button.setFixedSize(15, 15)
|
||||
self.button.setStyleSheet("border-color: dimgray;")
|
||||
|
||||
self.layout = QtWidgets.QHBoxLayout()
|
||||
self.layout.setAlignment(QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter)
|
||||
self.layout.setContentsMargins(0, 0, 0, 0)
|
||||
self.layout.addWidget(self.entry)
|
||||
self.layout.addWidget(self.button)
|
||||
self.setLayout(self.layout)
|
||||
|
||||
self.entry.editingFinished.connect(self._sync_button_color)
|
||||
self.button.clicked.connect(self._on_button_clicked)
|
||||
|
||||
def get_value(self) -> str:
|
||||
return self.entry.get_value()
|
||||
|
||||
def set_value(self, value: str):
|
||||
self.entry.set_value(value)
|
||||
self._sync_button_color()
|
||||
|
||||
def _sync_button_color(self):
|
||||
value = self.get_value()
|
||||
self.button.setStyleSheet("background-color:%s;" % self._extract_color(value))
|
||||
|
||||
def _on_button_clicked(self):
|
||||
value = self.entry.get_value()
|
||||
current_color = QtGui.QColor(self._extract_color(value))
|
||||
|
||||
color_dialog = QtWidgets.QColorDialog()
|
||||
selected_color = color_dialog.getColor(initial=current_color, options=QtWidgets.QColorDialog.ShowAlphaChannel)
|
||||
|
||||
if selected_color.isValid() is False:
|
||||
return
|
||||
|
||||
new_value = str(selected_color.name()) + self._extract_alpha(value)
|
||||
self.set_value(new_value)
|
||||
|
||||
def _extract_color(self, value: str) -> str:
|
||||
return value[:7]
|
||||
|
||||
def _extract_alpha(self, value: str) -> str:
|
||||
return value[7:9]
|
||||
|
||||
|
||||
class FCSliderWithSpinner(QtWidgets.QFrame):
|
||||
|
||||
def __init__(self, min=0, max=100, step=1, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
|
||||
self.slider = QtWidgets.QSlider(QtCore.Qt.Horizontal)
|
||||
self.slider.setMinimum(min)
|
||||
self.slider.setMaximum(max)
|
||||
self.slider.setSingleStep(step)
|
||||
|
||||
self.spinner = FCSpinner()
|
||||
self.spinner.set_range(min, max)
|
||||
self.spinner.set_step(step)
|
||||
self.spinner.setMinimumWidth(70)
|
||||
|
||||
self.layout = QtWidgets.QHBoxLayout()
|
||||
self.layout.setAlignment(QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter)
|
||||
self.layout.setContentsMargins(0, 0, 0, 0)
|
||||
self.layout.addWidget(self.slider)
|
||||
self.layout.addWidget(self.spinner)
|
||||
self.setLayout(self.layout)
|
||||
|
||||
self.slider.valueChanged.connect(self._on_slider)
|
||||
self.spinner.valueChanged.connect(self._on_spinner)
|
||||
|
||||
self.valueChanged = self.spinner.valueChanged
|
||||
|
||||
def get_value(self) -> int:
|
||||
return self.spinner.get_value()
|
||||
|
||||
def set_value(self, value: int):
|
||||
self.spinner.set_value(value)
|
||||
|
||||
def _on_spinner(self):
|
||||
spinner_value = self.spinner.value()
|
||||
self.slider.setValue(spinner_value)
|
||||
|
||||
def _on_slider(self):
|
||||
slider_value = self.slider.value()
|
||||
self.spinner.set_value(slider_value)
|
||||
|
||||
|
||||
class FCSpinner(QtWidgets.QSpinBox):
|
||||
|
||||
returnPressed = QtCore.pyqtSignal()
|
||||
|
||||
Reference in New Issue
Block a user