From b583439b274e0ca99e8bf7107f34a736faf45588 Mon Sep 17 00:00:00 2001 From: Markus Lampert Date: Fri, 28 Dec 2018 18:39:32 -0800 Subject: [PATCH] Added Show All pocket extension checkbox for better UX. --- .../Resources/panels/PageOpPocketExtEdit.ui | 28 ++++---- .../Path/PathScripts/PathPocketShapeGui.py | 66 ++++++++++++++----- 2 files changed, 64 insertions(+), 30 deletions(-) diff --git a/src/Mod/Path/Gui/Resources/panels/PageOpPocketExtEdit.ui b/src/Mod/Path/Gui/Resources/panels/PageOpPocketExtEdit.ui index 8787ec7dae..3b5a34ad29 100644 --- a/src/Mod/Path/Gui/Resources/panels/PageOpPocketExtEdit.ui +++ b/src/Mod/Path/Gui/Resources/panels/PageOpPocketExtEdit.ui @@ -6,7 +6,7 @@ 0 0 - 381 + 430 617 @@ -23,7 +23,7 @@ - + Default Length @@ -31,6 +31,16 @@ + + + -999999999.000000000000000 + + + 999999999.000000000000000 + + + + Extend Corners @@ -40,13 +50,10 @@ - - - - -999999999.000000000000000 - - - 999999999.000000000000000 + + + + Show All @@ -61,9 +68,6 @@ true - - QAbstractItemView::MultiSelection - true diff --git a/src/Mod/Path/PathScripts/PathPocketShapeGui.py b/src/Mod/Path/PathScripts/PathPocketShapeGui.py index f94c70d0de..fc7d99176d 100644 --- a/src/Mod/Path/PathScripts/PathPocketShapeGui.py +++ b/src/Mod/Path/PathScripts/PathPocketShapeGui.py @@ -45,7 +45,7 @@ __doc__ = "Pocket Shape operation page controller and command implementation." def translate(context, text, disambig=None): return QtCore.QCoreApplication.translate(context, text, disambig) -if True: +if False: PathLog.setLevel(PathLog.Level.DEBUG, PathLog.thisModule()) PathLog.trackModule(PathLog.thisModule()) else: @@ -53,7 +53,10 @@ else: class _Extension(object): ColourEnabled = (1.0, .5, .5) - ColourDisabled = (1.0, 1.0, .5) + #ColourDisabled = (1.0, 1.0, .5) + ColourDisabled = (.5, .5, .5) + TransparencySelected = 0.0 + TransparencyDeselected = 0.7 def __init__(self, obj, base, face, edge): self.obj = obj @@ -85,7 +88,7 @@ class _Extension(object): return None mat.diffuseColor = self.ColourDisabled - mat.transparency = 0.5 + mat.transparency = self.TransparencyDeselected hnt.faceType = coin.SoShapeHints.UNKNOWN_FACE_TYPE hnt.vertexOrdering = coin.SoShapeHints.CLOCKWISE @@ -125,6 +128,12 @@ class _Extension(object): def disable(self): self.material.diffuseColor = self.ColourDisabled + def select(self): + self.material.transparency = self.TransparencySelected + + def deselect(self): + self.material.transparency = self.TransparencyDeselected + Page = None class TaskPanelExtensionPage(PathOpGui.TaskPanelPage): @@ -153,6 +162,11 @@ class TaskPanelExtensionPage(PathOpGui.TaskPanelPage): self.model = QtGui.QStandardItemModel(self.form.extensionTree) self.model.setHorizontalHeaderLabels(['Base', 'Extension']) + if 0 < len(obj.ExtensionFeature): + self.form.showExtensions.setCheckState(QtCore.Qt.Checked) + else: + self.form.showExtensions.setCheckState(QtCore.Qt.Unchecked) + global Page Page = self @@ -169,7 +183,9 @@ class TaskPanelExtensionPage(PathOpGui.TaskPanelPage): for featureRow in range(model.rowCount()): feature = model.child(featureRow, 0); for edgeRow in range(feature.rowCount()): - cb(feature.child(edgeRow, 0)) + item = feature.child(edgeRow, 0) + ext = item.data(self.DataObject) + cb(item, ext) def getFields(self, obj): PathLog.track(obj.Label, self.model.rowCount(), self.model.columnCount()) @@ -178,8 +194,7 @@ class TaskPanelExtensionPage(PathOpGui.TaskPanelPage): extensions = [] - def extractExtension(item): - ext = item.data(self.DataObject) + def extractExtension(item, ext): if ext and ext.edge and item.checkState() == QtCore.Qt.Checked: extensions.append(ext.ext) @@ -267,8 +282,7 @@ class TaskPanelExtensionPage(PathOpGui.TaskPanelPage): collapsedFeatures.append("%s.%s" % (modelName, feature.data(QtCore.Qt.EditRole))) # remove current extensions and all their visuals - def removeItemSwitch(item): - ext = item.data(self.DataObject) + def removeItemSwitch(item, ext): ext.hide() self.switch.removeChild(ext.root) self.forAllItemsCall(removeItemSwitch) @@ -331,14 +345,18 @@ class TaskPanelExtensionPage(PathOpGui.TaskPanelPage): return True return False - def setSelectionVisuals(item): - ext = item.data(self.DataObject) + def setSelectionVisuals(item, ext): if selectItem(item, ext): self.selectionModel.select(item.index(), QtGui.QItemSelectionModel.Select) - if self.selectionModel.isSelected(item.index()): + + selected = self.selectionModel.isSelected(item.index()) + if selected: FreeCADGui.Selection.addSelection(ext.base, ext.face) - ext.show() - elif item.checkState() == QtCore.Qt.Checked: + ext.select() + else: + ext.deselect() + + if self.form.showExtensions.isChecked() or self.selectionModel.isSelected(item.index()): ext.show() else: ext.hide() @@ -348,9 +366,9 @@ class TaskPanelExtensionPage(PathOpGui.TaskPanelPage): self.restoreSelection([]) def extensionsClear(self): - def disableItem(item): + def disableItem(item, ext): item.setCheckState(QtCore.Qt.Unchecked) - item.data(self.DataObject).disable() + ext.disable() self.forAllItemsCall(disableItem) self.setDirty() @@ -373,14 +391,24 @@ class TaskPanelExtensionPage(PathOpGui.TaskPanelPage): def updateItemEnabled(self, item): ext = item.data(self.DataObject) if item.checkState() == QtCore.Qt.Checked: - ext.show() ext.enable() else: ext.disable() - if not self.selectionModel.isSelected(item.index()): - ext.hide() self.setDirty() + def showHideExtension(self): + if self.form.showExtensions.isChecked(): + def enableExtensionEdit(item, ext): + ext.show() + self.forAllItemsCall(enableExtensionEdit) + else: + def disableExtensionEdit(item, ext): + #item.setCheckState(QtCore.Qt.Unchecked) + #ext.disable() + ext.hide() + self.forAllItemsCall(disableExtensionEdit) + #self.setDirty() + def getSignalsForUpdate(self, obj): PathLog.track(obj.Label) signals = [] @@ -388,6 +416,7 @@ class TaskPanelExtensionPage(PathOpGui.TaskPanelPage): return signals def registerSignalHandlers(self, obj): + self.form.showExtensions.clicked.connect(self.showHideExtension) self.form.extendCorners.clicked.connect(lambda : self.setExtensions(obj.Proxy.getExtensions(obj))) self.form.buttonClear.clicked.connect(self.extensionsClear) self.form.buttonDisable.clicked.connect(self.extensionsDisable) @@ -397,6 +426,7 @@ class TaskPanelExtensionPage(PathOpGui.TaskPanelPage): self.selectionModel = self.form.extensionTree.selectionModel() self.selectionModel.selectionChanged.connect(self.selectionChanged) + self.selectionChanged() class TaskPanelOpPage(PathPocketBaseGui.TaskPanelOpPage): '''Page controller class for Pocket operation'''