+void
+Editor::update_all_region_subrows (TreeModel::Row const &parent_row, int level)
+{
+ TreeModel::iterator i;
+ TreeModel::Children subrows = (*parent_row).children();
+
+ for (i = subrows.begin(); i != subrows.end(); ++i) {
+
+ boost::shared_ptr<Region> region = (*i)[region_list_columns.region];
+
+ if (!region->automatic()) {
+ cerr << "level " << level << " : Updating " << region->name() << "\n";
+ populate_row(region, (*i));
+ }
+
+ if (!(*i).children().empty()) {
+ update_all_region_subrows((*i), level + 1);
+ }
+ }
+}
+
+void
+Editor::populate_row (boost::shared_ptr<Region> region, TreeModel::Row const &row)
+{
+ char start_str[16];
+ char end_str[16];
+ char length_str[16];
+ char sync_str[16];
+ char fadein_str[16];
+ char fadeout_str[16];
+ char used_str[8];
+ int used;
+ BBT_Time bbt; // FIXME Why do these have to be declared here ?
+ SMPTE::Time smpte; // FIXME I would like them declared in the case statment where they are used.
+
+ bool missing_source = boost::dynamic_pointer_cast<SilentFileSource>(region->source());
+
+ boost::shared_ptr<AudioRegion> audioRegion = boost::dynamic_pointer_cast<AudioRegion>(region);
+
+ bool fades_in_seconds = false;
+
+ start_str[0] = '\0';
+ end_str[0] = '\0';
+ length_str[0] = '\0';
+ sync_str[0] = '\0';
+ fadein_str[0] = '\0';
+ fadeout_str[0] = '\0';
+ used_str[0] = '\0';
+
+ used = get_regionview_count_from_region_list(region);
+ sprintf (used_str, "%4d" , used);
+
+ switch (ARDOUR_UI::instance()->secondary_clock.mode ()) {
+ case AudioClock::SMPTE:
+ case AudioClock::Off: /* If the secondary clock is off, default to SMPTE */
+ session->smpte_time (region->position(), smpte);
+ sprintf (start_str, "%02d:%02d:%02d:%02d", smpte.hours, smpte.minutes, smpte.seconds, smpte.frames);
+ session->smpte_time (region->position() + region->length() - 1, smpte);
+ sprintf (end_str, "%02d:%02d:%02d:%02d", smpte.hours, smpte.minutes, smpte.seconds, smpte.frames);
+ session->smpte_time (region->length(), smpte);
+ sprintf (length_str, "%02d:%02d:%02d:%02d", smpte.hours, smpte.minutes, smpte.seconds, smpte.frames);
+ session->smpte_time (region->sync_position() + region->position(), smpte);
+ sprintf (sync_str, "%02d:%02d:%02d:%02d", smpte.hours, smpte.minutes, smpte.seconds, smpte.frames);
+
+ if (audioRegion && !fades_in_seconds) {
+ session->smpte_time (audioRegion->fade_in()->back()->when, smpte);
+ sprintf (fadein_str, "%02d:%02d:%02d:%02d", smpte.hours, smpte.minutes, smpte.seconds, smpte.frames);
+ session->smpte_time (audioRegion->fade_out()->back()->when, smpte);
+ sprintf (fadeout_str, "%02d:%02d:%02d:%02d", smpte.hours, smpte.minutes, smpte.seconds, smpte.frames);
+ }
+
+ break;
+
+ case AudioClock::BBT:
+ session->tempo_map().bbt_time (region->position(), bbt);
+ sprintf (start_str, "%03d|%02d|%04d" , bbt.bars, bbt.beats, bbt.ticks);
+ session->tempo_map().bbt_time (region->position() + region->length() - 1, bbt);
+ sprintf (end_str, "%03d|%02d|%04d" , bbt.bars, bbt.beats, bbt.ticks);
+ session->tempo_map().bbt_time (region->length(), bbt);
+ sprintf (length_str, "%03d|%02d|%04d" , bbt.bars, bbt.beats, bbt.ticks);
+ session->tempo_map().bbt_time (region->sync_position() + region->position(), bbt);
+ sprintf (sync_str, "%03d|%02d|%04d" , bbt.bars, bbt.beats, bbt.ticks);
+
+ if (audioRegion && !fades_in_seconds) {
+ session->tempo_map().bbt_time (audioRegion->fade_in()->back()->when, bbt);
+ sprintf (fadein_str, "%03d|%02d|%04d" , bbt.bars, bbt.beats, bbt.ticks);
+ session->tempo_map().bbt_time (audioRegion->fade_out()->back()->when, bbt);
+ sprintf (fadeout_str, "%03d|%02d|%04d" , bbt.bars, bbt.beats, bbt.ticks);
+ }
+ break;
+
+ case AudioClock::MinSec:
+ nframes_t left;
+ int hrs;
+ int mins;
+ float secs;
+
+ left = region->position();
+ hrs = (int) floor (left / (session->frame_rate() * 60.0f * 60.0f));
+ left -= (nframes_t) floor (hrs * session->frame_rate() * 60.0f * 60.0f);
+ mins = (int) floor (left / (session->frame_rate() * 60.0f));
+ left -= (nframes_t) floor (mins * session->frame_rate() * 60.0f);
+ secs = left / (float) session->frame_rate();
+ sprintf (start_str, "%02d:%02d:%06.3f", hrs, mins, secs);
+
+ left = region->position() + region->length() - 1;
+ hrs = (int) floor (left / (session->frame_rate() * 60.0f * 60.0f));
+ left -= (nframes_t) floor (hrs * session->frame_rate() * 60.0f * 60.0f);
+ mins = (int) floor (left / (session->frame_rate() * 60.0f));
+ left -= (nframes_t) floor (mins * session->frame_rate() * 60.0f);
+ secs = left / (float) session->frame_rate();
+ sprintf (end_str, "%02d:%02d:%06.3f", hrs, mins, secs);
+
+ left = region->length();
+ hrs = (int) floor (left / (session->frame_rate() * 60.0f * 60.0f));
+ left -= (nframes_t) floor (hrs * session->frame_rate() * 60.0f * 60.0f);
+ mins = (int) floor (left / (session->frame_rate() * 60.0f));
+ left -= (nframes_t) floor (mins * session->frame_rate() * 60.0f);
+ secs = left / (float) session->frame_rate();
+ sprintf (length_str, "%02d:%02d:%06.3f", hrs, mins, secs);
+
+ left = region->sync_position() + region->position();
+ hrs = (int) floor (left / (session->frame_rate() * 60.0f * 60.0f));
+ left -= (nframes_t) floor (hrs * session->frame_rate() * 60.0f * 60.0f);
+ mins = (int) floor (left / (session->frame_rate() * 60.0f));
+ left -= (nframes_t) floor (mins * session->frame_rate() * 60.0f);
+ secs = left / (float) session->frame_rate();
+ sprintf (sync_str, "%02d:%02d:%06.3f", hrs, mins, secs);
+
+ if (audioRegion && !fades_in_seconds) {
+ left = audioRegion->fade_in()->back()->when;
+ hrs = (int) floor (left / (session->frame_rate() * 60.0f * 60.0f));
+ left -= (nframes_t) floor (hrs * session->frame_rate() * 60.0f * 60.0f);
+ mins = (int) floor (left / (session->frame_rate() * 60.0f));
+ left -= (nframes_t) floor (mins * session->frame_rate() * 60.0f);
+ secs = left / (float) session->frame_rate();
+ sprintf (fadein_str, "%02d:%02d:%06.3f", hrs, mins, secs);
+
+ left = audioRegion->fade_out()->back()->when;
+ hrs = (int) floor (left / (session->frame_rate() * 60.0f * 60.0f));
+ left -= (nframes_t) floor (hrs * session->frame_rate() * 60.0f * 60.0f);
+ mins = (int) floor (left / (session->frame_rate() * 60.0f));
+ left -= (nframes_t) floor (mins * session->frame_rate() * 60.0f);
+ secs = left / (float) session->frame_rate();
+ sprintf (fadeout_str, "%02d:%02d:%06.3f", hrs, mins, secs);