Example #1
0
class Window( QMainWindow ):
    
    def __init__(self, *args, **kwargs ):
        QMainWindow.__init__( self, *args, **kwargs )
        self.installEventFilter( self )
        self.setWindowFlags(QtCore.Qt.Drawer)
    
        self.layoutWidget = QWidget()
        self.setCentralWidget( self.layoutWidget )
        
        self.layout = QVBoxLayout( self.layoutWidget )
        self.layout.setContentsMargins( 5,5,5,5 )
        
        self.ui_labels     = UI_labels()
        self.ui_driverAttr1 = UI_attrlist()
        self.ui_driverAttr2 = UI_attrlist()
        self.ui_buttons    = UI_buttons()
        self.layout.addWidget( self.ui_labels )
        self.layout.addWidget( self.ui_driverAttr1 )
        self.layout.addWidget( self.ui_driverAttr2 )
        self.layout.addWidget( self.ui_buttons )
        
        self.ui_driverAttr1.lineEdit_key.setText( '0' )
        self.ui_driverAttr1.lineEdit_value.setText( '0' )
        self.ui_driverAttr2.lineEdit_key.setText( '1' )
        self.ui_driverAttr2.lineEdit_value.setText( '1' )
        
        
        def addLineCommand():
            
            numItems = self.layout.count()
            attrlist = UI_attrlist()
            self.layout.insertWidget( numItems-1, attrlist )
        
        self.ui_buttons.button_connect.clicked.connect( partial( Commands.connectCommand, self ) )
        self.ui_buttons.button_addLine.clicked.connect( addLineCommand )
    
    
    def eventFilter( self, *args, **kwargs):
        event = args[1]
        if event.type() == QtCore.QEvent.LayoutRequest or event.type() == QtCore.QEvent.Move :
            pass
Example #2
0
class Window(QMainWindow):
    def __init__(self, *args, **kwargs):
        QMainWindow.__init__(self, *args, **kwargs)
        self.installEventFilter(self)
        self.setWindowFlags(QtCore.Qt.Drawer)

        self.layoutWidget = QWidget()
        self.setCentralWidget(self.layoutWidget)

        self.layout = QVBoxLayout(self.layoutWidget)
        self.layout.setContentsMargins(5, 5, 5, 5)

        self.ui_labels = UI_labels()
        self.ui_driverAttr1 = UI_attrlist()
        self.ui_driverAttr2 = UI_attrlist()
        self.ui_buttons = UI_buttons()
        self.layout.addWidget(self.ui_labels)
        self.layout.addWidget(self.ui_driverAttr1)
        self.layout.addWidget(self.ui_driverAttr2)
        self.layout.addWidget(self.ui_buttons)

        self.ui_driverAttr1.lineEdit_key.setText('0')
        self.ui_driverAttr1.lineEdit_value.setText('0')
        self.ui_driverAttr2.lineEdit_key.setText('1')
        self.ui_driverAttr2.lineEdit_value.setText('1')

        def addLineCommand():

            numItems = self.layout.count()
            attrlist = UI_attrlist()
            self.layout.insertWidget(numItems - 1, attrlist)

        self.ui_buttons.button_connect.clicked.connect(
            partial(Commands.connectCommand, self))
        self.ui_buttons.button_addLine.clicked.connect(addLineCommand)

    def eventFilter(self, *args, **kwargs):
        event = args[1]
        if event.type() == QtCore.QEvent.LayoutRequest or event.type(
        ) == QtCore.QEvent.Move:
            pass
