region list patch #2 from chris g, slightly reworked by me; sv_se po changes, possibly borked

git-svn-id: svn://localhost/ardour2/branches/3.0@3820 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Paul Davis 2008-09-28 19:47:45 +00:00
parent 3b424fd8b5
commit e11b3f90c2
4 changed files with 295 additions and 781 deletions

View file

@ -652,9 +652,17 @@ Editor::Editor ()
region_list_display.append_column (_("Start"), region_list_columns.start); region_list_display.append_column (_("Start"), region_list_columns.start);
region_list_display.append_column (_("End"), region_list_columns.end); region_list_display.append_column (_("End"), region_list_columns.end);
region_list_display.append_column (_("Length"), region_list_columns.length); region_list_display.append_column (_("Length"), region_list_columns.length);
region_list_display.append_column (_("Sync"), region_list_columns.sync);
region_list_display.append_column (_("Fade In"), region_list_columns.fadein);
region_list_display.append_column (_("Fade Out"), region_list_columns.fadeout);
region_list_display.append_column (_("L"), region_list_columns.locked);
region_list_display.append_column (_("G"), region_list_columns.glued);
region_list_display.append_column (_("M"), region_list_columns.muted);
region_list_display.append_column (_("O"), region_list_columns.opaque);
region_list_display.append_column (_("Used"), region_list_columns.used); region_list_display.append_column (_("Used"), region_list_columns.used);
region_list_display.append_column (_("Path to parent file"), region_list_columns.path); region_list_display.append_column (_("Path to parent file"), region_list_columns.path);
region_list_display.set_headers_visible (true); region_list_display.set_headers_visible (true);
region_list_display.set_grid_lines (TREE_VIEW_GRID_LINES_BOTH);
CellRendererText* region_name_cell = dynamic_cast<CellRendererText*>(region_list_display.get_column_cell_renderer (0)); CellRendererText* region_name_cell = dynamic_cast<CellRendererText*>(region_list_display.get_column_cell_renderer (0));
region_name_cell->property_editable() = true; region_name_cell->property_editable() = true;

View file

@ -933,16 +933,30 @@ class Editor : public PublicEditor
add (start); add (start);
add (end); add (end);
add (length); add (length);
add (sync);
add (fadein);
add (fadeout);
add (locked);
add (glued);
add (muted);
add (opaque);
add (used); add (used);
add (path); add (path);
} }
Gtk::TreeModelColumn<Glib::ustring> name; Gtk::TreeModelColumn<Glib::ustring> name;
Gtk::TreeModelColumn<boost::shared_ptr<ARDOUR::Region> > region; Gtk::TreeModelColumn<boost::shared_ptr<ARDOUR::Region> > region;
Gtk::TreeModelColumn<Gdk::Color> color_; Gtk::TreeModelColumn<Gdk::Color> color_;
Gtk::TreeModelColumn<Glib::ustring> start; Gtk::TreeModelColumn<Glib::ustring> start;
Gtk::TreeModelColumn<Glib::ustring> end; Gtk::TreeModelColumn<Glib::ustring> end;
Gtk::TreeModelColumn<Glib::ustring> length; Gtk::TreeModelColumn<Glib::ustring> length;
Gtk::TreeModelColumn<Glib::ustring> used; Gtk::TreeModelColumn<Glib::ustring> sync;
Gtk::TreeModelColumn<Glib::ustring> fadein;
Gtk::TreeModelColumn<Glib::ustring> fadeout;
Gtk::TreeModelColumn<bool> locked;
Gtk::TreeModelColumn<bool> glued;
Gtk::TreeModelColumn<bool> muted;
Gtk::TreeModelColumn<bool> opaque;
Gtk::TreeModelColumn<Glib::ustring> used;
Gtk::TreeModelColumn<Glib::ustring> path; Gtk::TreeModelColumn<Glib::ustring> path;
}; };
@ -1091,7 +1105,9 @@ class Editor : public PublicEditor
void add_regions_to_region_display (std::vector<boost::weak_ptr<ARDOUR::Region> > & ); void add_regions_to_region_display (std::vector<boost::weak_ptr<ARDOUR::Region> > & );
void region_hidden (boost::shared_ptr<ARDOUR::Region>); void region_hidden (boost::shared_ptr<ARDOUR::Region>);
void redisplay_regions (); void redisplay_regions ();
void populate_row (boost::shared_ptr<ARDOUR::Region>, Gtk::TreeModel::Row const &);
void update_region_row (boost::shared_ptr<ARDOUR::Region>); void update_region_row (boost::shared_ptr<ARDOUR::Region>);
bool update_region_subrows (boost::shared_ptr<ARDOUR::Region>, Gtk::TreeModel::Row const &, int);
bool no_region_list_redisplay; bool no_region_list_redisplay;
void insert_into_tmp_regionlist(boost::shared_ptr<ARDOUR::Region>); void insert_into_tmp_regionlist(boost::shared_ptr<ARDOUR::Region>);

View file

