21 #include "gtk2ardour-config.h"
26 #include <gtkmm/stock.h>
27 #include <gtkmm/label.h>
28 #include <gtkmm/accelkey.h>
29 #include <gtkmm/accelmap.h>
30 #include <gtkmm/uimanager.h>
54 , unbind_button (
_(
"Remove shortcut"))
55 , unbind_box (BUTTONBOX_END)
65 view.set_headers_visible (
true);
66 view.get_selection()->set_mode (SELECTION_SINGLE);
67 view.set_reorderable (
false);
68 view.set_size_request (500,300);
69 view.set_enable_search (
false);
70 view.set_rules_hint (
true);
71 view.set_name (
X_(
"KeyEditorTree"));
76 scroller.set_policy (Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC);
84 Label* hint = manage (
new Label (
_(
"Select an action, then press the key(s) to (re)set its shortcut")));
119 TreeModel::iterator i =
view.get_selection()->get_selected();
123 if (i !=
model->children().end()) {
130 bool result = AccelMap::change_entry (path,
144 view.get_selection()->unselect_all ();
145 ArdourWindow::on_show ();
157 if (
view.get_selection()->count_selected_rows() == 0) {
161 TreeModel::iterator i =
view.get_selection()->get_selected();
165 if (i !=
model->children().end()) {
175 if (!binding.empty()) {
184 if (!ev->is_modifier) {
197 TreeModel::iterator i =
view.get_selection()->get_selected();
199 if (i !=
model->children().end()) {
206 GdkModifierType mod = (GdkModifierType)(Keyboard::RelevantModifierKeyMask & ev->state);
211 bool result = AccelMap::change_entry (path,
213 Gdk::ModifierType(mod),
231 vector<string> paths;
232 vector<string> labels;
233 vector<string> tooltips;
235 vector<AccelKey> bindings;
236 typedef std::map<string,TreeIter> NodeMap;
242 vector<string>::iterator k;
243 vector<string>::iterator p;
244 vector<string>::iterator t;
245 vector<string>::iterator l;
249 for (l = labels.begin(), k = keys.begin(), p = paths.begin(), t = tooltips.begin(); l != labels.end(); ++k, ++p, ++t, ++l) {
252 vector<string> parts;
256 split (*p, parts,
'/');
263 if ( parts[1] ==
_(
"Main_menu") )
265 if ( parts[1] ==
_(
"redirectmenu") )
267 if ( parts[1] ==
_(
"Editor_menus") )
269 if ( parts[1] ==
_(
"RegionList") )
271 if ( parts[1] ==
_(
"ProcessorMenu") )
274 if ((r = nodes.find (parts[1])) == nodes.end()) {
279 TreeModel::Row parent;
280 rowp =
model->append();
281 nodes[parts[1]] = rowp;
286 row = *(
model->append (parent.children()));
290 row = *(
model->append ((*r->second)->children()));
315 Keyboard::the_keyboard().reset_bindings ();
317 view.get_selection()->unselect_all ();
bool on_key_press_event(GdkEventKey *)
LIBGTKMM2EXT_API bool possibly_translate_mod_to_make_legal_accelerator(GdkModifierType &mod)
Gtk::TreeModelColumn< std::string > binding
Gtk::TreeModelColumn< std::string > action
LIBPBD_API void split(std::string, std::vector< std::string > &, char)
Glib::RefPtr< Gtk::TreeStore > model
LIBGTKMM2EXT_API uint64_t Keyboard
bool on_key_release_event(GdkEventKey *)
Gtk::TreeModelColumn< std::string > path
Gtk::HButtonBox unbind_box
LIBARDOUR_API RuntimeProfile * Profile
LIBGTKMM2EXT_API std::string unbound_string
LIBGTKMM2EXT_API bool possibly_translate_keyval_to_make_legal_accelerator(uint32_t &keyval)
Gtk::TreeModelColumn< bool > bindable
Gtk::Button unbind_button
LIBGTKMM2EXT_API std::string get_key_representation(const std::string &accel_path, Gtk::AccelKey &key)
bool on_key_press_event(GdkEventKey *)
LIBGTKMM2EXT_API void get_all_actions(std::vector< std::string > &names, std::vector< std::string > &paths, std::vector< std::string > &tooltips, std::vector< std::string > &keys, std::vector< Gtk::AccelKey > &bindings)
std::string string_compose(const std::string &fmt, const T1 &o1)
Gtk::ScrolledWindow scroller