+RefPtr<Action>
+ActionManager::register_action (RefPtr<ActionGroup> group, const char* name, const char* label)
+{
+ string fullpath;
+
+ RefPtr<Action> act = Action::create (name, label);
+
+ fullpath = group->get_name();
+ fullpath += '/';
+ fullpath += name;
+
+ if (actions.insert (ActionMap::value_type (fullpath, act)).second) {
+ group->add (act);
+ return act;
+ }
+
+ /* already registered */
+ return RefPtr<Action> ();
+}
+
+RefPtr<Action>
+ActionManager::register_action (RefPtr<ActionGroup> group,
+ const char* name, const char* label, sigc::slot<void> sl)
+{
+ string fullpath;
+
+ RefPtr<Action> act = Action::create (name, label);
+
+ fullpath = group->get_name();
+ fullpath += '/';
+ fullpath += name;
+
+ if (actions.insert (ActionMap::value_type (fullpath, act)).second) {
+ group->add (act, sl);
+ return act;
+ }
+
+ /* already registered */
+ return RefPtr<Action>();
+}
+
+RefPtr<Action>
+ActionManager::register_radio_action (RefPtr<ActionGroup> group,
+ Gtk::RadioAction::Group& rgroup,
+ const char* name, const char* label,
+ sigc::slot<void> sl)
+{
+ string fullpath;
+
+ RefPtr<Action> act = RadioAction::create (rgroup, name, label);
+ RefPtr<RadioAction> ract = RefPtr<RadioAction>::cast_dynamic(act);
+
+ fullpath = group->get_name();
+ fullpath += '/';
+ fullpath += name;
+
+ if (actions.insert (ActionMap::value_type (fullpath, act)).second) {
+ group->add (act, sl);
+ return act;
+ }
+
+ /* already registered */
+ return RefPtr<Action>();
+}
+
+RefPtr<Action>
+ActionManager::register_radio_action (RefPtr<ActionGroup> group,
+ Gtk::RadioAction::Group& rgroup,
+ const char* name, const char* label,
+ sigc::slot<void,GtkAction*> sl,
+ int value)
+{
+ string fullpath;
+
+ RefPtr<Action> act = RadioAction::create (rgroup, name, label);
+ RefPtr<RadioAction> ract = RefPtr<RadioAction>::cast_dynamic(act);
+ ract->property_value() = value;
+
+ fullpath = group->get_name();
+ fullpath += '/';
+ fullpath += name;
+
+ if (actions.insert (ActionMap::value_type (fullpath, act)).second) {
+ group->add (act, sigc::bind (sl, act->gobj()));
+ return act;
+ }
+
+ /* already registered */
+
+ return RefPtr<Action>();
+}
+
+RefPtr<Action>
+ActionManager::register_toggle_action (RefPtr<ActionGroup> group,
+ const char* name, const char* label, sigc::slot<void> sl)
+{
+ string fullpath;
+
+ fullpath = group->get_name();
+ fullpath += '/';
+ fullpath += name;
+
+ RefPtr<Action> act = ToggleAction::create (name, label);
+
+ if (actions.insert (ActionMap::value_type (fullpath, act)).second) {
+ group->add (act, sl);
+ return act;
+ }
+
+ /* already registered */
+ return RefPtr<Action>();
+}
+
+void
+ActionManager::get_actions (void* owner, std::vector<Glib::RefPtr<Gtk::Action> >& acts)
+{
+ for (ActionMap::const_iterator a = actions.begin(); a != actions.end(); ++a) {
+ if (owner) {
+ Glib::RefPtr<Gtk::ActionGroup> group = a->second->property_action_group ();
+ if (group->get_data (X_("owner")) == owner) {
+ acts.push_back (a->second);
+ }
+ } else {
+ acts.push_back (a->second);
+ }
+ }
+}
+
+void
+ActionManager::get_all_actions (std::vector<std::string>& paths,
+ std::vector<std::string>& labels,
+ std::vector<std::string>& tooltips,
+ std::vector<std::string>& keys,
+ std::vector<RefPtr<Action> >& acts)
+{
+ for (ActionMap::const_iterator a = actions.begin(); a != actions.end(); ++a) {
+
+ Glib::RefPtr<Action> act = a->second;
+
+ paths.push_back (act->get_accel_path());
+ labels.push_back (act->get_label());
+ tooltips.push_back (act->get_tooltip());
+ acts.push_back (act);
+
+ /* foreach binding */
+
+#if 0
+ 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());
+ }
+ }
+#endif
+
+ }
+}