@ -70,7 +70,6 @@ void
Editor::region_hidden (boost::shared_ptr<Region> r) Editor::region_hidden (boost::shared_ptr<Region> r)
{ {
ENSURE_GUI_THREAD(bind (mem_fun(*this, &Editor::region_hidden), r)); ENSURE_GUI_THREAD(bind (mem_fun(*this, &Editor::region_hidden), r));
redisplay_regions (); redisplay_regions ();
} }
@ -78,32 +77,28 @@ void
Editor::add_regions_to_region_display (vector<boost::weak_ptr<Region> >& regions) Editor::add_regions_to_region_display (vector<boost::weak_ptr<Region> >& regions)
{ {
region_list_display.set_model (Glib::RefPtr<Gtk::TreeStore>(0)); region_list_display.set_model (Glib::RefPtr<Gtk::TreeStore>(0));
for (vector<boost::weak_ptr<Region> >::iterator x = regions.begin(); x != regions.end(); ++x) { for (vector<boost::weak_ptr<Region> >::iterator x = regions.begin(); x != regions.end(); ++x) {
boost::shared_ptr<Region> region ((*x).lock()); boost::shared_ptr<Region> region ((*x).lock());
if (region) { if (region) {
add_region_to_region_display (region); add_region_to_region_display (region);
} }
} }
region_list_display.set_model (region_list_model); region_list_display.set_model (region_list_model);
} }
void void
Editor::add_region_to_region_display (boost::shared_ptr<Region> region) Editor::add_region_to_region_display (boost::shared_ptr<Region> region)
{ {
if (!region || !session) {
return;
}
string str; string str;
char start_str[16];
char end_str[16];
char length_str[16];
char used_str[8];
int used;
TreeModel::Row row; TreeModel::Row row;
Gdk::Color c; Gdk::Color c;
bool missing_source; bool missing_source = boost::dynamic_pointer_cast<SilentFileSource>(region->source());
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.
missing_source = boost::dynamic_pointer_cast<SilentFileSource>(region->source());
if (!show_automatic_regions_in_region_list && region->automatic()) { if (!show_automatic_regions_in_region_list && region->automatic()) {
return; return;
@ -128,7 +123,6 @@ Editor::add_region_to_region_display (boost::shared_ptr<Region> region)
boost::shared_ptr<Region> proxy = parent[region_list_columns.region]; boost::shared_ptr<Region> proxy = parent[region_list_columns.region];
proxy.reset (); proxy.reset ();
} else { } else {
parent = *iter; parent = *iter;
} }
} }
@ -186,17 +180,19 @@ Editor::add_region_to_region_display (boost::shared_ptr<Region> region)
str += ']'; str += ']';
} }
//if (missing_source) {
// str += _(" (MISSING)");
//}
row[region_list_columns.name] = str; row[region_list_columns.name] = str;
row[region_list_columns.region] = region; row[region_list_columns.region] = region;
if (missing_source) {
row[region_list_columns.path] = _("(MISSING) ") + region->source()->name();
} else {
row[region_list_columns.path] = region->source()->name();
}
if (region->automatic()) { if (region->automatic()) {
return; return;
} }
} else { } else {
/* find parent node, add as new child */ /* find parent node, add as new child */
@ -234,96 +230,9 @@ Editor::add_region_to_region_display (boost::shared_ptr<Region> region)
} }
} }
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);
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);
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);
break;
case AudioClock::Frames:
snprintf (start_str, sizeof (start_str), "%u", region->position());
snprintf (end_str, sizeof (end_str), "%u", (region->position() + region->length() - 1));
snprintf (length_str, sizeof (length_str), "%u", region->length());
break;
default:
break;
}
row[region_list_columns.region] = region; row[region_list_columns.region] = region;
if (used > 1) { populate_row(region, row);
row[region_list_columns.start] = "Multiple";
row[region_list_columns.end] = "Multiple";
} else {
row[region_list_columns.start] = start_str;
row[region_list_columns.end] = end_str;
}
row[region_list_columns.length] = length_str;
row[region_list_columns.used] = used_str;
if (missing_source) {
row[region_list_columns.path] = _("(MISSING) ") + region->source()->name();
} else {
row[region_list_columns.path] = region->source()->name();
}
if (region->n_channels() > 1) {
row[region_list_columns.name] = string_compose("%1 [%2]", region->name(), region->n_channels());
} else {
row[region_list_columns.name] = region->name();
}
} }
@ -367,33 +276,34 @@ Editor::region_list_region_changed (Change what_changed, boost::weak_ptr<Region>
void void
Editor::region_list_selection_changed() Editor::region_list_selection_changed()
{ {
bool selected; bool selected = false;
if (region_list_display.get_selection()->count_selected_rows() > 0) { if (region_list_display.get_selection()->count_selected_rows() > 0) {
selected = true; selected = true;
} else {
selected = false;
} }
if (selected) { if (selected) {
TreeView::Selection::ListHandle_Path rows = region_list_display.get_selection()->get_selected_rows (); TreeView::Selection::ListHandle_Path rows = region_list_display.get_selection()->get_selected_rows ();
TreeView::Selection::ListHandle_Path::iterator i = rows.begin();
TreeIter iter; TreeIter iter;
if ((iter = region_list_model->get_iter (*i))) { for (TreeView::Selection::ListHandle_Path::iterator i = rows.begin(); i != rows.end(); ++i) {
boost::shared_ptr<Region> r = (*iter)[region_list_columns.region];
/* they could have clicked on a row that is just a placeholder, like "Hidden" */ if (iter = region_list_model->get_iter (*i)) {
boost::shared_ptr<Region> r = (*iter)[region_list_columns.region];
if (r) {
/* just set the first selected region (in fact, the selection model might be SINGLE, which /* they could have clicked on a row that is just a placeholder, like "Hidden" */
means there can only be one.
*/
set_selected_regionview_from_region_list (r, Selection::Set); if (r) {
/* just set the first selected region (in fact, the selection model might be SINGLE, which
means there can only be one.
*/
set_selected_regionview_from_region_list (r, Selection::Set);
}
} }
} }
} }
} }
@ -411,125 +321,149 @@ Editor::insert_into_tmp_regionlist(boost::shared_ptr<Region> region)
void void
Editor::redisplay_regions () Editor::redisplay_regions ()
{ {
if (no_region_list_redisplay) { if (no_region_list_redisplay || !session) {
return; return;
} }
if (session) { bool tree_expanded = false;
if (toggle_full_region_list_action && toggle_full_region_list_action->get_active()) { //If the list was expanded prior to rebuilding,
tree_expanded = true; //expand it again afterwards
}
region_list_display.set_model (Glib::RefPtr<Gtk::TreeStore>(0));
region_list_model->clear ();
region_list_display.set_model (Glib::RefPtr<Gtk::TreeStore>(0)); /* now add everything we have, via a temporary list used to help with
region_list_model->clear (); sorting.
*/
tmp_region_list.clear();
session->foreach_region (this, &Editor::insert_into_tmp_regionlist);
/* now add everything we have, via a temporary list used to help with for (list<boost::shared_ptr<Region> >::iterator r = tmp_region_list.begin(); r != tmp_region_list.end(); ++r) {
sorting. add_region_to_region_display (*r);
*/ }
tmp_region_list.clear();
tmp_region_list.clear();
session->foreach_region (this, &Editor::insert_into_tmp_regionlist); region_list_display.set_model (region_list_model);
for (list<boost::shared_ptr<Region> >::iterator r = tmp_region_list.begin(); r != tmp_region_list.end(); ++r) { if (tree_expanded) {
add_region_to_region_display (*r); region_list_display.expand_all();
}
tmp_region_list.clear();
region_list_display.set_model (region_list_model);
} }
} }
void void
Editor::update_region_row (boost::shared_ptr<Region> region) Editor::update_region_row (boost::shared_ptr<Region> region)
{ {
if (!region || !session) { if (!region || !session) {
return; return;
} }
TreeModel::iterator i;
TreeModel::Children rows = region_list_model->children();
for (i = rows.begin(); i != rows.end(); ++i) {
cerr << "Level 1: Compare " << region->name() << " with parent " << (*i)[region_list_columns.name] << "\n";
boost::shared_ptr<Region> compared_region = (*i)[region_list_columns.region];
if (region == compared_region) {
cerr << "Matched\n";
populate_row(region, (*i));
return;
}
if (!(*i).children().empty()) {
if (update_region_subrows(region, (*i), 2)) {
return;
}
}
}
cerr << "Returning - No match\n\n";
}
bool
Editor::update_region_subrows (boost::shared_ptr<Region> region, TreeModel::Row const &parent_row, int level)
{
TreeModel::iterator i;
TreeModel::Children subrows = (*parent_row).children();
for (i = subrows.begin(); i != subrows.end(); ++i) {
cerr << "Level " << level << ": Compare " << region->name() << " with child " << (*i)[region_list_columns.name] << "\n";
boost::shared_ptr<Region> compared_region = (*i)[region_list_columns.region];
if (region == compared_region) {
populate_row(region, (*i));
cerr << "Matched\n";
return true;
}
if (!(*i).children().empty()) {
if (update_region_subrows(region, (*i), level + 1)) {
return true;
}
}
}
return false;
}
void
Editor::populate_row (boost::shared_ptr<Region> region, TreeModel::Row const &row)
{
char start_str[16]; char start_str[16];
char end_str[16]; char end_str[16];
char length_str[16]; char length_str[16];
char sync_str[16];
char fadein_str[16];
char fadeout_str[16];
char used_str[8]; char used_str[8];
int used; int used;
bool missing_source; BBT_Time bbt; // FIXME Why do these have to be declared here ?
bool matched_region = false; SMPTE::Time smpte; // FIXME I would like them declared in the case statment where they are used.
BBT_Time bbt;
SMPTE::Time smpte;
missing_source = boost::dynamic_pointer_cast<SilentFileSource>(region->source()); bool missing_source = boost::dynamic_pointer_cast<SilentFileSource>(region->source());
TreeModel::iterator found_region; boost::shared_ptr<AudioRegion> audioRegion = boost::dynamic_pointer_cast<AudioRegion>(region);
if (show_automatic_regions_in_region_list) { bool fades_in_seconds = false;
TreeModel::iterator i;
TreeModel::iterator ii;
TreeModel::Children rows = region_list_model->children();
for (i = rows.begin(); i != rows.end(); ++i) {
cerr << "Parent " << (*i)[region_list_columns.name] << "\n";
TreeModel::Children subrows = (*i).children(); start_str[0] = '\0';
end_str[0] = '\0';
for (ii = subrows.begin(); ii != subrows.end(); ++ii) { length_str[0] = '\0';
sync_str[0] = '\0';
cerr << "Compare " << region->name() << " with child " << (*ii)[region_list_columns.name] << "\n"; fadein_str[0] = '\0';
fadeout_str[0] = '\0';
boost::shared_ptr<Region> compared_region = (*ii)[region_list_columns.region]; used_str[0] = '\0';
if (region == compared_region) {
cerr << "Matched\n";
matched_region = true;
found_region = ii;
break;
}
}
if (matched_region) {
break;
}
}
} else {
TreeModel::iterator i;
TreeModel::Children rows = region_list_model->children();
for (i = rows.begin(); i != rows.end(); ++i) {
cerr << "Compare " << region->name() << " with " << (*i)[region_list_columns.name] << "\n";
boost::shared_ptr<Region> compared_region = (*i)[region_list_columns.region];
if (region == compared_region) {
cerr << "Matched\n";
matched_region = true;
found_region = i;
break;
}
}
}
if (!matched_region) {
cerr << "Returning - No match\n\n";
return;
}
used = get_regionview_count_from_region_list(region); used = get_regionview_count_from_region_list(region);
sprintf (used_str, "%4d" , used); sprintf (used_str, "%4d" , used);
switch (ARDOUR_UI::instance()->secondary_clock.mode ()) { switch (ARDOUR_UI::instance()->secondary_clock.mode ()) {
case AudioClock::SMPTE: case AudioClock::SMPTE:
case AudioClock::Off: // If the secondary clock is off, default to SMPTE case AudioClock::Off: /* If the secondary clock is off, default to SMPTE */
session->smpte_time (region->position(), smpte); session->smpte_time (region->position(), smpte);
sprintf (start_str, "%02d:%02d:%02d:%02d", smpte.hours, smpte.minutes, smpte.seconds, smpte.frames); sprintf (start_str, "%02d:%02d:%02d:%02d", smpte.hours, smpte.minutes, smpte.seconds, smpte.frames);
session->smpte_time (region->position() + region->length() - 1, smpte); session->smpte_time (region->position() + region->length() - 1, smpte);
sprintf (end_str, "%02d:%02d:%02d:%02d", smpte.hours, smpte.minutes, smpte.seconds, smpte.frames); sprintf (end_str, "%02d:%02d:%02d:%02d", smpte.hours, smpte.minutes, smpte.seconds, smpte.frames);
session->smpte_time (region->length(), smpte); session->smpte_time (region->length(), smpte);
sprintf (length_str, "%02d:%02d:%02d:%02d", smpte.hours, smpte.minutes, smpte.seconds, smpte.frames); 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; break;
case AudioClock::BBT: case AudioClock::BBT:
@ -539,6 +473,15 @@ Editor::update_region_row (boost::shared_ptr<Region> region)
sprintf (end_str, "%03d|%02d|%04d" , bbt.bars, bbt.beats, bbt.ticks); sprintf (end_str, "%03d|%02d|%04d" , bbt.bars, bbt.beats, bbt.ticks);
session->tempo_map().bbt_time (region->length(), bbt); session->tempo_map().bbt_time (region->length(), bbt);
sprintf (length_str, "%03d|%02d|%04d" , bbt.bars, bbt.beats, bbt.ticks); 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; break;
case AudioClock::MinSec: case AudioClock::MinSec:
@ -570,45 +513,149 @@ Editor::update_region_row (boost::shared_ptr<Region> region)
left -= (nframes_t) floor (mins * session->frame_rate() * 60.0f); left -= (nframes_t) floor (mins * session->frame_rate() * 60.0f);
secs = left / (float) session->frame_rate(); secs = left / (float) session->frame_rate();
sprintf (length_str, "%02d:%02d:%06.3f", hrs, mins, secs); 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);
}
break; break;
case AudioClock::Frames: case AudioClock::Frames:
snprintf (start_str, sizeof (start_str), "%u", region->position()); snprintf (start_str, sizeof (start_str), "%u", region->position());
snprintf (end_str, sizeof (end_str), "%u", (region->position() + region->length() - 1)); snprintf (end_str, sizeof (end_str), "%u", (region->position() + region->length() - 1));
snprintf (length_str, sizeof (length_str), "%u", region->length()); snprintf (length_str, sizeof (length_str), "%u", region->length());
snprintf (sync_str, sizeof (sync_str), "%u", region->sync_position() + region->position());
if (audioRegion && !fades_in_seconds) {
snprintf (fadein_str, sizeof (fadein_str), "%u", uint (audioRegion->fade_in()->back()->when));
snprintf (fadeout_str, sizeof (fadeout_str), "%u", uint (audioRegion->fade_out()->back()->when));
}
break; break;
default: default:
break; break;
} }
cerr << "Updating " << (*found_region)[region_list_columns.name] << "\n"; if (audioRegion && fades_in_seconds) {
if (used > 1) { nframes_t left;
(*found_region)[region_list_columns.start] = "Multiple"; int mins;
(*found_region)[region_list_columns.end] = "Multiple"; int millisecs;
} else {
(*found_region)[region_list_columns.start] = start_str; left = audioRegion->fade_in()->back()->when;
(*found_region)[region_list_columns.end] = end_str; mins = (int) floor (left / (session->frame_rate() * 60.0f));
left -= (nframes_t) floor (mins * session->frame_rate() * 60.0f);
millisecs = (int) floor ((left * 1000.0f) / session->frame_rate());
if (audioRegion->fade_in()->back()->when >= session->frame_rate()) {
sprintf (fadein_str, "%01dM %01dmS", mins, millisecs);
} else {
sprintf (fadein_str, "%01dmS", millisecs);
}
left = audioRegion->fade_out()->back()->when;
mins = (int) floor (left / (session->frame_rate() * 60.0f));
left -= (nframes_t) floor (mins * session->frame_rate() * 60.0f);
millisecs = (int) floor ((left * 1000.0f) / session->frame_rate());
if (audioRegion->fade_out()->back()->when >= session->frame_rate()) {
sprintf (fadeout_str, "%01dM %01dmS", mins, millisecs);
} else {
sprintf (fadeout_str, "%01dmS", millisecs);
}
} }
(*found_region)[region_list_columns.length] = length_str; if (used > 1) {
(*found_region)[region_list_columns.used] = used_str; row[region_list_columns.start] = _("Multiple");
row[region_list_columns.end] = _("Multiple");
row[region_list_columns.sync] = _("Multiple");
row[region_list_columns.fadein] = _("Multiple");
row[region_list_columns.fadeout] = _("Multiple");
row[region_list_columns.locked] = _(" ");
row[region_list_columns.glued] = _(" ");
row[region_list_columns.muted] = _(" ");
row[region_list_columns.opaque] = _(" ");
} else {
row[region_list_columns.start] = start_str;
row[region_list_columns.end] = end_str;
if (region->sync_position() == region->position()) {
row[region_list_columns.sync] = _("Start");
} else if (region->sync_position() == (region->position() + region->length() - 1)) {
row[region_list_columns.sync] = _("End");
} else {
row[region_list_columns.sync] = sync_str;
}
if (audioRegion) {
if (audioRegion->fade_in_active()) {
row[region_list_columns.fadein] = string_compose("%1%2%3", " ", fadein_str, " ");
} else {
row[region_list_columns.fadein] = string_compose("%1%2%3", "(", fadein_str, ")");
}
} else {
row[region_list_columns.fadein] = "";
}
if (audioRegion) {
if (audioRegion->fade_out_active()) {
row[region_list_columns.fadeout] = string_compose("%1%2%3", " ", fadeout_str, " ");
} else {
row[region_list_columns.fadeout] = string_compose("%1%2%3", "(", fadeout_str, ")");
}
} else {
row[region_list_columns.fadeout] = "";
}
row[region_list_columns.locked] = region->locked();
if (region->positional_lock_style() == Region::MusicTime) {
row[region_list_columns.glued] = true;
} else {
row[region_list_columns.glued] = false;
}
row[region_list_columns.muted] = region->muted();
row[region_list_columns.opaque] = region->opaque();
}
row[region_list_columns.length] = length_str;
row[region_list_columns.used] = used_str;
if (missing_source) { if (missing_source) {
(*found_region)[region_list_columns.path] = _("(MISSING) ") + region->source()->name(); row[region_list_columns.path] = _("MISSING ") + region->source()->name();
} else { } else {
(*found_region)[region_list_columns.path] = region->source()->name(); row[region_list_columns.path] = region->source()->name();
} }
if (region->n_channels() > 1) { if (region->n_channels() > 1) {
(*found_region)[region_list_columns.name] = string_compose("%1 [%2]", region->name(), region->n_channels()); row[region_list_columns.name] = string_compose("%1 [%2]", region->name(), region->n_channels());
} else { } else {
(*found_region)[region_list_columns.name] = region->name(); row[region_list_columns.name] = region->name();
} }
cerr << "Returning after updating\n\n";
//return;
} }
void void

