adjust plugin-UI height when toggling expanders
[ardour.git] / gtk2_ardour / keyeditor.h
index b04b9730091b2399b4129c2dfbe46bc79fb0998e..a5662333ce2e5e2a115a47fe68c563595bba6d20 100644 (file)
@@ -27,6 +27,7 @@
 #include <gtkmm/scrolledwindow.h>
 #include <gtkmm/treeview.h>
 #include <gtkmm/treestore.h>
+#include "gtkmm2ext/searchbar.h"
 
 #include "ardour_window.h"
 
@@ -40,23 +41,23 @@ class KeyEditor : public ArdourWindow
        KeyEditor ();
 
        void add_tab (std::string const &name, Gtkmm2ext::Bindings&);
+       void remove_tab (std::string const &name);
 
-  protected:
-       bool on_key_press_event (GdkEventKey*);
-       bool on_key_release_event (GdkEventKey*);
+       static sigc::signal<void> UpdateBindings;
 
-  private:
+       private:
        class Tab : public Gtk::VBox
        {
-          public:
+               public:
                Tab (KeyEditor&, std::string const &name, Gtkmm2ext::Bindings*);
 
-               void populate ();
+               uint32_t populate ();
                void unbind ();
                void bind (GdkEventKey* release_event, guint pressed_key);
                void action_selected ();
                void sort_column_changed ();
                void tab_mapped ();
+               bool visible_func(const Gtk::TreeModel::const_iterator& iter) const;
 
                struct KeyEditorColumns : public Gtk::TreeModel::ColumnRecord {
                        KeyEditorColumns () {
@@ -83,8 +84,16 @@ class KeyEditor : public ArdourWindow
                Gtkmm2ext::Bindings* bindings;
                Gtk::ScrolledWindow scroller;
                Gtk::TreeView view;
-               Glib::RefPtr<Gtk::TreeStore> model;
+               Glib::RefPtr<Gtk::TreeStore> data_model;
+               Glib::RefPtr<Gtk::TreeModelFilter> filter;
+               Glib::RefPtr<Gtk::TreeModelSort> sorted_filter;
                KeyEditorColumns columns;
+               guint last_keyval;
+
+               protected:
+               bool key_press_event (GdkEventKey*);
+               bool key_release_event (GdkEventKey*);
+               Gtk::TreeModel::iterator find_action_path (Gtk::TreeModel::const_iterator begin, Gtk::TreeModel::const_iterator end, const std::string& path) const;
        };
 
        friend class Tab;
@@ -96,7 +105,9 @@ class KeyEditor : public ArdourWindow
        Gtk::HBox reset_box;
        Gtk::Button reset_button;
        Gtk::Label reset_label;
-       guint last_keyval;
+       Gtkmm2ext::SearchBar filter_entry;
+       std::string filter_string;
+       Gtk::Button print_button;
 
        typedef std::vector<Tab*> Tabs;
 
@@ -105,11 +116,14 @@ class KeyEditor : public ArdourWindow
 
        void unbind ();
        void reset ();
+       void refresh ();
        void page_change (GtkNotebookPage*, guint);
 
        unsigned int sort_column;
        Gtk::SortType sort_type;
        void toggle_sort_type ();
+       void search_string_updated (const std::string&);
+       void print () const;
 };
 
 #endif /* __ardour_gtk_key_editor_h__ */