Skip to content

Commit

Permalink
cleanup.
Browse files Browse the repository at this point in the history
fixed menu position.
added menu entry.
  • Loading branch information
Ahmidou Lyazidi committed Apr 25, 2016
1 parent 4edb1b4 commit 3d3ff16
Show file tree
Hide file tree
Showing 8 changed files with 93 additions and 51 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
*.pyc
Empty file added __init__.py
Empty file.
Binary file removed __init__.pyc
Binary file not shown.
Binary file removed simpleEval.pyc
Binary file not shown.
99 changes: 70 additions & 29 deletions xsiTransformPanel.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,23 @@
from PySide import QtGui, QtCore
from PySide.QtCore import *
from PySide.QtGui import *

import re
import math
from simpleEval import simple_eval


class XYZLineEdit(QtGui.QLineEdit):
def __init__(self, contents='', parent=None):
super(XYZLineEdit, self).__init__(contents, parent)
self.returnPressed.connect(self.validate)
self._before = contents
self.value = 0.0
regexp = QtCore.QRegExp('^[\d\(\)\+\-\*\/\.]*$')
self.validator = QRegExpValidator(regexp)

def focusInEvent(self, event):
#self.selectAll()
# self.selectAll()
if event.reason() != QtCore.Qt.PopupFocusReason:
self._before = self.text()
super(XYZLineEdit, self).focusInEvent(event)
Expand All @@ -22,40 +29,49 @@ def focusOutEvent(self, event):

def keyPressEvent(self, e):
if e.key() == QtCore.Qt.Key_Escape:
self.setText(self._before)
self.setText(str(self._before))
self.clearFocus()
else:
super(XYZLineEdit, self).keyPressEvent(e)

def mousePressEvent(self, e, Parent=None):
self.deselect()
super(XYZLineEdit, self).mousePressEvent(e) #required to deselect on 2e click


# required to deselect on 2e click
super(XYZLineEdit, self).mousePressEvent(e)

def validate(self):
state = self.validator.validate(self.text(), 0)[0]
if state == QtGui.QValidator.Acceptable:
try:
exp=simple_eval(self.text())
self.setText( str(exp))
self._before = str(exp)
exp = simple_eval(self.text())
self.setText(str(exp))
self._before = exp
self.clearFocus()
except:
self.setText(self._before)
self.setText(str(self._before))
self.clearFocus()
elif state == QtGui.QValidator.Invalid:
self.setText(self._before)
self.setText(str(self._before))

def set(self, val, isRadian=False):
if isRadian:
self.value = math.degrees(val)
else:
self.value = val
self.setText(str(round(self.value, 3)))


class TooglableMenuButton (QtGui.QPushButton):
def __init__ (self, path, menu, parent = None):
def __init__ (self, path, menu, parent=None):
QtGui.QPushButton.__init__(self, parent)
self.pixmap = QPixmap(path)
self.menu = menu
self.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
self.customContextMenuRequested.connect(self.menuButton_onClicked)

def paintEvent (self, event):
#Draw the corner arrow
#
QtGui.QPushButton.paintEvent(self, event)

style = self.style()
Expand All @@ -65,23 +81,21 @@ def paintEvent (self, event):
p = QtGui.QPainter(self)

if not self.pixmap.isNull():
style.drawItemPixmap(p, self.rect(), Qt.AlignLeft|Qt.AlignTop, self.pixmap);
style.drawItemPixmap(p, self.rect(), Qt.AlignLeft|Qt.AlignTop, self.pixmap)

def menuButton_onClicked(self, point):
# set the menu position on the button's left side
sender = self.sender()
geo = self.geometry()
print point
pos = sender.mapToGlobal(point)
print geo, pos
self.menu.exec_(QPoint(pos.x()-geo.width()-self.menu.geometry().width(), pos.y()))
globalPos = sender.mapToGlobal(QPoint(0 , 0))
pos = QPoint(globalPos.x() - self.menu.geometry().width(), globalPos.y())
self.menu.exec_(pos)

def setMenu(self, menu):
QtGui.QPushButton.setMenu(self, menu)
menu.installEventFilter(self)




class TransformElement(QWidget):
def __init__(self, name, parent, *args, **kwargs):
super(TransformElement, self).__init__(*args, **kwargs)
Expand Down Expand Up @@ -222,21 +236,50 @@ def clearSRT(self):

