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);
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()) {
}
}
+
+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()
{
{
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 ();