From b944532f67572001c040bf1db7918658d8dbc926 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Tue, 1 Sep 2015 15:46:30 -0400 Subject: cleanup Bindings/ActionMap API to get all actions for various purposes --- libs/gtkmm2ext/bindings.cc | 79 ++++++++++++++++++++++++---------------------- 1 file changed, 42 insertions(+), 37 deletions(-) (limited to 'libs/gtkmm2ext/bindings.cc') diff --git a/libs/gtkmm2ext/bindings.cc b/libs/gtkmm2ext/bindings.cc index ea1214cb21..a09a90fb75 100644 --- a/libs/gtkmm2ext/bindings.cc +++ b/libs/gtkmm2ext/bindings.cc @@ -848,43 +848,6 @@ Bindings::get_all_actions (std::vector& paths, } } -void -Bindings::get_all_actions (std::vector& names, - std::vector& paths, - std::vector& keys) -{ - if (!_action_map) { - return; - } - - /* build a reverse map from actions to bindings */ - - typedef map,KeyboardKey> ReverseMap; - ReverseMap rmap; - - for (KeybindingMap::const_iterator k = press_bindings.begin(); k != press_bindings.end(); ++k) { - rmap.insert (make_pair (k->second.action, k->first)); - } - - /* get a list of all actions */ - - ActionMap::Actions all_actions; - _action_map->get_actions (all_actions); - - for (ActionMap::Actions::const_iterator act = all_actions.begin(); act != all_actions.end(); ++act) { - - names.push_back ((*act)->get_name()); - paths.push_back ((*act)->get_accel_path()); - - ReverseMap::iterator r = rmap.find (*act); - if (r != rmap.end()) { - keys.push_back (r->second.display_label()); - } else { - keys.push_back (string()); - } - } -} - Bindings* Bindings::get_bindings (string const& name, ActionMap& map) { @@ -1078,6 +1041,48 @@ ActionMap::register_toggle_action (RefPtr group, return RefPtr(); } +void +ActionMap::get_all_actions (std::vector& paths, + std::vector& labels, + std::vector& tooltips, + std::vector& keys, + std::vector >& actions) +{ + for (list::const_iterator map = action_maps.begin(); map != action_maps.end(); ++map) { + + ActionMap::Actions these_actions; + (*map)->get_actions (these_actions); + + for (ActionMap::Actions::const_iterator act = these_actions.begin(); act != these_actions.end(); ++act) { + + paths.push_back ((*act)->get_accel_path()); + labels.push_back ((*act)->get_label()); + tooltips.push_back ((*act)->get_tooltip()); + actions.push_back (*act); + + Bindings* bindings = (*map)->bindings(); + + if (bindings) { + + KeyboardKey key; + Bindings::Operation op; + + key = bindings->get_binding_for_action (*act, op); + + if (key == KeyboardKey::null_key()) { + keys.push_back (string()); + } else { + keys.push_back (key.display_label()); + } + } else { + keys.push_back (string()); + } + } + + these_actions.clear (); + } +} + std::ostream& operator<<(std::ostream& out, Gtkmm2ext::KeyboardKey const & k) { char const *gdk_name = gdk_keyval_name (k.key()); return out << "Key " << k.key() << " (" << (gdk_name ? gdk_name : "no-key") << ") state " << k.state(); -- cgit v1.2.3