def createMenus(self):
self.mainMenu = QMenu('TransformMenu')
self.mainMenu.setObjectName('TransformMenu')
self.mainMenu.setTearOffEnabled(True)
self.mainMenu.addAction((QtGui.QAction('test0', self)))
self.mainMenu.setStyleSheet("QMenu::tearoff {height: 8px;} QMenu::tearoff:selected{ background-color: dimgray}")
for action in self.Menuactions:
self.mainMenu.addAction(self.Menuactions[action])
self.mainMenu.setLayoutDirection(Qt.LeftToRight)
self.mainButton.setMenu (self.mainMenu)

self.refMenu = QMenu('RefMenu')
self.refMenu.setTearOffEnabled(True)

self.refMenu.addAction((QtGui.QAction('test0', self)))
self.refMenu.addAction((QtGui.QAction('test1', self)))
self.refMenu.addAction((QtGui.QAction('test2', self)))
self.refMenu.addAction((QtGui.QAction('test3', self)))

self.refMenu.addAction((QtGui.QAction('Use Current Reference', self)))
self.refMenu.addAction((QtGui.QAction('Pick New Reference', self)))
self.refMenu.addSeparator()

self.refMenu.addAction((QtGui.QAction('Pick Object Reference', self)))
self.refMenu.addAction((QtGui.QAction('Pick Point Reference', self)))
self.refMenu.addAction((QtGui.QAction('Pick Edge Reference', self)))
self.refMenu.addAction((QtGui.QAction('Pick Face Reference', self)))
self.refMenu.addSeparator()

ag = QtGui.QActionGroup(self, exclusive=True)
a = ag.addAction((QtGui.QAction('View', self, checkable=True)))
self.refMenu.addAction(a)
a = ag.addAction((QtGui.QAction('XY', self, checkable=True)))
self.refMenu.addAction(a)
a = ag.addAction((QtGui.QAction('XZ', self, checkable=True)))
self.refMenu.addAction(a)
a = ag.addAction((QtGui.QAction('YZ', self, checkable=True)))
self.refMenu.addAction(a)
self.refMenu.addSeparator()

self.refMenu.addAction((QtGui.QAction('Reference Properties..', self)))

self.symMenu = QMenu('SymMenu')
ag = QtGui.QActionGroup(self, exclusive=True)
a = ag.addAction((QtGui.QAction('YZ', self, checkable=True)))
self.symMenu.addAction(a)
a = ag.addAction((QtGui.QAction('XZ', self, checkable=True)))
self.symMenu.addAction(a)
a = ag.addAction((QtGui.QAction('XY', self, checkable=True)))
self.symMenu.addAction(a)
self.symMenu.addSeparator()

self.symMenu.addAction((QtGui.QAction('Symmetry Properties..', self)))


def initUI(self):
Expand Down Expand Up @@ -289,7 +332,7 @@ def initUI(self):
self.refButton.setObjectName('Ref')
self.refButton.setCheckable( True )

self.planeButton = TooglableMenuButton("E:/XSI_DEV/MAYA/python/xsiPanel/leftTopArrow.png", 'Plane')
self.planeButton = TooglableMenuButton("E:/XSI_DEV/MAYA/python/xsiPanel/leftTopArrow.png", self.refMenu, 'Plane')
self.planeButton.setObjectName('Plane')
self.planeButton.setCheckable( True );

Expand All @@ -311,11 +354,9 @@ def initUI(self):
self.cogButton.setCheckable( True );
self.proportionalButton = QtGui.QPushButton('Prop')
self.proportionalButton.setCheckable( True );
self.symmetryButton = TooglableMenuButton("E:/XSI_DEV/MAYA/python/xsiPanel/leftTopArrow.png", self.refMenu, 'Sym')
self.symmetryButton = TooglableMenuButton("E:/XSI_DEV/MAYA/python/xsiPanel/leftTopArrow.png", self.symMenu, 'Sym')
self.symmetryButton.setCheckable( True );

self.symmetryButton.setStyleSheet("QPushButton::menu-indicator {subcontrol-position: left bottom}")

SRTgrid = QtGui.QGridLayout()
SRTgrid.setSpacing(0)
SRTgrid.setContentsMargins(2,2,2,2)
Expand Down
Binary file removed xsiTransformPanel.pyc
Binary file not shown.
44 changes: 22 additions & 22 deletions xsiTransformPanel_maya.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,42 +24,42 @@ def closeEvent(self, event):
QtGui.QWidget.closeEvent(self, event)

