From fb62e3940ea3668ed162afd849d80095e581061e Mon Sep 17 00:00:00 2001 From: markus Date: Tue, 28 May 2019 18:51:19 -0700 Subject: [PATCH] Moved FreeCADGui dependency from PathUtils into PathUtilsGui --- src/Mod/Path/CMakeLists.txt | 1 + src/Mod/Path/PathScripts/PathGuiInit.py | 1 + .../Path/PathScripts/PathPocketShapeGui.py | 2 +- src/Mod/Path/PathScripts/PathUtils.py | 63 ++----------- src/Mod/Path/PathScripts/PathUtilsGui.py | 94 +++++++++++++++++++ src/Mod/Path/utils/path-lint.sh | 3 + 6 files changed, 110 insertions(+), 54 deletions(-) create mode 100644 src/Mod/Path/PathScripts/PathUtilsGui.py diff --git a/src/Mod/Path/CMakeLists.txt b/src/Mod/Path/CMakeLists.txt index b84625403a..82137d5d8e 100644 --- a/src/Mod/Path/CMakeLists.txt +++ b/src/Mod/Path/CMakeLists.txt @@ -104,6 +104,7 @@ SET(PathScripts_SRCS PathScripts/PathToolLibraryManager.py PathScripts/PathUtil.py PathScripts/PathUtils.py + PathScripts/PathUtilsGui.py PathScripts/PathSimulatorGui.py PathScripts/PostUtils.py PathScripts/PathAdaptiveGui.py diff --git a/src/Mod/Path/PathScripts/PathGuiInit.py b/src/Mod/Path/PathScripts/PathGuiInit.py index eb329a8955..87acea0d76 100644 --- a/src/Mod/Path/PathScripts/PathGuiInit.py +++ b/src/Mod/Path/PathScripts/PathGuiInit.py @@ -75,6 +75,7 @@ def Startup(): pass from PathScripts import PathToolController from PathScripts import PathToolLibraryManager + from PathScripts import PathUtilsGui Processed = True else: PathLog.debug('Skipping PathGui initialisation') diff --git a/src/Mod/Path/PathScripts/PathPocketShapeGui.py b/src/Mod/Path/PathScripts/PathPocketShapeGui.py index 19f132f670..b574feeb6b 100644 --- a/src/Mod/Path/PathScripts/PathPocketShapeGui.py +++ b/src/Mod/Path/PathScripts/PathPocketShapeGui.py @@ -107,7 +107,7 @@ class _Extension(object): return switch - def _setColour(r, g, b): + def _setColour(self, r, g, b): self.material.diffuseColor = (r, g, b) def isValid(self): diff --git a/src/Mod/Path/PathScripts/PathUtils.py b/src/Mod/Path/PathScripts/PathUtils.py index 690a435c78..c4da1a461f 100644 --- a/src/Mod/Path/PathScripts/PathUtils.py +++ b/src/Mod/Path/PathScripts/PathUtils.py @@ -23,7 +23,6 @@ # *************************************************************************** '''PathUtils -common functions used in PathScripts for filterig, sorting, and generating gcode toolpath data ''' import FreeCAD -import FreeCADGui import Part import Path import PathScripts @@ -36,7 +35,6 @@ import sys from DraftGeomUtils import geomType from FreeCAD import Vector from PathScripts import PathJob -from PathScripts import PathJobCmd from PathScripts import PathLog from PySide import QtCore from PySide import QtGui @@ -51,6 +49,8 @@ else: def translate(context, text, disambig=None): return QtCore.QCoreApplication.translate(context, text, disambig) +UserInput = None + def waiting_effects(function): def new_function(*args, **kwargs): if not FreeCAD.GuiUp: @@ -425,14 +425,8 @@ def findToolController(obj, name=None): PathLog.track('name: {}'.format(name)) c = None - if FreeCAD.GuiUp: - # First check if a user has selected a tool controller in the tree. Return the first one and remove all from selection - for sel in FreeCADGui.Selection.getSelectionEx(): - if hasattr(sel.Object, 'Proxy'): - if isinstance(sel.Object.Proxy, PathScripts.PathToolController.ToolController): - if c is None: - c = sel.Object - FreeCADGui.Selection.removeSelection(sel.Object) + if UserInput: + c = UserInput.selectedToolController() if c is not None: return c @@ -449,16 +443,8 @@ def findToolController(obj, name=None): tc = None elif name is not None: # More than one, make the user choose. tc = [i for i in controllers if i.Label == name][0] - else: - # form = FreeCADGui.PySideUic.loadUi(FreeCAD.getHomePath() + "Mod/Path/DlgTCChooser.ui") - form = FreeCADGui.PySideUic.loadUi(":/panels/DlgTCChooser.ui") - mylist = [i.Label for i in controllers] - form.uiToolController.addItems(mylist) - r = form.exec_() - if not r: - tc = None - else: - tc = [i for i in controllers if i.Label == form.uiToolController.currentText()][0] + elif UserInput: + tc = UserInput.chooseToolController(controllers) return tc @@ -495,41 +481,12 @@ def addToJob(obj, jobname=None): return None else: jobs = GetJobs() - if len(jobs) == 0: - job = PathJobCmd.CommandJobCreate().Activated() + if len(jobs) == 0 and UserInput: + job = UserInput.createJob() elif len(jobs) == 1: job = jobs[0] - else: - selected = FreeCADGui.Selection.getSelection() - if 1 == len(selected) and selected[0] in jobs: - job = selected[0] - else: - modelSelected = [] - for job in jobs: - if all([o in job.Model.Group for o in selected]): - modelSelected.append(job) - if 1 == len(modelSelected): - job = modelSelected[0] - else: - modelObjectSelected = [] - for job in jobs: - if all([o in job.Proxy.baseObjects(job) for o in selected]): - modelObjectSelected.append(job) - if 1 == len(modelObjectSelected): - job = modelObjectSelected[0] - else: - # form = FreeCADGui.PySideUic.loadUi(FreeCAD.getHomePath() + "Mod/Path/DlgJobChooser.ui") - form = FreeCADGui.PySideUic.loadUi(":/panels/DlgJobChooser.ui") - if modelObjectSelected: - mylist = [j.Label for j in modelObjectSelected] - else: - mylist = [j.Label for j in jobs] - form.cboProject.addItems(mylist) - r = form.exec_() - if r is False or r == 0: - return None - else: - job = [j for j in jobs if j.Label == form.cboProject.currentText()][0] + elif UserInput: + job = UserInput.chooseJob(jobs) if obj and job: job.Proxy.addOperation(obj) diff --git a/src/Mod/Path/PathScripts/PathUtilsGui.py b/src/Mod/Path/PathScripts/PathUtilsGui.py new file mode 100644 index 0000000000..3059f6bf68 --- /dev/null +++ b/src/Mod/Path/PathScripts/PathUtilsGui.py @@ -0,0 +1,94 @@ +# -*- coding: utf-8 -*- + +# *************************************************************************** +# * * +# * Copyright (c) 2019 sliptonic * +# * * +# * This program is free software; you can redistribute it and/or modify * +# * it under the terms of the GNU Lesser General Public License (LGPL) * +# * as published by the Free Software Foundation; either version 2 of * +# * the License, or (at your option) any later version. * +# * for detail see the LICENCE text file. * +# * * +# * This program is distributed in the hope that it will be useful, * +# * but WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +# * GNU Library General Public License for more details. * +# * * +# * You should have received a copy of the GNU Library General Public * +# * License along with this program; if not, write to the Free Software * +# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +# * USA * +# * * +# *************************************************************************** + +import FreeCAD +import FreeCADGui +import PathScripts +import PathScripts.PathJobCmd as PathJobCmd +import PathScripts.PathUtils as PathUtils + +class PathUtilsUserInput(object): + + def selectedToolController(self): + tc = None + # check if a user has selected a tool controller in the tree. + # Return the first one and remove all from selection + for sel in FreeCADGui.Selection.getSelectionEx(): + if hasattr(sel.Object, 'Proxy'): + if isinstance(sel.Object.Proxy, PathScripts.PathToolController.ToolController): + if tc is None: + tc = sel.Object + FreeCADGui.Selection.removeSelection(sel.Object) + return tc + + def chooseToolController(self, controllers): + # form = FreeCADGui.PySideUic.loadUi(FreeCAD.getHomePath() + "Mod/Path/DlgTCChooser.ui") + form = FreeCADGui.PySideUic.loadUi(":/panels/DlgTCChooser.ui") + mylist = [i.Label for i in controllers] + form.uiToolController.addItems(mylist) + r = form.exec_() + if not r: + return None + return [i for i in controllers if i.Label == form.uiToolController.currentText()][0] + + def chooseJob(self, jobs): + job = None + selected = FreeCADGui.Selection.getSelection() + if 1 == len(selected) and selected[0] in jobs: + job = selected[0] + else: + modelSelected = [] + for job in jobs: + if all([o in job.Model.Group for o in selected]): + modelSelected.append(job) + if 1 == len(modelSelected): + job = modelSelected[0] + else: + modelObjectSelected = [] + for job in jobs: + if all([o in job.Proxy.baseObjects(job) for o in selected]): + modelObjectSelected.append(job) + if 1 == len(modelObjectSelected): + job = modelObjectSelected[0] + else: + # form = FreeCADGui.PySideUic.loadUi(FreeCAD.getHomePath() + "Mod/Path/DlgJobChooser.ui") + form = FreeCADGui.PySideUic.loadUi(":/panels/DlgJobChooser.ui") + if modelObjectSelected: + mylist = [j.Label for j in modelObjectSelected] + else: + mylist = [j.Label for j in jobs] + form.cboProject.addItems(mylist) + r = form.exec_() + if r is False or r == 0: + return None + else: + job = [j for j in jobs if j.Label == form.cboProject.currentText()][0] + return job + + def createJob(self): + return PathJobCmd.CommandJobCreate().Activated() + + +PathUtils.UserInput = PathUtilsUserInput() + diff --git a/src/Mod/Path/utils/path-lint.sh b/src/Mod/Path/utils/path-lint.sh index 3bc7572691..c803fd4ada 100755 --- a/src/Mod/Path/utils/path-lint.sh +++ b/src/Mod/Path/utils/path-lint.sh @@ -53,10 +53,13 @@ EXTERNAL_MODULES+=' Mesh' EXTERNAL_MODULES+=' MeshPart' EXTERNAL_MODULES+=' Part' EXTERNAL_MODULES+=' Path' +EXTERNAL_MODULES+=' PySide' EXTERNAL_MODULES+=' PySide.QtCore' EXTERNAL_MODULES+=' PySide.QtGui' EXTERNAL_MODULES+=' TechDraw' +EXTERNAL_MODULES+=' area' EXTERNAL_MODULES+=' importlib' +EXTERNAL_MODULES+=' pivy' ARGS+=" --errors-only" ARGS+=" --ignored-modules=$(echo ${EXTERNAL_MODULES} | tr ' ' ',')"