implement panner reset functionality (missing since 0.99?)

git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@5013 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Paul Davis 2009-04-30 14:34:39 +00:00
parent 5910198300
commit 3a8294a231
4 changed files with 87 additions and 4 deletions

View File

@ -478,9 +478,9 @@ PannerUI::build_pan_menu (uint32_t which)
bypass_menu_item->set_active (_io->panner().bypassed());
bypass_menu_item->signal_toggled().connect (mem_fun(*this, &PannerUI::pan_bypass_toggle));
items.push_back (MenuElem (_("Reset"), mem_fun(*this, &PannerUI::pan_reset)));
items.push_back (MenuElem (_("Reset"), bind (mem_fun(*this, &PannerUI::pan_reset), which)));
items.push_back (SeparatorElem());
items.push_back (MenuElem (_("Reset all")));
items.push_back (MenuElem (_("Reset all"), mem_fun (*this, &PannerUI::pan_reset_all)));
}
void
@ -499,8 +499,15 @@ PannerUI::pan_bypass_toggle ()
}
void
PannerUI::pan_reset ()
PannerUI::pan_reset (uint32_t which)
{
_io->panner().reset_streampanner (which);
}
void
PannerUI::pan_reset_all ()
{
_io->panner().reset_to_default ();
}
void

View File

@ -140,7 +140,8 @@ class PannerUI : public Gtk::HBox
Gtk::CheckMenuItem* bypass_menu_item;
void build_pan_menu (uint32_t which);
void pan_mute (uint32_t which);
void pan_reset ();
void pan_reset (uint32_t which);
void pan_reset_all ();
void pan_bypass_toggle ();
void pan_automation_state_changed();

View File

@ -248,6 +248,8 @@ class Panner : public std::vector<StreamPanner*>, public Stateful, public sigc::
void remove (uint32_t which);
void clear ();
void reset (uint32_t noutputs, uint32_t npans);
void reset_streampanner (uint32_t which_panner);
void reset_to_default ();
void snapshot (nframes_t now);
void transport_stopped (nframes_t frame);

View File

@ -800,6 +800,79 @@ Panner::set_bypassed (bool yn)
}
}
void
Panner::reset_to_default ()
{
vector<float> positions;
switch (outputs.size()) {
case 0:
case 1:
return;
}
if (outputs.size() == 2) {
switch (size()) {
case 1:
front()->set_position (0.5);
front()->automation().reset_default (0.5);
return;
break;
case 2:
front()->set_position (0.0);
front()->automation().reset_default (0.0);
back()->set_position (1.0);
back()->automation().reset_default (1.0);
return;
default:
break;
}
}
vector<Output>::iterator o;
iterator p;
for (o = outputs.begin(), p = begin(); o != outputs.end() && p != end(); ++o, ++p) {
(*p)->set_position ((*o).x, (*o).y);
}
}
void
Panner::reset_streampanner (uint32_t which)
{
if (which >= size() || which >= outputs.size()) {
return;
}
switch (outputs.size()) {
case 0:
case 1:
return;
case 2:
switch (size()) {
case 1:
/* stereo out, 1 stream, default = middle */
front()->set_position (0.5);
front()->automation().reset_default (0.5);
break;
case 2:
/* stereo out, 2 streams, default = hard left/right */
if (which == 0) {
front()->set_position (0.0);
front()->automation().reset_default (0.0);
} else {
back()->set_position (1.0);
back()->automation().reset_default (1.0);
}
break;
}
return;
default:
(*this)[which]->set_position (outputs[which].x, outputs[which].y);
}
}
void
Panner::reset (uint32_t nouts, uint32_t npans)