|
|
@@ -47,7 +47,7 @@ from digitalpeakmeter import DigitalPeakMeter |
|
|
|
from pixmapdial import PixmapDial |
|
|
|
|
|
|
|
# ------------------------------------------------------------------------------------------------------------ |
|
|
|
# Plugin Skin Rules |
|
|
|
# Plugin Skin Rules (WORK IN PROGRESS) |
|
|
|
|
|
|
|
# Base is a QFrame (NoFrame, Plain, 0-size lines), with "PluginWidget" as object name. |
|
|
|
# Spacing of the top-most layout must be 1px. |
|
|
@@ -185,6 +185,42 @@ def getModColorFromCategory(category): |
|
|
|
return (92, 210, 254) |
|
|
|
return (40, 40, 40) |
|
|
|
|
|
|
|
# ------------------------------------------------------------------------------------------------------------ |
|
|
|
# |
|
|
|
|
|
|
|
def setPixmapDialStyle(widget, parameterId, parameterCount, skinStyle): |
|
|
|
if "calf" in skinStyle: |
|
|
|
widget.setCustomPaintMode(PixmapDial.CUSTOM_PAINT_MODE_NO_GRADIENT) |
|
|
|
widget.setPixmap(7) |
|
|
|
|
|
|
|
elif skinStyle == "mod": |
|
|
|
widget.setCustomPaintMode(PixmapDial.CUSTOM_PAINT_MODE_NO_GRADIENT) |
|
|
|
widget.setPixmap(14) |
|
|
|
|
|
|
|
elif skinStyle == "openav": |
|
|
|
widget.setCustomPaintMode(PixmapDial.CUSTOM_PAINT_MODE_NO_GRADIENT) |
|
|
|
if parameterId == PARAMETER_DRYWET: |
|
|
|
widget.setPixmap(13) |
|
|
|
elif parameterId == PARAMETER_VOLUME: |
|
|
|
widget.setPixmap(12) |
|
|
|
else: |
|
|
|
widget.setPixmap(11) |
|
|
|
|
|
|
|
else: |
|
|
|
if parameterId == PARAMETER_DRYWET: |
|
|
|
widget.setCustomPaintMode(PixmapDial.CUSTOM_PAINT_MODE_CARLA_WET) |
|
|
|
elif parameterId == PARAMETER_VOLUME: |
|
|
|
widget.setCustomPaintMode(PixmapDial.CUSTOM_PAINT_MODE_CARLA_VOL) |
|
|
|
else: |
|
|
|
_r = 255 - int((float(parameterId)/float(parameterCount))*200.0) |
|
|
|
_g = 55 + int((float(parameterId)/float(parameterCount))*200.0) |
|
|
|
_b = 0 #(r-40)*4 |
|
|
|
widget.setCustomPaintColor(QColor(_r, _g, _b)) |
|
|
|
widget.setCustomPaintMode(PixmapDial.CUSTOM_PAINT_MODE_COLOR) |
|
|
|
|
|
|
|
widget.setPixmap(3) |
|
|
|
widget.forceWhiteLabelGradientText() |
|
|
|
|
|
|
|
# ------------------------------------------------------------------------------------------------------------ |
|
|
|
# Abstract plugin slot |
|
|
|
|
|
|
@@ -262,6 +298,9 @@ class AbstractPluginSlot(QFrame, PluginEditParentMeta): |
|
|
|
self.peak_in = None |
|
|
|
self.peak_out = None |
|
|
|
|
|
|
|
self.w_knobs_left = None |
|
|
|
self.w_knobs_right = None |
|
|
|
|
|
|
|
# ------------------------------------------------------------- |
|
|
|
# Set-up connections |
|
|
|
|
|
|
@@ -447,12 +486,6 @@ class AbstractPluginSlot(QFrame, PluginEditParentMeta): |
|
|
|
if self.fPeaksOutputCount == 0 and not isinstance(self, PluginSlot_Default): |
|
|
|
self.peak_out.hide() |
|
|
|
|
|
|
|
for paramIndex, paramWidget in self.fParameterList: |
|
|
|
paramWidget.setContextMenuPolicy(Qt.CustomContextMenu) |
|
|
|
paramWidget.customContextMenuRequested.connect(self.slot_knobCustomMenu) |
|
|
|
paramWidget.realValueChanged.connect(self.slot_parameterValueChanged) |
|
|
|
paramWidget.setValue(self.host.get_internal_parameter_value(self.fPluginId, paramIndex)) |
|
|
|
|
|
|
|
# ------------------------------------------------------------- |
|
|
|
|
|
|
|
if self.fSkinStyle == "mod": |
|
|
@@ -496,6 +529,68 @@ class AbstractPluginSlot(QFrame, PluginEditParentMeta): |
|
|
|
|
|
|
|
self.setStyleSheet(styleSheet) |
|
|
|
|
|
|
|
# ------------------------------------------------------------- |
|
|
|
# Set-up parameters |
|
|
|
|
|
|
|
if self.w_knobs_left is not None: |
|
|
|
parameterCount = self.host.get_parameter_count(self.fPluginId) |
|
|
|
|
|
|
|
index = 0 |
|
|
|
for i in range(parameterCount): |
|
|
|
if index >= 8: |
|
|
|
break |
|
|
|
|
|
|
|
paramInfo = self.host.get_parameter_info(self.fPluginId, i) |
|
|
|
paramData = self.host.get_parameter_data(self.fPluginId, i) |
|
|
|
paramRanges = self.host.get_parameter_ranges(self.fPluginId, i) |
|
|
|
|
|
|
|
if paramData['type'] != PARAMETER_INPUT: |
|
|
|
continue |
|
|
|
if paramData['hints'] & PARAMETER_IS_BOOLEAN: |
|
|
|
continue |
|
|
|
if paramData['hints'] & PARAMETER_IS_INTEGER: |
|
|
|
continue |
|
|
|
if (paramData['hints'] & PARAMETER_IS_ENABLED) == 0: |
|
|
|
continue |
|
|
|
|
|
|
|
paramName = getParameterShortName(paramInfo['name']) |
|
|
|
|
|
|
|
widget = PixmapDial(self, i) |
|
|
|
widget.setLabel(paramName) |
|
|
|
widget.setMinimum(paramRanges['min']) |
|
|
|
widget.setMaximum(paramRanges['max']) |
|
|
|
setPixmapDialStyle(widget, i, parameterCount, self.fSkinStyle) |
|
|
|
|
|
|
|
index += 1 |
|
|
|
self.fParameterList.append([i, widget]) |
|
|
|
self.w_knobs_left.layout().addWidget(widget) |
|
|
|
|
|
|
|
if self.w_knobs_right is not None and (self.fPluginInfo['hints'] & PLUGIN_CAN_DRYWET) != 0: |
|
|
|
widget = PixmapDial(self, PARAMETER_DRYWET) |
|
|
|
widget.setLabel("Dry/Wet") |
|
|
|
widget.setMinimum(0.0) |
|
|
|
widget.setMaximum(1.0) |
|
|
|
setPixmapDialStyle(widget, PARAMETER_DRYWET, 0, self.fSkinStyle) |
|
|
|
|
|
|
|
self.fParameterList.append([PARAMETER_DRYWET, widget]) |
|
|
|
self.w_knobs_right.layout().addWidget(widget) |
|
|
|
|
|
|
|
if self.w_knobs_right is not None and (self.fPluginInfo['hints'] & PLUGIN_CAN_VOLUME) != 0: |
|
|
|
widget = PixmapDial(self, PARAMETER_VOLUME) |
|
|
|
widget.setLabel("Volume") |
|
|
|
widget.setMinimum(0.0) |
|
|
|
widget.setMaximum(1.27) |
|
|
|
setPixmapDialStyle(widget, PARAMETER_VOLUME, 0, self.fSkinStyle) |
|
|
|
|
|
|
|
self.fParameterList.append([PARAMETER_VOLUME, widget]) |
|
|
|
self.w_knobs_right.layout().addWidget(widget) |
|
|
|
|
|
|
|
for paramIndex, paramWidget in self.fParameterList: |
|
|
|
paramWidget.setContextMenuPolicy(Qt.CustomContextMenu) |
|
|
|
paramWidget.customContextMenuRequested.connect(self.slot_knobCustomMenu) |
|
|
|
paramWidget.realValueChanged.connect(self.slot_parameterValueChanged) |
|
|
|
paramWidget.setValue(self.host.get_internal_parameter_value(self.fPluginId, paramIndex)) |
|
|
|
|
|
|
|
# ------------------------------------------------------------- |
|
|
|
|
|
|
|
self.setWindowTitle(self.fPluginInfo['name']) |
|
|
@@ -1218,113 +1313,6 @@ class PluginSlot_BasicFX(AbstractPluginSlot): |
|
|
|
self.ui = ui_carla_plugin_basic_fx.Ui_PluginWidget() |
|
|
|
self.ui.setupUi(self) |
|
|
|
|
|
|
|
# ------------------------------------------------------------- |
|
|
|
# Set-up parameters |
|
|
|
|
|
|
|
parameterCount = self.host.get_parameter_count(self.fPluginId) |
|
|
|
|
|
|
|
index = 0 |
|
|
|
for i in range(parameterCount): |
|
|
|
if index >= 8: |
|
|
|
break |
|
|
|
|
|
|
|
paramInfo = self.host.get_parameter_info(self.fPluginId, i) |
|
|
|
paramData = self.host.get_parameter_data(self.fPluginId, i) |
|
|
|
paramRanges = self.host.get_parameter_ranges(self.fPluginId, i) |
|
|
|
|
|
|
|
if paramData['type'] != PARAMETER_INPUT: |
|
|
|
continue |
|
|
|
if paramData['hints'] & PARAMETER_IS_BOOLEAN: |
|
|
|
continue |
|
|
|
if paramData['hints'] & PARAMETER_IS_INTEGER: |
|
|
|
continue |
|
|
|
if (paramData['hints'] & PARAMETER_IS_ENABLED) == 0: |
|
|
|
continue |
|
|
|
|
|
|
|
paramName = getParameterShortName(paramInfo['name']) |
|
|
|
|
|
|
|
#if self.fPluginInfo['category'] == PLUGIN_CATEGORY_FILTER: |
|
|
|
#_r = 55 + float(i)/8*200 |
|
|
|
#_g = 255 - float(i)/8*200 |
|
|
|
#_b = 127 - r*2 |
|
|
|
#elif self.fPluginInfo['category'] == PLUGIN_CATEGORY_DELAY: |
|
|
|
#_r = 127 |
|
|
|
#_g = 55 + float(i)/8*200 |
|
|
|
#_b = 255 - float(i)/8*200 |
|
|
|
#elif r < b < g: |
|
|
|
#_r = 55 + float(i)/8*200 |
|
|
|
#_g = 127 |
|
|
|
#_b = 255 - float(i)/8*200 |
|
|
|
#else: |
|
|
|
_r = 255 - float(index)/8*200 |
|
|
|
_g = 55 + float(index)/8*200 |
|
|
|
_b = 0 #(r-40)*4 |
|
|
|
index += 1 |
|
|
|
|
|
|
|
#if _r < 140: _r = 140 |
|
|
|
#if _g < 140: _g = 140 |
|
|
|
#if _b < 140: _b = 140 |
|
|
|
|
|
|
|
widget = PixmapDial(self, i) |
|
|
|
widget.setLabel(paramName) |
|
|
|
widget.setMinimum(paramRanges['min']) |
|
|
|
widget.setMaximum(paramRanges['max']) |
|
|
|
|
|
|
|
if skinStyle == "mod": |
|
|
|
widget.setPixmap(14) |
|
|
|
widget.setCustomPaintMode(PixmapDial.CUSTOM_PAINT_MODE_NO_GRADIENT) |
|
|
|
elif skinStyle == "openav": |
|
|
|
widget.setPixmap(11) |
|
|
|
widget.setCustomPaintMode(PixmapDial.CUSTOM_PAINT_MODE_NO_GRADIENT) |
|
|
|
else: |
|
|
|
widget.setPixmap(3) |
|
|
|
widget.setCustomPaintColor(QColor(_r, _g, _b)) |
|
|
|
widget.setCustomPaintMode(PixmapDial.CUSTOM_PAINT_MODE_COLOR) |
|
|
|
widget.forceWhiteLabelGradientText() |
|
|
|
|
|
|
|
self.fParameterList.append([i, widget]) |
|
|
|
self.ui.w_knobs_left.layout().addWidget(widget) |
|
|
|
|
|
|
|
if self.fPluginInfo['hints'] & PLUGIN_CAN_DRYWET: |
|
|
|
widget = PixmapDial(self, PARAMETER_DRYWET) |
|
|
|
widget.setLabel("Dry/Wet") |
|
|
|
widget.setMinimum(0.0) |
|
|
|
widget.setMaximum(1.0) |
|
|
|
|
|
|
|
if skinStyle == "mod": |
|
|
|
widget.setPixmap(14) |
|
|
|
widget.setCustomPaintMode(PixmapDial.CUSTOM_PAINT_MODE_NO_GRADIENT) |
|
|
|
elif skinStyle == "openav": |
|
|
|
widget.setPixmap(13) |
|
|
|
widget.setCustomPaintMode(PixmapDial.CUSTOM_PAINT_MODE_NO_GRADIENT) |
|
|
|
else: |
|
|
|
widget.setPixmap(3) |
|
|
|
widget.setCustomPaintMode(PixmapDial.CUSTOM_PAINT_MODE_CARLA_WET) |
|
|
|
widget.forceWhiteLabelGradientText() |
|
|
|
|
|
|
|
self.fParameterList.append([PARAMETER_DRYWET, widget]) |
|
|
|
self.ui.w_knobs_right.layout().addWidget(widget) |
|
|
|
|
|
|
|
if self.fPluginInfo['hints'] & PLUGIN_CAN_VOLUME: |
|
|
|
widget = PixmapDial(self, PARAMETER_VOLUME) |
|
|
|
widget.setLabel("Volume") |
|
|
|
widget.setMinimum(0.0) |
|
|
|
widget.setMaximum(1.27) |
|
|
|
|
|
|
|
if skinStyle == "mod": |
|
|
|
widget.setPixmap(14) |
|
|
|
widget.setCustomPaintMode(PixmapDial.CUSTOM_PAINT_MODE_NO_GRADIENT) |
|
|
|
elif skinStyle == "openav": |
|
|
|
widget.setPixmap(12) |
|
|
|
widget.setCustomPaintMode(PixmapDial.CUSTOM_PAINT_MODE_NO_GRADIENT) |
|
|
|
else: |
|
|
|
widget.setPixmap(3) |
|
|
|
widget.setCustomPaintMode(PixmapDial.CUSTOM_PAINT_MODE_CARLA_VOL) |
|
|
|
widget.forceWhiteLabelGradientText() |
|
|
|
|
|
|
|
self.fParameterList.append([PARAMETER_VOLUME, widget]) |
|
|
|
self.ui.w_knobs_right.layout().addWidget(widget) |
|
|
|
|
|
|
|
# ------------------------------------------------------------- |
|
|
|
|
|
|
|
self.b_enable = self.ui.b_enable |
|
|
@@ -1341,6 +1329,9 @@ class PluginSlot_BasicFX(AbstractPluginSlot): |
|
|
|
self.peak_in = self.ui.peak_in |
|
|
|
self.peak_out = self.ui.peak_out |
|
|
|
|
|
|
|
self.w_knobs_left = self.ui.w_knobs_left |
|
|
|
self.w_knobs_right = self.ui.w_knobs_right |
|
|
|
|
|
|
|
self.ready() |
|
|
|
|
|
|
|
self.customContextMenuRequested.connect(self.slot_showDefaultCustomMenu) |
|
|
@@ -1417,47 +1408,6 @@ class PluginSlot_Calf(AbstractPluginSlot): |
|
|
|
self.ui.b_remove.setEnabled(False) |
|
|
|
self.ui.b_remove.setVisible(False) |
|
|
|
|
|
|
|
# ------------------------------------------------------------- |
|
|
|
# Set-up parameters |
|
|
|
|
|
|
|
parameterCount = self.host.get_parameter_count(self.fPluginId) |
|
|
|
|
|
|
|
index = 0 |
|
|
|
limit = 7 if midiCount['ins'] == 0 else 6 |
|
|
|
for i in range(parameterCount): |
|
|
|
if index >= limit: |
|
|
|
break |
|
|
|
|
|
|
|
paramInfo = self.host.get_parameter_info(self.fPluginId, i) |
|
|
|
paramData = self.host.get_parameter_data(self.fPluginId, i) |
|
|
|
paramRanges = self.host.get_parameter_ranges(self.fPluginId, i) |
|
|
|
|
|
|
|
if paramData['type'] != PARAMETER_INPUT: |
|
|
|
continue |
|
|
|
if paramData['hints'] & PARAMETER_IS_BOOLEAN: |
|
|
|
continue |
|
|
|
if paramData['hints'] & PARAMETER_IS_INTEGER: |
|
|
|
continue |
|
|
|
if (paramData['hints'] & PARAMETER_IS_ENABLED) == 0: |
|
|
|
continue |
|
|
|
|
|
|
|
paramName = getParameterShortName(paramInfo['name']) |
|
|
|
|
|
|
|
widget = PixmapDial(self, i) |
|
|
|
widget.setPixmap(7) |
|
|
|
widget.setLabel(paramName) |
|
|
|
widget.setCustomPaintMode(PixmapDial.CUSTOM_PAINT_MODE_NO_GRADIENT) |
|
|
|
widget.setMinimum(paramRanges['min']) |
|
|
|
widget.setMaximum(paramRanges['max']) |
|
|
|
|
|
|
|
if (paramData['hints'] & PARAMETER_IS_ENABLED) == 0: |
|
|
|
widget.setEnabled(False) |
|
|
|
|
|
|
|
self.ui.w_knobs.layout().insertWidget(index, widget) |
|
|
|
index += 1 |
|
|
|
|
|
|
|
self.fParameterList.append([i, widget]) |
|
|
|
|
|
|
|
# ------------------------------------------------------------- |
|
|
|
|
|
|
|
self.b_enable = self.ui.b_enable |
|
|
@@ -1471,6 +1421,8 @@ class PluginSlot_Calf(AbstractPluginSlot): |
|
|
|
self.peak_in = self.ui.peak_in |
|
|
|
self.peak_out = self.ui.peak_out |
|
|
|
|
|
|
|
self.w_knobs_left = self.ui.w_knobs |
|
|
|
|
|
|
|
self.ready() |
|
|
|
|
|
|
|
self.ui.led_midi.setColor(self.ui.led_midi.CALF) |
|
|
@@ -1552,100 +1504,6 @@ class PluginSlot_Nekobi(AbstractPluginSlot): |
|
|
|
|
|
|
|
# ------------------------------------------------------------------------------------------------------------ |
|
|
|
|
|
|
|
class PluginSlot_SF2(AbstractPluginSlot): |
|
|
|
def __init__(self, parent, host, pluginId, skinStyle): |
|
|
|
AbstractPluginSlot.__init__(self, parent, host, pluginId, skinStyle) |
|
|
|
self.ui = ui_carla_plugin_sf2.Ui_PluginWidget() |
|
|
|
self.ui.setupUi(self) |
|
|
|
|
|
|
|
# ------------------------------------------------------------- |
|
|
|
# Set-up parameters |
|
|
|
|
|
|
|
parameterCount = self.host.get_parameter_count(self.fPluginId) |
|
|
|
|
|
|
|
index = 0 |
|
|
|
for i in range(parameterCount): |
|
|
|
if index >= 8: |
|
|
|
break |
|
|
|
|
|
|
|
paramInfo = self.host.get_parameter_info(self.fPluginId, i) |
|
|
|
paramData = self.host.get_parameter_data(self.fPluginId, i) |
|
|
|
paramRanges = self.host.get_parameter_ranges(self.fPluginId, i) |
|
|
|
|
|
|
|
if paramData['type'] != PARAMETER_INPUT: |
|
|
|
continue |
|
|
|
if paramData['hints'] & PARAMETER_IS_BOOLEAN: |
|
|
|
continue |
|
|
|
if paramData['hints'] & PARAMETER_IS_INTEGER: |
|
|
|
continue |
|
|
|
if (paramData['hints'] & PARAMETER_IS_ENABLED) == 0: |
|
|
|
continue |
|
|
|
|
|
|
|
paramName = getParameterShortName(paramInfo['name']) |
|
|
|
|
|
|
|
widget = PixmapDial(self, i) |
|
|
|
widget.setPixmap(3) |
|
|
|
widget.setLabel(paramName) |
|
|
|
widget.setMinimum(paramRanges['min']) |
|
|
|
widget.setMaximum(paramRanges['max']) |
|
|
|
|
|
|
|
if (paramData['hints'] & PARAMETER_IS_ENABLED) == 0: |
|
|
|
widget.setEnabled(False) |
|
|
|
|
|
|
|
self.ui.w_knobs.layout().insertWidget(index, widget) |
|
|
|
index += 1 |
|
|
|
|
|
|
|
self.fParameterList.append([i, widget]) |
|
|
|
|
|
|
|
self.ui.dial_vol.setIndex(PARAMETER_VOLUME) |
|
|
|
self.ui.dial_vol.setPixmap(3) |
|
|
|
self.ui.dial_vol.setLabel("Volume") |
|
|
|
self.ui.dial_vol.setCustomPaintMode(PixmapDial.CUSTOM_PAINT_MODE_CARLA_VOL) |
|
|
|
self.ui.dial_vol.setMinimum(0.0) |
|
|
|
self.ui.dial_vol.setMaximum(1.27) |
|
|
|
self.ui.dial_vol.forceWhiteLabelGradientText() |
|
|
|
self.ui.dial_vol.setVisible(self.fPluginInfo['hints'] & PLUGIN_CAN_VOLUME) |
|
|
|
|
|
|
|
self.fParameterList.append([PARAMETER_VOLUME, self.ui.dial_vol]) |
|
|
|
|
|
|
|
# ------------------------------------------------------------- |
|
|
|
|
|
|
|
self.b_enable = self.ui.b_enable |
|
|
|
self.b_edit = self.ui.b_edit |
|
|
|
|
|
|
|
self.label_name = self.ui.label_name |
|
|
|
|
|
|
|
self.led_control = self.ui.led_control |
|
|
|
self.led_midi = self.ui.led_midi |
|
|
|
self.led_audio_out = self.ui.led_audio_out |
|
|
|
|
|
|
|
self.peak_out = self.ui.peak_out |
|
|
|
|
|
|
|
self.ready() |
|
|
|
|
|
|
|
self.customContextMenuRequested.connect(self.slot_showDefaultCustomMenu) |
|
|
|
|
|
|
|
#------------------------------------------------------------------ |
|
|
|
|
|
|
|
def getFixedHeight(self): |
|
|
|
return 80 |
|
|
|
|
|
|
|
#------------------------------------------------------------------ |
|
|
|
|
|
|
|
def paintEvent(self, event): |
|
|
|
painter = QPainter(self) |
|
|
|
painter.setBrush(Qt.transparent) |
|
|
|
|
|
|
|
painter.setPen(QPen(QColor(42, 42, 42), 1)) |
|
|
|
painter.drawRect(0, 1, self.width()-1, self.height()-3) |
|
|
|
|
|
|
|
painter.setPen(QPen(QColor(60, 60, 60), 1)) |
|
|
|
painter.drawLine(0, 0, self.width(), 0) |
|
|
|
|
|
|
|
AbstractPluginSlot.paintEvent(self, event) |
|
|
|
|
|
|
|
# ------------------------------------------------------------------------------------------------------------ |
|
|
|
|
|
|
|
class PluginSlot_ZynFX(AbstractPluginSlot): |
|
|
|
def __init__(self, parent, host, pluginId, skinStyle): |
|
|
|
AbstractPluginSlot.__init__(self, parent, host, pluginId, skinStyle) |
|
|
|