diff --git a/src/Mod/Path/Gui/Resources/panels/DlgJobTemplateExport.ui b/src/Mod/Path/Gui/Resources/panels/DlgJobTemplateExport.ui index 2734ec39b7..fddb21dc45 100644 --- a/src/Mod/Path/Gui/Resources/panels/DlgJobTemplateExport.ui +++ b/src/Mod/Path/Gui/Resources/panels/DlgJobTemplateExport.ui @@ -6,8 +6,8 @@ 0 0 - 650 - 887 + 371 + 711 @@ -190,7 +190,36 @@ - + + + + 0 + + + + + Qt::Horizontal + + + + 267 + 20 + + + + + + + + Export + + + + + + + + Qt::Horizontal @@ -210,12 +239,12 @@ settingOperationDepths settingToolRapid toolsList - buttonBox + dialogButtonBox - buttonBox + dialogButtonBox accepted() Dialog accept() @@ -231,7 +260,7 @@ - buttonBox + dialogButtonBox rejected() Dialog reject() diff --git a/src/Mod/Path/Gui/Resources/panels/PathEdit.ui b/src/Mod/Path/Gui/Resources/panels/PathEdit.ui index cb2ca81a9b..ece015da33 100644 --- a/src/Mod/Path/Gui/Resources/panels/PathEdit.ui +++ b/src/Mod/Path/Gui/Resources/panels/PathEdit.ui @@ -1,7 +1,7 @@ - PathEdit - + pathEdit + 0 @@ -22,7 +22,7 @@ - + 0 @@ -91,7 +91,7 @@ - + 0 @@ -103,6 +103,7 @@ Template Export + diff --git a/src/Mod/Path/PathScripts/PathJobCmd.py b/src/Mod/Path/PathScripts/PathJobCmd.py index bcb30680fa..77b4e07886 100644 --- a/src/Mod/Path/PathScripts/PathJobCmd.py +++ b/src/Mod/Path/PathScripts/PathJobCmd.py @@ -135,7 +135,20 @@ class DlgJobTemplateExport: def __init__(self, job, parent=None): self.job = job self.dialog = FreeCADGui.PySideUic.loadUi(":/panels/DlgJobTemplateExport.ui") + if parent: + self.dialog.setParent(parent) + parent.layout().addWidget(self.dialog) + self.dialog.dialogButtonBox.hide() + else: + self.dialog.exportButtonBox.hide() + self.updateUI() + self.dialog.toolsGroup.clicked.connect(self.checkUncheckTools) + def exportButton(self): + return self.dialog.exportButton + + def updateUI(self): + job = self.job if job.PostProcessor: ppHint = "%s %s %s" % (job.PostProcessor, job.PostProcessorArgs, job.PostProcessorOutputFile) self.dialog.postProcessingHint.setText(ppHint) @@ -168,19 +181,20 @@ class DlgJobTemplateExport: 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) - self.dialog.toolsGroup.clicked.connect(self.checkUncheckTools) - def checkUncheckTools(self): state = QtCore.Qt.CheckState.Checked if self.dialog.toolsGroup.isChecked() else QtCore.Qt.CheckState.Unchecked for i in range(self.dialog.toolsList.count()): @@ -260,12 +274,16 @@ class CommandJobTemplateExport: job = self.GetJob() dialog = DlgJobTemplateExport(job) if dialog.exec_() == 1: - foo = QtGui.QFileDialog.getSaveFileName(QtGui.QApplication.activeWindow(), - "Path - Job Template", - PathPreferences.filePath(), - "job_*.json")[0] - if foo: - self.Execute(job, foo, dialog) + self.SaveDialog(job, dialog) + + @classmethod + def SaveDialog(cls, job, dialog): + foo = QtGui.QFileDialog.getSaveFileName(QtGui.QApplication.activeWindow(), + "Path - Job Template", + PathPreferences.filePath(), + "job_*.json")[0] + if foo: + cls.Execute(job, foo, dialog) @classmethod def Execute(cls, job, path, dialog=None): diff --git a/src/Mod/Path/PathScripts/PathJobGui.py b/src/Mod/Path/PathScripts/PathJobGui.py index 30424126e1..a59f24f578 100644 --- a/src/Mod/Path/PathScripts/PathJobGui.py +++ b/src/Mod/Path/PathScripts/PathJobGui.py @@ -27,6 +27,7 @@ import DraftVecUtils import FreeCAD import FreeCADGui import PathScripts.PathJob as PathJob +import PathScripts.PathJobCmd as PathJobCmd import PathScripts.PathGeom as PathGeom import PathScripts.PathGui as PathGui import PathScripts.PathLog as PathLog @@ -456,6 +457,7 @@ class TaskPanel: 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('#') @@ -790,6 +792,8 @@ class TaskPanel: pass item.setText("%g" % getattr(tc, prop).Value) + self.template.updateUI() + def orientSelected(self, axis): def flipSel(sel): PathLog.debug("flip") @@ -914,10 +918,13 @@ class TaskPanel: PathLog.error(translate('PathJob', "Unsupported stock type %s (%d)") % (self.form.stock.currentText(), index)) self.stockEdit.activate(self.obj, index == -1) - def updateStock(self): + if -1 != index: + self.template.updateUI() + + def updateStock(self): self.updateStockEditor(self.form.stock.currentIndex()) - def centerInStock(self): + def centerInStock(self): bbb = self.obj.Base.Shape.BoundBox bbs = self.obj.Stock.Shape.BoundBox by = bbs.Center - bbb.Center @@ -959,6 +966,14 @@ class TaskPanel: self.form.centerInStock.setEnabled(False) self.form.centerInStockXY.setEnabled(False) + def tabPageChanged(self, index): + if index == 0: + # update the template with potential changes + self.getFields() + self.setupGlobal.accept() + self.setupOps.accept() + self.obj.Document.recompute() + self.template.updateUI() def setupUi(self, activate): self.setupGlobal.setupUi() @@ -1023,6 +1038,13 @@ class TaskPanel: if activate in ['Workplan', 'Operations']: self.form.setCurrentIndex(4) + self.form.currentChanged.connect(self.tabPageChanged) + self.template.exportButton().clicked.connect(self.templateExport) + + def templateExport(self): + self.getFields() + PathJobCmd.CommandJobTemplateExport.SaveDialog(self.obj, self.template) + def open(self): FreeCADGui.Selection.addObserver(self)