class ButtonContainer(QWidget):
	Height = 21

	def __init__(self, orientation=Qt.Horizontal):
		"""
		Sets up the button container.
		"""
		super(ButtonContainer, self).__init__()
		self.orientation = orientation
		# Perform custom painting on OS X
		self._osx = sys.platform.startswith("darwin")
		self.initUI()

		# Keep track of the number of buttons
		self._buttonCount = 0

	def initUI(self):
		"""
		Initializes UI. Creates a horizontal layout
		to which buttons can be added.
		"""
		if self._osx:
			# Mimic the style of buttons underneath a list view
			gradient = QLinearGradient()
			gradient.setStart(0, 0)
			gradient.setFinalStop(0, self.Height)

			colorTop = QColor(250, 250, 250, 255)
			colorMid = QColor(244, 244, 244, 255)
			colorInBetween = QColor(238, 238, 238, 255)
			colorMidLow = QColor(234, 234, 234, 255)
			colorLow = QColor(239, 239, 239, 255)
			gradient.setColorAt(0, colorTop)
			gradient.setColorAt(0.45, colorMid)
			gradient.setColorAt(0.5, colorInBetween)
			gradient.setColorAt(0.55, colorMidLow)
			gradient.setColorAt(1, colorLow)

			brush = QBrush(gradient)
			palette = QPalette()
			palette.setBrush(QPalette.Background, brush)

			self.setAutoFillBackground(True)
			self.setPalette(palette)

		# Use a horizontal layout in which to keep
		# buttons. Initialize with an empty QWidget to
		# make the buttons align to the left
		if self.orientation == Qt.Horizontal:
			self.layout = QHBoxLayout()
		else:
			self.layout = QVBoxLayout()
		self.layout.setSpacing(0)
		self.layout.setContentsMargins(0, 0, 0, 0)
		self.layout.addWidget(QWidget())
		self.setLayout(self.layout)

	# Public methods

	def addButton(self, button):
		"""
		Adds a button to the container. The button is styled and
		resized to fit in the container widget.
		Assumes that the button has no name and has an
		icon (preferably in the right size)

		:type button: QPushButton
		"""
		# Make sure that the button won't disturb the layout
		button.setMaximumHeight(ButtonContainer.Height)
		button.setMaximumWidth(ButtonContainer.Height)
		button.setFlat(True)

		# Insert button into the horizontal layout. Make sure
		# that the empty QWidget stays on the right
		self.layout.insertWidget(self._buttonCount, button)

		self._buttonCount += 1

	# Overwritten from QWidget

	def paintEvent(self, ev):
		if not self._osx:
			return
		size = self.size()
		height = size.height()-1
		width = size.width()-1
		painter = QPainter(self)
		painter.setPen(QColor(165, 165, 165, 255))
		painter.drawLine(QPoint(0, 0), QPoint(0, height))
		painter.drawLine(QPoint(0, height), QPoint(width, height))
		painter.drawLine(QPoint(width, height), QPoint(width, 0))
		for index in range(self._buttonCount):
			xCoord = (index + 1) * 21 - 1
			painter.drawLine(QPoint(xCoord, 0), QPoint(xCoord, height))

	def sizeOfButtons(self):
		return self._buttonCount * ButtonContainer.Height

	def sizeOfContainer(self):
		if self._buttonCount == 0:
			return 0
		return ButtonContainer.Height

	def maximumWidth(self):
		"""
		:rtype: int
		"""
		if self.orientation == Qt.Horizontal:
			return 0
		else:
			return self.sizeOfContainer()

	def minimumWidth(self):
		"""
		:rtype: int
		"""
		if self.orientation == Qt.Horizontal:
			return self.sizeOfButtons()
		else:
			return self.sizeOfContainer()

	def maximumHeight(self):
		"""
		:rtype: int
		"""
		if self.orientation == Qt.Horizontal:
			return self.sizeOfContainer()
		else:
			return 0

	def minimumHeight(self):
		"""
		:rtype: int
		"""
		if self.orientation == Qt.Horizontal:
			return self.sizeOfContainer()
		else:
			return self.sizeOfButtons()

	def sizeHint(self):
		"""
		:rtype: QtCore.QSize
		"""
		width = 150
		height = ButtonContainer.Height
		if self._buttonCount == 0:
			height = 0
		if self.orientation == Qt.Horizontal:
			sizeHint = QtCore.QSize(width, height)
		else:
			sizeHint = QtCore.QSize(height, width)
		return sizeHint