def updateSRT(self, msg, mplug, otherMplug, clientData):
#print msg
# print msg
if msg == 2056:
nodeName, attrName = mplug.name().split('.')

if attrName == "translate":
self.translateWidget.X.setText(str(mplug.child(0).asFloat()))
self.translateWidget.Y.setText(str(mplug.child(1).asFloat()))
self.translateWidget.Z.setText(str(mplug.child(2).asFloat()))
self.translateWidget.X.set(mplug.child(0).asFloat())
self.translateWidget.Y.set(mplug.child(1).asFloat())
self.translateWidget.Z.set(mplug.child(2).asFloat())

elif attrName == "rotate":
self.rotateWidget.X.setText(str(math.degrees(mplug.child(0).asFloat())))
self.rotateWidget.Y.setText(str(math.degrees(mplug.child(1).asFloat())))
self.rotateWidget.Z.setText(str(math.degrees(mplug.child(2).asFloat())))
self.rotateWidget.X.set(mplug.child(0).asFloat(), True)
self.rotateWidget.Y.set(mplug.child(1).asFloat(), True)
self.rotateWidget.Z.set(mplug.child(2).asFloat(), True)

elif attrName == "scale":
self.scaleWidget.X.setText(str(mplug.child(0).asFloat()))
self.scaleWidget.Y.setText(str(mplug.child(1).asFloat()))
self.scaleWidget.Z.setText(str(mplug.child(2).asFloat()))
self.scaleWidget.X.set(mplug.child(0).asFloat())
self.scaleWidget.Y.set(mplug.child(1).asFloat())
self.scaleWidget.Z.set(mplug.child(2).asFloat())
elif attrName == "translateX":
self.translateWidget.X.setText(str(mplug.asFloat()))
self.translateWidget.X.set(mplug.asFloat())
elif attrName == "translateY":
self.translateWidget.Y.setText(str(mplug.asFloat()))
self.translateWidget.Y.set(mplug.asFloat())
elif attrName == "translateZ":
self.translateWidget.Z.setText(str(mplug.asFloat()))
self.translateWidget.Z.set(mplug.asFloat())
elif attrName == "rotateX":
self.rotateWidget.X.setText(str(math.degrees(mplug.asFloat())))
self.rotateWidget.X.set(math.degrees(mplug.asFloat()))
elif attrName == "rotateY":
self.rotateWidget.Y.setText(str(math.degrees(mplug.asFloat())))
self.rotateWidget.Y.set(math.degrees(mplug.asFloat()))
elif attrName == "rotateZ":
self.rotateWidget.Z.setText(str(math.degrees(mplug.asFloat())))
self.rotateWidget.Z.set(math.degrees(mplug.asFloat()))
elif attrName == "scaleX":
self.scaleWidget.X.setText(str(mplug.asFloat()))
self.scaleWidget.X.set(mplug.asFloat())
elif attrName == "scaleY":
self.scaleWidget.Y.setText(str(mplug.asFloat()))
self.scaleWidget.Y.set(mplug.asFloat())
elif attrName == "scaleZ":
self.scaleWidget.Z.setText(str(mplug.asFloat()))
self.scaleWidget.Z.set(mplug.asFloat())

def setSRT(self):
self.translateWidget.X.setText("")
Expand All @@ -73,11 +73,11 @@ def setSRT(self):
self.scaleWidget.Z.setText("")

def updateSelection(self, *args, **kwargs):
#TODO: handle multi selection (pass index to client data)
# TODO: handle multi selection (pass index to client data)
selectionList = om.MGlobal.getActiveSelectionList()
#iterator = OpenMaya.MItSelectionList( selectionList, OpenMaya.MFn.kDagNode )
# iterator = OpenMaya.MItSelectionList( selectionList, OpenMaya.MFn.kDagNode )

#clean previous selection callback
# clean previous selection callback
if self.selectionList:
ids = om.MMessage.nodeCallbacks(self.selectionList)
if self.srtUpdaterID is not None and self.srtUpdaterID in ids:
Expand Down
Binary file removed xsiTransformPanel_maya.pyc
Binary file not shown.

0 comments on commit 3d3ff16

Please sign in to comment.