cleanup Bindings/ActionMap API to get all actions for various purposes
This commit is contained in:
parent
09c70ad37a
commit
b944532f67
@ -848,43 +848,6 @@ Bindings::get_all_actions (std::vector<std::string>& paths,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
Bindings::get_all_actions (std::vector<std::string>& names,
|
|
||||||
std::vector<std::string>& paths,
|
|
||||||
std::vector<std::string>& keys)
|
|
||||||
{
|
|
||||||
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.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*
|
||||||
Bindings::get_bindings (string const& name, ActionMap& map)
|
Bindings::get_bindings (string const& name, ActionMap& map)
|
||||||
{
|
{
|
||||||
@ -1078,6 +1041,48 @@ ActionMap::register_toggle_action (RefPtr<ActionGroup> group,
|
|||||||
return RefPtr<Action>();
|
return RefPtr<Action>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ActionMap::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> >& actions)
|
||||||
|
{
|
||||||
|
for (list<ActionMap*>::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) {
|
std::ostream& operator<<(std::ostream& out, Gtkmm2ext::KeyboardKey const & k) {
|
||||||
char const *gdk_name = gdk_keyval_name (k.key());
|
char const *gdk_name = gdk_keyval_name (k.key());
|
||||||
return out << "Key " << k.key() << " (" << (gdk_name ? gdk_name : "no-key") << ") state " << k.state();
|
return out << "Key " << k.key() << " (" << (gdk_name ? gdk_name : "no-key") << ") state " << k.state();
|
||||||
|
@ -104,13 +104,20 @@ class LIBGTKMM2EXT_API ActionMap {
|
|||||||
|
|
||||||
Glib::RefPtr<Gtk::Action> find_action (const std::string& name);
|
Glib::RefPtr<Gtk::Action> find_action (const std::string& name);
|
||||||
|
|
||||||
|
void set_bindings (Bindings*);
|
||||||
|
Bindings* bindings() const { return _bindings; }
|
||||||
|
|
||||||
typedef std::vector<Glib::RefPtr<Gtk::Action> > Actions;
|
typedef std::vector<Glib::RefPtr<Gtk::Action> > Actions;
|
||||||
void get_actions (Actions&);
|
void get_actions (Actions&);
|
||||||
|
|
||||||
static std::list<ActionMap*> action_maps;
|
static std::list<ActionMap*> action_maps;
|
||||||
|
|
||||||
void set_bindings (Bindings*);
|
/* used by control surface protocols and other UIs */
|
||||||
Bindings* bindings() const { return _bindings; }
|
static void 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<Glib::RefPtr<Gtk::Action> >& actions);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::string _name;
|
std::string _name;
|
||||||
@ -198,11 +205,6 @@ class LIBGTKMM2EXT_API Bindings {
|
|||||||
|
|
||||||
void set_action_map (ActionMap&);
|
void set_action_map (ActionMap&);
|
||||||
|
|
||||||
/* used to list all actions */
|
|
||||||
void get_all_actions (std::vector<std::string>& names,
|
|
||||||
std::vector<std::string>& paths,
|
|
||||||
std::vector<std::string>& keys);
|
|
||||||
|
|
||||||
/* used for editing bindings */
|
/* used for editing bindings */
|
||||||
void get_all_actions (std::vector<std::string>& paths,
|
void get_all_actions (std::vector<std::string>& paths,
|
||||||
std::vector<std::string>& labels,
|
std::vector<std::string>& labels,
|
||||||
|
Loading…
Reference in New Issue
Block a user