Example #4
0
class Window( QMainWindow ):
    
    def __init__(self, *args, **kwargs ):
        QMainWindow.__init__( self, *args, **kwargs )
        self.installEventFilter( self )
        self.setWindowFlags(QtCore.Qt.Drawer)

        self.layoutWidget = QWidget()
        self.setCentralWidget( self.layoutWidget )
        
        self.layout = QVBoxLayout( self.layoutWidget )
        self.layout.setContentsMargins( 5,5,5,5 )
        
        self.ui_labels     = UI_labels()
        self.ui_driverAttr = UI_attrlist()
        #self.ui_options    = UI_options()
        self.ui_buttons    = UI_buttons()
        self.layout.addWidget( self.ui_labels )
        self.layout.addWidget( self.ui_driverAttr )
        #self.layout.addWidget( self.ui_options )
        self.layout.addWidget( self.ui_buttons )
        
        
        def addLineCommand():
            
            numItems = self.layout.count()
            attrlist = UI_attrlist()
            self.layout.insertWidget( numItems-2, attrlist )
        
        
        def setAttrCommand():
            
            import pymel.core
            cmds.undoInfo( ock=1 )
            sels = pymel.core.ls( sl=1 )
            numItems = self.layout.count()
            
            for i in range( 1, numItems-1 ):
                targetWidget = self.layout.itemAt( i ).widget()
                
                attrName = targetWidget.lineEdit_srcAttr.text()
                attrValue = targetWidget.lineEdit_dstAttr.text()
                
                if not attrName or not attrValue: continue

                for sel in sels:
                    attrType = sel.attr( attrName ).type()
                    if attrType == 'string':
                        sel.attr( attrName ).set( attrValue )
                    else:
                        print "attr value : ", attrValue
                        if attrValue.find( ',' ) != -1:
                            values = [ float( value ) for value in attrValue.split( ',' ) ]
                            sel.attr( attrName ).set( values )
                        else:
                            sel.attr( attrName ).set( float( attrValue ) ) 

            cmds.undoInfo( cck=1 )
            
        self.ui_buttons.button_connect.clicked.connect( setAttrCommand )
        self.ui_buttons.button_addLine.clicked.connect( addLineCommand )
    
    
    def eventFilter( self, *args, **kwargs):
        event = args[1]
        if event.type() == QtCore.QEvent.LayoutRequest or event.type() == QtCore.QEvent.Move :
            pass
