コード例 #1
0
ファイル: qtui.py プロジェクト: EriLee/marigold
    def build_components_gui( self ):
        # COMPONENTS MENU BAR
        menu_frame = QtGui.QFrame()
        menu_frame.setMinimumHeight( 20 )
        
        #HACK!!!!!!!!!!!
        basic_joint = QtGui.QAction( '&Basic Joint', self)
        #basic_joint.setShortcut('Ctrl+Q')
        #basic_joint.setStatusTip('Exit application')
        basic_joint.triggered.connect( lambda a='BasicJointComponent':self.addComponentToObject( a ) )
        
        components_menubar = QtGui.QMenuBar( menu_frame )
        joints_menu = components_menubar.addMenu( '&Joints' )
        controls_menu = components_menubar.addMenu( '&Controls' )
        constraints_menu = components_menubar.addMenu( '&Constraints' )
        deformers_menu = components_menubar.addMenu( '&Deformers' )
        joints_menu.addAction( basic_joint )

        # SELECTED HEADER
        self.selected_lock_btn = QtGui.QPushButton()
        self.selected_lock_btn.setIcon( QtGui.QIcon( ':/riggingUI/icons/lock_off.png' ) )
        self.selected_lock_btn.setIconSize( QtCore.QSize(16,16) )
        self.selected_lock_btn.setMaximumWidth( 22 )
        self.selected_lock_btn.setStyleSheet( 'padding: 4px' )
        self.selected_lock_btn.clicked.connect( self.lock_selection )
        self.selected_lock_active = False
        
        self.selected_label = QtGui.QLabel()
        self.selected_label.setText( 'nothing selected' )
        self.selected_label.setAlignment( QtCore.Qt.AlignCenter )
        self.selected_label.setStyleSheet( 'font:bold; font-size:14px; background-color:#2B2B30' )
        
        selected_grid = QtGui.QGridLayout()
        selected_grid.setContentsMargins( 0, 0, 0, 0 )
        selected_grid.setHorizontalSpacing( 0 )
        selected_grid.setColumnMinimumWidth( 0, 22 )
        selected_grid.addWidget( self.selected_lock_btn, 0, 0 )
        selected_grid.addWidget( self.selected_label, 0, 1 )
        
        # SELECTED COMPONENTS LIST/EDITOR        
        # Add the component specific GUI.
        self.components_layout = QtGui.QVBoxLayout()
        self.components_layout.setAlignment( QtCore.Qt.AlignTop )
        scroll_area = QTWidgets.scrollArea( self.components_layout )
        
        # SUB_LAYOUT HOOKUP
        self.sub_layout.addWidget( menu_frame )
        self.sub_layout.addLayout( selected_grid )
        self.sub_layout.addWidget( scroll_area )
