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")

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

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

splitter = ":"

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

DEFAULT_LADSPA_PATH = HOME + "/.ladspa"
DEFAULT_LADSPA_PATH += ":/usr/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
#endif

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

static constexpr const uint PLUGIN_QUERY_API_VERSION = 12;

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

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

const PluginInfo& getSelectedPluginInfo() const;

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



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

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

@pyqtSlot(int, int)
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)
def slot_cellDoubleClicked(self, _, column):
@@ -272,8 +274,7 @@ class PluginListDialog(QDialog):
def slot_checkPlugin(self, row):
if row >= 0:
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)
isEffect = bool(plugin['audio.ins'] > 0 < plugin['audio.outs'] and not isSynth)
@@ -556,13 +557,15 @@ class PluginListDialog(QDialog):
if not tableGeometry.isNull():
horizontalHeader.restoreState(tableGeometry)
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_LABEL, 200)
self.ui.tableWidget.setColumnWidth(self.TABLEWIDGET_ITEM_MAKER, 150)
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):
@@ -636,7 +639,7 @@ class PluginListDialog(QDialog):
isOther = bool(not (isEffect or isSynth or isMidi or isKit))
isNative = bool(plugin['build'] == BINARY_NATIVE)
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)
hasGui = bool(phints & PLUGIN_HAS_CUSTOM_UI)
hasIDisp = bool(phints & PLUGIN_HAS_INLINE_DISPLAY)
@@ -711,24 +714,26 @@ class PluginListDialog(QDialog):
def _addPluginToTable(self, plugin, ptype):
if plugin['API'] != PLUGIN_QUERY_API_VERSION:
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

index = self.fLastTableIndex

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()
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_LABEL, QTableWidgetItem(plugin['label']))
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.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

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

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

return pluginCount

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

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

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

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

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

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

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

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

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

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 <QApplication>
#include <cstdio>

int main(int argc, char* 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));
}

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

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

Loading…
Cancel
Save