Browse Source

Fix some rounding issues, make sure "set-value" on skin knobs work

tags/1.9.6
falkTX 11 years ago
parent
commit
67319eae91
3 changed files with 51 additions and 28 deletions
  1. +1
    -1
      source/carla_host.py
  2. +39
    -17
      source/carla_skin.py
  3. +11
    -10
      source/carla_widgets.py

+ 1
- 1
source/carla_host.py View File

@@ -2022,7 +2022,7 @@ def engineCallback(host, action, pluginId, value1, value2, value3, valueStr):
elif action == ENGINE_CALLBACK_UI_STATE_CHANGED:
host.UiStateChangedCallback.emit(pluginId, value1)
elif action == ENGINE_CALLBACK_NOTE_ON:
host.NoteOnCallback.emit(pluginId, value1, value2, int(value3))
host.NoteOnCallback.emit(pluginId, value1, value2, round(value3))
elif action == ENGINE_CALLBACK_NOTE_OFF:
host.NoteOffCallback.emit(pluginId, value1, value2)
elif action == ENGINE_CALLBACK_UPDATE:


+ 39
- 17
source/carla_skin.py View File

@@ -258,8 +258,8 @@ class AbstractPluginSlot(QFrame, PluginEditParentMeta):

audioCountInfo = host.get_audio_port_count_info(self.fPluginId)

self.fPeaksInputCount = int(audioCountInfo['ins'])
self.fPeaksOutputCount = int(audioCountInfo['outs'])
self.fPeaksInputCount = audioCountInfo['ins']
self.fPeaksOutputCount = audioCountInfo['outs']

if self.fPeaksInputCount > 2:
self.fPeaksInputCount = 2
@@ -1083,32 +1083,52 @@ class AbstractPluginSlot(QFrame, PluginEditParentMeta):
current = sender.fRealValue
label = sender.fLabel

if index in (PARAMETER_DRYWET, PARAMETER_VOLUME):
default = 1.0
resetText = self.tr("Reset (%i%%)" % int(default*100.0))
minimText = self.tr("Set to Minimum (%i%%)" % int(minimum*100.0))
maximText = self.tr("Set to Maximum (%i%%)" % int(maximum*100.0))
if index in (PARAMETER_NULL, PARAMETER_CTRL_CHANNEL) or index <= PARAMETER_MAX:
return
elif index in (PARAMETER_DRYWET, PARAMETER_VOLUME):
default = 1.0
elif index == PARAMETER_BALANCE_LEFT:
default = -1.0
elif index == PARAMETER_BALANCE_RIGHT:
default = 1.0
elif index == PARAMETER_PANNING:
default = 0.0
else:
default = self.host.get_default_parameter_value(self.fPluginId, index)

if index < PARAMETER_NULL:
# show in integer percentage
textReset = self.tr("Reset (%i%%)" % round(default*100.0))
textMinim = self.tr("Set to Minimum (%i%%)" % round(minimum*100.0))
textMaxim = self.tr("Set to Maximum (%i%%)" % round(maximum*100.0))
else:
default = self.host.get_default_parameter_value(self.fPluginId, index)
resetText = self.tr("Reset (%f)" % default)
minimText = self.tr("Set to Minimum (%f)" % minimum)
maximText = self.tr("Set to Maximum (%f)" % maximum)
# show in full float value
textReset = self.tr("Reset (%f)" % default)
textMinim = self.tr("Set to Minimum (%f)" % minimum)
textMaxim = self.tr("Set to Maximum (%f)" % maximum)

menu = QMenu(self)
actReset = menu.addAction(resetText)
actReset = menu.addAction(textReset)
menu.addSeparator()
actMinimum = menu.addAction(minimText)
actMaximum = menu.addAction(maximText)
actMinimum = menu.addAction(textMinim)
actCenter = menu.addAction(self.tr("Set to Center"))
actMaximum = menu.addAction(textMaxim)
menu.addSeparator()
actSet = menu.addAction(self.tr("Set value..."))

if index > PARAMETER_NULL or index not in (PARAMETER_BALANCE_LEFT, PARAMETER_BALANCE_RIGHT, PARAMETER_PANNING):
menu.removeAction(actCenter)

actSelected = menu.exec_(QCursor.pos())

if actSelected == actSet:
valueTry = QInputDialog.getDouble(self, self.tr("Set value"), label, current, minimum, maximum, 3) # FIXME - 3 decimals
if valueTry[1]:
value = valueTry[0] * 10
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
else:
value, ok = QInputDialog.getDouble(self, self.tr("Set value"), label, current, minimum, maximum, 3) # FIXME - 3 decimals

if not ok:
return

elif actSelected == actMinimum:
@@ -1117,6 +1137,8 @@ class AbstractPluginSlot(QFrame, PluginEditParentMeta):
value = maximum
elif actSelected == actReset:
value = default
elif actSelected == actCenter:
value = 0.0
else:
return



+ 11
- 10
source/carla_widgets.py View File

@@ -442,7 +442,7 @@ class PluginEdit(QDialog):
self.fPluginInfo = None

self.fCurrentStateFilename = None
self.fControlChannel = int(host.get_internal_parameter_value(pluginId, PARAMETER_CTRL_CHANNEL))
self.fControlChannel = round(host.get_internal_parameter_value(pluginId, PARAMETER_CTRL_CHANNEL))
self.fFirstInit = True

self.fParameterList = [] # (type, id, widget)
@@ -673,7 +673,7 @@ class PluginEdit(QDialog):
self.ui.dial_pan.setValue(self.host.get_internal_parameter_value(self.fPluginId, PARAMETER_PANNING))
self.ui.dial_pan.blockSignals(False)

self.fControlChannel = int(self.host.get_internal_parameter_value(self.fPluginId, PARAMETER_CTRL_CHANNEL))
self.fControlChannel = round(self.host.get_internal_parameter_value(self.fPluginId, PARAMETER_CTRL_CHANNEL))
self.ui.sb_ctrl_channel.blockSignals(True)
self.ui.sb_ctrl_channel.setValue(self.fControlChannel+1)
self.ui.sb_ctrl_channel.blockSignals(False)
@@ -1100,7 +1100,7 @@ class PluginEdit(QDialog):
self.ui.dial_pan.blockSignals(False)

elif index == PARAMETER_CTRL_CHANNEL:
self.fControlChannel = int(value)
self.fControlChannel = round(value)
self.ui.sb_ctrl_channel.blockSignals(True)
self.ui.sb_ctrl_channel.setValue(self.fControlChannel+1)
self.ui.sb_ctrl_channel.blockSignals(False)
@@ -1365,7 +1365,9 @@ class PluginEdit(QDialog):

@pyqtSlot()
def slot_knobCustomMenu(self):
knobName = self.sender().objectName()
sender = self.sender()
knobName = sender.objectName()

if knobName == "dial_drywet":
minimum = 0.0
maximum = 1.0
@@ -1397,8 +1399,6 @@ class PluginEdit(QDialog):
default = 0.5
label = "Unknown"

current = self.sender().value() / 10

menu = QMenu(self)
actReset = menu.addAction(self.tr("Reset (%i%%)" % (default*100)))
menu.addSeparator()
@@ -1414,10 +1414,11 @@ class PluginEdit(QDialog):
actSelected = menu.exec_(QCursor.pos())

if actSelected == actSet:
valueTry = QInputDialog.getDouble(self, self.tr("Set value"), label, current, minimum, maximum, 3)
if valueTry[1]:
value = valueTry[0] * 10
else:
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)
if ok: value = float(value)/100.0

if not ok:
return

elif actSelected == actMinimum:


Loading…
Cancel
Save