class ButtonContainer(QWidget):
    Height = 21

    def __init__(self, orientation=Qt.Horizontal):
        """
		Sets up the button container.
		"""
        super(ButtonContainer, self).__init__()
        self.orientation = orientation
        # Perform custom painting on OS X
        self._osx = sys.platform.startswith("darwin")
        self.initUI()

        # Keep track of the number of buttons
        self._buttonCount = 0

    def initUI(self):
        """
		Initializes UI. Creates a horizontal layout
		to which buttons can be added.
		"""
        if self._osx:
            # Mimic the style of buttons underneath a list view
            gradient = QLinearGradient()
            gradient.setStart(0, 0)
            gradient.setFinalStop(0, self.Height)

            colorTop = QColor(250, 250, 250, 255)
            colorMid = QColor(244, 244, 244, 255)
            colorInBetween = QColor(238, 238, 238, 255)
            colorMidLow = QColor(234, 234, 234, 255)
            colorLow = QColor(239, 239, 239, 255)
            gradient.setColorAt(0, colorTop)
            gradient.setColorAt(0.45, colorMid)
            gradient.setColorAt(0.5, colorInBetween)
            gradient.setColorAt(0.55, colorMidLow)
            gradient.setColorAt(1, colorLow)

            brush = QBrush(gradient)
            palette = QPalette()
            palette.setBrush(QPalette.Background, brush)

            self.setAutoFillBackground(True)
            self.setPalette(palette)

        # Use a horizontal layout in which to keep
        # buttons. Initialize with an empty QWidget to
        # make the buttons align to the left
        if self.orientation == Qt.Horizontal:
            self.layout = QHBoxLayout()
        else:
            self.layout = QVBoxLayout()
        self.layout.setSpacing(0)
        self.layout.setContentsMargins(0, 0, 0, 0)
        self.layout.addWidget(QWidget())
        self.setLayout(self.layout)

    # Public methods

    def addButton(self, button):
        """
		Adds a button to the container. The button is styled and
		resized to fit in the container widget.
		Assumes that the button has no name and has an
		icon (preferably in the right size)

		:type button: QPushButton
		"""
        # Make sure that the button won't disturb the layout
        button.setMaximumHeight(ButtonContainer.Height)
        button.setMaximumWidth(ButtonContainer.Height)
        button.setFlat(True)

        # Insert button into the horizontal layout. Make sure
        # that the empty QWidget stays on the right
        self.layout.insertWidget(self._buttonCount, button)

        self._buttonCount += 1

    # Overwritten from QWidget

    def paintEvent(self, ev):
        if not self._osx:
            return
        size = self.size()
        height = size.height() - 1
        width = size.width() - 1
        painter = QPainter(self)
        painter.setPen(QColor(165, 165, 165, 255))
        painter.drawLine(QPoint(0, 0), QPoint(0, height))
        painter.drawLine(QPoint(0, height), QPoint(width, height))
        painter.drawLine(QPoint(width, height), QPoint(width, 0))
        for index in range(self._buttonCount):
            xCoord = (index + 1) * 21 - 1
            painter.drawLine(QPoint(xCoord, 0), QPoint(xCoord, height))

    def sizeOfButtons(self):
        return self._buttonCount * ButtonContainer.Height

    def sizeOfContainer(self):
        if self._buttonCount == 0:
            return 0
        return ButtonContainer.Height

    def maximumWidth(self):
        """
		:rtype: int
		"""
        if self.orientation == Qt.Horizontal:
            return 0
        else:
            return self.sizeOfContainer()

    def minimumWidth(self):
        """
		:rtype: int
		"""
        if self.orientation == Qt.Horizontal:
            return self.sizeOfButtons()
        else:
            return self.sizeOfContainer()

    def maximumHeight(self):
        """
		:rtype: int
		"""
        if self.orientation == Qt.Horizontal:
            return self.sizeOfContainer()
        else:
            return 0

    def minimumHeight(self):
        """
		:rtype: int
		"""
        if self.orientation == Qt.Horizontal:
            return self.sizeOfContainer()
        else:
            return self.sizeOfButtons()

    def sizeHint(self):
        """
		:rtype: QtCore.QSize
		"""
        width = 150
        height = ButtonContainer.Height
        if self._buttonCount == 0:
            height = 0
        if self.orientation == Qt.Horizontal:
            sizeHint = QtCore.QSize(width, height)
        else:
            sizeHint = QtCore.QSize(height, width)
        return sizeHint
Example #6
0
class Window(QMainWindow):
    def __init__(self, *args, **kwargs):
        QMainWindow.__init__(self, *args, **kwargs)
        self.installEventFilter(self)
        self.setWindowFlags(QtCore.Qt.Drawer)

        self.layoutWidget = QWidget()
        self.setCentralWidget(self.layoutWidget)

        self.layout = QVBoxLayout(self.layoutWidget)
        self.layout.setContentsMargins(5, 5, 5, 5)

        self.ui_labels = UI_labels()
        self.ui_driverAttr = UI_attrlist()
        self.ui_options = UI_options()
        self.ui_buttons = UI_buttons()
        self.layout.addWidget(self.ui_labels)
        self.layout.addWidget(self.ui_driverAttr)
        self.layout.addWidget(self.ui_options)
        self.layout.addWidget(self.ui_buttons)

        def addLineCommand():

            numItems = self.layout.count()
            attrlist = UI_attrlist()
            self.layout.insertWidget(numItems - 2, attrlist)

        def connectCommand():

            cmds.undoInfo(ock=1)
            sels = cmds.ls(sl=1)
            numItems = self.layout.count()

            optionWidget = self.layout.itemAt(numItems - 2).widget()

            for i in range(1, numItems - 2):
                targetWidget = self.layout.itemAt(i).widget()

                srcAttr = targetWidget.lineEdit_srcAttr.text()
                dstAttr = targetWidget.lineEdit_dstAttr.text()

                if not srcAttr or not dstAttr: continue

                try:
                    for sel in sels[1:]:
                        target = sel
                        if optionWidget.checkBox.isChecked():
                            selParents = cmds.listRelatives(sel, p=1, f=1)
                            if selParents:
                                target = selParents[0]
                        cmds.connectAttr(sels[0] + '.' + srcAttr,
                                         target + '.' + dstAttr)
                except:
                    pass
            cmds.undoInfo(cck=1)

        self.ui_buttons.button_connect.clicked.connect(connectCommand)
        self.ui_buttons.button_addLine.clicked.connect(addLineCommand)

    def eventFilter(self, *args, **kwargs):
        event = args[1]
        if event.type() == QtCore.QEvent.LayoutRequest or event.type(
        ) == QtCore.QEvent.Move:
            pass
