From 2814b4600a5550fdf82ca8e429a9a7c04db92ab7 Mon Sep 17 00:00:00 2001 From: sliptonic Date: Mon, 15 Jan 2018 23:48:52 -0600 Subject: [PATCH] Path: rename Set_StartPoint to conform to command name standard PEP8 --- src/Mod/Path/PathScripts/PathOpGui.py | 66 +++++++++++++++++++-------- 1 file changed, 46 insertions(+), 20 deletions(-) diff --git a/src/Mod/Path/PathScripts/PathOpGui.py b/src/Mod/Path/PathScripts/PathOpGui.py index bd986b674b..63e7fa1ca3 100644 --- a/src/Mod/Path/PathScripts/PathOpGui.py +++ b/src/Mod/Path/PathScripts/PathOpGui.py @@ -33,8 +33,6 @@ import PathScripts.PathOp as PathOp import PathScripts.PathUtil as PathUtil import PathScripts.PathUtils as PathUtils import importlib - -from PathScripts.PathGeom import PathGeom from PySide import QtCore, QtGui __title__ = "Path Operation UI base classes" @@ -56,6 +54,7 @@ if False: else: PathLog.setLevel(PathLog.Level.INFO, PathLog.thisModule()) + def translate(context, text, disambig=None): return QtCore.QCoreApplication.translate(context, text, disambig) @@ -138,7 +137,7 @@ class ViewProvider(object): def __setstate__(self, state): '''__setstate__(state) ... callback on restoring a saved instance, pendant to __getstate__() state is the dictionary returned by __getstate__().''' - self.OpName = state['OpName'] + self.OpName = state['OpName'] self.OpIcon = state['OpIcon'] self.OpPageModule = state['OpPageModule'] self.OpPageClass = state['OpPageClass'] @@ -168,6 +167,7 @@ class ViewProvider(object): PathUtil.clearExpressionEngine(vobj.Object) return True + class TaskPanelPage(object): '''Base class for all task panel pages.''' @@ -186,11 +186,13 @@ class TaskPanelPage(object): def onDirtyChanged(self, callback): '''onDirtyChanged(callback) ... set callback when dirty state changes.''' self.signalDirtyChanged = callback + def setDirty(self): '''setDirty() ... mark receiver as dirty, causing the model to be recalculated if OK or Apply is pressed.''' self.isdirty = True if self.signalDirtyChanged: self.signalDirtyChanged(self) + def setClean(self): '''setClean() ... mark receiver as clean, indicating there is no need to recalculate the model even if the user presses OK or Apply.''' self.isdirty = False @@ -224,6 +226,7 @@ class TaskPanelPage(object): def setTitle(self, title): '''setTitle(title) ... sets a title for the page.''' self.title = title + def getTitle(self, obj): '''getTitle(obj) ... return title to be used for the receiver page. The default implementation returns what was previously set with setTitle(title). @@ -233,6 +236,7 @@ class TaskPanelPage(object): def setIcon(self, icon): '''setIcon(icon) ... sets the icon for the page.''' self.icon = icon + def getIcon(self, icon): '''getIcon(icon) ... return icon for page or None. Can safely be overwritten by subclasses.''' @@ -244,27 +248,33 @@ class TaskPanelPage(object): Note that this function is invoked after all page controllers have been created. Should be overwritten by subclasses.''' pass + def modifyStandardButtons(self, buttonBox): '''modifyStandardButtons(buttonBox) ... overwrite if the task panel standard buttons need to be modified. Can safely be overwritten by subclasses.''' pass + def getForm(self): '''getForm() ... return UI form for this page. Must be overwritten by subclasses.''' pass + def getFields(self, obj): '''getFields(obj) ... overwrite to transfer values from UI to obj's properties. Can safely be overwritten by subclasses.''' pass + def setFields(self, obj): '''setFields(obj) ... overwrite to transfer obj's property values to UI. Can safely be overwritten by subclasses.''' pass + def getSignalsForUpdate(self, obj): '''getSignalsForUpdate(obj) ... return signals which, when triggered, cause the receiver to update the model. See also registerSignalHandlers(obj) Can safely be overwritten by subclasses.''' return [] + def registerSignalHandlers(self, obj): '''registerSignalHandlers(obj) ... overwrite to register custom signal handlers. In case an update of a model is not the desired operation of a signal invocation @@ -272,6 +282,7 @@ class TaskPanelPage(object): manually. Can safely be overwritten by subclasses.''' pass + def updateData(self, obj, prop): '''updateData(obj, prop) ... overwrite if the receiver needs to react to property changes that might not have been caused by the receiver itself. Sometimes a model will recalculate properties based on a change of another property. In order to keep the UI up to date with such changes this @@ -283,6 +294,7 @@ class TaskPanelPage(object): In such a scenario the first property assignment will cause all changes in the UI of the other fields to be overwritten by setFields(obj). You have been warned.''' pass + def updateSelection(self, obj, sel): '''updateSelection(obj, sel) ... overwrite to customize UI depending on current selection. Can safely be overwritten by subclasses.''' @@ -316,15 +328,18 @@ class TaskPanelPage(object): if obj.ToolController != tc: obj.ToolController = tc + class TaskPanelBaseGeometryPage(TaskPanelPage): '''Page controller for the base geometry.''' - DataObject = QtCore.Qt.ItemDataRole.UserRole + DataObject = QtCore.Qt.ItemDataRole.UserRole DataObjectSub = QtCore.Qt.ItemDataRole.UserRole + 1 def getForm(self): return FreeCADGui.PySideUic.loadUi(":/panels/PageBaseGeometryEdit.ui") + def getTitle(self, obj): return translate("PathOp", "Base Geometry") + def getFields(self, obj): pass @@ -348,14 +363,17 @@ class TaskPanelBaseGeometryPage(TaskPanelPage): FreeCADGui.Selection.addSelection(obj, sub) else: FreeCADGui.Selection.addSelection(obj) - #FreeCADGui.updateGui() + # FreeCADGui.updateGui() def supportsVertexes(self): return self.features & PathOp.FeatureBaseVertexes + def supportsEdges(self): return self.features & PathOp.FeatureBaseEdges + def supportsFaces(self): return self.features & PathOp.FeatureBaseFaces + def supportsPanels(self): return self.features & PathOp.FeatureBasePanels @@ -395,7 +413,7 @@ class TaskPanelBaseGeometryPage(TaskPanelPage): def addBase(self): if self.addBaseGeometry(FreeCADGui.Selection.getSelectionEx()): - #self.obj.Proxy.execute(self.obj) + # self.obj.Proxy.execute(self.obj) self.setFields(self.obj) self.setDirty() @@ -406,8 +424,8 @@ class TaskPanelBaseGeometryPage(TaskPanelPage): self.form.baseList.takeItem(self.form.baseList.row(item)) self.setDirty() self.updateBase() - #self.obj.Proxy.execute(self.obj) - #FreeCAD.ActiveDocument.recompute() + # self.obj.Proxy.execute(self.obj) + # FreeCAD.ActiveDocument.recompute() def updateBase(self): newlist = [] @@ -420,8 +438,8 @@ class TaskPanelBaseGeometryPage(TaskPanelPage): PathLog.debug("Setting new base: %s -> %s" % (self.obj.Base, newlist)) self.obj.Base = newlist - #self.obj.Proxy.execute(self.obj) - #FreeCAD.ActiveDocument.recompute() + # self.obj.Proxy.execute(self.obj) + # FreeCAD.ActiveDocument.recompute() def clearBase(self): self.obj.Base = [] @@ -457,6 +475,7 @@ class TaskPanelBaseLocationPage(TaskPanelPage): def getTitle(self, obj): return translate("PathOp", "Base Location") + def getFields(self, obj): pass @@ -483,7 +502,7 @@ class TaskPanelBaseLocationPage(TaskPanelPage): selected = self.formLoc.baseList.selectedItems() for item in selected: row = self.formLoc.baseList.row(item) - if not row in deletedRows: + if row not in deletedRows: deletedRows.append(row) self.formLoc.baseList.removeRow(row) self.updateLocations() @@ -603,7 +622,6 @@ class TaskPanelDepthsPage(TaskPanelPage): self.form.finishDepth.hide() self.form.finishDepthLabel.hide() - def getTitle(self, obj): return translate("PathOp", "Depths") @@ -679,6 +697,7 @@ class TaskPanelDepthsPage(TaskPanelPage): self.form.startDepthSet.setEnabled(False) self.form.finalDepthSet.setEnabled(False) + class TaskPanel(object): ''' Generic TaskPanel implementation handling the standard Path operation layout. @@ -881,10 +900,13 @@ class TaskPanel(object): # SelectionObserver interface def addSelection(self, doc, obj, sub, pnt): self.updateSelection() + def removeSelection(self, doc, obj, sub): self.updateSelection() + def setSelection(self, doc): self.updateSelection() + def clearSelection(self, doc): self.updateSelection() @@ -914,13 +936,14 @@ class CommandSetStartPoint: def Activated(self): FreeCADGui.Snapper.getPoint(callback=self.setpoint) + def Create(res): '''Create(res) ... generic implementation of a create function. res is an instance of CommandResources. It is not expected that the user invokes this function directly, but calls the Activated() function of the Command object that is created in each operations Gui implementation.''' FreeCAD.ActiveDocument.openTransaction("Create %s" % res.name) - obj = res.objFactory(res.name) + obj = res.objFactory(res.name) if obj.Proxy: vobj = ViewProvider(obj.ViewObject, res) @@ -930,6 +953,7 @@ def Create(res): FreeCAD.ActiveDocument.abortTransaction() return None + class CommandPathOp: '''Generic, data driven implementation of a Path operation creation command. Instances of this class are stored in all Path operation Gui modules and can @@ -956,6 +980,7 @@ class CommandPathOp: def Activated(self): return Create(self.res) + class CommandResources: '''POD class to hold command specific resources.''' def __init__(self, name, objFactory, opPageClass, pixmap, menuText, accelKey, toolTip): @@ -967,13 +992,14 @@ class CommandResources: self.accelKey = accelKey self.toolTip = toolTip + def SetupOperation(name, - objFactory, - opPageClass, - pixmap, - menuText, - toolTip, - accelKey = None): + objFactory, + opPageClass, + pixmap, + menuText, + toolTip, + accelKey=None): '''SetupOperation(name, objFactory, opPageClass, pixmap, menuText, toolTip, accelKey=None) Creates an instance of CommandPathOp with the given parameters and registers the command with FreeCAD. When activated it creates a model with proxy (by invoking objFactory), assigns a view provider to it @@ -989,6 +1015,6 @@ def SetupOperation(name, return command -FreeCADGui.addCommand('Set_StartPoint', CommandSetStartPoint()) +FreeCADGui.addCommand('Path_SetStartPoint', CommandSetStartPoint()) FreeCAD.Console.PrintLog("Loading PathOpGui... done\n")