コード例 #2
0
ファイル: UICharactersTools.py プロジェクト: EriLee/marigold
    def __init__( self ):
        super( UICharacterTools, self ).__init__()

        layout = QtGui.QVBoxLayout( self )

        # PRESETS
        presetsLabel = QTWidgets.basicLabel( 'Character Presets', 'bold', 14, 'white', '2B2B30', inIndent=10 )
        presetsLabel.setMinimumHeight( 30 )
        presetsLabel.setAlignment( QtCore.Qt.AlignCenter )
        
        self.scrollLayout = QtGui.QVBoxLayout()
        self.scrollLayout.setAlignment( QtCore.Qt.AlignTop )
        self.scrollLayout.setContentsMargins( 8,8,8,8 )
        self.scrollLayout.setSpacing( 4 )
        scrollArea = QTWidgets.scrollArea( self.scrollLayout )
        self.updateCards()
        
        # TOOLS
        #--Label
        toolsLabel = QTWidgets.basicLabel( 'Tools', 'bold', 14, 'white', '2B2B30', inIndent=10 )
        toolsLabel.setMinimumHeight( 30 )
        toolsLabel.setAlignment( QtCore.Qt.AlignCenter )
        
        #--Combo menu
        comboRow = QtGui.QHBoxLayout()
        comboRow.setAlignment( QtCore.Qt.AlignLeft )
        
        self.characterNameList = []
        self.characterDict = {}
        for char in NodeUtility.getCharactersInScene():
            charName = cmds.getAttr( '{0}.characterName'.format( char ) )
            self.characterNameList.append( charName )
            self.characterDict[charName] = char

        self.characterCombo = QtGui.QComboBox()
        self.updateCharacterCombo()
        self.characterCombo.setFixedWidth( 100 )
        self.characterCombo.activated.connect( self.setActiveCharacter )
        
        comboRefreshBtn = QTWidgets.imageTextButton( None, ':/riggingUI/icons/icon_refresh20.png', [16,16] )
        comboRefreshBtn.setMaximumWidth( 20 )
        comboRefreshBtn.setMaximumHeight( 20 )
        comboRefreshBtn.clicked.connect( self.updateCharacterCombo )
        
        comboRow.addWidget( self.characterCombo )
        comboRow.addWidget( comboRefreshBtn )
        
        #--Buttons
        modulePrioritiesBtn = QTWidgets.imageTextButton( 'Module Priorities', ':/riggingUI/icons/icon_match_translation.png', [16,16] )
        modulePrioritiesBtn.clicked.connect( lambda:self.characterPriorityPromptTrigger() )
        
        saveCharacterBtn = QTWidgets.imageTextButton( 'Save Character', ':/riggingUI/icons/icon_match_translation.png', [16,16] )
        saveCharacterBtn.clicked.connect( lambda:self.saveCharacter() )
        
        buildCharacterBtn = QTWidgets.imageTextButton( 'Build Character', ':/riggingUI/icons/icon_match_translation.png', [16,16] )
        buildCharacterBtn.clicked.connect( lambda:self.buildCharacter() )
        
        editModulesBtn = QTWidgets.imageTextButton( 'Edit Character Modules', ':/riggingUI/icons/icon_match_translation.png', [16,16] )
        editModulesBtn.clicked.connect( lambda:self.characterModulePromptTrigger() )
        
        #--Button grid layout.
        toolsGrid = QtGui.QGridLayout()
        toolsGrid.setColumnMinimumWidth( 0, 100 )
        toolsGrid.setColumnMinimumWidth( 1, 100 )
        toolsGrid.setColumnMinimumWidth( 2, 100 )
        toolsGrid.setSpacing( 2 )
        toolsGrid.setContentsMargins( 0,0,0,0 )
        toolsGrid.addWidget( modulePrioritiesBtn, 0, 0 )
        toolsGrid.addWidget( saveCharacterBtn, 0, 1 )
        toolsGrid.addWidget( buildCharacterBtn, 0, 2 )
        toolsGrid.addWidget( editModulesBtn, 1, 0 )
        
        
        # SETUP LAYOUT
        layout.addWidget( presetsLabel )
        layout.addWidget( scrollArea )
        layout.addWidget( toolsLabel )
        layout.addLayout( comboRow )
        layout.addLayout( toolsGrid )