Example #7
0
class Window( QMainWindow ):
    
    def __init__(self, *args, **kwargs ):
        QMainWindow.__init__( self, *args, **kwargs )
        self.installEventFilter( self )
        self.setWindowFlags(QtCore.Qt.Drawer)

        self.layoutWidget = QWidget()
        self.setCentralWidget( self.layoutWidget )
        
        self.layout = QVBoxLayout( self.layoutWidget )
        self.layout.setContentsMargins( 5,5,5,5 )
        
        self.ui_labels     = UI_labels()
        self.ui_driverAttr = UI_attrlist()
        self.ui_options    = UI_options()
        self.ui_buttons    = UI_buttons()
        self.layout.addWidget( self.ui_labels )
        self.layout.addWidget( self.ui_driverAttr )
        self.layout.addWidget( self.ui_options )
        self.layout.addWidget( self.ui_buttons )
        
        
        def addLineCommand():
            
            numItems = self.layout.count()
            attrlist = UI_attrlist()
            self.layout.insertWidget( numItems-2, attrlist )
        
        
        def connectCommand():
            
            cmds.undoInfo( ock=1 )
            sels = cmds.ls( sl=1 )
            numItems = self.layout.count()
            
            optionWidget = self.layout.itemAt( numItems-2 ).widget()
            
            for i in range( 1, numItems-2 ):
                targetWidget = self.layout.itemAt( i ).widget()
                
                srcAttr = targetWidget.lineEdit_srcAttr.text()
                dstAttr = targetWidget.lineEdit_dstAttr.text()
                
                if not srcAttr or not dstAttr: continue
                
                try: 
                    for sel in sels[1:]:
                        target = sel
                        if optionWidget.checkBox.isChecked():
                            selParents = cmds.listRelatives( sel, p=1, f=1 )
                            if selParents:
                                target = selParents[0]
                        cmds.connectAttr( sels[0] + '.' + srcAttr, target + '.' + dstAttr )
                except: pass
            cmds.undoInfo( cck=1 )
            
        
        self.ui_buttons.button_connect.clicked.connect( connectCommand )
        self.ui_buttons.button_addLine.clicked.connect( addLineCommand )
    
    
    def eventFilter( self, *args, **kwargs):
        event = args[1]
        if event.type() == QtCore.QEvent.LayoutRequest or event.type() == QtCore.QEvent.Move :
            pass
