Browse Source

Have C++ plugin list dialog start to do something..

Signed-off-by: falkTX <falktx@falktx.com>
pull/1775/head
falkTX 2 years ago
parent
commit
4a7c1bcc85
Signed by: falkTX <falktx@falktx.com> GPG Key ID: CDBAA37ABC74FBA0
6 changed files with 977 additions and 435 deletions
  1. +3
    -3
      source/frontend/carla_shared.py
  2. +913
    -393
      source/frontend/pluginlist/pluginlistdialog.cpp
  3. +7
    -2
      source/frontend/pluginlist/pluginlistdialog.hpp
  4. +41
    -36
      source/frontend/pluginlist/pluginlistdialog.py
  5. +8
    -1
      source/frontend/test.cpp
  6. +5
    -0
      source/frontend/utils/qcarlastring.hpp

+ 3
- 3
source/frontend/carla_shared.py View File

@@ -98,7 +98,7 @@ del envTMP
envHOME = os.getenv("HOME") envHOME = os.getenv("HOME")


if envHOME is None: if envHOME is None:
if LINUX or MACOS:
if not WINDOWS:
qWarning("HOME variable not set") qWarning("HOME variable not set")
HOME = QDir.toNativeSeparators(QDir.homePath()) HOME = QDir.toNativeSeparators(QDir.homePath())
else: else:
@@ -469,10 +469,10 @@ elif MACOS:
#DEFAULT_JSFX_PATH += ":/Applications/REAPER.app/Contents/InstallFiles/Effects" #DEFAULT_JSFX_PATH += ":/Applications/REAPER.app/Contents/InstallFiles/Effects"


else: else:
CONFIG_HOME = os.getenv("XDG_CONFIG_HOME", HOME + "/.config")

splitter = ":" splitter = ":"


CONFIG_HOME = os.getenv("XDG_CONFIG_HOME", HOME + "/.config")

DEFAULT_LADSPA_PATH = HOME + "/.ladspa" DEFAULT_LADSPA_PATH = HOME + "/.ladspa"
DEFAULT_LADSPA_PATH += ":/usr/lib/ladspa" DEFAULT_LADSPA_PATH += ":/usr/lib/ladspa"
DEFAULT_LADSPA_PATH += ":/usr/local/lib/ladspa" DEFAULT_LADSPA_PATH += ":/usr/local/lib/ladspa"


+ 913
- 393
source/frontend/pluginlist/pluginlistdialog.cpp
File diff suppressed because it is too large
View File


+ 7
- 2
source/frontend/pluginlist/pluginlistdialog.hpp View File

@@ -35,7 +35,7 @@
# pragma GCC diagnostic pop # pragma GCC diagnostic pop
#endif #endif


#include "CarlaDefines.h"
#include "CarlaBackend.h"


static constexpr const uint PLUGIN_QUERY_API_VERSION = 12; static constexpr const uint PLUGIN_QUERY_API_VERSION = 12;


