Carla: Continue rework, misc fixes

This commit is contained in:
falkTX 2012-11-26 23:16:22 +00:00
parent bb522f9a92
commit 47407734a2
7 changed files with 228 additions and 185 deletions

View File

@ -206,7 +206,7 @@ enum OptionsType {
/*!
* Set the engine processing mode.\n
* Default is PROCESS_MODE_MULTIPLE_CLIENTS.
* \see ProcessModeType
* \see ProcessMode
*/
OPTION_PROCESS_MODE = 1,

View File

@ -49,11 +49,6 @@ LIBS += \
QMAKE_CXXFLAGS *= -std=c++0x
# NTK
QMAKE_CXXFLAGS *= `ntk-config --cxxflags`
QMAKE_LFLAGS *= `ntk-config --ldflags`
LIBS += `ntk-config --libs`
unix {
LIBS += -ldl -lm
}

View File

@ -1768,7 +1768,7 @@ void nsm_reply_save()
// -------------------------------------------------------------------------------------------------------------------
#ifdef QTCREATOR_TEST
#if 0 //def QTCREATOR_TEST
#include <QtGui/QApplication>
#include <QtGui/QDialog>

View File

@ -6,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
<width>791</width>
<width>731</width>
<height>46</height>
</rect>
</property>
@ -25,7 +25,7 @@
<property name="maximumSize">
<size>
<width>16777215</width>
<height>46</height>
<height>16777215</height>
</size>
</property>
<property name="windowTitle">
@ -52,6 +52,12 @@
</property>
<item>
<widget class="QWidget" name="area_left" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="spacing">
<number>0</number>
@ -178,21 +184,14 @@
</layout>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QFrame" name="frame_controls">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>160</width>
@ -357,6 +356,12 @@
</item>
<item>
<widget class="QWidget" name="area_right" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="spacing">
<number>0</number>
@ -594,7 +599,6 @@
<zorder>frame_controls</zorder>
<zorder>area_right</zorder>
<zorder>area_left</zorder>
<zorder>horizontalSpacer</zorder>
</widget>
<customwidgets>
<customwidget>

View File

@ -22,7 +22,7 @@ from PyQt4.QtCore import QThread
from PyQt4.QtGui import QApplication, QMainWindow, QTableWidgetItem
# Imports (Custom Stuff)
import ui_carla, ui_carla_about, ui_carla_database, ui_carla_refresh
import ui_carla, ui_carla_database, ui_carla_refresh
from carla_backend import *
from shared_settings import *
@ -1053,77 +1053,6 @@ class PluginDatabaseW(QDialog, ui_carla_database.Ui_PluginDatabaseW):
QDialog.done(self, r)
self.close()
# About Carla Dialog
class CarlaAboutW(QDialog, ui_carla_about.Ui_CarlaAboutW):
def __init__(self, parent):
QDialog.__init__(self, parent)
self.setupUi(self)
self.l_about.setText(self.tr(""
"<br>Version %s"
"<br>Carla is a Multi-Plugin Host for JACK.<br>"
"<br>Copyright (C) 2011-2012 falkTX<br>"
"" % VERSION))
self.l_extended.setText(cString(Carla.host.get_extended_license_text()))
self.le_osc_url.setText(cString(Carla.host.get_host_osc_url()))
self.l_osc_cmds.setText(
" /set_active <i-value>\n"
" /set_drywet <f-value>\n"
" /set_volume <f-value>\n"
" /set_balance_left <f-value>\n"
" /set_balance_right <f-value>\n"
" /set_parameter_value <i-index> <f-value>\n"
" /set_parameter_midi_cc <i-index> <i-cc>\n"
" /set_parameter_midi_channel <i-index> <i-channel>\n"
" /set_program <i-index>\n"
" /set_midi_program <i-index>\n"
" /note_on <i-note> <i-velo>\n"
" /note_off <i-note>\n"
)
self.l_example.setText("/Carla/2/set_parameter_value 5 1.0")
self.l_example_help.setText("<i>(as in this example, \"2\" is the plugin number and \"5\" the parameter)</i>")
self.l_ladspa.setText(self.tr("Everything! (Including LRDF)"))
self.l_dssi.setText(self.tr("Everything! (Including CustomData/Chunks)"))
self.l_lv2.setText(self.tr("About 95&#37; complete (using custom extensions).<br/>"
"Implemented Feature/Extensions:"
"<ul>"
"<li>http://lv2plug.in/ns/ext/atom</li>"
"<li>http://lv2plug.in/ns/ext/buf-size</li>"
"<li>http://lv2plug.in/ns/ext/data-access</li>"
#"<li>http://lv2plug.in/ns/ext/dynmanifest</li>"
"<li>http://lv2plug.in/ns/ext/event</li>"
"<li>http://lv2plug.in/ns/ext/instance-access</li>"
"<li>http://lv2plug.in/ns/ext/log</li>"
"<li>http://lv2plug.in/ns/ext/midi</li>"
"<li>http://lv2plug.in/ns/ext/options</li>"
#"<li>http://lv2plug.in/ns/ext/parameters</li>"
"<li>http://lv2plug.in/ns/ext/patch</li>"
#"<li>http://lv2plug.in/ns/ext/port-groups</li>"
"<li>http://lv2plug.in/ns/ext/port-props</li>"
#"<li>http://lv2plug.in/ns/ext/presets</li>"
"<li>http://lv2plug.in/ns/ext/state</li>"
"<li>http://lv2plug.in/ns/ext/time</li>"
"<li>http://lv2plug.in/ns/ext/uri-map</li>"
"<li>http://lv2plug.in/ns/ext/urid</li>"
"<li>http://lv2plug.in/ns/ext/worker</li>"
"<li>http://lv2plug.in/ns/extensions/ui</li>"
"<li>http://lv2plug.in/ns/extensions/units</li>"
"<li>http://kxstudio.sf.net/ns/lv2ext/external-ui</li>"
"<li>http://kxstudio.sf.net/ns/lv2ext/programs</li>"
"<li>http://kxstudio.sf.net/ns/lv2ext/rtmempool</li>"
"<li>http://ll-plugins.nongnu.org/lv2/ext/midimap</li>"
"<li>http://ll-plugins.nongnu.org/lv2/ext/miditype</li>"
"</ul>"))
self.l_vst.setText(self.tr("<p>About 85&#37; complete (missing vst bank/presets and some minor stuff)</p>"))
def done(self, r):
QDialog.done(self, r)
self.close()
# Main Window
class CarlaMainW(QMainWindow, ui_carla.Ui_CarlaMainW):
def __init__(self, parent=None):
@ -1175,6 +1104,10 @@ class CarlaMainW(QMainWindow, ui_carla.Ui_CarlaMainW):
self.act_engine_start.setEnabled(False)
self.act_engine_stop.setEnabled(False)
self.act_plugin_remove_all.setEnabled(False)
#self.m_scene = CarlaScene(self, self.graphicsView)
#self.graphicsView.setScene(self.m_scene)
self.resize(self.width(), 0)
#self.m_fakeEdit = PluginEdit(self, -1)
@ -1530,6 +1463,7 @@ class CarlaMainW(QMainWindow, ui_carla.Ui_CarlaMainW):
else:
pwidget = PluginWidget(self, new_plugin_id)
self.w_plugins.layout().addWidget(pwidget)
#self.m_scene.addWidget(new_plugin_id, pwidget)
self.m_plugin_list[new_plugin_id] = pwidget
self.act_plugin_remove_all.setEnabled(True)
@ -2020,6 +1954,10 @@ class CarlaMainW(QMainWindow, ui_carla.Ui_CarlaMainW):
os.environ["SF2_PATH"] = splitter.join(SF2_PATH)
os.environ["SFZ_PATH"] = splitter.join(SFZ_PATH)
#def resizeEvent(self, event):
#self.m_scene.resize()
#QMainWindow.resizeEvent(self, event)
def timerEvent(self, event):
if event.timerId() == self.TIMER_GUI_STUFF:
for pwidget in self.m_plugin_list:

View File

@ -23,7 +23,7 @@ from liblo import send as lo_send
from liblo import TCP as LO_TCP
# Imports (Custom)
import ui_carla_about, ui_carla_control
import ui_carla_control
from shared_carla import *
global lo_target, lo_targetName
@ -505,23 +505,6 @@ class ControlServer(ServerThread):
def fallback(self, path, args):
print("ControlServer::fallback(\"%s\") - unknown message, args =" % path, args)
# About Carla Dialog
class CarlaAboutW(QDialog, ui_carla_about.Ui_CarlaAboutW):
def __init__(self, parent):
QDialog.__init__(self, parent)
self.setupUi(self)
self.l_about.setText(self.tr(""
"<br>Version %s"
"<br>Carla is a Multi-Plugin Host for JACK - <b>OSC Bridge Version</b>.<br>"
"<br>Copyright (C) 2011-2012 falkTX<br>"
"" % VERSION))
self.l_extended.setVisible(False) # TODO - write about this special OSC version
self.tabWidget.removeTab(1)
self.tabWidget.removeTab(1)
# Main Window
class CarlaControlW(QMainWindow, ui_carla_control.Ui_CarlaControlW):
def __init__(self, parent=None):

View File

@ -22,7 +22,7 @@ from copy import deepcopy
from decimal import Decimal
from sip import unwrapinstance
from PyQt4.QtCore import pyqtSlot, Qt, QSettings, QTimer
from PyQt4.QtGui import QColor, QCursor, QDialog, QFontMetrics, QFrame, QInputDialog, QMenu, QPainter, QPainterPath, QVBoxLayout, QWidget
from PyQt4.QtGui import QColor, QCursor, QDialog, QFontMetrics, QFrame, QGraphicsScene, QInputDialog, QLinearGradient, QMenu, QPainter, QPainterPath, QVBoxLayout, QWidget
from PyQt4.QtXml import QDomDocument
try:
@ -32,7 +32,7 @@ except:
GuiContainer = QWidget
# Imports (Custom)
import ui_carla_edit, ui_carla_parameter, ui_carla_plugin
import ui_carla_about, ui_carla_edit, ui_carla_parameter, ui_carla_plugin
from shared import *
# Carla Host object
@ -229,6 +229,21 @@ PALETTE_COLOR_ORANGE = 6
PALETTE_COLOR_BROWN = 7
PALETTE_COLOR_PINK = 8
CarlaStateParameter = {
'index': 0,
'name': "",
'symbol': "",
'value': 0.0,
'midiChannel': 1,
'midiCC': -1
}
CarlaStateCustomData = {
'type': CUSTOM_DATA_INVALID,
'key': "",
'value': ""
}
CarlaSaveState = {
'Type': "",
'Name': "",
@ -249,21 +264,6 @@ CarlaSaveState = {
'Chunk': None
}
CarlaSaveStateParameter = {
'index': 0,
'name': "",
'symbol': "",
'value': 0.0,
'midiChannel': 1,
'midiCC': -1
}
CarlaSaveStateCustomData = {
'type': CUSTOM_DATA_INVALID,
'key': "",
'value': ""
}
def getCustomDataTypeString(dtype):
if dtype == CUSTOM_DATA_STRING:
return "string"
@ -290,6 +290,7 @@ def getSaveStateDictFromXML(xmlNode):
saveState = deepcopy(CarlaSaveState)
node = xmlNode.firstChild()
while not node.isNull():
# ------------------------------------------------------
# Info
@ -298,7 +299,7 @@ def getSaveStateDictFromXML(xmlNode):
xmlInfo = node.toElement().firstChild()
while not xmlInfo.isNull():
tag = xmlInfo.toElement().tagName()
tag = xmlInfo.toElement().tagName()
text = xmlInfo.toElement().text().strip()
if tag == "Type":
@ -321,7 +322,7 @@ def getSaveStateDictFromXML(xmlNode):
xmlData = node.toElement().firstChild()
while not xmlData.isNull():
tag = xmlData.toElement().tagName()
tag = xmlData.toElement().tagName()
text = xmlData.toElement().text().strip()
# ----------------------------------------------
@ -358,53 +359,53 @@ def getSaveStateDictFromXML(xmlNode):
# Parameters
elif tag == "Parameter":
saveStateParameter = deepcopy(CarlaSaveStateParameter)
stateParameter = deepcopy(CarlaStateParameter)
xmlSubData = xmlData.toElement().firstChild()
while not xmlSubData.isNull():
pTag = xmlSubData.toElement().tagName()
pTag = xmlSubData.toElement().tagName()
pText = xmlSubData.toElement().text().strip()
if pTag == "index":
if pText.isdigit(): saveStateParameter['index'] = int(pText)
if pText.isdigit(): stateParameter['index'] = int(pText)
elif pTag == "name":
saveStateParameter['name'] = xmlSafeString(pText, False)
stateParameter['name'] = xmlSafeString(pText, False)
elif pTag == "symbol":
saveStateParameter['symbol'] = xmlSafeString(pText, False)
stateParameter['symbol'] = xmlSafeString(pText, False)
elif pTag == "value":
if isNumber(pText): saveStateParameter['value'] = float(pText)
if isNumber(pText): stateParameter['value'] = float(pText)
elif pTag == "midiChannel":
if pText.isdigit(): saveStateParameter['midiChannel'] = int(pText)
if pText.isdigit(): stateParameter['midiChannel'] = int(pText)
elif pTag == "midiCC":
if pText.isdigit(): saveStateParameter['midiCC'] = int(pText)
if pText.isdigit(): stateParameter['midiCC'] = int(pText)
xmlSubData = xmlSubData.nextSibling()
saveState['Parameters'].append(saveStateParameter)
saveState['Parameters'].append(stateParameter)
# ----------------------------------------------
# Custom Data
elif tag == "CustomData":
saveStateCustomData = deepcopy(CarlaSaveStateCustomData)
stateCustomData = deepcopy(CarlaStateCustomData)
xmlSubData = xmlData.toElement().firstChild()
while not xmlSubData.isNull():
cTag = xmlSubData.toElement().tagName()
cTag = xmlSubData.toElement().tagName()
cText = xmlSubData.toElement().text().strip()
if cTag == "type":
saveStateCustomData['type'] = getCustomDataStringType(cText)
stateCustomData['type'] = getCustomDataStringType(cText)
elif cTag == "key":
saveStateCustomData['key'] = xmlSafeString(cText, False)
stateCustomData['key'] = xmlSafeString(cText, False)
elif cTag == "value":
saveStateCustomData['value'] = xmlSafeString(cText, False)
stateCustomData['value'] = xmlSafeString(cText, False)
xmlSubData = xmlSubData.nextSibling()
saveState['CustomData'].append(saveStateCustomData)
saveState['CustomData'].append(stateCustomData)
# ----------------------------------------------
# Chunk
@ -429,7 +430,86 @@ def xmlSafeString(string, toXml):
return string.replace("&amp;", "&").replace("&lt;","<").replace("&gt;",">").replace("&apos;","'").replace("&quot;","\"")
# ------------------------------------------------------------------------------------------------
# Common widgets
# carla_about.cpp
class CarlaAboutW(QDialog, ui_carla_about.Ui_CarlaAboutW):
def __init__(self, parent):
QDialog.__init__(self, parent)
self.setupUi(self)
self.l_about.setText(self.tr(""
"<br>Version %s"
"<br>Carla is a Multi-Plugin Host for JACK%s.<br>"
"<br>Copyright (C) 2011-2012 falkTX<br>"
"" % (VERSION, " - <b>OSC Bridge Version</b>" if Carla.isControl else "")))
if Carla.isControl:
self.l_extended.setVisible(False) # TODO - write about this special OSC version
self.tabWidget.removeTab(1)
self.tabWidget.removeTab(1)
else:
self.l_extended.setText(cString(Carla.host.get_extended_license_text()))
self.le_osc_url.setText(cString(Carla.host.get_host_osc_url()) if Carla.host.is_engine_running() else self.tr("(Engine not running)"))
self.l_osc_cmds.setText(
" /set_active <i-value>\n"
" /set_drywet <f-value>\n"
" /set_volume <f-value>\n"
" /set_balance_left <f-value>\n"
" /set_balance_right <f-value>\n"
" /set_parameter_value <i-index> <f-value>\n"
" /set_parameter_midi_cc <i-index> <i-cc>\n"
" /set_parameter_midi_channel <i-index> <i-channel>\n"
" /set_program <i-index>\n"
" /set_midi_program <i-index>\n"
" /note_on <i-note> <i-velo>\n"
" /note_off <i-note>\n"
)
self.l_example.setText("/Carla/2/set_parameter_value 5 1.0")
self.l_example_help.setText("<i>(as in this example, \"2\" is the plugin number and \"5\" the parameter)</i>")
self.l_ladspa.setText(self.tr("Everything! (Including LRDF)"))
self.l_dssi.setText(self.tr("Everything! (Including CustomData/Chunks)"))
self.l_lv2.setText(self.tr("About 95&#37; complete (using custom extensions).<br/>"
"Implemented Feature/Extensions:"
"<ul>"
"<li>http://lv2plug.in/ns/ext/atom</li>"
"<li>http://lv2plug.in/ns/ext/buf-size</li>"
"<li>http://lv2plug.in/ns/ext/data-access</li>"
#"<li>http://lv2plug.in/ns/ext/dynmanifest</li>"
"<li>http://lv2plug.in/ns/ext/event</li>"
"<li>http://lv2plug.in/ns/ext/instance-access</li>"
"<li>http://lv2plug.in/ns/ext/log</li>"
"<li>http://lv2plug.in/ns/ext/midi</li>"
"<li>http://lv2plug.in/ns/ext/options</li>"
#"<li>http://lv2plug.in/ns/ext/parameters</li>"
"<li>http://lv2plug.in/ns/ext/patch</li>"
#"<li>http://lv2plug.in/ns/ext/port-groups</li>"
"<li>http://lv2plug.in/ns/ext/port-props</li>"
#"<li>http://lv2plug.in/ns/ext/presets</li>"
"<li>http://lv2plug.in/ns/ext/state</li>"
"<li>http://lv2plug.in/ns/ext/time</li>"
"<li>http://lv2plug.in/ns/ext/uri-map</li>"
"<li>http://lv2plug.in/ns/ext/urid</li>"
"<li>http://lv2plug.in/ns/ext/worker</li>"
"<li>http://lv2plug.in/ns/extensions/ui</li>"
"<li>http://lv2plug.in/ns/extensions/units</li>"
"<li>http://kxstudio.sf.net/ns/lv2ext/external-ui</li>"
"<li>http://kxstudio.sf.net/ns/lv2ext/programs</li>"
"<li>http://kxstudio.sf.net/ns/lv2ext/rtmempool</li>"
"<li>http://ll-plugins.nongnu.org/lv2/ext/midimap</li>"
"<li>http://ll-plugins.nongnu.org/lv2/ext/miditype</li>"
"</ul>"))
self.l_vst.setText(self.tr("<p>About 85&#37; complete (missing vst bank/presets and some minor stuff)</p>"))
def done(self, r):
QDialog.done(self, r)
self.close()
# ------------------------------------------------------------------------------------------------
# PluginParameter.cpp
# Plugin Parameter
class PluginParameter(QWidget, ui_carla_parameter.Ui_PluginParameter):
@ -446,10 +526,11 @@ class PluginParameter(QWidget, ui_carla_parameter.Ui_PluginParameter):
self.m_parameterId = pInfo['index']
self.m_tabIndex = tabIndex
self.add_MIDI_CCs_to_ComboBox()
self.label.setText(pInfo['name'])
for MIDI_CC in MIDI_CC_LIST:
self.combo.addItem(MIDI_CC)
if pType == PARAMETER_INPUT:
self.widget.set_minimum(pInfo['minimum'])
self.widget.set_maximum(pInfo['maximum'])
@ -497,11 +578,11 @@ class PluginParameter(QWidget, ui_carla_parameter.Ui_PluginParameter):
#self.widget.force_plastique_style()
if pHints & PARAMETER_USES_CUSTOM_TEXT:
self.widget.set_text_call(self.textCallFunction)
self.widget.set_text_call(self.textCallBack)
self.widget.updateAll()
def set_default_value(self, value):
def setDefaultValue(self, value):
self.widget.set_default(value)
def set_parameter_value(self, value, send=True):
@ -515,10 +596,6 @@ class PluginParameter(QWidget, ui_carla_parameter.Ui_PluginParameter):
self.m_midiChannel = channel+1
self.sb_channel.setValue(channel+1)
def add_MIDI_CCs_to_ComboBox(self):
for MIDI_CC in MIDI_CC_LIST:
self.combo.addItem(MIDI_CC)
def set_MIDI_CC_in_ComboBox(self, cc):
for i in range(len(MIDI_CC_LIST)):
ccText = MIDI_CC_LIST[i].split(" ")[0]
@ -533,7 +610,7 @@ class PluginParameter(QWidget, ui_carla_parameter.Ui_PluginParameter):
def tabIndex(self):
return self.m_tabIndex
def textCallFunction(self):
def textCallBack(self):
return cString(Carla.host.get_parameter_text(self.m_pluginId, self.m_parameterId))
@pyqtSlot(float)
@ -563,13 +640,14 @@ class PluginParameter(QWidget, ui_carla_parameter.Ui_PluginParameter):
# Plugin Editor (Built-in)
class PluginEdit(QDialog, ui_carla_edit.Ui_PluginEdit):
def __init__(self, parent, pluginId):
QDialog.__init__(self, parent)
QDialog.__init__(self, Carla.gui)
self.setupUi(self)
self.m_firstShow = True
self.m_geometry = None
self.m_pluginId = pluginId
self.m_pluginInfo = None
self.m_realParent = parent
self.m_parameterCount = 0
self.m_parameterList = [] # (type, id, widget)
@ -682,7 +760,7 @@ class PluginEdit(QDialog, ui_carla_edit.Ui_PluginEdit):
self.scrollArea.setVisible((pluginHints & PLUGIN_IS_SYNTH) > 0 or (midiCountInfo['ins'] > 0 < midiCountInfo['outs']))
# Force-Update parent for new hints (knobs)
self.parent().recheck_hints(pluginHints)
self.m_realParent.recheck_hints(pluginHints)
def do_reload_parameters(self):
parameterCount = Carla.host.get_parameter_count(self.m_pluginId)
@ -929,7 +1007,7 @@ class PluginEdit(QDialog, ui_carla_edit.Ui_PluginEdit):
self.m_parameterIdsToUpdate.append(index)
#def set_parameter_default_value(self, index, value):
#self.m_parameterList[index].set_default_value(value)
#self.m_parameterList[index].setDefaultValue(value)
def set_parameter_midi_channel(self, index, midiChannel, blockSignals = False):
for paramType, paramId, paramWidget in self.m_parameterList:
@ -962,7 +1040,7 @@ class PluginEdit(QDialog, ui_carla_edit.Ui_PluginEdit):
content += "<?xml version='1.0' encoding='UTF-8'?>\n"
content += "<!DOCTYPE CARLA-PRESET>\n"
content += "<CARLA-PRESET VERSION='%s'>\n" % VERSION
content += self.parent().getSaveXMLContent()
content += self.m_realParent.getSaveXMLContent()
content += "</CARLA-PRESET>\n"
try:
@ -998,7 +1076,7 @@ class PluginEdit(QDialog, ui_carla_edit.Ui_PluginEdit):
saveState = getSaveStateDictFromXML(xmlNode)
self.parent().loadStateDict(saveState)
self.m_realParent.loadStateDict(saveState)
def loadStateLV2(self):
pass
@ -1027,7 +1105,7 @@ class PluginEdit(QDialog, ui_carla_edit.Ui_PluginEdit):
def updateParametersDefaultValues(self):
for paramType, paramId, paramWidget in self.m_parameterList:
if self.m_pluginInfo["type"] not in (PLUGIN_GIG, PLUGIN_SF2, PLUGIN_SFZ):
paramWidget.set_default_value(Carla.host.get_default_parameter_value(self.m_pluginId, paramId))
paramWidget.setDefaultValue(Carla.host.get_default_parameter_value(self.m_pluginId, paramId))
def updateParametersInputs(self):
for paramType, paramId, paramWidget in self.m_parameterList:
@ -1154,11 +1232,11 @@ class PluginEdit(QDialog, ui_carla_edit.Ui_PluginEdit):
@pyqtSlot()
def slot_notesOn(self):
self.parent().led_midi.setChecked(True)
self.m_realParent.led_midi.setChecked(True)
@pyqtSlot()
def slot_notesOff(self):
self.parent().led_midi.setChecked(False)
self.m_realParent.led_midi.setChecked(False)
@pyqtSlot()
def slot_checkInputControlParameters(self):
@ -1166,7 +1244,7 @@ class PluginEdit(QDialog, ui_carla_edit.Ui_PluginEdit):
@pyqtSlot()
def slot_finished(self):
self.parent().b_edit.setChecked(False)
self.m_realParent.b_edit.setChecked(False)
def done(self, r):
QDialog.done(self, r)
@ -1564,19 +1642,19 @@ class PluginWidget(QFrame, ui_carla_plugin.Ui_PluginWidget):
if parameterData['type'] != PARAMETER_INPUT:
continue
saveStateParameter = deepcopy(CarlaSaveStateParameter)
stateParameter = deepcopy(CarlaStateParameter)
saveStateParameter['index'] = parameterData['index']
saveStateParameter['name'] = cString(parameterInfo['name'])
saveStateParameter['symbol'] = cString(parameterInfo['symbol'])
saveStateParameter['value'] = Carla.host.get_current_parameter_value(self.m_pluginId, parameterData['index'])
saveStateParameter['midiCC'] = parameterData['midiCC']
saveStateParameter['midiChannel'] = parameterData['midiChannel'] + 1
stateParameter['index'] = parameterData['index']
stateParameter['name'] = cString(parameterInfo['name'])
stateParameter['symbol'] = cString(parameterInfo['symbol'])
stateParameter['value'] = Carla.host.get_current_parameter_value(self.m_pluginId, parameterData['index'])
stateParameter['midiCC'] = parameterData['midiCC']
stateParameter['midiChannel'] = parameterData['midiChannel'] + 1
if parameterData['hints'] & PARAMETER_USES_SAMPLERATE:
saveStateParameter['value'] /= sampleRate
stateParameter['value'] /= sampleRate
saveState['Parameters'].append(saveStateParameter)
saveState['Parameters'].append(stateParameter)
# ----------------------------
# Custom Data
@ -1589,13 +1667,13 @@ class PluginWidget(QFrame, ui_carla_plugin.Ui_PluginWidget):
if customData['type'] == CUSTOM_DATA_INVALID:
continue
saveStateCustomData = deepcopy(CarlaSaveStateCustomData)
stateCustomData = deepcopy(CarlaStateCustomData)
saveStateCustomData['type'] = getCustomDataTypeString(customData['type'])
saveStateCustomData['key'] = cString(customData['key'])
saveStateCustomData['value'] = cString(customData['value'])
stateCustomData['type'] = getCustomDataTypeString(customData['type'])
stateCustomData['key'] = cString(customData['key'])
stateCustomData['value'] = cString(customData['value'])
saveState['CustomData'].append(saveStateCustomData)
saveState['CustomData'].append(stateCustomData)
# ----------------------------
# Chunk
@ -2029,14 +2107,59 @@ class PluginWidget(QFrame, ui_carla_plugin.Ui_PluginWidget):
#painter.drawLine(0, self.height() - 1, self.width(), self.height() - 1)
QFrame.paintEvent(self, event)
# Carla Scene
class CarlaScene(QGraphicsScene):
def __init__(self, parent, view):
QGraphicsScene.__init__(self, parent)
self.m_view = view
if not self.m_view:
qFatal("CarlaScene() - invalid view")
self.m_itemList = []
for x in range(MAX_PLUGINS):
self.m_itemList.append(None)
bgGradient = QLinearGradient(0.0, 0.0, 0.2, 1.0)
bgGradient.setColorAt(0, QColor(7, 7, 7))
bgGradient.setColorAt(1, QColor(28, 28, 28))
self.setBackgroundBrush(bgGradient)
def addWidget(self, idx, widget):
newItem = QGraphicsScene.addWidget(self, widget)
newPosY = 0
for item in self.m_itemList:
if item:
newPosY += item.widget().height()
print(item.widget().height())
print("fin", newPosY)
newItem.setPos(0, newPosY)
newItem.resize(widget.width(), widget.height())
self.m_itemList[idx] = newItem
def resize(self):
width = self.m_view.width()
height = self.m_view.height()
print("Resize", 0, 0, width, height)
self.setSceneRect(0, 0, width, height)
for item in self.m_itemList:
if not item:
continue
item.resize(width, item.widget().height())
# Plugin GUI
class PluginGUI(QDialog):
def __init__(self, parent, pluginName, resizable):
QDialog.__init__(self, parent)
QDialog.__init__(self, Carla.gui)
self.m_firstShow = True
self.m_resizable = resizable
self.m_geometry = None
self.m_firstShow = True
self.m_resizable = resizable
self.m_geometry = None
self.m_realParent = parent
self.vbLayout = QVBoxLayout(self)
self.vbLayout.setContentsMargins(0, 0, 0, 0)
@ -2084,7 +2207,7 @@ class PluginGUI(QDialog):
def closeEvent(self, event):
if event.spontaneous():
self.parent().b_gui.setChecked(False)
self.m_realParent.b_gui.setChecked(False)
QDialog.closeEvent(self, event)