@@ -131,13 +131,14 @@ def __init__( self, scriptNode, **kw ) :
131
131
132
132
self .settings ()["compare" ]["scene" ]["value" ].setInput ( self .settings ()["in" ] )
133
133
134
+ nameColumn = GafferUI .StandardPathColumn ( "Name" , "name" )
134
135
self .__standardColumns = [
135
- GafferUI . StandardPathColumn ( "Name" , "name" ) ,
136
+ nameColumn ,
136
137
GafferSceneUI .Private .InspectorColumn ( "inspector:inspector" , headerData = GafferUI .PathColumn .CellData ( value = "Value" ) ),
137
138
]
138
139
139
140
self .__diffColumns = [
140
- GafferUI . StandardPathColumn ( "Name" , "name" ) ,
141
+ nameColumn ,
141
142
_GafferSceneUI ._SceneInspector .InspectorDiffColumn ( _GafferSceneUI ._SceneInspector .InspectorDiffColumn .DiffContext .A ),
142
143
_GafferSceneUI ._SceneInspector .InspectorDiffColumn ( _GafferSceneUI ._SceneInspector .InspectorDiffColumn .DiffContext .B ),
143
144
]
@@ -176,6 +177,7 @@ def __init__( self, scriptNode, **kw ) :
176
177
displayMode = GafferUI .PathListingWidget .DisplayMode .Tree ,
177
178
sortable = False ,
178
179
)
180
+ self .__locationPathListing .dragBeginSignal ().connectFront ( Gaffer .WeakMethod ( self .__dragBegin ) )
179
181
180
182
with GafferUI .ListContainer ( spacing = 4 , borderWidth = 4 , parenting = { "label" : "Globals" } ) :
181
183
@@ -195,6 +197,7 @@ def __init__( self, scriptNode, **kw ) :
195
197
displayMode = GafferUI .PathListingWidget .DisplayMode .Tree ,
196
198
sortable = False ,
197
199
)
200
+ self .__globalsPathListing .dragBeginSignal ().connectFront ( Gaffer .WeakMethod ( self .__dragBegin ) )
198
201
199
202
GafferSceneUI .ScriptNodeAlgo .selectedPathsChangedSignal ( scriptNode ).connect (
200
203
Gaffer .WeakMethod ( self .__selectedPathsChanged )
@@ -285,6 +288,16 @@ def __updateFilter( self, tree, plug ) :
285
288
286
289
tree .setFilter ( pattern )
287
290
291
+ def __dragBegin ( self , widget , event ) :
292
+
293
+ assert ( widget in ( self .__locationPathListing , self .__globalsPathListing ) )
294
+ # Return leaf names rather than full paths when dragging from the Name column.
295
+ ## \todo Support creation of columns in other editors by dragging attributes/options/etc
296
+ # from the Scene Inspector.
297
+ selection = widget .getSelection ()[0 ]
298
+ if not selection .isEmpty () :
299
+ return IECore .StringVectorData ( [ path .split ( "/" )[- 1 ] for path in selection .paths () ] )
300
+
288
301
GafferUI .Editor .registerType ( "SceneInspector" , SceneInspector )
289
302
290
303
# InspectorTree isn't public API. Expose the `registerInspectors()` function on SceneInspector
@@ -555,9 +568,9 @@ def __init__( self, plug, **kw ) :
555
568
self .__icon ._qtWidget ().setFixedWidth ( 13 )
556
569
self .__icon .buttonPressSignal ().connect ( Gaffer .WeakMethod ( self .__showFocusMenu ) )
557
570
558
- menuButton = GafferUI .Button ( image = "menuIndicator.png" , hasFrame = False , highlightOnOver = False )
559
- menuButton ._qtWidget ().setObjectName ( "menuDownArrow" )
560
- menuButton .buttonPressSignal ().connect ( Gaffer .WeakMethod ( self .__showFocusMenu ) )
571
+ self . __menuButton = GafferUI .Button ( image = "menuIndicator.png" , hasFrame = False , highlightOnOver = False )
572
+ self . __menuButton ._qtWidget ().setObjectName ( "menuDownArrow" )
573
+ self . __menuButton .buttonPressSignal ().connect ( Gaffer .WeakMethod ( self .__showFocusMenu ) )
561
574
562
575
self .__nodeSetChangedSignal = GafferUI .WidgetSignal ()
563
576
@@ -604,6 +617,11 @@ def nodeSetChangedSignal( self ) :
604
617
605
618
return self .__nodeSetChangedSignal
606
619
620
+ def setHighlighted ( self , highlighted ) :
621
+
622
+ self .__icon .setHighlighted ( highlighted )
623
+ self .__menuButton .setHighlighted ( highlighted )
624
+
607
625
def __updateInput ( self , * unused ) :
608
626
609
627
input = None
@@ -745,8 +763,50 @@ def __init__( self, plug, **kw ) :
745
763
746
764
with row :
747
765
labelWidget = _InputLabelWidget ()
748
- focusWidget = _FocusPlugValueWidget ( plug )
749
- labelWidget .connectToNodeSetWidget ( focusWidget )
766
+ self .__focusWidget = _FocusPlugValueWidget ( plug )
767
+ labelWidget .connectToNodeSetWidget ( self .__focusWidget )
768
+
769
+ self .dragEnterSignal ().connectFront ( Gaffer .WeakMethod ( self .__dragEnter ) )
770
+ self .dragLeaveSignal ().connectFront ( Gaffer .WeakMethod ( self .__dragLeave ) )
771
+ self .dropSignal ().connectFront ( Gaffer .WeakMethod ( self .__drop ) )
772
+
773
+ def __dropNode ( self , event ) :
774
+
775
+ if isinstance ( event .data , Gaffer .Node ) :
776
+ return event .data
777
+ elif isinstance ( event .data , Gaffer .Set ) :
778
+ for node in reversed ( event .data ):
779
+ if isinstance ( node , Gaffer .Node ) :
780
+ return node
781
+ else :
782
+ return None
783
+
784
+ def __dragEnter ( self , widget , event ) :
785
+
786
+ if self .isAncestorOf ( event .sourceWidget ) :
787
+ return False
788
+
789
+ if self .__dropNode ( event ) :
790
+ self .__focusWidget .setHighlighted ( True )
791
+
792
+ return True
793
+
794
+ def __dragLeave ( self , widget , event ) :
795
+
796
+ self .__focusWidget .setHighlighted ( False )
797
+
798
+ return True
799
+
800
+ def __drop ( self , widget , event ) :
801
+
802
+ node = self .__dropNode ( event )
803
+
804
+ if node :
805
+ self .__focusWidget .setNodeSet ( nodeSet = Gaffer .StandardSet ( [ node ] ) )
806
+
807
+ self .__focusWidget .setHighlighted ( False )
808
+
809
+ return True
750
810
751
811
# Simple widget that just displays the `renderPass` variable from
752
812
# the current context.
0 commit comments