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)