diff options
author | nick_m <mainsbridge@gmail.com> | 2016-06-27 04:29:41 +1000 |
---|---|---|
committer | nick_m <mainsbridge@gmail.com> | 2016-07-10 02:18:37 +1000 |
commit | f65c592567ace7efe1143e6ddb8a28a57a61ee14 (patch) | |
tree | 590c52e3fa0995f5f83414990b07aa178165c92e | |
parent | 5afe2993bda6c1208814e985ae6a109a386ecb0c (diff) |
Editor region list only updates columns that have changed,
-rw-r--r-- | gtk2_ardour/editor_regions.cc | 71 | ||||
-rw-r--r-- | gtk2_ardour/editor_regions.h | 2 |
2 files changed, 50 insertions, 23 deletions
diff --git a/gtk2_ardour/editor_regions.cc b/gtk2_ardour/editor_regions.cc index 111444ec8b..5c65df73ba 100644 --- a/gtk2_ardour/editor_regions.cc +++ b/gtk2_ardour/editor_regions.cc @@ -483,8 +483,8 @@ EditorRegions::add_region (boost::shared_ptr<Region> region) row[_columns.region] = region; region_row_map.insert(pair<boost::shared_ptr<ARDOUR::Region>, Gtk::TreeModel::RowReference>(region, TreeRowReference(_model, TreePath (row))) ); - - populate_row(region, (*row)); + PropertyChange pc; + populate_row(region, (*row), pc); } void @@ -532,14 +532,13 @@ EditorRegions::region_changed (boost::shared_ptr<Region> r, const PropertyChange our_interests.add (ARDOUR::Properties::fade_out_active); if (what_changed.contains (our_interests)) { - if (last_row != 0) { TreeModel::iterator j = _model->get_iter (last_row.get_path()); boost::shared_ptr<Region> c = (*j)[_columns.region]; if (c == r) { - populate_row (r, (*j)); + populate_row (r, (*j), what_changed); if (what_changed.contains (ARDOUR::Properties::hidden)) { redisplay (); @@ -559,7 +558,7 @@ EditorRegions::region_changed (boost::shared_ptr<Region> r, const PropertyChange boost::shared_ptr<Region> c = (*j)[_columns.region]; if (c == r) { - populate_row (r, (*j)); + populate_row (r, (*j), what_changed); if (what_changed.contains (ARDOUR::Properties::hidden)) { redisplay (); @@ -698,9 +697,9 @@ EditorRegions::update_row (boost::shared_ptr<Region> region) it = region_row_map.find (region); if (it != region_row_map.end()){ - + PropertyChange c; TreeModel::iterator j = _model->get_iter ((*it).second.get_path()); - populate_row(region, (*j)); + populate_row(region, (*j), c); } } @@ -720,7 +719,8 @@ EditorRegions::update_all_rows () boost::shared_ptr<Region> region = (*j)[_columns.region]; if (!region->automatic()) { - populate_row(region, (*j)); + PropertyChange c; + populate_row(region, (*j), c); } } } @@ -787,26 +787,53 @@ EditorRegions::format_position (framepos_t pos, char* buf, size_t bufsize, bool } void -EditorRegions::populate_row (boost::shared_ptr<Region> region, TreeModel::Row const &row) +EditorRegions::populate_row (boost::shared_ptr<Region> region, TreeModel::Row const &row, PBD::PropertyChange const &what_changed) { boost::shared_ptr<AudioRegion> audioregion = boost::dynamic_pointer_cast<AudioRegion>(region); //uint32_t used = _session->playlists->region_use_count (region); /* Presently a region is only used once so let's save on the sequential scan to determine use count */ uint32_t used = 1; - populate_row_position (region, row, used); - populate_row_end (region, row, used); - populate_row_sync (region, row, used); - populate_row_fade_in (region, row, used, audioregion); - populate_row_fade_out (region, row, used, audioregion); - populate_row_locked (region, row, used); - populate_row_glued (region, row, used); - populate_row_muted (region, row, used); - populate_row_opaque (region, row, used); - populate_row_length (region, row); - populate_row_source (region, row); - populate_row_name (region, row); - populate_row_used (region, row, used); + PropertyChange c; + const bool all = what_changed == c; + + if (all || what_changed.contains (Properties::position)) { + populate_row_position (region, row, used); + } + if (all || what_changed.contains (Properties::start)) { + populate_row_sync (region, row, used); + } + if (all || what_changed.contains (Properties::fade_in)) { + populate_row_fade_in (region, row, used, audioregion); + } + if (all || what_changed.contains (Properties::fade_out)) { + populate_row_fade_out (region, row, used, audioregion); + } + if (all || what_changed.contains (Properties::locked)) { + populate_row_locked (region, row, used); + } + if (all || what_changed.contains (Properties::position_lock_style)) { + populate_row_glued (region, row, used); + } + if (all || what_changed.contains (Properties::muted)) { + populate_row_muted (region, row, used); + } + if (all || what_changed.contains (Properties::opaque)) { + populate_row_opaque (region, row, used); + } + if (all || what_changed.contains (Properties::length)) { + populate_row_end (region, row, used); + populate_row_length (region, row); + } + if (all) { + populate_row_source (region, row); + } + if (all || what_changed.contains (Properties::name)) { + populate_row_name (region, row); + } + if (all) { + populate_row_used (region, row, used); + } } #if 0 diff --git a/gtk2_ardour/editor_regions.h b/gtk2_ardour/editor_regions.h index 76c742aa11..ae830b0e24 100644 --- a/gtk2_ardour/editor_regions.h +++ b/gtk2_ardour/editor_regions.h @@ -153,7 +153,7 @@ private: void add_region (boost::shared_ptr<ARDOUR::Region>); - void populate_row (boost::shared_ptr<ARDOUR::Region>, Gtk::TreeModel::Row const &); + void populate_row (boost::shared_ptr<ARDOUR::Region>, Gtk::TreeModel::Row const &, PBD::PropertyChange const &); void populate_row_used (boost::shared_ptr<ARDOUR::Region> region, Gtk::TreeModel::Row const& row, uint32_t used); void populate_row_position (boost::shared_ptr<ARDOUR::Region> region, Gtk::TreeModel::Row const& row, uint32_t used); void populate_row_end (boost::shared_ptr<ARDOUR::Region> region, Gtk::TreeModel::Row const& row, uint32_t used); |