コード例 #3
0
ファイル: UILatticesTools.py プロジェクト: EriLee/marigold
    def __init__( self ):
        super( UILatticeTools, self ).__init__()
    
        layout = QtGui.QVBoxLayout( self )
        
        # LATTICES SECTIONS
        latticesLabel = QTWidgets.basicLabel( 'Lattices', 'bold', 14, 'white', '2B2B30', inIndent=10 )
        latticesLabel.setMinimumHeight( 30 )
        latticesLabel.setAlignment( QtCore.Qt.AlignCenter )
        
        # Grid that holds the toggle buttons for lattice types in the first column, and the
        # scroll layout for the list of lattices in the second column.
        latticesGrid = QtGui.QGridLayout()
        latticesGrid.setContentsMargins( 0, 0, 0, 0 )
        latticesGrid.setHorizontalSpacing( 0 )
        latticesGrid.setAlignment( QtCore.Qt.AlignTop )
        latticesGrid.setVerticalSpacing( 0 )
        
        # Toggle button layout.
        self.togLayout = QtGui.QVBoxLayout()
        self.togLayout.setAlignment( QtCore.Qt.AlignTop )
        iconSize = [26,26]
        rootTog = QTWidgets.toggleButton( 'roots', ':/riggingUI/icons/icon_root.png', iconSize )
        spineTog = QTWidgets.toggleButton( 'spines', ':/riggingUI/icons/icon_spine.png', iconSize )
        armTog = QTWidgets.toggleButton( 'arms', ':/riggingUI/icons/icon_arm.png', iconSize )
        legTog = QTWidgets.toggleButton( 'legs', ':/riggingUI/icons/icon_leg.png', iconSize )
        handTog = QTWidgets.toggleButton( 'hands', ':/riggingUI/icons/icon_hand.png', iconSize )
        footTog = QTWidgets.toggleButton( 'feet', ':/riggingUI/icons/icon_foot.png', iconSize )
        headTog = QTWidgets.toggleButton( 'heads', ':/riggingUI/icons/icon_head.png', iconSize )

        rootTog.toggled.connect( lambda toggleState:self.updateCards() )
        spineTog.toggled.connect( lambda toggleState:self.updateCards() )
        armTog.toggled.connect( lambda toggleState:self.updateCards() )
        legTog.toggled.connect( lambda toggleState:self.updateCards() )
        handTog.toggled.connect( lambda toggleState:self.updateCards() )
        footTog.toggled.connect( lambda toggleState:self.updateCards() )
        headTog.toggled.connect( lambda toggleState:self.updateCards() )
        
        self.togLayout.addWidget( rootTog )
        self.togLayout.addWidget( spineTog )
        self.togLayout.addWidget( armTog )
        self.togLayout.addWidget( legTog )
        self.togLayout.addWidget( handTog )
        self.togLayout.addWidget( footTog )
        self.togLayout.addWidget( headTog )
        self.togLayout.addStretch( 1 )
        
        # Scroll area for lattice list.
        self.scrollLayout = QtGui.QVBoxLayout()
        self.scrollLayout.setAlignment( QtCore.Qt.AlignTop )
        self.scrollLayout.setContentsMargins( 8,8,8,8 )
        self.scrollLayout.setSpacing( 4 )
        scrollArea = QTWidgets.scrollArea( self.scrollLayout )
        
        # Put the toggle buttons and lattice scroll list in the main grid layout.
        latticesGrid.addLayout( self.togLayout, 0, 0 )
        latticesGrid.addWidget( scrollArea, 0, 1 )        
        
        # TOOLS SECTION
        toolsLabel = QTWidgets.basicLabel( 'Lattice Tools', 'bold', 14, 'white', '2B2B30', inIndent=10 )
        toolsLabel.setMinimumHeight( 30 )
        toolsLabel.setAlignment( QtCore.Qt.AlignCenter )
        
        latticeToolsGrid = QtGui.QGridLayout()
        latticeToolsGrid.setColumnMinimumWidth( 0, 100 )
        latticeToolsGrid.setColumnMinimumWidth( 1, 100 )
        latticeToolsGrid.setColumnMinimumWidth( 2, 100 )
        latticeToolsGrid.setSpacing( 2 )
        latticeToolsGrid.setContentsMargins( 0,0,0,0 )
        
        # Buttons
        saveModeluBtn = QTWidgets.imageTextButton( 'Save Module', ':/riggingUI/icons/icon_match_translation.png', [16,16] )
        saveModeluBtn.clicked.connect( lambda:self.saveModulePrompt() )
        latticeToolsGrid.addWidget( saveModeluBtn, 0, 0 )        
        
        # Build the widget
        layout.addWidget( latticesLabel )
        layout.addLayout( latticesGrid )
        layout.addWidget( toolsLabel )
        layout.addLayout( latticeToolsGrid )
