1010 NODE_PROP_QSPINBOX ,
1111 NODE_PROP_COLORPICKER ,
1212 NODE_PROP_SLIDER ,
13- NODE_PROP_FILE )
13+ NODE_PROP_FILE ,
14+ NODE_PROP_VECTOR2 ,
15+ NODE_PROP_VECTOR3 ,
16+ NODE_PROP_VECTOR4 ,
17+ NODE_PROP_FLOAT ,
18+ NODE_PROP_INT )
1419from NodeGraphQt .widgets .file_dialog import file_dialog
1520
1621
@@ -68,8 +73,6 @@ def __init__(self, parent=None):
6873 layout .addWidget (self ._label , 0 , QtCore .Qt .AlignCenter )
6974 layout .addWidget (self ._button , 1 , QtCore .Qt .AlignLeft )
7075
71- self ._label .setStyleSheet ('QLabel {color: rgba(255, 255, 255, 150);}' )
72-
7376 def _on_select_color (self ):
7477 color = QtWidgets .QColorDialog .getColor (QtGui .QColor (* self .get_value ()),options = QtWidgets .QColorDialog .ShowAlphaChannel )
7578 if color .isValid ():
@@ -180,22 +183,10 @@ class PropLineEdit(QtWidgets.QLineEdit):
180183
181184 def __init__ (self , parent = None ):
182185 super (PropLineEdit , self ).__init__ (parent )
183- self .__prev_text = ''
184- self .editingFinished .connect (self ._on_return_pressed )
185-
186- def focusInEvent (self , event ):
187- super (PropLineEdit , self ).focusInEvent (event )
188- self .__prev_text = self .text ()
186+ self .editingFinished .connect (self ._on_editing_finished )
189187
190- def focusOutEvent (self , event ):
191- super (PropLineEdit , self ).focusOutEvent (event )
192- if self .__prev_text != self .text ():
193- self .value_changed .emit (self .toolTip (), self .text ())
194- self .__prev_text = ''
195-
196- def _on_return_pressed (self ):
197- if self .__prev_text != self .text ():
198- self .value_changed .emit (self .toolTip (), self .text ())
188+ def _on_editing_finished (self ):
189+ self .value_changed .emit (self .toolTip (), self .text ())
199190
200191 def get_value (self ):
201192 return self .text ()
@@ -225,9 +216,6 @@ def focusOutEvent(self, event):
225216 self .value_changed .emit (self .toolTip (), self .toPlainText ())
226217 self .__prev_text = ''
227218
228- def _on_return_pressed (self ):
229- self .value_changed .emit (self .toolTip (), self .get_value ())
230-
231219 def get_value (self ):
232220 return self .toPlainText ()
233221
@@ -350,6 +338,115 @@ def set_value(self, value):
350338 self ._on_value_change (_value )
351339
352340
341+ class PropVector (BaseProperty ):
342+ def __init__ (self , parent = None ,dim = 3 ):
343+ super (PropVector , self ).__init__ (parent )
344+ hbox = QtWidgets .QHBoxLayout ()
345+ self ._value = []
346+ self ._items = []
347+
348+ for i in range (dim ):
349+ self ._add_item (i , hbox )
350+
351+ self ._can_emit = True
352+ self .setLayout (hbox )
353+
354+ def _add_item (self ,index ,hbox ):
355+ _ledit = QtWidgets .QLineEdit ()
356+ _ledit .index = index
357+ _ledit .setText ("0" )
358+ _ledit .setAlignment (QtCore .Qt .AlignLeft )
359+ _ledit .editingFinished .connect (lambda : self ._on_value_change (_ledit .text (), _ledit .index ))
360+ _ledit .setValidator (QtGui .QDoubleValidator ())
361+ _ledit .setStyleSheet ("QLineEdit{border:1px solid}" )
362+
363+ hbox .addWidget (_ledit )
364+ self ._value .append (0.0 )
365+ self ._items .append (_ledit )
366+
367+ def _on_value_change (self , value = None ,index = None ):
368+ if self ._can_emit :
369+ if index is not None :
370+ self ._value [index ] = float (value )
371+
372+ self .value_changed .emit (self .toolTip (), self ._value )
373+
374+ def _update_items (self ):
375+ for index ,value in enumerate (self ._value ):
376+ if float (self ._items [index ].text ()) != value :
377+ self ._items [index ].setText (str (value ))
378+
379+ def get_value (self ):
380+ return self ._value
381+
382+ def set_value (self , value ):
383+ if value != self .get_value ():
384+ self ._value = value .copy ()
385+ self ._can_emit = False
386+ self ._update_items ()
387+ self ._can_emit = True
388+ self ._on_value_change ()
389+
390+
391+ class PropVector2 (PropVector ):
392+ def __init__ (self ,parent = None ):
393+ super (PropVector2 ,self ).__init__ (parent ,2 )
394+
395+
396+ class PropVector3 (PropVector ):
397+ def __init__ (self ,parent = None ):
398+ super (PropVector3 ,self ).__init__ (parent ,3 )
399+
400+
401+ class PropVector4 (PropVector ):
402+ def __init__ (self ,parent = None ):
403+ super (PropVector4 ,self ).__init__ (parent ,4 )
404+
405+
406+ class PropFloat (QtWidgets .QLineEdit ):
407+
408+ value_changed = QtCore .Signal (str , object )
409+
410+ def __init__ (self , parent = None ):
411+ super (PropFloat , self ).__init__ (parent )
412+ self .setText ("0.0" )
413+ self .setValidator (QtGui .QDoubleValidator ())
414+ self .editingFinished .connect (self ._on_editing_finished )
415+
416+ def _on_editing_finished (self ):
417+ self .value_changed .emit (self .toolTip (), float (self .text ()))
418+
419+ def get_value (self ):
420+ return float (self .text ())
421+
422+ def set_value (self , value ):
423+ if value != self .get_value ():
424+ self .setText (str (value ))
425+ self .value_changed .emit (self .toolTip (), value )
426+
427+
428+ class PropInt (QtWidgets .QLineEdit ):
429+
430+ value_changed = QtCore .Signal (str , object )
431+
432+ def __init__ (self , parent = None ):
433+ super (PropInt , self ).__init__ (parent )
434+ self .setText ("0" )
435+ self .setValidator (QtGui .QIntValidator ())
436+ self .editingFinished .connect (self ._on_editing_finished )
437+
438+ def _on_editing_finished (self ):
439+ self .value_changed .emit (self .toolTip (), int (self .text ()))
440+
441+ def get_value (self ):
442+ return int (self .text ())
443+
444+ def set_value (self , value ):
445+ if value != self .get_value ():
446+ self .setText (str (value ))
447+ self .value_changed .emit (self .toolTip (), value )
448+
449+
353450WIDGET_MAP = {
354451 NODE_PROP_QLABEL : PropLabel ,
355452 NODE_PROP_QLINEEDIT : PropLineEdit ,
@@ -359,7 +456,12 @@ def set_value(self, value):
359456 NODE_PROP_QSPINBOX : PropSpinBox ,
360457 NODE_PROP_COLORPICKER : PropColorPicker ,
361458 NODE_PROP_SLIDER : PropSlider ,
362- NODE_PROP_FILE : PropFilePath
459+ NODE_PROP_FILE : PropFilePath ,
460+ NODE_PROP_VECTOR2 : PropVector2 ,
461+ NODE_PROP_VECTOR3 : PropVector3 ,
462+ NODE_PROP_VECTOR4 : PropVector4 ,
463+ NODE_PROP_FLOAT : PropFloat ,
464+ NODE_PROP_INT : PropInt ,
363465}
364466
365467
0 commit comments