Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Foldback gui: previous and next buttons don't wrap around
I had set the previous next buttons to wrap around
but Robin felt dead ending was better. The previous
button becomes insensitive when the first foldback bus
is displayed and next is insensitive when the last is
displayed.
  • Loading branch information
ovenwerks committed Sep 11, 2019
1 parent 3f6310e commit 2e857e9
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 39 deletions.
99 changes: 60 additions & 39 deletions gtk2_ardour/foldback_strip.cc
Expand Up @@ -321,9 +321,12 @@ FoldbackStrip::init ()
_previous_button.set_name ("mixer strip button");
_previous_button.set_icon (ArdourIcon::NudgeLeft);
_previous_button.set_tweaks (ArdourButton::Square);
_previous_button.set_sensitive (false);

_next_button.set_name ("mixer strip button");
_next_button.set_icon (ArdourIcon::NudgeRight);
_next_button.set_tweaks (ArdourButton::Square);
_next_button.set_sensitive (false);

prev_next_box.pack_start (_previous_button, false, true);
prev_next_box.pack_end (_next_button, false, true);
Expand Down Expand Up @@ -576,7 +579,7 @@ FoldbackStrip::set_route (boost::shared_ptr<Route> rt)
update_output_display ();

add_events (Gdk::BUTTON_RELEASE_MASK);

prev_next_changed ();
_previous_button.show();
_next_button.show();
prev_next_box.show ();
Expand Down Expand Up @@ -1228,21 +1231,74 @@ FoldbackStrip::previous_button_button_press (GdkEventButton* ev)
}
}
} else {
// only one route or none do nothing
// only one route do nothing
return true;
}
//use previous to set route
if (previous) {
set_route (previous);
} else {
} /*else { no wrap around
set_route (last);
}*/
return true;
}

return false;
}

gboolean
FoldbackStrip::next_button_button_press (GdkEventButton* ev)
{
if (ev->button == 1 || ev->button == 3) {
bool past_current = false;
StripableList slist;
boost::shared_ptr<Route> next = boost::shared_ptr<Route> ();
boost::shared_ptr<Route> first = boost::shared_ptr<Route> ();
_session->get_stripables (slist, PresentationInfo::FoldbackBus);
if (slist.size () > 1) {
first = boost::dynamic_pointer_cast<Route> (*(slist.begin()));
for (StripableList::iterator s = slist.begin(); s != slist.end(); ++s) {
if (past_current) {
next = boost::dynamic_pointer_cast<Route> (*s);
break;
}
if ((*s) == _route) {
past_current = true;
}
}
} else {
// only one route do nothing
return true;
}
//use next to set route
if (next) {
set_route (next);
} /*else { no wrap around
set_route (first);
}*/
return true;
}

return false;
}

void
FoldbackStrip::prev_next_changed ()
{
StripableList slist;
_session->get_stripables (slist, PresentationInfo::FoldbackBus);
if ((slist.size() < 2) || (boost::dynamic_pointer_cast<Stripable> (_route) == *(slist.begin()))) {
_previous_button.set_sensitive (false);
} else {
_previous_button.set_sensitive (true);
}
if ((slist.size () < 2) || boost::dynamic_pointer_cast<Stripable> (_route) == *(--slist.end())) {
_next_button.set_sensitive (false);
} else {
_next_button.set_sensitive (true);
}
}

gboolean
FoldbackStrip::show_sends_press (GdkEventButton* ev)
{
Expand Down Expand Up @@ -1280,42 +1336,6 @@ FoldbackStrip::send_blink (bool onoff)
}
}

gboolean
FoldbackStrip::next_button_button_press (GdkEventButton* ev)
{
if (ev->button == 1 || ev->button == 3) {
bool past_current = false;
StripableList slist;
boost::shared_ptr<Route> next = boost::shared_ptr<Route> ();
boost::shared_ptr<Route> first = boost::shared_ptr<Route> ();
_session->get_stripables (slist, PresentationInfo::FoldbackBus);
if (slist.size () > 1) {
first = boost::dynamic_pointer_cast<Route> (*(slist.begin()));
for (StripableList::iterator s = slist.begin(); s != slist.end(); ++s) {
if (past_current) {
next = boost::dynamic_pointer_cast<Route> (*s);
break;
}
if ((*s) == _route) {
past_current = true;
}
}
} else {
// only one or no route do nothing
return true;
}
//use next to set route
if (next) {
set_route (next);
} else {
set_route (first);
}
return true;
}

return false;
}

void
FoldbackStrip::list_route_operations ()
{
Expand Down Expand Up @@ -1651,6 +1671,7 @@ FoldbackStrip::remove_current_fb ()
if (next) {
set_route (next);
_session->remove_route (old_route);
prev_next_changed ();
} else {
clear_send_box ();
RouteUI::self_delete ();
Expand Down
1 change: 1 addition & 0 deletions gtk2_ardour/foldback_strip.h
Expand Up @@ -252,6 +252,7 @@ class FoldbackStrip : public RouteUI, public Gtk::EventBox

gboolean previous_button_button_press (GdkEventButton*);
gboolean next_button_button_press (GdkEventButton*);
void prev_next_changed ();
gboolean show_sends_press (GdkEventButton*);
void send_blink (bool);

Expand Down

0 comments on commit 2e857e9

Please sign in to comment.