From 43d6ecba22d7d9215eff2a5229a2c6c7eba119a1 Mon Sep 17 00:00:00 2001 From: falkTX Date: Sun, 2 Feb 2014 11:35:07 +0000 Subject: [PATCH] Associate a canvas group with a plugin Id if possible --- source/backend/engine/CarlaEngineJack.cpp | 1 + source/carla_host.py | 4 +-- source/carla_patchbay.py | 28 +++++++++++++++++-- source/patchcanvas.py | 33 ++++++++++++++++++++--- 4 files changed, 58 insertions(+), 8 deletions(-) diff --git a/source/backend/engine/CarlaEngineJack.cpp b/source/backend/engine/CarlaEngineJack.cpp index fb871c1c0..1b2167da8 100644 --- a/source/backend/engine/CarlaEngineJack.cpp +++ b/source/backend/engine/CarlaEngineJack.cpp @@ -1696,6 +1696,7 @@ private: carla_stdout("CarlaEngineJack::findPluginIdAndIcon(\"%s\", ...) - found plugin, yes!!!", clientName); pluginId = static_cast(i); + icon = PATCHBAY_ICON_PLUGIN; if (const char* const pluginIcon = plugin->getIconName()) { diff --git a/source/carla_host.py b/source/carla_host.py index 45a85a590..527d53ebd 100644 --- a/source/carla_host.py +++ b/source/carla_host.py @@ -121,7 +121,7 @@ class HostWindow(QMainWindow): ReloadParametersCallback = pyqtSignal(int) ReloadProgramsCallback = pyqtSignal(int) ReloadAllCallback = pyqtSignal(int) - PatchbayClientAddedCallback = pyqtSignal(int, int, str) + PatchbayClientAddedCallback = pyqtSignal(int, int, int, str) PatchbayClientRemovedCallback = pyqtSignal(int) PatchbayClientRenamedCallback = pyqtSignal(int, str) PatchbayClientDataChangedCallback = pyqtSignal(int, int, int) @@ -1173,7 +1173,7 @@ def engineCallback(ptr, action, pluginId, value1, value2, value3, valueStr): elif action == ENGINE_CALLBACK_RELOAD_ALL: Carla.gui.ReloadAllCallback.emit(pluginId) elif action == ENGINE_CALLBACK_PATCHBAY_CLIENT_ADDED: - Carla.gui.PatchbayClientAddedCallback.emit(pluginId, value1, valueStr) + Carla.gui.PatchbayClientAddedCallback.emit(pluginId, value1, value2, valueStr) elif action == ENGINE_CALLBACK_PATCHBAY_CLIENT_REMOVED: Carla.gui.PatchbayClientRemovedCallback.emit(pluginId) elif action == ENGINE_CALLBACK_PATCHBAY_CLIENT_RENAMED: diff --git a/source/carla_patchbay.py b/source/carla_patchbay.py index f90d73ea0..dadb0acb9 100644 --- a/source/carla_patchbay.py +++ b/source/carla_patchbay.py @@ -609,8 +609,8 @@ class CarlaPatchbayW(QGraphicsView): # ----------------------------------------------------------------- - @pyqtSlot(int, int, str) - def slot_handlePatchbayClientAddedCallback(self, clientId, clientIcon, clientName): + @pyqtSlot(int, int, int, str) + def slot_handlePatchbayClientAddedCallback(self, clientId, clientIcon, pluginId, clientName): pcSplit = patchcanvas.SPLIT_UNDEF pcIcon = patchcanvas.ICON_APPLICATION @@ -629,6 +629,18 @@ class CarlaPatchbayW(QGraphicsView): QTimer.singleShot(0, self.fMiniCanvasPreview.update) + if pluginId < 0: + return + if pluginId >= self.getPluginCount(): + print("sorry, can't map this plugin to canvas client", pluginId, self.getPluginCount()) + return + + pitem = self.fPluginList[pluginId] + if pitem is None: + return + + patchcanvas.setGroupAsPlugin(clientId, pluginId, bool(pitem.fPluginInfo['hints'] & PLUGIN_HAS_CUSTOM_UI)) + @pyqtSlot(int) def slot_handlePatchbayClientRemovedCallback(self, clientId): #if not self.fEngineStarted: return @@ -658,6 +670,18 @@ class CarlaPatchbayW(QGraphicsView): patchcanvas.setGroupIcon(clientId, pcIcon) QTimer.singleShot(0, self.fMiniCanvasPreview.update) + if pluginId < 0: + return + if pluginId >= self.getPluginCount(): + print("sorry, can't map this plugin to canvas client", pluginId, self.getPluginCount()) + return + + pitem = self.fPluginList[pluginId] + if pitem is None: + return + + patchcanvas.setGroupAsPlugin(clientId, pluginId, bool(pitem.fPluginInfo['hints'] & PLUGIN_HAS_CUSTOM_UI)) + @pyqtSlot(int, int, int, str) def slot_handlePatchbayPortAddedCallback(self, clientId, portId, portFlags, portName): if (portFlags & PATCHBAY_PORT_IS_INPUT): diff --git a/source/patchcanvas.py b/source/patchcanvas.py index 8cedfd3c0..05062ef51 100644 --- a/source/patchcanvas.py +++ b/source/patchcanvas.py @@ -257,11 +257,17 @@ def port_type2str(port_type): return "PORT_TYPE_???" def icon2str(icon): - if icon == ICON_HARDWARE: - return "ICON_HARDWARE" - elif ICON_APPLICATION: + if icon == ICON_APPLICATION: return "ICON_APPLICATION" - elif ICON_LADISH_ROOM: + elif icon == ICON_HARDWARE: + return "ICON_HARDWARE" + elif icon == ICON_DISTRHO: + return "ICON_DISTRHO" + elif icon == ICON_FILE: + return "ICON_FILE" + elif icon == ICON_PLUGIN: + return "ICON_PLUGIN" + elif icon == ICON_LADISH_ROOM: return "ICON_LADISH_ROOM" else: return "ICON_???" @@ -720,6 +726,22 @@ def setGroupIcon(group_id, icon): qCritical("PatchCanvas::setGroupIcon(%i, %s) - unable to find group to change icon" % (group_id, icon2str(icon))) +def setGroupAsPlugin(group_id, plugin_id, hasUi): + if canvas.debug: + qDebug("PatchCanvas::setGroupAsPlugin(%i, %i, %s)" % (group_id, plugin_id, bool2str(hasUi))) + + for group in canvas.group_list: + if group.group_id == group_id: + group.widgets[0].setAsPlugin(plugin_id, hasUi) + + if group.split and group.widgets[1]: + group.widgets[1].setAsPlugin(plugin_id, hasUi) + + QTimer.singleShot(0, canvas.scene.update) + return + + qCritical("PatchCanvas::setGroupAsPlugin(%i, %i, %s) - unable to find group to set as plugin" % (group_id, plugin_id, bool2str(hasUi))) + def addPort(group_id, port_id, port_name, port_mode, port_type): if canvas.debug: qDebug("PatchCanvas::addPort(%i, %i, %s, %s, %s)" % (group_id, port_id, port_name.encode(), port_mode2str(port_mode), port_type2str(port_type))) @@ -2048,6 +2070,9 @@ class CanvasBox(QGraphicsItem): def getPortList(self): return self.m_port_list_ids + def setAsPlugin(self, plugin_id, hasUi): + print("GOT CANVAS AS PLUGIN!!!") + def setIcon(self, icon): if self.icon_svg: self.icon_svg.setIcon(icon, self.m_group_name)