Refactor checkable command, improve command checkActive()
This commit is contained in:
parent
d69e5c8f88
commit
333d4f8824
|
@ -153,13 +153,13 @@ class ConstraintCommand:
|
|||
def __init__(self,tp):
|
||||
self.tp = tp
|
||||
self._id = 100 + tp._id
|
||||
self._active = False
|
||||
self._active = None
|
||||
|
||||
def workbenchActivated(self):
|
||||
pass
|
||||
|
||||
def workbenchDeactivated(self):
|
||||
pass
|
||||
self._active = None
|
||||
|
||||
def getContextMenuName(self):
|
||||
pass
|
||||
|
@ -175,13 +175,19 @@ class ConstraintCommand:
|
|||
self.tp.getName()), asm3.assembly.AsmConstraint.make,self.tp._id)
|
||||
|
||||
def IsActive(self):
|
||||
return FreeCADGui.ActiveDocument and self._active
|
||||
if not FreeCAD.ActiveDocument:
|
||||
return False
|
||||
if self._active is None:
|
||||
self.checkActive()
|
||||
return self._active
|
||||
|
||||
def checkActive(self):
|
||||
from asm3.assembly import AsmConstraint
|
||||
if guilogger.catchTrace('selection "{}" exception'.format(
|
||||
self.tp.getName()), AsmConstraint.getSelection, self.tp._id):
|
||||
self._active = True
|
||||
else:
|
||||
self._active = False
|
||||
|
||||
def onClearSelection(self):
|
||||
self._active = False
|
||||
|
|
70
gui.py
70
gui.py
|
@ -85,13 +85,6 @@ class AsmCmdManager(ProxyType):
|
|||
def getName(cls):
|
||||
return 'asm3'+cls.__name__[3:]
|
||||
|
||||
def GetResources(cls):
|
||||
return {
|
||||
'Pixmap':addIconToFCAD(cls._iconName),
|
||||
'MenuText':cls.getMenuText(),
|
||||
'ToolTip':cls.getToolTip()
|
||||
}
|
||||
|
||||
def getMenuText(cls):
|
||||
return cls._menuText
|
||||
|
||||
|
@ -99,22 +92,35 @@ class AsmCmdManager(ProxyType):
|
|||
return getattr(cls,'_tooltip',cls.getMenuText())
|
||||
|
||||
def IsActive(cls):
|
||||
if cls._active and cls._id>=0 and FreeCAD.ActiveDocument:
|
||||
return True
|
||||
|
||||
def checkActive(cls):
|
||||
pass
|
||||
if cls._id<0 or not FreeCAD.ActiveDocument:
|
||||
return False
|
||||
if cls._active is None:
|
||||
cls.checkActive()
|
||||
return cls._active
|
||||
|
||||
def onClearSelection(cls):
|
||||
pass
|
||||
|
||||
class AsmCmdBase(with_metaclass(AsmCmdManager,object)):
|
||||
_id = -1
|
||||
_active = True
|
||||
_active = None
|
||||
_toolbarName = 'Assembly3'
|
||||
_menuGroupName = ''
|
||||
_contextMenuName = 'Assembly'
|
||||
|
||||
@classmethod
|
||||
def checkActive(cls):
|
||||
cls._active = True
|
||||
|
||||
@classmethod
|
||||
def GetResources(cls):
|
||||
return {
|
||||
'Pixmap':addIconToFCAD(cls._iconName),
|
||||
'MenuText':cls.getMenuText(),
|
||||
'ToolTip':cls.getToolTip()
|
||||
}
|
||||
|
||||
|
||||
class AsmCmdNew(AsmCmdBase):
|
||||
_id = 0
|
||||
_menuText = 'Create assembly'
|
||||
|
@ -161,7 +167,6 @@ class AsmCmdAxialMove(AsmCmdMove):
|
|||
|
||||
class AsmCmdCheckable(AsmCmdBase):
|
||||
_id = -2
|
||||
_action = None
|
||||
_saveParam = False
|
||||
|
||||
@classmethod
|
||||
|
@ -175,7 +180,8 @@ class AsmCmdCheckable(AsmCmdBase):
|
|||
@classmethod
|
||||
def setChecked(cls,v):
|
||||
setattr(cls.__class__,cls.getAttributeName(),v)
|
||||
cls.setParam('Bool',cls.getAttributeName(),v)
|
||||
if cls._saveParam:
|
||||
cls.setParam('Bool',cls.getAttributeName(),v)
|
||||
|
||||
@classmethod
|
||||
def onRegister(cls):
|
||||
|
@ -186,36 +192,14 @@ class AsmCmdCheckable(AsmCmdBase):
|
|||
cls.setChecked(v)
|
||||
|
||||
@classmethod
|
||||
def workbenchActivated(cls):
|
||||
if cls._action:
|
||||
return
|
||||
from PySide import QtGui
|
||||
mw = FreeCADGui.getMainWindow()
|
||||
tb = mw.findChild(QtGui.QToolBar,cls._toolbarName)
|
||||
if not tb:
|
||||
logger.error('cannot find toolbar "{}"'.format(cls._toolbarName))
|
||||
return
|
||||
name = cls.getName()
|
||||
for action in tb.actions():
|
||||
if action.objectName() == name:
|
||||
action.setCheckable(True)
|
||||
action.setChecked(cls.getChecked())
|
||||
cls._action = action
|
||||
break
|
||||
if not cls._action:
|
||||
cls._active = False
|
||||
logger.error('cannot find action "{}"'.format(cls.getName()))
|
||||
else:
|
||||
cls._active = True
|
||||
return
|
||||
def GetResources(cls):
|
||||
ret = super(AsmCmdCheckable,cls).GetResources()
|
||||
ret['Checkable'] = cls.getChecked()
|
||||
return ret
|
||||
|
||||
@classmethod
|
||||
def Activated(cls):
|
||||
if not cls._action:
|
||||
return
|
||||
checked = not cls.getChecked()
|
||||
cls.setChecked(checked)
|
||||
cls._action.setChecked(checked)
|
||||
def Activated(cls,checked):
|
||||
cls.setChecked(True if checked else False)
|
||||
|
||||
class AsmCmdTrace(AsmCmdCheckable):
|
||||
_id = 4
|
||||
|
|
Loading…
Reference in New Issue
Block a user