diff --git a/source/carla_skin.py b/source/carla_skin.py index 3ade3e5c6..e536147af 100755 --- a/source/carla_skin.py +++ b/source/carla_skin.py @@ -1123,13 +1123,28 @@ class AbstractPluginSlot(QFrame, PluginEditParentMeta): if actSelected == actSet: if index < PARAMETER_NULL: - value, ok = QInputDialog.getInteger(self, self.tr("Set value"), label, round(current*100), round(minimum*100), round(maximum*100), 1) - if ok: value = float(value)/100.0 + value, ok = QInputDialog.getInt(self, self.tr("Set value"), label, round(current*100), round(minimum*100), round(maximum*100), 1) + + if not ok: + return + + value = float(value)/100.0 + else: - value, ok = QInputDialog.getDouble(self, self.tr("Set value"), label, current, minimum, maximum, 3) # FIXME - 3 decimals + paramInfo = self.host.get_parameter_info(self.fPluginId, index) + paramRanges = self.host.get_parameter_ranges(self.fPluginId, index) + scalePoints = [] - if not ok: - return + for i in range(paramInfo['scalePointCount']): + scalePoints.append(self.host.get_parameter_scalepoint_info(self.fPluginId, index, i)) + + dialog = CustomInputDialog(self, label, current, minimum, maximum, + paramRanges['step'], paramRanges['stepSmall'], scalePoints) + + if not dialog.exec_(): + return + + value = dialog.returnValue() elif actSelected == actMinimum: value = minimum diff --git a/source/carla_widgets.py b/source/carla_widgets.py index 713fa371a..9324b1cd9 100755 --- a/source/carla_widgets.py +++ b/source/carla_widgets.py @@ -43,6 +43,7 @@ import ui_carla_parameter from carla_shared import * from carla_utils import * +from paramspinbox import CustomInputDialog from pixmapkeyboard import PixmapKeyboardHArea # ------------------------------------------------------------------------------------------------------------ @@ -1408,14 +1409,14 @@ class PluginEdit(QDialog): menu.addSeparator() actSet = menu.addAction(self.tr("Set value...")) - if label not in ("Balance-Left", "Balance-Right"): + if label not in ("Balance-Left", "Balance-Right", "Panning"): menu.removeAction(actCenter) actSelected = menu.exec_(QCursor.pos()) if actSelected == actSet: current = minimum + (maximum-minimum)*(float(sender.value())/10000) - value, ok = QInputDialog.getInteger(self, self.tr("Set value"), label, round(current*100.0), round(minimum*100.0), round(maximum*100.0), 1) + value, ok = QInputDialog.getInt(self, self.tr("Set value"), label, round(current*100.0), round(minimum*100.0), round(maximum*100.0), 1) if ok: value = float(value)/100.0 if not ok: diff --git a/source/widgets/paramspinbox.py b/source/widgets/paramspinbox.py index 529c30e65..28e0d9432 100644 --- a/source/widgets/paramspinbox.py +++ b/source/widgets/paramspinbox.py @@ -24,7 +24,7 @@ from carla_config import * # ------------------------------------------------------------------------------------------------------------ # Imports (Global) -from math import isnan +from math import isnan, modf from random import random if config_UseQt5: @@ -59,16 +59,31 @@ def geFixedValue(name, value, minimum, maximum): # Custom InputDialog with Scale Points support class CustomInputDialog(QDialog): - def __init__(self, parent, label, current, minimum, maximum, step, scalePoints): + def __init__(self, parent, label, current, minimum, maximum, step, stepSmall, scalePoints): QDialog.__init__(self, parent) self.ui = ui_inputdialog_value.Ui_Dialog() self.ui.setupUi(self) + # calculate num decimals from stepSmall + if stepSmall >= 1.0: + decimals = 0 + elif step >= 1.0: + decimals = 2 + else: + decfrac, decwhole = modf(stepSmall) + + if "000" in str(decfrac): + decfrac = round(decfrac, str(decfrac).find("000")) + else: + decfrac = round(decfrac, 12) + + decimals = abs(len(str(decfrac))-len(str(decwhole))-1) + self.ui.label.setText(label) - self.ui.doubleSpinBox.setMinimum(minimum) - self.ui.doubleSpinBox.setMaximum(maximum) - self.ui.doubleSpinBox.setValue(current) + self.ui.doubleSpinBox.setDecimals(decimals) + self.ui.doubleSpinBox.setRange(minimum, maximum) self.ui.doubleSpinBox.setSingleStep(step) + self.ui.doubleSpinBox.setValue(current) if not scalePoints: self.ui.groupBox.setVisible(False) @@ -316,11 +331,11 @@ class ParamSpinBox(QAbstractSpinBox): def setScalePoints(self, scalePoints, useScalePoints): if len(scalePoints) == 0: - self.fScalePoints = None + self.fScalePoints = None self.fUseScalePoints = False return - self.fScalePoints = scalePoints + self.fScalePoints = scalePoints self.fUseScalePoints = useScalePoints if not useScalePoints: @@ -482,7 +497,8 @@ class ParamSpinBox(QAbstractSpinBox): self.setValue(pasteValue) elif actSel == actSet: - dialog = CustomInputDialog(self, self.fName, self.fValue, self.fMinimum, self.fMaximum, self.fStep, self.fScalePoints) + dialog = CustomInputDialog(self, self.fName, self.fValue, self.fMinimum, self.fMaximum, + self.fStep, self.fStepSmall, self.fScalePoints) if dialog.exec_(): value = dialog.returnValue() self.setValue(value)