mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-07 23:35:03 +01:00
create a two-way association between an action map and a bindings object, rather than just one way.
This helps us lookup bindings when printing out lists for the user
This commit is contained in:
parent
75e671b867
commit
66e0328a93
2 changed files with 44 additions and 20 deletions
|
|
@ -315,7 +315,13 @@ Bindings::get_binding_for_action (RefPtr<Action> action, Operation& op)
|
|||
void
|
||||
Bindings::set_action_map (ActionMap& actions)
|
||||
{
|
||||
if (_action_map) {
|
||||
_action_map->set_bindings (0);
|
||||
}
|
||||
|
||||
_action_map = &actions;
|
||||
_action_map->set_bindings (this);
|
||||
|
||||
dissociate ();
|
||||
associate ();
|
||||
}
|
||||
|
|
@ -389,14 +395,13 @@ Bindings::associate ()
|
|||
if (!_action_map) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
for (k = press_bindings.begin(); k != press_bindings.end(); ++k) {
|
||||
k->second.action = _action_map->find_action (k->second.action_name);
|
||||
if (k->second.action) {
|
||||
cerr << "push to GTK " << k->first << ' ' << k->second.action_name << endl;
|
||||
push_to_gtk (k->first, k->second.action);
|
||||
} else {
|
||||
cerr << "didn't find " << k->second.action_name << endl;
|
||||
cerr << _name << " didn't find " << k->second.action_name << " in " << _action_map->name() << endl;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -903,6 +908,24 @@ Bindings::associate_all ()
|
|||
|
||||
/*==========================================ACTION MAP =========================================*/
|
||||
|
||||
ActionMap::ActionMap (string const & name)
|
||||
: _name (name)
|
||||
, _bindings (0)
|
||||
{
|
||||
action_maps.push_back (this);
|
||||
}
|
||||
|
||||
ActionMap::~ActionMap ()
|
||||
{
|
||||
action_maps.remove (this);
|
||||
}
|
||||
|
||||
void
|
||||
ActionMap::set_bindings (Bindings* b)
|
||||
{
|
||||
_bindings = b;
|
||||
}
|
||||
|
||||
void
|
||||
ActionMap::get_actions (ActionMap::Actions& acts)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -76,11 +76,15 @@ class LIBGTKMM2EXT_API MouseButton {
|
|||
uint64_t _val;
|
||||
};
|
||||
|
||||
class LIBGTKMM2EXT_API Bindings;
|
||||
|
||||
class LIBGTKMM2EXT_API ActionMap {
|
||||
public:
|
||||
ActionMap() {}
|
||||
~ActionMap() {}
|
||||
ActionMap (std::string const& name);
|
||||
~ActionMap();
|
||||
|
||||
std::string name() const { return _name; }
|
||||
|
||||
Glib::RefPtr<Gtk::ActionGroup> create_action_group (const std::string& group_name);
|
||||
|
||||
Glib::RefPtr<Gtk::Action> register_action (Glib::RefPtr<Gtk::ActionGroup> group, const char* name, const char* label);
|
||||
|
|
@ -105,18 +109,24 @@ class LIBGTKMM2EXT_API ActionMap {
|
|||
|
||||
static std::list<ActionMap*> action_maps;
|
||||
|
||||
void set_bindings (Bindings*);
|
||||
Bindings* bindings() const { return _bindings; }
|
||||
|
||||
private:
|
||||
<<<<<<< HEAD
|
||||
typedef std::map<std::string, Glib::RefPtr<Gtk::Action> > _ActionMap;
|
||||
_ActionMap actions;
|
||||
};
|
||||
=======
|
||||
std::string _name;
|
||||
|
||||
/* hash for faster lookup of actions by name */
|
||||
|
||||
typedef std::map<std::string, Glib::RefPtr<Gtk::Action> > _ActionMap;
|
||||
_ActionMap _actions;
|
||||
|
||||
/* initialized to null; set after a Bindings object has ::associated()
|
||||
* itself with this action map.
|
||||
*/
|
||||
|
||||
Bindings* _bindings;
|
||||
|
||||
};
|
||||
>>>>>>> radically change Keyboard/Binding API design to disconnect Gtk::Action lookup from binding definition
|
||||
|
||||
class LIBGTKMM2EXT_API Bindings {
|
||||
public:
|
||||
|
|
@ -125,9 +135,6 @@ class LIBGTKMM2EXT_API Bindings {
|
|||
Release
|
||||
};
|
||||
|
||||
<<<<<<< HEAD
|
||||
Bindings();
|
||||
=======
|
||||
struct ActionInfo {
|
||||
ActionInfo (std::string const& name) : action_name (name) {}
|
||||
|
||||
|
|
@ -136,7 +143,6 @@ class LIBGTKMM2EXT_API Bindings {
|
|||
};
|
||||
|
||||
Bindings (std::string const& name);
|
||||
>>>>>>> radically change Keyboard/Binding API design to disconnect Gtk::Action lookup from binding definition
|
||||
~Bindings ();
|
||||
|
||||
std::string const& name() const { return _name; }
|
||||
|
|
@ -164,11 +170,6 @@ class LIBGTKMM2EXT_API Bindings {
|
|||
bool load (XMLNode const& node);
|
||||
void load_operation (XMLNode const& node);
|
||||
void save (XMLNode& root);
|
||||
<<<<<<< HEAD
|
||||
|
||||
void set_action_map (ActionMap&);
|
||||
=======
|
||||
>>>>>>> radically change Keyboard/Binding API design to disconnect Gtk::Action lookup from binding definition
|
||||
|
||||
/* There are modifiers that we just don't care about
|
||||
when it comes to defining bindings. This sets the modifiers
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue