X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fplugin_selector.h;h=e80d8807478513f84fde5e9ac371c6eab934d4c6;hb=81bff2edee31ad64693d5be3c06558714ea92722;hp=583506972a896b80b9f6d26c0b08957895f80214;hpb=5fdfe49406db9de3431b099cd89a2233f43a6163;p=ardour.git diff --git a/gtk2_ardour/plugin_selector.h b/gtk2_ardour/plugin_selector.h index 583506972a..e80d880747 100644 --- a/gtk2_ardour/plugin_selector.h +++ b/gtk2_ardour/plugin_selector.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2000 Paul Davis + Copyright (C) 2000 Paul Davis 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 @@ -20,12 +20,29 @@ #ifndef __ardour_plugin_selector_h__ #define __ardour_plugin_selector_h__ -#include +#include +#include +#include +#include +#include #include +#include +#include #include -#include -#include +#include "widgets/ardour_button.h" +#include "widgets/ardour_dropdown.h" + +#include "gtkmm2ext/dndtreeview.h" + +#include "ardour/plugin.h" +#include "ardour/plugin_manager.h" +#include "ardour/session_handle.h" + +#include "widgets/ardour_button.h" + +#include "plugin_interest.h" +#include "ardour_dialog.h" namespace ARDOUR { class Session; @@ -34,43 +51,86 @@ namespace ARDOUR { class PluginSelector : public ArdourDialog { - public: - PluginSelector (ARDOUR::PluginManager *); - sigc::signal > PluginCreated; +public: + PluginSelector (ARDOUR::PluginManager&); + ~PluginSelector (); + + void set_interested_object (PluginInterestedObject&); int run (); // XXX should we try not to overload the non-virtual Gtk::Dialog::run() ? - void set_session (ARDOUR::Session*); + void on_show (); + + Gtk::Menu* plugin_menu (); + void show_manager (); + +private: + + //search + ArdourWidgets::ArdourButton* _search_name_checkbox; + ArdourWidgets::ArdourButton* _search_tags_checkbox; + ArdourWidgets::ArdourButton* _search_ignore_checkbox; + + //radio-button filters + Gtk::RadioButton *_fil_effects_radio; + Gtk::RadioButton *_fil_instruments_radio; + Gtk::RadioButton *_fil_utils_radio; + Gtk::RadioButton *_fil_favorites_radio; + Gtk::RadioButton *_fil_hidden_radio; + Gtk::RadioButton *_fil_all_radio; + + /* combobox filters */ + ArdourWidgets::ArdourDropdown _fil_type_combo; + ArdourWidgets::ArdourDropdown _fil_creator_combo; + ArdourWidgets::ArdourDropdown _fil_channel_combo; - private: - ARDOUR::Session* session; - Gtk::Notebook notebook; - Gtk::ScrolledWindow lscroller; // ladspa - Gtk::ScrolledWindow vscroller; // vst - Gtk::ScrolledWindow auscroller; // AudioUnit + PluginInterestedObject* interested_object; + + Gtk::ScrolledWindow scroller; // Available plugins Gtk::ScrolledWindow ascroller; // Added plugins - - ARDOUR::PluginInfo::Type current_selection; - // page 1 - struct LadspaColumns : public Gtk::TreeModel::ColumnRecord { - LadspaColumns () { + Gtk::Entry search_entry; + Gtk::Button search_clear_button; + + Gtk::Entry *tag_entry; + Gtk::Button* tag_reset_button; + void tag_reset_button_clicked (); + + void set_sensitive_widgets(); + + void search_clear_button_clicked (); + void search_entry_changed (); + + void tag_entry_changed (); + sigc::connection tag_entry_connection; + + void tags_changed ( ARDOUR::PluginType t, std::string unique_id, std::string tag); + + struct PluginColumns : public Gtk::TreeModel::ColumnRecord { + PluginColumns () { + add (favorite); + add (hidden); add (name); - add (type); - add (ins); - add (outs); + add (tags); + add (creator); + add (type_name); + add (audio_io); + add (midi_io); add (plugin); } - Gtk::TreeModelColumn name; - Gtk::TreeModelColumn type; - Gtk::TreeModelColumn ins; - Gtk::TreeModelColumn outs; - Gtk::TreeModelColumn plugin; + Gtk::TreeModelColumn favorite; + Gtk::TreeModelColumn hidden; + Gtk::TreeModelColumn name; + Gtk::TreeModelColumn type_name; + Gtk::TreeModelColumn creator; + Gtk::TreeModelColumn tags; + Gtk::TreeModelColumn audio_io; + Gtk::TreeModelColumn midi_io; + Gtk::TreeModelColumn plugin; }; - LadspaColumns lcols; - Glib::RefPtr lmodel; - Glib::RefPtr lselection; - Gtk::TreeView ladspa_display; + PluginColumns plugin_columns; + Glib::RefPtr plugin_model; + Gtkmm2ext::DnDTreeView plugin_display; Gtk::Button* btn_add; Gtk::Button* btn_remove; @@ -84,69 +144,52 @@ class PluginSelector : public ArdourDialog }; AddedColumns acols; Glib::RefPtr amodel; - Glib::RefPtr aselection; Gtk::TreeView added_list; -#ifdef VST_SUPPORT - // page 2 - struct VstColumns : public Gtk::TreeModel::ColumnRecord { - VstColumns () { - add (name); - add (ins); - add (outs); - add (plugin); - } - Gtk::TreeModelColumn name; - Gtk::TreeModelColumn ins; - Gtk::TreeModelColumn outs; - Gtk::TreeModelColumn plugin; - }; - VstColumns vcols; - Glib::RefPtr vmodel; - Glib::RefPtr vselection; - Gtk::TreeView vst_display; - static void _vst_refiller (void *); - void vst_refiller (); - void vst_display_selection_changed(); -#endif // VST_SUPPORT - -#ifdef HAVE_COREAUDIO - // page 3 - struct AUColumns : public Gtk::TreeModel::ColumnRecord { - AUColumns () { - add (name); - add (ins); - add (outs); - add (plugin); - } - Gtk::TreeModelColumn name; - Gtk::TreeModelColumn ins; - Gtk::TreeModelColumn outs; - Gtk::TreeModelColumn plugin; - }; - AUColumns aucols; - Glib::RefPtr aumodel; - Glib::RefPtr auselection; - Gtk::TreeView au_display; - static void _au_refiller (void *); - void au_refiller (); - void au_display_selection_changed(); -#endif //HAVE_COREAUDIO - - ARDOUR::PluginManager *manager; - - static void _input_refiller (void *); - - void input_refiller (); - void row_clicked(GdkEventButton *); + void refill (); + void refiller (const ARDOUR::PluginInfoList& plugs, const::std::string& filterstr, const char* type); + void ladspa_refiller (const std::string&); + void lv2_refiller (const std::string&); + void vst_refiller (const std::string&); + void lxvst_refiller (const std::string&); + void mac_vst_refiller (const std::string&); + void au_refiller (const std::string&); + void lua_refiller (const std::string&); + + Gtk::Menu* _plugin_menu; + ARDOUR::PluginManager& manager; + + void row_activated(Gtk::TreeModel::Path path, Gtk::TreeViewColumn* col); void btn_add_clicked(); void btn_remove_clicked(); - void btn_update_clicked(); void added_list_selection_changed(); - void ladspa_display_selection_changed(); + void added_row_clicked(GdkEventButton* event); + void display_selection_changed(); void btn_apply_clicked(); - void use_plugin (ARDOUR::PluginInfoPtr); - void cleanup (); + ARDOUR::PluginPtr load_plugin (ARDOUR::PluginInfoPtr); + bool show_this_plugin (const ARDOUR::PluginInfoPtr&, const std::string&); + + void setup_search_string (std::string&); + + void favorite_changed (const std::string& path); + void hidden_changed (const std::string& path); + bool in_row_change; + + void plugin_chosen_from_menu (const ARDOUR::PluginInfoPtr&); + + void plugin_status_changed ( ARDOUR::PluginType t, std::string unique_id, ARDOUR::PluginManager::PluginStatusType s ); + + Gtk::Menu* create_favs_menu (ARDOUR::PluginInfoList&); + Gtk::Menu* create_by_creator_menu (ARDOUR::PluginInfoList&); + Gtk::Menu* create_by_tags_menu (ARDOUR::PluginInfoList&); + void build_plugin_menu (); + PBD::ScopedConnectionList plugin_list_changed_connection; + + bool _need_tag_save; + bool _need_status_save; + bool _need_menu_rebuild; + + bool _inhibit_refill; }; #endif // __ardour_plugin_selector_h__