faderport: restore button actions, and correctly indicate current action in GUI
This commit is contained in:
parent
682e152aaf
commit
b8ed62453f
@ -793,6 +793,30 @@ FaderPort::Button::set_action (string const& name, bool when_pressed, FaderPort:
|
||||
}
|
||||
}
|
||||
|
||||
string
|
||||
FaderPort::Button::get_action (bool press, FaderPort::ButtonState bs)
|
||||
{
|
||||
ToDoMap::iterator x;
|
||||
|
||||
if (press) {
|
||||
if ((x = on_press.find (bs)) == on_press.end()) {
|
||||
return string();
|
||||
}
|
||||
if (x->second.type != NamedAction) {
|
||||
return string ();
|
||||
}
|
||||
return x->second.action_name;
|
||||
} else {
|
||||
if ((x = on_release.find (bs)) == on_release.end()) {
|
||||
return string();
|
||||
}
|
||||
if (x->second.type != NamedAction) {
|
||||
return string ();
|
||||
}
|
||||
return x->second.action_name;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
FaderPort::Button::set_action (boost::function<void()> f, bool when_pressed, FaderPort::ButtonState bs)
|
||||
{
|
||||
@ -1107,3 +1131,9 @@ FaderPort::set_action (ButtonID id, std::string const& action_name, bool on_pres
|
||||
{
|
||||
get_button(id).set_action (action_name, on_press, bs);
|
||||
}
|
||||
|
||||
string
|
||||
FaderPort::get_action (ButtonID id, bool press, ButtonState bs)
|
||||
{
|
||||
return get_button(id).get_action (press, bs);
|
||||
}
|
||||
|
@ -156,6 +156,7 @@ class FaderPort : public ARDOUR::ControlProtocol, public AbstractUI<FaderPortReq
|
||||
};
|
||||
|
||||
void set_action (ButtonID, std::string const& action_name, bool on_press, FaderPort::ButtonState = ButtonState (0));
|
||||
std::string get_action (ButtonID, bool on_press, FaderPort::ButtonState = ButtonState (0));
|
||||
|
||||
private:
|
||||
boost::shared_ptr<ARDOUR::Route> _current_route;
|
||||
@ -221,6 +222,8 @@ class FaderPort : public ARDOUR::ControlProtocol, public AbstractUI<FaderPortReq
|
||||
|
||||
void set_action (std::string const& action_name, bool on_press, FaderPort::ButtonState = ButtonState (0));
|
||||
void set_action (boost::function<void()> function, bool on_press, FaderPort::ButtonState = ButtonState (0));
|
||||
std::string get_action (bool press, FaderPort::ButtonState bs = ButtonState (0));
|
||||
|
||||
void set_led_state (boost::shared_ptr<MIDI::Port>, int onoff, bool force = false);
|
||||
void invoke (ButtonState bs, bool press);
|
||||
bool uses_flash () const { return flash; }
|
||||
|
@ -426,22 +426,37 @@ FPGUI::build_action_combo (Gtk::ComboBox& cb, vector<pair<string,string> > const
|
||||
Glib::RefPtr<Gtk::ListStore> model (Gtk::ListStore::create (action_columns));
|
||||
TreeIter rowp;
|
||||
TreeModel::Row row;
|
||||
string current_action = fp.get_action (id, true, bs);
|
||||
int active_row = -1;
|
||||
int n;
|
||||
vector<pair<string,string> >::const_iterator i;
|
||||
|
||||
rowp = model->append();
|
||||
row = *(rowp);
|
||||
row[action_columns.name] = _("Disabled");
|
||||
row[action_columns.path] = string();
|
||||
|
||||
for (vector<pair<string,string> >::const_iterator i = actions.begin(); i != actions.end(); ++i) {
|
||||
if (current_action.empty()) {
|
||||
active_row = 0;
|
||||
}
|
||||
|
||||
for (i = actions.begin(), n = 0; i != actions.end(); ++i, ++n) {
|
||||
rowp = model->append();
|
||||
row = *(rowp);
|
||||
row[action_columns.name] = i->first;
|
||||
row[action_columns.path] = i->second;
|
||||
if (current_action == i->second) {
|
||||
active_row = n+1;
|
||||
}
|
||||
}
|
||||
|
||||
cb.set_model (model);
|
||||
cb.pack_start (action_columns.name);
|
||||
|
||||
if (active_row >= 0) {
|
||||
cb.set_active (active_row);
|
||||
}
|
||||
|
||||
cb.signal_changed().connect (sigc::bind (sigc::mem_fun (*this, &FPGUI::action_changed), &cb, id));
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user