コード例 #1
0
ファイル: gfxNode.py プロジェクト: theomission/meShaderEd
	def addGfxNodeParam ( self, param ) :
		#
		if DEBUG_MODE : print ">> GfxNode.addGfxNodeParam (%s)" % param.label
		if param.isInput :
			labels = self.inputParamLabels
			connectors = self.inputConnectors
		else :
			labels = self.outputParamLabels
			connectors = self.outputConnectors
		label = GfxNodeLabel ( param.label, param )
		label.setBgColor ( self.bgColor )
		label.setNormalColor ( self.normalColor )
		if not param.isInput : label.setBold ()
			
		if param.help is not None :
			label.setWhatsThis ( self.node.help )
		
		self.updateGfxNodeParamLabel ( param, label )

		labels.append ( label )

		connector = GfxNodeConnector ( param, UI.CONNECTOR_RADIUS, node = None )
		if not param.isInput : 
			connector.singleLinkOnly = False
		connectors.append ( connector )
コード例 #2
0
ファイル: gfxNote.py プロジェクト: theomission/meShaderEd
    def setupParameters(self):
        #
        if self.node is not None:
            #
            # get known node parametres
            #
            for name in [
                    'text_color', 'bg_color', 'opacity', 'border', 'justify',
                    'text'
            ]:
                param = self.node.getInputParamByName(name)
                if param is not None:
                    if name == 'text':
                        self.text = param.value
                        #print '* text = %s' % self.text
                    elif name == 'border':
                        self.showBorder = param.value
                        #print '* showBorder = %s' % self.showBorder
                    elif name == 'opacity':
                        self.opacity = param.value
                        #print '* opacity = %f' % self.opacity
                    elif name == 'bg_color':
                        r = param.value[0]
                        g = param.value[1]
                        b = param.value[2]
                        self.bgColor = QtGui.QColor(r * 255, g * 255, b * 255)
                    elif name == 'text_color':
                        r = param.value[0]
                        g = param.value[1]
                        b = param.value[2]
                        self.textColor = QtGui.QColor(r * 255, g * 255,
                                                      b * 255)
                        #print '* text_color = %f %f %f' % ( r, g, b )
                    elif name == 'justify':
                        if param.value == 0:
                            self.justify = QtCore.Qt.AlignLeft
                        elif param.value == 1:
                            self.justify = QtCore.Qt.AlignHCenter
                        elif param.value == 2:
                            self.justify = QtCore.Qt.AlignRight

            self.label_widget = GfxNodeLabel(self.node.label, bgFill=False)
            self.label_widget.setBold()
            self.label_widget.setNormalColor(self.textColor)
            if self.isSelected(): self.label_widget.setSelected()

            self.text_widget = GfxNodeLabel(self.text, bgFill=False)
            self.text_widget.setNormalColor(self.textColor)
            self.text_widget.setNormal(True)
            self.text_widget.justify = self.justify

            self.label_widget.setParentItem(self)
            self.text_widget.setParentItem(self)
コード例 #3
0
ファイル: gfxNote.py プロジェクト: UIKit0/meShaderEd
  def setupParameters ( self ) :
    #
    if self.node is not None :
      #
      # get known node parametres
      #
      for name in [ 'text_color', 'bg_color', 'opacity', 'border', 'justify', 'text' ] :
        param = self.node.getInputParamByName ( name )
        if param is not None :
          if name == 'text' :
            self.text = param.value
            #print '* text = %s' % self.text
          elif name == 'border' :
            self.showBorder = param.value
            #print '* showBorder = %s' % self.showBorder
          elif name == 'opacity' :
            self.opacity = param.value
            #print '* opacity = %f' % self.opacity
          elif name == 'bg_color' :
            r = param.value [0] 
            g = param.value [1] 
            b = param.value [2] 
            self.bgColor = QtGui.QColor ( r * 255, g * 255, b * 255 )
          elif name == 'text_color' :
            r = param.value [0] 
            g = param.value [1] 
            b = param.value [2] 
            self.textColor = QtGui.QColor ( r * 255, g * 255, b * 255 )
            #print '* text_color = %f %f %f' % ( r, g, b )
          elif name == 'justify' :
            if param.value == 0 :
              self.justify = QtCore.Qt.AlignLeft
            elif param.value == 1 :
              self.justify = QtCore.Qt.AlignHCenter
            elif param.value == 2 :
              self.justify = QtCore.Qt.AlignRight
      
      self.label_widget = GfxNodeLabel ( self.node.label, bgFill = False )
      self.label_widget.setBold ()
      self.label_widget.setNormalColor ( self.textColor )
      if self.isSelected () : self.label_widget.setSelected ()

      self.text_widget = GfxNodeLabel ( self.text, bgFill = False )
      self.text_widget.setNormalColor ( self.textColor )
      self.text_widget.setNormal ( True )
      self.text_widget.justify = self.justify
      
      self.label_widget.setParentItem ( self )
      self.text_widget.setParentItem ( self )
