Merge pull request #6703 from Russ4262/fix/extensions_size_update
Path: Fix extensions updates and Default Length application [Bug]
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user