Base model edit during job editor.
This commit is contained in:
@@ -85,6 +85,9 @@ def createResourceClone(obj, orig, name, icon):
|
||||
obj.Document.recompute() # necessary to create the clone shape
|
||||
return clone
|
||||
|
||||
def createModelResourceClone(obj, orig):
|
||||
return createResourceClone(obj, orig, 'Model', 'BaseGeometry')
|
||||
|
||||
class ObjectJob:
|
||||
|
||||
def __init__(self, obj, models, templateFile = None):
|
||||
@@ -127,7 +130,7 @@ class ObjectJob:
|
||||
model = FreeCAD.ActiveDocument.addObject("App::DocumentObjectGroup", "Model")
|
||||
if model.ViewObject:
|
||||
model.ViewObject.Visibility = False
|
||||
model.addObjects([createResourceClone(obj, base, 'Model', 'BaseGeometry') for base in models])
|
||||
model.addObjects([createModelResourceClone(obj, base) for base in models])
|
||||
obj.Model = model
|
||||
|
||||
obj.Proxy = self
|
||||
@@ -150,6 +153,13 @@ class ObjectJob:
|
||||
PathIconViewProvider.Attach(obj.SetupSheet.ViewObject, 'SetupSheet')
|
||||
self.setupSheet = obj.SetupSheet.Proxy
|
||||
|
||||
def removeBase(self, obj, base, removeFromModel):
|
||||
if isResourceClone(obj, base, 'Model'):
|
||||
PathUtil.clearExpressionEngine(base)
|
||||
if removeFromModel:
|
||||
obj.Model.removeObject(base)
|
||||
obj.Document.removeObject(base.Name)
|
||||
|
||||
def onDelete(self, obj, arg2=None):
|
||||
'''Called by the view provider, there doesn't seem to be a callback on the obj itself.'''
|
||||
PathLog.track(obj.Label, arg2)
|
||||
@@ -176,9 +186,7 @@ class ObjectJob:
|
||||
# base doesn't depend on anything inside job
|
||||
for base in obj.Model.Group:
|
||||
PathLog.debug("taking down base %s" % base.Label)
|
||||
if isResourceClone(obj, base, 'Model'):
|
||||
PathUtil.clearExpressionEngine(base)
|
||||
doc.removeObject(base.Name)
|
||||
self.removeBase(obj, base, False)
|
||||
obj.Model.Group = []
|
||||
doc.removeObject(obj.Model.Name)
|
||||
obj.Model = None
|
||||
|
||||
@@ -178,36 +178,33 @@ class ViewProvider:
|
||||
if prop == 'Stock' and self.obj.Stock and self.obj.Stock.ViewObject and self.obj.Stock.ViewObject.Proxy:
|
||||
self.obj.Stock.ViewObject.Proxy.onEdit(_OpenCloseResourceEditor)
|
||||
|
||||
def setupModelVisibility(self, obj):
|
||||
baseVisibility = []
|
||||
origVisibility = []
|
||||
for base in obj.Model.Group:
|
||||
if base.ViewObject:
|
||||
orig = PathUtil.getPublicObject(obj.Proxy.baseObject(obj, base))
|
||||
PathLog.track(obj.Label, base.Label, orig.Label)
|
||||
origVisibility.append(orig.ViewObject.Visibility)
|
||||
orig.ViewObject.Visibility = False
|
||||
baseVisibility.append(base.ViewObject.Visibility)
|
||||
base.ViewObject.Visibility = True
|
||||
self.baseVisibility = baseVisibility
|
||||
self.baseOrigVisibility = origVisibility
|
||||
def rememberBaseVisibility(self, obj, base):
|
||||
if base.ViewObject:
|
||||
orig = PathUtil.getPublicObject(obj.Proxy.baseObject(obj, base))
|
||||
self.baseVisibility[base.Name] = (base, base.ViewObject.Visibility, orig, orig.ViewObject.Visibility)
|
||||
orig.ViewObject.Visibility = False
|
||||
base.ViewObject.Visibility = True
|
||||
|
||||
def resetModelVisibility(self, obj):
|
||||
for base, baseVisibility, origVisibility in zip(obj.Model.Group, self.baseVisibility, self.baseOrigVisibility):
|
||||
if base.ViewObject:
|
||||
orig = PathUtil.getPublicObject(obj.Proxy.baseObject(obj, base))
|
||||
base.ViewObject.Visibility = baseVisibility
|
||||
orig.ViewObject.Visibility = origVisibility
|
||||
def forgetBaseVisibility(self, obj, base):
|
||||
if self.baseVisibility.get(base.Name):
|
||||
visibility = self.baseVisibility[base.Name]
|
||||
visibility[0].ViewObject.Visibility = visibility[1]
|
||||
visibility[2].ViewObject.Visibility = visibility[3]
|
||||
del self.baseVisibility[base.Name]
|
||||
|
||||
def setupEditVisibility(self, obj):
|
||||
self.setupModelVisibility(obj)
|
||||
self.baseVisibility = {}
|
||||
for base in obj.Model.Group:
|
||||
self.rememberBaseVisibility(obj, base)
|
||||
|
||||
self.stockVisibility = False
|
||||
if obj.Stock and obj.Stock.ViewObject:
|
||||
self.stockVisibility = obj.Stock.ViewObject.Visibility
|
||||
self.obj.Stock.ViewObject.Visibility = True
|
||||
|
||||
def resetEditVisibility(self, obj):
|
||||
self.resetModelVisibility(obj)
|
||||
for base in obj.Model.Group:
|
||||
self.forgetBaseVisibility(obj, base)
|
||||
if obj.Stock and obj.Stock.ViewObject:
|
||||
obj.Stock.ViewObject.Visibility = self.stockVisibility
|
||||
|
||||
@@ -549,14 +546,6 @@ class TaskPanel:
|
||||
self.obj.Description = str(self.form.jobDescription.toPlainText())
|
||||
self.obj.Operations.Group = [self.form.operationsList.item(i).data(self.DataObject) for i in range(self.form.operationsList.count())]
|
||||
|
||||
#selObj = self.form.jobModel.itemData(self.form.jobModel.currentIndex())
|
||||
#if self.obj.Proxy.baseObject(self.obj) != selObj:
|
||||
# self.vproxy.baseObjectRestoreVisibility(self.obj)
|
||||
# if PathJob.isResourceClone(self.obj, 'Model'):
|
||||
# self.obj.Document.removeObject(self.obj.Base.Name)
|
||||
# self.obj.Base = PathJob.createResourceClone(self.obj, selObj, 'Base', 'Base')
|
||||
# self.vproxy.baseObjectSaveVisibility(self.obj)
|
||||
|
||||
self.updateTooltips()
|
||||
self.stockEdit.getFields(self.obj)
|
||||
|
||||
@@ -959,7 +948,25 @@ class TaskPanel:
|
||||
if dialog.exec_() == 1:
|
||||
models = dialog.getModels()
|
||||
if models:
|
||||
PathLog.error("shouldn't you be doing something here")
|
||||
obj = self.obj
|
||||
proxy = obj.Proxy
|
||||
|
||||
# first remove all retired base models
|
||||
retired = [base for base in self.obj.Model.Group if not proxy.baseObject(obj, base) in models]
|
||||
for base in retired:
|
||||
self.vproxy.forgetBaseVisibility(obj, base)
|
||||
self.obj.Proxy.removeBase(obj, base, True)
|
||||
|
||||
# then add all rookie base models
|
||||
baseOrigNames = [proxy.baseObject(obj, base).Name for base in obj.Model.Group]
|
||||
rookies = [base for base in models if not base.Name in baseOrigNames]
|
||||
for orig in rookies:
|
||||
base = PathJob.createModelResourceClone(obj, orig)
|
||||
obj.Model.addObject(base)
|
||||
self.vproxy.rememberBaseVisibility(obj, base)
|
||||
if retired or rookies:
|
||||
self.setFields()
|
||||
|
||||
|
||||
def tabPageChanged(self, index):
|
||||
if index == 0:
|
||||
|
||||
Reference in New Issue
Block a user