Update region names in the region list when they change, to fix #1584
git-svn-id: svn://localhost/ardour2/trunk@2587 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
48b685dad1
commit
39bdbf5db9
@ -789,11 +789,13 @@ class Editor : public PublicEditor
|
||||
|
||||
RegionListDisplayModelColumns region_list_columns;
|
||||
Gtkmm2ext::DnDTreeView<boost::shared_ptr<ARDOUR::Region> > region_list_display;
|
||||
std::list<sigc::connection> region_state_changed_connections;
|
||||
|
||||
Glib::RefPtr<Gtk::TreeStore> region_list_model;
|
||||
Glib::RefPtr<Gtk::ToggleAction> toggle_full_region_list_action;
|
||||
Glib::RefPtr<Gtk::ToggleAction> toggle_show_auto_regions_action;
|
||||
|
||||
void region_list_region_changed (ARDOUR::Change, boost::weak_ptr<ARDOUR::Region>);
|
||||
void region_list_selection_changed ();
|
||||
bool region_list_selection_filter (const Glib::RefPtr<Gtk::TreeModel>& model, const Gtk::TreeModel::Path& path, bool yn);
|
||||
|
||||
|
@ -89,6 +89,10 @@ Editor::add_region_to_region_display (boost::shared_ptr<Region> region)
|
||||
Gdk::Color c;
|
||||
bool missing_source;
|
||||
|
||||
region_state_changed_connections.push_back (
|
||||
region->StateChanged.connect (bind (mem_fun (*this, &Editor::region_list_region_changed), boost::weak_ptr<Region> (region)))
|
||||
);
|
||||
|
||||
missing_source = boost::dynamic_pointer_cast<SilentFileSource>(region->source());
|
||||
|
||||
if (!show_automatic_regions_in_region_list && region->automatic()) {
|
||||
@ -217,6 +221,44 @@ Editor::add_region_to_region_display (boost::shared_ptr<Region> region)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
Editor::region_list_region_changed (Change what_changed, boost::weak_ptr<Region> region)
|
||||
{
|
||||
ENSURE_GUI_THREAD (bind (mem_fun (*this, &Editor::region_list_region_changed), what_changed, region));
|
||||
|
||||
boost::shared_ptr<Region> r = region.lock ();
|
||||
|
||||
if (!r) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (what_changed & ARDOUR::NameChanged) {
|
||||
/* find the region in our model and change its name */
|
||||
TreeModel::Children rows = region_list_model->children ();
|
||||
TreeModel::iterator i = rows.begin ();
|
||||
while (i != rows.end ()) {
|
||||
TreeModel::Children children = (*i)->children ();
|
||||
TreeModel::iterator j = children.begin ();
|
||||
while (j != children.end()) {
|
||||
boost::shared_ptr<Region> c = (*j)[region_list_columns.region];
|
||||
if (c == r) {
|
||||
break;
|
||||
}
|
||||
++j;
|
||||
}
|
||||
|
||||
if (j != children.end()) {
|
||||
(*j)[region_list_columns.name] = r->name ();
|
||||
break;
|
||||
}
|
||||
|
||||
++i;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
Editor::region_list_selection_changed()
|
||||
{
|
||||
@ -267,6 +309,13 @@ Editor::redisplay_regions ()
|
||||
{
|
||||
if (session) {
|
||||
|
||||
for (std::list<connection>::iterator i = region_state_changed_connections.begin();
|
||||
i != region_state_changed_connections.end();
|
||||
++i)
|
||||
{
|
||||
i->disconnect ();
|
||||
}
|
||||
|
||||
region_list_display.set_model (Glib::RefPtr<Gtk::TreeStore>(0));
|
||||
region_list_model->clear ();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user