mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-14 18:46:34 +01:00
Move some RegionListProperty methods up to SequenceProperty.
git-svn-id: svn://localhost/ardour2/branches/3.0@7668 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
71a4796dc3
commit
74801c3212
3 changed files with 50 additions and 46 deletions
|
|
@ -65,22 +65,13 @@ class RegionListProperty : public PBD::SequenceProperty<std::list<boost::shared_
|
||||||
RegionListProperty (Playlist&);
|
RegionListProperty (Playlist&);
|
||||||
|
|
||||||
boost::shared_ptr<Region> lookup_id (const PBD::ID& id);
|
boost::shared_ptr<Region> lookup_id (const PBD::ID& id);
|
||||||
void diff (PBD::PropertyList& undo, PBD::PropertyList& redo, Command*) const;
|
|
||||||
bool involves (boost::shared_ptr<Region>);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
friend class Playlist;
|
PBD::SequenceProperty<std::list<boost::shared_ptr<Region> > >* create () const;
|
||||||
std::list<boost::shared_ptr<Region> > rlist() { return _val; }
|
|
||||||
|
|
||||||
|
friend class Playlist;
|
||||||
/* we live and die with our playlist, no lifetime management needed */
|
/* we live and die with our playlist, no lifetime management needed */
|
||||||
Playlist& _playlist;
|
Playlist& _playlist;
|
||||||
|
|
||||||
/* create a copy of this RegionListProperty that only
|
|
||||||
has what is needed for use in a history list command. This
|
|
||||||
means that it won't contain the actual region list but
|
|
||||||
will have the added/removed list.
|
|
||||||
*/
|
|
||||||
RegionListProperty* copy_for_history () const;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class Playlist : public SessionObject
|
class Playlist : public SessionObject
|
||||||
|
|
|
||||||
|
|
@ -124,41 +124,9 @@ RegionListProperty::lookup_id (const ID& id)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
RegionListProperty*
|
SequenceProperty<std::list<boost::shared_ptr<Region> > >* RegionListProperty::create () const
|
||||||
RegionListProperty::copy_for_history () const
|
|
||||||
{
|
{
|
||||||
RegionListProperty* copy = new RegionListProperty (_playlist);
|
return new RegionListProperty (_playlist);
|
||||||
/* this is all we need */
|
|
||||||
copy->_change = _change;
|
|
||||||
return copy;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
RegionListProperty::diff (PropertyList& undo, PropertyList& redo, Command* cmd) const
|
|
||||||
{
|
|
||||||
if (changed()) {
|
|
||||||
/* list of the removed/added regions since clear_history() was last called */
|
|
||||||
RegionListProperty* a = copy_for_history ();
|
|
||||||
|
|
||||||
/* the same list, but with removed/added lists swapped (for undo purposes) */
|
|
||||||
RegionListProperty* b = copy_for_history ();
|
|
||||||
b->invert_changes ();
|
|
||||||
|
|
||||||
if (cmd) {
|
|
||||||
/* whenever one of the regions emits DropReferences, make sure
|
|
||||||
that the Destructible we've been told to notify hears about
|
|
||||||
it. the Destructible is likely to be the Command being built
|
|
||||||
with this diff().
|
|
||||||
*/
|
|
||||||
|
|
||||||
for (set<boost::shared_ptr<Region> >::iterator i = a->change().added.begin(); i != a->change().added.end(); ++i) {
|
|
||||||
(*i)->DropReferences.connect_same_thread (*cmd, boost::bind (&Destructible::drop_references, cmd));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
undo.add (b);
|
|
||||||
redo.add (a);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Playlist::Playlist (Session& sess, string nom, DataType type, bool hide)
|
Playlist::Playlist (Session& sess, string nom, DataType type, bool hide)
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,7 @@
|
||||||
#include "pbd/convert.h"
|
#include "pbd/convert.h"
|
||||||
#include "pbd/id.h"
|
#include "pbd/id.h"
|
||||||
#include "pbd/property_basics.h"
|
#include "pbd/property_basics.h"
|
||||||
|
#include "pbd/property_list.h"
|
||||||
|
|
||||||
namespace PBD {
|
namespace PBD {
|
||||||
|
|
||||||
|
|
@ -193,6 +194,34 @@ class SequenceProperty : public PropertyBase
|
||||||
_update_callback (cr);
|
_update_callback (cr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void diff (PBD::PropertyList& undo, PBD::PropertyList& redo, Command* cmd) const {
|
||||||
|
if (changed ()) {
|
||||||
|
/* list of the removed/added items since clear_history() was last called */
|
||||||
|
SequenceProperty<Container>* a = copy_for_history ();
|
||||||
|
|
||||||
|
/* the same list, but with removed/added lists swapped (for undo purposes) */
|
||||||
|
SequenceProperty<Container>* b = copy_for_history ();
|
||||||
|
b->invert_changes ();
|
||||||
|
|
||||||
|
if (cmd) {
|
||||||
|
/* whenever one of the items emits DropReferences, make sure
|
||||||
|
that the Destructible we've been told to notify hears about
|
||||||
|
it. the Destructible is likely to be the Command being built
|
||||||
|
with this diff().
|
||||||
|
*/
|
||||||
|
|
||||||
|
for (typename ChangeContainer::iterator i = a->change().added.begin(); i != a->change().added.end(); ++i) {
|
||||||
|
(*i)->DropReferences.connect_same_thread (*cmd, boost::bind (&Destructible::drop_references, cmd));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
undo.add (b);
|
||||||
|
redo.add (a);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Container rlist() { return _val; }
|
||||||
|
|
||||||
/* Wrap salient methods of Sequence
|
/* Wrap salient methods of Sequence
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
@ -332,6 +361,22 @@ class SequenceProperty : public PropertyBase
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual SequenceProperty<Container>* create () const = 0;
|
||||||
|
|
||||||
|
/* create a copy of this ListSequenceProperty that only
|
||||||
|
has what is needed for use in a history list command. This
|
||||||
|
means that it won't contain the actual item list but
|
||||||
|
will have the added/removed list.
|
||||||
|
*/
|
||||||
|
|
||||||
|
SequenceProperty<Container>* copy_for_history () const {
|
||||||
|
SequenceProperty<Container>* copy = create ();
|
||||||
|
/* this is all we need */
|
||||||
|
copy->_change = _change;
|
||||||
|
return copy;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue