Use ActionModel::build_action_combo() for Control Surfaces that need it
This commit is contained in:
parent
de876acc8b
commit
73f8b8d982
|
@ -150,7 +150,7 @@ class CC121 : public ARDOUR::ControlProtocol, public AbstractUI<CC121Request> {
|
||||||
};
|
};
|
||||||
|
|
||||||
enum ButtonState {
|
enum ButtonState {
|
||||||
ShiftDown = 0x1,
|
ShiftDown = 0x1,
|
||||||
RewindDown = 0x2,
|
RewindDown = 0x2,
|
||||||
StopDown = 0x4,
|
StopDown = 0x4,
|
||||||
UserDown = 0x8,
|
UserDown = 0x8,
|
||||||
|
|
|
@ -428,45 +428,12 @@ CC121GUI::build_foot_action_combo (Gtk::ComboBox& cb, CC121::ButtonState bs)
|
||||||
build_action_combo (cb, actions, CC121::Footswitch, bs);
|
build_action_combo (cb, actions, CC121::Footswitch, bs);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
|
||||||
CC121GUI::find_action_in_model (const TreeModel::iterator& iter, std::string const & action_path, TreeModel::iterator* found)
|
|
||||||
{
|
|
||||||
TreeModel::Row row = *iter;
|
|
||||||
string path = row[action_model.path()];
|
|
||||||
|
|
||||||
if (path == action_path) {
|
|
||||||
*found = iter;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
CC121GUI::build_user_action_combo (Gtk::ComboBox& cb, CC121::ButtonState bs, CC121::ButtonID id)
|
CC121GUI::build_user_action_combo (Gtk::ComboBox& cb, CC121::ButtonState bs, CC121::ButtonID id)
|
||||||
{
|
{
|
||||||
cb.set_model (action_model.model());
|
|
||||||
cb.pack_start (action_model.name());
|
|
||||||
cb.signal_changed().connect (sigc::bind (sigc::mem_fun (*this, &CC121GUI::action_changed), &cb, id, bs));
|
|
||||||
|
|
||||||
/* set the active "row" to the right value for the current button binding */
|
|
||||||
|
|
||||||
string current_action = fp.get_action (id, false, bs); /* lookup release action */
|
string current_action = fp.get_action (id, false, bs); /* lookup release action */
|
||||||
|
action_model.build_action_combo (cb, current_action);
|
||||||
if (current_action.empty()) {
|
cb.signal_changed().connect (sigc::bind (sigc::mem_fun (*this, &CC121GUI::action_changed), &cb, id, bs));
|
||||||
cb.set_active (0); /* "disabled" */
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
TreeModel::iterator iter = action_model.model()->children().end();
|
|
||||||
|
|
||||||
action_model.model()->foreach_iter (sigc::bind (sigc::mem_fun (*this, &CC121GUI::find_action_in_model), current_action, &iter));
|
|
||||||
|
|
||||||
if (iter != action_model.model()->children().end()) {
|
|
||||||
cb.set_active (iter);
|
|
||||||
} else {
|
|
||||||
cb.set_active (0);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Glib::RefPtr<Gtk::ListStore>
|
Glib::RefPtr<Gtk::ListStore>
|
||||||
|
|
|
@ -101,9 +101,6 @@ private:
|
||||||
void build_foot_action_combo (Gtk::ComboBox&, CC121::ButtonState);
|
void build_foot_action_combo (Gtk::ComboBox&, CC121::ButtonState);
|
||||||
|
|
||||||
void action_changed (Gtk::ComboBox*, CC121::ButtonID, CC121::ButtonState);
|
void action_changed (Gtk::ComboBox*, CC121::ButtonID, CC121::ButtonState);
|
||||||
|
|
||||||
bool find_action_in_model (const Gtk::TreeModel::iterator& iter, std::string const & action_path, Gtk::TreeModel::iterator* found);
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -460,19 +460,6 @@ FPGUI::build_foot_action_combo (Gtk::ComboBox& cb, FaderPort::ButtonState bs)
|
||||||
build_action_combo (cb, actions, FaderPort::Footswitch, bs);
|
build_action_combo (cb, actions, FaderPort::Footswitch, bs);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
|
||||||
FPGUI::find_action_in_model (const TreeModel::iterator& iter, std::string const & action_path, TreeModel::iterator* found)
|
|
||||||
{
|
|
||||||
TreeModel::Row row = *iter;
|
|
||||||
string path = row[action_model.path()];
|
|
||||||
|
|
||||||
if (path == action_path) {
|
|
||||||
*found = iter;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
FPGUI::build_user_action_combo (Gtk::ComboBox& cb, FaderPort::ButtonState bs)
|
FPGUI::build_user_action_combo (Gtk::ComboBox& cb, FaderPort::ButtonState bs)
|
||||||
|
@ -480,28 +467,12 @@ FPGUI::build_user_action_combo (Gtk::ComboBox& cb, FaderPort::ButtonState bs)
|
||||||
#ifndef MIXBUS
|
#ifndef MIXBUS
|
||||||
bs = FaderPort::ButtonState (bs|FaderPort::UserDown);
|
bs = FaderPort::ButtonState (bs|FaderPort::UserDown);
|
||||||
#endif
|
#endif
|
||||||
cb.set_model (action_model.model());
|
|
||||||
cb.pack_start (action_model.name());
|
|
||||||
cb.signal_changed().connect (sigc::bind (sigc::mem_fun (*this, &FPGUI::action_changed), &cb, FaderPort::User, bs));
|
|
||||||
|
|
||||||
/* set the active "row" to the right value for the current button binding */
|
/* set the active "row" to the right value for the current button binding */
|
||||||
|
|
||||||
string current_action = fp.get_action (FaderPort::User, false, bs); /* lookup release action */
|
string current_action = fp.get_action (FaderPort::User, false, bs); /* lookup release action */
|
||||||
|
action_model.build_action_combo (cb, current_action);
|
||||||
if (current_action.empty()) {
|
cb.signal_changed().connect (sigc::bind (sigc::mem_fun (*this, &FPGUI::action_changed), &cb, FaderPort::User, bs));
|
||||||
cb.set_active (0); /* "disabled" */
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
TreeModel::iterator iter = action_model.model()->children().end();
|
|
||||||
|
|
||||||
action_model.model()->foreach_iter (sigc::bind (sigc::mem_fun (*this, &FPGUI::find_action_in_model), current_action, &iter));
|
|
||||||
|
|
||||||
if (iter != action_model.model()->children().end()) {
|
|
||||||
cb.set_active (iter);
|
|
||||||
} else {
|
|
||||||
cb.set_active (0);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -99,9 +99,6 @@ private:
|
||||||
void build_foot_action_combo (Gtk::ComboBox&, FaderPort::ButtonState);
|
void build_foot_action_combo (Gtk::ComboBox&, FaderPort::ButtonState);
|
||||||
|
|
||||||
void action_changed (Gtk::ComboBox*, FaderPort::ButtonID, FaderPort::ButtonState);
|
void action_changed (Gtk::ComboBox*, FaderPort::ButtonID, FaderPort::ButtonState);
|
||||||
|
|
||||||
bool find_action_in_model (const Gtk::TreeModel::iterator& iter, std::string const & action_path, Gtk::TreeModel::iterator* found);
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -341,43 +341,13 @@ FP8GUI::active_port_changed (Gtk::ComboBox* combo, bool for_input)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool
|
|
||||||
FP8GUI::find_action_in_model (const TreeModel::iterator& iter, std::string const& action_path, TreeModel::iterator* found)
|
|
||||||
{
|
|
||||||
TreeModel::Row row = *iter;
|
|
||||||
string path = row[action_model.path()];
|
|
||||||
|
|
||||||
if (path == action_path) {
|
|
||||||
*found = iter;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
FP8GUI::build_action_combo (Gtk::ComboBox& cb, FP8Controls::ButtonId id)
|
FP8GUI::build_action_combo (Gtk::ComboBox& cb, FP8Controls::ButtonId id)
|
||||||
{
|
{
|
||||||
cb.set_model (action_model.model());
|
|
||||||
cb.pack_start (action_model.name());
|
|
||||||
|
|
||||||
/* set the active "row" to the right value for the current button binding */
|
/* set the active "row" to the right value for the current button binding */
|
||||||
string current_action = fp.get_button_action (id, false); /* lookup release action */
|
string current_action = fp.get_button_action (id, false); /* lookup release action */
|
||||||
|
action_model.build_action_combo(cb, current_action);
|
||||||
if (current_action.empty()) {
|
|
||||||
cb.set_active (0); /* "disabled" */
|
|
||||||
} else {
|
|
||||||
TreeModel::iterator iter = action_model.model()->children().end();
|
|
||||||
|
|
||||||
action_model.model()->foreach_iter (sigc::bind (sigc::mem_fun (*this, &FP8GUI::find_action_in_model), current_action, &iter));
|
|
||||||
|
|
||||||
if (iter != action_model.model()->children().end()) {
|
|
||||||
cb.set_active (iter);
|
|
||||||
} else {
|
|
||||||
cb.set_active (0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* bind signal _after_ setting the current value */
|
|
||||||
cb.signal_changed().connect (sigc::bind (sigc::mem_fun (*this, &FP8GUI::action_changed), &cb, id));
|
cb.signal_changed().connect (sigc::bind (sigc::mem_fun (*this, &FP8GUI::action_changed), &cb, id));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -98,8 +98,6 @@ private:
|
||||||
const ActionManager::ActionModel& action_model;
|
const ActionManager::ActionModel& action_model;
|
||||||
|
|
||||||
std::map<std::string,std::string> action_map; // map from action names to paths
|
std::map<std::string,std::string> action_map; // map from action names to paths
|
||||||
|
|
||||||
bool find_action_in_model (const Gtk::TreeModel::iterator& iter, std::string const & action_path, Gtk::TreeModel::iterator* found);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} }
|
} }
|
||||||
|
|
Loading…
Reference in New Issue
Block a user