mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-10 08:36:32 +01:00
Set route remote control IDs from a dialog rather than a menu. I think this is
more practical (especially with large track counts), and also prevents a N-entry menu being built for each of N tracks every time the mixer strip order is changed, which speeds some operations up. git-svn-id: svn://localhost/ardour2/branches/3.0@5605 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
7c49119be0
commit
95c4046ff9
4 changed files with 33 additions and 83 deletions
|
|
@ -1165,9 +1165,8 @@ MixerStrip::build_route_ops_menu ()
|
||||||
denormal_menu_item->set_active (_route->denormal_protection());
|
denormal_menu_item->set_active (_route->denormal_protection());
|
||||||
|
|
||||||
if (!Profile->get_sae()) {
|
if (!Profile->get_sae()) {
|
||||||
build_remote_control_menu ();
|
|
||||||
items.push_back (SeparatorElem());
|
items.push_back (SeparatorElem());
|
||||||
items.push_back (MenuElem (_("Remote Control ID"), *remote_control_menu));
|
items.push_back (MenuElem (_("Remote Control ID..."), mem_fun (*this, &RouteUI::open_remote_control_id_dialog)));
|
||||||
}
|
}
|
||||||
|
|
||||||
items.push_back (SeparatorElem());
|
items.push_back (SeparatorElem());
|
||||||
|
|
@ -1193,8 +1192,6 @@ MixerStrip::list_route_operations ()
|
||||||
if (route_ops_menu == 0) {
|
if (route_ops_menu == 0) {
|
||||||
build_route_ops_menu ();
|
build_route_ops_menu ();
|
||||||
}
|
}
|
||||||
|
|
||||||
refresh_remote_control_menu();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
||||||
|
|
@ -475,8 +475,7 @@ RouteTimeAxisView::build_display_menu ()
|
||||||
items.push_back (SeparatorElem());
|
items.push_back (SeparatorElem());
|
||||||
|
|
||||||
if (!Profile->get_sae()) {
|
if (!Profile->get_sae()) {
|
||||||
build_remote_control_menu ();
|
items.push_back (MenuElem (_("Remote Control ID..."), mem_fun (*this, &RouteUI::open_remote_control_id_dialog)));
|
||||||
items.push_back (MenuElem (_("Remote Control ID"), *remote_control_menu));
|
|
||||||
/* rebuild this every time */
|
/* rebuild this every time */
|
||||||
build_automation_action_menu ();
|
build_automation_action_menu ();
|
||||||
items.push_back (MenuElem (_("Automation"), *automation_action_menu));
|
items.push_back (MenuElem (_("Automation"), *automation_action_menu));
|
||||||
|
|
@ -2400,4 +2399,3 @@ RouteTimeAxisView::set_button_names ()
|
||||||
|
|
||||||
mute_button_label.set_text (_("m"));
|
mute_button_label.set_text (_("m"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -84,7 +84,6 @@ RouteUI::~RouteUI()
|
||||||
|
|
||||||
delete solo_menu;
|
delete solo_menu;
|
||||||
delete mute_menu;
|
delete mute_menu;
|
||||||
delete remote_control_menu;
|
|
||||||
delete sends_menu;
|
delete sends_menu;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -95,7 +94,6 @@ RouteUI::init ()
|
||||||
xml_node = 0;
|
xml_node = 0;
|
||||||
mute_menu = 0;
|
mute_menu = 0;
|
||||||
solo_menu = 0;
|
solo_menu = 0;
|
||||||
remote_control_menu = 0;
|
|
||||||
sends_menu = 0;
|
sends_menu = 0;
|
||||||
ignore_toggle = false;
|
ignore_toggle = false;
|
||||||
wait_for_release = false;
|
wait_for_release = false;
|
||||||
|
|
@ -215,8 +213,6 @@ RouteUI::set_route (boost::shared_ptr<Route> rp)
|
||||||
solo_button->show();
|
solo_button->show();
|
||||||
}
|
}
|
||||||
|
|
||||||
connections.push_back (_route->RemoteControlIDChanged.connect (mem_fun(*this, &RouteUI::refresh_remote_control_menu)));
|
|
||||||
|
|
||||||
/* map the current state */
|
/* map the current state */
|
||||||
|
|
||||||
mute_changed (0);
|
mute_changed (0);
|
||||||
|
|
@ -775,72 +771,6 @@ RouteUI::update_rec_display ()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
RouteUI::build_remote_control_menu ()
|
|
||||||
{
|
|
||||||
remote_control_menu = new Menu;
|
|
||||||
refresh_remote_control_menu ();
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
RouteUI::refresh_remote_control_menu ()
|
|
||||||
{
|
|
||||||
ENSURE_GUI_THREAD (mem_fun (*this, &RouteUI::refresh_remote_control_menu));
|
|
||||||
|
|
||||||
// only refresh the menu if it has been instantiated
|
|
||||||
|
|
||||||
if (remote_control_menu == 0) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
using namespace Menu_Helpers;
|
|
||||||
|
|
||||||
RadioMenuItem::Group rc_group;
|
|
||||||
CheckMenuItem* rc_active;
|
|
||||||
uint32_t limit = _session.ntracks() + _session.nbusses();
|
|
||||||
char buf[32];
|
|
||||||
|
|
||||||
MenuList& rc_items = remote_control_menu->items();
|
|
||||||
rc_items.clear ();
|
|
||||||
|
|
||||||
/* note that this menu list starts at zero, not 1, because zero
|
|
||||||
is a valid, if useless, ID.
|
|
||||||
*/
|
|
||||||
|
|
||||||
limit += 4; /* leave some breathing room */
|
|
||||||
|
|
||||||
rc_items.push_back (RadioMenuElem (rc_group, _("None")));
|
|
||||||
if (_route->remote_control_id() == 0) {
|
|
||||||
rc_active = dynamic_cast<CheckMenuItem*> (&rc_items.back());
|
|
||||||
rc_active->set_active ();
|
|
||||||
}
|
|
||||||
|
|
||||||
for (uint32_t i = 1; i < limit; ++i) {
|
|
||||||
snprintf (buf, sizeof (buf), "%u", i);
|
|
||||||
rc_items.push_back (RadioMenuElem (rc_group, buf));
|
|
||||||
rc_active = dynamic_cast<RadioMenuItem*>(&rc_items.back());
|
|
||||||
if (_route->remote_control_id() == i) {
|
|
||||||
rc_active = dynamic_cast<CheckMenuItem*> (&rc_items.back());
|
|
||||||
rc_active->set_active ();
|
|
||||||
}
|
|
||||||
rc_active->signal_activate().connect (bind (mem_fun (*this, &RouteUI::set_remote_control_id), i, rc_active));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
RouteUI::set_remote_control_id (uint32_t id, CheckMenuItem* item)
|
|
||||||
{
|
|
||||||
/* this is called when the radio menu item is toggled, and so
|
|
||||||
is actually invoked twice per menu selection. we only
|
|
||||||
care about the invocation for the item that was being
|
|
||||||
marked active.
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (item->get_active()) {
|
|
||||||
_route->set_remote_control_id (id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
RouteUI::build_solo_menu (void)
|
RouteUI::build_solo_menu (void)
|
||||||
{
|
{
|
||||||
|
|
@ -1448,3 +1378,32 @@ RouteUI::page_gain_down ()
|
||||||
{
|
{
|
||||||
_route->set_gain (dB_to_coefficient (accurate_coefficient_to_dB (_route->gain_control()->get_value()) - 0.5), this);
|
_route->set_gain (dB_to_coefficient (accurate_coefficient_to_dB (_route->gain_control()->get_value()) - 0.5), this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
RouteUI::open_remote_control_id_dialog ()
|
||||||
|
{
|
||||||
|
ArdourDialog dialog (_("Remote Control ID"));
|
||||||
|
|
||||||
|
uint32_t const limit = _session.ntracks() + _session.nbusses () + 4;
|
||||||
|
|
||||||
|
HBox* hbox = manage (new HBox);
|
||||||
|
hbox->set_spacing (6);
|
||||||
|
hbox->pack_start (*manage (new Label (_("Remote control ID:"))));
|
||||||
|
SpinButton* spin = manage (new SpinButton);
|
||||||
|
spin->set_digits (0);
|
||||||
|
spin->set_increments (1, 10);
|
||||||
|
spin->set_range (0, limit);
|
||||||
|
spin->set_value (_route->remote_control_id());
|
||||||
|
hbox->pack_start (*spin);
|
||||||
|
dialog.get_vbox()->pack_start (*hbox);
|
||||||
|
|
||||||
|
dialog.add_button (Stock::CANCEL, RESPONSE_CANCEL);
|
||||||
|
dialog.add_button (Stock::APPLY, RESPONSE_ACCEPT);
|
||||||
|
|
||||||
|
dialog.show_all ();
|
||||||
|
int const r = dialog.run ();
|
||||||
|
|
||||||
|
if (r == RESPONSE_ACCEPT) {
|
||||||
|
_route->set_remote_control_id (spin->get_value_as_int ());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -97,7 +97,6 @@ class RouteUI : public virtual AxisView
|
||||||
|
|
||||||
Gtk::Menu* mute_menu;
|
Gtk::Menu* mute_menu;
|
||||||
Gtk::Menu* solo_menu;
|
Gtk::Menu* solo_menu;
|
||||||
Gtk::Menu* remote_control_menu;
|
|
||||||
Gtk::Menu* sends_menu;
|
Gtk::Menu* sends_menu;
|
||||||
|
|
||||||
XMLNode *xml_node;
|
XMLNode *xml_node;
|
||||||
|
|
@ -133,9 +132,7 @@ class RouteUI : public virtual AxisView
|
||||||
void route_rec_enable_changed();
|
void route_rec_enable_changed();
|
||||||
void session_rec_enable_changed();
|
void session_rec_enable_changed();
|
||||||
|
|
||||||
void build_solo_menu (void);
|
void build_solo_menu ();
|
||||||
void build_remote_control_menu (void);
|
|
||||||
void refresh_remote_control_menu ();
|
|
||||||
|
|
||||||
void solo_isolated_toggle (void*, Gtk::CheckMenuItem*);
|
void solo_isolated_toggle (void*, Gtk::CheckMenuItem*);
|
||||||
void toggle_solo_isolated (Gtk::CheckMenuItem*);
|
void toggle_solo_isolated (Gtk::CheckMenuItem*);
|
||||||
|
|
@ -185,13 +182,12 @@ class RouteUI : public virtual AxisView
|
||||||
|
|
||||||
virtual void map_frozen ();
|
virtual void map_frozen ();
|
||||||
|
|
||||||
void set_remote_control_id (uint32_t id, Gtk::CheckMenuItem* item);
|
|
||||||
|
|
||||||
void reversibly_apply_route_boolean (std::string name, void (ARDOUR::Route::*func)(bool, void*), bool, void *);
|
void reversibly_apply_route_boolean (std::string name, void (ARDOUR::Route::*func)(bool, void*), bool, void *);
|
||||||
void reversibly_apply_track_boolean (std::string name, void (ARDOUR::Track::*func)(bool, void*), bool, void *);
|
void reversibly_apply_track_boolean (std::string name, void (ARDOUR::Track::*func)(bool, void*), bool, void *);
|
||||||
|
|
||||||
void adjust_latency ();
|
void adjust_latency ();
|
||||||
void save_as_template ();
|
void save_as_template ();
|
||||||
|
void open_remote_control_id_dialog ();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
std::vector<sigc::connection> connections;
|
std::vector<sigc::connection> connections;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue