def testDeleteMultipleCells(self): b00 = GafferUI.Button("00") b01 = GafferUI.Button("01") b11 = GafferUI.Button("11") b10 = GafferUI.Button("10") g = GafferUI.GridContainer() g[0, 0] = b00 g[0, 1] = b01 g[1, 1] = b11 g[1, 0] = b10 self.assertEqual(g.gridSize(), IECore.V2i(2, 2)) del g[0:2, 0] self.assertEqual(g.gridSize(), IECore.V2i(2, 2)) self.failUnless(g[0, 0] is None) self.failUnless(g[1, 0] is None) self.failUnless(g[0, 1] is b01) self.failUnless(g[1, 1] is b11) self.failUnless(b00.parent() is None) self.failUnless(b10.parent() is None)
def __init__( self, plug, **kw ) : grid = GafferUI.GridContainer( spacing = 4 ) GafferUI.PlugValueWidget.__init__( self, grid, plug, **kw ) self.__menuButton = GafferUI.MenuButton( menu = GafferUI.Menu( Gaffer.WeakMethod( self.__menuDefinition ) ) ) grid[0:2,0] = self.__menuButton self.__minLabel = GafferUI.Label( "Min" ) grid.addChild( self.__minLabel, index = ( 0, 1 ), alignment = ( GafferUI.HorizontalAlignment.Right, GafferUI.VerticalAlignment.Center ) ) self.__minWidget = GafferUI.CompoundNumericPlugValueWidget( plug["displayWindow"]["min"] ) grid[1,1] = self.__minWidget self.__maxLabel = GafferUI.Label( "Max" ) grid.addChild( self.__maxLabel, index = ( 0, 2 ), alignment = ( GafferUI.HorizontalAlignment.Right, GafferUI.VerticalAlignment.Center ) ) self.__maxWidget = GafferUI.CompoundNumericPlugValueWidget( plug["displayWindow"]["max"] ) grid[1,2] = self.__maxWidget self.__pixelAspectLabel = GafferUI.Label( "Pixel Aspect" ) grid.addChild( self.__pixelAspectLabel, index = ( 0, 3 ), alignment = ( GafferUI.HorizontalAlignment.Right, GafferUI.VerticalAlignment.Center ) ) self.__pixelAspectWidget = GafferUI.NumericPlugValueWidget( plug["pixelAspect"] ) grid[1,3] = self.__pixelAspectWidget # If the plug hasn't got an input, the PlugValueWidget base class assumes we're not # sensitive to contex changes and omits calls to _updateFromPlug(). But the default # format mechanism uses the context, so we must arrange to do updates ourselves when # necessary. self.__contextChangedConnection = self.getContext().changedSignal().connect( Gaffer.WeakMethod( self.__contextChanged ) ) self._addPopupMenu( self.__menuButton ) self._updateFromPlug()
def __init__( self, parameter ) : self.__parameter = parameter grid = GafferUI.GridContainer( spacing = 2 ) GafferUI.Widget.__init__( self, grid ) self.__inspectors = [] with grid : label = GafferUI.Label( ## \todo Prettify label text (remove snake case) text = "<h5>" + IECore.CamelCase.toSpaced( parameter ) + "</h5>", parenting = { "index" : ( slice( 0, 2 ), 0 ) } ) label._qtWidget().setMaximumWidth( 140 ) self.__editButton = GafferUI.Button( image = "editOff.png", hasFrame = False, parenting = { "index" : ( 0, 1 ), "alignment" : ( GafferUI.HorizontalAlignment.Center, GafferUI.VerticalAlignment.Center ) } ) self.__editButton.clickedSignal().connect( Gaffer.WeakMethod( self.__editButtonClicked ), scoped = False ) self.__valueWidget = _ValueWidget( parenting = { "index" : ( 1, 1 ) } ) self.__valueWidget.buttonReleaseSignal().connect( Gaffer.WeakMethod( self.__valueWidgetClicked ), scoped = False ) self.update( [] )
def testDeleteMultipleCells( self ) : b00 = GafferUI.Button( "00" ) b01 = GafferUI.Button( "01" ) b11 = GafferUI.Button( "11" ) b10 = GafferUI.Button( "10" ) g = GafferUI.GridContainer() g[0,0] = b00 g[0,1] = b01 g[1,1] = b11 g[1,0] = b10 self.assertEqual( g.gridSize(), imath.V2i( 2, 2 ) ) del g[0:2,0] self.assertEqual( g.gridSize(), imath.V2i( 2, 2 ) ) self.assertIsNone( g[0,0] ) self.assertIsNone( g[1,0] ) self.assertTrue( g[0,1] is b01 ) self.assertTrue( g[1,1] is b11 ) self.assertIsNone( b00.parent() ) self.assertIsNone( b10.parent() )
def testGridSize(self): c1 = GafferUI.GridContainer() b1 = GafferUI.Button("b1") b2 = GafferUI.Button("b2") self.assertEqual(c1.gridSize(), IECore.V2i(0, 0)) c1[0, 0] = b1 self.assertEqual(c1.gridSize(), IECore.V2i(1, 1)) c1[1, 0] = b2 self.assertEqual(c1.gridSize(), IECore.V2i(2, 1)) del c1[1, 0] self.assertEqual(c1.gridSize(), IECore.V2i(1, 1)) del c1[0, 0] self.assertEqual(c1.gridSize(), IECore.V2i(0, 0)) c1[1, 0] = b2 self.assertEqual(c1.gridSize(), IECore.V2i(2, 1)) del c1[1, 0] self.assertEqual(c1.gridSize(), IECore.V2i(0, 0))
def testTransferChild( self ) : c1 = GafferUI.GridContainer() c2 = GafferUI.GridContainer() b1 = GafferUI.Button( "b1" ) c1[0,0] = b1 self.assertTrue( b1.parent() is c1 ) self.assertTrue( c1[0,0] is b1 ) c2[0,0] = b1 self.assertTrue( b1.parent() is c2 ) self.assertIsNone( c1[0,0] ) self.assertTrue( c2[0,0] is b1 )
def testTransferChild(self): c1 = GafferUI.GridContainer() c2 = GafferUI.GridContainer() b1 = GafferUI.Button("b1") c1[0, 0] = b1 self.failUnless(b1.parent() is c1) self.failUnless(c1[0, 0] is b1) c2[0, 0] = b1 self.failUnless(b1.parent() is c2) self.failUnless(c1[0, 0] is None) self.failUnless(c2[0, 0] is b1)
def __init__(self, pathFilter, **kw): self.__grid = GafferUI.GridContainer(spacing=4) GafferUI.PathFilterWidget.__init__(self, self.__grid, pathFilter, **kw) self.__filters = [] self._updateFromPathFilter()
def testSimpleSetItem(self): c = GafferUI.GridContainer() b1 = GafferUI.Button("b1") b2 = GafferUI.Button("b2") b3 = GafferUI.Button("b3") b4 = GafferUI.Button("b4") self.assertEqual(b1.parent(), None) self.assertEqual(b2.parent(), None) self.assertEqual(b3.parent(), None) self.assertEqual(b4.parent(), None) self.assertEqual(c.gridSize(), IECore.V2i(0, 0)) c[0, 0] = b1 self.assertEqual(c.gridSize(), IECore.V2i(1, 1)) self.failUnless(b1.parent() is c) self.failUnless(c[0, 0] is b1) c[1, 0] = b2 self.assertEqual(c.gridSize(), IECore.V2i(2, 1)) self.failUnless(b1.parent() is c) self.failUnless(b2.parent() is c) self.failUnless(c[0, 0] is b1) self.failUnless(c[1, 0] is b2) c[0, 1] = b3 self.assertEqual(c.gridSize(), IECore.V2i(2, 2)) self.failUnless(b1.parent() is c) self.failUnless(b2.parent() is c) self.failUnless(b3.parent() is c) self.failUnless(c[0, 0] is b1) self.failUnless(c[1, 0] is b2) self.failUnless(c[0, 1] is b3) c[1, 1] = b4 self.assertEqual(c.gridSize(), IECore.V2i(2, 2)) self.failUnless(b1.parent() is c) self.failUnless(b2.parent() is c) self.failUnless(b3.parent() is c) self.failUnless(b4.parent() is c) self.failUnless(c[0, 0] is b1) self.failUnless(c[1, 0] is b2) self.failUnless(c[0, 1] is b3) self.failUnless(c[1, 1] is b4)
def __init__( self, scope, **kw ) : GafferUI.Dialogue.__init__( self, "", sizeMode = self.SizeMode.Automatic, **kw ) with GafferUI.GridContainer( spacing = 4 ) as grid : # criteria row GafferUI.Label( "Find", parenting = { "index" : ( 0, 0 ), "alignment" : ( GafferUI.HorizontalAlignment.Right, GafferUI.VerticalAlignment.Center ), } ) self.__matchString = GafferUI.MultiSelectionMenu( allowMultipleSelection = False, allowEmptySelection = False, parenting = { "index" : ( 1, 0 ) } ) # match text row GafferUI.Label( "Matching", parenting = { "index" : ( 0, 2 ), "alignment" : ( GafferUI.HorizontalAlignment.Right, GafferUI.VerticalAlignment.Center ), } ) self.__matchPattern = GafferUI.TextWidget( parenting = { "index" : ( 1, 2 ) } ) self.__matchPattern.setToolTip( "Use * to match any text and ? to match any single character.\nDrag a node here to get the text for selecting similar nodes." ) self.__dragEnterConnection = self.__matchPattern.dragEnterSignal().connect( Gaffer.WeakMethod( self.__dragEnter ) ) self.__dragLeaveConnection = self.__matchPattern.dragLeaveSignal().connect( Gaffer.WeakMethod( self.__dragLeave ) ) self.__dropConnection = self.__matchPattern.dropSignal().connect( Gaffer.WeakMethod( self.__drop ) ) self._setWidget( grid ) self.__cancelButton = self._addButton( "Cancel" ) self.__selectNextButton = self._addButton( "Select Next" ) self.__selectAllButton = self._addButton( "Select All" ) self.__activatedConnection = self.__matchPattern.activatedSignal().connect( Gaffer.WeakMethod( self.__activated ) ) self.__cancelButtonClickedSignal = self.__cancelButton.clickedSignal().connect( Gaffer.WeakMethod( self.__buttonClicked ) ) self.__selectNextButtonClickedSignal = self.__selectNextButton.clickedSignal().connect( Gaffer.WeakMethod( self.__buttonClicked ) ) self.__selectAllButtonClickedSignal = self.__selectAllButton.clickedSignal().connect( Gaffer.WeakMethod( self.__buttonClicked ) ) self.__visibilityChangedConnection = self.visibilityChangedSignal().connect( Gaffer.WeakMethod( self.__visibilityChanged ) ) self.__scope = None self.setScope( scope )
def testAutomaticParenting(self): with GafferUI.GridContainer() as g: b = GafferUI.Button("hi", parenting={"index": (1, 2)}) t = GafferUI.TextWidget("hi", parenting={"index": (0, 0)}) self.failUnless(b.parent() is g) self.failUnless(t.parent() is g) self.failUnless(g[1, 2] is b) self.failUnless(g[0, 0] is t)
def __init__(self, plug, **kw): self.__grid = GafferUI.GridContainer(spacing=4) GafferUI.PlugValueWidget.__init__(self, self.__grid, plug, **kw) with self.__grid: for x in range(0, 10): for y in range(0, 3): GafferUI.ColorSwatch(parenting={"index": (x, y)}) self._updateFromPlug()
def testRemoveChild(self): c1 = GafferUI.GridContainer() b1 = GafferUI.Button("b1") c1[0, 0] = b1 self.failUnless(b1.parent() is c1) self.failUnless(c1[0, 0] is b1) c1.removeChild(b1) self.failUnless(b1.parent() is None) self.failUnless(c1[0, 0] is None)
def testRemoveRowContainingMultiCellChild( self ) : g = GafferUI.GridContainer() b1 = GafferUI.Button() g[0:2,0:2] = b1 self.assertEqual( g.gridSize(), imath.V2i( 2, 2 ) ) g.removeRow( 0 ) self.assertIsNone( b1.parent() ) self.assertEqual( g.gridSize(), imath.V2i( 0, 0 ) )
def testDelItem( self ) : c1 = GafferUI.GridContainer() b1 = GafferUI.Button( "b1" ) c1[0,0] = b1 self.assertTrue( b1.parent() is c1 ) self.assertTrue( c1[0,0] is b1 ) del c1[0,0] self.assertIsNone( b1.parent() ) self.assertIsNone( c1[0,0] )
def testRemoveChild( self ) : c1 = GafferUI.GridContainer() b1 = GafferUI.Button( "b1" ) c1[0,0] = b1 self.assertTrue( b1.parent() is c1 ) self.assertTrue( c1[0,0] is b1 ) c1.removeChild( b1 ) self.assertIsNone( b1.parent() ) self.assertIsNone( c1[0,0] )
def testDelItem(self): c1 = GafferUI.GridContainer() b1 = GafferUI.Button("b1") c1[0, 0] = b1 self.failUnless(b1.parent() is c1) self.failUnless(c1[0, 0] is b1) del c1[0, 0] self.failUnless(b1.parent() is None) self.failUnless(c1[0, 0] is None)
def testRemoveColumnContainingMultiCellChild(self): g = GafferUI.GridContainer() b1 = GafferUI.Button() g[0:2, 0:2] = b1 self.assertEqual(g.gridSize(), IECore.V2i(2, 2)) g.removeColumn(0) self.failUnless(b1.parent() is None) self.assertEqual(g.gridSize(), IECore.V2i(0, 0))
def __init__( self, previewWidget, node, **kw ) : self.__grid = GafferUI.GridContainer( spacing = 4 ) GafferUI.Widget.__init__( self, self.__grid, **kw ) self.__grid[0,0] = GafferUI.Spacer( IECore.V2i( GafferUI.PlugWidget.labelWidth(), 1 ), IECore.V2i( GafferUI.PlugWidget.labelWidth(), 1 ), ) self.__grid[1,0] = previewWidget previewWidget.setToolTip( "The values generated by the wedge" ) self.__node = node self.__plugDirtiedConnection = node.plugDirtiedSignal().connect( Gaffer.WeakMethod( self.__plugDirtied ) )
def __init__( self, **kw ) : self.__grid = GafferUI.GridContainer() GafferUI.Widget.__init__( self, self.__grid, **kw ) with self.__grid : for i in range( 0, 2 ) : frame = GafferUI.Frame( borderWidth = 4, borderStyle = GafferUI.Frame.BorderStyle.None, parenting = { "index" : ( 0, i ) } ) ## \todo Should we provide frame types via methods on the # Frame class? Are DiffA/DiffB types for a frame a bit too # specialised? frame._qtWidget().setObjectName( "gafferDiffA" if i == 0 else "gafferDiffB" )
def testOverlayWidgetAt( self ) : w = GafferUI.Window() g = GafferUI.GLWidget() c = GafferUI.GridContainer() b = GafferUI.Button() w.setChild( g ) g.addOverlay( c ) c.addChild( b, alignment = ( GafferUI.HorizontalAlignment.None_, GafferUI.VerticalAlignment.Top ) ) w.setVisible( True ) self.waitForIdle( 10000 ) self.assertTrue( GafferUI.Widget.widgetAt( w.bound().min() + imath.V2i( 4 ) ) is b )
def testSetChildOnTopOfMultiCellChild( self ) : g = GafferUI.GridContainer() b1 = GafferUI.Button() b2 = GafferUI.Button() g[0:2,0:2] = b1 self.assertTrue( b1.parent() is g ) self.assertEqual( g.gridSize(), imath.V2i( 2, 2 ) ) g[0,0] = b2 self.assertIsNone( b1.parent() ) self.assertTrue( b2.parent() is g ) self.assertEqual( g.gridSize(), imath.V2i( 1, 1 ) )
def testSetChildOnTopOfMultiCellChild(self): g = GafferUI.GridContainer() b1 = GafferUI.Button() b2 = GafferUI.Button() g[0:2, 0:2] = b1 self.failUnless(b1.parent() is g) self.assertEqual(g.gridSize(), IECore.V2i(2, 2)) g[0, 0] = b2 self.failUnless(b1.parent() is None) self.failUnless(b2.parent() is g) self.assertEqual(g.gridSize(), IECore.V2i(1, 1))
def testReplaceItem( self ) : c = GafferUI.GridContainer() b1 = GafferUI.Button() b2 = GafferUI.Button() self.assertIsNone( b1.parent() ) self.assertIsNone( b2.parent() ) c[0,0] = b1 self.assertTrue( b1.parent() is c ) self.assertIsNone( b2.parent() ) c[0,0] = b2 self.assertIsNone( b1.parent() ) self.assertTrue( b2.parent() is c )
def testReplaceItem(self): c = GafferUI.GridContainer() b1 = GafferUI.Button() b2 = GafferUI.Button() self.failUnless(b1.parent() is None) self.failUnless(b2.parent() is None) c[0, 0] = b1 self.failUnless(b1.parent() is c) self.failUnless(b2.parent() is None) c[0, 0] = b2 self.failUnless(b1.parent() is None) self.failUnless(b2.parent() is c)
def testMultiCellChild( self ) : g = GafferUI.GridContainer() b1 = GafferUI.Button() g[0:2,0:2] = b1 self.assertTrue( b1.parent() is g ) self.assertEqual( g.gridSize(), imath.V2i( 2, 2 ) ) self.assertTrue( g[0,0] is b1 ) self.assertTrue( g[0,1] is b1 ) self.assertTrue( g[1,0] is b1 ) self.assertTrue( g[1,1] is b1 ) del g[0,0] self.assertIsNone( b1.parent() ) self.assertEqual( g.gridSize(), imath.V2i( 0, 0 ) )
def testMultiCellChild(self): g = GafferUI.GridContainer() b1 = GafferUI.Button() g[0:2, 0:2] = b1 self.failUnless(b1.parent() is g) self.assertEqual(g.gridSize(), IECore.V2i(2, 2)) self.failUnless(g[0, 0] is b1) self.failUnless(g[0, 1] is b1) self.failUnless(g[1, 0] is b1) self.failUnless(g[1, 1] is b1) del g[0, 0] self.failUnless(b1.parent() is None) self.assertEqual(g.gridSize(), IECore.V2i(0, 0))
def testRemoveRow( self ) : b00 = GafferUI.Button( "00" ) b01 = GafferUI.Button( "01" ) b11 = GafferUI.Button( "11" ) b10 = GafferUI.Button( "10" ) g = GafferUI.GridContainer() g[0,0] = b00 g[0,1] = b01 g[1,1] = b11 g[1,0] = b10 self.assertEqual( g.gridSize(), imath.V2i( 2, 2 ) ) g.removeRow( 0 ) self.assertEqual( g.gridSize(), imath.V2i( 2, 1 ) ) self.assertTrue( g[0,0] is b01 ) self.assertTrue( g[1,0] is b11 )
def testRemoveColumn(self): b00 = GafferUI.Button("00") b01 = GafferUI.Button("01") b11 = GafferUI.Button("11") b10 = GafferUI.Button("10") g = GafferUI.GridContainer() g[0, 0] = b00 g[0, 1] = b01 g[1, 1] = b11 g[1, 0] = b10 self.assertEqual(g.gridSize(), IECore.V2i(2, 2)) g.removeColumn(0) self.assertEqual(g.gridSize(), IECore.V2i(1, 2)) self.failUnless(g[0, 0] is b10) self.failUnless(g[0, 1] is b11)
def __init__(self, scriptNode, **kw): self.__gadgetWidget = GafferUI.GadgetWidget(bufferOptions=set( (GafferUI.GLWidget.BufferOptions.Depth, GafferUI.GLWidget.BufferOptions.Double)), ) GafferUI.NodeSetEditor.__init__(self, self.__gadgetWidget, scriptNode, **kw) self.__nodeToolbars = [] self.__viewToolbars = [] with GafferUI.GridContainer(borderWidth=2, spacing=0) as overlay: with GafferUI.ListContainer( orientation=GafferUI.ListContainer.Orientation.Horizontal, parenting={ "index": (slice(0, 5), 0), "alignment": (GafferUI.HorizontalAlignment.None, GafferUI.VerticalAlignment.Top) }): self.__toolMenuButton = GafferUI.MenuButton( menu=GafferUI.Menu( Gaffer.WeakMethod(self.__toolMenuDefinition)), hasFrame=False, ) GafferUI.Spacer(IECore.V2i(0), parenting={"expand": True}) self.__viewToolbars.append( _Toolbar(GafferUI.Edge.Top, parenting={ "verticalAlignment": GafferUI.VerticalAlignment.Top })) self.__nodeToolbars.append( _Toolbar(GafferUI.Edge.Top, parenting={ "index": (slice(0, 5), 1), "alignment": (GafferUI.HorizontalAlignment.Center, GafferUI.VerticalAlignment.Top), })) self.__viewToolbars.append( _Toolbar(GafferUI.Edge.Left, parenting={ "index": (0, 2), "alignment": (GafferUI.HorizontalAlignment.Left, GafferUI.VerticalAlignment.Center), })) self.__nodeToolbars.append( _Toolbar(GafferUI.Edge.Left, parenting={ "index": (1, 2), "alignment": (GafferUI.HorizontalAlignment.Left, GafferUI.VerticalAlignment.Center), })) self.__nodeToolbars.append( _Toolbar(GafferUI.Edge.Right, parenting={ "index": (3, 2), "alignment": (GafferUI.HorizontalAlignment.Right, GafferUI.VerticalAlignment.Center), })) self.__viewToolbars.append( _Toolbar(GafferUI.Edge.Right, parenting={ "index": (4, 2), "alignment": (GafferUI.HorizontalAlignment.Right, GafferUI.VerticalAlignment.Center), })) self.__nodeToolbars.append( _Toolbar(GafferUI.Edge.Bottom, parenting={ "index": (slice(0, 5), 3), "alignment": (GafferUI.HorizontalAlignment.Center, GafferUI.VerticalAlignment.Bottom), })) self.__viewToolbars.append( _Toolbar(GafferUI.Edge.Bottom, parenting={ "index": (slice(0, 5), 4), "alignment": (GafferUI.HorizontalAlignment.Center, GafferUI.VerticalAlignment.Bottom), }))