From 88d8155cd7989ca2494590a9cedffae8c9c8c9e8 Mon Sep 17 00:00:00 2001 From: falkTX Date: Fri, 21 Sep 2012 18:57:35 +0100 Subject: [PATCH] Carla: More work for internal/native plugin support --- c++/carla-backend/carla_backend.h | 17 ++-- .../carla_backend_standalone.cpp | 34 ++++++++ c++/carla-backend/carla_backend_standalone.h | 3 + c++/carla-backend/carla_engine.cpp | 3 + c++/carla-backend/carla_native.cpp | 17 +++- c++/carla-backend/carla_plugin.h | 3 + c++/carla-backend/carla_shared.cpp | 22 +++++ c++/carla-backend/carla_shared.h | 2 + src/carla.py | 84 ++++++++++++++----- src/carla_backend.py | 27 ++++++ src/shared_carla.py | 25 +++--- src/ui/carla_database.ui | 57 +++++++------ 12 files changed, 230 insertions(+), 64 deletions(-) diff --git a/c++/carla-backend/carla_backend.h b/c++/carla-backend/carla_backend.h index 0e4b394..d23c2c3 100644 --- a/c++/carla-backend/carla_backend.h +++ b/c++/carla-backend/carla_backend.h @@ -108,14 +108,15 @@ enum BinaryType { * \note Some plugin classes might provide more than 1 plugin type. */ enum PluginType { - PLUGIN_NONE = 0, //!< Null plugin type. - PLUGIN_LADSPA = 1, //!< LADSPA plugin.\see LadspaPlugin - PLUGIN_DSSI = 2, //!< DSSI plugin.\see DssiPlugin - PLUGIN_LV2 = 3, //!< LV2 plugin.\see Lv2Plugin - PLUGIN_VST = 4, //!< VST plugin.\see VstPlugin - PLUGIN_GIG = 5, //!< GIG sound kit, implemented via LinuxSampler.\see LinuxSamplerPlugin - PLUGIN_SF2 = 6, //!< SF2 sound kit (aka SoundFont), implemented via FluidSynth.\see FluidSynthPlugin - PLUGIN_SFZ = 7 //!< SFZ sound kit, implemented via LinuxSampler.\see LinuxSamplerPlugin + PLUGIN_NONE = 0, //!< Null plugin type. + PLUGIN_INTERNAL = 1, //!< Internal plugin. + PLUGIN_LADSPA = 2, //!< LADSPA plugin.\see LadspaPlugin + PLUGIN_DSSI = 3, //!< DSSI plugin.\see DssiPlugin + PLUGIN_LV2 = 4, //!< LV2 plugin.\see Lv2Plugin + PLUGIN_VST = 5, //!< VST plugin.\see VstPlugin + PLUGIN_GIG = 6, //!< GIG sound kit, implemented via LinuxSampler.\see LinuxSamplerPlugin + PLUGIN_SF2 = 7, //!< SF2 sound kit (aka SoundFont), implemented via FluidSynth.\see FluidSynthPlugin + PLUGIN_SFZ = 8 //!< SFZ sound kit, implemented via LinuxSampler.\see LinuxSamplerPlugin }; enum PluginCategory { diff --git a/c++/carla-backend/carla_backend_standalone.cpp b/c++/carla-backend/carla_backend_standalone.cpp index 5717212..c628051 100644 --- a/c++/carla-backend/carla_backend_standalone.cpp +++ b/c++/carla-backend/carla_backend_standalone.cpp @@ -17,6 +17,7 @@ #include "carla_backend_standalone.h" #include "carla_plugin.h" +#include "plugins/carla_native.h" // ------------------------------------------------------------------------------------------------------------------- @@ -90,6 +91,39 @@ const char* get_engine_driver_name(unsigned int index) // ------------------------------------------------------------------------------------------------------------------- +unsigned int get_internal_plugin_count() +{ + qDebug("CarlaBackendStandalone::get_internal_plugin_count()"); + + return CarlaBackend::CarlaPlugin::getNativePluginCount(); +} + +const PluginInfo* get_internal_plugin_info(unsigned int plugin_id) +{ + qDebug("CarlaBackendStandalone::get_internal_plugin_info(%i)", plugin_id); + + static PluginInfo info; + + const PluginDescriptor* const nativePlugin = CarlaBackend::CarlaPlugin::getNativePlugin(plugin_id); + + Q_ASSERT(nativePlugin); + + if (! nativePlugin) + return nullptr; + + info.type = CarlaBackend::PLUGIN_NONE; + info.category = (CarlaBackend::PluginCategory)nativePlugin->category; + info.hints = CarlaBackend::getPluginHintsFromNative(nativePlugin->hints); + info.name = nativePlugin->name; + info.label = nativePlugin->label; + info.maker = nativePlugin->maker; + info.copyright = nativePlugin->copyright; + + return &info; +} + +// ------------------------------------------------------------------------------------------------------------------- + bool engine_init(const char* driver_name, const char* client_name) { qDebug("CarlaBackendStandalone::engine_init(\"%s\", \"%s\")", driver_name, client_name); diff --git a/c++/carla-backend/carla_backend_standalone.h b/c++/carla-backend/carla_backend_standalone.h index 11999bd..96153ba 100644 --- a/c++/carla-backend/carla_backend_standalone.h +++ b/c++/carla-backend/carla_backend_standalone.h @@ -98,6 +98,9 @@ struct GuiInfo { CARLA_EXPORT unsigned int get_engine_driver_count(); CARLA_EXPORT const char* get_engine_driver_name(unsigned int index); +CARLA_EXPORT unsigned int get_internal_plugin_count(); +CARLA_EXPORT const PluginInfo* get_internal_plugin_info(unsigned int plugin_id); + CARLA_EXPORT bool engine_init(const char* driver_name, const char* client_name); CARLA_EXPORT bool engine_close(); CARLA_EXPORT bool is_engine_running(); diff --git a/c++/carla-backend/carla_engine.cpp b/c++/carla-backend/carla_engine.cpp index c5fc139..0a38459 100644 --- a/c++/carla-backend/carla_engine.cpp +++ b/c++/carla-backend/carla_engine.cpp @@ -285,6 +285,9 @@ short CarlaEngine::addPlugin(const BinaryType btype, const PluginType ptype, con { case PLUGIN_NONE: break; + case PLUGIN_INTERNAL: + plugin = CarlaPlugin::newNative(init); + break; case PLUGIN_LADSPA: plugin = CarlaPlugin::newLADSPA(init, extra); break; diff --git a/c++/carla-backend/carla_native.cpp b/c++/carla-backend/carla_native.cpp index 1d59874..4a05d77 100644 --- a/c++/carla-backend/carla_native.cpp +++ b/c++/carla-backend/carla_native.cpp @@ -65,7 +65,7 @@ public: { qDebug("NativePlugin::NativePlugin()"); - m_type = PLUGIN_NONE; + m_type = PLUGIN_INTERNAL; descriptor = nullptr; handle = nullptr; @@ -164,6 +164,16 @@ public: return pluginDescriptors.size(); } + static const PluginDescriptor* getPlugin(size_t index) + { + Q_ASSERT(index < pluginDescriptors.size()); + + if (index < pluginDescriptors.size()) + return pluginDescriptors[index]; + + return nullptr; + } + static void registerPlugin(const PluginDescriptor* desc) { pluginDescriptors.push_back(desc); @@ -258,6 +268,11 @@ size_t CarlaPlugin::getNativePluginCount() return NativePlugin::getPluginCount(); } +const PluginDescriptor* CarlaPlugin::getNativePlugin(size_t index) +{ + return NativePlugin::getPlugin(index); +} + CARLA_BACKEND_END_NAMESPACE void carla_register_native_plugin(const PluginDescriptor* desc) diff --git a/c++/carla-backend/carla_plugin.h b/c++/carla-backend/carla_plugin.h index 5de411c..189dee3 100644 --- a/c++/carla-backend/carla_plugin.h +++ b/c++/carla-backend/carla_plugin.h @@ -42,6 +42,8 @@ typedef QX11EmbedContainer GuiContainer; typedef QWidget GuiContainer; #endif +typedef struct _PluginDescriptor PluginDescriptor; + CARLA_BACKEND_START_NAMESPACE /*! @@ -2108,6 +2110,7 @@ public: static CarlaPlugin* newNative(const initializer& init); static size_t getNativePluginCount(); + static const PluginDescriptor* getNativePlugin(size_t index); // ------------------------------------------------------------------- diff --git a/c++/carla-backend/carla_shared.cpp b/c++/carla-backend/carla_shared.cpp index 281b409..9ff8975 100644 --- a/c++/carla-backend/carla_shared.cpp +++ b/c++/carla-backend/carla_shared.cpp @@ -17,6 +17,10 @@ #include "carla_shared.h" +#ifndef BUILD_BRIDGE +# include "plugins/carla_native.h" +#endif + #include CARLA_BACKEND_START_NAMESPACE @@ -58,6 +62,8 @@ const char* PluginType2str(const PluginType type) { case PLUGIN_NONE: return "PLUGIN_NONE"; + case PLUGIN_INTERNAL: + return "PLUGIN_INTERNAL"; case PLUGIN_LADSPA: return "PLUGIN_LADSPA"; case PLUGIN_DSSI: @@ -393,6 +399,8 @@ const char* getPluginTypeString(const PluginType type) { case PLUGIN_NONE: return "NONE"; + case PLUGIN_INTERNAL: + return "INTERNAL"; case PLUGIN_LADSPA: return "LADSPA"; case PLUGIN_DSSI: @@ -520,6 +528,20 @@ void setLastError(const char* const error) // ------------------------------------------------------------------------------------------------------------------- #ifndef BUILD_BRIDGE +uint32_t getPluginHintsFromNative(const uint32_t nativeHints) +{ + uint32_t realHints = 0; + + if (nativeHints & ::PLUGIN_IS_SYNTH) + realHints |= PLUGIN_IS_SYNTH; + if (nativeHints & ::PLUGIN_HAS_GUI) + realHints |= PLUGIN_HAS_GUI; + if (nativeHints & ::PLUGIN_USES_SINGLE_THREAD) + realHints |= PLUGIN_USES_SINGLE_THREAD; + + return realHints; +} + void setOption(const OptionsType option, const int value, const char* const valueStr) { qDebug("CarlaBackend::setOption(%s, %i, \"%s\")", OptionsType2str(option), value, valueStr); diff --git a/c++/carla-backend/carla_shared.h b/c++/carla-backend/carla_shared.h index 5a187e7..079ed13 100644 --- a/c++/carla-backend/carla_shared.h +++ b/c++/carla-backend/carla_shared.h @@ -51,6 +51,8 @@ const char* getLastError(); void setLastError(const char* const error); #ifndef BUILD_BRIDGE +uint32_t getPluginHintsFromNative(const uint32_t nativeHints); + void setOption(const OptionsType option, const int value, const char* const valueStr); void resetOptions(); diff --git a/src/carla.py b/src/carla.py index 0104695..c93cae0 100755 --- a/src/carla.py +++ b/src/carla.py @@ -576,8 +576,8 @@ class PluginRefreshW(QDialog, ui_carla_refresh.Ui_PluginRefreshW): self.b_close.setVisible(False) native, posix32, posix64, win32, win64 = (self.ch_native.isChecked(), self.ch_posix32.isChecked(), self.ch_posix64.isChecked(), self.ch_win32.isChecked(), self.ch_win64.isChecked()) - ladspa, dssi, lv2, vst, gig, sf2, sfz = (self.ch_ladspa.isChecked(), self.ch_dssi.isChecked(), self.ch_lv2.isChecked(), self.ch_vst.isChecked(), - self.ch_gig.isChecked(), self.ch_sf2.isChecked(), self.ch_sfz.isChecked()) + ladspa, dssi, lv2, vst, gig, sf2, sfz = (self.ch_ladspa.isChecked(), self.ch_dssi.isChecked(), self.ch_lv2.isChecked(), self.ch_vst.isChecked(), + self.ch_gig.isChecked(), self.ch_sf2.isChecked(), self.ch_sfz.isChecked()) self.pThread.setSearchBinaryTypes(native, posix32, posix64, win32, win64) self.pThread.setSearchPluginTypes(ladspa, dssi, lv2, vst, gig, sf2, sfz) @@ -693,6 +693,7 @@ class PluginDatabaseW(QDialog, ui_carla_database.Ui_PluginDatabaseW): self.connect(self.ch_midi, SIGNAL("clicked()"), SLOT("slot_checkFilters()")) self.connect(self.ch_other, SIGNAL("clicked()"), SLOT("slot_checkFilters()")) self.connect(self.ch_kits, SIGNAL("clicked()"), SLOT("slot_checkFilters()")) + self.connect(self.ch_internal, SIGNAL("clicked()"), SLOT("slot_checkFilters()")) self.connect(self.ch_ladspa, SIGNAL("clicked()"), SLOT("slot_checkFilters()")) self.connect(self.ch_dssi, SIGNAL("clicked()"), SLOT("slot_checkFilters()")) self.connect(self.ch_lv2, SIGNAL("clicked()"), SLOT("slot_checkFilters()")) @@ -709,6 +710,28 @@ class PluginDatabaseW(QDialog, ui_carla_database.Ui_PluginDatabaseW): self.tb_filters.setArrowType(Qt.UpArrow if yesno else Qt.DownArrow) self.frame.setVisible(yesno) + def checkInternalPlugins(self): + internals = toList(self.settings_db.value("Plugins/Internal", [])) + + count = 0 + + for plugins in internals: + for plugin in plugins: + count += 1 + + if count != Carla.Host.get_internal_plugin_count(): + internal_plugins = [] + + for i in range(Carla.Host.get_internal_plugin_count()): + descInfo = Carla.Host.get_internal_plugin_info(i) + plugins = checkPluginInternal(descInfo) + + if plugins: + internal_plugins.append(plugins) + + self.settings_db.setValue("Plugins/Internal", internal_plugins) + self.settings_db.sync() + def reAddPlugins(self): row_count = self.tableWidget.rowCount() for x in range(row_count): @@ -717,6 +740,10 @@ class PluginDatabaseW(QDialog, ui_carla_database.Ui_PluginDatabaseW): self.last_table_index = 0 self.tableWidget.setSortingEnabled(False) + self.checkInternalPlugins() + + internals = toList(self.settings_db.value("Plugins/Internal", [])) + ladspa_plugins = [] ladspa_plugins += toList(self.settings_db.value("Plugins/LADSPA_native", [])) ladspa_plugins += toList(self.settings_db.value("Plugins/LADSPA_posix32", [])) @@ -749,12 +776,18 @@ class PluginDatabaseW(QDialog, ui_carla_database.Ui_PluginDatabaseW): sf2s = toList(self.settings_db.value("Plugins/SF2", [])) sfzs = toList(self.settings_db.value("Plugins/SFZ", [])) + internal_count = 0 ladspa_count = 0 dssi_count = 0 lv2_count = 0 vst_count = 0 kit_count = 0 + for plugins in internals: + for plugin in plugins: + self.addPluginToTable(plugin, self.tr("Internal")) + internal_count += 1 + for plugins in ladspa_plugins: for plugin in plugins: self.addPluginToTable(plugin, "LADSPA") @@ -794,7 +827,7 @@ class PluginDatabaseW(QDialog, ui_carla_database.Ui_PluginDatabaseW): self.tableWidget.setSortingEnabled(True) self.tableWidget.sortByColumn(0, Qt.AscendingOrder) - self.label.setText(self.tr("Have %i LADSPA, %i DSSI, %i LV2, %i VST and %i Sound Kits" % (ladspa_count, dssi_count, lv2_count, vst_count, kit_count))) + self.label.setText(self.tr("Have %i %s, %i LADSPA, %i DSSI, %i LV2, %i VST and %i Sound Kits" % (internal_count, self.tr("Internal"), ladspa_count, dssi_count, lv2_count, vst_count, kit_count))) def addPluginToTable(self, plugin, ptype): index = self.last_table_index @@ -888,11 +921,12 @@ class PluginDatabaseW(QDialog, ui_carla_database.Ui_PluginDatabaseW): hide_midi = not self.ch_midi.isChecked() hide_other = not self.ch_other.isChecked() - hide_ladspa = not self.ch_ladspa.isChecked() - hide_dssi = not self.ch_dssi.isChecked() - hide_lv2 = not self.ch_lv2.isChecked() - hide_vst = not self.ch_vst.isChecked() - hide_kits = not self.ch_kits.isChecked() + hide_internal = not self.ch_internal.isChecked() + hide_ladspa = not self.ch_ladspa.isChecked() + hide_dssi = not self.ch_dssi.isChecked() + hide_lv2 = not self.ch_lv2.isChecked() + hide_vst = not self.ch_vst.isChecked() + hide_kits = not self.ch_kits.isChecked() hide_native = not self.ch_native.isChecked() hide_bridged = not self.ch_bridged.isChecked() @@ -943,6 +977,8 @@ class PluginDatabaseW(QDialog, ui_carla_database.Ui_PluginDatabaseW): self.tableWidget.hideRow(i) elif (hide_kits and is_kit): self.tableWidget.hideRow(i) + elif (hide_internal and ptype == self.tr("Internal")): + self.tableWidget.hideRow(i) elif (hide_ladspa and ptype == "LADSPA"): self.tableWidget.hideRow(i) elif (hide_dssi and ptype == "DSSI"): @@ -977,6 +1013,7 @@ class PluginDatabaseW(QDialog, ui_carla_database.Ui_PluginDatabaseW): self.settings.setValue("PluginDatabase/ShowInstruments", self.ch_instruments.isChecked()) self.settings.setValue("PluginDatabase/ShowMIDI", self.ch_midi.isChecked()) self.settings.setValue("PluginDatabase/ShowOther", self.ch_other.isChecked()) + self.settings.setValue("PluginDatabase/ShowInternal", self.ch_internal.isChecked()) self.settings.setValue("PluginDatabase/ShowLADSPA", self.ch_ladspa.isChecked()) self.settings.setValue("PluginDatabase/ShowDSSI", self.ch_dssi.isChecked()) self.settings.setValue("PluginDatabase/ShowLV2", self.ch_lv2.isChecked()) @@ -996,6 +1033,7 @@ class PluginDatabaseW(QDialog, ui_carla_database.Ui_PluginDatabaseW): self.ch_instruments.setChecked(self.settings.value("PluginDatabase/ShowInstruments", True, type=bool)) self.ch_midi.setChecked(self.settings.value("PluginDatabase/ShowMIDI", True, type=bool)) self.ch_other.setChecked(self.settings.value("PluginDatabase/ShowOther", True, type=bool)) + self.ch_internal.setChecked(self.settings.value("PluginDatabase/ShowInternal", True, type=bool)) self.ch_ladspa.setChecked(self.settings.value("PluginDatabase/ShowLADSPA", True, type=bool)) self.ch_dssi.setChecked(self.settings.value("PluginDatabase/ShowDSSI", True, type=bool)) self.ch_lv2.setChecked(self.settings.value("PluginDatabase/ShowLV2", True, type=bool)) @@ -1570,6 +1608,7 @@ class CarlaMainW(QMainWindow, ui_carla.Ui_CarlaMainW): QMessageBox.critical(self, self.tr("Error"), self.tr("Not a valid Carla project file")) return + x_internal_plugins = None x_ladspa_plugins = None x_dssi_plugins = None x_lv2_plugins = None @@ -1595,7 +1634,11 @@ class CarlaMainW(QMainWindow, ui_carla.Ui_CarlaMainW): binaryS = os.path.basename(binary) unique_id = x_save_state_dict['UniqueID'] - if ptype == "LADSPA": + if ptype == "Internal": + if not x_internal_plugins: x_internal_plugins = toList(self.settings_db.value("Plugins/Internal", [])) + x_plugins = x_internal_plugins + + elif ptype == "LADSPA": if not x_ladspa_plugins: x_ladspa_plugins = [] x_ladspa_plugins += toList(self.settings_db.value("Plugins/LADSPA_native", [])) @@ -1648,7 +1691,7 @@ class CarlaMainW(QMainWindow, ui_carla.Ui_CarlaMainW): x_plugins = x_sfz_plugins else: - print("load_project() - ptype '%s' not recognized", ptype) + print("load_project() - ptype '%s' not recognized" % ptype) x_failed_plugins.append(x_save_state_dict['Name']) continue @@ -1721,26 +1764,27 @@ class CarlaMainW(QMainWindow, ui_carla.Ui_CarlaMainW): plugin_ul = None plugin_u = None plugin_l = None + plugin_B = binary - if (plugin_ulB): + if plugin_ulB: plugin = plugin_ulB - elif (plugin_ulb): + elif plugin_ulb: plugin = plugin_ulb - elif (plugin_ul): + elif plugin_ul: plugin = plugin_ul - elif (plugin_uB): + elif plugin_uB: plugin = plugin_uB - elif (plugin_ub): + elif plugin_ub: plugin = plugin_ub - elif (plugin_lB): + elif plugin_lB: plugin = plugin_lB - elif (plugin_lb): + elif plugin_lb: plugin = plugin_lb - elif (plugin_u): + elif plugin_u: plugin = plugin_u - elif (plugin_l): + elif plugin_l: plugin = plugin_l - elif (plugin_B): + elif plugin_B: plugin = plugin_B else: plugin = None diff --git a/src/carla_backend.py b/src/carla_backend.py index e4bc1b5..158323a 100644 --- a/src/carla_backend.py +++ b/src/carla_backend.py @@ -615,6 +615,21 @@ def runCarlaDiscovery(itype, stype, filename, tool, isWine=False): return plugins +def checkPluginInternal(desc): + plugins = [] + + pinfo = deepcopy(PyPluginInfo) + pinfo['type'] = PLUGIN_INTERNAL + pinfo['name'] = cString(desc['name']) + pinfo['label'] = cString(desc['label']) + pinfo['maker'] = cString(desc['maker']) + pinfo['copyright'] = cString(desc['copyright']) + pinfo['hints'] = int(desc['hints']) + pinfo['build'] = BINARY_NATIVE + + plugins.append(pinfo) + return plugins + def checkPluginLADSPA(filename, tool, isWine=False): return runCarlaDiscovery(PLUGIN_LADSPA, "LADSPA", filename, tool, isWine) @@ -750,6 +765,12 @@ class Host(object): self.lib.get_engine_driver_name.argtypes = [c_uint] self.lib.get_engine_driver_name.restype = c_char_p + self.lib.get_internal_plugin_count.argtypes = None + self.lib.get_internal_plugin_count.restype = c_uint + + self.lib.get_internal_plugin_info.argtypes = [c_uint] + self.lib.get_internal_plugin_info.restype = POINTER(PluginInfo) + self.lib.engine_init.argtypes = [c_char_p, c_char_p] self.lib.engine_init.restype = c_bool @@ -927,6 +948,12 @@ class Host(object): def get_engine_driver_name(self, index): return self.lib.get_engine_driver_name(index) + def get_internal_plugin_count(self): + return self.lib.get_internal_plugin_count() + + def get_internal_plugin_info(self, index): + return struct_to_dict(self.lib.get_internal_plugin_info(index).contents) + def engine_init(self, driver_name, client_name): return self.lib.engine_init(driver_name.encode("utf-8"), client_name.encode("utf-8")) diff --git a/src/shared_carla.py b/src/shared_carla.py index aa8d716..d98f808 100644 --- a/src/shared_carla.py +++ b/src/shared_carla.py @@ -87,14 +87,15 @@ BINARY_WIN64 = 4 BINARY_OTHER = 5 # enum PluginType -PLUGIN_NONE = 0 -PLUGIN_LADSPA = 1 -PLUGIN_DSSI = 2 -PLUGIN_LV2 = 3 -PLUGIN_VST = 4 -PLUGIN_GIG = 5 -PLUGIN_SF2 = 6 -PLUGIN_SFZ = 7 +PLUGIN_NONE = 0 +PLUGIN_INTERNAL = 1 +PLUGIN_LADSPA = 2 +PLUGIN_DSSI = 3 +PLUGIN_LV2 = 4 +PLUGIN_VST = 5 +PLUGIN_GIG = 6 +PLUGIN_SF2 = 7 +PLUGIN_SFZ = 8 # enum PluginCategory PLUGIN_CATEGORY_NONE = 0 @@ -632,7 +633,9 @@ class PluginEdit(QDialog, ui_carla_edit.Ui_PluginEdit): self.tab_programs.setCurrentIndex(1) # Set Meta-Data - if pluginType == PLUGIN_LADSPA: + if pluginType == PLUGIN_INTERNAL: + self.le_type.setText(self.tr("Internal")) + elif pluginType == PLUGIN_LADSPA: self.le_type.setText("LADSPA") elif pluginType == PLUGIN_DSSI: self.le_type.setText("DSSI") @@ -1488,7 +1491,9 @@ class PluginWidget(QFrame, ui_carla_plugin.Ui_PluginWidget): def getSaveXMLContent(self): Carla.Host.prepare_for_save(self.m_pluginId) - if self.m_pluginInfo['type'] == PLUGIN_LADSPA: + if self.m_pluginInfo['type'] == PLUGIN_INTERNAL: + typeStr = "Internal" + elif self.m_pluginInfo['type'] == PLUGIN_LADSPA: typeStr = "LADSPA" elif self.m_pluginInfo['type'] == PLUGIN_DSSI: typeStr = "DSSI" diff --git a/src/ui/carla_database.ui b/src/ui/carla_database.ui index 593fac2..8dd1c07 100644 --- a/src/ui/carla_database.ui +++ b/src/ui/carla_database.ui @@ -61,66 +61,73 @@ QFrame::Sunken - - + + - Effects + DSSI - - + + - Instruments + LV2 - - + + - MIDI Plugins + VST - - + + - Other/Misc + LADSPA - + Sound Kits - - + + - LV2 + Internal - - + + - VST + Effects - - + + - LADSPA + Instruments - - + + - DSSI + MIDI Plugins + + + + + + + Other/Misc