| @@ -94,7 +94,7 @@ class PluginInfo(object): | |||
| # ------------------------------------------------------------------------------------------------ | |||
| # Patchbay widget | |||
| class CarlaPatchbayW(QFrame): | |||
| class CarlaPatchbayW(QFrame, PluginEditParentMeta, metaclass=PyQtMetaClass): | |||
| def __init__(self, parent, doSetup = True, onlyPatchbay = True, is3D = False): | |||
| QFrame.__init__(self, parent) | |||
| @@ -391,10 +391,19 @@ class CarlaPatchbayW(QFrame): | |||
| # ----------------------------------------------------------------- | |||
| # called by PluginEdit to plugin skin parent, ignored here | |||
| def recheckPluginHints(self, hints): | |||
| pass | |||
| def editDialogChanged(self, visible): | |||
| pass | |||
| def recheckPluginHints(self, hints): | |||
| def parameterValueChanged(self, parameterId, value): | |||
| pass | |||
| def programChanged(self, index): | |||
| pass | |||
| def midiProgramChanged(self, index): | |||
| pass | |||
| def notePressed(self, note): | |||
| @@ -29,14 +29,19 @@ import sys | |||
| if config_UseQt5: | |||
| from PyQt5.Qt import PYQT_VERSION_STR | |||
| from PyQt5.QtCore import qFatal, qVersion, qWarning, QDir | |||
| from PyQt5.QtCore import pyqtWrapperType, qFatal, qVersion, qWarning, QDir | |||
| from PyQt5.QtGui import QIcon | |||
| from PyQt5.QtWidgets import QFileDialog, QMessageBox | |||
| else: | |||
| from PyQt4.Qt import PYQT_VERSION_STR | |||
| from PyQt4.QtCore import qFatal, qVersion, qWarning, QDir | |||
| from PyQt4.QtCore import pyqtWrapperType, qFatal, qVersion, qWarning, QDir | |||
| from PyQt4.QtGui import QFileDialog, QIcon, QMessageBox | |||
| # ------------------------------------------------------------------------------------------------------------ | |||
| # Import ABC | |||
| from abc import ABCMeta, abstractmethod | |||
| # ------------------------------------------------------------------------------------------------------------ | |||
| # Import Signal | |||
| @@ -636,3 +641,9 @@ def CustomMessageBox(parent, icon, title, text, extraText="", buttons=QMessageBo | |||
| return msgBox.exec_() | |||
| # ------------------------------------------------------------------------------------------------------------ | |||
| # An empty class used to resolve metaclass conflicts between ABC and PyQt modules | |||
| class PyQtMetaClass(pyqtWrapperType, ABCMeta): | |||
| pass | |||
| # ------------------------------------------------------------------------------------------------------------ | |||
| @@ -47,7 +47,7 @@ from pixmapdial import PixmapDial | |||
| # ------------------------------------------------------------------------------------------------------------ | |||
| # Abstract plugin slot | |||
| class AbstractPluginSlot(QFrame): | |||
| class AbstractPluginSlot(QFrame, PluginEditParentMeta, metaclass=PyQtMetaClass): | |||
| def __init__(self, parent, pluginId): | |||
| QFrame.__init__(self, parent) | |||
| @@ -25,11 +25,11 @@ from carla_config import * | |||
| # Imports (Global) | |||
| if config_UseQt5: | |||
| from PyQt5.QtCore import pyqtSignal, pyqtSlot, Qt, QByteArray, QSettings, QTimer | |||
| from PyQt5.QtCore import pyqtSignal, pyqtSlot, pyqtWrapperType, Qt, QByteArray, QSettings, QTimer | |||
| from PyQt5.QtGui import QColor, QCursor, QFontMetrics, QPainter, QPainterPath | |||
| from PyQt5.QtWidgets import QDialog, QInputDialog, QLineEdit, QMenu, QVBoxLayout, QWidget | |||
| else: | |||
| from PyQt4.QtCore import pyqtSignal, pyqtSlot, Qt, QByteArray, QSettings, QTimer | |||
| from PyQt4.QtCore import pyqtSignal, pyqtSlot, pyqtWrapperType, Qt, QByteArray, QSettings, QTimer | |||
| from PyQt4.QtGui import QColor, QCursor, QFontMetrics, QPainter, QPainterPath | |||
| from PyQt4.QtGui import QDialog, QInputDialog, QLineEdit, QMenu, QVBoxLayout, QWidget | |||
| @@ -394,6 +394,38 @@ class PluginParameter(QWidget): | |||
| def _textCallBack(self): | |||
| return gCarla.host.get_parameter_text(self.fPluginId, self.fParameterId) | |||
| # ------------------------------------------------------------------------------------------------------------ | |||
| # Plugin Editor Parent (Meta class) | |||
| class PluginEditParentMeta(metaclass=ABCMeta): | |||
| @abstractmethod | |||
| def recheckPluginHints(self, hints): | |||
| raise NotImplementedError | |||
| @abstractmethod | |||
| def editDialogChanged(self, visible): | |||
| raise NotImplementedError | |||
| @abstractmethod | |||
| def parameterValueChanged(self, parameterId, value): | |||
| raise NotImplementedError | |||
| @abstractmethod | |||
| def programChanged(self, index): | |||
| raise NotImplementedError | |||
| @abstractmethod | |||
| def midiProgramChanged(self, index): | |||
| raise NotImplementedError | |||
| @abstractmethod | |||
| def notePressed(self, note): | |||
| raise NotImplementedError | |||
| @abstractmethod | |||
| def noteReleased(self, note): | |||
| raise NotImplementedError | |||
| # ------------------------------------------------------------------------------------------------------------ | |||
| # Plugin Editor (Built-in) | |||
| @@ -405,6 +437,9 @@ class PluginEdit(QDialog): | |||
| self.ui = ui_carla_edit.Ui_PluginEdit() | |||
| self.ui.setupUi(self) | |||
| if False: | |||
| parent = PluginEditParent() | |||
| # ------------------------------------------------------------- | |||
| # Internal stuff | |||