mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-06 23:05:04 +01:00
Rework region selection XML
Ensures that selection is restored in the same object type order it was created in, which may some day make a difference.
This commit is contained in:
parent
1d8548306b
commit
515cdb6b32
2 changed files with 32 additions and 23 deletions
|
|
@ -3342,7 +3342,7 @@ Editor::separate_under_selected_regions ()
|
||||||
PlaylistState before;
|
PlaylistState before;
|
||||||
before.playlist = playlist;
|
before.playlist = playlist;
|
||||||
before.before = &playlist->get_state();
|
before.before = &playlist->get_state();
|
||||||
|
playlist->clear_changes ();
|
||||||
playlist->freeze ();
|
playlist->freeze ();
|
||||||
playlists.push_back(before);
|
playlists.push_back(before);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1150,10 +1150,13 @@ Selection::get_state () const
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!regions.empty()) {
|
||||||
|
XMLNode* parent = node->add_child (X_("Regions"));
|
||||||
for (RegionSelection::const_iterator i = regions.begin(); i != regions.end(); ++i) {
|
for (RegionSelection::const_iterator i = regions.begin(); i != regions.end(); ++i) {
|
||||||
XMLNode* r = node->add_child (X_("Region"));
|
XMLNode* r = parent->add_child (X_("Region"));
|
||||||
r->set_property (X_("id"), (*i)->region ()->id ());
|
r->set_property (X_("id"), (*i)->region ()->id ());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* midi region views have thir own internal selection. */
|
/* midi region views have thir own internal selection. */
|
||||||
list<pair<PBD::ID, std::set<boost::shared_ptr<Evoral::Note<Evoral::Beats> > > > > rid_notes;
|
list<pair<PBD::ID, std::set<boost::shared_ptr<Evoral::Note<Evoral::Beats> > > > > rid_notes;
|
||||||
|
|
@ -1225,8 +1228,6 @@ Selection::set_state (XMLNode const & node, int)
|
||||||
clear_time ();
|
clear_time ();
|
||||||
clear_markers ();
|
clear_markers ();
|
||||||
|
|
||||||
RegionSelection selected_regions;
|
|
||||||
|
|
||||||
/* NOTE: stripable/time-axis-view selection is saved/restored by
|
/* NOTE: stripable/time-axis-view selection is saved/restored by
|
||||||
* ARDOUR::CoreSelection, not this Selection object
|
* ARDOUR::CoreSelection, not this Selection object
|
||||||
*/
|
*/
|
||||||
|
|
@ -1235,17 +1236,23 @@ Selection::set_state (XMLNode const & node, int)
|
||||||
XMLNodeList children = node.children ();
|
XMLNodeList children = node.children ();
|
||||||
|
|
||||||
for (XMLNodeList::const_iterator i = children.begin(); i != children.end(); ++i) {
|
for (XMLNodeList::const_iterator i = children.begin(); i != children.end(); ++i) {
|
||||||
if ((*i)->name() == X_("Region")) {
|
if ((*i)->name() == X_("Regions")) {
|
||||||
|
RegionSelection selected_regions;
|
||||||
|
XMLNodeList children = (*i)->children ();
|
||||||
|
for (XMLNodeList::const_iterator ci = children.begin(); ci != children.end(); ++ci) {
|
||||||
|
PBD::ID id;
|
||||||
|
|
||||||
if (!(*i)->get_property (X_("id"), id)) {
|
if (!(*ci)->get_property (X_("id"), id)) {
|
||||||
assert(false);
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
RegionSelection rs;
|
RegionSelection rs;
|
||||||
editor->get_regionviews_by_id (id, rs);
|
editor->get_regionviews_by_id (id, rs);
|
||||||
|
|
||||||
if (!rs.empty ()) {
|
if (!rs.empty ()) {
|
||||||
selected_regions.insert (selected_regions.end(), rs.begin(), rs.end());
|
for (RegionSelection::const_iterator i = rs.begin(); i != rs.end(); ++i) {
|
||||||
|
selected_regions.push_back (*i);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
/*
|
/*
|
||||||
regionviews haven't been constructed - stash the region IDs
|
regionviews haven't been constructed - stash the region IDs
|
||||||
|
|
@ -1253,6 +1260,11 @@ Selection::set_state (XMLNode const & node, int)
|
||||||
*/
|
*/
|
||||||
regions.pending.push_back (id);
|
regions.pending.push_back (id);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!selected_regions.empty()) {
|
||||||
|
add (selected_regions);
|
||||||
|
}
|
||||||
|
|
||||||
} else if ((*i)->name() == X_("MIDINotes")) {
|
} else if ((*i)->name() == X_("MIDINotes")) {
|
||||||
|
|
||||||
|
|
@ -1406,9 +1418,6 @@ Selection::set_state (XMLNode const & node, int)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// now add regions to selection at once
|
|
||||||
add (selected_regions);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue