From 893ea105e8689ce210e07543271beb0b7aa6d881 Mon Sep 17 00:00:00 2001 From: falkTX Date: Sun, 2 Feb 2014 14:13:53 +0000 Subject: [PATCH] Auto-enable/disable keys only when selection contains a plugin --- source/carla_patchbay.py | 5 +++++ source/patchcanvas.py | 27 +++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/source/carla_patchbay.py b/source/carla_patchbay.py index 364723403..cb74a6de9 100644 --- a/source/carla_patchbay.py +++ b/source/carla_patchbay.py @@ -103,6 +103,7 @@ class CarlaPatchbayW(QFrame): self.scene.scaleChanged.connect(self.slot_canvasScaleChanged) self.scene.sceneGroupMoved.connect(self.slot_canvasItemMoved) + self.scene.pluginSelected.connect(self.slot_canvasPluginSelected) self.fMiniCanvasPreview.miniCanvasMoved.connect(self.slot_miniCanvasMoved) @@ -348,6 +349,10 @@ class CarlaPatchbayW(QFrame): def slot_canvasItemMoved(self, group_id, split_mode, pos): self.fMiniCanvasPreview.update() + @pyqtSlot(list) + def slot_canvasPluginSelected(self, pluginList): + self.fKeys.setEnabled(len(pluginList) != 0) + @pyqtSlot(float, float) def slot_miniCanvasMoved(self, xp, yp): self.fMovingViaMiniCanvas = True diff --git a/source/patchcanvas.py b/source/patchcanvas.py index 9cf2f3b7f..49a59a1d3 100644 --- a/source/patchcanvas.py +++ b/source/patchcanvas.py @@ -1096,6 +1096,7 @@ def CanvasRemoveItemFX(item): class PatchScene(QGraphicsScene): scaleChanged = pyqtSignal(float) sceneGroupMoved = pyqtSignal(int, int, QPointF) + pluginSelected = pyqtSignal(list) def __init__(self, parent, view): QGraphicsScene.__init__(self, parent) @@ -1110,6 +1111,8 @@ class PatchScene(QGraphicsScene): if not self.m_view: qFatal("PatchCanvas::PatchScene() - invalid view") + self.selectionChanged.connect(self.slot_selectionChanged) + def addRubberBand(self): self.m_rubberband = self.addRect(QRectF(0, 0, 0, 0)) self.m_rubberband.setZValue(-1) @@ -1190,6 +1193,30 @@ class PatchScene(QGraphicsScene): self.m_view.resetTransform() self.scaleChanged.emit(1.0) + @pyqtSlot() + def slot_selectionChanged(self): + items_list = self.selectedItems() + + if len(items_list) == 0: + self.pluginSelected.emit([]) + return + + plugin_list = [] + + for item in items_list: + if item and item.isVisible(): + group_item = None + + if item.type() == CanvasBoxType: + group_item = item + elif item.type() == CanvasPortType: + group_item = item.parentItem() + + if group_item is not None and group_item.m_plugin_id >= 0: + plugin_list.append(group_item.m_plugin_id) + + self.pluginSelected.emit(plugin_list) + def keyPressEvent(self, event): if not self.m_view: return event.ignore()