Merge pull request #6703 from Russ4262/fix/extensions_size_update

Path: Fix extensions updates and Default Length application [Bug]
This commit is contained in:
sliptonic
2022-05-13 09:08:49 -05:00
committed by GitHub
2 changed files with 26 additions and 8 deletions

View File

@@ -194,6 +194,7 @@ class TaskPanelExtensionPage(PathOpGui.TaskPanelPage):
self.extensionsCache = dict()
self.extensionsReady = False
self.enabled = True
self.lastDefaultLength = ""
self.extensions = list()
@@ -284,6 +285,7 @@ class TaskPanelExtensionPage(PathOpGui.TaskPanelPage):
self._initializeExtensions(obj) # Efficiently initialize Extensions
self.defaultLength.updateSpinBox()
self._getUseOutlineState() # Find `useOutline` checkbox and get its boolean value
self.lastDefaultLength = self.form.defaultLength.text() # set last DL value
self.fieldsSet = True # flag to identify initial values set
def _initializeExtensions(self, obj):
@@ -299,13 +301,13 @@ class TaskPanelExtensionPage(PathOpGui.TaskPanelPage):
self.form.extensionEdit.setDisabled(True)
self.setExtensions(self.extensions)
def updateQuantitySpinBoxes(self, index=None):
prevValue = self.form.defaultLength.text()
def _applyDefaultLengthChange(self, index=None):
"""_applyDefaultLengthChange(index=None)...
Helper method to update Default Length spinbox,
and update extensions due to change in Default Length."""
self.defaultLength.updateSpinBox()
postValue = self.form.defaultLength.text()
if postValue != prevValue:
PathLog.debug("updateQuantitySpinBoxes() post != prev value")
if self.form.defaultLength.text() != self.lastDefaultLength:
self.lastDefaultLength = self.form.defaultLength.text()
self._resetCachedExtensions() # Reset extension cache because extension dimensions likely changed
self._enableExtensions() # Recalculate extensions
@@ -490,7 +492,7 @@ class TaskPanelExtensionPage(PathOpGui.TaskPanelPage):
if self.fieldsSet:
if self.form.enableExtensions.isChecked():
if prop == "ExtensionLengthDefault":
self.updateQuantitySpinBoxes()
self._applyDefaultLengthChange()
elif prop == "Base":
self.extensionsReady = False
self.setExtensions(FeatureExtensions.getExtensions(obj))
@@ -625,8 +627,8 @@ class TaskPanelExtensionPage(PathOpGui.TaskPanelPage):
self.form.buttonClear.clicked.connect(self.extensionsClear)
self.form.buttonDisable.clicked.connect(self.extensionsDisable)
self.form.buttonEnable.clicked.connect(self.extensionsEnable)
self.form.defaultLength.editingFinished.connect(self.updateQuantitySpinBoxes)
self.form.enableExtensions.toggled.connect(self._enableExtensions)
self.form.defaultLength.editingFinished.connect(self._applyDefaultLengthChange)
self.model.itemChanged.connect(self.updateItemEnabled)

View File

@@ -125,14 +125,29 @@ class QuantitySpinBox(QtCore.QObject):
self.onBeforeChange = onBeforeChange
self.prop = None
self.obj = obj
self.lastWidgetText = self.widget.text()
self.attachTo(obj, prop)
self.widget.installEventFilter(self)
# Connect local class method as slot
self.widget.textChanged.connect(self.onWidgetValueChanged)
def eventFilter(self, obj, event):
if event.type() == QtCore.QEvent.Type.FocusIn:
self.updateSpinBox()
return False
def onWidgetValueChanged(self):
"""onWidgetValueChanged()... Slot method for determining if a change
in widget value is a result of an expression edit, or a simple spinbox change.
If the former, emit a manual `editingFinished` signal because the Formula Editor
window returned a value to the base widget, leaving it in read-only mode,
and finishing the editing of the value. Otherwise, due nothing if the value
has not changed, or there is no active expression for the property.
If the user closes the Formula Editor to cancel the edit, the value will not
be changed, and this manual signal will not be emitted."""
if self._hasExpression() and self.widget.text() != self.lastWidgetText:
self.widget.editingFinished.emit()
def attachTo(self, obj, prop=None):
"""attachTo(obj, prop=None) ... use an existing editor for the given object and property"""
PathLog.track(self.prop, prop)
@@ -180,6 +195,7 @@ class QuantitySpinBox(QtCore.QObject):
quantity = PathUtil.getProperty(self.obj, self.prop)
value = quantity.Value if hasattr(quantity, "Value") else quantity
self.widget.setProperty("rawValue", value)
self.lastWidgetText = self.widget.text() # update last widget value
if expr:
self.widget.setReadOnly(True)
self.widget.setStyleSheet("color: gray")