-void
-MidiPlaylist::drop_all_states ()
-{
- set<Region*> all_regions;
-
- /* find every region we've ever used, and add it to the set of
- all regions. same for xfades;
- */
-
- for (StateMap::iterator i = states.begin(); i != states.end(); ++i) {
-
- MidiPlaylist::State* apstate = dynamic_cast<MidiPlaylist::State*> (*i);
-
- for (RegionList::iterator r = apstate->regions.begin(); r != apstate->regions.end(); ++r) {
- all_regions.insert (*r);
- }
- }
-
- /* now remove from the "all" lists every region that is in the current list. */
-
- for (list<Region*>::iterator i = regions.begin(); i != regions.end(); ++i) {
- set
- <Region*>::iterator x = all_regions.find (*i);
- if (x != all_regions.end()) {
- all_regions.erase (x);
- }
- }
-
- /* delete every region that is left - these are all things that are part of our "history" */
-
- for (set
- <Region *>::iterator ar = all_regions.begin(); ar != all_regions.end(); ++ar) {
- (*ar)->unlock_sources ();
- delete *ar;
- }
-
- /* Now do the generic thing ... */
-
- StateManager::drop_all_states ();
-}
-
-StateManager::State*
-MidiPlaylist::state_factory (std::string why) const
-{
- State* state = new State (why);
-
- state->regions = regions;
- state->region_states.clear ();
- for (RegionList::const_iterator i = regions.begin(); i != regions.end(); ++i) {
- state->region_states.push_back ((*i)->get_memento());
- }
-
- return state;
-}
-
-Change
-MidiPlaylist::restore_state (StateManager::State& state)
-{
- {
- RegionLock rlock (this);
- State* apstate = dynamic_cast<State*> (&state);
-
- in_set_state = true;
-
- regions = apstate->regions;
-
- for (list<UndoAction>::iterator s = apstate->
- region_states.begin();
- s != apstate->region_states.end();
- ++s) {
- (*s) ();
- }
-
- in_set_state = false;
- }
-
- notify_length_changed ();
- return Change (~0);
-}
-
-UndoAction
-MidiPlaylist::get_memento () const
-{
- return sigc::bind (mem_fun (*(const_cast<MidiPlaylist*> (this)), &StateManager::use_state), _current_state_id);
-}
-
-
-XMLNode&
-MidiPlaylist::state (bool full_state)
-{
- XMLNode& node = Playlist::state (full_state);
-
- return node;
-}
-