コード例 #4
0
ファイル: gfxNode.py プロジェクト: theomission/meShaderEd
	def setupHeader ( self ) :
		#
		if self.node.type != 'variable' :
			self.header [ 'label' ] = GfxNodeLabel ( self.node.label )

			self.header [ 'label' ].setBgColor ( self.bgColor )
			self.header [ 'label' ].setNormalColor ( self.normalColor )
			self.header [ 'label' ].setBold ()
			self.header [ 'label' ].setSelected ( self.isSelected () )
			
			if self.node.help is not None :
				self.header [ 'label' ].setWhatsThis ( self.node.help )
			
			self.header [ 'name' ] = GfxNodeLabel ( self.node.name )

			self.header [ 'name' ].setBgColor ( self.bgColor )
			self.header [ 'name' ].setNormalColor ( self.normalColor )
			self.header [ 'name' ].setItalic ()
			self.header [ 'name' ].setProcessEvents ( False )

			if self.hasSwatch : self.header [ 'swatch' ] = GfxNodeSwatch ( self.swatchSize )
コード例 #5
0
ファイル: gfxNote.py プロジェクト: theomission/meShaderEd
class GfxNote(QtModule.QGraphicsItem):
    #
    Type = GFX_NOTE_TYPE

    #
    # __init__
    #
    def __init__(self, node):
        #
        QtModule.QGraphicsItem.__init__(self)

        self.label_widget = None
        self.text_widget = None

        self.headerFont = QtGui.QFont()
        self.paramsFont = QtGui.QFont()

        self.x_offset = 10
        self.y_offset = 10
        self.radius = 10

        # node parameters
        self.showBorder = True
        self.justify = QtCore.Qt.AlignLeft  # left:center:right
        self.text = ''
        self.opacity = 0.5
        self.bgColor = QtGui.QColor(128, 128, 128)
        self.textColor = QtGui.QColor(0, 0, 0)
        self.selectedColor = QtGui.QColor(250, 250, 250)

        self.node = node

        if self.node is not None:
            self.updateGfxNode()
            (x, y) = self.node.offset
            self.setPos(x, y)

        self.PenBorderNormal = QtGui.QPen(QtGui.QBrush(self.textColor), 1.0,
                                          QtCore.Qt.SolidLine,
                                          QtCore.Qt.RoundCap,
                                          QtCore.Qt.RoundJoin)

        self.PenBorderSelected = QtGui.QPen(QtGui.QBrush(self.selectedColor),
                                            2.0, QtCore.Qt.SolidLine,
                                            QtCore.Qt.RoundCap,
                                            QtCore.Qt.RoundJoin)

        self.bgColor.setAlphaF(self.opacity)

        self.BrushNodeNormal = QtGui.QBrush(self.bgColor)

        # flag (new from QT 4.6...)
        self.setFlag(QtModule.QGraphicsItem.ItemSendsScenePositionChanges)
        self.setFlag(QtModule.QGraphicsItem.ItemSendsGeometryChanges)
        #self.setFlag ( QtModule.QGraphicsItem.ItemIsFocusable )

        # qt graphics stuff
        self.setFlag(QtModule.QGraphicsItem.ItemIsMovable)
        self.setFlag(QtModule.QGraphicsItem.ItemIsSelectable)
        self.setZValue(1)

    #
    # type
    #
    def type(self):
        return GfxNote.Type

    #
    # remove
    #
    def remove(self):
        #
        if DEBUG_MODE: print '>> GfxNote.remove'
        if usePyQt4:
            self.scene().emit(QtCore.SIGNAL('onGfxNodeRemoved'), self)
        else:
            self.scene().onGfxNodeRemoved.emit(self)

    #
    # updateNodeLabel
    #
    def updateNodeLabel(self):
        #
        self.label_widget.setText(self.node.label)
        self.setupGeometry()
        self.update()

    #
    # updateGfxNode
    #
    def updateGfxNode(self):
        if DEBUG_MODE:
            print '>> GfxNote( %s ).updateGfxNode' % (self.node.label)
        # remove all children
        for item in self.childItems():
            self.scene().removeItem(item)
        self.setupParameters()
        self.setupGeometry()
        self.update()

    #
    # setupParameters
    #
    def setupParameters(self):
        #
        if self.node is not None:
            #
            # get known node parametres
            #
            for name in [
                    'text_color', 'bg_color', 'opacity', 'border', 'justify',
                    'text'
            ]:
                param = self.node.getInputParamByName(name)
                if param is not None:
                    if name == 'text':
                        self.text = param.value
                        #print '* text = %s' % self.text
                    elif name == 'border':
                        self.showBorder = param.value
                        #print '* showBorder = %s' % self.showBorder
                    elif name == 'opacity':
                        self.opacity = param.value
                        #print '* opacity = %f' % self.opacity
                    elif name == 'bg_color':
                        r = param.value[0]
                        g = param.value[1]
                        b = param.value[2]
                        self.bgColor = QtGui.QColor(r * 255, g * 255, b * 255)
                    elif name == 'text_color':
                        r = param.value[0]
                        g = param.value[1]
                        b = param.value[2]
                        self.textColor = QtGui.QColor(r * 255, g * 255,
                                                      b * 255)
                        #print '* text_color = %f %f %f' % ( r, g, b )
                    elif name == 'justify':
                        if param.value == 0:
                            self.justify = QtCore.Qt.AlignLeft
                        elif param.value == 1:
                            self.justify = QtCore.Qt.AlignHCenter
                        elif param.value == 2:
                            self.justify = QtCore.Qt.AlignRight

            self.label_widget = GfxNodeLabel(self.node.label, bgFill=False)
            self.label_widget.setBold()
            self.label_widget.setNormalColor(self.textColor)
            if self.isSelected(): self.label_widget.setSelected()

            self.text_widget = GfxNodeLabel(self.text, bgFill=False)
            self.text_widget.setNormalColor(self.textColor)
            self.text_widget.setNormal(True)
            self.text_widget.justify = self.justify

            self.label_widget.setParentItem(self)
            self.text_widget.setParentItem(self)

    #
    # setupGeometry
    #
    def setupGeometry(self):
        #
        wi = 80  # minimal node width
        hi = 0
        x = self.x_offset
        y = self.y_offset

        (wi_label, hi_label) = self.label_widget.getLabelSize()
        self.label_widget.rect = QtCore.QRectF(x, y, wi_label, hi_label)

        (wi_text, hi_text) = self.text_widget.getLabelSize()
        self.text_widget.rect = QtCore.QRectF(x, y + hi_label + self.y_offset,
                                              wi_text, hi_text)

        wi_max = max(wi, wi_label, wi_text) + 2 * self.x_offset
        hi_max = hi_label + hi_text + 3 * self.y_offset

        self.rect = QtCore.QRectF(0, 0, wi_max, hi_max)

    #
    # boundingRect
    #
    def boundingRect(self):
        #print ( "GfxNode.boundingRect" )
        bound_rect = QtCore.QRectF(self.rect)
        #bound_rect.adjust( -8, 0, 8, 0 )
        return bound_rect

    #
    # shape
    #
    def shape(self):
        #
        shape = QtGui.QPainterPath()
        shape.addRect(self.boundingRect())
        #shape += self.header['input'].shape()
        #shape += self.header['output'].shape()
        return shape

    #
    # itemChange
    #
    def itemChange(self, change, value):
        #
        if change == QtModule.QGraphicsItem.ItemSelectedHasChanged:  #ItemSelectedChange:
            self.label_widget.setSelected(value == 1)
            if value == 1:
                items = self.scene().items()
                for i in range(len(items) - 1, -1, -1):
                    if items[i].parentItem() is None:
                        if items[i] != self:
                            items[i].stackBefore(self)
                #scene.setFocusItem ( self )
        elif change == QtModule.QGraphicsItem.ItemPositionHasChanged:
            from meShaderEd import getDefaultValue
            grid_snap = getDefaultValue(app_settings, 'WorkArea', 'grid_snap')
            grid_size = int(
                getDefaultValue(app_settings, 'WorkArea', 'grid_size'))
            x = self.x()
            y = self.y()
            if grid_snap:
                #if DEBUG_MODE : print '* snap to grid  (size = %d)' % grid_size
                x -= (x % grid_size)
                y -= (y % grid_size)
                self.setPos(x, y)
            #if DEBUG_MODE : print '* GfxNode.itemChange = ItemPositionHasChanged (%f, %f)' % ( x, y )
            self.node.offset = (x, y)
            #self.adjustLinks ()
        return QtModule.QGraphicsItem.itemChange(self, change, value)

    #
    # paint
    #
    def paint(self, painter, option, widget):
        #print ( ">> GfxNode.paint" )
        painter.setRenderHint(QtGui.QPainter.Antialiasing)
        painter.setRenderHint(QtGui.QPainter.SmoothPixmapTransform)

        self.paintFrame(painter)

    #
    # paintFrame
    #
    def paintFrame(self, painter):
        #print ( ">> GfxNode.paintWindowFrame" )
        pen = self.PenBorderNormal
        brush = self.BrushNodeNormal

        self.bgColor.setAlphaF(self.opacity)
        brush.setColor(self.bgColor)

        if self.isSelected(): pen = self.PenBorderSelected

        if not self.showBorder:
            pen.setStyle(QtCore.Qt.NoPen)
        else:
            pen.setStyle(QtCore.Qt.SolidLine)

        painter.setPen(pen)
        painter.setBrush(brush)
        painter.drawRoundedRect(self.rect, self.radius, self.radius,
                                QtCore.Qt.AbsoluteSize)