@@ -48,7 +48,7 @@ struct HostSettings {
struct PluginInfo { struct PluginInfo {
uint API; uint API;
uint build; uint build;
uint type;
CARLA_BACKEND_NAMESPACE::PluginType type;
uint hints; uint hints;
QString category; QString category;
QString filename; QString filename;
@@ -80,6 +80,11 @@ public:
explicit PluginListDialog(QWidget* parent, const HostSettings& hostSettings); explicit PluginListDialog(QWidget* parent, const HostSettings& hostSettings);
~PluginListDialog() override; ~PluginListDialog() override;


// ----------------------------------------------------------------------------------------------------------------
// public methods

const PluginInfo& getSelectedPluginInfo() const;

// ---------------------------------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------------------------------
// protected methods // protected methods




+ 41
- 36
source/frontend/pluginlist/pluginlistdialog.py View File

@@ -233,21 +233,23 @@ class PluginListDialog(QDialog):


@pyqtSlot(int, int) @pyqtSlot(int, int)
def slot_cellClicked(self, row, column): def slot_cellClicked(self, row, column):
if column == self.TABLEWIDGET_ITEM_FAVORITE:
widget = self.ui.tableWidget.item(row, self.TABLEWIDGET_ITEM_FAVORITE)
plugin = self.ui.tableWidget.item(row, self.TABLEWIDGET_ITEM_NAME).data(Qt.UserRole+1)
plugin = self._createFavoritePluginDict(plugin)
if column != self.TABLEWIDGET_ITEM_FAVORITE:
return


if widget.checkState() == Qt.Checked:
if not plugin in self.fFavoritePlugins:
self.fFavoritePlugins.append(plugin)
self.fFavoritePluginsChanged = True
else:
try:
self.fFavoritePlugins.remove(plugin)
self.fFavoritePluginsChanged = True
except ValueError:
pass
widget = self.ui.tableWidget.item(row, self.TABLEWIDGET_ITEM_FAVORITE)
plugin = self.ui.tableWidget.item(row, self.TABLEWIDGET_ITEM_NAME).data(Qt.UserRole+1)
plugin = self._createFavoritePluginDict(plugin)

if widget.checkState() == Qt.Checked:
if not plugin in self.fFavoritePlugins:
self.fFavoritePlugins.append(plugin)
self.fFavoritePluginsChanged = True
else:
try:
self.fFavoritePlugins.remove(plugin)
self.fFavoritePluginsChanged = True
except ValueError:
pass


@pyqtSlot(int, int) @pyqtSlot(int, int)
def slot_cellDoubleClicked(self, _, column): def slot_cellDoubleClicked(self, _, column):
@@ -272,8 +274,7 @@ class PluginListDialog(QDialog):
def slot_checkPlugin(self, row): def slot_checkPlugin(self, row):
if row >= 0: if row >= 0:
self.ui.b_add.setEnabled(True) self.ui.b_add.setEnabled(True)
plugin = self.ui.tableWidget.item(self.ui.tableWidget.currentRow(),
self.TABLEWIDGET_ITEM_NAME).data(Qt.UserRole+1)
plugin = self.ui.tableWidget.item(row, self.TABLEWIDGET_ITEM_NAME).data(Qt.UserRole+1)


isSynth = bool(plugin['hints'] & PLUGIN_IS_SYNTH) isSynth = bool(plugin['hints'] & PLUGIN_IS_SYNTH)
isEffect = bool(plugin['audio.ins'] > 0 < plugin['audio.outs'] and not isSynth) isEffect = bool(plugin['audio.ins'] > 0 < plugin['audio.outs'] and not isSynth)
@@ -556,13 +557,15 @@ class PluginListDialog(QDialog):
if not tableGeometry.isNull(): if not tableGeometry.isNull():
horizontalHeader.restoreState(tableGeometry) horizontalHeader.restoreState(tableGeometry)
else: else:
horizontalHeader.setSectionResizeMode(self.TABLEWIDGET_ITEM_FAVORITE, QHeaderView.Fixed)
self.ui.tableWidget.setColumnWidth(self.TABLEWIDGET_ITEM_FAVORITE, 24)
self.ui.tableWidget.setColumnWidth(self.TABLEWIDGET_ITEM_NAME, 250) self.ui.tableWidget.setColumnWidth(self.TABLEWIDGET_ITEM_NAME, 250)
self.ui.tableWidget.setColumnWidth(self.TABLEWIDGET_ITEM_LABEL, 200) self.ui.tableWidget.setColumnWidth(self.TABLEWIDGET_ITEM_LABEL, 200)
self.ui.tableWidget.setColumnWidth(self.TABLEWIDGET_ITEM_MAKER, 150) self.ui.tableWidget.setColumnWidth(self.TABLEWIDGET_ITEM_MAKER, 150)
self.ui.tableWidget.sortByColumn(self.TABLEWIDGET_ITEM_NAME, Qt.AscendingOrder) self.ui.tableWidget.sortByColumn(self.TABLEWIDGET_ITEM_NAME, Qt.AscendingOrder)


horizontalHeader.setSectionResizeMode(self.TABLEWIDGET_ITEM_FAVORITE, QHeaderView.Fixed)
self.ui.tableWidget.setColumnWidth(self.TABLEWIDGET_ITEM_FAVORITE, 24)
self.ui.tableWidget.setSortingEnabled(True)

# -------------------------------------------------------------------------------------------------------- # --------------------------------------------------------------------------------------------------------


def _createFavoritePluginDict(self, plugin): def _createFavoritePluginDict(self, plugin):
@@ -636,7 +639,7 @@ class PluginListDialog(QDialog):
isOther = bool(not (isEffect or isSynth or isMidi or isKit)) isOther = bool(not (isEffect or isSynth or isMidi or isKit))
isNative = bool(plugin['build'] == BINARY_NATIVE) isNative = bool(plugin['build'] == BINARY_NATIVE)
isRtSafe = bool(phints & PLUGIN_IS_RTSAFE) isRtSafe = bool(phints & PLUGIN_IS_RTSAFE)
isStereo = bool(aIns == 2 and aOuts == 2) or (isSynth and aOuts == 2)
isStereo = bool((aIns == 2 and aOuts == 2) or (isSynth and aOuts == 2))
hasCV = bool(cvIns + cvOuts > 0) hasCV = bool(cvIns + cvOuts > 0)
hasGui = bool(phints & PLUGIN_HAS_CUSTOM_UI) hasGui = bool(phints & PLUGIN_HAS_CUSTOM_UI)
hasIDisp = bool(phints & PLUGIN_HAS_INLINE_DISPLAY) hasIDisp = bool(phints & PLUGIN_HAS_INLINE_DISPLAY)
@@ -711,24 +714,26 @@ class PluginListDialog(QDialog):
def _addPluginToTable(self, plugin, ptype): def _addPluginToTable(self, plugin, ptype):
if plugin['API'] != PLUGIN_QUERY_API_VERSION: if plugin['API'] != PLUGIN_QUERY_API_VERSION:
return return
if ptype in (self.tr("Internal"), "LV2", "SF2", "SFZ", "JSFX"):
if ptype in (PLUGIN_INTERNAL, PLUGIN_LV2, PLUGIN_SF2, PLUGIN_SFZ, PLUGIN_JSFX):
plugin['build'] = BINARY_NATIVE plugin['build'] = BINARY_NATIVE


index = self.fLastTableIndex index = self.fLastTableIndex


isFav = bool(self._createFavoritePluginDict(plugin) in self.fFavoritePlugins) isFav = bool(self._createFavoritePluginDict(plugin) in self.fFavoritePlugins)
favItem = QTableWidgetItem()
favItem.setCheckState(Qt.Checked if isFav else Qt.Unchecked)
favItem.setText(" " if isFav else " ")
itemFav = QTableWidgetItem()
itemFav.setCheckState(Qt.Checked if isFav else Qt.Unchecked)
itemFav.setText(" " if isFav else " ")


pluginText = (plugin['name']+plugin['label']+plugin['maker']+plugin['filename']).lower() pluginText = (plugin['name']+plugin['label']+plugin['maker']+plugin['filename']).lower()
self.ui.tableWidget.setItem(index, self.TABLEWIDGET_ITEM_FAVORITE, favItem)
self.ui.tableWidget.setItem(index, self.TABLEWIDGET_ITEM_FAVORITE, itemFav)
self.ui.tableWidget.setItem(index, self.TABLEWIDGET_ITEM_NAME, QTableWidgetItem(plugin['name'])) self.ui.tableWidget.setItem(index, self.TABLEWIDGET_ITEM_NAME, QTableWidgetItem(plugin['name']))
self.ui.tableWidget.setItem(index, self.TABLEWIDGET_ITEM_LABEL, QTableWidgetItem(plugin['label'])) self.ui.tableWidget.setItem(index, self.TABLEWIDGET_ITEM_LABEL, QTableWidgetItem(plugin['label']))
self.ui.tableWidget.setItem(index, self.TABLEWIDGET_ITEM_MAKER, QTableWidgetItem(plugin['maker'])) self.ui.tableWidget.setItem(index, self.TABLEWIDGET_ITEM_MAKER, QTableWidgetItem(plugin['maker']))
self.ui.tableWidget.setItem(index, self.TABLEWIDGET_ITEM_BINARY, QTableWidgetItem(os.path.basename(plugin['filename']))) self.ui.tableWidget.setItem(index, self.TABLEWIDGET_ITEM_BINARY, QTableWidgetItem(os.path.basename(plugin['filename'])))
self.ui.tableWidget.item(index, self.TABLEWIDGET_ITEM_NAME).setData(Qt.UserRole+1, plugin)
self.ui.tableWidget.item(index, self.TABLEWIDGET_ITEM_NAME).setData(Qt.UserRole+2, pluginText)

itemName = self.ui.tableWidget.item(index, self.TABLEWIDGET_ITEM_NAME)
itemName.setData(Qt.UserRole+1, plugin)
itemName.setData(Qt.UserRole+2, pluginText)


self.fLastTableIndex += 1 self.fLastTableIndex += 1


@@ -792,7 +797,7 @@ class PluginListDialog(QDialog):
self.ui.tableWidget.setRowCount(self.fLastTableIndex + len(plugins)) self.ui.tableWidget.setRowCount(self.fLastTableIndex + len(plugins))


for plugin in plugins: for plugin in plugins:
self._addPluginToTable(plugin, ptypeStrTr)
self._addPluginToTable(plugin, ptype)


return pluginCount return pluginCount


@@ -930,37 +935,37 @@ class PluginListDialog(QDialog):


for plugins in ladspaPlugins: for plugins in ladspaPlugins:
for plugin in plugins: for plugin in plugins:
self._addPluginToTable(plugin, "LADSPA")
self._addPluginToTable(plugin, PLUGIN_LADSPA)


for plugins in dssiPlugins: for plugins in dssiPlugins:
for plugin in plugins: for plugin in plugins:
self._addPluginToTable(plugin, "DSSI")
self._addPluginToTable(plugin, PLUGIN_DSSI)


for plugins in vst2Plugins: for plugins in vst2Plugins:
for plugin in plugins: for plugin in plugins:
self._addPluginToTable(plugin, "VST2")
self._addPluginToTable(plugin, PLUGIN_VST2)


for plugins in vst3Plugins: for plugins in vst3Plugins:
for plugin in plugins: for plugin in plugins:
self._addPluginToTable(plugin, "VST3")
self._addPluginToTable(plugin, PLUGIN_VST3)


for plugins in clapPlugins: for plugins in clapPlugins:
for plugin in plugins: for plugin in plugins:
self._addPluginToTable(plugin, "CLAP")
self._addPluginToTable(plugin, PLUGIN_CLAP)


for plugins in auPlugins32: for plugins in auPlugins32:
for plugin in plugins: for plugin in plugins:
self._addPluginToTable(plugin, "AU")
self._addPluginToTable(plugin, PLUGIN_AU)


for plugin in jsfxPlugins: for plugin in jsfxPlugins:
self._addPluginToTable(plugin, "JSFX")
self._addPluginToTable(plugin, PLUGIN_JSFX)


for sf2 in sf2s: for sf2 in sf2s:
for sf2_i in sf2: for sf2_i in sf2:
self._addPluginToTable(sf2_i, "SF2")
self._addPluginToTable(sf2_i, PLUGIN_SF2)


for sfz in sfzs: for sfz in sfzs:
self._addPluginToTable(sfz, "SFZ")
self._addPluginToTable(sfz, PLUGIN_SFZ)


# ---------------------------------------------------------------------------------------------------- # ----------------------------------------------------------------------------------------------------




+ 8
- 1
source/frontend/test.cpp View File

@@ -1,8 +1,15 @@
#include "CarlaFrontend.h" #include "CarlaFrontend.h"
#include <QApplication> #include <QApplication>
#include <cstdio>


int main(int argc, char* argv[]) int main(int argc, char* argv[])
{ {
QApplication app(argc, argv); QApplication app(argc, argv);
carla_frontend_createAndExecPluginListDialog(nullptr);
if (const PluginListDialogResults* ret = carla_frontend_createAndExecPluginListDialog(nullptr))
{
printf("got ret label %s\n", ret->label);
return 0;
}

return 1;
} }

+ 5
- 0
source/frontend/utils/qcarlastring.hpp View File

@@ -61,6 +61,11 @@ public:
{ {
return (*this = fromUtf8(str)); return (*this = fromUtf8(str));
} }

inline QCarlaString strip() const
{
return simplified().remove(' ');
}
}; };


//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------

Loading…
Cancel
Save