Fix for bug #255, Implement undo/redo when changing the region start position
in the Audio region editor, also added for when changing the end and length clocks. git-svn-id: svn://localhost/ardour2/trunk@1120 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
3b42be5d40
commit
2dafaad193
|
@ -18,7 +18,10 @@
|
||||||
$Id$
|
$Id$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <pbd/memento_command.h>
|
||||||
|
|
||||||
#include <ardour/audioregion.h>
|
#include <ardour/audioregion.h>
|
||||||
|
#include <ardour/playlist.h>
|
||||||
#include <ardour/utils.h>
|
#include <ardour/utils.h>
|
||||||
#include <gtkmm2ext/utils.h>
|
#include <gtkmm2ext/utils.h>
|
||||||
#include <gtkmm2ext/stop_signal.h>
|
#include <gtkmm2ext/stop_signal.h>
|
||||||
|
@ -282,7 +285,7 @@ AudioRegionEditor::breleased (GdkEventButton* ev, Gtk::SpinButton* but, void (Au
|
||||||
void
|
void
|
||||||
AudioRegionEditor::connect_editor_events ()
|
AudioRegionEditor::connect_editor_events ()
|
||||||
{
|
{
|
||||||
name_entry.signal_changed().connect (mem_fun(*this, &AudioRegionEditor::name_entry_changed));
|
name_entry.signal_changed().connect (mem_fun(*this, &AudioRegionEditor::name_entry_changed));
|
||||||
|
|
||||||
start_clock.ValueChanged.connect (mem_fun(*this, &AudioRegionEditor::start_clock_changed));
|
start_clock.ValueChanged.connect (mem_fun(*this, &AudioRegionEditor::start_clock_changed));
|
||||||
end_clock.ValueChanged.connect (mem_fun(*this, &AudioRegionEditor::end_clock_changed));
|
end_clock.ValueChanged.connect (mem_fun(*this, &AudioRegionEditor::end_clock_changed));
|
||||||
|
@ -303,13 +306,35 @@ AudioRegionEditor::connect_editor_events ()
|
||||||
void
|
void
|
||||||
AudioRegionEditor::start_clock_changed ()
|
AudioRegionEditor::start_clock_changed ()
|
||||||
{
|
{
|
||||||
_region->set_position (start_clock.current_time(), this);
|
_session.begin_reversible_command (_("change region start position"));
|
||||||
|
|
||||||
|
Playlist* const pl = _region->playlist();
|
||||||
|
|
||||||
|
if (pl) {
|
||||||
|
XMLNode &before = pl->get_state();
|
||||||
|
_region->set_position (start_clock.current_time(), this);
|
||||||
|
XMLNode &after = pl->get_state();
|
||||||
|
_session.add_command(new MementoCommand<Playlist>(*pl, &before, &after));
|
||||||
|
}
|
||||||
|
|
||||||
|
_session.commit_reversible_command ();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
AudioRegionEditor::end_clock_changed ()
|
AudioRegionEditor::end_clock_changed ()
|
||||||
{
|
{
|
||||||
_region->trim_end (end_clock.current_time(), this);
|
_session.begin_reversible_command (_("change region end position"));
|
||||||
|
|
||||||
|
Playlist* const pl = _region->playlist();
|
||||||
|
|
||||||
|
if (pl) {
|
||||||
|
XMLNode &before = pl->get_state();
|
||||||
|
_region->trim_end (end_clock.current_time(), this);
|
||||||
|
XMLNode &after = pl->get_state();
|
||||||
|
_session.add_command(new MementoCommand<Playlist>(*pl, &before, &after));
|
||||||
|
}
|
||||||
|
|
||||||
|
_session.commit_reversible_command ();
|
||||||
|
|
||||||
end_clock.set (_region->position() + _region->length(), true);
|
end_clock.set (_region->position() + _region->length(), true);
|
||||||
}
|
}
|
||||||
|
@ -318,7 +343,19 @@ void
|
||||||
AudioRegionEditor::length_clock_changed ()
|
AudioRegionEditor::length_clock_changed ()
|
||||||
{
|
{
|
||||||
nframes_t frames = length_clock.current_time();
|
nframes_t frames = length_clock.current_time();
|
||||||
_region->trim_end (_region->position() + frames, this);
|
|
||||||
|
_session.begin_reversible_command (_("change region length"));
|
||||||
|
|
||||||
|
Playlist* const pl = _region->playlist();
|
||||||
|
|
||||||
|
if (pl) {
|
||||||
|
XMLNode &before = pl->get_state();
|
||||||
|
_region->trim_end (_region->position() + frames, this);
|
||||||
|
XMLNode &after = pl->get_state();
|
||||||
|
_session.add_command(new MementoCommand<Playlist>(*pl, &before, &after));
|
||||||
|
}
|
||||||
|
|
||||||
|
_session.commit_reversible_command ();
|
||||||
|
|
||||||
length_clock.set (_region->length());
|
length_clock.set (_region->length());
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user