コード例 #4
0
ファイル: UIComponentsTools.py プロジェクト: EriLee/marigold
    def __init__( self ):
        super( UIComponentsTools, self ).__init__()
        
        layout = QtGui.QVBoxLayout( self )

        # COMPONENTS MENU BAR
        menuFrame = QtGui.QFrame()
        menuFrame.setMinimumHeight( 20 )
        
        # Meta menu.
        moduleMeta = QtGui.QAction( '&Module Meta', self)
        moduleMeta.triggered.connect( lambda a='ModuleRootComponent':Components.addComponentToObject( a ) )
        characterMeta = QtGui.QAction( '&Character Meta', self)
        characterMeta.triggered.connect( lambda a='CharacterRootComponent':Components.addComponentToObject( a ) )
        
        # Joints menu
        basicJoint = QtGui.QAction( '&Basic Joint', self)
        #basic_joint.setShortcut('Ctrl+Q')
        #basic_joint.setStatusTip('Exit application')
        basicJoint.triggered.connect( lambda a='BasicJointComponent':Components.addComponentToObject( a ) )
        
        # Controls menu
        squareCurveControl = QtGui.QAction( '&Square', self)
        squareCurveControl.triggered.connect( lambda a='CurveControlComponent', b='square':Components.addComponentToObject( a, curveType=b ) )
        triangleCurveControl = QtGui.QAction( '&Triangle', self)
        triangleCurveControl.triggered.connect( lambda a='CurveControlComponent', b='triangle':Components.addComponentToObject( a, curveType=b ) )
        arrowCurveControl = QtGui.QAction( '&Arrow', self)
        arrowCurveControl.triggered.connect( lambda a='CurveControlComponent', b='arrow':Components.addComponentToObject( a, curveType=b ) )
        plusCurveControl = QtGui.QAction( '&Plus', self)
        plusCurveControl.triggered.connect( lambda a='CurveControlComponent', b='plus':Components.addComponentToObject( a, curveType=b ) )
        pyramidCurveControl = QtGui.QAction( '&Pyramid', self)
        pyramidCurveControl.triggered.connect( lambda a='CurveControlComponent', b='pyramid':Components.addComponentToObject( a, curveType=b ) )
        circleCurveControl = QtGui.QAction( '&Circle', self)
        circleCurveControl.triggered.connect( lambda a='CurveControlComponent', b='circle':Components.addComponentToObject( a, curveType=b ) )
        ringDirectionCurveControl = QtGui.QAction( '&Ring Direction', self)
        ringDirectionCurveControl.triggered.connect( lambda a='CurveControlComponent', b='ringDirection':Components.addComponentToObject( a, curveType=b ) )
        
        # Setup menus.
        componentsMenubar = QtGui.QMenuBar( menuFrame )
        
        metaMenu = componentsMenubar.addMenu( '&Meta' )
        metaMenu.addAction( moduleMeta )
        metaMenu.addAction( characterMeta )
        
        jointsMenu = componentsMenubar.addMenu( '&Joints' )
        jointsMenu.addAction( basicJoint )
        
        controlsMenu = componentsMenubar.addMenu( '&Controls' )
        controlsCurvesMenu = controlsMenu.addMenu( '&Curves' )
        controlsCurvesMenu.addAction( squareCurveControl )
        controlsCurvesMenu.addAction( triangleCurveControl )
        controlsCurvesMenu.addAction( arrowCurveControl )
        controlsCurvesMenu.addAction( plusCurveControl )
        controlsCurvesMenu.addAction( pyramidCurveControl )
        controlsCurvesMenu.addAction( circleCurveControl )
        controlsCurvesMenu.addAction( ringDirectionCurveControl )
        
        constraintsMenu = componentsMenubar.addMenu( '&Constraints' )
        
        deformersMenu = componentsMenubar.addMenu( '&Deformers' )
        

        # SELECTED HEADER
        self.selectedLockBtn = QTWidgets.imageTextButton( '', ':/riggingUI/icons/lock_off.png', [16,16] )
        self.selectedLockBtn.setMaximumWidth( 30 )
        self.selectedLockBtn.clicked.connect( self.lockSelection )
        self.selectedLockActive = False
        
        self.selectedLabel = QTWidgets.basicLabel( 'nothing selected', 'bold', 14, 'white', '2B2B30', inIndent=10 )
        self.selectedLabel.setMinimumHeight( 30 )
        self.selectedLabel.setAlignment( QtCore.Qt.AlignCenter )
        
        selectedGrid = QtGui.QGridLayout()
        selectedGrid.setContentsMargins( 0, 0, 0, 0 )
        selectedGrid.setHorizontalSpacing( 0 )
        selectedGrid.setColumnMinimumWidth( 0, 30 )
        selectedGrid.addWidget( self.selectedLockBtn, 0, 0 )
        selectedGrid.addWidget( self.selectedLabel, 0, 1 )
        
        # SELECTED COMPONENTS LIST/EDITOR        
        # Add the component specific GUI.
        self.componentsLayout = QtGui.QVBoxLayout()
        self.componentsLayout.setAlignment( QtCore.Qt.AlignTop )
        scrollArea = QTWidgets.scrollArea( self.componentsLayout )
        
        # Layout hookup
        layout.addWidget( menuFrame )
        layout.addLayout( selectedGrid )
        layout.addWidget( scrollArea )
        
        # In order to delete this scriptJob when this UI is destroyed we need to
        # parent the scriptJob to a Maya UI item. In this case I'm using a text object
        # with visibility turned off.
        scriptJobHolder = cmds.text( visible=False )
        self.SCRIPT_JOB_NUMBER = cmds.scriptJob( event=[ 'SelectionChanged', self.onSelectionChange ], protected=True, parent=scriptJobHolder )
        scriptJobHolderQT = mayaToQtObject( scriptJobHolder )
        layout.addWidget( scriptJobHolderQT )