def getFields(self): '''sets properties in the object to match the form''' if self.obj: self.obj.PostProcessor = str(self.form.postProcessor.currentText()) self.obj.PostProcessorArgs = str( self.form.postProcessorArguments.displayText()) self.obj.PostProcessorOutputFile = str( self.form.postProcessorOutputFile.text()) self.obj.Label = str(self.form.jobLabel.text()) 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, 'Base'): 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) self.obj.Proxy.execute(self.obj) self.setupGlobal.getFields() self.setupOps.getFields()
def getFields(self): '''sets properties in the object to match the form''' if self.obj: self.obj.PostProcessor = str(self.form.postProcessor.currentText()) self.obj.PostProcessorArgs = str(self.form.postProcessorArguments.displayText()) self.obj.PostProcessorOutputFile = str(self.form.postProcessorOutputFile.text()) self.obj.Label = str(self.form.jobLabel.text()) 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, 'Base'): 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) self.obj.Proxy.execute(self.obj) self.setupGlobal.getFields() self.setupOps.getFields()
def __init__(self, job, parent=None): self.job = job self.dialog = FreeCADGui.PySideUic.loadUi(":/panels/DlgJobTemplateExport.ui") if job.PostProcessor: ppHint = "%s %s %s" % (job.PostProcessor, job.PostProcessorArgs, job.PostProcessorOutputFile) self.dialog.postProcessingHint.setText(ppHint) else: self.dialog.postProcessingGroup.setEnabled(False) self.dialog.postProcessingGroup.setChecked(False) if job.Stock and not PathJob.isResourceClone(job, 'Stock', 'Stock'): if hasattr(job.Stock, 'ExtXNeg'): seHint = translate('PathJob', "Base -/+ %.2f/%.2f %.2f/%.2f %.2f/%.2f") % (job.Stock.ExtXneg, job.Stock.ExtXpos, job.Stock.ExtYneg, job.Stock.ExtYpos, job.Stock.ExtZneg, job.Stock.ExtZpos) self.dialog.stockPlacement.setChecked(False) elif hasattr(job.Stock, 'Length') and hasattr(job.Stock, 'Width'): seHint = translate('PathJob', "Box: %.2f x %.2f x %.2f") % (job.Stock.Length, job.Stock.Width, job.Stock.Height) elif hasattr(job.Stock, 'Radius'): seHint = translate('PathJob', "Cylinder: %.2f x %.2f") % (job.Stock.Radius, job.Stock.Height) else: seHint = '-' PathLog.error(translate('PathJob', 'Unsupported stock type')) self.dialog.stockExtentHint.setText(seHint) spHint = "%s" % job.Stock.Placement self.dialog.stockPlacementHint.setText(spHint) for tc in sorted(job.ToolController, key=lambda o: o.Label): item = QtGui.QListWidgetItem(tc.Label) item.setData(self.DataObject, tc) item.setCheckState(QtCore.Qt.CheckState.Checked) self.dialog.toolsList.addItem(item) self.dialog.toolsGroup.clicked.connect(self.checkUncheckTools)
def candidates(self, obj): solids = [o for o in obj.Document.Objects if PathUtil.isSolid(o)] if obj.Base in solids and PathJob.isResourceClone(obj, 'Base'): solids.remove(obj.Base) if obj.Stock in solids: # regardless, what stock is/was, it's not a valid choice solids.remove(obj.Stock) return sorted(solids, key=lambda c: c.Label)
def updateUI(self): job = self.job if job.PostProcessor: ppHint = "%s %s %s" % (job.PostProcessor, job.PostProcessorArgs, job.PostProcessorOutputFile) self.dialog.postProcessingHint.setText(ppHint) else: self.dialog.postProcessingGroup.setEnabled(False) self.dialog.postProcessingGroup.setChecked(False) if job.Stock and not PathJob.isResourceClone(job, 'Stock', 'Stock'): stockType = PathStock.StockType.FromStock(job.Stock) if stockType == PathStock.StockType.FromBase: seHint = translate( 'PathJob', "Base -/+ %.2f/%.2f %.2f/%.2f %.2f/%.2f" ) % (job.Stock.ExtXneg, job.Stock.ExtXpos, job.Stock.ExtYneg, job.Stock.ExtYpos, job.Stock.ExtZneg, job.Stock.ExtZpos) self.dialog.stockPlacement.setChecked(False) elif stockType == PathStock.StockType.CreateBox: seHint = translate('PathJob', "Box: %.2f x %.2f x %.2f") % ( job.Stock.Length, job.Stock.Width, job.Stock.Height) elif stockType == PathStock.StockType.CreateCylinder: seHint = translate('PathJob', "Cylinder: %.2f x %.2f") % ( job.Stock.Radius, job.Stock.Height) else: seHint = '-' PathLog.error(translate('PathJob', 'Unsupported stock type')) self.dialog.stockExtentHint.setText(seHint) spHint = "%s" % job.Stock.Placement self.dialog.stockPlacementHint.setText(spHint) rapidChanged = not job.SetupSheet.Proxy.hasDefaultToolRapids() depthsChanged = not job.SetupSheet.Proxy.hasDefaultOperationDepths() heightsChanged = not job.SetupSheet.Proxy.hasDefaultOperationHeights() coolantChanged = not job.SetupSheet.Proxy.hasDefaultCoolantMode() opsWithSettings = job.SetupSheet.Proxy.operationsWithSettings() settingsChanged = rapidChanged or depthsChanged or heightsChanged or coolantChanged or 0 != len( opsWithSettings) self.dialog.settingsGroup.setChecked(settingsChanged) self.dialog.settingToolRapid.setChecked(rapidChanged) self.dialog.settingOperationDepths.setChecked(depthsChanged) self.dialog.settingOperationHeights.setChecked(heightsChanged) self.dialog.settingCoolant.setChecked(coolantChanged) self.dialog.settingsOpsList.clear() for op in opsWithSettings: item = QtGui.QListWidgetItem(op) item.setCheckState(QtCore.Qt.CheckState.Checked) self.dialog.settingsOpsList.addItem(item) self.dialog.toolsList.clear() for tc in sorted(job.Tools.Group, key=lambda o: o.Label): item = QtGui.QListWidgetItem(tc.Label) item.setData(self.DataObject, tc) item.setCheckState(QtCore.Qt.CheckState.Checked) self.dialog.toolsList.addItem(item)
def __init__(self, vobj, deleteOnReject): FreeCAD.ActiveDocument.openTransaction( translate("Path_Job", "Edit Job")) self.vobj = vobj self.vproxy = vobj.Proxy self.obj = vobj.Object self.deleteOnReject = deleteOnReject self.form = FreeCADGui.PySideUic.loadUi(":/panels/PathEdit.ui") self.template = PathJobCmd.DlgJobTemplateExport( self.obj, self.form.jobBox.widget(1)) vUnit = FreeCAD.Units.Quantity( 1, FreeCAD.Units.Velocity).getUserPreferred()[2] self.form.toolControllerList.horizontalHeaderItem(1).setText('#') self.form.toolControllerList.horizontalHeaderItem(2).setText(vUnit) self.form.toolControllerList.horizontalHeaderItem(3).setText(vUnit) self.form.toolControllerList.horizontalHeader().setResizeMode( 0, QtGui.QHeaderView.Stretch) self.form.toolControllerList.resizeColumnsToContents() currentPostProcessor = self.obj.PostProcessor postProcessors = PathPreferences.allEnabledPostProcessors( ['', currentPostProcessor]) for post in postProcessors: self.form.postProcessor.addItem(post) # update the enumeration values, just to make sure all selections are valid self.obj.PostProcessor = postProcessors self.obj.PostProcessor = currentPostProcessor base = self.obj.Base if PathJob.isResourceClone(self.obj, 'Base') else None stock = self.obj.Stock for o in PathJob.ObjectJob.baseCandidates(): if o != base and o != stock: self.form.jobModel.addItem(o.Label, o) self.selectComboBoxText(self.form.jobModel, self.obj.Proxy.baseObject(self.obj).Label) self.postProcessorDefaultTooltip = self.form.postProcessor.toolTip() self.postProcessorArgsDefaultTooltip = self.form.postProcessorArguments.toolTip( ) self.vproxy.setupEditVisibility(self.obj) self.stockFromBase = None self.stockFromExisting = None self.stockCreateBox = None self.stockCreateCylinder = None self.stockEdit = None self.setupGlobal = PathSetupSheetGui.GlobalEditor( self.obj.SetupSheet, self.form) self.setupOps = PathSetupSheetGui.OpsDefaultEditor( self.obj.SetupSheet, self.form)
def __init__(self, job, parent=None): self.job = job self.dialog = FreeCADGui.PySideUic.loadUi( ":/panels/DlgJobTemplateExport.ui") if job.PostProcessor: ppHint = "%s %s %s" % (job.PostProcessor, job.PostProcessorArgs, job.PostProcessorOutputFile) self.dialog.postProcessingHint.setText(ppHint) else: self.dialog.postProcessingGroup.setEnabled(False) self.dialog.postProcessingGroup.setChecked(False) if job.Stock and not PathJob.isResourceClone(job, 'Stock', 'Stock'): stockType = PathStock.StockType.FromStock(job.Stock) if stockType == PathStock.StockType.FromBase: seHint = translate( 'PathJob', "Base -/+ %.2f/%.2f %.2f/%.2f %.2f/%.2f" ) % (job.Stock.ExtXneg, job.Stock.ExtXpos, job.Stock.ExtYneg, job.Stock.ExtYpos, job.Stock.ExtZneg, job.Stock.ExtZpos) self.dialog.stockPlacement.setChecked(False) elif stockType == PathStock.StockType.CreateBox: seHint = translate('PathJob', "Box: %.2f x %.2f x %.2f") % ( job.Stock.Length, job.Stock.Width, job.Stock.Height) elif stockType == PathStock.StockType.CreateCylinder: seHint = translate('PathJob', "Cylinder: %.2f x %.2f") % ( job.Stock.Radius, job.Stock.Height) else: seHint = '-' PathLog.error(translate('PathJob', 'Unsupported stock type')) self.dialog.stockExtentHint.setText(seHint) spHint = "%s" % job.Stock.Placement self.dialog.stockPlacementHint.setText(spHint) rapidChanged = not job.SetupSheet.Proxy.hasDefaultToolRapids() depthsChanged = not job.SetupSheet.Proxy.hasDefaultOperationDepths() heightsChanged = not job.SetupSheet.Proxy.hasDefaultOperationHeights() settingsChanged = rapidChanged or depthsChanged or heightsChanged self.dialog.settingsGroup.setChecked(settingsChanged) self.dialog.settingToolRapid.setChecked(rapidChanged) self.dialog.settingOperationDepths.setChecked(depthsChanged) self.dialog.settingOperationHeights.setChecked(heightsChanged) for tc in sorted(job.ToolController, key=lambda o: o.Label): item = QtGui.QListWidgetItem(tc.Label) item.setData(self.DataObject, tc) item.setCheckState(QtCore.Qt.CheckState.Checked) self.dialog.toolsList.addItem(item) self.dialog.toolsGroup.clicked.connect(self.checkUncheckTools)
def updateUI(self): job = self.job if job.PostProcessor: ppHint = "%s %s %s" % (job.PostProcessor, job.PostProcessorArgs, job.PostProcessorOutputFile) self.dialog.postProcessingHint.setText(ppHint) else: self.dialog.postProcessingGroup.setEnabled(False) self.dialog.postProcessingGroup.setChecked(False) if job.Stock and not PathJob.isResourceClone(job, 'Stock', 'Stock'): stockType = PathStock.StockType.FromStock(job.Stock) if stockType == PathStock.StockType.FromBase: seHint = translate('PathJob', "Base -/+ %.2f/%.2f %.2f/%.2f %.2f/%.2f") % (job.Stock.ExtXneg, job.Stock.ExtXpos, job.Stock.ExtYneg, job.Stock.ExtYpos, job.Stock.ExtZneg, job.Stock.ExtZpos) self.dialog.stockPlacement.setChecked(False) elif stockType == PathStock.StockType.CreateBox: seHint = translate('PathJob', "Box: %.2f x %.2f x %.2f") % (job.Stock.Length, job.Stock.Width, job.Stock.Height) elif stockType == PathStock.StockType.CreateCylinder: seHint = translate('PathJob', "Cylinder: %.2f x %.2f") % (job.Stock.Radius, job.Stock.Height) else: seHint = '-' PathLog.error(translate('PathJob', 'Unsupported stock type')) self.dialog.stockExtentHint.setText(seHint) spHint = "%s" % job.Stock.Placement self.dialog.stockPlacementHint.setText(spHint) rapidChanged = not job.SetupSheet.Proxy.hasDefaultToolRapids() depthsChanged = not job.SetupSheet.Proxy.hasDefaultOperationDepths() heightsChanged = not job.SetupSheet.Proxy.hasDefaultOperationHeights() opsWithSettings = job.SetupSheet.Proxy.operationsWithSettings() settingsChanged = rapidChanged or depthsChanged or heightsChanged or 0 != len(opsWithSettings) self.dialog.settingsGroup.setChecked(settingsChanged) self.dialog.settingToolRapid.setChecked(rapidChanged) self.dialog.settingOperationDepths.setChecked(depthsChanged) self.dialog.settingOperationHeights.setChecked(heightsChanged) self.dialog.settingsOpsList.clear() for op in opsWithSettings: item = QtGui.QListWidgetItem(op) item.setCheckState(QtCore.Qt.CheckState.Checked) self.dialog.settingsOpsList.addItem(item) self.dialog.toolsList.clear() for tc in sorted(job.ToolController, key=lambda o: o.Label): item = QtGui.QListWidgetItem(tc.Label) item.setData(self.DataObject, tc) item.setCheckState(QtCore.Qt.CheckState.Checked) self.dialog.toolsList.addItem(item)
def __init__(self, vobj, deleteOnReject): FreeCAD.ActiveDocument.openTransaction(translate("Path_Job", "Edit Job")) self.vobj = vobj self.vproxy = vobj.Proxy self.obj = vobj.Object self.deleteOnReject = deleteOnReject self.form = FreeCADGui.PySideUic.loadUi(":/panels/PathEdit.ui") self.template = PathJobCmd.DlgJobTemplateExport(self.obj, self.form.jobBox.widget(1)) vUnit = FreeCAD.Units.Quantity(1, FreeCAD.Units.Velocity).getUserPreferred()[2] self.form.toolControllerList.horizontalHeaderItem(1).setText('#') self.form.toolControllerList.horizontalHeaderItem(2).setText(vUnit) self.form.toolControllerList.horizontalHeaderItem(3).setText(vUnit) self.form.toolControllerList.horizontalHeader().setResizeMode(0, QtGui.QHeaderView.Stretch) self.form.toolControllerList.resizeColumnsToContents() currentPostProcessor = self.obj.PostProcessor postProcessors = PathPreferences.allEnabledPostProcessors(['', currentPostProcessor]) for post in postProcessors: self.form.postProcessor.addItem(post) # update the enumeration values, just to make sure all selections are valid self.obj.PostProcessor = postProcessors self.obj.PostProcessor = currentPostProcessor base = self.obj.Base if PathJob.isResourceClone(self.obj, 'Base') else None stock = self.obj.Stock for o in PathJob.ObjectJob.baseCandidates(): if o != base and o != stock: self.form.jobModel.addItem(o.Label, o) self.selectComboBoxText(self.form.jobModel, self.obj.Proxy.baseObject(self.obj).Label) self.postProcessorDefaultTooltip = self.form.postProcessor.toolTip() self.postProcessorArgsDefaultTooltip = self.form.postProcessorArguments.toolTip() self.vproxy.setupEditVisibility(self.obj) self.stockFromBase = None self.stockFromExisting = None self.stockCreateBox = None self.stockCreateCylinder = None self.stockEdit = None self.setupGlobal = PathSetupSheetGui.GlobalEditor(self.obj.SetupSheet, self.form) self.setupOps = PathSetupSheetGui.OpsDefaultEditor(self.obj.SetupSheet, self.form)
def __init__(self, job, parent=None): self.job = job self.dialog = FreeCADGui.PySideUic.loadUi(":/panels/DlgJobTemplateExport.ui") if job.PostProcessor: ppHint = "%s %s %s" % (job.PostProcessor, job.PostProcessorArgs, job.PostProcessorOutputFile) self.dialog.postProcessingHint.setText(ppHint) else: self.dialog.postProcessingGroup.setEnabled(False) self.dialog.postProcessingGroup.setChecked(False) if job.Stock and not PathJob.isResourceClone(job, 'Stock', 'Stock'): stockType = PathStock.StockType.FromStock(job.Stock) if stockType == PathStock.StockType.FromBase: seHint = translate('PathJob', "Base -/+ %.2f/%.2f %.2f/%.2f %.2f/%.2f") % (job.Stock.ExtXneg, job.Stock.ExtXpos, job.Stock.ExtYneg, job.Stock.ExtYpos, job.Stock.ExtZneg, job.Stock.ExtZpos) self.dialog.stockPlacement.setChecked(False) elif stockType == PathStock.StockType.CreateBox: seHint = translate('PathJob', "Box: %.2f x %.2f x %.2f") % (job.Stock.Length, job.Stock.Width, job.Stock.Height) elif stockType == PathStock.StockType.CreateCylinder: seHint = translate('PathJob', "Cylinder: %.2f x %.2f") % (job.Stock.Radius, job.Stock.Height) else: seHint = '-' PathLog.error(translate('PathJob', 'Unsupported stock type')) self.dialog.stockExtentHint.setText(seHint) spHint = "%s" % job.Stock.Placement self.dialog.stockPlacementHint.setText(spHint) rapidChanged = not job.SetupSheet.Proxy.hasDefaultToolRapids() depthsChanged = not job.SetupSheet.Proxy.hasDefaultOperationDepths() heightsChanged = not job.SetupSheet.Proxy.hasDefaultOperationHeights() settingsChanged = rapidChanged or depthsChanged or heightsChanged self.dialog.settingsGroup.setChecked(settingsChanged) self.dialog.settingToolRapid.setChecked(rapidChanged) self.dialog.settingOperationDepths.setChecked(depthsChanged) self.dialog.settingOperationHeights.setChecked(heightsChanged) for tc in sorted(job.ToolController, key=lambda o: o.Label): item = QtGui.QListWidgetItem(tc.Label) item.setData(self.DataObject, tc) item.setCheckState(QtCore.Qt.CheckState.Checked) self.dialog.toolsList.addItem(item) self.dialog.toolsGroup.clicked.connect(self.checkUncheckTools)
def __init__(self, job, parent=None): self.job = job self.dialog = FreeCADGui.PySideUic.loadUi( ":/panels/DlgJobTemplateExport.ui") if job.PostProcessor: ppHint = "%s %s %s" % (job.PostProcessor, job.PostProcessorArgs, job.PostProcessorOutputFile) self.dialog.postProcessingHint.setText(ppHint) else: self.dialog.postProcessingGroup.setEnabled(False) self.dialog.postProcessingGroup.setChecked(False) if job.Stock and not PathJob.isResourceClone(job, 'Stock', 'Stock'): if hasattr(job.Stock, 'ExtXNeg'): seHint = translate( 'PathJob', "Base -/+ %.2f/%.2f %.2f/%.2f %.2f/%.2f" ) % (job.Stock.ExtXneg, job.Stock.ExtXpos, job.Stock.ExtYneg, job.Stock.ExtYpos, job.Stock.ExtZneg, job.Stock.ExtZpos) self.dialog.stockPlacement.setChecked(False) elif hasattr(job.Stock, 'Length') and hasattr(job.Stock, 'Width'): seHint = translate('PathJob', "Box: %.2f x %.2f x %.2f") % ( job.Stock.Length, job.Stock.Width, job.Stock.Height) elif hasattr(job.Stock, 'Radius'): seHint = translate('PathJob', "Cylinder: %.2f x %.2f") % ( job.Stock.Radius, job.Stock.Height) else: seHint = '-' PathLog.error(translate('PathJob', 'Unsupported stock type')) self.dialog.stockExtentHint.setText(seHint) spHint = "%s" % job.Stock.Placement self.dialog.stockPlacementHint.setText(spHint) for tc in sorted(job.ToolController, key=lambda o: o.Label): item = QtGui.QListWidgetItem(tc.Label) item.setData(self.DataObject, tc) item.setCheckState(QtCore.Qt.CheckState.Checked) self.dialog.toolsList.addItem(item) self.dialog.toolsGroup.clicked.connect(self.checkUncheckTools)
def setupModel(self, job=None): if job: preSelected = Counter([ PathUtil.getPublicObject(job.Proxy.baseObject(job, obj)).Label for obj in job.Model.Group ]) jobResources = job.Model.Group + [job.Stock] else: preSelected = Counter( [obj.Label for obj in FreeCADGui.Selection.getSelection()]) jobResources = [] self.candidates = sorted(PathJob.ObjectJob.baseCandidates(), key=lambda o: o.Label) # If there is only one possibility we might as well make sure it's selected if not preSelected and 1 == len(self.candidates): preSelected = Counter([self.candidates[0].Label]) expandSolids = False expand2Ds = False expandJobs = False for base in self.candidates: if (not base in jobResources and not PathJob.isResourceClone(job, base, None) and not hasattr(base, "StockType")): item0 = QtGui.QStandardItem() item1 = QtGui.QStandardItem() item0.setData(base.Label, QtCore.Qt.EditRole) item0.setData(base, self.DataObject) item0.setCheckable(True) item0.setEditable(False) item1.setEnabled(True) item1.setEditable(True) if base.Label in preSelected: itemSelected = True item0.setCheckState(QtCore.Qt.CheckState.Checked) item1.setData(preSelected[base.Label], QtCore.Qt.EditRole) else: itemSelected = False item0.setCheckState(QtCore.Qt.CheckState.Unchecked) item1.setData(0, QtCore.Qt.EditRole) if PathUtil.isSolid(base): self.itemsSolid.appendRow([item0, item1]) if itemSelected: expandSolids = True else: self.items2D.appendRow([item0, item1]) if itemSelected: expand2Ds = True for j in sorted(PathJob.Instances(), key=lambda x: x.Label): if j != job: item0 = QtGui.QStandardItem() item1 = QtGui.QStandardItem() item0.setData(j.Label, QtCore.Qt.EditRole) item0.setData(j, self.DataObject) item0.setCheckable(True) item0.setEditable(False) item1.setEnabled(True) item1.setEditable(True) if j.Label in preSelected: expandJobs = True item0.setCheckState(QtCore.Qt.CheckState.Checked) item1.setData(preSelected[j.Label], QtCore.Qt.EditRole) else: item0.setCheckState(QtCore.Qt.CheckState.Unchecked) item1.setData(0, QtCore.Qt.EditRole) self.itemsJob.appendRow([item0, item1]) self.delegate = _ItemDelegate(self, self.dialog.modelTree) self.model = QtGui.QStandardItemModel(self.dialog) self.model.setHorizontalHeaderLabels(["Model", "Count"]) if self.itemsSolid.hasChildren(): self.model.appendRow(self.itemsSolid) if expandSolids or not (expand2Ds or expandJobs): expandSolids = True if self.items2D.hasChildren(): self.model.appendRow(self.items2D) if self.itemsJob.hasChildren(): self.model.appendRow(self.itemsJob) self.dialog.modelTree.setModel(self.model) self.dialog.modelTree.setItemDelegateForColumn(1, self.delegate) self.dialog.modelTree.expandAll() self.dialog.modelTree.resizeColumnToContents(0) self.dialog.modelTree.resizeColumnToContents(1) self.dialog.modelTree.collapseAll() if expandSolids: self.dialog.modelTree.setExpanded(self.itemsSolid.index(), True) if expand2Ds: self.dialog.modelTree.setExpanded(self.items2D.index(), True) if expandJobs: self.dialog.modelTree.setExpanded(self.itemsJob.index(), True) self.dialog.modelTree.setEditTriggers( QtGui.QAbstractItemView.AllEditTriggers) self.dialog.modelTree.setSelectionBehavior( QtGui.QAbstractItemView.SelectItems) self.dialog.modelGroup.show()
def setupModel(self, job = None): if job: preSelected = Counter([PathUtil.getPublicObject(job.Proxy.baseObject(job, obj)).Label for obj in job.Model.Group]) jobResources = job.Model.Group + [job.Stock] else: preSelected = Counter([obj.Label for obj in FreeCADGui.Selection.getSelection()]) jobResources = [] self.candidates = sorted(PathJob.ObjectJob.baseCandidates(), key=lambda o: o.Label) # If there is only one possibility we might as well make sure it's selected if not preSelected and 1 == len(self.candidates): preSelected = Counter([self.candidates[0].Label]) expandSolids = False expand2Ds = False expandJobs = False for i, base in enumerate(self.candidates): if not base in jobResources and not PathJob.isResourceClone(job, base, None) and not hasattr(base, 'StockType'): item0 = QtGui.QStandardItem() item1 = QtGui.QStandardItem() item0.setData(base.Label, QtCore.Qt.EditRole) item0.setData(base, self.DataObject) item0.setCheckable(True) item0.setEditable(False) item1.setEnabled(True) item1.setEditable(True) if base.Label in preSelected: itemSelected = True item0.setCheckState(QtCore.Qt.CheckState.Checked) item1.setData(preSelected[base.Label], QtCore.Qt.EditRole) else: itemSelected = False item0.setCheckState(QtCore.Qt.CheckState.Unchecked) item1.setData(0, QtCore.Qt.EditRole) if PathUtil.isSolid(base): self.itemsSolid.appendRow([item0, item1]) if itemSelected: expandSolids = True else: self.items2D.appendRow([item0, item1]) if itemSelected: expand2Ds = True for j in sorted(PathJob.Instances(), key=lambda x: x.Label): if j != job: item0 = QtGui.QStandardItem() item1 = QtGui.QStandardItem() item0.setData(j.Label, QtCore.Qt.EditRole) item0.setData(j, self.DataObject) item0.setCheckable(True) item0.setEditable(False) item1.setEnabled(True) item1.setEditable(True) if j.Label in preSelected: expandJobs = True item0.setCheckState(QtCore.Qt.CheckState.Checked) item1.setData(preSelected[j.Label], QtCore.Qt.EditRole) else: item0.setCheckState(QtCore.Qt.CheckState.Unchecked) item1.setData(0, QtCore.Qt.EditRole) self.itemsJob.appendRow([item0, item1]) self.delegate = _ItemDelegate(self, self.dialog.modelTree) self.model = QtGui.QStandardItemModel(self.dialog) self.model.setHorizontalHeaderLabels(['Model', 'Count']) if self.itemsSolid.hasChildren(): self.model.appendRow(self.itemsSolid) if expandSolids or not (expand2Ds or expandJobs): expandSolids = True if self.items2D.hasChildren(): self.model.appendRow(self.items2D) if self.itemsJob.hasChildren(): self.model.appendRow(self.itemsJob) self.dialog.modelTree.setModel(self.model) self.dialog.modelTree.setItemDelegateForColumn(1, self.delegate) self.dialog.modelTree.expandAll() self.dialog.modelTree.resizeColumnToContents(0) self.dialog.modelTree.resizeColumnToContents(1) self.dialog.modelTree.collapseAll() if expandSolids: self.dialog.modelTree.setExpanded(self.itemsSolid.index(), True) if expand2Ds: self.dialog.modelTree.setExpanded(self.items2D.index(), True) if expandJobs: self.dialog.modelTree.setExpanded(self.itemsJob.index(), True) self.dialog.modelTree.setEditTriggers(QtGui.QAbstractItemView.AllEditTriggers) self.dialog.modelTree.setSelectionBehavior(QtGui.QAbstractItemView.SelectItems) self.dialog.modelGroup.show()
def setupModel(self, job=None): if job: sel = [ PathUtil.getPublicObject(job.Proxy.baseObject(job, obj)) for obj in job.Model.Group ] xxx = job.Model.Group + [job.Stock] else: sel = FreeCADGui.Selection.getSelection() xxx = [] if sel: selected = [s.Label for s in sel] else: selected = [] PathLog.track('selected', selected) expandSolids = False expandTwoDs = False expandJobs = False index = 0 candidates = sorted(PathJob.ObjectJob.baseCandidates(), key=lambda o: o.Label) for base in candidates: PathLog.track(base.Label) if not base in xxx and not PathJob.isResourceClone( job, base, None) and not hasattr(base, 'StockType'): PathLog.track('base', base.Label) item = QtGui.QTreeWidgetItem([base.Label]) item.setData(0, self.DataObject, base) sel = base.Label in selected if sel or (1 == len(candidates) and not selected): item.setCheckState(0, QtCore.Qt.CheckState.Checked) else: item.setCheckState(0, QtCore.Qt.CheckState.Unchecked) if PathUtil.isSolid(base): self.itemsSolid.addChild(item) if sel: expandSolids = True else: self.itemsTwoD.addChild(item) if sel: expandTwoDs = True for j in sorted(PathJob.Instances(), key=lambda x: x.Label): if j != job: item = QtGui.QTreeWidgetItem([j.Label]) item.setData(0, self.DataObject, j) if j.Label in selected: expandJobs = True item.setCheckState(0, QtCore.Qt.CheckState.Checked) else: item.setCheckState(0, QtCore.Qt.CheckState.Unchecked) self.itemsJob.addChild(item) if self.itemsSolid.childCount() > 0: self.dialog.modelTree.addTopLevelItem(self.itemsSolid) if expandSolids or not (expandTwoDs or expandJobs): PathLog.track() self.itemsSolid.setExpanded(True) expandSolids = True if self.itemsTwoD.childCount() > 0: self.dialog.modelTree.addTopLevelItem(self.itemsTwoD) if expandTwoDs: self.itemsTwoD.setExpanded(True) if self.itemsJob.childCount() > 0: self.dialog.modelTree.addTopLevelItem(self.itemsJob) if expandJobs: self.itemsJob.setExpanded(True) self.dialog.modelGroup.show()
def setupModel(self, job = None): if job: sel = [PathUtil.getPublicObject(job.Proxy.baseObject(job, obj)) for obj in job.Model.Group] xxx = job.Model.Group + [job.Stock] else: sel = FreeCADGui.Selection.getSelection() xxx = [] if sel: selected = [s.Label for s in sel] else: selected = [] PathLog.track('selected', selected) expandSolids = False expandTwoDs = False expandJobs = False index = 0 candidates = sorted(PathJob.ObjectJob.baseCandidates(), key=lambda o: o.Label) for base in candidates: PathLog.track(base.Label) if not base in xxx and not PathJob.isResourceClone(job, base, None) and not hasattr(base, 'StockType'): PathLog.track('base', base.Label) item = QtGui.QTreeWidgetItem([base.Label]) item.setData(0, self.DataObject, base) sel = base.Label in selected if sel or (1 == len(candidates) and not selected): item.setCheckState(0, QtCore.Qt.CheckState.Checked) else: item.setCheckState(0, QtCore.Qt.CheckState.Unchecked) if PathUtil.isSolid(base): self.itemsSolid.addChild(item) if sel: expandSolids = True else: self.itemsTwoD.addChild(item) if sel: expandTwoDs = True for j in sorted(PathJob.Instances(), key=lambda x: x.Label): if j != job: item = QtGui.QTreeWidgetItem([j.Label]) item.setData(0, self.DataObject, j) if j.Label in selected: expandJobs = True item.setCheckState(0, QtCore.Qt.CheckState.Checked) else: item.setCheckState(0, QtCore.Qt.CheckState.Unchecked) self.itemsJob.addChild(item) if self.itemsSolid.childCount() > 0: self.dialog.modelTree.addTopLevelItem(self.itemsSolid) if expandSolids or not (expandTwoDs or expandJobs): PathLog.track() self.itemsSolid.setExpanded(True) expandSolids = True if self.itemsTwoD.childCount() > 0: self.dialog.modelTree.addTopLevelItem(self.itemsTwoD) if expandTwoDs: self.itemsTwoD.setExpanded(True) if self.itemsJob.childCount() > 0: self.dialog.modelTree.addTopLevelItem(self.itemsJob) if expandJobs: self.itemsJob.setExpanded(True) self.dialog.modelGroup.show()