|
|
@@ -2,7 +2,7 @@ |
|
|
|
# -*- coding: utf-8 -*- |
|
|
|
|
|
|
|
# Carla plugin/slot skin code |
|
|
|
# Copyright (C) 2013 Filipe Coelho <falktx@falktx.com> |
|
|
|
# Copyright (C) 2013-2014 Filipe Coelho <falktx@falktx.com> |
|
|
|
# |
|
|
|
# This program is free software; you can redistribute it and/or |
|
|
|
# modify it under the terms of the GNU General Public License as |
|
|
@@ -32,13 +32,14 @@ from carla_widgets import * |
|
|
|
from pixmapdial import PixmapDial |
|
|
|
|
|
|
|
# ------------------------------------------------------------------------------------------------------------ |
|
|
|
# Abstract plugin slot |
|
|
|
|
|
|
|
class PluginSlot(QFrame): |
|
|
|
class AbstractPluginSlot(QFrame): |
|
|
|
def __init__(self, parent, pluginId): |
|
|
|
QFrame.__init__(self, parent) |
|
|
|
|
|
|
|
# ------------------------------------------------------------- |
|
|
|
# Internal stuff |
|
|
|
# Get plugin info |
|
|
|
|
|
|
|
self.fPluginId = pluginId |
|
|
|
self.fPluginInfo = Carla.host.get_plugin_info(self.fPluginId) if Carla.host is not None else gFakePluginInfo |
|
|
@@ -50,15 +51,22 @@ class PluginSlot(QFrame): |
|
|
|
self.fPluginInfo['copyright'] = charPtrToString(self.fPluginInfo['copyright']) |
|
|
|
self.fPluginInfo['iconName'] = charPtrToString(self.fPluginInfo['iconName']) |
|
|
|
|
|
|
|
self.fParameterIconTimer = ICON_STATE_NULL |
|
|
|
|
|
|
|
if not Carla.isLocal: |
|
|
|
self.fPluginInfo['hints'] &= ~PLUGIN_HAS_CUSTOM_UI |
|
|
|
|
|
|
|
# ------------------------------------------------------------- |
|
|
|
# Internal stuff |
|
|
|
|
|
|
|
self.fIsActive = False |
|
|
|
|
|
|
|
self.fLastGreenLedState = False |
|
|
|
self.fLastBlueLedState = False |
|
|
|
|
|
|
|
self.fParameterIconTimer = ICON_STATE_NULL |
|
|
|
|
|
|
|
if Carla.processMode == ENGINE_PROCESS_MODE_CONTINUOUS_RACK or Carla.host is None: |
|
|
|
self.fPeaksInputCount = 2 |
|
|
|
self.fPeaksOutputCount = 2 |
|
|
|
|
|
|
|
else: |
|
|
|
audioCountInfo = Carla.host.get_audio_port_count_info(self.fPluginId) |
|
|
|
|
|
|
@@ -77,6 +85,68 @@ class PluginSlot(QFrame): |
|
|
|
self.fEditDialog = PluginEdit(self, self.fPluginId) |
|
|
|
self.fEditDialog.hide() |
|
|
|
|
|
|
|
# ------------------------------------------------------------- |
|
|
|
# Set-up common widgets (as none) |
|
|
|
|
|
|
|
self.b_enable = None |
|
|
|
self.b_gui = None |
|
|
|
self.b_edit = None |
|
|
|
self.b_remove = None |
|
|
|
|
|
|
|
self.label_name = None |
|
|
|
self.led_control = None |
|
|
|
self.led_midi = None |
|
|
|
self.led_audio_in = None |
|
|
|
self.led_audio_out = None |
|
|
|
|
|
|
|
self.peak_in = None |
|
|
|
self.peak_out = None |
|
|
|
|
|
|
|
#------------------------------------------------------------------ |
|
|
|
|
|
|
|
def ready(self): |
|
|
|
if self.b_enable is not None: |
|
|
|
self.b_enable.clicked.connect(self.slot_enableClicked) |
|
|
|
|
|
|
|
if self.b_gui is not None: |
|
|
|
self.b_gui.clicked.connect(self.slot_showCustomUi) |
|
|
|
self.b_gui.setEnabled(bool(self.fPluginInfo['hints'] & PLUGIN_HAS_CUSTOM_UI)) |
|
|
|
|
|
|
|
if self.b_edit is not None: |
|
|
|
self.b_edit.clicked.connect(self.slot_showEditDialog) |
|
|
|
|
|
|
|
if self.b_remove is not None: |
|
|
|
self.b_remove.clicked.connect(self.slot_removePlugin) |
|
|
|
|
|
|
|
if self.label_name is not None: |
|
|
|
self.label_name.setText(self.fPluginInfo['name']) |
|
|
|
|
|
|
|
if self.led_control is not None: |
|
|
|
self.led_control.setColor(self.led_control.YELLOW) |
|
|
|
self.led_control.setEnabled(False) |
|
|
|
|
|
|
|
if self.led_midi is not None: |
|
|
|
self.led_midi.setColor(self.led_midi.RED) |
|
|
|
self.led_midi.setEnabled(False) |
|
|
|
|
|
|
|
if self.led_audio_in is not None: |
|
|
|
self.led_audio_in.setColor(self.led_audio_in.GREEN) |
|
|
|
self.led_audio_in.setEnabled(False) |
|
|
|
|
|
|
|
if self.led_audio_out is not None: |
|
|
|
self.led_audio_out.setColor(self.led_audio_out.BLUE) |
|
|
|
self.led_audio_out.setEnabled(False) |
|
|
|
|
|
|
|
if self.peak_in is not None: |
|
|
|
self.peak_in.setColor(self.peak_in.GREEN) |
|
|
|
self.peak_in.setChannels(self.fPeaksInputCount) |
|
|
|
self.peak_in.setOrientation(self.peak_in.HORIZONTAL) |
|
|
|
|
|
|
|
if self.peak_out is not None: |
|
|
|
self.peak_out.setColor(self.peak_in.BLUE) |
|
|
|
self.peak_out.setChannels(self.fPeaksOutputCount) |
|
|
|
self.peak_out.setOrientation(self.peak_out.HORIZONTAL) |
|
|
|
|
|
|
|
#------------------------------------------------------------------ |
|
|
|
|
|
|
|
def getFixedHeight(self): |
|
|
@@ -90,6 +160,9 @@ class PluginSlot(QFrame): |
|
|
|
def recheckPluginHints(self, hints): |
|
|
|
self.fPluginInfo['hints'] = hints |
|
|
|
|
|
|
|
if self.b_gui is not None: |
|
|
|
self.b_gui.setEnabled(bool(hints & PLUGIN_HAS_CUSTOM_UI)) |
|
|
|
|
|
|
|
def setId(self, idx): |
|
|
|
self.fPluginId = idx |
|
|
|
self.fEditDialog.setId(idx) |
|
|
@@ -97,9 +170,14 @@ class PluginSlot(QFrame): |
|
|
|
def setName(self, name): |
|
|
|
self.fEditDialog.setName(name) |
|
|
|
|
|
|
|
if self.label_name is not None: |
|
|
|
self.label_name.setText(name) |
|
|
|
|
|
|
|
#------------------------------------------------------------------ |
|
|
|
|
|
|
|
def setActive(self, active, sendGui=False, sendCallback=True): |
|
|
|
self.fIsActive = active |
|
|
|
|
|
|
|
if sendGui: self.activeChanged(active) |
|
|
|
if sendCallback: Carla.host.set_active(self.fPluginId, active) |
|
|
|
|
|
|
@@ -112,7 +190,7 @@ class PluginSlot(QFrame): |
|
|
|
if parameterId <= PARAMETER_MAX or parameterId >= PARAMETER_NULL: |
|
|
|
return |
|
|
|
|
|
|
|
if parameterId == PARAMETER_ACTIVE: |
|
|
|
elif parameterId == PARAMETER_ACTIVE: |
|
|
|
return self.setActive(bool(value), True, True) |
|
|
|
|
|
|
|
elif parameterId == PARAMETER_DRYWET: |
|
|
@@ -182,19 +260,50 @@ class PluginSlot(QFrame): |
|
|
|
#------------------------------------------------------------------ |
|
|
|
|
|
|
|
def activeChanged(self, onOff): |
|
|
|
pass |
|
|
|
self.fIsActive = onOff |
|
|
|
|
|
|
|
if self.b_enable is None: |
|
|
|
return |
|
|
|
|
|
|
|
self.b_enable.blockSignals(True) |
|
|
|
self.b_enable.setChecked(onOff) |
|
|
|
self.b_enable.blockSignals(False) |
|
|
|
|
|
|
|
def editDialogChanged(self, visible): |
|
|
|
pass |
|
|
|
if self.b_edit is None: |
|
|
|
return |
|
|
|
|
|
|
|
self.b_edit.blockSignals(True) |
|
|
|
self.b_edit.setChecked(visible) |
|
|
|
self.b_edit.blockSignals(False) |
|
|
|
|
|
|
|
def customUiStateChanged(self, state): |
|
|
|
pass |
|
|
|
if self.b_gui is None: |
|
|
|
return |
|
|
|
|
|
|
|
self.b_gui.blockSignals(True) |
|
|
|
if state == 0: |
|
|
|
self.b_gui.setChecked(False) |
|
|
|
self.b_gui.setEnabled(True) |
|
|
|
elif state == 1: |
|
|
|
self.b_gui.setChecked(True) |
|
|
|
self.b_gui.setEnabled(True) |
|
|
|
elif state == -1: |
|
|
|
self.b_gui.setChecked(False) |
|
|
|
self.b_gui.setEnabled(False) |
|
|
|
self.b_gui.blockSignals(False) |
|
|
|
|
|
|
|
def parameterActivityChanged(self, onOff): |
|
|
|
pass |
|
|
|
if self.led_control is None: |
|
|
|
return |
|
|
|
|
|
|
|
self.led_control.setChecked(onOff) |
|
|
|
|
|
|
|
def midiActivityChanged(self, onOff): |
|
|
|
pass |
|
|
|
if self.led_midi is None: |
|
|
|
return |
|
|
|
|
|
|
|
self.led_midi.setChecked(onOff) |
|
|
|
|
|
|
|
def parameterValueChanged(self, parameterId, value): |
|
|
|
pass |
|
|
@@ -214,7 +323,49 @@ class PluginSlot(QFrame): |
|
|
|
#------------------------------------------------------------------ |
|
|
|
|
|
|
|
def idleFast(self): |
|
|
|
pass |
|
|
|
# Input peaks |
|
|
|
if self.fPeaksInputCount > 0: |
|
|
|
if self.fPeaksInputCount > 1: |
|
|
|
peak1 = Carla.host.get_input_peak_value(self.fPluginId, True) |
|
|
|
peak2 = Carla.host.get_input_peak_value(self.fPluginId, False) |
|
|
|
ledState = bool(peak1 != 0.0 or peak2 != 0.0) |
|
|
|
|
|
|
|
if self.peak_in is not None: |
|
|
|
self.peak_in.displayMeter(1, peak1) |
|
|
|
self.peak_in.displayMeter(2, peak2) |
|
|
|
|
|
|
|
else: |
|
|
|
peak = Carla.host.get_input_peak_value(self.fPluginId, True) |
|
|
|
ledState = bool(peak != 0.0) |
|
|
|
|
|
|
|
if self.peak_in is not None: |
|
|
|
self.peak_in.displayMeter(1, peak) |
|
|
|
|
|
|
|
if self.fLastGreenLedState != ledState and self.led_audio_in is not None: |
|
|
|
self.fLastGreenLedState = ledState |
|
|
|
self.led_audio_in.setChecked(ledState) |
|
|
|
|
|
|
|
# Output peaks |
|
|
|
if self.fPeaksOutputCount > 0: |
|
|
|
if self.fPeaksOutputCount > 1: |
|
|
|
peak1 = Carla.host.get_output_peak_value(self.fPluginId, True) |
|
|
|
peak2 = Carla.host.get_output_peak_value(self.fPluginId, False) |
|
|
|
ledState = bool(peak1 != 0.0 or peak2 != 0.0) |
|
|
|
|
|
|
|
if self.peak_out is not None: |
|
|
|
self.peak_out.displayMeter(1, peak1) |
|
|
|
self.peak_out.displayMeter(2, peak2) |
|
|
|
|
|
|
|
else: |
|
|
|
peak = Carla.host.get_output_peak_value(self.fPluginId, True) |
|
|
|
ledState = bool(peak != 0.0) |
|
|
|
|
|
|
|
if self.peak_out is not None: |
|
|
|
self.peak_out.displayMeter(1, peak) |
|
|
|
|
|
|
|
if self.fLastBlueLedState != ledState and self.led_audio_out is not None: |
|
|
|
self.fLastBlueLedState = ledState |
|
|
|
self.led_audio_out.setChecked(ledState) |
|
|
|
|
|
|
|
def idleSlow(self): |
|
|
|
if self.fParameterIconTimer == ICON_STATE_ON: |
|
|
@@ -294,6 +445,16 @@ class PluginSlot(QFrame): |
|
|
|
|
|
|
|
#------------------------------------------------------------------ |
|
|
|
|
|
|
|
@pyqtSlot(bool) |
|
|
|
def slot_enableClicked(self, yesNo): |
|
|
|
self.setActive(yesNo, False, True) |
|
|
|
|
|
|
|
@pyqtSlot() |
|
|
|
def slot_showDefaultCustomMenu(self): |
|
|
|
self.showDefaultMenu(self.fIsActive, self.b_edit, self.b_gui) |
|
|
|
|
|
|
|
#------------------------------------------------------------------ |
|
|
|
|
|
|
|
@pyqtSlot(bool) |
|
|
|
def slot_showCustomUi(self, show): |
|
|
|
Carla.host.show_custom_ui(self.fPluginId, show) |
|
|
@@ -308,18 +469,15 @@ class PluginSlot(QFrame): |
|
|
|
|
|
|
|
# ------------------------------------------------------------------------------------------------------------ |
|
|
|
|
|
|
|
class PluginSlot_Default(PluginSlot): |
|
|
|
class PluginSlot_Default(AbstractPluginSlot): |
|
|
|
def __init__(self, parent, pluginId): |
|
|
|
PluginSlot.__init__(self, parent, pluginId) |
|
|
|
AbstractPluginSlot.__init__(self, parent, pluginId) |
|
|
|
self.ui = ui_carla_plugin_default.Ui_PluginWidget() |
|
|
|
self.ui.setupUi(self) |
|
|
|
|
|
|
|
# ------------------------------------------------------------- |
|
|
|
# Internal stuff |
|
|
|
|
|
|
|
self.fLastGreenLedState = False |
|
|
|
self.fLastBlueLedState = False |
|
|
|
|
|
|
|
if self.palette().window().color().lightness() > 100: |
|
|
|
# Light background |
|
|
|
labelColor = "333" |
|
|
@@ -367,38 +525,24 @@ class PluginSlot_Default(PluginSlot): |
|
|
|
else: |
|
|
|
self.ui.b_gui.setPixmaps(":/bitmaps/button_gui.png", ":/bitmaps/button_gui_down.png", ":/bitmaps/button_gui_hover.png") |
|
|
|
|
|
|
|
self.ui.b_gui.setEnabled((self.fPluginInfo['hints'] & PLUGIN_HAS_CUSTOM_UI) != 0) |
|
|
|
|
|
|
|
self.ui.led_control.setColor(self.ui.led_control.YELLOW) |
|
|
|
self.ui.led_control.setEnabled(False) |
|
|
|
|
|
|
|
self.ui.led_midi.setColor(self.ui.led_midi.RED) |
|
|
|
self.ui.led_midi.setEnabled(False) |
|
|
|
|
|
|
|
self.ui.led_audio_in.setColor(self.ui.led_audio_in.GREEN) |
|
|
|
self.ui.led_audio_in.setEnabled(False) |
|
|
|
|
|
|
|
self.ui.led_audio_out.setColor(self.ui.led_audio_out.BLUE) |
|
|
|
self.ui.led_audio_out.setEnabled(False) |
|
|
|
|
|
|
|
self.ui.peak_in.setColor(self.ui.peak_in.GREEN) |
|
|
|
self.ui.peak_in.setChannels(self.fPeaksInputCount) |
|
|
|
self.ui.peak_in.setOrientation(self.ui.peak_in.HORIZONTAL) |
|
|
|
# ------------------------------------------------------------- |
|
|
|
|
|
|
|
self.ui.peak_out.setColor(self.ui.peak_in.BLUE) |
|
|
|
self.ui.peak_out.setChannels(self.fPeaksOutputCount) |
|
|
|
self.ui.peak_out.setOrientation(self.ui.peak_out.HORIZONTAL) |
|
|
|
self.b_enable = self.ui.b_enable |
|
|
|
self.b_gui = self.ui.b_gui |
|
|
|
self.b_edit = self.ui.b_edit |
|
|
|
|
|
|
|
self.ui.label_name.setText(self.fPluginInfo['name']) |
|
|
|
self.label_name = self.ui.label_name |
|
|
|
self.led_control = self.ui.led_control |
|
|
|
self.led_midi = self.ui.led_midi |
|
|
|
self.led_audio_in = self.ui.led_audio_in |
|
|
|
self.led_audio_out = self.ui.led_audio_out |
|
|
|
|
|
|
|
# ------------------------------------------------------------- |
|
|
|
# Set-up connections |
|
|
|
self.peak_in = self.ui.peak_in |
|
|
|
self.peak_out = self.ui.peak_out |
|
|
|
|
|
|
|
self.ui.b_enable.clicked.connect(self.slot_enableClicked) |
|
|
|
self.ui.b_gui.clicked.connect(self.slot_showCustomUi) |
|
|
|
self.ui.b_edit.clicked.connect(self.slot_showEditDialog) |
|
|
|
self.ready() |
|
|
|
|
|
|
|
self.customContextMenuRequested.connect(self.slot_showCustomMenu) |
|
|
|
self.customContextMenuRequested.connect(self.slot_showDefaultCustomMenu) |
|
|
|
|
|
|
|
#------------------------------------------------------------------ |
|
|
|
|
|
|
@@ -407,100 +551,6 @@ class PluginSlot_Default(PluginSlot): |
|
|
|
|
|
|
|
#------------------------------------------------------------------ |
|
|
|
|
|
|
|
def recheckPluginHints(self, hints): |
|
|
|
self.ui.b_gui.setEnabled(hints & PLUGIN_HAS_CUSTOM_UI) |
|
|
|
PluginSlot.recheckPluginHints(self, hints) |
|
|
|
|
|
|
|
def setName(self, name): |
|
|
|
self.ui.label_name.setText(name) |
|
|
|
PluginSlot.setName(self, name) |
|
|
|
|
|
|
|
#------------------------------------------------------------------ |
|
|
|
|
|
|
|
def activeChanged(self, onOff): |
|
|
|
self.ui.b_enable.blockSignals(True) |
|
|
|
self.ui.b_enable.setChecked(onOff) |
|
|
|
self.ui.b_enable.blockSignals(False) |
|
|
|
|
|
|
|
def editDialogChanged(self, visible): |
|
|
|
self.ui.b_edit.blockSignals(True) |
|
|
|
self.ui.b_edit.setChecked(visible) |
|
|
|
self.ui.b_edit.blockSignals(False) |
|
|
|
|
|
|
|
def customUiStateChanged(self, state): |
|
|
|
self.ui.b_gui.blockSignals(True) |
|
|
|
if state == 0: |
|
|
|
self.ui.b_gui.setChecked(False) |
|
|
|
self.ui.b_gui.setEnabled(True) |
|
|
|
elif state == 1: |
|
|
|
self.ui.b_gui.setChecked(True) |
|
|
|
self.ui.b_gui.setEnabled(True) |
|
|
|
elif state == -1: |
|
|
|
self.ui.b_gui.setChecked(False) |
|
|
|
self.ui.b_gui.setEnabled(False) |
|
|
|
self.ui.b_gui.blockSignals(False) |
|
|
|
|
|
|
|
def parameterActivityChanged(self, onOff): |
|
|
|
self.ui.led_control.setChecked(onOff) |
|
|
|
|
|
|
|
def midiActivityChanged(self, onOff): |
|
|
|
self.ui.led_midi.setChecked(onOff) |
|
|
|
|
|
|
|
#------------------------------------------------------------------ |
|
|
|
|
|
|
|
def idleFast(self): |
|
|
|
# Input peaks |
|
|
|
if self.fPeaksInputCount > 0: |
|
|
|
if self.fPeaksInputCount > 1: |
|
|
|
peak1 = Carla.host.get_input_peak_value(self.fPluginId, True) |
|
|
|
peak2 = Carla.host.get_input_peak_value(self.fPluginId, False) |
|
|
|
ledState = bool(peak1 != 0.0 or peak2 != 0.0) |
|
|
|
|
|
|
|
self.ui.peak_in.displayMeter(1, peak1) |
|
|
|
self.ui.peak_in.displayMeter(2, peak2) |
|
|
|
|
|
|
|
else: |
|
|
|
peak = Carla.host.get_input_peak_value(self.fPluginId, True) |
|
|
|
ledState = bool(peak != 0.0) |
|
|
|
|
|
|
|
self.ui.peak_in.displayMeter(1, peak) |
|
|
|
|
|
|
|
if self.fLastGreenLedState != ledState: |
|
|
|
self.fLastGreenLedState = ledState |
|
|
|
self.ui.led_audio_in.setChecked(ledState) |
|
|
|
|
|
|
|
# Output peaks |
|
|
|
if self.fPeaksOutputCount > 0: |
|
|
|
if self.fPeaksOutputCount > 1: |
|
|
|
peak1 = Carla.host.get_output_peak_value(self.fPluginId, True) |
|
|
|
peak2 = Carla.host.get_output_peak_value(self.fPluginId, False) |
|
|
|
ledState = bool(peak1 != 0.0 or peak2 != 0.0) |
|
|
|
|
|
|
|
self.ui.peak_out.displayMeter(1, peak1) |
|
|
|
self.ui.peak_out.displayMeter(2, peak2) |
|
|
|
|
|
|
|
else: |
|
|
|
peak = Carla.host.get_output_peak_value(self.fPluginId, True) |
|
|
|
ledState = bool(peak != 0.0) |
|
|
|
|
|
|
|
self.ui.peak_out.displayMeter(1, peak) |
|
|
|
|
|
|
|
if self.fLastBlueLedState != ledState: |
|
|
|
self.fLastBlueLedState = ledState |
|
|
|
self.ui.led_audio_out.setChecked(ledState) |
|
|
|
|
|
|
|
#------------------------------------------------------------------ |
|
|
|
|
|
|
|
@pyqtSlot(bool) |
|
|
|
def slot_enableClicked(self, yesNo): |
|
|
|
self.setActive(yesNo, False, True) |
|
|
|
|
|
|
|
@pyqtSlot() |
|
|
|
def slot_showCustomMenu(self): |
|
|
|
self.showDefaultMenu(self.ui.b_enable.isChecked(), self.ui.b_edit, self.ui.b_gui) |
|
|
|
|
|
|
|
#------------------------------------------------------------------ |
|
|
|
|
|
|
|
def paintEvent(self, event): |
|
|
|
painter = QPainter(self) |
|
|
|
painter.save() |
|
|
@@ -544,7 +594,7 @@ class PluginSlot_Default(PluginSlot): |
|
|
|
painter.drawLine(0, height-1, width, height-1) |
|
|
|
|
|
|
|
painter.restore() |
|
|
|
PluginSlot.paintEvent(self, event) |
|
|
|
AbstractPluginSlot.paintEvent(self, event) |
|
|
|
|
|
|
|
# ------------------------------------------------------------------------------------------------------------ |
|
|
|
|
|
|
@@ -557,7 +607,7 @@ class PluginSlot_Pixmap(PluginSlot_Default): |
|
|
|
|
|
|
|
self.setStyleSheet(""" |
|
|
|
QFrame#PluginWidget { |
|
|
|
background-image: url(:/bitmaps/background_calf.png); |
|
|
|
background-image: url(:/bitmaps/background_zynfx.png); |
|
|
|
background-repeat: repeat-xy; |
|
|
|
}""") |
|
|
|
|
|
|
@@ -565,21 +615,19 @@ class PluginSlot_Pixmap(PluginSlot_Default): |
|
|
|
|
|
|
|
def paintEvent(self, event): |
|
|
|
# skip parent paiting |
|
|
|
PluginSlot.paintEvent(self, event) |
|
|
|
AbstractPluginSlot.paintEvent(self, event) |
|
|
|
|
|
|
|
# ------------------------------------------------------------------------------------------------------------ |
|
|
|
|
|
|
|
class PluginSlot_Calf(PluginSlot): |
|
|
|
class PluginSlot_Calf(AbstractPluginSlot): |
|
|
|
def __init__(self, parent, pluginId): |
|
|
|
PluginSlot.__init__(self, parent, pluginId) |
|
|
|
AbstractPluginSlot.__init__(self, parent, pluginId) |
|
|
|
self.ui = ui_carla_plugin_calf.Ui_PluginWidget() |
|
|
|
self.ui.setupUi(self) |
|
|
|
|
|
|
|
# ------------------------------------------------------------- |
|
|
|
# Internal stuff |
|
|
|
|
|
|
|
self.fIsActive = False |
|
|
|
|
|
|
|
self.fButtonFont = QFont() |
|
|
|
self.fButtonFont.setBold(False) |
|
|
|
self.fButtonFont.setPointSize(9) |
|
|
@@ -607,31 +655,17 @@ class PluginSlot_Calf(PluginSlot): |
|
|
|
self.ui.b_remove.setTopText(self.tr("Remove"), self.fButtonColorOn, self.fButtonFont) |
|
|
|
|
|
|
|
if self.fPluginInfo['hints'] & PLUGIN_HAS_CUSTOM_UI: |
|
|
|
self.ui.b_gui.setEnabled(True) |
|
|
|
self.ui.b_gui.setTopText(self.tr("GUI"), self.fButtonColorOn, self.fButtonFont) |
|
|
|
else: |
|
|
|
self.ui.b_gui.setEnabled(False) |
|
|
|
self.ui.b_gui.setTopText(self.tr("GUI"), self.fButtonColorOff, self.fButtonFont) |
|
|
|
|
|
|
|
self.ui.led_midi.setColor(self.ui.led_midi.CALF) |
|
|
|
self.ui.led_midi.setEnabled(False) |
|
|
|
|
|
|
|
self.ui.peak_in.setColor(self.ui.peak_in.GREEN) |
|
|
|
self.ui.peak_in.setChannels(self.fPeaksInputCount) |
|
|
|
self.ui.peak_in.setOrientation(self.ui.peak_in.HORIZONTAL) |
|
|
|
|
|
|
|
self.ui.peak_out.setColor(self.ui.peak_in.BLUE) |
|
|
|
self.ui.peak_out.setChannels(self.fPeaksOutputCount) |
|
|
|
self.ui.peak_out.setOrientation(self.ui.peak_out.HORIZONTAL) |
|
|
|
|
|
|
|
labelFont = self.ui.label_name.font() |
|
|
|
labelFont.setBold(True) |
|
|
|
labelFont.setPointSize(labelFont.pointSize()+3) |
|
|
|
self.ui.label_name.setFont(labelFont) |
|
|
|
self.ui.label_name.setText(self.fPluginInfo['name']) |
|
|
|
|
|
|
|
audioCount = Carla.host.get_audio_port_count_info(self.fPluginId) |
|
|
|
midiCount = Carla.host.get_midi_port_count_info(self.fPluginId) |
|
|
|
audioCount = Carla.host.get_audio_port_count_info(self.fPluginId) if Carla.host is not None else {'ins': 2, 'outs': 2 } |
|
|
|
midiCount = Carla.host.get_midi_port_count_info(self.fPluginId) if Carla.host is not None else {'ins': 1, 'outs': 0 } |
|
|
|
|
|
|
|
if audioCount['ins'] == 0: |
|
|
|
self.ui.label_audio_in.hide() |
|
|
@@ -649,13 +683,20 @@ class PluginSlot_Calf(PluginSlot): |
|
|
|
self.ui.led_midi.hide() |
|
|
|
|
|
|
|
# ------------------------------------------------------------- |
|
|
|
# Set-up connections |
|
|
|
|
|
|
|
self.ui.b_gui.clicked.connect(self.slot_showCustomUi) |
|
|
|
self.ui.b_edit.clicked.connect(self.slot_showEditDialog) |
|
|
|
self.ui.b_remove.clicked.connect(self.slot_removePlugin) |
|
|
|
self.b_gui = self.ui.b_gui |
|
|
|
self.b_edit = self.ui.b_edit |
|
|
|
self.b_remove = self.ui.b_remove |
|
|
|
|
|
|
|
self.label_name = self.ui.label_name |
|
|
|
self.led_midi = self.ui.led_midi |
|
|
|
|
|
|
|
self.customContextMenuRequested.connect(self.slot_showCustomMenu) |
|
|
|
self.peak_in = self.ui.peak_in |
|
|
|
self.peak_out = self.ui.peak_out |
|
|
|
|
|
|
|
self.ready() |
|
|
|
|
|
|
|
self.customContextMenuRequested.connect(self.slot_showDefaultCustomMenu) |
|
|
|
|
|
|
|
#------------------------------------------------------------------ |
|
|
|
|
|
|
@@ -666,84 +707,17 @@ class PluginSlot_Calf(PluginSlot): |
|
|
|
|
|
|
|
def recheckPluginHints(self, hints): |
|
|
|
if hints & PLUGIN_HAS_CUSTOM_UI: |
|
|
|
self.ui.b_gui.setEnabled(True) |
|
|
|
self.ui.b_gui.setTopText(self.tr("GUI"), self.fButtonColorOn, self.fButtonFont) |
|
|
|
else: |
|
|
|
self.ui.b_gui.setEnabled(False) |
|
|
|
self.ui.b_gui.setTopText(self.tr("GUI"), self.fButtonColorOff, self.fButtonFont) |
|
|
|
|
|
|
|
PluginSlot.recheckPluginHints(self, hints) |
|
|
|
|
|
|
|
def setName(self, name): |
|
|
|
self.ui.label_name.setText(name) |
|
|
|
PluginSlot.setName(self, name) |
|
|
|
|
|
|
|
#------------------------------------------------------------------ |
|
|
|
|
|
|
|
def activeChanged(self, onOff): |
|
|
|
self.fIsActive = onOff |
|
|
|
|
|
|
|
def editDialogChanged(self, visible): |
|
|
|
self.ui.b_edit.blockSignals(True) |
|
|
|
self.ui.b_edit.setChecked(visible) |
|
|
|
self.ui.b_edit.blockSignals(False) |
|
|
|
|
|
|
|
def customUiStateChanged(self, state): |
|
|
|
self.ui.b_gui.blockSignals(True) |
|
|
|
if state == 0: |
|
|
|
self.ui.b_gui.setChecked(False) |
|
|
|
self.ui.b_gui.setEnabled(True) |
|
|
|
elif state == 1: |
|
|
|
self.ui.b_gui.setChecked(True) |
|
|
|
self.ui.b_gui.setEnabled(True) |
|
|
|
elif state == -1: |
|
|
|
self.ui.b_gui.setChecked(False) |
|
|
|
self.ui.b_gui.setEnabled(False) |
|
|
|
self.ui.b_gui.blockSignals(False) |
|
|
|
|
|
|
|
def midiActivityChanged(self, onOff): |
|
|
|
self.ui.led_midi.setChecked(onOff) |
|
|
|
|
|
|
|
#------------------------------------------------------------------ |
|
|
|
|
|
|
|
def idleFast(self): |
|
|
|
# Input peaks |
|
|
|
if self.fPeaksInputCount > 0: |
|
|
|
if self.fPeaksInputCount > 1: |
|
|
|
peak1 = Carla.host.get_input_peak_value(self.fPluginId, True) |
|
|
|
peak2 = Carla.host.get_input_peak_value(self.fPluginId, False) |
|
|
|
self.ui.peak_in.displayMeter(1, peak1) |
|
|
|
self.ui.peak_in.displayMeter(2, peak2) |
|
|
|
else: |
|
|
|
peak = Carla.host.get_input_peak_value(self.fPluginId, True) |
|
|
|
self.ui.peak_in.displayMeter(1, peak) |
|
|
|
|
|
|
|
# Output peaks |
|
|
|
if self.fPeaksOutputCount > 0: |
|
|
|
if self.fPeaksOutputCount > 1: |
|
|
|
peak1 = Carla.host.get_output_peak_value(self.fPluginId, True) |
|
|
|
peak2 = Carla.host.get_output_peak_value(self.fPluginId, False) |
|
|
|
self.ui.peak_out.displayMeter(1, peak1) |
|
|
|
self.ui.peak_out.displayMeter(2, peak2) |
|
|
|
else: |
|
|
|
peak = Carla.host.get_output_peak_value(self.fPluginId, True) |
|
|
|
self.ui.peak_out.displayMeter(1, peak) |
|
|
|
|
|
|
|
#------------------------------------------------------------------ |
|
|
|
|
|
|
|
@pyqtSlot(bool) |
|
|
|
def slot_enableClicked(self, yesNo): |
|
|
|
self.fIsActive = yesNo |
|
|
|
|
|
|
|
@pyqtSlot() |
|
|
|
def slot_showCustomMenu(self): |
|
|
|
self.showDefaultMenu(self.fIsActive, self.ui.b_edit, self.ui.b_gui) |
|
|
|
AbstractPluginSlot.recheckPluginHints(self, hints) |
|
|
|
|
|
|
|
# ------------------------------------------------------------------------------------------------------------ |
|
|
|
|
|
|
|
class PluginSlot_ZynFX(PluginSlot): |
|
|
|
class PluginSlot_ZynFX(AbstractPluginSlot): |
|
|
|
def __init__(self, parent, pluginId): |
|
|
|
PluginSlot.__init__(self, parent, pluginId) |
|
|
|
AbstractPluginSlot.__init__(self, parent, pluginId) |
|
|
|
self.ui = ui_carla_plugin_zynfx.Ui_PluginWidget() |
|
|
|
self.ui.setupUi(self) |
|
|
|
|
|
|
@@ -759,24 +733,12 @@ class PluginSlot_ZynFX(PluginSlot): |
|
|
|
self.ui.b_enable.setPixmaps(":/bitmaps/button_off.png", ":/bitmaps/button_on.png", ":/bitmaps/button_off.png") |
|
|
|
self.ui.b_edit.setPixmaps(":/bitmaps/button_edit.png", ":/bitmaps/button_edit_down.png", ":/bitmaps/button_edit_hover.png") |
|
|
|
|
|
|
|
self.ui.peak_in.setColor(self.ui.peak_in.GREEN) |
|
|
|
self.ui.peak_in.setChannels(self.fPeaksInputCount) |
|
|
|
self.ui.peak_in.setLinesEnabled(False) |
|
|
|
self.ui.peak_in.setOrientation(self.ui.peak_in.VERTICAL) |
|
|
|
|
|
|
|
self.ui.peak_out.setColor(self.ui.peak_in.BLUE) |
|
|
|
self.ui.peak_out.setChannels(self.fPeaksOutputCount) |
|
|
|
self.ui.peak_out.setLinesEnabled(False) |
|
|
|
self.ui.peak_out.setOrientation(self.ui.peak_out.VERTICAL) |
|
|
|
|
|
|
|
self.ui.label_name.setText(self.fPluginInfo['name']) |
|
|
|
|
|
|
|
# ------------------------------------------------------------- |
|
|
|
# Set-up parameters |
|
|
|
|
|
|
|
self.fParameterList = [] # index, widget |
|
|
|
|
|
|
|
parameterCount = Carla.host.get_parameter_count(self.fPluginId) |
|
|
|
parameterCount = Carla.host.get_parameter_count(self.fPluginId) if Carla.host is not None else 0 |
|
|
|
|
|
|
|
index = 0 |
|
|
|
for i in range(parameterCount): |
|
|
@@ -909,47 +871,40 @@ class PluginSlot_ZynFX(PluginSlot): |
|
|
|
self.ui.label_presets.setVisible(False) |
|
|
|
|
|
|
|
# ------------------------------------------------------------- |
|
|
|
# Set-up connections |
|
|
|
|
|
|
|
self.ui.b_enable.clicked.connect(self.slot_enableClicked) |
|
|
|
self.ui.b_edit.clicked.connect(self.slot_showEditDialog) |
|
|
|
self.ui.cb_presets.currentIndexChanged.connect(self.slot_presetChanged) |
|
|
|
self.b_enable = self.ui.b_enable |
|
|
|
self.b_edit = self.ui.b_edit |
|
|
|
|
|
|
|
self.customContextMenuRequested.connect(self.slot_showCustomMenu) |
|
|
|
self.label_name = self.ui.label_name |
|
|
|
|
|
|
|
#------------------------------------------------------------------ |
|
|
|
self.peak_in = self.ui.peak_in |
|
|
|
self.peak_out = self.ui.peak_out |
|
|
|
|
|
|
|
def getFixedHeight(self): |
|
|
|
return 70 |
|
|
|
self.ready() |
|
|
|
|
|
|
|
self.peak_in.setOrientation(self.peak_in.VERTICAL) |
|
|
|
self.peak_out.setOrientation(self.peak_out.VERTICAL) |
|
|
|
|
|
|
|
self.customContextMenuRequested.connect(self.slot_showDefaultCustomMenu) |
|
|
|
self.ui.cb_presets.currentIndexChanged.connect(self.slot_presetChanged) |
|
|
|
|
|
|
|
#------------------------------------------------------------------ |
|
|
|
|
|
|
|
def setName(self, name): |
|
|
|
self.ui.label_name.setText(name) |
|
|
|
PluginSlot.setName(self, name) |
|
|
|
def getFixedHeight(self): |
|
|
|
return 70 |
|
|
|
|
|
|
|
#------------------------------------------------------------------ |
|
|
|
|
|
|
|
def setParameterValue(self, parameterId, value): |
|
|
|
self.parameterValueChanged(parameterId, value) |
|
|
|
PluginSlot.setParameterValue(self, parameterId, value) |
|
|
|
AbstractPluginSlot.setParameterValue(self, parameterId, value) |
|
|
|
|
|
|
|
def setMidiProgram(self, index): |
|
|
|
self.midiProgramChanged(index) |
|
|
|
PluginSlot.setMidiProgram(self, index) |
|
|
|
AbstractPluginSlot.setMidiProgram(self, index) |
|
|
|
|
|
|
|
#------------------------------------------------------------------ |
|
|
|
|
|
|
|
def activeChanged(self, onOff): |
|
|
|
self.ui.b_enable.blockSignals(True) |
|
|
|
self.ui.b_enable.setChecked(onOff) |
|
|
|
self.ui.b_enable.blockSignals(False) |
|
|
|
|
|
|
|
def editDialogChanged(self, visible): |
|
|
|
self.ui.b_edit.blockSignals(True) |
|
|
|
self.ui.b_edit.setChecked(visible) |
|
|
|
self.ui.b_edit.blockSignals(False) |
|
|
|
|
|
|
|
def parameterValueChanged(self, parameterId, value): |
|
|
|
for paramIndex, paramWidget in self.fParameterList: |
|
|
|
if paramIndex != parameterId: |
|
|
@@ -967,51 +922,18 @@ class PluginSlot_ZynFX(PluginSlot): |
|
|
|
|
|
|
|
#------------------------------------------------------------------ |
|
|
|
|
|
|
|
def idleFast(self): |
|
|
|
# Input peaks |
|
|
|
if self.fPeaksInputCount > 0: |
|
|
|
if self.fPeaksInputCount > 1: |
|
|
|
peak1 = Carla.host.get_input_peak_value(self.fPluginId, True) |
|
|
|
peak2 = Carla.host.get_input_peak_value(self.fPluginId, False) |
|
|
|
self.ui.peak_in.displayMeter(1, peak1) |
|
|
|
self.ui.peak_in.displayMeter(2, peak2) |
|
|
|
else: |
|
|
|
peak = Carla.host.get_input_peak_value(self.fPluginId, True) |
|
|
|
self.ui.peak_in.displayMeter(1, peak) |
|
|
|
|
|
|
|
# Output peaks |
|
|
|
if self.fPeaksOutputCount > 0: |
|
|
|
if self.fPeaksOutputCount > 1: |
|
|
|
peak1 = Carla.host.get_output_peak_value(self.fPluginId, True) |
|
|
|
peak2 = Carla.host.get_output_peak_value(self.fPluginId, False) |
|
|
|
self.ui.peak_out.displayMeter(1, peak1) |
|
|
|
self.ui.peak_out.displayMeter(2, peak2) |
|
|
|
else: |
|
|
|
peak = Carla.host.get_output_peak_value(self.fPluginId, True) |
|
|
|
self.ui.peak_out.displayMeter(1, peak) |
|
|
|
|
|
|
|
#------------------------------------------------------------------ |
|
|
|
|
|
|
|
@pyqtSlot(bool) |
|
|
|
def slot_enableClicked(self, yesNo): |
|
|
|
self.setActive(yesNo, False, True) |
|
|
|
|
|
|
|
@pyqtSlot(int) |
|
|
|
def slot_parameterValueChanged(self, value): |
|
|
|
index = self.sender().getIndex() |
|
|
|
value = float(value)/1000.0 |
|
|
|
|
|
|
|
Carla.host.set_parameter_value(self.fPluginId, index, value) |
|
|
|
PluginSlot.setParameterValue(self, index, value) |
|
|
|
AbstractPluginSlot.setParameterValue(self, index, value) |
|
|
|
|
|
|
|
@pyqtSlot(int) |
|
|
|
def slot_presetChanged(self, index): |
|
|
|
Carla.host.set_midi_program(self.fPluginId, index) |
|
|
|
PluginSlot.setMidiProgram(self, index) |
|
|
|
|
|
|
|
@pyqtSlot() |
|
|
|
def slot_showCustomMenu(self): |
|
|
|
self.showDefaultMenu(self.ui.b_enable.isChecked(), self.ui.b_edit, None) |
|
|
|
AbstractPluginSlot.setMidiProgram(self, index) |
|
|
|
|
|
|
|
# ------------------------------------------------------------------------------------------------------------ |
|
|
|
|
|
|
@@ -1033,3 +955,16 @@ def createPluginSlot(parent, pluginId): |
|
|
|
return PluginSlot_Default(parent, pluginId) |
|
|
|
|
|
|
|
# ------------------------------------------------------------------------------------------------------------ |
|
|
|
# Main Testing |
|
|
|
|
|
|
|
if __name__ == '__main__': |
|
|
|
from carla_style import CarlaApplication |
|
|
|
import resources_rc |
|
|
|
|
|
|
|
app = CarlaApplication("Carla-Skins") |
|
|
|
gui = PluginSlot_Pixmap(None, 0) |
|
|
|
#gui = PluginSlot_Calf(None, 0) |
|
|
|
#gui = PluginSlot_ZynFX(None, 0) |
|
|
|
gui.show() |
|
|
|
|
|
|
|
app.exec_() |