From 76ee0c396d79a7462e2935b3449170a69b787cc7 Mon Sep 17 00:00:00 2001 From: Murray Stevenson <50844517+murraystevenson@users.noreply.github.com> Date: Fri, 9 Aug 2024 16:31:28 -0700 Subject: [PATCH 1/2] UIEditor : Add support for editing `iconScale` node metadata --- Changes.md | 8 ++++++ python/GafferUI/MetadataWidget.py | 44 +++++++++++++++++++++++++++++-- python/GafferUI/UIEditor.py | 6 +++++ 3 files changed, 56 insertions(+), 2 deletions(-) diff --git a/Changes.md b/Changes.md index 489da23c28b..2a0c99a8ca2 100644 --- a/Changes.md +++ b/Changes.md @@ -1,7 +1,15 @@ 1.4.x.x (relative to 1.4.11.0) ======= +Improvements +------------ + +- UI Editor : Added the ability to edit the scale of node icons. + +API +--- +- MetadataWidget : Added `NumericMetadataWidget` class. 1.4.11.0 (relative to 1.4.10.0) ======== diff --git a/python/GafferUI/MetadataWidget.py b/python/GafferUI/MetadataWidget.py index 8f7ce719f14..447a8926489 100644 --- a/python/GafferUI/MetadataWidget.py +++ b/python/GafferUI/MetadataWidget.py @@ -109,12 +109,12 @@ def _updateFromValue( self, value ) : ## Must be called by derived classes to update # the Metadata value when the widget value changes. - def _updateFromWidget( self, value ) : + def _updateFromWidget( self, value, mergeGroup = "" ) : if self.__target is None : return - with Gaffer.UndoScope( self.__target.ancestor( Gaffer.ScriptNode ) ) : + with Gaffer.UndoScope( self.__target.ancestor( Gaffer.ScriptNode ), mergeGroup = mergeGroup ) : Gaffer.Metadata.registerValue( self.__target, self.__key, value ) ## May be called by derived classes to deregister the @@ -347,3 +347,43 @@ def __buttonClicked( self, widget ) : if chosenPath is not None : self.__path.setFromString( str( chosenPath ) ) self.__editingFinished() + +class NumericMetadataWidget( MetadataWidget ) : + + def __init__( self, key, target = None, defaultValue = 0, **kw ) : + + self.__numericWidget = GafferUI.NumericWidget( value = defaultValue ) + + self.__defaultValue = defaultValue + # we use these to decide which actions to merge into a single undo + self.__lastChangedReason = None + self.__mergeGroupId = 0 + + MetadataWidget.__init__( self, self.__numericWidget, key, target, defaultValue = defaultValue, **kw ) + + self.__numericWidget.valueChangedSignal().connect( + Gaffer.WeakMethod( self.__valueChanged ), scoped = False + ) + + def numericWidget( self ) : + + return self.__numericWidget + + def _updateFromValue( self, value ) : + + self.__numericWidget.setValue( type( self.__defaultValue )( value ) ) + + def __valueChanged( self, widget, reason ) : + + if reason == GafferUI.NumericWidget.ValueChangedReason.InvalidEdit : + self._updateFromValue( self.defaultValue() ) + return + + if not widget.changesShouldBeMerged( self.__lastChangedReason, reason ) : + self.__mergeGroupId += 1 + self.__lastChangedReason = reason + + self._updateFromWidget( + self.__numericWidget.getValue(), + mergeGroup = "NumericMetadataWidget{}{}".format( id( self, ), self.__mergeGroupId ) + ) diff --git a/python/GafferUI/UIEditor.py b/python/GafferUI/UIEditor.py index d794cce4e25..19aa629ce4d 100644 --- a/python/GafferUI/UIEditor.py +++ b/python/GafferUI/UIEditor.py @@ -111,6 +111,12 @@ def __init__( self, scriptNode, **kw ) : MetadataWidget.FileSystemPathMetadataWidget( key = "icon" ) ) + GafferUI.Label( "Scale" ) + + scaleWidget = MetadataWidget.NumericMetadataWidget( key = "iconScale", defaultValue = 1.5 ) + scaleWidget.numericWidget()._qtWidget().setMaximumWidth( 60 ) + self.__nodeMetadataWidgets.append( scaleWidget ) + with _Row() as self.__plugAddButtons : _Label( "Plug Creators" ) From c4134820cb007aa60da9b2714c7955f405b5157b Mon Sep 17 00:00:00 2001 From: Murray Stevenson <50844517+murraystevenson@users.noreply.github.com> Date: Mon, 19 Aug 2024 15:47:04 -0700 Subject: [PATCH 2/2] UIEditor : Improve layout of Box node plug creator toggles --- Changes.md | 4 +++- python/GafferUI/UIEditor.py | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Changes.md b/Changes.md index 2a0c99a8ca2..63dfbc55e09 100644 --- a/Changes.md +++ b/Changes.md @@ -4,7 +4,9 @@ Improvements ------------ -- UI Editor : Added the ability to edit the scale of node icons. +- UI Editor : + - Added the ability to edit the scale of node icons. + - Improved layout of Box node plug creator visibility toggles. API --- diff --git a/python/GafferUI/UIEditor.py b/python/GafferUI/UIEditor.py index 19aa629ce4d..53263895b09 100644 --- a/python/GafferUI/UIEditor.py +++ b/python/GafferUI/UIEditor.py @@ -122,7 +122,7 @@ def __init__( self, scriptNode, **kw ) : _Label( "Plug Creators" ) for side in ( "Top", "Bottom", "Left", "Right" ) : - _Label( side )._qtWidget().setFixedWidth( 40 ) + GafferUI.Label( side ) self.__nodeMetadataWidgets.append( MetadataWidget.BoolMetadataWidget( key = "noduleLayout:customGadget:addButton%s:visible" % side, defaultValue = True @@ -406,7 +406,7 @@ class _Row( GafferUI.ListContainer ) : def __init__( self, *args, **kw ) : - GafferUI.ListContainer.__init__( self, GafferUI.ListContainer.Orientation.Horizontal, spacing = 4, *args, **kw ) + GafferUI.ListContainer.__init__( self, GafferUI.ListContainer.Orientation.Horizontal, spacing = 8, *args, **kw ) ########################################################################## # Hierarchical representation of a plug layout, suitable for manipulating