| @@ -102,26 +102,7 @@ class CarlaMultiW(QTabWidget): | |||||
| host.PluginUnavailableCallback.connect(self.fRack.slot_handlePluginUnavailableCallback) | host.PluginUnavailableCallback.connect(self.fRack.slot_handlePluginUnavailableCallback) | ||||
| host.PluginUnavailableCallback.connect(self.fPatchbay.slot_handlePluginUnavailableCallback) | host.PluginUnavailableCallback.connect(self.fPatchbay.slot_handlePluginUnavailableCallback) | ||||
| host.ParameterValueChangedCallback.connect(self.fRack.slot_handleParameterValueChangedCallback) | |||||
| host.ParameterValueChangedCallback.connect(self.fPatchbay.slot_handleParameterValueChangedCallback) | |||||
| host.ParameterDefaultChangedCallback.connect(self.fRack.slot_handleParameterDefaultChangedCallback) | |||||
| host.ParameterMidiChannelChangedCallback.connect(self.fRack.slot_handleParameterMidiChannelChangedCallback) | |||||
| host.ParameterMidiCcChangedCallback.connect(self.fRack.slot_handleParameterMidiCcChangedCallback) | |||||
| host.ProgramChangedCallback.connect(self.fRack.slot_handleProgramChangedCallback) | |||||
| host.MidiProgramChangedCallback.connect(self.fRack.slot_handleMidiProgramChangedCallback) | |||||
| host.OptionChangedCallback.connect(self.fRack.slot_handleOptionChangedCallback) | |||||
| host.UiStateChangedCallback.connect(self.fRack.slot_handleUiStateChangedCallback) | |||||
| host.NoteOnCallback.connect(self.fRack.slot_handleNoteOnCallback) | |||||
| host.NoteOnCallback.connect(self.fPatchbay.slot_handleNoteOnCallback) | |||||
| host.NoteOffCallback.connect(self.fRack.slot_handleNoteOffCallback) | |||||
| host.NoteOffCallback.connect(self.fPatchbay.slot_handleNoteOffCallback) | |||||
| host.UpdateCallback.connect(self.fRack.slot_handleUpdateCallback) | |||||
| host.ReloadInfoCallback.connect(self.fRack.slot_handleReloadInfoCallback) | |||||
| host.ReloadParametersCallback.connect(self.fRack.slot_handleReloadParametersCallback) | |||||
| host.ReloadParametersCallback.connect(self.fPatchbay.slot_handleReloadParametersCallback) | |||||
| host.ReloadProgramsCallback.connect(self.fRack.slot_handleReloadProgramsCallback) | |||||
| host.ReloadAllCallback.connect(self.fRack.slot_handleReloadAllCallback) | host.ReloadAllCallback.connect(self.fRack.slot_handleReloadAllCallback) | ||||
| host.ReloadAllCallback.connect(self.fPatchbay.slot_handleReloadAllCallback) | |||||
| host.PatchbayClientAddedCallback.connect(self.fPatchbay.slot_handlePatchbayClientAddedCallback) | host.PatchbayClientAddedCallback.connect(self.fPatchbay.slot_handlePatchbayClientAddedCallback) | ||||
| host.PatchbayClientRemovedCallback.connect(self.fPatchbay.slot_handlePatchbayClientRemovedCallback) | host.PatchbayClientRemovedCallback.connect(self.fPatchbay.slot_handlePatchbayClientRemovedCallback) | ||||
| @@ -31,9 +31,9 @@ from platform import architecture | |||||
| from sys import platform, maxsize | from sys import platform, maxsize | ||||
| if config_UseQt5: | if config_UseQt5: | ||||
| from PyQt5.QtCore import pyqtSignal, QObject | |||||
| from PyQt5.QtCore import pyqtSignal, pyqtWrapperType, QObject | |||||
| else: | else: | ||||
| from PyQt4.QtCore import pyqtSignal, QObject | |||||
| from PyQt4.QtCore import pyqtSignal, pyqtWrapperType, QObject | |||||
| # ------------------------------------------------------------------------------------------------------------ | # ------------------------------------------------------------------------------------------------------------ | ||||
| # 64bit check | # 64bit check | ||||
| @@ -1244,11 +1244,17 @@ elif WINDOWS: | |||||
| else: | else: | ||||
| BINARY_NATIVE = BINARY_OTHER | BINARY_NATIVE = BINARY_OTHER | ||||
| # ------------------------------------------------------------------------------------------------------------ | |||||
| # An empty class used to resolve metaclass conflicts between ABC and PyQt modules | |||||
| class PyQtMetaClass(pyqtWrapperType, ABCMeta): | |||||
| pass | |||||
| # ------------------------------------------------------------------------------------------------------------ | # ------------------------------------------------------------------------------------------------------------ | ||||
| # Carla Host object (Meta) | # Carla Host object (Meta) | ||||
| class CarlaHostMeta(QObject): | class CarlaHostMeta(QObject): | ||||
| #class CarlaHostMeta(QObject, metaclass=ABCMeta): | |||||
| #class CarlaHostMeta(QObject, metaclass=PyQtMetaClass): | |||||
| # signals | # signals | ||||
| DebugCallback = pyqtSignal(int, int, int, float, str) | DebugCallback = pyqtSignal(int, int, int, float, str) | ||||
| PluginAddedCallback = pyqtSignal(int, str) | PluginAddedCallback = pyqtSignal(int, str) | ||||
| @@ -2820,7 +2826,7 @@ class PluginStoreInfo(object): | |||||
| # Carla Host object for plugins (using pipes) | # Carla Host object for plugins (using pipes) | ||||
| class CarlaHostPlugin(CarlaHostMeta): | class CarlaHostPlugin(CarlaHostMeta): | ||||
| #class CarlaHostPlugin(CarlaHostMeta, metaclass=ABCMeta): | |||||
| #class CarlaHostPlugin(CarlaHostMeta, metaclass=PyQtMetaClass): | |||||
| def __init__(self): | def __init__(self): | ||||
| CarlaHostMeta.__init__(self) | CarlaHostMeta.__init__(self) | ||||
| @@ -62,18 +62,6 @@ class HostWidgetMeta(object): | |||||
| # -------------------------------------------------------------------------------------------------------- | # -------------------------------------------------------------------------------------------------------- | ||||
| #def addPlugin(self, pluginId, isProjectLoading): | |||||
| #raise NotImplementedError | |||||
| #def removePlugin(self, pluginId): | |||||
| #raise NotImplementedError | |||||
| #def renamePlugin(self, pluginId, newName): | |||||
| #raise NotImplementedError | |||||
| #def disablePlugin(self, pluginId, errorMsg): | |||||
| #raise NotImplementedError | |||||
| def removeAllPlugins(self): | def removeAllPlugins(self): | ||||
| raise NotImplementedError | raise NotImplementedError | ||||
| @@ -297,8 +285,7 @@ class HostWindow(QMainWindow): | |||||
| self.fLadspaRdfNeedsUpdate = True | self.fLadspaRdfNeedsUpdate = True | ||||
| def openSettingsWindow(self, hasCanvas, hasCanvasGL): | def openSettingsWindow(self, hasCanvas, hasCanvasGL): | ||||
| hasEngine = bool(self.fSessionManagerName != "Non Session Manager") | |||||
| dialog = CarlaSettingsW(self, self.host, hasCanvas, hasCanvasGL, hasEngine) | |||||
| dialog = CarlaSettingsW(self, self.host, hasCanvas, hasCanvasGL) | |||||
| return dialog.exec_() | return dialog.exec_() | ||||
| def setupContainer(self, showCanvas, canvasThemeData = []): | def setupContainer(self, showCanvas, canvasThemeData = []): | ||||
| @@ -1070,16 +1057,13 @@ def engineCallback(host, action, pluginId, value1, value2, value3, valueStr): | |||||
| # FIXME | # FIXME | ||||
| if host is None: host = gCarla.gui.host | if host is None: host = gCarla.gui.host | ||||
| if action in (ENGINE_CALLBACK_ENGINE_STARTED, | |||||
| ENGINE_CALLBACK_PROCESS_MODE_CHANGED, | |||||
| ENGINE_CALLBACK_TRANSPORT_MODE_CHANGED): | |||||
| if action == ENGINE_CALLBACK_ENGINE_STARTED: | |||||
| host.processMode = value1 | |||||
| host.transportMode = value2 | |||||
| elif action == ENGINE_CALLBACK_PROCESS_MODE_CHANGED: | |||||
| host.processMode = value1 | |||||
| elif action == ENGINE_CALLBACK_TRANSPORT_MODE_CHANGED: | |||||
| host.transportMode = value1 | |||||
| if action == ENGINE_CALLBACK_ENGINE_STARTED: | |||||
| host.processMode = value1 | |||||
| host.transportMode = value2 | |||||
| elif action == ENGINE_CALLBACK_PROCESS_MODE_CHANGED: | |||||
| host.processMode = value1 | |||||
| elif action == ENGINE_CALLBACK_TRANSPORT_MODE_CHANGED: | |||||
| host.transportMode = value1 | |||||
| valueStr = charPtrToString(valueStr) | valueStr = charPtrToString(valueStr) | ||||
| @@ -235,20 +235,6 @@ class CarlaPatchbayW(QFrame, PluginEditParentMeta): | |||||
| host.PluginRemovedCallback.connect(self.slot_handlePluginRemovedCallback) | host.PluginRemovedCallback.connect(self.slot_handlePluginRemovedCallback) | ||||
| host.PluginRenamedCallback.connect(self.slot_handlePluginRenamedCallback) | host.PluginRenamedCallback.connect(self.slot_handlePluginRenamedCallback) | ||||
| host.PluginUnavailableCallback.connect(self.slot_handlePluginUnavailableCallback) | host.PluginUnavailableCallback.connect(self.slot_handlePluginUnavailableCallback) | ||||
| host.ParameterValueChangedCallback.connect(self.slot_handleParameterValueChangedCallback) | |||||
| host.ParameterDefaultChangedCallback.connect(self.slot_handleParameterDefaultChangedCallback) | |||||
| host.ParameterMidiChannelChangedCallback.connect(self.slot_handleParameterMidiChannelChangedCallback) | |||||
| host.ParameterMidiCcChangedCallback.connect(self.slot_handleParameterMidiCcChangedCallback) | |||||
| host.ProgramChangedCallback.connect(self.slot_handleProgramChangedCallback) | |||||
| host.MidiProgramChangedCallback.connect(self.slot_handleMidiProgramChangedCallback) | |||||
| host.OptionChangedCallback.connect(self.slot_handleOptionChangedCallback) | |||||
| host.NoteOnCallback.connect(self.slot_handleNoteOnCallback) | |||||
| host.NoteOffCallback.connect(self.slot_handleNoteOffCallback) | |||||
| host.UpdateCallback.connect(self.slot_handleUpdateCallback) | |||||
| host.ReloadInfoCallback.connect(self.slot_handleReloadInfoCallback) | |||||
| host.ReloadParametersCallback.connect(self.slot_handleReloadParametersCallback) | |||||
| host.ReloadProgramsCallback.connect(self.slot_handleReloadProgramsCallback) | |||||
| host.ReloadAllCallback.connect(self.slot_handleReloadAllCallback) | |||||
| host.PatchbayClientAddedCallback.connect(self.slot_handlePatchbayClientAddedCallback) | host.PatchbayClientAddedCallback.connect(self.slot_handlePatchbayClientAddedCallback) | ||||
| host.PatchbayClientRemovedCallback.connect(self.slot_handlePatchbayClientRemovedCallback) | host.PatchbayClientRemovedCallback.connect(self.slot_handlePatchbayClientRemovedCallback) | ||||
| host.PatchbayClientRenamedCallback.connect(self.slot_handlePatchbayClientRenamedCallback) | host.PatchbayClientRenamedCallback.connect(self.slot_handlePatchbayClientRenamedCallback) | ||||
| @@ -266,7 +252,8 @@ class CarlaPatchbayW(QFrame, PluginEditParentMeta): | |||||
| # ----------------------------------------------------------------- | # ----------------------------------------------------------------- | ||||
| def addPlugin(self, pluginId, isProjectLoading): | |||||
| @pyqtSlot(int, str) | |||||
| def slot_handlePluginAddedCallback(self, pluginId, pluginName): | |||||
| if self.fIsOnlyPatchbay: | if self.fIsOnlyPatchbay: | ||||
| pitem = PluginEdit(self, self.host, pluginId) | pitem = PluginEdit(self, self.host, pluginId) | ||||
| else: | else: | ||||
| @@ -275,10 +262,11 @@ class CarlaPatchbayW(QFrame, PluginEditParentMeta): | |||||
| self.fPluginList.append(pitem) | self.fPluginList.append(pitem) | ||||
| self.fPluginCount += 1 | self.fPluginCount += 1 | ||||
| if self.fIsOnlyPatchbay and not isProjectLoading: | |||||
| if self.fIsOnlyPatchbay and not self.fParent.isProjectLoading(): | |||||
| self.host.set_active(pluginId, True) | self.host.set_active(pluginId, True) | ||||
| def removePlugin(self, pluginId): | |||||
| @pyqtSlot(int) | |||||
| def slot_handlePluginRemovedCallback(self, pluginId): | |||||
| patchcanvas.handlePluginRemoved(pluginId) | patchcanvas.handlePluginRemoved(pluginId) | ||||
| if pluginId in self.fSelectedPlugins: | if pluginId in self.fSelectedPlugins: | ||||
| @@ -300,9 +288,10 @@ class CarlaPatchbayW(QFrame, PluginEditParentMeta): | |||||
| # push all plugins 1 slot back | # push all plugins 1 slot back | ||||
| for i in range(pluginId, self.fPluginCount): | for i in range(pluginId, self.fPluginCount): | ||||
| pitem = self.fPluginList[i] | pitem = self.fPluginList[i] | ||||
| pitem.setId(i) | |||||
| pitem.setPluginId(i) | |||||
| def renamePlugin(self, pluginId, newName): | |||||
| @pyqtSlot(int, str) | |||||
| def slot_handlePluginRenamedCallback(self, pluginId, newName): | |||||
| if pluginId >= self.fPluginCount: | if pluginId >= self.fPluginCount: | ||||
| return | return | ||||
| @@ -312,7 +301,8 @@ class CarlaPatchbayW(QFrame, PluginEditParentMeta): | |||||
| pitem.setName(newName) | pitem.setName(newName) | ||||
| def disablePlugin(self, pluginId, errorMsg): | |||||
| @pyqtSlot(int, str) | |||||
| def slot_handlePluginUnavailableCallback(self, pluginId, errorMsg): | |||||
| if pluginId >= self.fPluginCount: | if pluginId >= self.fPluginCount: | ||||
| return | return | ||||
| @@ -320,6 +310,8 @@ class CarlaPatchbayW(QFrame, PluginEditParentMeta): | |||||
| if pitem is None: | if pitem is None: | ||||
| return | return | ||||
| # ----------------------------------------------------------------- | |||||
| def removeAllPlugins(self): | def removeAllPlugins(self): | ||||
| for pitem in self.fPluginList: | for pitem in self.fPluginList: | ||||
| if pitem is None: | if pitem is None: | ||||
| @@ -681,198 +673,6 @@ class CarlaPatchbayW(QFrame, PluginEditParentMeta): | |||||
| # ----------------------------------------------------------------- | # ----------------------------------------------------------------- | ||||
| @pyqtSlot(int, str) | |||||
| def slot_handlePluginAddedCallback(self, pluginId, pluginName): | |||||
| self.addPlugin(pluginId, self.fParent.isProjectLoading()) | |||||
| @pyqtSlot(int) | |||||
| def slot_handlePluginRemovedCallback(self, pluginId): | |||||
| self.removePlugin(pluginId) | |||||
| @pyqtSlot(int, str) | |||||
| def slot_handlePluginRenamedCallback(self, pluginId, newName): | |||||
| self.renamePlugin(pluginId, newName) | |||||
| @pyqtSlot(int, str) | |||||
| def slot_handlePluginUnavailableCallback(self, pluginId, errorMsg): | |||||
| self.disablePlugin(pluginId, errorMsg) | |||||
| # ----------------------------------------------------------------- | |||||
| @pyqtSlot(int, int, float) | |||||
| def slot_handleParameterValueChangedCallback(self, pluginId, index, value): | |||||
| if pluginId >= self.fPluginCount: | |||||
| return | |||||
| pitem = self.fPluginList[pluginId] | |||||
| if pitem is None: | |||||
| return | |||||
| pitem.setParameterValue(index, value) | |||||
| @pyqtSlot(int, int, float) | |||||
| def slot_handleParameterDefaultChangedCallback(self, pluginId, index, value): | |||||
| if pluginId >= self.fPluginCount: | |||||
| return | |||||
| pitem = self.fPluginList[pluginId] | |||||
| if pitem is None: | |||||
| return | |||||
| pitem.setParameterDefault(index, value) | |||||
| @pyqtSlot(int, int, int) | |||||
| def slot_handleParameterMidiCcChangedCallback(self, pluginId, index, cc): | |||||
| if pluginId >= self.fPluginCount: | |||||
| return | |||||
| pitem = self.fPluginList[pluginId] | |||||
| if pitem is None: | |||||
| return | |||||
| pitem.setParameterMidiControl(index, cc) | |||||
| @pyqtSlot(int, int, int) | |||||
| def slot_handleParameterMidiChannelChangedCallback(self, pluginId, index, channel): | |||||
| if pluginId >= self.fPluginCount: | |||||
| return | |||||
| pitem = self.fPluginList[pluginId] | |||||
| if pitem is None: | |||||
| return | |||||
| pitem.setParameterMidiChannel(index, channel) | |||||
| # ----------------------------------------------------------------- | |||||
| @pyqtSlot(int, int) | |||||
| def slot_handleProgramChangedCallback(self, pluginId, index): | |||||
| if pluginId >= self.fPluginCount: | |||||
| return | |||||
| pitem = self.fPluginList[pluginId] | |||||
| if pitem is None: | |||||
| return | |||||
| pitem.setProgram(index) | |||||
| @pyqtSlot(int, int) | |||||
| def slot_handleMidiProgramChangedCallback(self, pluginId, index): | |||||
| if pluginId >= self.fPluginCount: | |||||
| return | |||||
| pitem = self.fPluginList[pluginId] | |||||
| if pitem is None: | |||||
| return | |||||
| pitem.setMidiProgram(index) | |||||
| # ----------------------------------------------------------------- | |||||
| @pyqtSlot(int, int, bool) | |||||
| def slot_handleOptionChangedCallback(self, pluginId, option, yesNo): | |||||
| if pluginId >= self.fPluginCount: | |||||
| return | |||||
| pitem = self.fPluginList[pluginId] | |||||
| if pitem is None: | |||||
| return | |||||
| pitem.setOption(option, yesNo) | |||||
| # ----------------------------------------------------------------- | |||||
| @pyqtSlot(int, int, int, int) | |||||
| def slot_handleNoteOnCallback(self, pluginId, channel, note, velo): | |||||
| if pluginId in self.fSelectedPlugins: | |||||
| self.fKeys.keyboard.sendNoteOn(note, False) | |||||
| if not self.fIsOnlyPatchbay: | |||||
| return | |||||
| if pluginId >= self.fPluginCount: | |||||
| return | |||||
| pitem = self.fPluginList[pluginId] | |||||
| if pitem is None: | |||||
| return | |||||
| pitem.sendNoteOn(channel, note) | |||||
| @pyqtSlot(int, int, int) | |||||
| def slot_handleNoteOffCallback(self, pluginId, channel, note): | |||||
| if pluginId in self.fSelectedPlugins: | |||||
| self.fKeys.keyboard.sendNoteOff(note, False) | |||||
| if not self.fIsOnlyPatchbay: | |||||
| return | |||||
| if pluginId >= self.fPluginCount: | |||||
| return | |||||
| pitem = self.fPluginList[pluginId] | |||||
| if pitem is None: | |||||
| return | |||||
| pitem.sendNoteOff(channel, note) | |||||
| # ----------------------------------------------------------------- | |||||
| @pyqtSlot(int) | |||||
| def slot_handleUpdateCallback(self, pluginId): | |||||
| if pluginId >= self.fPluginCount: | |||||
| return | |||||
| pitem = self.fPluginList[pluginId] | |||||
| if pitem is None: | |||||
| return | |||||
| pitem.updateInfo() | |||||
| @pyqtSlot(int) | |||||
| def slot_handleReloadInfoCallback(self, pluginId): | |||||
| if pluginId >= self.fPluginCount: | |||||
| return | |||||
| pitem = self.fPluginList[pluginId] | |||||
| if pitem is None: | |||||
| return | |||||
| pitem.reloadInfo() | |||||
| @pyqtSlot(int) | |||||
| def slot_handleReloadParametersCallback(self, pluginId): | |||||
| if pluginId >= self.fPluginCount: | |||||
| return | |||||
| pitem = self.fPluginList[pluginId] | |||||
| if pitem is None: | |||||
| return | |||||
| pitem.reloadParameters() | |||||
| @pyqtSlot(int) | |||||
| def slot_handleReloadProgramsCallback(self, pluginId): | |||||
| if pluginId >= self.fPluginCount: | |||||
| return | |||||
| pitem = self.fPluginList[pluginId] | |||||
| if pitem is None: | |||||
| return | |||||
| pitem.reloadPrograms() | |||||
| @pyqtSlot(int) | |||||
| def slot_handleReloadAllCallback(self, pluginId): | |||||
| if pluginId >= self.fPluginCount: | |||||
| return | |||||
| pitem = self.fPluginList[pluginId] | |||||
| if pitem is None: | |||||
| return | |||||
| pitem.reloadAll() | |||||
| # ----------------------------------------------------------------- | |||||
| @pyqtSlot(int, int, int, str) | @pyqtSlot(int, int, int, str) | ||||
| def slot_handlePatchbayClientAddedCallback(self, clientId, clientIcon, pluginId, clientName): | def slot_handlePatchbayClientAddedCallback(self, clientId, clientIcon, pluginId, clientName): | ||||
| pcSplit = patchcanvas.SPLIT_UNDEF | pcSplit = patchcanvas.SPLIT_UNDEF | ||||
| @@ -43,35 +43,58 @@ from carla_skin import * | |||||
| class CarlaRackItem(QListWidgetItem): | class CarlaRackItem(QListWidgetItem): | ||||
| kRackItemType = QListWidgetItem.UserType + 1 | kRackItemType = QListWidgetItem.UserType + 1 | ||||
| def __init__(self, parent, pluginId): | |||||
| def __init__(self, parent, pluginId, useSkins): | |||||
| QListWidgetItem.__init__(self, parent, self.kRackItemType) | QListWidgetItem.__init__(self, parent, self.kRackItemType) | ||||
| self.fParent = parent | |||||
| # ---------------------------------------------------------------------------------------------------- | |||||
| # Internal stuff | |||||
| self.fParent = parent | |||||
| self.fPluginId = pluginId | |||||
| self.fUseSkins = useSkins | |||||
| self.fWidget = None | |||||
| self.setFlags(Qt.ItemIsSelectable|Qt.ItemIsEnabled) | self.setFlags(Qt.ItemIsSelectable|Qt.ItemIsEnabled) | ||||
| #self.setFlags(Qt.ItemIsSelectable|Qt.ItemIsEnabled|Qt.ItemIsDragEnabled|Qt.ItemIsDropEnabled) | #self.setFlags(Qt.ItemIsSelectable|Qt.ItemIsEnabled|Qt.ItemIsDragEnabled|Qt.ItemIsDropEnabled) | ||||
| self.createWidget(pluginId) | |||||
| # ---------------------------------------------------------------------------------------------------- | |||||
| # Set-up GUI | |||||
| # ----------------------------------------------------------------- | |||||
| self.recreateWidget() | |||||
| def createWidget(self, pluginId): | |||||
| self.widget = createPluginSlot(self.fParent, self.fParent.host, pluginId, True) # FIXME useSkins opt | |||||
| self.widget.setFixedHeight(self.widget.getFixedHeight()) | |||||
| if False: | |||||
| self.fWidget = AbstractPluginSlot(parent, parent.host, pluginId) | |||||
| self.setSizeHint(QSize(640, self.widget.getFixedHeight())) | |||||
| # -------------------------------------------------------------------------------------------------------- | |||||
| self.fParent.setItemWidget(self, self.widget) | |||||
| def setPluginId(self, pluginId): | |||||
| self.fPluginId = pluginId | |||||
| self.fWidget.setPluginId(pluginId) | |||||
| # ----------------------------------------------------------------- | |||||
| # -------------------------------------------------------------------------------------------------------- | |||||
| def getEditDialog(self): | |||||
| return self.fWidget.fEditDialog | |||||
| def closeEditDialog(self): | |||||
| self.fWidget.fEditDialog.close() | |||||
| def close(self): | |||||
| self.widget.fEditDialog.close() | |||||
| # -------------------------------------------------------------------------------------------------------- | |||||
| def reloadAll(self, pluginId): | |||||
| self.widget.fEditDialog.close() | |||||
| del self.widget | |||||
| self.createWidget(pluginId) | |||||
| def getWidget(self): | |||||
| return self.fWidget | |||||
| def recreateWidget(self): | |||||
| if self.fWidget is not None: | |||||
| #self.fWidget.fEditDialog.close() | |||||
| del self.fWidget | |||||
| self.fWidget = createPluginSlot(self.fParent, self.fParent.host, self.fPluginId, self.fUseSkins) | |||||
| self.fWidget.setFixedHeight(self.fWidget.getFixedHeight()) | |||||
| self.setSizeHint(QSize(640, self.fWidget.getFixedHeight())) | |||||
| self.fParent.setItemWidget(self, self.fWidget) | |||||
| # ------------------------------------------------------------------------------------------------------------ | # ------------------------------------------------------------------------------------------------------------ | ||||
| # Rack widget list | # Rack widget list | ||||
| @@ -311,83 +334,64 @@ class CarlaRackW(QFrame): | |||||
| host.PluginRemovedCallback.connect(self.slot_handlePluginRemovedCallback) | host.PluginRemovedCallback.connect(self.slot_handlePluginRemovedCallback) | ||||
| host.PluginRenamedCallback.connect(self.slot_handlePluginRenamedCallback) | host.PluginRenamedCallback.connect(self.slot_handlePluginRenamedCallback) | ||||
| host.PluginUnavailableCallback.connect(self.slot_handlePluginUnavailableCallback) | host.PluginUnavailableCallback.connect(self.slot_handlePluginUnavailableCallback) | ||||
| host.ParameterValueChangedCallback.connect(self.slot_handleParameterValueChangedCallback) | |||||
| host.ParameterDefaultChangedCallback.connect(self.slot_handleParameterDefaultChangedCallback) | |||||
| host.ParameterMidiChannelChangedCallback.connect(self.slot_handleParameterMidiChannelChangedCallback) | |||||
| host.ParameterMidiCcChangedCallback.connect(self.slot_handleParameterMidiCcChangedCallback) | |||||
| host.ProgramChangedCallback.connect(self.slot_handleProgramChangedCallback) | |||||
| host.MidiProgramChangedCallback.connect(self.slot_handleMidiProgramChangedCallback) | |||||
| host.OptionChangedCallback.connect(self.slot_handleOptionChangedCallback) | |||||
| host.UiStateChangedCallback.connect(self.slot_handleUiStateChangedCallback) | |||||
| host.NoteOnCallback.connect(self.slot_handleNoteOnCallback) | |||||
| host.NoteOffCallback.connect(self.slot_handleNoteOffCallback) | |||||
| host.UpdateCallback.connect(self.slot_handleUpdateCallback) | |||||
| host.ReloadInfoCallback.connect(self.slot_handleReloadInfoCallback) | |||||
| host.ReloadParametersCallback.connect(self.slot_handleReloadParametersCallback) | |||||
| host.ReloadProgramsCallback.connect(self.slot_handleReloadProgramsCallback) | |||||
| host.ReloadAllCallback.connect(self.slot_handleReloadAllCallback) | host.ReloadAllCallback.connect(self.slot_handleReloadAllCallback) | ||||
| # ----------------------------------------------------------------- | # ----------------------------------------------------------------- | ||||
| def addPlugin(self, pluginId, isProjectLoading): | |||||
| pitem = CarlaRackItem(self.fRack, pluginId) | |||||
| @pyqtSlot(int, str) | |||||
| def slot_handlePluginAddedCallback(self, pluginId, pluginName): | |||||
| pitem = CarlaRackItem(self.fRack, pluginId, self.fParent.getSavedSettings()[CARLA_KEY_MAIN_USE_CUSTOM_SKINS]) | |||||
| self.fPluginList.append(pitem) | self.fPluginList.append(pitem) | ||||
| self.fPluginCount += 1 | self.fPluginCount += 1 | ||||
| if not isProjectLoading: | |||||
| pitem.widget.setActive(True, True, True) | |||||
| if not self.fParent.isProjectLoading(): | |||||
| pitem.getWidget().setActive(True, True, True) | |||||
| def removePlugin(self, pluginId): | |||||
| if pluginId >= self.fPluginCount: | |||||
| return | |||||
| pitem = self.fPluginList[pluginId] | |||||
| if pitem is None: | |||||
| return | |||||
| @pyqtSlot(int) | |||||
| def slot_handlePluginRemovedCallback(self, pluginId): | |||||
| pitem = self.getPluginItem(pluginId) | |||||
| self.fPluginCount -= 1 | self.fPluginCount -= 1 | ||||
| self.fPluginList.pop(pluginId) | self.fPluginList.pop(pluginId) | ||||
| self.fRack.takeItem(pluginId) | self.fRack.takeItem(pluginId) | ||||
| pitem.close() | |||||
| del pitem | |||||
| if pitem is not None: | |||||
| pitem.closeEditDialog() | |||||
| del pitem | |||||
| # push all plugins 1 slot back | # push all plugins 1 slot back | ||||
| for i in range(pluginId, self.fPluginCount): | for i in range(pluginId, self.fPluginCount): | ||||
| pitem = self.fPluginList[i] | pitem = self.fPluginList[i] | ||||
| pitem.widget.setId(i) | |||||
| pitem.setPluginId(i) | |||||
| def renamePlugin(self, pluginId, newName): | |||||
| if pluginId >= self.fPluginCount: | |||||
| return | |||||
| @pyqtSlot(int, str) | |||||
| def slot_handlePluginRenamedCallback(self, pluginId, newName): | |||||
| widget = self.getPluginSlotWidget(pluginId) | |||||
| pitem = self.fPluginList[pluginId] | |||||
| if pitem is None: | |||||
| if widget is None: | |||||
| return | return | ||||
| pitem.widget.setName(newName) | |||||
| widget.setName(newName) | |||||
| def disablePlugin(self, pluginId, errorMsg): | |||||
| if pluginId >= self.fPluginCount: | |||||
| return | |||||
| @pyqtSlot(int, str) | |||||
| def slot_handlePluginUnavailableCallback(self, pluginId, errorMsg): | |||||
| widget = self.getPluginSlotWidget(pluginId) | |||||
| pitem = self.fPluginList[pluginId] | |||||
| if pitem is None: | |||||
| if widget is None: | |||||
| return | return | ||||
| # ----------------------------------------------------------------- | |||||
| def removeAllPlugins(self): | def removeAllPlugins(self): | ||||
| while self.fRack.takeItem(0): | while self.fRack.takeItem(0): | ||||
| pass | pass | ||||
| for i in range(self.fPluginCount): | |||||
| pitem = self.fPluginList[i] | |||||
| for pitem in self.fPluginList: | |||||
| if pitem is None: | if pitem is None: | ||||
| break | break | ||||
| pitem.close() | |||||
| pitem.closeEditDialog() | |||||
| del pitem | del pitem | ||||
| self.fPluginCount = 0 | self.fPluginCount = 0 | ||||
| @@ -404,22 +408,18 @@ class CarlaRackW(QFrame): | |||||
| # ----------------------------------------------------------------- | # ----------------------------------------------------------------- | ||||
| def idleFast(self): | def idleFast(self): | ||||
| for i in range(self.fPluginCount): | |||||
| pitem = self.fPluginList[i] | |||||
| for pitem in self.fPluginList: | |||||
| if pitem is None: | if pitem is None: | ||||
| break | break | ||||
| pitem.widget.idleFast() | |||||
| pitem.getWidget().idleFast() | |||||
| def idleSlow(self): | def idleSlow(self): | ||||
| for i in range(self.fPluginCount): | |||||
| pitem = self.fPluginList[i] | |||||
| for pitem in self.fPluginList: | |||||
| if pitem is None: | if pitem is None: | ||||
| break | break | ||||
| pitem.widget.idleSlow() | |||||
| pitem.getWidget().idleSlow() | |||||
| # ----------------------------------------------------------------- | # ----------------------------------------------------------------- | ||||
| @@ -435,14 +435,12 @@ class CarlaRackW(QFrame): | |||||
| pass | pass | ||||
| def showEditDialog(self, pluginId): | def showEditDialog(self, pluginId): | ||||
| if pluginId >= self.fPluginCount: | |||||
| return | |||||
| dialog = self.getPluginEditDialog(pluginId) | |||||
| pitem = self.fPluginList[pluginId] | |||||
| if pitem is None: | |||||
| if dialog is None: | |||||
| return | return | ||||
| pitem.widget.slot_showEditDialog(True) | |||||
| dialog.show() | |||||
| # ----------------------------------------------------------------- | # ----------------------------------------------------------------- | ||||
| @@ -451,86 +449,79 @@ class CarlaRackW(QFrame): | |||||
| if not self.host.is_engine_running(): | if not self.host.is_engine_running(): | ||||
| return | return | ||||
| for i in range(self.fPluginCount): | |||||
| pitem = self.fPluginList[i] | |||||
| for pitem in self.fPluginList: | |||||
| if pitem is None: | if pitem is None: | ||||
| break | break | ||||
| pitem.widget.setActive(True, True, True) | |||||
| pitem.getWidget().setActive(True, True, True) | |||||
| @pyqtSlot() | @pyqtSlot() | ||||
| def slot_pluginsDisable(self): | def slot_pluginsDisable(self): | ||||
| if not self.host.is_engine_running(): | if not self.host.is_engine_running(): | ||||
| return | return | ||||
| for i in range(self.fPluginCount): | |||||
| pitem = self.fPluginList[i] | |||||
| for pitem in self.fPluginList: | |||||
| if pitem is None: | if pitem is None: | ||||
| break | break | ||||
| pitem.widget.setActive(False, True, True) | |||||
| pitem.getWidget().setActive(False, True, True) | |||||
| @pyqtSlot() | @pyqtSlot() | ||||
| def slot_pluginsVolume100(self): | def slot_pluginsVolume100(self): | ||||
| if not self.host.is_engine_running(): | if not self.host.is_engine_running(): | ||||
| return | return | ||||
| for i in range(self.fPluginCount): | |||||
| pitem = self.fPluginList[i] | |||||
| for pitem in self.fPluginList: | |||||
| if pitem is None: | if pitem is None: | ||||
| break | break | ||||
| pitem.widget.setInternalParameter(PLUGIN_CAN_VOLUME, 1.0) | |||||
| pitem.getWidget().setInternalParameter(PLUGIN_CAN_VOLUME, 1.0) | |||||
| @pyqtSlot() | @pyqtSlot() | ||||
| def slot_pluginsMute(self): | def slot_pluginsMute(self): | ||||
| if not self.host.is_engine_running(): | if not self.host.is_engine_running(): | ||||
| return | return | ||||
| for i in range(self.fPluginCount): | |||||
| pitem = self.fPluginList[i] | |||||
| for pitem in self.fPluginList: | |||||
| if pitem is None: | if pitem is None: | ||||
| break | break | ||||
| pitem.widget.setInternalParameter(PLUGIN_CAN_VOLUME, 0.0) | |||||
| pitem.getWidget().setInternalParameter(PLUGIN_CAN_VOLUME, 0.0) | |||||
| @pyqtSlot() | @pyqtSlot() | ||||
| def slot_pluginsWet100(self): | def slot_pluginsWet100(self): | ||||
| if not self.host.is_engine_running(): | if not self.host.is_engine_running(): | ||||
| return | return | ||||
| for i in range(self.fPluginCount): | |||||
| pitem = self.fPluginList[i] | |||||
| for pitem in self.fPluginList: | |||||
| if pitem is None: | if pitem is None: | ||||
| break | break | ||||
| pitem.widget.setInternalParameter(PLUGIN_CAN_DRYWET, 1.0) | |||||
| pitem.getWidget().setInternalParameter(PLUGIN_CAN_DRYWET, 1.0) | |||||
| @pyqtSlot() | @pyqtSlot() | ||||
| def slot_pluginsBypass(self): | def slot_pluginsBypass(self): | ||||
| if not self.host.is_engine_running(): | if not self.host.is_engine_running(): | ||||
| return | return | ||||
| for i in range(self.fPluginCount): | |||||
| pitem = self.fPluginList[i] | |||||
| for pitem in self.fPluginList: | |||||
| if pitem is None: | if pitem is None: | ||||
| break | break | ||||
| pitem.widget.setInternalParameter(PLUGIN_CAN_DRYWET, 0.0) | |||||
| pitem.getWidget().setInternalParameter(PLUGIN_CAN_DRYWET, 0.0) | |||||
| @pyqtSlot() | @pyqtSlot() | ||||
| def slot_pluginsCenter(self): | def slot_pluginsCenter(self): | ||||
| if not self.host.is_engine_running(): | if not self.host.is_engine_running(): | ||||
| return | return | ||||
| for i in range(self.fPluginCount): | |||||
| pitem = self.fPluginList[i] | |||||
| for pitem in self.fPluginList: | |||||
| if pitem is None: | if pitem is None: | ||||
| break | break | ||||
| pitem.widget.setInternalParameter(PARAMETER_BALANCE_LEFT, -1.0) | |||||
| pitem.widget.setInternalParameter(PARAMETER_BALANCE_RIGHT, 1.0) | |||||
| pitem.widget.setInternalParameter(PARAMETER_PANNING, 0.0) | |||||
| pitem.getWidget().setInternalParameter(PARAMETER_BALANCE_LEFT, -1.0) | |||||
| pitem.getWidget().setInternalParameter(PARAMETER_BALANCE_RIGHT, 1.0) | |||||
| pitem.getWidget().setInternalParameter(PARAMETER_PANNING, 0.0) | |||||
| # ----------------------------------------------------------------- | # ----------------------------------------------------------------- | ||||
| @@ -543,122 +534,8 @@ class CarlaRackW(QFrame): | |||||
| # ----------------------------------------------------------------- | # ----------------------------------------------------------------- | ||||
| @pyqtSlot(int, str) | |||||
| def slot_handlePluginAddedCallback(self, pluginId, pluginName): | |||||
| self.addPlugin(pluginId, self.fParent.isProjectLoading()) | |||||
| @pyqtSlot(int) | @pyqtSlot(int) | ||||
| def slot_handlePluginRemovedCallback(self, pluginId): | |||||
| self.removePlugin(pluginId) | |||||
| @pyqtSlot(int, str) | |||||
| def slot_handlePluginRenamedCallback(self, pluginId, newName): | |||||
| self.renamePlugin(pluginId, newName) | |||||
| @pyqtSlot(int, str) | |||||
| def slot_handlePluginUnavailableCallback(self, pluginId, errorMsg): | |||||
| self.disablePlugin(pluginId, errorMsg) | |||||
| # ----------------------------------------------------------------- | |||||
| @pyqtSlot(int, int, float) | |||||
| def slot_handleParameterValueChangedCallback(self, pluginId, index, value): | |||||
| if pluginId >= self.fPluginCount: | |||||
| return | |||||
| pitem = self.fPluginList[pluginId] | |||||
| if pitem is None: | |||||
| return | |||||
| pitem.widget.setParameterValue(index, value, True) | |||||
| @pyqtSlot(int, int, float) | |||||
| def slot_handleParameterDefaultChangedCallback(self, pluginId, index, value): | |||||
| if pluginId >= self.fPluginCount: | |||||
| return | |||||
| pitem = self.fPluginList[pluginId] | |||||
| if pitem is None: | |||||
| return | |||||
| pitem.widget.setParameterDefault(index, value) | |||||
| @pyqtSlot(int, int, int) | |||||
| def slot_handleParameterMidiCcChangedCallback(self, pluginId, index, cc): | |||||
| if pluginId >= self.fPluginCount: | |||||
| return | |||||
| pitem = self.fPluginList[pluginId] | |||||
| if pitem is None: | |||||
| return | |||||
| pitem.widget.setParameterMidiControl(index, cc) | |||||
| @pyqtSlot(int, int, int) | |||||
| def slot_handleParameterMidiChannelChangedCallback(self, pluginId, index, channel): | |||||
| if pluginId >= self.fPluginCount: | |||||
| return | |||||
| pitem = self.fPluginList[pluginId] | |||||
| if pitem is None: | |||||
| return | |||||
| pitem.widget.setParameterMidiChannel(index, channel) | |||||
| # ----------------------------------------------------------------- | |||||
| @pyqtSlot(int, int) | |||||
| def slot_handleProgramChangedCallback(self, pluginId, index): | |||||
| if pluginId >= self.fPluginCount: | |||||
| return | |||||
| pitem = self.fPluginList[pluginId] | |||||
| if pitem is None: | |||||
| return | |||||
| pitem.widget.setProgram(index, True) | |||||
| @pyqtSlot(int, int) | |||||
| def slot_handleMidiProgramChangedCallback(self, pluginId, index): | |||||
| if pluginId >= self.fPluginCount: | |||||
| return | |||||
| pitem = self.fPluginList[pluginId] | |||||
| if pitem is None: | |||||
| return | |||||
| pitem.widget.setMidiProgram(index, True) | |||||
| # ----------------------------------------------------------------- | |||||
| @pyqtSlot(int, int, bool) | |||||
| def slot_handleOptionChangedCallback(self, pluginId, option, yesNo): | |||||
| if pluginId >= self.fPluginCount: | |||||
| return | |||||
| pitem = self.fPluginList[pluginId] | |||||
| if pitem is None: | |||||
| return | |||||
| pitem.widget.setOption(option, yesNo) | |||||
| # ----------------------------------------------------------------- | |||||
| @pyqtSlot(int, int) | |||||
| def slot_handleUiStateChangedCallback(self, pluginId, state): | |||||
| if pluginId >= self.fPluginCount: | |||||
| return | |||||
| pitem = self.fPluginList[pluginId] | |||||
| if pitem is None: | |||||
| return | |||||
| pitem.widget.customUiStateChanged(state) | |||||
| # ----------------------------------------------------------------- | |||||
| @pyqtSlot(int, int, int, int) | |||||
| def slot_handleNoteOnCallback(self, pluginId, channel, note, velo): | |||||
| def slot_handleReloadAllCallback(self, pluginId): | |||||
| if pluginId >= self.fPluginCount: | if pluginId >= self.fPluginCount: | ||||
| return | return | ||||
| @@ -666,95 +543,65 @@ class CarlaRackW(QFrame): | |||||
| if pitem is None: | if pitem is None: | ||||
| return | return | ||||
| pitem.widget.sendNoteOn(channel, note) | |||||
| @pyqtSlot(int, int, int) | |||||
| def slot_handleNoteOffCallback(self, pluginId, channel, note): | |||||
| if pluginId >= self.fPluginCount: | |||||
| return | |||||
| pitem = self.fPluginList[pluginId] | |||||
| if pitem is None: | |||||
| return | |||||
| self.fRack.setCurrentRow(-1) | |||||
| self.fCurrentRow = -1 | |||||
| self.fLastSelectedItem = None | |||||
| pitem.widget.sendNoteOff(channel, note) | |||||
| pitem.recreateWidget() | |||||
| # ----------------------------------------------------------------- | # ----------------------------------------------------------------- | ||||
| @pyqtSlot(int) | @pyqtSlot(int) | ||||
| def slot_handleUpdateCallback(self, pluginId): | |||||
| if pluginId >= self.fPluginCount: | |||||
| return | |||||
| pitem = self.fPluginList[pluginId] | |||||
| if pitem is None: | |||||
| return | |||||
| def slot_currentRowChanged(self, row): | |||||
| self.fCurrentRow = row | |||||
| pitem.widget.fEditDialog.updateInfo() | |||||
| if self.fLastSelectedItem is not None: | |||||
| self.fLastSelectedItem.setSelected(False) | |||||
| @pyqtSlot(int) | |||||
| def slot_handleReloadInfoCallback(self, pluginId): | |||||
| if pluginId >= self.fPluginCount: | |||||
| if row < 0 or row >= self.fPluginCount or self.fPluginList[row] is None: | |||||
| self.fLastSelectedItem = None | |||||
| return | return | ||||
| pitem = self.fPluginList[pluginId] | |||||
| if pitem is None: | |||||
| return | |||||
| pitem = self.fPluginList[row] | |||||
| pitem.getWidget().setSelected(True) | |||||
| self.fLastSelectedItem = pitem.getWidget() | |||||
| pitem.widget.fEditDialog.reloadInfo() | |||||
| # ----------------------------------------------------------------- | |||||
| @pyqtSlot(int) | |||||
| def slot_handleReloadParametersCallback(self, pluginId): | |||||
| def getPluginItem(self, pluginId): | |||||
| if pluginId >= self.fPluginCount: | if pluginId >= self.fPluginCount: | ||||
| return | |||||
| return None | |||||
| pitem = self.fPluginList[pluginId] | pitem = self.fPluginList[pluginId] | ||||
| if pitem is None: | if pitem is None: | ||||
| return | |||||
| return None | |||||
| if False: | |||||
| pitem = CarlaRackItem(self, 0, False) | |||||
| pitem.widget.fEditDialog.reloadParameters() | |||||
| return pitem | |||||
| @pyqtSlot(int) | |||||
| def slot_handleReloadProgramsCallback(self, pluginId): | |||||
| def getPluginEditDialog(self, pluginId): | |||||
| if pluginId >= self.fPluginCount: | if pluginId >= self.fPluginCount: | ||||
| return | |||||
| return None | |||||
| pitem = self.fPluginList[pluginId] | pitem = self.fPluginList[pluginId] | ||||
| if pitem is None: | if pitem is None: | ||||
| return | |||||
| return None | |||||
| if False: | |||||
| pitem = CarlaRackItem(self, 0, False) | |||||
| pitem.widget.fEditDialog.reloadPrograms() | |||||
| return pitem.getEditDialog() | |||||
| @pyqtSlot(int) | |||||
| def slot_handleReloadAllCallback(self, pluginId): | |||||
| def getPluginSlotWidget(self, pluginId): | |||||
| if pluginId >= self.fPluginCount: | if pluginId >= self.fPluginCount: | ||||
| return | |||||
| return None | |||||
| pitem = self.fPluginList[pluginId] | pitem = self.fPluginList[pluginId] | ||||
| if pitem is None: | if pitem is None: | ||||
| return | |||||
| self.fRack.setCurrentRow(-1) | |||||
| self.fCurrentRow = -1 | |||||
| self.fLastSelectedItem = None | |||||
| pitem.reloadAll(pluginId) | |||||
| # ----------------------------------------------------------------- | |||||
| @pyqtSlot(int) | |||||
| def slot_currentRowChanged(self, row): | |||||
| self.fCurrentRow = row | |||||
| if self.fLastSelectedItem is not None: | |||||
| self.fLastSelectedItem.setSelected(False) | |||||
| if row < 0 or row >= self.fPluginCount or self.fPluginList[row] is None: | |||||
| self.fLastSelectedItem = None | |||||
| return | |||||
| return None | |||||
| if False: | |||||
| pitem = CarlaRackItem(self, 0, False) | |||||
| pitem = self.fPluginList[row] | |||||
| pitem.widget.setSelected(True) | |||||
| self.fLastSelectedItem = pitem.widget | |||||
| return pitem.getWidget() | |||||
| # ----------------------------------------------------------------- | # ----------------------------------------------------------------- | ||||
| @@ -207,7 +207,7 @@ class CarlaSettingsW(QDialog): | |||||
| # -------------------------------------------------------------------------------------------------------- | # -------------------------------------------------------------------------------------------------------- | ||||
| def __init__(self, parent, host, hasCanvas, hasCanvasGL, hasEngine): | |||||
| def __init__(self, parent, host, hasCanvas, hasCanvasGL): | |||||
| QDialog.__init__(self, parent) | QDialog.__init__(self, parent) | ||||
| self.host = host | self.host = host | ||||
| self.ui = ui_carla_settings.Ui_CarlaSettingsW() | self.ui = ui_carla_settings.Ui_CarlaSettingsW() | ||||
| @@ -244,9 +244,6 @@ class CarlaSettingsW(QDialog): | |||||
| self.ui.cb_canvas_use_opengl.setEnabled(False) | self.ui.cb_canvas_use_opengl.setEnabled(False) | ||||
| self.ui.cb_canvas_render_hq_aa.setEnabled(False) | self.ui.cb_canvas_render_hq_aa.setEnabled(False) | ||||
| if not hasEngine: | |||||
| self.ui.lw_page.hideRow(self.TAB_INDEX_ENGINE) | |||||
| if host.isPlugin: | if host.isPlugin: | ||||
| self.ui.cb_engine_audio_driver.setEnabled(False) | self.ui.cb_engine_audio_driver.setEnabled(False) | ||||
| @@ -685,7 +682,7 @@ class CarlaSettingsW(QDialog): | |||||
| @pyqtSlot() | @pyqtSlot() | ||||
| def slot_getAndSetProjectPath(self): | def slot_getAndSetProjectPath(self): | ||||
| # FIXME | # FIXME | ||||
| getAndSetPath(self, self.ui.le_main_proj_folder.text(), self.ui.le_main_proj_folder) | |||||
| getAndSetPath(self, self.ui.le_main_proj_folder) | |||||
| # -------------------------------------------------------------------------------------------------------- | # -------------------------------------------------------------------------------------------------------- | ||||
| @@ -29,12 +29,12 @@ import sys | |||||
| if config_UseQt5: | if config_UseQt5: | ||||
| from PyQt5.Qt import PYQT_VERSION_STR | from PyQt5.Qt import PYQT_VERSION_STR | ||||
| from PyQt5.QtCore import pyqtWrapperType, qFatal, qVersion, qWarning, QDir | |||||
| from PyQt5.QtCore import qFatal, qVersion, qWarning, QDir | |||||
| from PyQt5.QtGui import QIcon | from PyQt5.QtGui import QIcon | ||||
| from PyQt5.QtWidgets import QFileDialog, QMessageBox | from PyQt5.QtWidgets import QFileDialog, QMessageBox | ||||
| else: | else: | ||||
| from PyQt4.Qt import PYQT_VERSION_STR | from PyQt4.Qt import PYQT_VERSION_STR | ||||
| from PyQt4.QtCore import pyqtWrapperType, qFatal, qVersion, qWarning, QDir | |||||
| from PyQt4.QtCore import qFatal, qVersion, qWarning, QDir | |||||
| from PyQt4.QtGui import QFileDialog, QIcon, QMessageBox | from PyQt4.QtGui import QFileDialog, QIcon, QMessageBox | ||||
| # ------------------------------------------------------------------------------------------------------------ | # ------------------------------------------------------------------------------------------------------------ | ||||
| @@ -554,8 +554,8 @@ def setUpSignals(): | |||||
| # ------------------------------------------------------------------------------------------------------------ | # ------------------------------------------------------------------------------------------------------------ | ||||
| # QLineEdit and QPushButton combo | # QLineEdit and QPushButton combo | ||||
| def getAndSetPath(parent, currentPath, lineEdit): | |||||
| newPath = QFileDialog.getExistingDirectory(parent, parent.tr("Set Path"), currentPath, QFileDialog.ShowDirsOnly) | |||||
| def getAndSetPath(parent, lineEdit): | |||||
| newPath = QFileDialog.getExistingDirectory(parent, parent.tr("Set Path"), lineEdit.text(), QFileDialog.ShowDirsOnly) | |||||
| if newPath: | if newPath: | ||||
| lineEdit.setText(newPath) | lineEdit.setText(newPath) | ||||
| return newPath | return newPath | ||||
| @@ -574,9 +574,3 @@ def CustomMessageBox(parent, icon, title, text, extraText="", buttons=QMessageBo | |||||
| return msgBox.exec_() | return msgBox.exec_() | ||||
| # ------------------------------------------------------------------------------------------------------------ | # ------------------------------------------------------------------------------------------------------------ | ||||
| # An empty class used to resolve metaclass conflicts between ABC and PyQt modules | |||||
| class PyQtMetaClass(pyqtWrapperType, ABCMeta): | |||||
| pass | |||||
| # ------------------------------------------------------------------------------------------------------------ | |||||
| @@ -91,6 +91,11 @@ class AbstractPluginSlot(QFrame, PluginEditParentMeta): | |||||
| QFrame.__init__(self, parent) | QFrame.__init__(self, parent) | ||||
| self.host = host | self.host = host | ||||
| if False: | |||||
| # kdevelop likes this :) | |||||
| host = CarlaHostMeta() | |||||
| self.host = host | |||||
| # ------------------------------------------------------------- | # ------------------------------------------------------------- | ||||
| # Get plugin info | # Get plugin info | ||||
| @@ -153,6 +158,72 @@ class AbstractPluginSlot(QFrame, PluginEditParentMeta): | |||||
| self.peak_in = None | self.peak_in = None | ||||
| self.peak_out = None | self.peak_out = None | ||||
| # ------------------------------------------------------------- | |||||
| # Set-up connections | |||||
| host.ParameterValueChangedCallback.connect(self.slot_handleParameterValueChangedCallback) | |||||
| host.ParameterDefaultChangedCallback.connect(self.slot_handleParameterDefaultChangedCallback) | |||||
| host.ParameterMidiChannelChangedCallback.connect(self.slot_handleParameterMidiChannelChangedCallback) | |||||
| host.ParameterMidiCcChangedCallback.connect(self.slot_handleParameterMidiCcChangedCallback) | |||||
| host.ProgramChangedCallback.connect(self.slot_handleProgramChangedCallback) | |||||
| host.MidiProgramChangedCallback.connect(self.slot_handleMidiProgramChangedCallback) | |||||
| host.OptionChangedCallback.connect(self.slot_handleOptionChangedCallback) | |||||
| host.UiStateChangedCallback.connect(self.slot_handleUiStateChangedCallback) | |||||
| host.NoteOnCallback.connect(self.slot_handleNoteOnCallback) | |||||
| host.NoteOffCallback.connect(self.slot_handleNoteOffCallback) | |||||
| # ----------------------------------------------------------------- | |||||
| @pyqtSlot(int, int, float) | |||||
| def slot_handleParameterValueChangedCallback(self, pluginId, index, value): | |||||
| if self.fPluginId == pluginId: | |||||
| self.setParameterValue(index, value, True) | |||||
| @pyqtSlot(int, int, float) | |||||
| def slot_handleParameterDefaultChangedCallback(self, pluginId, index, value): | |||||
| if self.fPluginId == pluginId: | |||||
| self.setParameterDefault(index, value) | |||||
| @pyqtSlot(int, int, int) | |||||
| def slot_handleParameterMidiCcChangedCallback(self, pluginId, index, cc): | |||||
| if self.fPluginId == pluginId: | |||||
| self.setParameterMidiControl(index, cc) | |||||
| @pyqtSlot(int, int, int) | |||||
| def slot_handleParameterMidiChannelChangedCallback(self, pluginId, index, channel): | |||||
| if self.fPluginId == pluginId: | |||||
| self.setParameterMidiChannel(index, channel) | |||||
| @pyqtSlot(int, int) | |||||
| def slot_handleProgramChangedCallback(self, pluginId, index): | |||||
| if self.fPluginId == pluginId: | |||||
| self.setProgram(index, True) | |||||
| @pyqtSlot(int, int) | |||||
| def slot_handleMidiProgramChangedCallback(self, pluginId, index): | |||||
| if self.fPluginId == pluginId: | |||||
| self.setMidiProgram(index, True) | |||||
| @pyqtSlot(int, int, bool) | |||||
| def slot_handleOptionChangedCallback(self, pluginId, option, yesNo): | |||||
| if self.fPluginId == pluginId: | |||||
| self.setOption(option, yesNo) | |||||
| @pyqtSlot(int, int) | |||||
| def slot_handleUiStateChangedCallback(self, pluginId, state): | |||||
| if self.fPluginId == pluginId: | |||||
| self.customUiStateChanged(state) | |||||
| @pyqtSlot(int, int, int, int) | |||||
| def slot_handleNoteOnCallback(self, pluginId, channel, note, velo): | |||||
| if self.fPluginId == pluginId: | |||||
| self.sendNoteOn(channel, note) | |||||
| @pyqtSlot(int, int, int) | |||||
| def slot_handleNoteOffCallback(self, pluginId, channel, note): | |||||
| if self.fPluginId == pluginId: | |||||
| self.sendNoteOff(channel, note) | |||||
| #------------------------------------------------------------------ | #------------------------------------------------------------------ | ||||
| def ready(self): | def ready(self): | ||||
| @@ -226,9 +297,9 @@ class AbstractPluginSlot(QFrame, PluginEditParentMeta): | |||||
| #------------------------------------------------------------------ | #------------------------------------------------------------------ | ||||
| def setId(self, idx): | |||||
| def setPluginId(self, idx): | |||||
| self.fPluginId = idx | self.fPluginId = idx | ||||
| self.fEditDialog.setId(idx) | |||||
| self.fEditDialog.setPluginId(idx) | |||||
| def setName(self, name): | def setName(self, name): | ||||
| self.fEditDialog.setName(name) | self.fEditDialog.setName(name) | ||||
| @@ -1560,8 +1631,8 @@ class PluginSlot_ZynFX(AbstractPluginSlot): | |||||
| # ------------------------------------------------------------------------------------------------------------ | # ------------------------------------------------------------------------------------------------------------ | ||||
| def createPluginSlot(parent, host, pluginId, useCustomSkins): | |||||
| if not useCustomSkins: | |||||
| def createPluginSlot(parent, host, pluginId, useSkins): | |||||
| if not useSkins: | |||||
| return PluginSlot_Default(parent, host, pluginId) | return PluginSlot_Default(parent, host, pluginId) | ||||
| pluginInfo = host.get_plugin_info(pluginId) | pluginInfo = host.get_plugin_info(pluginId) | ||||
| @@ -574,6 +574,39 @@ class PluginEdit(QDialog): | |||||
| self.ui.b_save_state.clicked.connect(self.slot_stateSave) | self.ui.b_save_state.clicked.connect(self.slot_stateSave) | ||||
| self.ui.b_load_state.clicked.connect(self.slot_stateLoad) | self.ui.b_load_state.clicked.connect(self.slot_stateLoad) | ||||
| host.UpdateCallback.connect(self.slot_handleUpdateCallback) | |||||
| host.ReloadInfoCallback.connect(self.slot_handleReloadInfoCallback) | |||||
| host.ReloadParametersCallback.connect(self.slot_handleReloadParametersCallback) | |||||
| host.ReloadProgramsCallback.connect(self.slot_handleReloadProgramsCallback) | |||||
| host.ReloadAllCallback.connect(self.slot_handleReloadAllCallback) | |||||
| #------------------------------------------------------------------ | |||||
| @pyqtSlot(int) | |||||
| def slot_handleUpdateCallback(self, pluginId): | |||||
| if self.fPluginId == pluginId: | |||||
| self.updateInfo() | |||||
| @pyqtSlot(int) | |||||
| def slot_handleReloadInfoCallback(self, pluginId): | |||||
| if self.fPluginId == pluginId: | |||||
| self.reloadInfo() | |||||
| @pyqtSlot(int) | |||||
| def slot_handleReloadParametersCallback(self, pluginId): | |||||
| if self.fPluginId == pluginId: | |||||
| self.reloadParameters() | |||||
| @pyqtSlot(int) | |||||
| def slot_handleReloadProgramsCallback(self, pluginId): | |||||
| if self.fPluginId == pluginId: | |||||
| self.reloadPrograms() | |||||
| @pyqtSlot(int) | |||||
| def slot_handleReloadAllCallback(self, pluginId): | |||||
| if self.fPluginId == pluginId: | |||||
| self.reloadAll() | |||||
| #------------------------------------------------------------------ | #------------------------------------------------------------------ | ||||
| def updateInfo(self): | def updateInfo(self): | ||||
| @@ -913,7 +946,7 @@ class PluginEdit(QDialog): | |||||
| def getHints(self): | def getHints(self): | ||||
| return self.fPluginInfo['hints'] | return self.fPluginInfo['hints'] | ||||
| def setId(self, idx): | |||||
| def setPluginId(self, idx): | |||||
| self.fPluginId = idx | self.fPluginId = idx | ||||
| def setName(self, name): | def setName(self, name): | ||||