gui: support tree view mouse over preselection
This commit is contained in:
parent
8cf3c3f48b
commit
10ca2f7710
73
gui.py
73
gui.py
|
@ -8,8 +8,9 @@ class SelectionObserver:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self._attached = False
|
self._attached = False
|
||||||
self.cmds = []
|
self.cmds = []
|
||||||
self.elements = set()
|
self.elements = dict()
|
||||||
self.attach()
|
self.attach()
|
||||||
|
self.busy = False;
|
||||||
|
|
||||||
def setCommands(self,cmds):
|
def setCommands(self,cmds):
|
||||||
self.cmds = cmds
|
self.cmds = cmds
|
||||||
|
@ -18,39 +19,52 @@ class SelectionObserver:
|
||||||
for cmd in self.cmds:
|
for cmd in self.cmds:
|
||||||
cmd.checkActive()
|
cmd.checkActive()
|
||||||
|
|
||||||
def setElementVisible(self,docname,objname,subname,vis):
|
def _setElementVisible(self,docname,objname,subname,vis):
|
||||||
|
obj = FreeCAD.getDocument(docname).getObject(objname)
|
||||||
|
sobj = obj.getSubObject(subname,1)
|
||||||
|
from .assembly import isTypeOf,AsmConstraint,\
|
||||||
|
AsmElement,AsmElementLink
|
||||||
|
if isTypeOf(sobj,(AsmElement,AsmElementLink)):
|
||||||
|
res = sobj.Proxy.parent.Object.isElementVisible(sobj.Name)
|
||||||
|
if res and vis:
|
||||||
|
return False
|
||||||
|
sobj.Proxy.parent.Object.setElementVisible(sobj.Name,vis)
|
||||||
|
elif isTypeOf(sobj,AsmConstraint):
|
||||||
|
vis = [vis] * len(sobj.Group)
|
||||||
|
sobj.setPropertyStatus('VisibilityList','-Immutable')
|
||||||
|
sobj.VisibilityList = vis
|
||||||
|
sobj.setPropertyStatus('VisibilityList','Immutable')
|
||||||
|
else:
|
||||||
|
return
|
||||||
|
if vis:
|
||||||
|
FreeCADGui.Selection.updateSelection(vis,obj,subname)
|
||||||
|
|
||||||
|
def setElementVisible(self,docname,objname,subname,vis,presel=False):
|
||||||
if not AsmCmdManager.AutoElementVis:
|
if not AsmCmdManager.AutoElementVis:
|
||||||
self.elements.clear()
|
self.elements.clear()
|
||||||
return
|
return
|
||||||
try:
|
key = (docname,objname,subname)
|
||||||
obj = FreeCAD.getDocument(docname).getObject(objname)
|
val = None
|
||||||
sobj = obj.getSubObject(subname,1)
|
if not vis:
|
||||||
from .assembly import isTypeOf,AsmConstraint,\
|
val = self.elements.get(key,None)
|
||||||
AsmElement,AsmElementLink
|
if val is None or (presel and val):
|
||||||
if isTypeOf(sobj,(AsmElement,AsmElementLink)):
|
|
||||||
sobj.Proxy.parent.Object.setElementVisible(sobj.Name,vis)
|
|
||||||
elif isTypeOf(sobj,AsmConstraint):
|
|
||||||
vis = [vis] * len(sobj.Group)
|
|
||||||
sobj.setPropertyStatus('VisibilityList','-Immutable')
|
|
||||||
sobj.VisibilityList = vis
|
|
||||||
sobj.setPropertyStatus('VisibilityList','Immutable')
|
|
||||||
else:
|
|
||||||
return
|
return
|
||||||
if vis:
|
if logger.catchWarn('',self._setElementVisible,
|
||||||
self.elements.add((docname,objname,subname))
|
docname,objname,subname,vis) is False and presel:
|
||||||
FreeCADGui.Selection.updateSelection(obj,subname)
|
return
|
||||||
except Exception:
|
if not vis:
|
||||||
pass
|
self.elements.pop(key,None)
|
||||||
finally:
|
elif not presel:
|
||||||
if not vis and self.elements:
|
self.elements[key] = True
|
||||||
logger.catchTrace('',self.elements.remove,
|
else:
|
||||||
(docname,objname,subname))
|
self.elements.setdefault(key,False)
|
||||||
|
|
||||||
def resetElementVisible(self):
|
def resetElementVisible(self):
|
||||||
elements = list(self.elements)
|
elements = list(self.elements)
|
||||||
self.elements.clear()
|
self.elements.clear()
|
||||||
for docname,objname,subname in elements:
|
for docname,objname,subname in elements:
|
||||||
self.setElementVisible(docname,objname,subname,False)
|
logger.catchWarn('',self._setElementVisible,
|
||||||
|
docname,objname,subname,False)
|
||||||
|
|
||||||
def addSelection(self,docname,objname,subname,_pos):
|
def addSelection(self,docname,objname,subname,_pos):
|
||||||
self.onChanged()
|
self.onChanged()
|
||||||
|
@ -58,8 +72,13 @@ class SelectionObserver:
|
||||||
|
|
||||||
def removeSelection(self,docname,objname,subname):
|
def removeSelection(self,docname,objname,subname):
|
||||||
self.onChanged()
|
self.onChanged()
|
||||||
if (docname,objname,subname) in self.elements:
|
self.setElementVisible(docname,objname,subname,False)
|
||||||
self.setElementVisible(docname,objname,subname,False)
|
|
||||||
|
def setPreselection(self,docname,objname,subname):
|
||||||
|
self.setElementVisible(docname,objname,subname,True,True)
|
||||||
|
|
||||||
|
def removePreselection(self,docname,objname,subname):
|
||||||
|
self.setElementVisible(docname,objname,subname,False,True)
|
||||||
|
|
||||||
def setSelection(self,*_args):
|
def setSelection(self,*_args):
|
||||||
self.onChanged()
|
self.onChanged()
|
||||||
|
|
Loading…
Reference in New Issue
Block a user