View file

@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: ardour-gtk 1.0.2\n" "Project-Id-Version: ardour-gtk 1.0.2\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2006-06-12 22:09+0200\n" "POT-Creation-Date: 2006-06-12 22:09+0200\n"
"PO-Revision-Date: 2006-06-26 23:57+GMT+1\n" "PO-Revision-Date: 2008-09-22 20:33+0200\n"
"Last-Translator: Petter Sundlöf <petter.sundlof@findus.dhs.org>\n" "Last-Translator: Petter Sundlöf <petter.sundlof@findus.dhs.org>\n"
"Language-Team: Svenska <sv@li.org>\n" "Language-Team: Svenska <sv@li.org>\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@ -7093,8 +7093,6 @@ msgstr "EJ tonhöjdsändrat soloslagverk"
#: gtk2_ardour/editor_timefx.cc:73 #: gtk2_ardour/editor_timefx.cc:73
msgid "Contents:" msgid "Contents:"
msgstr "Innehåll" msgstr "Innehåll"
<<<<<<< .working
#: gtk2_ardour/editor_actions.cc:359 #: gtk2_ardour/editor_actions.cc:359
msgid "Playhead to Mouse" msgid "Playhead to Mouse"
@ -7434,558 +7432,3 @@ msgstr "FFT-analysfönster"
#: gtk2_ardour/analysis_window.cc:135 #: gtk2_ardour/analysis_window.cc:135
msgid "Re-analyze data" msgid "Re-analyze data"
msgstr "Återanalysera data" msgstr "Återanalysera data"
=======
#: gtk2_ardour/editor_actions.cc:359
msgid "Playhead to Mouse"
msgstr "Startmarkören till mus"
#: gtk2_ardour/editor_actions.cc:277
msgid "Playhead To Active Mark"
msgstr "Startmarkören till aktiv markör"
#: gtk2_ardour/editor_actions.cc:231
msgid "Nudge Playhead Forward"
msgstr "Knuffa startmarkören framåt"
#: gtk2_ardour/editor_actions.cc:233
msgid "Nudge Playhead Backward"
msgstr "Knuffa startmarkören bakåt"
#: gtk2_ardour/editor_actions.cc:475
msgid "Move Forward to Transient"
msgstr "Gå framåt till transient"
#: gtk2_ardour/editor_actions.cc:477
msgid "Move Backwards to Transient"
msgstr "Gå bakåt till transient"
#: gtk2_ardour/editor_actions.cc:235
msgid "Forward To Grid"
msgstr "Framåt till rutnät"
#: gtk2_ardour/editor_actions.cc:237
msgid "Backward To Grid"
msgstr "Bakåt till rutnät"
#: gtk2_ardour/editor_actions.cc:66 gtk2_ardour/editor.cc:151
#: gtk2_ardour/editor.cc:3446
msgid "Active Mark"
msgstr "Aktiv markör"
#: gtk2_ardour/editor_actions.cc:137
msgid "to Next Region Boundary"
msgstr "till nästa regionsgränsen"
#: gtk2_ardour/editor_actions.cc:139
msgid "to Previous Region Boundary"
msgstr "till förra regionsgränsen"
#: gtk2_ardour/editor_actions.cc:279
msgid "Active Mark To Playhead"
msgstr "Aktiv markör till startmarkören"
#: gtk2_ardour/editor_actions.cc:361
msgid "Active Marker to Mouse"
msgstr "Aktiv markör till musen"
#: gtk2_ardour/editor_actions.cc:61 gtk2_ardour/editor_actions.cc:613
msgid "Markers"
msgstr "Markörer"
#: gtk2_ardour/ardour_ui_ed.cc:333
msgid "Punch In/Out"
msgstr "Inslag/utslag"
#: gtk2_ardour/editor_actions.cc:177
msgid "Select All Overlapping Edit Range"
msgstr "Välj allt som överlappar redigeringsomfånget"
#: gtk2_ardour/editor_actions.cc:179
msgid "Select All Inside Edit Range"
msgstr "Välj allt inom redigeringsomfånget"
#: gtk2_ardour/editor_actions.cc:182
msgid "Select Edit Range"
msgstr "Välj redigeringsomfång"
#: gtk2_ardour/editor_actions.cc:444
msgid "Separate Using Punch Range"
msgstr "Separera utifrån in-/utslagsomfånget"
#: gtk2_ardour/editor_actions.cc:447
msgid "Separate Using Loop Range"
msgstr "Separera utifrån loopomfånget"
#: gtk2_ardour/editor_actions.cc:469
msgid "Split Regions At Percussion Onsets"
msgstr "Dela regioner vid perkussiva anslag"
#: gtk2_ardour/editor_actions.cc:282
msgid "Trim Start At Edit Point"
msgstr "Beskär början vid redigeringspunkten"
#: gtk2_ardour/editor_actions.cc:285
msgid "Trim End At Edit Point"
msgstr "Beskär slutet vid redigeringspunkten"
#: gtk2_ardour/ardour_ui_ed.cc:95
msgid "Misc. Shortcuts"
msgstr "Diverse kortkommandon"
#: gtk2_ardour/editor_actions.cc:385
msgid "Boost Region Gain"
msgstr "Öka regionens volym"
#: gtk2_ardour/editor_actions.cc:388
msgid "Cut Region Gain"
msgstr "Sänk regionens volym"
#: gtk2_ardour/editor_actions.cc:99
msgid "Break drag"
msgstr "Avbryt dragning"
#: gtk2_ardour/editor_actions.cc:400
msgid "Raise Region"
msgstr "Höj regionen"
#: gtk2_ardour/editor_actions.cc:403
msgid "Lower Region"
msgstr "Sänk regionen"
#: gtk2_ardour/editor_actions.cc:415
msgid "Move To Original Position"
msgstr "Flytta till ursprunglig position"
#: gtk2_ardour/editor_actions.cc:409
msgid "Lock Region"
msgstr "Lås region"
#: gtk2_ardour/editor_actions.cc:397
msgid "Remove Region Sync"
msgstr "Ta bort regionsynk.-punkt"
#: gtk2_ardour/editor_actions.cc:505 gtk2_ardour/editor_ops.cc:5651
msgid "Insert Time"
msgstr "Infoga tid"
#: gtk2_ardour/editor_actions.cc:93
msgid "Waveforms"
msgstr "Vågformer"
#: gtk2_ardour/editor_actions.cc:509
msgid "Toggle Active"
msgstr "Växla aktiv"
#: gtk2_ardour/editor_actions.cc:547
msgid "Zoom Focus Mouse"
msgstr "Zoomfokus: mus"
#: gtk2_ardour/editor_actions.cc:582
msgid "Next Snap Mode"
msgstr "Nästa fästläge"
#: gtk2_ardour/editor_actions.cc:583
msgid "Next Snap Choice"
msgstr "Nästa fästlägealternativ"
#: gtk2_ardour/editor_actions.cc:70
msgid "Primary Clock"
msgstr "Primär klocka"
#: gtk2_ardour/editor_actions.cc:77
msgid "Secondary Clock"
msgstr "Sekundär klocka"
#: gtk2_ardour/ardour_ui_ed.cc:309 gtk2_ardour/ardour_ui_ed.cc:318
#: gtk2_ardour/editor_actions.cc:616
msgid "Bars & Beats"
msgstr "Takter & slag"
#: gtk2_ardour/ardour_ui_ed.cc:311 gtk2_ardour/ardour_ui_ed.cc:320
msgid "Minutes & Seconds"
msgstr "Minuter & sekunder"
#: gtk2_ardour/editor_actions.cc:75
msgid "Rulers"
msgstr "Tidslinjevisning"
#: gtk2_ardour/editor_actions.cc:619
msgid "Min:Sec"
msgstr "Min:sek"
#: gtk2_ardour/editor_actions.cc:615
msgid "Loop/Punch"
msgstr "Loop-/inslagsmarkörer"
#: gtk2_ardour/editor_actions.cc:76
msgid "Scroll"
msgstr "Skrollning"
#: gtk2_ardour/rhythm_ferret.cc:40
msgid "Analysis"
msgstr "Analys"
#: gtk2_ardour/rhythm_ferret.cc:30
msgid "Percussive Onset"
msgstr "Perkussivt anslag"
#: gtk2_ardour/rhythm_ferret.cc:31
msgid "Note Onset"
msgstr "Notanslag"
#: gtk2_ardour/rhythm_ferret.cc:48
msgid "Threshold"
msgstr "Tröskel"
#: gtk2_ardour/rhythm_ferret.cc:51
msgid "Sensitivity"
msgstr "Känslighet"
#: gtk2_ardour/rhythm_ferret.cc:52
msgid "Analyze"
msgstr "Analysera"
#: gtk2_ardour/rhythm_ferret.cc:55
msgid "Trigger gap (msecs)"
msgstr "Utlösningsmellanrum (msek)"
#: gtk2_ardour/rhythm_ferret.cc:43
msgid "Set Tempo Map"
msgstr "Sätt tempokarta"
#: gtk2_ardour/rhythm_ferret.cc:44
msgid "Conform Region"
msgstr "Anpassa region"
#: gtk2_ardour/rhythm_ferret.cc:39
msgid "Selection"
msgstr "Markering"
#: gtk2_ardour/editor_actions.cc:463
msgid "Set Tempo from Region=Bar"
msgstr "Sätt tempo från region=takt"
#: gtk2_ardour/editor_actions.cc:466
msgid "Set Tempo from Edit Range=Bar"
msgstr "Sätt tempo från redigeringsomfång=takt"
#: gtk2_ardour/ardour_ui_ed.cc:548
msgid "JACK does monitoring"
msgstr "JACK sköter medhörning"
#: gtk2_ardour/ardour_ui_ed.cc:552
msgid "Ardour does monitoring"
msgstr "Ardour sköter medhörning"
#: gtk2_ardour/ardour_ui_ed.cc:553
msgid "Audio Hardware does monitoring"
msgstr "Ljudhårdvaran sköter medhörning"
#: gtk2_ardour/ardour_ui_ed.cc:438
msgid "Tape Machine mode"
msgstr "Bandmaskinläge"
#: gtk2_ardour/editor_actions.cc:64
msgid "Misc Options"
msgstr "Diverse inställningar"
#: gtk2_ardour/ardour_ui_ed.cc:446
msgid "Create marker at xrun location"
msgstr "Skapa markör vid xrun-förekomst"
#: gtk2_ardour/ardour_ui_ed.cc:455
msgid "Rubberbanding Snaps to Grid"
msgstr "Gummibandning fäster mot rutnätet"
#: gtk2_ardour/ardour_ui_ed.cc:456
msgid "Auto-analyse new audio"
msgstr "Autoanalysera nya ljud"
#: gtk2_ardour/editor_actions.cc:689
msgid "Import to Region List"
msgstr "Importera till regionslistan"
#: gtk2_ardour/mixer_strip.cc:984
msgid "Protect against denormals"
msgstr "Skydda mot denormals"
#: gtk2_ardour/option_editor.cc:1242
msgid "Keyboard layout"
msgstr "Tangentbordslayout"
#: gtk2_ardour/option_editor.cc:275
msgid "Font Scaling"
msgstr "Typsnittsskalning"
#: gtk2_ardour/option_editor.cc:97
msgid "Add new MIDI port"
msgstr "Lägg till ny MIDI-port"
#: gtk2_ardour/editor.cc:1779 gtk2_ardour/editor.cc:1948
msgid "Spectral Analysis"
msgstr "Spektralanalys"
#: gtk2_ardour/editor.cc:1793
msgid "Glue to Bars&Beats"
msgstr "Klistra mot takt&slag"
#: gtk2_ardour/analysis_window.cc:46
msgid "Signal source"
msgstr "Signalkälla"
#: gtk2_ardour/analysis_window.cc:47
msgid "Selected ranges"
msgstr "Valda omfång"
#: gtk2_ardour/analysis_window.cc:48
msgid "Selected regions"
msgstr "Valda regioner"
#: gtk2_ardour/analysis_window.cc:50
msgid "Display model"
msgstr "Visningsmodell"
#: gtk2_ardour/analysis_window.cc:51
msgid "Composite graphs for each track"
msgstr "Sammansatt graf för varje spår"
#: gtk2_ardour/analysis_window.cc:52
msgid "Composite graph of all tracks"
msgstr "Sammansatt graf för alla spår"
#: gtk2_ardour/analysis_window.cc:54
msgid "Show frequency power range"
msgstr "Visa frekvenskraftsomfång"
#: gtk2_ardour/analysis_window.cc:55
msgid "Normalize values"
msgstr "Normalisera värden"
#: gtk2_ardour/analysis_window.cc:59 gtk2_ardour/analysis_window.cc:60
msgid "FFT analysis window"
msgstr "FFT-analysfönster"
#: gtk2_ardour/analysis_window.cc:135
msgid "Re-analyze data"
msgstr "Återanalysera data"
#: gtk2_ardour/ardour_ui_ed.cc:195
msgid "Window"
msgstr "Fönster"
#: gtk2_ardour/ardour_ui_dependents.cc:74
msgid "Setup Editor"
msgstr "Förbereder redigeraren..."
#: gtk2_ardour/ardour_ui_dependents.cc:76
msgid "Setup Mixer"
msgstr "Förbereder mixern..."
#: gtk2_ardour/ardour_ui_dependents.cc:81
msgid "Reload Session History"
msgstr "Laddar sessionshistoriken..."
#: gtk2_ardour/editor.cc:4571
msgid "Please wait while Ardour loads visual data"
msgstr "Vänta medan Ardour laddar visuell data..."
#: gtk2_ardour/editor_actions.cc:368
msgid "Toggle Opaque"
msgstr "Växla genomskinligt"
#: gtk2_ardour/editor_actions.cc:570
msgid "Fit Selected Tracks"
msgstr "Rym valda spår"
#: gtk2_ardour/editor_actions.cc:299
msgid "Zoom to Region (W&H)"
msgstr "Zooma till region (bredd & höjd)"
#: gtk2_ardour/editor_actions.cc:76
msgid "Views"
msgstr "Visningslägen"
#: gtk2_ardour/editor_actions.cc:196
msgid "Save View 1"
msgstr "Spara läge 1"
#: gtk2_ardour/editor_actions.cc:198
msgid "Goto View 1"
msgstr "Använd läge 1"
#: gtk2_ardour/editor_actions.cc:200
msgid "Save View 2"
msgstr "Spara läge 2"
#: gtk2_ardour/editor_actions.cc:202
msgid "Goto View 2"
msgstr "Använd läge 2 "
#: gtk2_ardour/editor_actions.cc:204
msgid "Save View 3"
msgstr "Spara läge 3"
#: gtk2_ardour/editor_actions.cc:206
msgid "Goto View 3"
msgstr "Använd läge 3"
#: gtk2_ardour/editor_actions.cc:208
msgid "Save View 4"
msgstr "Spara läge 4"
#: gtk2_ardour/editor_actions.cc:210
msgid "Goto View 4"
msgstr "Använd läge 4"
#: gtk2_ardour/editor_actions.cc:212
msgid "Save View 5"
msgstr "Spara läge 5"
#: gtk2_ardour/editor_actions.cc:214
msgid "Goto View 5"
msgstr "Använd läge 5"
#: gtk2_ardour/editor_actions.cc:216
msgid "Save View 6"
msgstr "Spara läge 6"
#: gtk2_ardour/editor_actions.cc:218
msgid "Goto View 6"
msgstr "Använd läge 6"
#: gtk2_ardour/editor_actions.cc:220
msgid "Save View 7"
msgstr "Spara läge 7"
#: gtk2_ardour/editor_actions.cc:222
msgid "Goto View 7"
msgstr "Använd läge 7"
#: gtk2_ardour/editor_actions.cc:224
msgid "Save View 8"
msgstr "Spara läge 8"
#: gtk2_ardour/editor_actions.cc:226
msgid "Goto View 8"
msgstr "Använd läge 8"
#: gtk2_ardour/editor_actions.cc:228
msgid "Save View 9"
msgstr "Spara läge 9"
#: gtk2_ardour/editor_actions.cc:230
msgid "Goto View 9"
msgstr "Använd läge 9"
#: gtk2_ardour/editor_actions.cc:232
msgid "Save View 10"
msgstr "Spara läge 10"
#: gtk2_ardour/editor_actions.cc:234
msgid "Goto View 10"
msgstr "Använd läge 10"
#: gtk2_ardour/editor_actions.cc:236
msgid "Save View 11"
msgstr "Spara läge 11"
#: gtk2_ardour/editor_actions.cc:238
msgid "Goto View 11"
msgstr "Använd läge 11"
#: gtk2_ardour/editor_actions.cc:240
msgid "Save View 12"
msgstr "Spara läge 12"
#: gtk2_ardour/editor_actions.cc:242
msgid "Goto View 12"
msgstr "Använd läge 12"
#: gtk2_ardour/ardour_ui_ed.cc:462
msgid "Name New Markers"
msgstr "Namnge nya markörer"
#: gtk2_ardour/editor_ops.cc:1900
msgid "Name New Location Marker"
msgstr "Namnge ny platsmarkör"
#: gtk2_ardour/sfdb_ui.cc:513
msgid "Search Freesound"
msgstr "Sök i Freesound"
#: gtk2_ardour/sfdb_ui.cc:480
msgid "User:"
msgstr "Användarnamn:"
#: gtk2_ardour/sfdb_ui.cc:484
msgid "Password:"
msgstr "Lösenord:"
#: gtk2_ardour/sfdb_ui.cc:400 gtk2_ardour/sfdb_ui.cc:789
msgid "Start Downloading"
msgstr "Ladda ner"
#: gtk2_ardour/redirect_box.cc:1190
msgid "New Plugin"
msgstr "Nytt insticksprogram"
#: gtk2_ardour/plugin_selector.cc:100
msgid "Plugins to be connected"
msgstr "Insticksprogram att ansluta"
#: gtk2_ardour/plugin_selector.cc:156
msgid "Insert Plugin(s)"
msgstr "Infoga"
#: gtk2_ardour/plugin_selector.cc:501
msgid "Favorites"
msgstr "Favoriter"
#: gtk2_ardour/plugin_selector.cc:502
msgid "Plugin Manager"
msgstr "Insticksprogram"
#: gtk2_ardour/plugin_selector.cc:77
msgid "Fav"
msgstr ""
#: gtk2_ardour/plugin_selector.cc:78
msgid "Available Plugins"
msgstr "Tillgängliga insticksprogram"
#: gtk2_ardour/plugin_selector.cc:80
msgid "Category"
msgstr "Kategori"
#: gtk2_ardour/plugin_selector.cc:81
msgid "Creator"
msgstr "Upphovsperson"
#: gtk2_ardour/plugin_selector.cc:51 gtk2_ardour/plugin_selector.cc:209
msgid "Name contains"
msgstr "Namn innehåller"
#: gtk2_ardour/plugin_selector.cc:52 gtk2_ardour/plugin_selector.cc:211
msgid "Type contains"
msgstr "Typ innehåller"
#: gtk2_ardour/plugin_selector.cc:53 gtk2_ardour/plugin_selector.cc:213
msgid "Author contains"
msgstr "Upphovsperson innehåller"
#: gtk2_ardour/plugin_selector.cc:54 gtk2_ardour/plugin_selector.cc:215
msgid "Library contains"
msgstr "Bibliotek innehåller"
#: gtk2_ardour/plugin_selector.cc:55 gtk2_ardour/plugin_selector.cc:203
#: gtk2_ardour/plugin_selector.cc:451
msgid "Favorites only"
msgstr "Endast favoriter"
>>>>>>> .merge-right.r3622