X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fkeyeditor.h;h=3e4c5d068ccdc460f69c4ac2c90d24f8d4f01851;hb=d26aac90204a87e00ea3b2cb622a7f5729bfbc4a;hp=2fecfb4333be7e10ddedc1ec795f4b52a06a1a5a;hpb=4453803c0c4bce4e4bfe5549f8e93453fa864506;p=ardour.git diff --git a/gtk2_ardour/keyeditor.h b/gtk2_ardour/keyeditor.h index 2fecfb4333..3e4c5d068c 100644 --- a/gtk2_ardour/keyeditor.h +++ b/gtk2_ardour/keyeditor.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2012 Paul Davis + Copyright (C) 2012 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 @@ -23,56 +23,113 @@ #include #include +#include +#include #include #include -#include +#include "gtkmm2ext/searchbar.h" #include "ardour_window.h" +namespace Gtkmm2ext { + class Bindings; +} + class KeyEditor : public ArdourWindow { public: KeyEditor (); - protected: - void on_show (); - void on_unmap (); - bool on_key_press_event (GdkEventKey*); - bool on_key_release_event (GdkEventKey*); - - private: - struct KeyEditorColumns : public Gtk::TreeModel::ColumnRecord { - KeyEditorColumns () { - add (action); - add (binding); - add (path); - add (bindable); - } - Gtk::TreeModelColumn action; - Gtk::TreeModelColumn binding; - Gtk::TreeModelColumn path; - Gtk::TreeModelColumn bindable; + void add_tab (std::string const &name, Gtkmm2ext::Bindings&); + void remove_tab (std::string const &name); + + static sigc::signal UpdateBindings; + + void disconnect () { + _refresh_connection.disconnect (); + } + + private: + class Tab : public Gtk::VBox + { + public: + Tab (KeyEditor&, std::string const &name, Gtkmm2ext::Bindings*); + + 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 () { + add (name); + add (binding); + add (path); + add (bindable); + add (action); + } + Gtk::TreeModelColumn name; + Gtk::TreeModelColumn binding; + Gtk::TreeModelColumn path; + Gtk::TreeModelColumn bindable; + Gtk::TreeModelColumn > action; + }; + + Gtk::VBox vpacker; + /* give KeyEditor full access to these. This is just a helper + class with no special semantics + */ + + KeyEditor& owner; + std::string name; + Gtkmm2ext::Bindings* bindings; + Gtk::ScrolledWindow scroller; + Gtk::TreeView view; + Glib::RefPtr data_model; + Glib::RefPtr filter; + Glib::RefPtr 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; }; - Gtk::VBox vpacker; - Gtk::ScrolledWindow scroller; - Gtk::TreeView view; - Glib::RefPtr model; - KeyEditorColumns columns; + friend class Tab; + + Gtk::VBox vpacker; + Gtk::Notebook notebook; Gtk::Button unbind_button; Gtk::HButtonBox unbind_box; Gtk::HBox reset_box; Gtk::Button reset_button; Gtk::Label reset_label; + Gtkmm2ext::SearchBar filter_entry; + std::string filter_string; + Gtk::Button print_button; - void unbind (); + typedef std::vector Tabs; - guint last_keyval; - - void action_selected (); - void populate (); + Tabs tabs; + Tab* current_tab(); + 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; + + sigc::connection _refresh_connection; }; #endif /* __ardour_gtk_key_editor_h__ */