Example #8
0
class Window(QMainWindow):
    def __init__(self, *args, **kwargs):
        QMainWindow.__init__(self, *args, **kwargs)
        self.installEventFilter(self)
        self.setWindowFlags(QtCore.Qt.Drawer)

        self.layoutWidget = QWidget()
        self.setCentralWidget(self.layoutWidget)

        self.layout = QVBoxLayout(self.layoutWidget)
        self.layout.setContentsMargins(5, 5, 5, 5)

        self.ui_labels = UI_labels()
        self.ui_driverAttr = UI_attrlist()
        #self.ui_options    = UI_options()
        self.ui_buttons = UI_buttons()
        self.layout.addWidget(self.ui_labels)
        self.layout.addWidget(self.ui_driverAttr)
        #self.layout.addWidget( self.ui_options )
        self.layout.addWidget(self.ui_buttons)

        def addLineCommand():

            numItems = self.layout.count()
            attrlist = UI_attrlist()
            self.layout.insertWidget(numItems - 2, attrlist)

        def connectCommand():

            import pymel.core
            cmds.undoInfo(ock=1)
            sels = pymel.core.ls(sl=1)
            numItems = self.layout.count()

            enumNames = []
            targetObjects = []

            attrName = 'mode'

            for i in range(1, numItems - 1):
                targetWidget = self.layout.itemAt(i).widget()
                eachEnumName = targetWidget.lineEdit_srcAttr.text()
                targetObject = pymel.core.ls(
                    targetWidget.lineEdit_dstAttr.text())[0]
                if not eachEnumName: continue
                enumNames.append(eachEnumName)
                targetObjects.append(targetObject)

            enumName = ':'.join(enumNames) + ':'
            addAttr(sels[-1], ln=attrName, at='enum', enumName=enumName, k=1)

            for i in range(len(targetObjects)):
                if not targetObjects[i]: continue
                condition = pymel.core.createNode('condition')
                sels[-1].attr(attrName) >> condition.firstTerm
                condition.secondTerm.set(i)
                condition.colorIfTrueR.set(1)
                condition.colorIfFalseR.set(0)
                condition.outColorR >> targetObjects[i].v

            cmds.undoInfo(cck=1)

        self.ui_buttons.button_connect.clicked.connect(connectCommand)
        self.ui_buttons.button_addLine.clicked.connect(addLineCommand)

    def eventFilter(self, *args, **kwargs):
        event = args[1]
        if event.type() == QtCore.QEvent.LayoutRequest or event.type(
        ) == QtCore.QEvent.Move:
            pass
class Window( QMainWindow ):
    
    def __init__(self, *args, **kwargs ):
        QMainWindow.__init__( self, *args, **kwargs )
        self.installEventFilter( self )
        self.setWindowFlags(QtCore.Qt.Drawer)

        self.layoutWidget = QWidget()
        self.setCentralWidget( self.layoutWidget )
        
        self.layout = QVBoxLayout( self.layoutWidget )
        self.layout.setContentsMargins( 5,5,5,5 )
        
        self.ui_labels     = UI_labels()
        self.ui_driverAttr = UI_attrlist()
        #self.ui_options    = UI_options()
        self.ui_buttons    = UI_buttons()
        self.layout.addWidget( self.ui_labels )
        self.layout.addWidget( self.ui_driverAttr )
        #self.layout.addWidget( self.ui_options )
        self.layout.addWidget( self.ui_buttons )


        def addLineCommand():
            
            numItems = self.layout.count()
            attrlist = UI_attrlist()
            self.layout.insertWidget( numItems-2, attrlist )
        
        
        def connectCommand():
            
            import pymel.core
            cmds.undoInfo( ock=1 )
            sels = pymel.core.ls( sl=1 )
            numItems = self.layout.count()
            
            enumNames     = []
            targetObjects = []
            
            attrName = 'mode'
            
            for i in range( 1, numItems-1 ):
                targetWidget = self.layout.itemAt( i ).widget()
                eachEnumName = targetWidget.lineEdit_srcAttr.text()
                targetObject = pymel.core.ls( targetWidget.lineEdit_dstAttr.text() )[0]
                if not eachEnumName: continue
                enumNames.append( eachEnumName )
                targetObjects.append( targetObject )
            
            enumName = ':'.join( enumNames ) + ':'
            addAttr( sels[-1], ln=attrName, at='enum', enumName = enumName, k=1 )
            
            for i in range( len( targetObjects ) ):
                if not targetObjects[i]: continue
                condition = pymel.core.createNode( 'condition' )
                sels[-1].attr( attrName ) >> condition.firstTerm
                condition.secondTerm.set( i )
                condition.colorIfTrueR.set( 1 )
                condition.colorIfFalseR.set( 0 )
                condition.outColorR >> targetObjects[i].v
                
            
            cmds.undoInfo( cck=1 )
            
        self.ui_buttons.button_connect.clicked.connect( connectCommand )
        self.ui_buttons.button_addLine.clicked.connect( addLineCommand )

    def eventFilter( self, *args, **kwargs):
        event = args[1]
        if event.type() == QtCore.QEvent.LayoutRequest or event.type() == QtCore.QEvent.Move :
            pass