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 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
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
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
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
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