Skip to content

Commit 6613114

Browse files
committed
Color gradient selection: Allow disabling 'Center at' line
1 parent cb05816 commit 6613114

File tree

1 file changed

+33
-23
lines changed

1 file changed

+33
-23
lines changed

Orange/widgets/utils/colorgradientselection.py

Lines changed: 33 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@ class ColorGradientSelection(QWidget):
1515

1616
currentIndexChanged = Signal(int)
1717
thresholdsChanged = Signal(float, float)
18-
centerChanged = Signal(float)
18+
centerChanged = Signal(object)
1919

20-
def __init__(self, *args, thresholds=(0.0, 1.0), center=0, **kwargs):
20+
def __init__(self, *args, thresholds=(0.0, 1.0), center=None, **kwargs):
2121
super().__init__(*args, **kwargs)
2222

2323
low = round(clip(thresholds[0], 0., 1.), 2)
@@ -45,21 +45,29 @@ def __init__(self, *args, thresholds=(0.0, 1.0), center=0, **kwargs):
4545
self.gradient_cb.setModel(model)
4646
self.gradient_cb.activated[int].connect(self.activated)
4747
self.gradient_cb.currentIndexChanged.connect(self.currentIndexChanged)
48-
self.gradient_cb.currentIndexChanged.connect(self.__on_palette_changed)
49-
50-
self.center_box = QWidget()
51-
center_layout = QHBoxLayout()
52-
self.center_box.setLayout(center_layout)
53-
width = QFontMetrics(self.font()).boundingRect("9999999").width()
54-
self.center_edit = QLineEdit(
55-
text=f"{self.__center}",
56-
maximumWidth=width, placeholderText="0", alignment=Qt.AlignRight)
57-
self.center_edit.setValidator(QDoubleValidator())
58-
self.center_edit.editingFinished.connect(self.__on_center_changed)
59-
center_layout.setContentsMargins(0, 0, 0, 0)
60-
center_layout.addWidget(QLabel("Centered at"))
61-
center_layout.addWidget(self.center_edit)
62-
center_layout.addStretch(1)
48+
49+
if center is not None:
50+
def __on_center_changed():
51+
self.__center = float(self.center_edit.text() or "0")
52+
self.centerChanged.emit(self.__center)
53+
54+
self.center_box = QWidget()
55+
center_layout = QHBoxLayout()
56+
self.center_box.setLayout(center_layout)
57+
width = QFontMetrics(self.font()).boundingRect("9999999").width()
58+
self.center_edit = QLineEdit(
59+
text=f"{self.__center}",
60+
maximumWidth=width, placeholderText="0", alignment=Qt.AlignRight)
61+
self.center_edit.setValidator(QDoubleValidator())
62+
self.center_edit.editingFinished.connect(__on_center_changed)
63+
center_layout.setContentsMargins(0, 0, 0, 0)
64+
center_layout.addWidget(QLabel("Centered at"))
65+
center_layout.addWidget(self.center_edit)
66+
center_layout.addStretch(1)
67+
self.gradient_cb.currentIndexChanged.connect(
68+
self.__update_center_visibility)
69+
else:
70+
self.center_box = None
6371

6472
slider_low = QSlider(
6573
objectName="threshold-low-slider", minimum=0, maximum=100,
@@ -78,7 +86,8 @@ def __init__(self, *args, thresholds=(0.0, 1.0), center=0, **kwargs):
7886
"gradient from the higher end")
7987
)
8088
form.setWidget(0, QFormLayout.SpanningRole, self.gradient_cb)
81-
form.setWidget(1, QFormLayout.SpanningRole, self.center_box)
89+
if self.center_box:
90+
form.setWidget(1, QFormLayout.SpanningRole, self.center_box)
8291
form.addRow(self.tr("Low:"), slider_low)
8392
form.addRow(self.tr("High:"), slider_high)
8493
self.slider_low = slider_low
@@ -98,6 +107,7 @@ def findData(self, data: Any, role: Qt.ItemDataRole) -> int:
98107

99108
def setCurrentIndex(self, index: int) -> None:
100109
self.gradient_cb.setCurrentIndex(index)
110+
self.__update_center_visibility()
101111

102112
def currentIndex(self) -> int:
103113
return self.gradient_cb.currentIndex()
@@ -173,15 +183,15 @@ def setThresholds(self, low: float, high: float) -> None:
173183
self.slider_high.setSliderPosition(high * 100)
174184
self.thresholdsChanged.emit(high, low)
175185

176-
def __on_palette_changed(self):
186+
def __update_center_visibility(self):
187+
if self.center_box is None:
188+
return
189+
177190
palette = self.currentData()
178191
self.center_box.setVisible(
179192
isinstance(palette, colorpalettes.Palette)
180-
and palette.flags & palette.Flags.Diverging)
193+
and palette.flags & palette.Flags.Diverging != 0)
181194

182-
def __on_center_changed(self):
183-
self.__center = float(self.center_edit.text() or "0")
184-
self.centerChanged.emit(self.__center)
185195

186196
def clip(a, amin, amax):
187197
return min(max(a, amin), amax)

0 commit comments

Comments
 (0)