If there is one invert button for many channels, always use a menu; in this case, also partially light the invert button if only a subset of channels are inverted (#4699).
git-svn-id: svn://localhost/ardour2/branches/3.0@11593 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
4fb5d4596b
commit
8fca7c840d
@ -1771,10 +1771,10 @@ RouteUI::setup_invert_buttons ()
|
|||||||
b->set_text (string_compose (X_("Ø%1"), i + 1));
|
b->set_text (string_compose (X_("Ø%1"), i + 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (N <= 4) {
|
if (N <= _max_invert_buttons) {
|
||||||
UI::instance()->set_tip (*b, string_compose (_("Left-click to invert (phase reverse) channel %1 of this track. Right-click to show menu."), i + 1));
|
UI::instance()->set_tip (*b, string_compose (_("Left-click to invert (phase reverse) channel %1 of this track. Right-click to show menu."), i + 1));
|
||||||
} else {
|
} else {
|
||||||
UI::instance()->set_tip (*b, string_compose (_("Left-click to invert (phase reverse) all channels of this track. Right-click to show menu."), i + 1));
|
UI::instance()->set_tip (*b, _("Click to show a menu of channels for inversion (phase reverse)"));
|
||||||
}
|
}
|
||||||
|
|
||||||
_invert_buttons.push_back (b);
|
_invert_buttons.push_back (b);
|
||||||
@ -1792,14 +1792,30 @@ RouteUI::set_invert_button_state ()
|
|||||||
|
|
||||||
uint32_t const N = _route->input()->n_ports().n_audio();
|
uint32_t const N = _route->input()->n_ports().n_audio();
|
||||||
if (N > _max_invert_buttons) {
|
if (N > _max_invert_buttons) {
|
||||||
_invert_buttons.front()->set_active (_route->phase_invert().any());
|
|
||||||
--_i_am_the_modifier;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
int j = 0;
|
/* One button for many channels; explicit active if all channels are inverted,
|
||||||
for (vector<ArdourButton*>::iterator i = _invert_buttons.begin(); i != _invert_buttons.end(); ++i, ++j) {
|
implicit active if some are, off if none are.
|
||||||
(*i)->set_active (_route->phase_invert (j));
|
*/
|
||||||
|
|
||||||
|
ArdourButton* b = _invert_buttons.front ();
|
||||||
|
|
||||||
|
if (_route->phase_invert().count() == _route->phase_invert().size()) {
|
||||||
|
b->set_active_state (Gtkmm2ext::ExplicitActive);
|
||||||
|
} else if (_route->phase_invert().any()) {
|
||||||
|
b->set_active_state (Gtkmm2ext::ImplicitActive);
|
||||||
|
} else {
|
||||||
|
b->set_active_state (Gtkmm2ext::Off);
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
/* One button per channel; just set active */
|
||||||
|
|
||||||
|
int j = 0;
|
||||||
|
for (vector<ArdourButton*>::iterator i = _invert_buttons.begin(); i != _invert_buttons.end(); ++i, ++j) {
|
||||||
|
(*i)->set_active (_route->phase_invert (j));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
--_i_am_the_modifier;
|
--_i_am_the_modifier;
|
||||||
@ -1809,8 +1825,12 @@ bool
|
|||||||
RouteUI::invert_release (GdkEventButton* ev, uint32_t i)
|
RouteUI::invert_release (GdkEventButton* ev, uint32_t i)
|
||||||
{
|
{
|
||||||
if (ev->button == 1 && i < _invert_buttons.size()) {
|
if (ev->button == 1 && i < _invert_buttons.size()) {
|
||||||
_route->set_phase_invert (i, !_invert_buttons[i]->get_active());
|
uint32_t const N = _route->input()->n_ports().n_audio ();
|
||||||
return true;
|
if (N <= _max_invert_buttons) {
|
||||||
|
/* left-click inverts phase so long as we have a button per channel */
|
||||||
|
_route->set_phase_invert (i, !_invert_buttons[i]->get_active());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -1821,7 +1841,12 @@ RouteUI::invert_press (GdkEventButton* ev)
|
|||||||
{
|
{
|
||||||
using namespace Menu_Helpers;
|
using namespace Menu_Helpers;
|
||||||
|
|
||||||
if (ev->button != 3) {
|
uint32_t const N = _route->input()->n_ports().n_audio();
|
||||||
|
if (N <= _max_invert_buttons && ev->button != 3) {
|
||||||
|
/* If we have an invert button per channel, we only pop
|
||||||
|
up a menu on right-click; left click is handled
|
||||||
|
on release.
|
||||||
|
*/
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1830,7 +1855,6 @@ RouteUI::invert_press (GdkEventButton* ev)
|
|||||||
_invert_menu->set_name ("ArdourContextMenu");
|
_invert_menu->set_name ("ArdourContextMenu");
|
||||||
MenuList& items = _invert_menu->items ();
|
MenuList& items = _invert_menu->items ();
|
||||||
|
|
||||||
uint32_t const N = _route->input()->n_ports().n_audio();
|
|
||||||
for (uint32_t i = 0; i < N; ++i) {
|
for (uint32_t i = 0; i < N; ++i) {
|
||||||
items.push_back (CheckMenuElem (string_compose (X_("Ø%1"), i + 1), sigc::bind (sigc::mem_fun (*this, &RouteUI::invert_menu_toggled), i)));
|
items.push_back (CheckMenuElem (string_compose (X_("Ø%1"), i + 1), sigc::bind (sigc::mem_fun (*this, &RouteUI::invert_menu_toggled), i)));
|
||||||
CheckMenuItem* e = dynamic_cast<CheckMenuItem*> (&items.back ());
|
CheckMenuItem* e = dynamic_cast<CheckMenuItem*> (&items.back ());
|
||||||
|
Loading…
Reference in New Issue
Block a user