|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995 |
- #!/usr/bin/env python3
- # -*- coding: utf-8 -*-
-
- # Carla plugin host
- # Copyright (C) 2011-2022 Filipe Coelho <falktx@falktx.com>
- #
- # This program is free software; you can redistribute it and/or
- # modify it under the terms of the GNU General Public License as
- # published by the Free Software Foundation; either version 2 of
- # the License, or any later version.
- #
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License for more details.
- #
- # For a full copy of the GNU General Public License see the doc/GPL.txt file.
-
- # ---------------------------------------------------------------------------------------------------------------------
- # Imports (Global)
-
- import os
-
- from PyQt5.QtCore import pyqtSlot, Qt, QByteArray, QEventLoop
- from PyQt5.QtWidgets import QApplication, QDialog, QHeaderView, QTableWidgetItem, QWidget
-
- # ---------------------------------------------------------------------------------------------------------------------
- # Imports (Carla)
-
- from carla_backend import (
- BINARY_NATIVE,
- BINARY_OTHER,
- BINARY_POSIX32,
- BINARY_POSIX64,
- BINARY_WIN32,
- BINARY_WIN64,
- PLUGIN_AU,
- PLUGIN_DSSI,
- PLUGIN_HAS_CUSTOM_UI,
- PLUGIN_HAS_INLINE_DISPLAY,
- PLUGIN_INTERNAL,
- PLUGIN_IS_BRIDGE,
- PLUGIN_IS_RTSAFE,
- PLUGIN_IS_SYNTH,
- PLUGIN_JSFX,
- PLUGIN_LADSPA,
- PLUGIN_LV2,
- PLUGIN_SF2,
- PLUGIN_SFZ,
- PLUGIN_VST2,
- PLUGIN_VST3,
- PLUGIN_CLAP,
- )
-
- from carla_shared import (
- CARLA_DEFAULT_LV2_PATH,
- CARLA_KEY_PATHS_LV2,
- HAIKU,
- LINUX,
- MACOS,
- WINDOWS,
- fontMetricsHorizontalAdvance,
- gCarla,
- getIcon,
- kIs64bit,
- splitter,
- )
-
- from carla_utils import getPluginTypeAsString
-
- from utils import QSafeSettings
-
- # ---------------------------------------------------------------------------------------------------------------------
- # Imports (Local)
-
- from .discovery import PLUGIN_QUERY_API_VERSION, checkPluginCached
- from .pluginlistdialog_ui import Ui_PluginListDialog
- from .pluginlistrefreshdialog import PluginRefreshW
-
- # ---------------------------------------------------------------------------------------------------------------------
- # Plugin Database Dialog
-
- class PluginListDialog(QDialog):
- TABLEWIDGET_ITEM_FAVORITE = 0
- TABLEWIDGET_ITEM_NAME = 1
- TABLEWIDGET_ITEM_LABEL = 2
- TABLEWIDGET_ITEM_MAKER = 3
- TABLEWIDGET_ITEM_BINARY = 4
-
- def __init__(self, parent: QWidget, host, useSystemIcons: bool):
- QDialog.__init__(self, parent)
- self.host = host
- self.ui = Ui_PluginListDialog()
- self.ui.setupUi(self)
-
- # To be changed by parent
- self.hasLoadedLv2Plugins = False
-
- # ----------------------------------------------------------------------------------------------------
- # Internal stuff
-
- self.fLastTableIndex = 0
- self.fRetPlugin = None
- self.fRealParent = parent
- self.fFavoritePlugins = []
- self.fFavoritePluginsChanged = False
- self.fUseSystemIcons = useSystemIcons
-
- self.fTrYes = self.tr("Yes")
- self.fTrNo = self.tr("No")
- self.fTrNative = self.tr("Native")
-
- # ----------------------------------------------------------------------------------------------------
- # Set-up GUI
-
- self.ui.b_add.setEnabled(False)
- self.addAction(self.ui.act_focus_search)
- self.ui.act_focus_search.triggered.connect(self.slot_focusSearchFieldAndSelectAll)
-
- if BINARY_NATIVE in (BINARY_POSIX32, BINARY_WIN32):
- self.ui.ch_bridged.setText(self.tr("Bridged (64bit)"))
- else:
- self.ui.ch_bridged.setText(self.tr("Bridged (32bit)"))
-
- if not (LINUX or MACOS):
- self.ui.ch_bridged_wine.setChecked(False)
- self.ui.ch_bridged_wine.setEnabled(False)
-
- if MACOS:
- self.setWindowModality(Qt.WindowModal)
- else:
- self.ui.ch_au.setChecked(False)
- self.ui.ch_au.setEnabled(False)
- self.ui.ch_au.setVisible(False)
-
- self.ui.tab_info.tabBar().hide()
- self.ui.tab_reqs.tabBar().hide()
- # FIXME, why /2 needed?
- self.ui.tab_info.setMinimumWidth(int(self.ui.la_id.width()/2) +
- fontMetricsHorizontalAdvance(self.ui.l_id.fontMetrics(), "9999999999") + 6*3)
- self.setWindowFlags(self.windowFlags() & ~Qt.WindowContextHelpButtonHint)
-
- # ----------------------------------------------------------------------------------------------------
- # Load settings
-
- self.loadSettings()
-
- # ----------------------------------------------------------------------------------------------------
- # Disable bridges if not enabled in settings
-
- # NOTE: We Assume win32 carla build will not run win64 plugins
- if (WINDOWS and not kIs64bit) or not host.showPluginBridges:
- self.ui.ch_native.setChecked(True)
- self.ui.ch_native.setEnabled(False)
- self.ui.ch_native.setVisible(True)
- self.ui.ch_bridged.setChecked(False)
- self.ui.ch_bridged.setEnabled(False)
- self.ui.ch_bridged.setVisible(False)
- self.ui.ch_bridged_wine.setChecked(False)
- self.ui.ch_bridged_wine.setEnabled(False)
- self.ui.ch_bridged_wine.setVisible(False)
-
- elif not host.showWineBridges:
- self.ui.ch_bridged_wine.setChecked(False)
- self.ui.ch_bridged_wine.setEnabled(False)
- self.ui.ch_bridged_wine.setVisible(False)
-
- # ----------------------------------------------------------------------------------------------------
- # Set-up Icons
-
- if useSystemIcons:
- self.ui.b_add.setIcon(getIcon('list-add', 16, 'svgz'))
- self.ui.b_cancel.setIcon(getIcon('dialog-cancel', 16, 'svgz'))
- self.ui.b_clear_filters.setIcon(getIcon('edit-clear', 16, 'svgz'))
- self.ui.b_refresh.setIcon(getIcon('view-refresh', 16, 'svgz'))
- hhi = self.ui.tableWidget.horizontalHeaderItem(self.TABLEWIDGET_ITEM_FAVORITE)
- hhi.setIcon(getIcon('bookmarks', 16, 'svgz'))
-
- # ----------------------------------------------------------------------------------------------------
- # Set-up connections
-
- self.finished.connect(self.slot_saveSettings)
- self.ui.b_add.clicked.connect(self.slot_addPlugin)
- self.ui.b_cancel.clicked.connect(self.reject)
- self.ui.b_refresh.clicked.connect(self.slot_refreshPlugins)
- self.ui.b_clear_filters.clicked.connect(self.slot_clearFilters)
- self.ui.lineEdit.textChanged.connect(self.slot_checkFilters)
- self.ui.tableWidget.currentCellChanged.connect(self.slot_checkPlugin)
- self.ui.tableWidget.cellClicked.connect(self.slot_cellClicked)
- self.ui.tableWidget.cellDoubleClicked.connect(self.slot_cellDoubleClicked)
-
- self.ui.ch_internal.clicked.connect(self.slot_checkFilters)
- self.ui.ch_ladspa.clicked.connect(self.slot_checkFilters)
- self.ui.ch_dssi.clicked.connect(self.slot_checkFilters)
- self.ui.ch_lv2.clicked.connect(self.slot_checkFilters)
- self.ui.ch_vst.clicked.connect(self.slot_checkFilters)
- self.ui.ch_vst3.clicked.connect(self.slot_checkFilters)
- self.ui.ch_clap.clicked.connect(self.slot_checkFilters)
- self.ui.ch_au.clicked.connect(self.slot_checkFilters)
- self.ui.ch_jsfx.clicked.connect(self.slot_checkFilters)
- self.ui.ch_kits.clicked.connect(self.slot_checkFilters)
- self.ui.ch_effects.clicked.connect(self.slot_checkFilters)
- self.ui.ch_instruments.clicked.connect(self.slot_checkFilters)
- self.ui.ch_midi.clicked.connect(self.slot_checkFilters)
- self.ui.ch_other.clicked.connect(self.slot_checkFilters)
- self.ui.ch_native.clicked.connect(self.slot_checkFilters)
- self.ui.ch_bridged.clicked.connect(self.slot_checkFilters)
- self.ui.ch_bridged_wine.clicked.connect(self.slot_checkFilters)
- self.ui.ch_favorites.clicked.connect(self.slot_checkFilters)
- self.ui.ch_rtsafe.clicked.connect(self.slot_checkFilters)
- self.ui.ch_cv.clicked.connect(self.slot_checkFilters)
- self.ui.ch_gui.clicked.connect(self.slot_checkFilters)
- self.ui.ch_inline_display.clicked.connect(self.slot_checkFilters)
- self.ui.ch_stereo.clicked.connect(self.slot_checkFilters)
- self.ui.ch_cat_all.clicked.connect(self.slot_checkFiltersCategoryAll)
- self.ui.ch_cat_delay.clicked.connect(self.slot_checkFiltersCategorySpecific)
- self.ui.ch_cat_distortion.clicked.connect(self.slot_checkFiltersCategorySpecific)
- self.ui.ch_cat_dynamics.clicked.connect(self.slot_checkFiltersCategorySpecific)
- self.ui.ch_cat_eq.clicked.connect(self.slot_checkFiltersCategorySpecific)
- self.ui.ch_cat_filter.clicked.connect(self.slot_checkFiltersCategorySpecific)
- self.ui.ch_cat_modulator.clicked.connect(self.slot_checkFiltersCategorySpecific)
- self.ui.ch_cat_synth.clicked.connect(self.slot_checkFiltersCategorySpecific)
- self.ui.ch_cat_utility.clicked.connect(self.slot_checkFiltersCategorySpecific)
- self.ui.ch_cat_other.clicked.connect(self.slot_checkFiltersCategorySpecific)
-
- # ----------------------------------------------------------------------------------------------------
- # Post-connect setup
-
- self._reAddPlugins()
- self.slot_focusSearchFieldAndSelectAll()
-
- # --------------------------------------------------------------------------------------------------------
-
- @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 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):
- if column != self.TABLEWIDGET_ITEM_FAVORITE:
- self.slot_addPlugin()
-
- @pyqtSlot()
- def slot_focusSearchFieldAndSelectAll(self):
- self.ui.lineEdit.setFocus()
- self.ui.lineEdit.selectAll()
-
- @pyqtSlot()
- def slot_addPlugin(self):
- if self.ui.tableWidget.currentRow() >= 0:
- self.fRetPlugin = self.ui.tableWidget.item(self.ui.tableWidget.currentRow(),
- self.TABLEWIDGET_ITEM_NAME).data(Qt.UserRole+1)
- self.accept()
- else:
- self.reject()
-
- @pyqtSlot(int)
- 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)
-
- isSynth = bool(plugin['hints'] & PLUGIN_IS_SYNTH)
- isEffect = bool(plugin['audio.ins'] > 0 < plugin['audio.outs'] and not isSynth)
- isMidi = bool(plugin['audio.ins'] == 0 and
- plugin['audio.outs'] == 0 and
- plugin['midi.ins'] > 0 < plugin['midi.outs'])
- # isKit = bool(plugin['type'] in (PLUGIN_SF2, PLUGIN_SFZ))
- # isOther = bool(not (isEffect or isSynth or isMidi or isKit))
-
- if isSynth:
- ptype = "Instrument"
- elif isEffect:
- ptype = "Effect"
- elif isMidi:
- ptype = "MIDI Plugin"
- else:
- ptype = "Other"
-
- if plugin['build'] == BINARY_NATIVE:
- parch = self.fTrNative
- elif plugin['build'] == BINARY_POSIX32:
- parch = "posix32"
- elif plugin['build'] == BINARY_POSIX64:
- parch = "posix64"
- elif plugin['build'] == BINARY_WIN32:
- parch = "win32"
- elif plugin['build'] == BINARY_WIN64:
- parch = "win64"
- elif plugin['build'] == BINARY_OTHER:
- parch = self.tr("Other")
- elif plugin['build'] == BINARY_WIN32:
- parch = self.tr("Unknown")
-
- self.ui.l_format.setText(getPluginTypeAsString(plugin['type']))
- self.ui.l_type.setText(ptype)
- self.ui.l_arch.setText(parch)
- self.ui.l_id.setText(str(plugin['uniqueId']))
- self.ui.l_ains.setText(str(plugin['audio.ins']))
- self.ui.l_aouts.setText(str(plugin['audio.outs']))
- self.ui.l_cvins.setText(str(plugin['cv.ins']))
- self.ui.l_cvouts.setText(str(plugin['cv.outs']))
- self.ui.l_mins.setText(str(plugin['midi.ins']))
- self.ui.l_mouts.setText(str(plugin['midi.outs']))
- self.ui.l_pins.setText(str(plugin['parameters.ins']))
- self.ui.l_pouts.setText(str(plugin['parameters.outs']))
- self.ui.l_gui.setText(self.fTrYes if plugin['hints'] & PLUGIN_HAS_CUSTOM_UI else self.fTrNo)
- self.ui.l_idisp.setText(self.fTrYes if plugin['hints'] & PLUGIN_HAS_INLINE_DISPLAY else self.fTrNo)
- self.ui.l_bridged.setText(self.fTrYes if plugin['hints'] & PLUGIN_IS_BRIDGE else self.fTrNo)
- self.ui.l_synth.setText(self.fTrYes if isSynth else self.fTrNo)
- else:
- self.ui.b_add.setEnabled(False)
- self.ui.l_format.setText("---")
- self.ui.l_type.setText("---")
- self.ui.l_arch.setText("---")
- self.ui.l_id.setText("---")
- self.ui.l_ains.setText("---")
- self.ui.l_aouts.setText("---")
- self.ui.l_cvins.setText("---")
- self.ui.l_cvouts.setText("---")
- self.ui.l_mins.setText("---")
- self.ui.l_mouts.setText("---")
- self.ui.l_pins.setText("---")
- self.ui.l_pouts.setText("---")
- self.ui.l_gui.setText("---")
- self.ui.l_idisp.setText("---")
- self.ui.l_bridged.setText("---")
- self.ui.l_synth.setText("---")
-
- @pyqtSlot()
- def slot_checkFilters(self):
- self._checkFilters()
-
- @pyqtSlot(bool)
- def slot_checkFiltersCategoryAll(self, clicked):
- self.ui.ch_cat_delay.setChecked(not clicked)
- self.ui.ch_cat_distortion.setChecked(not clicked)
- self.ui.ch_cat_dynamics.setChecked(not clicked)
- self.ui.ch_cat_eq.setChecked(not clicked)
- self.ui.ch_cat_filter.setChecked(not clicked)
- self.ui.ch_cat_modulator.setChecked(not clicked)
- self.ui.ch_cat_synth.setChecked(not clicked)
- self.ui.ch_cat_utility.setChecked(not clicked)
- self.ui.ch_cat_other.setChecked(not clicked)
- self._checkFilters()
-
- @pyqtSlot(bool)
- def slot_checkFiltersCategorySpecific(self, clicked):
- if clicked:
- self.ui.ch_cat_all.setChecked(False)
- elif not (self.ui.ch_cat_delay.isChecked() or
- self.ui.ch_cat_distortion.isChecked() or
- self.ui.ch_cat_dynamics.isChecked() or
- self.ui.ch_cat_eq.isChecked() or
- self.ui.ch_cat_filter.isChecked() or
- self.ui.ch_cat_modulator.isChecked() or
- self.ui.ch_cat_synth.isChecked() or
- self.ui.ch_cat_utility.isChecked() or
- self.ui.ch_cat_other.isChecked()):
- self.ui.ch_cat_all.setChecked(True)
- self._checkFilters()
-
- @pyqtSlot()
- def slot_refreshPlugins(self):
- if PluginRefreshW(self, self.host, self.fUseSystemIcons, self.hasLoadedLv2Plugins).exec_():
- self._reAddPlugins()
-
- if self.fRealParent:
- self.fRealParent.setLoadRDFsNeeded()
-
- @pyqtSlot()
- def slot_clearFilters(self):
- self.blockSignals(True)
-
- self.ui.ch_internal.setChecked(True)
- self.ui.ch_ladspa.setChecked(True)
- self.ui.ch_dssi.setChecked(True)
- self.ui.ch_lv2.setChecked(True)
- self.ui.ch_vst.setChecked(True)
- self.ui.ch_vst3.setChecked(True)
- self.ui.ch_clap.setChecked(True)
- self.ui.ch_jsfx.setChecked(True)
- self.ui.ch_kits.setChecked(True)
-
- self.ui.ch_instruments.setChecked(True)
- self.ui.ch_effects.setChecked(True)
- self.ui.ch_midi.setChecked(True)
- self.ui.ch_other.setChecked(True)
-
- self.ui.ch_native.setChecked(True)
- self.ui.ch_bridged.setChecked(False)
- self.ui.ch_bridged_wine.setChecked(False)
-
- self.ui.ch_favorites.setChecked(False)
- self.ui.ch_rtsafe.setChecked(False)
- self.ui.ch_stereo.setChecked(False)
- self.ui.ch_cv.setChecked(False)
- self.ui.ch_gui.setChecked(False)
- self.ui.ch_inline_display.setChecked(False)
-
- if self.ui.ch_au.isEnabled():
- self.ui.ch_au.setChecked(True)
-
- self.ui.ch_cat_all.setChecked(True)
- self.ui.ch_cat_delay.setChecked(False)
- self.ui.ch_cat_distortion.setChecked(False)
- self.ui.ch_cat_dynamics.setChecked(False)
- self.ui.ch_cat_eq.setChecked(False)
- self.ui.ch_cat_filter.setChecked(False)
- self.ui.ch_cat_modulator.setChecked(False)
- self.ui.ch_cat_synth.setChecked(False)
- self.ui.ch_cat_utility.setChecked(False)
- self.ui.ch_cat_other.setChecked(False)
-
- self.ui.lineEdit.clear()
-
- self.blockSignals(False)
-
- self._checkFilters()
-
- # --------------------------------------------------------------------------------------------------------
-
- @pyqtSlot()
- def slot_saveSettings(self):
- settings = QSafeSettings("falkTX", "CarlaDatabase2")
- settings.setValue("PluginDatabase/Geometry", self.saveGeometry())
- settings.setValue("PluginDatabase/TableGeometry_6", self.ui.tableWidget.horizontalHeader().saveState())
- settings.setValue("PluginDatabase/ShowEffects", self.ui.ch_effects.isChecked())
- settings.setValue("PluginDatabase/ShowInstruments", self.ui.ch_instruments.isChecked())
- settings.setValue("PluginDatabase/ShowMIDI", self.ui.ch_midi.isChecked())
- settings.setValue("PluginDatabase/ShowOther", self.ui.ch_other.isChecked())
- settings.setValue("PluginDatabase/ShowInternal", self.ui.ch_internal.isChecked())
- settings.setValue("PluginDatabase/ShowLADSPA", self.ui.ch_ladspa.isChecked())
- settings.setValue("PluginDatabase/ShowDSSI", self.ui.ch_dssi.isChecked())
- settings.setValue("PluginDatabase/ShowLV2", self.ui.ch_lv2.isChecked())
- settings.setValue("PluginDatabase/ShowVST2", self.ui.ch_vst.isChecked())
- settings.setValue("PluginDatabase/ShowVST3", self.ui.ch_vst3.isChecked())
- settings.setValue("PluginDatabase/ShowCLAP", self.ui.ch_clap.isChecked())
- settings.setValue("PluginDatabase/ShowAU", self.ui.ch_au.isChecked())
- settings.setValue("PluginDatabase/ShowJSFX", self.ui.ch_jsfx.isChecked())
- settings.setValue("PluginDatabase/ShowKits", self.ui.ch_kits.isChecked())
- settings.setValue("PluginDatabase/ShowNative", self.ui.ch_native.isChecked())
- settings.setValue("PluginDatabase/ShowBridged", self.ui.ch_bridged.isChecked())
- settings.setValue("PluginDatabase/ShowBridgedWine", self.ui.ch_bridged_wine.isChecked())
- settings.setValue("PluginDatabase/ShowFavorites", self.ui.ch_favorites.isChecked())
- settings.setValue("PluginDatabase/ShowRtSafe", self.ui.ch_rtsafe.isChecked())
- settings.setValue("PluginDatabase/ShowHasCV", self.ui.ch_cv.isChecked())
- settings.setValue("PluginDatabase/ShowHasGUI", self.ui.ch_gui.isChecked())
- settings.setValue("PluginDatabase/ShowHasInlineDisplay", self.ui.ch_inline_display.isChecked())
- settings.setValue("PluginDatabase/ShowStereoOnly", self.ui.ch_stereo.isChecked())
- settings.setValue("PluginDatabase/SearchText", self.ui.lineEdit.text())
-
- if self.ui.ch_cat_all.isChecked():
- settings.setValue("PluginDatabase/ShowCategory", "all")
- else:
- categoryhash = ""
- if self.ui.ch_cat_delay.isChecked():
- categoryhash += ":delay"
- if self.ui.ch_cat_distortion.isChecked():
- categoryhash += ":distortion"
- if self.ui.ch_cat_dynamics.isChecked():
- categoryhash += ":dynamics"
- if self.ui.ch_cat_eq.isChecked():
- categoryhash += ":eq"
- if self.ui.ch_cat_filter.isChecked():
- categoryhash += ":filter"
- if self.ui.ch_cat_modulator.isChecked():
- categoryhash += ":modulator"
- if self.ui.ch_cat_synth.isChecked():
- categoryhash += ":synth"
- if self.ui.ch_cat_utility.isChecked():
- categoryhash += ":utility"
- if self.ui.ch_cat_other.isChecked():
- categoryhash += ":other"
- if categoryhash:
- categoryhash += ":"
- settings.setValue("PluginDatabase/ShowCategory", categoryhash)
-
- if self.fFavoritePluginsChanged:
- settings.setValue("PluginDatabase/Favorites", self.fFavoritePlugins)
-
- # --------------------------------------------------------------------------------------------------------
-
- def loadSettings(self):
- settings = QSafeSettings("falkTX", "CarlaDatabase2")
- self.fFavoritePlugins = settings.value("PluginDatabase/Favorites", [], list)
- self.fFavoritePluginsChanged = False
-
- self.restoreGeometry(settings.value("PluginDatabase/Geometry", QByteArray(), QByteArray))
- self.ui.ch_effects.setChecked(settings.value("PluginDatabase/ShowEffects", True, bool))
- self.ui.ch_instruments.setChecked(settings.value("PluginDatabase/ShowInstruments", True, bool))
- self.ui.ch_midi.setChecked(settings.value("PluginDatabase/ShowMIDI", True, bool))
- self.ui.ch_other.setChecked(settings.value("PluginDatabase/ShowOther", True, bool))
- self.ui.ch_internal.setChecked(settings.value("PluginDatabase/ShowInternal", True, bool))
- self.ui.ch_ladspa.setChecked(settings.value("PluginDatabase/ShowLADSPA", True, bool))
- self.ui.ch_dssi.setChecked(settings.value("PluginDatabase/ShowDSSI", True, bool))
- self.ui.ch_lv2.setChecked(settings.value("PluginDatabase/ShowLV2", True, bool))
- self.ui.ch_vst.setChecked(settings.value("PluginDatabase/ShowVST2", True, bool))
- self.ui.ch_vst3.setChecked(settings.value("PluginDatabase/ShowVST3", True, bool))
- self.ui.ch_clap.setChecked(settings.value("PluginDatabase/ShowCLAP", True, bool))
- self.ui.ch_au.setChecked(settings.value("PluginDatabase/ShowAU", MACOS, bool))
- self.ui.ch_jsfx.setChecked(settings.value("PluginDatabase/ShowJSFX", True, bool))
- self.ui.ch_kits.setChecked(settings.value("PluginDatabase/ShowKits", True, bool))
- self.ui.ch_native.setChecked(settings.value("PluginDatabase/ShowNative", True, bool))
- self.ui.ch_bridged.setChecked(settings.value("PluginDatabase/ShowBridged", True, bool))
- self.ui.ch_bridged_wine.setChecked(settings.value("PluginDatabase/ShowBridgedWine", True, bool))
- self.ui.ch_favorites.setChecked(settings.value("PluginDatabase/ShowFavorites", False, bool))
- self.ui.ch_rtsafe.setChecked(settings.value("PluginDatabase/ShowRtSafe", False, bool))
- self.ui.ch_cv.setChecked(settings.value("PluginDatabase/ShowHasCV", False, bool))
- self.ui.ch_gui.setChecked(settings.value("PluginDatabase/ShowHasGUI", False, bool))
- self.ui.ch_inline_display.setChecked(settings.value("PluginDatabase/ShowHasInlineDisplay", False, bool))
- self.ui.ch_stereo.setChecked(settings.value("PluginDatabase/ShowStereoOnly", False, bool))
- self.ui.lineEdit.setText(settings.value("PluginDatabase/SearchText", "", str))
-
- categoryhash = settings.value("PluginDatabase/ShowCategory", "all", str)
- if categoryhash == "all" or len(categoryhash) < 2:
- self.ui.ch_cat_all.setChecked(True)
- self.ui.ch_cat_delay.setChecked(False)
- self.ui.ch_cat_distortion.setChecked(False)
- self.ui.ch_cat_dynamics.setChecked(False)
- self.ui.ch_cat_eq.setChecked(False)
- self.ui.ch_cat_filter.setChecked(False)
- self.ui.ch_cat_modulator.setChecked(False)
- self.ui.ch_cat_synth.setChecked(False)
- self.ui.ch_cat_utility.setChecked(False)
- self.ui.ch_cat_other.setChecked(False)
- else:
- self.ui.ch_cat_all.setChecked(False)
- self.ui.ch_cat_delay.setChecked(":delay:" in categoryhash)
- self.ui.ch_cat_distortion.setChecked(":distortion:" in categoryhash)
- self.ui.ch_cat_dynamics.setChecked(":dynamics:" in categoryhash)
- self.ui.ch_cat_eq.setChecked(":eq:" in categoryhash)
- self.ui.ch_cat_filter.setChecked(":filter:" in categoryhash)
- self.ui.ch_cat_modulator.setChecked(":modulator:" in categoryhash)
- self.ui.ch_cat_synth.setChecked(":synth:" in categoryhash)
- self.ui.ch_cat_utility.setChecked(":utility:" in categoryhash)
- self.ui.ch_cat_other.setChecked(":other:" in categoryhash)
-
- tableGeometry = settings.value("PluginDatabase/TableGeometry_6", QByteArray(), QByteArray)
- horizontalHeader = self.ui.tableWidget.horizontalHeader()
- 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)
-
- # --------------------------------------------------------------------------------------------------------
-
- def _createFavoritePluginDict(self, plugin):
- return {
- 'name' : plugin['name'],
- 'build' : plugin['build'],
- 'type' : plugin['type'],
- 'filename': plugin['filename'],
- 'label' : plugin['label'],
- 'uniqueId': plugin['uniqueId'],
- }
-
- def _checkFilters(self):
- text = self.ui.lineEdit.text().lower()
-
- hideEffects = not self.ui.ch_effects.isChecked()
- hideInstruments = not self.ui.ch_instruments.isChecked()
- hideMidi = not self.ui.ch_midi.isChecked()
- hideOther = not self.ui.ch_other.isChecked()
-
- hideInternal = not self.ui.ch_internal.isChecked()
- hideLadspa = not self.ui.ch_ladspa.isChecked()
- hideDssi = not self.ui.ch_dssi.isChecked()
- hideLV2 = not self.ui.ch_lv2.isChecked()
- hideVST2 = not self.ui.ch_vst.isChecked()
- hideVST3 = not self.ui.ch_vst3.isChecked()
- hideCLAP = not self.ui.ch_clap.isChecked()
- hideAU = not self.ui.ch_au.isChecked()
- hideJSFX = not self.ui.ch_jsfx.isChecked()
- hideKits = not self.ui.ch_kits.isChecked()
-
- hideNative = not self.ui.ch_native.isChecked()
- hideBridged = not self.ui.ch_bridged.isChecked()
- hideBridgedWine = not self.ui.ch_bridged_wine.isChecked()
-
- hideNonFavs = self.ui.ch_favorites.isChecked()
- hideNonRtSafe = self.ui.ch_rtsafe.isChecked()
- hideNonCV = self.ui.ch_cv.isChecked()
- hideNonGui = self.ui.ch_gui.isChecked()
- hideNonIDisp = self.ui.ch_inline_display.isChecked()
- hideNonStereo = self.ui.ch_stereo.isChecked()
-
- if HAIKU or LINUX or MACOS:
- nativeBins = [BINARY_POSIX32, BINARY_POSIX64]
- wineBins = [BINARY_WIN32, BINARY_WIN64]
- elif WINDOWS:
- nativeBins = [BINARY_WIN32, BINARY_WIN64]
- wineBins = []
- else:
- nativeBins = []
- wineBins = []
-
- self.ui.tableWidget.setRowCount(self.fLastTableIndex)
-
- for i in range(self.fLastTableIndex):
- plugin = self.ui.tableWidget.item(i, self.TABLEWIDGET_ITEM_NAME).data(Qt.UserRole+1)
- ptext = self.ui.tableWidget.item(i, self.TABLEWIDGET_ITEM_NAME).data(Qt.UserRole+2)
- aIns = plugin['audio.ins']
- aOuts = plugin['audio.outs']
- cvIns = plugin['cv.ins']
- cvOuts = plugin['cv.outs']
- mIns = plugin['midi.ins']
- mOuts = plugin['midi.outs']
- phints = plugin['hints']
- ptype = plugin['type']
- categ = plugin['category']
- isSynth = bool(phints & PLUGIN_IS_SYNTH)
- isEffect = bool(aIns > 0 < aOuts and not isSynth)
- isMidi = bool(aIns == 0 and aOuts == 0 and mIns > 0 < mOuts)
- isKit = bool(ptype in (PLUGIN_SF2, PLUGIN_SFZ))
- 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)
- hasCV = bool(cvIns + cvOuts > 0)
- hasGui = bool(phints & PLUGIN_HAS_CUSTOM_UI)
- hasIDisp = bool(phints & PLUGIN_HAS_INLINE_DISPLAY)
-
- isBridged = bool(not isNative and plugin['build'] in nativeBins)
- isBridgedWine = bool(not isNative and plugin['build'] in wineBins)
-
- if hideEffects and isEffect:
- self.ui.tableWidget.hideRow(i)
- elif hideInstruments and isSynth:
- self.ui.tableWidget.hideRow(i)
- elif hideMidi and isMidi:
- self.ui.tableWidget.hideRow(i)
- elif hideOther and isOther:
- self.ui.tableWidget.hideRow(i)
- elif hideKits and isKit:
- self.ui.tableWidget.hideRow(i)
- elif hideInternal and ptype == PLUGIN_INTERNAL:
- self.ui.tableWidget.hideRow(i)
- elif hideLadspa and ptype == PLUGIN_LADSPA:
- self.ui.tableWidget.hideRow(i)
- elif hideDssi and ptype == PLUGIN_DSSI:
- self.ui.tableWidget.hideRow(i)
- elif hideLV2 and ptype == PLUGIN_LV2:
- self.ui.tableWidget.hideRow(i)
- elif hideVST2 and ptype == PLUGIN_VST2:
- self.ui.tableWidget.hideRow(i)
- elif hideVST3 and ptype == PLUGIN_VST3:
- self.ui.tableWidget.hideRow(i)
- elif hideCLAP and ptype == PLUGIN_CLAP:
- self.ui.tableWidget.hideRow(i)
- elif hideAU and ptype == PLUGIN_AU:
- self.ui.tableWidget.hideRow(i)
- elif hideJSFX and ptype == PLUGIN_JSFX:
- self.ui.tableWidget.hideRow(i)
- elif hideNative and isNative:
- self.ui.tableWidget.hideRow(i)
- elif hideBridged and isBridged:
- self.ui.tableWidget.hideRow(i)
- elif hideBridgedWine and isBridgedWine:
- self.ui.tableWidget.hideRow(i)
- elif hideNonRtSafe and not isRtSafe:
- self.ui.tableWidget.hideRow(i)
- elif hideNonCV and not hasCV:
- self.ui.tableWidget.hideRow(i)
- elif hideNonGui and not hasGui:
- self.ui.tableWidget.hideRow(i)
- elif hideNonIDisp and not hasIDisp:
- self.ui.tableWidget.hideRow(i)
- elif hideNonStereo and not isStereo:
- self.ui.tableWidget.hideRow(i)
- elif text and not all(t in ptext for t in text.strip().split(' ')):
- self.ui.tableWidget.hideRow(i)
- elif hideNonFavs and self._createFavoritePluginDict(plugin) not in self.fFavoritePlugins:
- self.ui.tableWidget.hideRow(i)
- elif (self.ui.ch_cat_all.isChecked() or
- (self.ui.ch_cat_delay.isChecked() and categ == "delay") or
- (self.ui.ch_cat_distortion.isChecked() and categ == "distortion") or
- (self.ui.ch_cat_dynamics.isChecked() and categ == "dynamics") or
- (self.ui.ch_cat_eq.isChecked() and categ == "eq") or
- (self.ui.ch_cat_filter.isChecked() and categ == "filter") or
- (self.ui.ch_cat_modulator.isChecked() and categ == "modulator") or
- (self.ui.ch_cat_synth.isChecked() and categ == "synth") or
- (self.ui.ch_cat_utility.isChecked() and categ == "utility") or
- (self.ui.ch_cat_other.isChecked() and categ == "other")):
- self.ui.tableWidget.showRow(i)
- else:
- self.ui.tableWidget.hideRow(i)
-
- # --------------------------------------------------------------------------------------------------------
-
- def _addPluginToTable(self, plugin, ptype):
- if plugin['API'] != PLUGIN_QUERY_API_VERSION:
- return
- if ptype in (self.tr("Internal"), "LV2", "SF2", "SFZ", "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 " ")
-
- 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_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)
-
- self.fLastTableIndex += 1
-
- # --------------------------------------------------------------------------------------------------------
-
- def _reAddInternalHelper(self, settingsDB, ptype, path):
- if ptype == PLUGIN_INTERNAL:
- ptypeStr = "Internal"
- ptypeStrTr = self.tr("Internal")
- elif ptype == PLUGIN_LV2:
- ptypeStr = "LV2"
- ptypeStrTr = ptypeStr
- elif ptype == PLUGIN_AU:
- ptypeStr = "AU"
- ptypeStrTr = ptypeStr
- #elif ptype == PLUGIN_SFZ:
- #ptypeStr = "SFZ"
- #ptypeStrTr = ptypeStr
- # TODO(jsfx) what to do here?
- else:
- return 0
-
- plugins = settingsDB.value("Plugins/" + ptypeStr, [], list)
- pluginCount = settingsDB.value("PluginCount/" + ptypeStr, 0, int)
-
- if ptype == PLUGIN_AU:
- gCarla.utils.juce_init()
-
- pluginCountNew = gCarla.utils.get_cached_plugin_count(ptype, path)
-
- if pluginCountNew != pluginCount or len(plugins) != pluginCount or (len(plugins) > 0 and plugins[0]['API'] != PLUGIN_QUERY_API_VERSION):
- plugins = []
- pluginCount = pluginCountNew
-
- QApplication.processEvents(QEventLoop.ExcludeUserInputEvents, 50)
- if ptype == PLUGIN_AU:
- gCarla.utils.juce_idle()
-
- for i in range(pluginCountNew):
- descInfo = gCarla.utils.get_cached_plugin_info(ptype, i)
-
- if not descInfo['valid']:
- continue
-
- info = checkPluginCached(descInfo, ptype)
-
- plugins.append(info)
-
- if i % 50 == 0:
- QApplication.processEvents(QEventLoop.ExcludeUserInputEvents, 50)
- if ptype == PLUGIN_AU:
- gCarla.utils.juce_idle()
-
- settingsDB.setValue("Plugins/" + ptypeStr, plugins)
- settingsDB.setValue("PluginCount/" + ptypeStr, pluginCount)
-
- if ptype == PLUGIN_AU:
- gCarla.utils.juce_cleanup()
-
- # prepare rows in advance
- self.ui.tableWidget.setRowCount(self.fLastTableIndex + len(plugins))
-
- for plugin in plugins:
- self._addPluginToTable(plugin, ptypeStrTr)
-
- return pluginCount
-
- def _reAddPlugins(self):
- settingsDB = QSafeSettings("falkTX", "CarlaPlugins5")
-
- self.fLastTableIndex = 0
- self.ui.tableWidget.setSortingEnabled(False)
- self.ui.tableWidget.clearContents()
-
- settings = QSafeSettings("falkTX", "Carla2")
- LV2_PATH = splitter.join(settings.value(CARLA_KEY_PATHS_LV2, CARLA_DEFAULT_LV2_PATH, list))
- del settings
-
- # ----------------------------------------------------------------------------------------------------
- # plugins handled through backend
-
- internalCount = self._reAddInternalHelper(settingsDB, PLUGIN_INTERNAL, "")
- lv2Count = self._reAddInternalHelper(settingsDB, PLUGIN_LV2, LV2_PATH)
- auCount = self._reAddInternalHelper(settingsDB, PLUGIN_AU, "") if MACOS else 0
-
- # ----------------------------------------------------------------------------------------------------
- # LADSPA
-
- ladspaPlugins = []
- ladspaPlugins += settingsDB.value("Plugins/LADSPA_native", [], list)
- ladspaPlugins += settingsDB.value("Plugins/LADSPA_posix32", [], list)
- ladspaPlugins += settingsDB.value("Plugins/LADSPA_posix64", [], list)
- ladspaPlugins += settingsDB.value("Plugins/LADSPA_win32", [], list)
- ladspaPlugins += settingsDB.value("Plugins/LADSPA_win64", [], list)
-
- # ----------------------------------------------------------------------------------------------------
- # DSSI
-
- dssiPlugins = []
- dssiPlugins += settingsDB.value("Plugins/DSSI_native", [], list)
- dssiPlugins += settingsDB.value("Plugins/DSSI_posix32", [], list)
- dssiPlugins += settingsDB.value("Plugins/DSSI_posix64", [], list)
- dssiPlugins += settingsDB.value("Plugins/DSSI_win32", [], list)
- dssiPlugins += settingsDB.value("Plugins/DSSI_win64", [], list)
-
- # ----------------------------------------------------------------------------------------------------
- # VST2
-
- vst2Plugins = []
- vst2Plugins += settingsDB.value("Plugins/VST2_native", [], list)
- vst2Plugins += settingsDB.value("Plugins/VST2_posix32", [], list)
- vst2Plugins += settingsDB.value("Plugins/VST2_posix64", [], list)
- vst2Plugins += settingsDB.value("Plugins/VST2_win32", [], list)
- vst2Plugins += settingsDB.value("Plugins/VST2_win64", [], list)
-
- # ----------------------------------------------------------------------------------------------------
- # VST3
-
- vst3Plugins = []
- vst3Plugins += settingsDB.value("Plugins/VST3_native", [], list)
- vst3Plugins += settingsDB.value("Plugins/VST3_posix32", [], list)
- vst3Plugins += settingsDB.value("Plugins/VST3_posix64", [], list)
- vst3Plugins += settingsDB.value("Plugins/VST3_win32", [], list)
- vst3Plugins += settingsDB.value("Plugins/VST3_win64", [], list)
-
- # ----------------------------------------------------------------------------------------------------
- # CLAP
-
- clapPlugins = []
- clapPlugins += settingsDB.value("Plugins/CLAP_native", [], list)
- clapPlugins += settingsDB.value("Plugins/CLAP_posix32", [], list)
- clapPlugins += settingsDB.value("Plugins/CLAP_posix64", [], list)
- clapPlugins += settingsDB.value("Plugins/CLAP_win32", [], list)
- clapPlugins += settingsDB.value("Plugins/CLAP_win64", [], list)
-
- # ----------------------------------------------------------------------------------------------------
- # AU (extra non-cached)
-
- auPlugins32 = settingsDB.value("Plugins/AU_posix32", [], list) if MACOS else []
-
- # ----------------------------------------------------------------------------------------------------
- # JSFX
-
- jsfxPlugins = settingsDB.value("Plugins/JSFX", [], list)
-
- # ----------------------------------------------------------------------------------------------------
- # Kits
-
- sf2s = settingsDB.value("Plugins/SF2", [], list)
- sfzs = settingsDB.value("Plugins/SFZ", [], list)
-
- # ----------------------------------------------------------------------------------------------------
- # count plugins first, so we can create rows in advance
-
- ladspaCount = 0
- dssiCount = 0
- vstCount = 0
- vst3Count = 0
- clapCount = 0
- au32Count = 0
- jsfxCount = len(jsfxPlugins)
- sf2Count = 0
- sfzCount = len(sfzs)
-
- for plugins in ladspaPlugins:
- ladspaCount += len(plugins)
-
- for plugins in dssiPlugins:
- dssiCount += len(plugins)
-
- for plugins in vst2Plugins:
- vstCount += len(plugins)
-
- for plugins in vst3Plugins:
- vst3Count += len(plugins)
-
- for plugins in clapPlugins:
- clapCount += len(plugins)
-
- for plugins in auPlugins32:
- au32Count += len(plugins)
-
- for plugins in sf2s:
- sf2Count += len(plugins)
-
- self.ui.tableWidget.setRowCount(self.fLastTableIndex +
- ladspaCount + dssiCount + vstCount + vst3Count + clapCount +
- auCount + au32Count + jsfxCount + sf2Count + sfzCount)
-
- if MACOS:
- self.ui.label.setText(self.tr("Have %i Internal, %i LADSPA, %i DSSI, %i LV2, %i VST2, %i VST3, %i CLAP, %i AudioUnit and %i JSFX plugins, plus %i Sound Kits" % (
- internalCount, ladspaCount, dssiCount, lv2Count, vstCount, vst3Count, clapCount, auCount+au32Count, jsfxCount, sf2Count+sfzCount)))
- else:
- self.ui.label.setText(self.tr("Have %i Internal, %i LADSPA, %i DSSI, %i LV2, %i VST2, %i VST3, %i CLAP and %i JSFX plugins, plus %i Sound Kits" % (
- internalCount, ladspaCount, dssiCount, lv2Count, vstCount, vst3Count, clapCount, jsfxCount, sf2Count+sfzCount)))
-
- # ----------------------------------------------------------------------------------------------------
- # now add all plugins to the table
-
- for plugins in ladspaPlugins:
- for plugin in plugins:
- self._addPluginToTable(plugin, "LADSPA")
-
- for plugins in dssiPlugins:
- for plugin in plugins:
- self._addPluginToTable(plugin, "DSSI")
-
- for plugins in vst2Plugins:
- for plugin in plugins:
- self._addPluginToTable(plugin, "VST2")
-
- for plugins in vst3Plugins:
- for plugin in plugins:
- self._addPluginToTable(plugin, "VST3")
-
- for plugins in clapPlugins:
- for plugin in plugins:
- self._addPluginToTable(plugin, "CLAP")
-
- for plugins in auPlugins32:
- for plugin in plugins:
- self._addPluginToTable(plugin, "AU")
-
- for plugin in jsfxPlugins:
- self._addPluginToTable(plugin, "JSFX")
-
- for sf2 in sf2s:
- for sf2_i in sf2:
- self._addPluginToTable(sf2_i, "SF2")
-
- for sfz in sfzs:
- self._addPluginToTable(sfz, "SFZ")
-
- # ----------------------------------------------------------------------------------------------------
-
- self.ui.tableWidget.setSortingEnabled(True)
- self._checkFilters()
- self.slot_checkPlugin(self.ui.tableWidget.currentRow())
-
- # --------------------------------------------------------------------------------------------------------
-
- def showEvent(self, event):
- self.slot_focusSearchFieldAndSelectAll()
- QDialog.showEvent(self, event)
-
- # ---------------------------------------------------------------------------------------------------------------------
- # Testing
-
- if __name__ == '__main__':
- import sys
-
- class _host:
- pathBinaries = ""
- showPluginBridges = False
- showWineBridges = False
- _host = _host()
-
- _app = QApplication(sys.argv)
- _gui = PluginListDialog(None, _host, True)
-
- if _gui.exec_():
- print(f"Result: {_gui.fRetPlugin}")
-
- # ---------------------------------------------------------------------------------------------------------------------
|