コード例 #6
0
ファイル: gfxNode.py プロジェクト: theomission/meShaderEd
	def setupParams ( self, params, labels, connectors, updateConnectors = True ):
		#
		for param in params :
			# ignore attributes
			if param.provider != 'attribute' :
				label = GfxNodeLabel ( param.label, param )
				label.setBgColor ( self.bgColor )
				label.setNormalColor ( self.normalColor )
				if not param.isInput : label.setBold ()
					
				if param.help is not None :
					label.setWhatsThis ( self.node.help )
				
				if param.type in VALID_RSL_PARAM_TYPES :
					label.setNormal ()
					isVarying = ( param.detail == 'varying' )
					isPrimitive = ( param.provider == 'primitive' )
					label.setItalic ( isVarying ) 
					label.setSelected ( param.shaderParam  ) 
					label.setAlternate ( isPrimitive  ) 
					# this allows to change param.shaderParam attribute by CTRL-click on label
					# and switch param.provide to "primitive" by ALT-click
					label.setProcessEvents ( True )   
				labels.append ( label )
				if updateConnectors :
					connector = GfxNodeConnector ( param, UI.CONNECTOR_RADIUS, node = None )
					if not param.isInput : connector.singleLinkOnly = False
					connectors.append ( connector )
コード例 #7
0
ファイル: gfxNote.py プロジェクト: UIKit0/meShaderEd
class GfxNote ( QtGui.QGraphicsItem ):
  #
  Type = GFX_NOTE_TYPE
  #
  # __init__
  #
  def __init__ ( self, node ) :
    #
    QtGui.QGraphicsItem.__init__ ( self )

    self.label_widget = None
    self.text_widget = None
    
    self.headerFont = QtGui.QFont ()
    self.paramsFont = QtGui.QFont ()
    
    self.x_offset = 10
    self.y_offset = 10
    self.radius = 10

    # node parameters
    self.showBorder = True
    self.justify = QtCore.Qt.AlignLeft # left:center:right
    self.text = ''
    self.opacity = 0.5
    self.bgColor = QtGui.QColor ( 128, 128, 128 )
    self.textColor = QtGui.QColor ( 0, 0, 0 )
    self.selectedColor = QtGui.QColor ( 250, 250, 250 )
    
    self.node = node
    
    if self.node is not None :
      self.updateGfxNode ()
      ( x, y ) = self.node.offset
      self.setPos ( x, y )
    
    self.PenBorderNormal = QtGui.QPen( QtGui.QBrush ( self.textColor ),
                                   1.0,
                                   QtCore.Qt.SolidLine,
                                   QtCore.Qt.RoundCap,
                                   QtCore.Qt.RoundJoin )

    self.PenBorderSelected = QtGui.QPen( QtGui.QBrush ( self.selectedColor ),
                                   2.0,
                                   QtCore.Qt.SolidLine,
                                   QtCore.Qt.RoundCap,
                                   QtCore.Qt.RoundJoin )

    self.bgColor.setAlphaF ( self.opacity )
    
    self.BrushNodeNormal = QtGui.QBrush ( self.bgColor )

    # flag (new from QT 4.6...)
    self.setFlag ( QtGui.QGraphicsItem.ItemSendsScenePositionChanges )
    self.setFlag ( QtGui.QGraphicsItem.ItemSendsGeometryChanges )
    #self.setFlag ( QtGui.QGraphicsItem.ItemIsFocusable )

    # qt graphics stuff
    self.setFlag ( QtGui.QGraphicsItem.ItemIsMovable )
    self.setFlag ( QtGui.QGraphicsItem.ItemIsSelectable )
    self.setZValue ( 1 )  
  #
  # type
  #
  def type ( self ) : return GfxNote.Type
  #
  # remove
  #
  def remove ( self ) :
    #
    if DEBUG_MODE : print '>> GfxNote remove gfxNode (temp)'
    self.scene().emit ( QtCore.SIGNAL ( 'onGfxNodeRemoved' ), self )
  #
  # updateNodeLabel
  #
  def updateNodeLabel ( self ) :
    #
    self.label_widget.setText ( self.node.label )
    self.setupGeometry ()
    self.update ()
  #
  # updateGfxNode
  #
  def updateGfxNode ( self ) :
    # remove all children
    for item in self.childItems () : self.scene ().removeItem ( item )
    self.setupParameters ()
    self.setupGeometry ()
  #
  # setupParameters
  #
  def setupParameters ( self ) :
    #
    if self.node is not None :
      #
      # get known node parametres
      #
      for name in [ 'text_color', 'bg_color', 'opacity', 'border', 'justify', 'text' ] :
        param = self.node.getInputParamByName ( name )
        if param is not None :
          if name == 'text' :
            self.text = param.value
            #print '* text = %s' % self.text
          elif name == 'border' :
            self.showBorder = param.value
            #print '* showBorder = %s' % self.showBorder
          elif name == 'opacity' :
            self.opacity = param.value
            #print '* opacity = %f' % self.opacity
          elif name == 'bg_color' :
            r = param.value [0] 
            g = param.value [1] 
            b = param.value [2] 
            self.bgColor = QtGui.QColor ( r * 255, g * 255, b * 255 )
          elif name == 'text_color' :
            r = param.value [0] 
            g = param.value [1] 
            b = param.value [2] 
            self.textColor = QtGui.QColor ( r * 255, g * 255, b * 255 )
            #print '* text_color = %f %f %f' % ( r, g, b )
          elif name == 'justify' :
            if param.value == 0 :
              self.justify = QtCore.Qt.AlignLeft
            elif param.value == 1 :
              self.justify = QtCore.Qt.AlignHCenter
            elif param.value == 2 :
              self.justify = QtCore.Qt.AlignRight
      
      self.label_widget = GfxNodeLabel ( self.node.label, bgFill = False )
      self.label_widget.setBold ()
      self.label_widget.setNormalColor ( self.textColor )
      if self.isSelected () : self.label_widget.setSelected ()

      self.text_widget = GfxNodeLabel ( self.text, bgFill = False )
      self.text_widget.setNormalColor ( self.textColor )
      self.text_widget.setNormal ( True )
      self.text_widget.justify = self.justify
      
      self.label_widget.setParentItem ( self )
      self.text_widget.setParentItem ( self )
  #
  # setupGeometry
  #
  def setupGeometry ( self ) :
    #
    wi = 80 # minimal node width
    hi = 0
    x = self.x_offset
    y = self.y_offset
    
    ( wi_label, hi_label ) = self.label_widget.getLabelSize ()
    self.label_widget.rect = QtCore.QRectF ( x, y, wi_label, hi_label )
    
    ( wi_text, hi_text ) = self.text_widget.getLabelSize ()
    self.text_widget.rect = QtCore.QRectF ( x, y + hi_label + self.y_offset , wi_text, hi_text )
    
    wi_max = max ( wi,  wi_label, wi_text ) + 2 * self.x_offset 
    hi_max = hi_label + hi_text + 3 * self.y_offset
    
    self.rect = QtCore.QRectF ( 0, 0, wi_max, hi_max )  
  #
  # boundingRect
  #
  def boundingRect ( self ) :
    #print ( "GfxNode.boundingRect" )
    bound_rect = QtCore.QRectF ( self.rect )
    #bound_rect.adjust( -8, 0, 8, 0 )
    return bound_rect
  #
  # shape
  #
  def shape ( self ) :
    #
    shape = QtGui.QPainterPath ()
    shape.addRect ( self.boundingRect () )
    #shape += self.header['input'].shape()
    #shape += self.header['output'].shape()
    return shape
  #
  # itemChange
  #
  def itemChange ( self, change, value ) :
    #
    if change == QtGui.QGraphicsItem.ItemSelectedHasChanged : #ItemSelectedChange:
      self.label_widget.setSelected ( value.toBool () )
      if value.toBool () :
        items = self.scene ().items ()
        for i in range ( len ( items ) - 1, -1, -1 ) :
          if items [ i ].parentItem() is None :
            if items [ i ] != self :
              items [ i ].stackBefore ( self )
        #scene.setFocusItem ( self )
    elif change == QtGui.QGraphicsItem.ItemPositionHasChanged:
      from meShaderEd import getDefaultValue
      grid_snap = getDefaultValue ( app_settings, 'WorkArea', 'grid_snap' )
      grid_size = int ( getDefaultValue ( app_settings, 'WorkArea', 'grid_size' )  )
      x = self.x ()
      y = self.y ()
      if grid_snap :
        #if DEBUG_MODE : print '* snap to grid  (size = %d)' % grid_size
        x -= ( x % grid_size )
        y -= ( y % grid_size )
        self.setPos ( x, y )
      #if DEBUG_MODE : print '* GfxNode.itemChange = ItemPositionHasChanged (%f, %f)' % ( x, y )
      self.node.offset = ( x, y )
      #self.adjustLinks ()
    return QtGui.QGraphicsItem.itemChange ( self, change, value )
  #
  # paint
  #
  def paint ( self, painter, option, widget ) :
    # print ( ">> GfxNode.paint" )
    painter.setRenderHint ( QtGui.QPainter.Antialiasing )
    painter.setRenderHint ( QtGui.QPainter.SmoothPixmapTransform )

    self.paintFrame ( painter )
  #
  # paintFrame
  #
  def paintFrame ( self, painter ) :
    #print ( ">> GfxNode.paintWindowFrame" )
    pen = self.PenBorderNormal
    brush = self.BrushNodeNormal
    
    self.bgColor.setAlphaF ( self.opacity )
    brush.setColor ( self.bgColor )
    
    if self.isSelected () : pen = self.PenBorderSelected

    if not self.showBorder : 
      pen.setStyle ( QtCore.Qt.NoPen )
    else :
      pen.setStyle ( QtCore.Qt.SolidLine )
        
    painter.setPen ( pen )
    painter.setBrush ( brush )
    painter.drawRoundedRect ( self.rect, self.radius, self.radius, QtCore.Qt.AbsoluteSize )