summaryrefslogtreecommitdiff
path: root/libs/ardour/audioregion.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2006-10-19 22:02:30 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2006-10-19 22:02:30 +0000
commit2592a320d42dd4a157ee16101c042d875d3142be (patch)
tree0409a06f1ef030dc9339c5c17bd3ff1854125256 /libs/ardour/audioregion.cc
parent0c31e4c4f3d0bfe37d26a793c934f1b436f8fa0f (diff)
major changes to Region, AudioRegion, Playlist, AudioPlaylist and Crossfade state management, to try to fix undo/redo. Not finished, butthe speedups etc. are in place
git-svn-id: svn://localhost/ardour2/trunk@993 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/audioregion.cc')
-rw-r--r--libs/ardour/audioregion.cc171
1 files changed, 34 insertions, 137 deletions
diff --git a/libs/ardour/audioregion.cc b/libs/ardour/audioregion.cc
index 1a09cad032..a2a86f6a95 100644
--- a/libs/ardour/audioregion.cc
+++ b/libs/ardour/audioregion.cc
@@ -58,14 +58,6 @@ Change AudioRegion::EnvelopeActiveChanged = ARDOUR::new_change();
Change AudioRegion::ScaleAmplitudeChanged = ARDOUR::new_change();
Change AudioRegion::EnvelopeChanged = ARDOUR::new_change();
-AudioRegionState::AudioRegionState (string why)
- : RegionState (why),
- _fade_in (0.0, 2.0, 1.0, false),
- _fade_out (0.0, 2.0, 1.0, false),
- _envelope (0.0, 2.0, 1.0, false)
-{
-}
-
AudioRegion::AudioRegion (boost::shared_ptr<AudioSource> src, nframes_t start, nframes_t length)
: Region (start, length, PBD::basename_nosuffix(src->name()), 0, Region::Flag(Region::DefaultFlags|Region::External)),
_fade_in (0.0, 2.0, 1.0, false),
@@ -88,8 +80,6 @@ AudioRegion::AudioRegion (boost::shared_ptr<AudioSource> src, nframes_t start, n
set_default_fades ();
set_default_envelope ();
- save_state ("initial state");
-
_envelope.StateChanged.connect (mem_fun (*this, &AudioRegion::envelope_changed));
}
@@ -114,7 +104,6 @@ AudioRegion::AudioRegion (boost::shared_ptr<AudioSource> src, nframes_t start, n
set_default_fades ();
set_default_envelope ();
- save_state ("initial state");
_envelope.StateChanged.connect (mem_fun (*this, &AudioRegion::envelope_changed));
}
@@ -142,7 +131,6 @@ AudioRegion::AudioRegion (SourceList& srcs, nframes_t start, nframes_t length, c
set_default_fades ();
set_default_envelope ();
- save_state ("initial state");
_envelope.StateChanged.connect (mem_fun (*this, &AudioRegion::envelope_changed));
}
@@ -208,8 +196,6 @@ AudioRegion::AudioRegion (boost::shared_ptr<const AudioRegion> other, nframes_t
_scale_amplitude = other->_scale_amplitude;
- save_state ("initial state");
-
_envelope.StateChanged.connect (mem_fun (*this, &AudioRegion::envelope_changed));
}
@@ -251,8 +237,6 @@ AudioRegion::AudioRegion (boost::shared_ptr<const AudioRegion> other)
_fade_in_disabled = 0;
_fade_out_disabled = 0;
- save_state ("initial state");
-
_envelope.StateChanged.connect (mem_fun (*this, &AudioRegion::envelope_changed));
}
@@ -277,8 +261,6 @@ AudioRegion::AudioRegion (boost::shared_ptr<AudioSource> src, const XMLNode& nod
throw failed_constructor();
}
- save_state ("initial state");
-
_envelope.StateChanged.connect (mem_fun (*this, &AudioRegion::envelope_changed));
}
@@ -319,8 +301,6 @@ AudioRegion::AudioRegion (SourceList& srcs, const XMLNode& node)
throw failed_constructor();
}
- save_state ("initial state");
-
_envelope.StateChanged.connect (mem_fun (*this, &AudioRegion::envelope_changed));
}
@@ -330,88 +310,6 @@ AudioRegion::~AudioRegion ()
GoingAway (); /* EMIT SIGNAL */
}
-StateManager::State*
-AudioRegion::state_factory (std::string why) const
-{
- AudioRegionState* state = new AudioRegionState (why);
-
- Region::store_state (*state);
-
- state->_fade_in = _fade_in;
- state->_fade_out = _fade_out;
- state->_envelope = _envelope;
- state->_scale_amplitude = _scale_amplitude;
- state->_fade_in_disabled = _fade_in_disabled;
- state->_fade_out_disabled = _fade_out_disabled;
-
- return state;
-}
-
-Change
-AudioRegion::restore_state (StateManager::State& sstate)
-{
- AudioRegionState* state = dynamic_cast<AudioRegionState*> (&sstate);
-
- Change what_changed = Region::restore_and_return_flags (*state);
-
- if (_flags != Flag (state->_flags)) {
-
- uint32_t old_flags = _flags;
-
- _flags = Flag (state->_flags);
-
- if ((old_flags ^ state->_flags) & EnvelopeActive) {
- what_changed = Change (what_changed|EnvelopeActiveChanged);
- }
- }
-
- if (!(_fade_in == state->_fade_in)) {
- _fade_in = state->_fade_in;
- what_changed = Change (what_changed|FadeInChanged);
- }
-
- if (!(_fade_out == state->_fade_out)) {
- _fade_out = state->_fade_out;
- what_changed = Change (what_changed|FadeOutChanged);
- }
-
- if (_scale_amplitude != state->_scale_amplitude) {
- _scale_amplitude = state->_scale_amplitude;
- what_changed = Change (what_changed|ScaleAmplitudeChanged);
- }
-
- if (_fade_in_disabled != state->_fade_in_disabled) {
- if (_fade_in_disabled == 0 && state->_fade_in_disabled) {
- set_fade_in_active (false);
- } else if (_fade_in_disabled && state->_fade_in_disabled == 0) {
- set_fade_in_active (true);
- }
- _fade_in_disabled = state->_fade_in_disabled;
- }
-
- if (_fade_out_disabled != state->_fade_out_disabled) {
- if (_fade_out_disabled == 0 && state->_fade_out_disabled) {
- set_fade_out_active (false);
- } else if (_fade_out_disabled && state->_fade_out_disabled == 0) {
- set_fade_out_active (true);
- }
- _fade_out_disabled = state->_fade_out_disabled;
- }
-
- /* XXX need a way to test stored state versus current for envelopes */
-
- _envelope = state->_envelope;
- what_changed = Change (what_changed);
-
- return what_changed;
-}
-
-UndoAction
-AudioRegion::get_memento() const
-{
- return sigc::bind (mem_fun (*(const_cast<AudioRegion *> (this)), &StateManager::use_state), _current_state_id);
-}
-
bool
AudioRegion::verify_length (nframes_t len)
{
@@ -482,11 +380,7 @@ AudioRegion::set_envelope_active (bool yn)
snprintf (buf, sizeof (buf), "envelope off");
_flags = Flag (_flags & ~EnvelopeActive);
}
- if (!_frozen) {
- save_state (buf);
- }
send_change (EnvelopeActiveChanged);
-
}
}
@@ -706,6 +600,8 @@ AudioRegion::state (bool full)
} else {
_fade_in.store_state (*child);
}
+
+ child->add_property (X_("active"), _fade_in_disabled ? X_("no") : X_("yes"));
child = node.add_child (X_("FadeOut"));
@@ -714,6 +610,8 @@ AudioRegion::state (bool full)
} else {
_fade_out.store_state (*child);
}
+
+ child->add_property (X_("active"), _fade_out_disabled ? X_("no") : X_("yes"));
}
child = node.add_child ("Envelope");
@@ -736,6 +634,7 @@ AudioRegion::state (bool full)
} else {
_envelope.store_state (*child);
}
+
} else {
child->add_property ("default", "yes");
}
@@ -748,14 +647,16 @@ AudioRegion::state (bool full)
}
int
-AudioRegion::set_state (const XMLNode& node)
+AudioRegion::set_live_state (const XMLNode& node, Change& what_changed, bool send)
{
const XMLNodeList& nlist = node.children();
const XMLProperty *prop;
LocaleGuard lg (X_("POSIX"));
- Region::set_state (node);
+ Region::set_live_state (node, what_changed, false);
+ uint32_t old_flags = _flags;
+
if ((prop = node.property ("flags")) != 0) {
_flags = Flag (strtol (prop->value().c_str(), (char **) 0, 16));
@@ -763,6 +664,16 @@ AudioRegion::set_state (const XMLNode& node)
_flags = Flag (_flags & ~Region::RightOfSplit);
}
+ if ((old_flags ^ _flags) & Muted) {
+ what_changed = Change (what_changed|MuteChanged);
+ }
+ if ((old_flags ^ _flags) & Opaque) {
+ what_changed = Change (what_changed|OpacityChanged);
+ }
+ if ((old_flags ^ _flags) & Locked) {
+ what_changed = Change (what_changed|LockChanged);
+ }
+
if ((prop = node.property ("scale-gain")) != 0) {
_scale_amplitude = atof (prop->value().c_str());
} else {
@@ -798,7 +709,6 @@ AudioRegion::set_state (const XMLNode& node)
if ((prop = child->property ("default")) != 0 || (prop = child->property ("steepness")) != 0) {
set_default_fade_in ();
} else {
-
_fade_in.load_state (*child);
}
@@ -814,9 +724,24 @@ AudioRegion::set_state (const XMLNode& node)
}
}
+ if (send) {
+ send_change (what_changed);
+ }
+
return 0;
}
+int
+AudioRegion::set_state (const XMLNode& node)
+{
+ /* Region::set_state() calls the virtual set_live_state(),
+ which will get us back to AudioRegion::set_live_state()
+ to handle the relevant stuff.
+ */
+
+ return Region::set_state (node);
+}
+
void
AudioRegion::set_fade_in_shape (FadeShape shape)
{
@@ -886,10 +811,6 @@ AudioRegion::set_fade_in (FadeShape shape, nframes_t len)
_fade_in.thaw ();
_fade_in_shape = shape;
- if (!_frozen) {
- save_state (_("fade in change"));
- }
-
send_change (FadeInChanged);
}
@@ -948,10 +869,6 @@ AudioRegion::set_fade_out (FadeShape shape, nframes_t len)
_fade_out.thaw ();
_fade_out_shape = shape;
- if (!_frozen) {
- save_state (_("fade in change"));
- }
-
send_change (FadeOutChanged);
}
@@ -962,13 +879,6 @@ AudioRegion::set_fade_in_length (nframes_t len)
if (changed) {
_flags = Flag (_flags & ~DefaultFadeIn);
-
- if (!_frozen) {
- char buf[64];
- snprintf (buf, sizeof (buf), "fade in length changed to %u", len);
- save_state (buf);
- }
-
send_change (FadeInChanged);
}
}
@@ -980,12 +890,6 @@ AudioRegion::set_fade_out_length (nframes_t len)
if (changed) {
_flags = Flag (_flags & ~DefaultFadeOut);
-
- if (!_frozen) {
- char buf[64];
- snprintf (buf, sizeof (buf), "fade out length changed to %u", len);
- save_state (buf);
- }
}
send_change (FadeOutChanged);
@@ -1324,12 +1228,6 @@ AudioRegion::normalize_to (float target_dB)
_scale_amplitude = target/maxamp;
- if (!_frozen) {
- char buf[64];
- snprintf (buf, sizeof (buf), _("normalized to %.2fdB"), target_dB);
- save_state (buf);
- }
-
/* tell the diskstream we're in */
if (_playlist) {
@@ -1344,7 +1242,6 @@ AudioRegion::normalize_to (float target_dB)
void
AudioRegion::envelope_changed (Change ignored)
{
- save_state (_("envelope change"));
send_change (EnvelopeChanged);
}