// SPDX-FileCopyrightText: 2011-2025 Filipe Coelho // SPDX-License-Identifier: GPL-2.0-or-later #pragma once #include "carla_frontend.h" #ifdef __clang__ # pragma clang diagnostic push # pragma clang diagnostic ignored "-Wdeprecated-copy-with-user-provided-copy" # pragma clang diagnostic ignored "-Wdeprecated-register" #elif defined(__GNUC__) && __GNUC__ >= 8 # pragma GCC diagnostic push # pragma GCC diagnostic ignored "-Wclass-memaccess" # pragma GCC diagnostic ignored "-Wdeprecated-copy" #endif #include "ui_pluginlistdialog.h" #ifdef __clang__ # pragma clang diagnostic pop #elif defined(__GNUC__) && __GNUC__ >= 8 # pragma GCC diagnostic pop #endif typedef struct _CarlaPluginDiscoveryInfo CarlaPluginDiscoveryInfo; typedef struct _HostSettings HostSettings; // -------------------------------------------------------------------------------------------------------------------- // base details, nicely packed and POD-only so we can directly use as binary struct PluginInfoHeader { uint16_t build; uint16_t type; uint32_t hints; uint64_t uniqueId; uint16_t audioIns; uint16_t audioOuts; uint16_t cvIns; uint16_t cvOuts; uint16_t midiIns; uint16_t midiOuts; uint16_t parameterIns; uint16_t parameterOuts; }; // full details, now with non-POD types struct PluginInfo : PluginInfoHeader { QString category; QString filename; QString name; QString label; QString maker; }; // -------------------------------------------------------------------------------------------------------------------- // Plugin List Dialog class PluginListDialog : public QDialog { enum TableIndex { TW_FAVORITE, TW_NAME, TW_LABEL, TW_MAKER, TW_BINARY, }; enum UserRoles { UR_PLUGIN_INFO = 1, UR_SEARCH_TEXT, }; struct PrivateData; PrivateData *const p; Ui_PluginListDialog ui; // ---------------------------------------------------------------------------------------------------------------- // public methods public: explicit PluginListDialog(QWidget* parent, const HostSettings* hostSettings); ~PluginListDialog() override; const PluginInfo& getSelectedPluginInfo() const; void addPluginInfo(const CarlaPluginDiscoveryInfo* info, const char* sha1sum); bool checkPluginCache(const char* filename, const char* sha1sum); void setPluginPath(PluginType ptype, const char* path); // ---------------------------------------------------------------------------------------------------------------- // protected methods protected: void done(int) override; void showEvent(QShowEvent*) override; void timerEvent(QTimerEvent*) override; // ---------------------------------------------------------------------------------------------------------------- // private methods private: void addPluginsToTable(); void loadSettings(); // ---------------------------------------------------------------------------------------------------------------- // private slots private Q_SLOTS: void cellClicked(int row, int column); void cellDoubleClicked(int row, int column); void focusSearchFieldAndSelectAll(); void checkFilters(); void checkFiltersCategoryAll(bool clicked); void checkFiltersCategorySpecific(bool clicked); void clearFilters(); void checkPlugin(int row); void refreshPlugins(); void refreshPluginsStart(); void refreshPluginsStop(); void refreshPluginsSkip(); void saveSettings(); }; // --------------------------------------------------------------------------------------------------------------------