99 NODE_PROP_QCHECKBOX ,
1010 NODE_PROP_QSPINBOX ,
1111 NODE_PROP_COLORPICKER ,
12- NODE_PROP_SLIDER )
12+ NODE_PROP_SLIDER ,
13+ NODE_PROP_FILE )
14+ from NodeGraphQt .widgets .file_dialog import file_dialog
1315
1416
1517class BaseProperty (QtWidgets .QWidget ):
@@ -199,9 +201,10 @@ def get_value(self):
199201 return self .text ()
200202
201203 def set_value (self , value ):
202- if value != self .get_value ():
203- self .setText (str (value ))
204- self .value_changed .emit (self .toolTip (), value )
204+ _value = str (value )
205+ if _value != self .get_value ():
206+ self .setText (_value )
207+ self .value_changed .emit (self .toolTip (), _value )
205208
206209
207210class PropTextEdit (QtWidgets .QTextEdit ):
@@ -229,9 +232,10 @@ def get_value(self):
229232 return self .toPlainText ()
230233
231234 def set_value (self , value ):
232- if value != self .get_value ():
233- self .setPlainText (value )
234- self .value_changed .emit (self .toolTip (), value )
235+ _value = str (value )
236+ if _value != self .get_value ():
237+ self .setPlainText (_value )
238+ self .value_changed .emit (self .toolTip (), _value )
235239
236240
237241class PropComboBox (QtWidgets .QComboBox ):
@@ -303,6 +307,49 @@ def set_value(self, value):
303307 self .setValue (value )
304308
305309
310+ class PropFilePath (QtWidgets .QWidget ):
311+
312+ value_changed = QtCore .Signal (str , object )
313+
314+ def __init__ (self , parent = None ):
315+ super (PropFilePath , self ).__init__ (parent )
316+ self ._ledit = QtWidgets .QLineEdit ()
317+ self ._ledit .setAlignment (QtCore .Qt .AlignLeft )
318+ self ._ledit .editingFinished .connect (self ._on_value_change )
319+ self ._ledit .clearFocus ()
320+
321+ icon = self .style ().standardIcon (QtWidgets .QStyle .StandardPixmap (21 ))
322+ _button = QtWidgets .QPushButton ()
323+ _button .setIcon (icon )
324+
325+ hbox = QtWidgets .QHBoxLayout ()
326+ hbox .addWidget (self ._ledit )
327+ hbox .addWidget (_button )
328+ self .setLayout (hbox )
329+ _button .clicked .connect (self ._on_select_file )
330+
331+ self ._ledit .setStyleSheet ("QLineEdit{border:1px solid}" )
332+ _button .setStyleSheet ("QPushButton{border:1px solid}" )
333+
334+ def _on_select_file (self ):
335+ file_path = file_dialog .getOpenFileName (self )
336+ file = file_path [0 ] or None
337+ if file :
338+ self .set_value (file )
339+
340+ def _on_value_change (self , value ):
341+ self .value_changed .emit (self .toolTip (), value )
342+
343+ def get_value (self ):
344+ return self ._ledit .text ()
345+
346+ def set_value (self , value ):
347+ _value = str (value )
348+ if _value != self .get_value ():
349+ self ._ledit .setText (_value )
350+ self ._on_value_change (_value )
351+
352+
306353WIDGET_MAP = {
307354 NODE_PROP_QLABEL : PropLabel ,
308355 NODE_PROP_QLINEEDIT : PropLineEdit ,
@@ -312,6 +359,7 @@ def set_value(self, value):
312359 NODE_PROP_QSPINBOX : PropSpinBox ,
313360 NODE_PROP_COLORPICKER : PropColorPicker ,
314361 NODE_PROP_SLIDER : PropSlider ,
362+ NODE_PROP_FILE : PropFilePath
315363}
316364
317365
@@ -463,7 +511,7 @@ def _read_node(self, node):
463511 if tab != 'Node' :
464512 self .add_tab (tab )
465513
466- widget_height = 25
514+ min_widget_height = 25
467515 # populate tab properties.
468516 for tab in sorted (tab_mapping .keys ()):
469517 prop_window = self .__tab_windows [tab ]
@@ -474,8 +522,7 @@ def _read_node(self, node):
474522
475523 WidClass = WIDGET_MAP .get (wid_type )
476524 widget = WidClass ()
477- if wid_type != NODE_PROP_QTEXTEDIT :
478- widget .setFixedHeight (widget_height )
525+ widget .setMinimumHeight (min_widget_height )
479526 if prop_name in common_props .keys ():
480527 if 'items' in common_props [prop_name ].keys ():
481528 widget .set_items (common_props [prop_name ]['items' ])
@@ -497,7 +544,7 @@ def _read_node(self, node):
497544 WidClass = WIDGET_MAP .get (wid_type )
498545
499546 widget = WidClass ()
500- widget .setFixedHeight ( widget_height )
547+ widget .setMinimumHeight ( min_widget_height )
501548 prop_window .add_widget (prop_name ,
502549 widget ,
503550 model .get_property (prop_name ),
0 commit comments