allow mode changes in the time info box, all synced

git-svn-id: svn://localhost/ardour2/branches/3.0@9681 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Paul Davis 2011-06-07 17:40:05 +00:00
parent be1abb12ff
commit f6e67fa3dd
3 changed files with 43 additions and 8 deletions

View file

@ -37,6 +37,8 @@ using namespace ARDOUR;
TimeInfoBox::TimeInfoBox ()
: Table (4, 4)
, syncing_selection (false)
, syncing_punch (false)
{
selection_start = new AudioClock ("selection-start", false, "SelectionClockDisplay", false, false, false, false);
selection_end = new AudioClock ("selection-end", false, "SelectionClockDisplay", false, false, false, false);
@ -83,6 +85,7 @@ TimeInfoBox::TimeInfoBox ()
set_homogeneous (false);
set_spacings (0);
set_border_width (2);
set_col_spacings (2);
/* a bit more spacing between the two "sides" */
set_col_spacing (1, 10);
@ -115,6 +118,13 @@ TimeInfoBox::TimeInfoBox ()
show_all ();
selection_start->mode_changed.connect (sigc::bind (sigc::mem_fun (*this, &TimeInfoBox::sync_selection_mode), selection_start));
selection_end->mode_changed.connect (sigc::bind (sigc::mem_fun (*this, &TimeInfoBox::sync_selection_mode), selection_start));
selection_length->mode_changed.connect (sigc::bind (sigc::mem_fun (*this, &TimeInfoBox::sync_selection_mode), selection_start));
punch_start->mode_changed.connect (sigc::bind (sigc::mem_fun (*this, &TimeInfoBox::sync_punch_mode), punch_start));
punch_end->mode_changed.connect (sigc::bind (sigc::mem_fun (*this, &TimeInfoBox::sync_punch_mode), punch_end));
Editor::instance().get_selection().TimeChanged.connect (sigc::mem_fun (*this, &TimeInfoBox::selection_changed));
}
@ -128,6 +138,30 @@ TimeInfoBox::~TimeInfoBox ()
delete punch_end;
}
void
TimeInfoBox::sync_selection_mode (AudioClock* src)
{
if (!syncing_selection) {
syncing_selection = true;
selection_start->set_mode (src->mode());
selection_end->set_mode (src->mode());
selection_length->set_mode (src->mode());
syncing_selection = false;
}
}
void
TimeInfoBox::sync_punch_mode (AudioClock* src)
{
if (!syncing_punch) {
syncing_punch = true;
punch_start->set_mode (src->mode());
punch_end->set_mode (src->mode());
syncing_punch = false;
}
}
void
TimeInfoBox::set_session (Session* s)
{