+}
+
+void
+Bindings::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<KeyboardKey>& bindings)
+{
+ if (!action_map) {
+ return;
+ }
+
+ /* build a reverse map from actions to bindings */
+
+ typedef map<Glib::RefPtr<Gtk::Action>,KeyboardKey> ReverseMap;
+ ReverseMap rmap;
+
+ for (KeybindingMap::const_iterator k = press_bindings.begin(); k != press_bindings.end(); ++k) {
+ rmap.insert (make_pair (k->second, k->first));
+ }
+
+ /* get a list of all actions */
+
+ ActionMap::Actions actions;
+ action_map->get_actions (actions);
+
+ for (ActionMap::Actions::const_iterator act = actions.begin(); act != actions.end(); ++act) {
+ names.push_back ((*act)->get_name());
+ paths.push_back ((*act)->get_accel_path());
+ tooltips.push_back ((*act)->get_tooltip());
+
+ ReverseMap::iterator r = rmap.find (*act);
+ if (r != rmap.end()) {
+ keys.push_back (gtk_accelerator_get_label (r->second.key(), (GdkModifierType) r->second.state()));
+ bindings.push_back (r->second);
+ } else {
+ keys.push_back (string());
+ bindings.push_back (KeyboardKey::null_key());
+ }
+ }
+}
+
+void
+Bindings::get_all_actions (std::vector<std::string>& groups,
+ std::vector<std::string>& paths,
+ std::vector<std::string>& tooltips,
+ std::vector<KeyboardKey>& bindings)
+{
+ /* build a reverse map from actions to bindings */
+
+ typedef map<Glib::RefPtr<Gtk::Action>,KeyboardKey> ReverseMap;
+ ReverseMap rmap;
+
+ for (KeybindingMap::const_iterator k = press_bindings.begin(); k != press_bindings.end(); ++k) {
+ rmap.insert (make_pair (k->second, k->first));
+ }
+
+ /* get a list of all actions */
+
+ ActionMap::Actions actions;
+ action_map->get_actions (actions);
+
+ for (ActionMap::Actions::const_iterator act = actions.begin(); act != actions.end(); ++act) {
+ groups.push_back ((*act)->get_name());
+ paths.push_back ((*act)->get_accel_path());
+ tooltips.push_back ((*act)->get_tooltip());
+
+ ReverseMap::iterator r = rmap.find (*act);
+ if (r != rmap.end()) {
+ bindings.push_back (r->second);
+ } else {
+ bindings.push_back (KeyboardKey::null_key());
+ }
+ }
+}
+
+void
+ActionMap::get_actions (ActionMap::Actions& acts)
+{
+ for (_ActionMap::iterator a = actions.begin(); a != actions.end(); ++a) {
+ acts.push_back (a->second);
+ }
+}