@@ -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
186196def clip (a , amin , amax ):
187197 return min (max (a , amin ), amax )
0 commit comments