#include <pbd/error.h>
#include <pbd/stl_delete.h>
#include <pbd/whitespace.h>
+#include <pbd/memento_command.h>
#include <gtkmm2ext/bindable_button.h>
#include <gtkmm2ext/gtk_ui.h>
}
}
- XMLNode &before, &after;
+ XMLNode &before = playlist->get_state();
switch (op) {
case Cut:
- before = playlist->get_state();
if ((what_we_got = playlist->cut (time)) != 0) {
editor.get_cut_buffer().add (what_we_got);
- after = playlist->get_state();
- _session.add_command (MementoCommand<Playlist>(*playlist, before, after));
+ XMLNode &after = playlist->get_state();
+ _session.add_command (new MementoCommand<Playlist>(*playlist, before, after));
ret = true;
}
break;
break;
case Clear:
- before = playlist->get_state();
if ((what_we_got = playlist->cut (time)) != 0) {
- _session.add_command(MementoCommand<Playlist>(*playlist, before, after));
+ XMLNode &after = playlist->get_state();
+ _session.add_command(new MementoCommand<Playlist>(*playlist, before, after));
what_we_got->unref ();
ret = true;
}
XMLNode &before = playlist->get_state();
playlist->paste (**p, pos, times);
- _session.add_command(MementoCommand<Playlist>(*playlist, before,
+ _session.add_command(new MementoCommand<Playlist>(*playlist, before,
playlist->get_state()));
return true;
#include <vector>
#include <pbd/stl_delete.h>
+#include <pbd/memento_command.h>
#include <ardour/automation_event.h>
#include <ardour/curve.h>
}
trackview.editor.current_session()->begin_reversible_command (str);
- trackview.editor.current_session()->add_command (MementoUndoCommand<AutomationLine>(*this, get_state()));
+ trackview.editor.current_session()->add_command (new MementoUndoCommand<AutomationLine>(*this, get_state()));
first_drag_fraction = fraction;
last_drag_fraction = fraction;
update_pending = false;
- trackview.editor.current_session()->add_command (MementoRedoCommand<AutomationLine>(*this, get_state()));
+ trackview.editor.current_session()->add_command (new MementoRedoCommand<AutomationLine>(*this, get_state()));
trackview.editor.current_session()->commit_reversible_command ();
trackview.editor.current_session()->set_dirty ();
}
alist.erase (mr.start, mr.end);
- trackview.editor.current_session()->add_command(MementoCommand<AutomationLine>(*this, before, get_state()));
+ trackview.editor.current_session()->add_command(new MementoCommand<AutomationLine>(*this, before, get_state()));
trackview.editor.current_session()->commit_reversible_command ();
trackview.editor.current_session()->set_dirty ();
}
/* parent must create command */
XMLNode &before = get_state();
alist.clear();
- trackview.editor.current_session()->add_command (MementoCommand<AutomationLine>(*this, before, get_state()));
+ trackview.editor.current_session()->add_command (new MementoCommand<AutomationLine>(*this, before, get_state()));
trackview.editor.current_session()->commit_reversible_command ();
trackview.editor.current_session()->set_dirty ();
}
ShapeType _shape;
};
-class AutomationLine : public sigc::trackable
+class AutomationLine : public sigc::trackable, public Stateful
{
public:
AutomationLine (const string & name, TimeAxisView&, ArdourCanvas::Group&, ARDOUR::AutomationList&);
bool is_last_point (ControlPoint &);
bool is_first_point (ControlPoint &);
+ XMLNode& get_state (void);
+ int set_state (const XMLNode&);
+
protected:
string _name;
guint32 _height;
#include <ardour/route.h>
+#include <pbd/memento_command.h>
#include "ardour_ui.h"
#include "automation_time_axis.h"
AutomationList& alist (line.the_list());
bool ret = false;
- XMLNode &before, &after;
- before = alist.get_state();
+ XMLNode &before = alist.get_state();
switch (op) {
case Cut:
if ((what_we_got = alist.cut (selection.time.front().start, selection.time.front().end)) != 0) {
editor.get_cut_buffer().add (what_we_got);
- _session.add_command(MementoCommand<AutomationList>(alist, before, alist.get_state()));
+ _session.add_command(new MementoCommand<AutomationList>(alist, before, alist.get_state()));
ret = true;
}
break;
case Clear:
if ((what_we_got = alist.cut (selection.time.front().start, selection.time.front().end)) != 0) {
- _session.add_command(MementoCommand<AutomationList>(alist, before, alist.get_state()));
+ _session.add_command(new MementoCommand<AutomationList>(alist, before, alist.get_state()));
delete what_we_got;
what_we_got = 0;
ret = true;
{
AutomationList& alist (line.the_list());
- _session.add_command (MementoUndoCommand<AutomationList>(alist, alist.get_state()));
+ _session.add_command (new MementoUndoCommand<AutomationList>(alist, alist.get_state()));
for (PointSelection::iterator i = selection.begin(); i != selection.end(); ++i) {
AutomationList* what_we_got = 0;
AutomationList& alist (line.the_list());
bool ret = false;
- XMLNode &before, &after;
- before = alist.get_state();
+ XMLNode &before = alist.get_state();
for (PointSelection::iterator i = selection.begin(); i != selection.end(); ++i) {
case Cut:
if ((what_we_got = alist.cut ((*i).start, (*i).end)) != 0) {
editor.get_cut_buffer().add (what_we_got);
- _session.add_command (MementoCommand<AutomationList>(alist, before, alist.get_state()));
+ _session.add_command (new MementoCommand<AutomationList>(alist, before, alist.get_state()));
ret = true;
}
break;
case Clear:
if ((what_we_got = alist.cut ((*i).start, (*i).end)) != 0) {
- _session.add_command (MementoCommand<AutomationList>(alist, before, alist.get_state()));
+ _session.add_command (new MementoCommand<AutomationList>(alist, before, alist.get_state()));
delete what_we_got;
what_we_got = 0;
ret = true;
XMLNode &before = alist.get_state();
alist.paste (copy, pos, times);
- _session.add_command (MementoCommand<AutomationList>(alist, before, alist.get_state()));
+ _session.add_command (new MementoCommand<AutomationList>(alist, before, alist.get_state()));
return true;
}
#include <pbd/convert.h>
#include <pbd/error.h>
+#include <pbd/memento_command.h>
#include <gtkmm/image.h>
#include <gdkmm/color.h>
Editor::begin_reversible_command (string name)
{
if (session) {
- before = get_state();
+ before = &get_state();
session->begin_reversible_command (name);
}
}
Editor::commit_reversible_command ()
{
if (session) {
- // yes, cmd lasts long enough to be copied onto the action
- // list in the history, but this has the potential to be a
- // problem if memory management of actions changes in
- // UndoTransaction
- MementoCommand<Editor> cmd(*this, before, get_state());
- session->commit_reversible_command (&cmd);
+ session->commit_reversible_command (new MementoCommand<Editor>(*this, *before, get_state()));
}
}
UndoAction get_memento() const;
- XMLNode &before; /* used in *_reversible_command */
+ XMLNode *before; /* used in *_reversible_command */
void begin_reversible_command (string cmd_name);
void commit_reversible_command ();
#include <ardour/audio_track.h>
#include <ardour/audioplaylist.h>
#include <ardour/audiofilesource.h>
+#include <pbd/memento_command.h>
#include "ardour_ui.h"
#include "editor.h"
begin_reversible_command (_("insert sndfile"));
XMLNode &before = playlist->get_state();
playlist->add_region (*copy, pos);
- session->add_command (MementoCommand<Playlist>(*playlist, before, playlist->get_state()));
+ session->add_command (new MementoCommand<Playlist>(*playlist, before, playlist->get_state()));
commit_reversible_command ();
pos += region.length();
#include <ardour/audioregion.h>
#include <ardour/playlist.h>
+#include <pbd/memento_command.h>
#include "editor.h"
#include "regionview.h"
entered_regionview->region.set_muted (!entered_regionview->region.muted());
XMLNode &after = entered_regionview->region.playlist()->get_state();
- session->add_command (MementoCommand<Playlist>(entered_regionview->region.playlist(), before, after));
+ session->add_command (new MementoCommand<ARDOUR::Playlist>(*(entered_regionview->region.playlist()), before, after));
commit_reversible_command();
}
}
#include <gtkmm2ext/gtk_ui.h>
#include <ardour/location.h>
+#include <pbd/memento_command.h>
#include "editor.h"
#include "marker.h"
if (session) {
Location *location = new Location (where, where, "mark", Location::IsMark);
session->begin_reversible_command (_("add marker"));
- XMLNode &before, &after;
- before = session->locations()->get_state();
+ XMLNode &before = session->locations()->get_state();
session->locations()->add (location, true);
- after = session->locations()->get_state();
- session->add_command (MementoCommand<Locations>(*(session->locations()), before, after));
+ XMLNode &after = session->locations()->get_state();
+ session->add_command (new MementoCommand<Locations>(*(session->locations()), before, after));
session->commit_reversible_command ();
}
}
Editor::really_remove_marker (Location* loc)
{
session->begin_reversible_command (_("remove marker"));
- XMLNode &before, &after;
- before = session->locations()->get_state();
+ XMLNode &before = session->locations()->get_state();
session->locations()->remove (loc);
- after = session->locations()->get_state();
- session->add_command (MementoCommand<Locations>(*(session->locations()), before, after));
+ XMLNode &after = session->locations()->get_state();
+ session->add_command (new MementoCommand<Locations>(*(session->locations()), before, after));
session->commit_reversible_command ();
return FALSE;
}
loc->set_name (txt);
XMLNode &after = session->locations()->get_state();
- session->add_command (MementoCommand<Locations>(*(session->locations()), before, after));
+ session->add_command (new MementoCommand<Locations>(*(session->locations()), before, after));
commit_reversible_command ();
}
session->locations()->add (loc, true);
session->set_auto_loop_location (loc);
XMLNode &after = session->locations()->get_state();
- session->add_command (MementoCommand<Locations>(*(session->locations()), before, after));
+ session->add_command (new MementoCommand<Locations>(*(session->locations()), before, after));
}
else {
XMLNode &before = tll->get_state();
tll->set_hidden (false, this);
tll->set (temp_location->start(), temp_location->end());
XMLNode &after = tll->get_state();
- session->add_command (MementoCommand<Location>(*tll, before, after));
+ session->add_command (new MementoCommand<Location>(*tll, before, after));
}
commit_reversible_command ();
session->locations()->add (tpl, true);
session->set_auto_punch_location (tpl);
XMLNode &after = session->locations()->get_state();
- session->add_command (MementoCommand<Locations>(*(session->locations()), before, after));
+ session->add_command (new MementoCommand<Locations>(*(session->locations()), before, after));
} else {
XMLNode &before = tpl->get_state();
tpl->set_hidden(false, this);
tpl->set(temp_location->start(), temp_location->end());
XMLNode &after = tpl->get_state();
- session->add_command (MementoCommand<Location>(*tpl, before, after));
+ session->add_command (new MementoCommand<Location>(*tpl, before, after));
}
commit_reversible_command ();
#include <pbd/error.h>
#include <gtkmm2ext/utils.h>
+#include <pbd/memento_command.h>
#include "ardour_ui.h"
#include "editor.h"
}
begin_reversible_command (_("change fade in length"));
- XMLNode &before, &after;
- before = arv->region.get_state();
+ XMLNode &before = arv->region.get_state();
arv->region.set_fade_in_length (fade_length);
- after = arv->region.get_state();
- session->add_command(MementoCommand<ARDOUR::AudioRegion>(arv->region,
- before,
- after));
+ XMLNode &after = arv->region.get_state();
+ session->add_command(new MementoCommand<ARDOUR::AudioRegion>(arv->region,
+ before,
+ after));
commit_reversible_command ();
fade_in_drag_motion_callback (item, event);
}
}
begin_reversible_command (_("change fade out length"));
- XMLNode &before, &after;
- before = arv->region.get_state();
+ XMLNode &before = arv->region.get_state();
arv->region.set_fade_out_length (fade_length);
- after = arv->region.get_state();
- session->add_command(MementoCommand<ARDOUR::AudioRegion>(arv->region, before, after));
+ XMLNode &after = arv->region.get_state();
+ session->add_command(new MementoCommand<ARDOUR::AudioRegion>(arv->region, before, after));
commit_reversible_command ();
fade_out_drag_motion_callback (item, event);
begin_reversible_command ( _("move marker") );
- XMLNode &before, &after;
- before = session->locations()->get_state();
+ XMLNode &before = session->locations()->get_state();
Location * location = find_location_from_marker (marker, is_start);
location->set (drag_info.copied_location->start(), drag_info.copied_location->end());
}
- after = session->locations()->get_state();
- session->add_command(MementoCommand<Locations>(session->locations(), before, after));
+ XMLNode &after = session->locations()->get_state();
+ session->add_command(new MementoCommand<Locations>(*(session->locations()), before, after));
commit_reversible_command ();
marker_drag_line->hide();
TempoMap& map (session->tempo_map());
map.bbt_time (drag_info.last_pointer_frame, when);
- XMLNode &before, &after;
-
if (drag_info.copy == true) {
begin_reversible_command (_("copy meter mark"));
- before = map.get_state();
+ XMLNode &before = map.get_state();
map.add_meter (marker->meter(), when);
- after = map.get_state();
- session->add_command(MementoCommand<TempoMap>(map, before, after));
+ XMLNode &after = map.get_state();
+ session->add_command(new MementoCommand<TempoMap>(map, before, after));
commit_reversible_command ();
// delete the dummy marker we used for visual representation of copying.
delete marker;
} else {
begin_reversible_command (_("move meter mark"));
- before = map.get_state();
+ XMLNode &before = map.get_state();
map.move_meter (marker->meter(), when);
- after = map.get_state();
- session->add_command(MementoCommand<TempoMap>(map, before, after));
+ XMLNode &after = map.get_state();
+ session->add_command(new MementoCommand<TempoMap>(map, before, after));
commit_reversible_command ();
}
}
TempoMap& map (session->tempo_map());
map.bbt_time (drag_info.last_pointer_frame, when);
- XMLNode &before, &after;
-
if (drag_info.copy == true) {
begin_reversible_command (_("copy tempo mark"));
- before = map.get_state();
+ XMLNode &before = map.get_state();
map.add_tempo (marker->tempo(), when);
- after = map.get_state();
- session->add_command (MementoCommand<TempoMap>(map, before, after));
+ XMLNode &after = map.get_state();
+ session->add_command (new MementoCommand<TempoMap>(map, before, after));
commit_reversible_command ();
// delete the dummy marker we used for visual representation of copying.
delete marker;
} else {
begin_reversible_command (_("move tempo mark"));
- before = map.get_state();
+ XMLNode &before = map.get_state();
map.move_tempo (marker->tempo(), when);
- after = map.get_state();
- session->add_command (MementoCommand<TempoMap>(map, before, after));
+ XMLNode &after = map.get_state();
+ session->add_command (new MementoCommand<TempoMap>(map, before, after));
commit_reversible_command ();
}
}
insert_result = affected_playlists.insert (to_playlist);
if (insert_result.second) {
- session->add_command (MementoUndoCommand<Playlist>(*to_playlist, to_playlist->get_state()));
+ session->add_command (new MementoUndoCommand<Playlist>(*to_playlist, to_playlist->get_state()));
}
latest_regionview = 0;
insert_result = motion_frozen_playlists.insert (pl);
if (insert_result.second) {
pl->freeze();
- session->add_command(MementoUndoCommand<Playlist>(*pl, pl->get_state()));
+ session->add_command(new MementoUndoCommand<Playlist>(*pl, pl->get_state()));
}
}
}
insert_result = motion_frozen_playlists.insert(to_playlist);
if (insert_result.second) {
to_playlist->freeze();
- session->add_command(MementoUndoCommand<Playlist>(*to_playlist, to_playlist->get_state()));
+ session->add_command(new MementoUndoCommand<Playlist>(*to_playlist, to_playlist->get_state()));
}
}
out:
for (set<Playlist*>::iterator p = motion_frozen_playlists.begin(); p != motion_frozen_playlists.end(); ++p) {
(*p)->thaw ();
- session->add_command (MementoRedoCommand<Playlist>(*(*p), (*p)->get_state()));
+ session->add_command (new MementoRedoCommand<Playlist>(*(*p), (*p)->get_state()));
}
motion_frozen_playlists.clear ();
Playlist* playlist = clicked_trackview->playlist();
- before = playlist->get_state();
+ before = &(playlist->get_state());
clicked_trackview->playlist()->add_region (*region, selection->time[clicked_selection].start);
- after = playlist->get_state();
- session->add_command(MementoCommand<Playlist>(*playlist, before, after));
+ XMLNode &after = playlist->get_state();
+ session->add_command(new MementoCommand<Playlist>(*playlist, *before, after));
commit_reversible_command ();
Playlist * pl = (*i)->region.playlist();
insert_result = motion_frozen_playlists.insert (pl);
if (insert_result.second) {
- session->add_command(MementoUndoCommand<Playlist>(*pl, pl->get_state()));
+ session->add_command(new MementoUndoCommand<Playlist>(*pl, pl->get_state()));
}
}
}
for (set<Playlist*>::iterator p = motion_frozen_playlists.begin(); p != motion_frozen_playlists.end(); ++p) {
//(*p)->thaw ();
- session->add_command (MementoRedoCommand<Playlist>(*(*p), (*p)->get_state()));
+ session->add_command (new MementoRedoCommand<Playlist>(*(*p), (*p)->get_state()));
}
motion_frozen_playlists.clear ();
i != selection->audio_regions.by_layer().end(); ++i)
{
if (!(*i)->region.locked()) {
- XMLNode &before, &after;
Playlist *pl = (*i)->region.playlist();
- before = pl->get_state();
+ XMLNode &before = pl->get_state();
(*i)->region.trim_front (new_bound, this);
- after = pl->get_state();
- session->add_command(MementoCommand<Playlist>(*pl, before, after));
+ XMLNode &after = pl->get_state();
+ session->add_command(new MementoCommand<Playlist>(*pl, before, after));
}
}
} else {
if (!rv->region.locked()) {
- XMLNode &before, &after;
Playlist *pl = rv->region.playlist();
- before = pl->get_state();
+ XMLNode &before = pl->get_state();
rv->region.trim_front (new_bound, this);
- after = pl->get_state();
- session->add_command(MementoCommand<Playlist>(*pl, before, after));
+ XMLNode &after = pl->get_state();
+ session->add_command(new MementoCommand<Playlist>(*pl, before, after));
}
}
for (list<AudioRegionView*>::const_iterator i = selection->audio_regions.by_layer().begin(); i != selection->audio_regions.by_layer().end(); ++i)
{
if (!(*i)->region.locked()) {
- XMLNode &before, &after;
Playlist *pl = (*i)->region.playlist();
- before = pl->get_state();
+ XMLNode &before = pl->get_state();
(*i)->region.trim_end (new_bound, this);
- after = pl->get_state();
- session->add_command(MementoCommand<Playlist>(*pl, before, after));
+ XMLNode &after = pl->get_state();
+ session->add_command(new MementoCommand<Playlist>(*pl, before, after));
}
}
} else {
if (!rv->region.locked()) {
- XMLNode &before, &after;
Playlist *pl = rv->region.playlist();
- before = pl->get_state();
+ XMLNode &before = pl->get_state();
rv->region.trim_end (new_bound, this);
- after = pl->get_state();
- session->add_command (MementoCommand<Playlist>(*pl, before, after));
+ XMLNode &after = pl->get_state();
+ session->add_command (new MementoCommand<Playlist>(*pl, before, after));
}
}
region.thaw (_("trimmed region"));
XMLNode &after = region.playlist()->get_state();
- session->add_command (MementoRedoCommand<Playlist>(*(region.playlist()), after));
+ session->add_command (new MementoRedoCommand<Playlist>(*(region.playlist()), after));
rv.unhide_envelope ();
}
switch (range_marker_op) {
case CreateRangeMarker:
+ {
begin_reversible_command (_("new range marker"));
- XMLNode &before, &after;
- before = session->locations()->get_state();
+ XMLNode &before = session->locations()->get_state();
newloc = new Location(temp_location->start(), temp_location->end(), "unnamed", Location::IsRangeMarker);
session->locations()->add (newloc, true);
- after = session->locations()->get_state();
- session->add_command(MementoCommand<Locations>(session->locations(), before, after));
+ XMLNode &after = session->locations()->get_state();
+ session->add_command(new MementoCommand<Locations>(*(session->locations()), before, after));
commit_reversible_command ();
range_bar_drag_rect->hide();
range_marker_drag_rect->hide();
break;
+ }
case CreateTransportMarker:
// popup menu to pick loop or punch
Playlist* playlist = atv->playlist();
double speed = atv->get_diskstream()->speed();
- XMLNode &before, &after;
- before = playlist->get_state();
+ XMLNode &before = playlist->get_state();
playlist->add_region (*(new AudioRegion (rv->region)), (jack_nframes_t) (pos * speed));
- after = playlist->get_state();
- session->add_command(MementoCommand<Playlist>(*playlist, before, after));
+ XMLNode &after = playlist->get_state();
+ session->add_command(new MementoCommand<Playlist>(*playlist, before, after));
// playlist is frozen, so we have to update manually
#include <pbd/error.h>
#include <pbd/basename.h>
#include <pbd/pthread_utils.h>
+#include <pbd/memento_command.h>
#include <gtkmm2ext/utils.h>
#include <gtkmm2ext/choice.h>
_new_regionviews_show_envelope = (*a)->envelope_visible();
if (pl) {
- XMLNode &before, &after;
- before = pl->get_state();
+ XMLNode &before = pl->get_state();
pl->split_region ((*a)->region, where);
- after = pl->get_state();
- session->add_command(MementoCommand<Playlist>(*pl, before, after));
+ XMLNode &after = pl->get_state();
+ session->add_command(new MementoCommand<Playlist>(*pl, before, after));
}
a = tmp;
XMLNode &before = playlist->get_state();
playlist->remove_region (&clicked_regionview->region);
XMLNode &after = playlist->get_state();
- session->add_command(MementoCommand<Playlist>(*playlist, before, after));
+ session->add_command(new MementoCommand<Playlist>(*playlist, before, after));
commit_reversible_command ();
}
XMLNode &before = r.playlist()->get_state();
r.set_position (r.position() + distance, this);
XMLNode &after = r.playlist()->get_state();
- session->add_command (MementoCommand<Playlist>(*(r.playlist()), before, after));
+ session->add_command (new MementoCommand<Playlist>(*(r.playlist()), before, after));
}
commit_reversible_command ();
r.set_position (0, this);
}
XMLNode &after = r.playlist()->get_state();
- session->add_command(MementoCommand<Playlist>(*(r.playlist()), before, after));
+ session->add_command(new MementoCommand<Playlist>(*(r.playlist()), before, after));
}
commit_reversible_command ();
for (AudioRegionSelection::iterator i = selection->audio_regions.begin(); i != selection->audio_regions.end(); ++i) {
AudioRegion& r ((*i)->region);
- XMLNode &before, &after;
- before = r.playlist()->get_state();
+ XMLNode &before = r.playlist()->get_state();
r.set_position (r.position() + distance, this);
- after = r.playlist()->get_state();
- session->add_command(MementoCommand<Playlist>(*(r.playlist()), before, after));
+ XMLNode &after = r.playlist()->get_state();
+ session->add_command(new MementoCommand<Playlist>(*(r.playlist()), before, after));
}
commit_reversible_command ();
r.set_position (0, this);
}
XMLNode &after = r.playlist()->get_state();
- session->add_command(MementoCommand<Playlist>(*(r.playlist()), before, after));
+ session->add_command(new MementoCommand<Playlist>(*(r.playlist()), before, after));
}
commit_reversible_command ();
XMLNode &before = session->locations()->get_state();
session->locations()->add (location, true);
XMLNode &after = session->locations()->get_state();
- session->add_command(MementoCommand<Locations>(*(session->locations()), before, after));
+ session->add_command(new MementoCommand<Locations>(*(session->locations()), before, after));
session->commit_reversible_command ();
}
XMLNode &before = session->locations()->get_state();
session->locations()->add (location, true);
XMLNode &after = session->locations()->get_state();
- session->add_command(MementoCommand<Locations>(*(session->locations()), before, after));
+ session->add_command(new MementoCommand<Locations>(*(session->locations()), before, after));
session->commit_reversible_command ();
}
XMLNode &before = session->locations()->get_state();
session->locations()->add (location, true);
XMLNode &after = session->locations()->get_state();
- session->add_command(MementoCommand<Locations>(*(session->locations()), before, after));
+ session->add_command(new MementoCommand<Locations>(*(session->locations()), before, after));
session->commit_reversible_command ();
}
XMLNode &before = session->locations()->get_state();
session->locations()->clear_markers ();
XMLNode &after = session->locations()->get_state();
- session->add_command(MementoCommand<Locations>(*(session->locations()), before, after));
+ session->add_command(new MementoCommand<Locations>(*(session->locations()), before, after));
session->commit_reversible_command ();
}
}
if (punchloc) session->locations()->add (punchloc);
XMLNode &after = session->locations()->get_state();
- session->add_command(MementoCommand<Locations>(*(session->locations()), before, after));
+ session->add_command(new MementoCommand<Locations>(*(session->locations()), before, after));
session->commit_reversible_command ();
}
}
XMLNode &before = session->locations()->get_state();
session->locations()->clear ();
XMLNode &after = session->locations()->get_state();
- session->add_command(MementoCommand<Locations>(*(sessions->locations()), before, after));
+ session->add_command(new MementoCommand<Locations>(*(session->locations()), before, after));
session->commit_reversible_command ();
session->locations()->clear ();
}
begin_reversible_command (_("insert dragged region"));
XMLNode &before = playlist->get_state();
playlist->add_region (*(new AudioRegion (region)), where, 1.0);
- session->add_command(MementoCommand<Playlist>(*playlist, before, playlist->get_state()));
+ session->add_command(new MementoCommand<Playlist>(*playlist, before, playlist->get_state()));
commit_reversible_command ();
}
begin_reversible_command (_("insert region"));
XMLNode &before = playlist->get_state();
playlist->add_region (*(createRegion (*region)), edit_cursor->current_frame, times);
- session->add_command(MementoCommand<Playlist>(*playlist, before, playlist->get_state()));
+ session->add_command(new MementoCommand<Playlist>(*playlist, before, playlist->get_state()));
commit_reversible_command ();
}
begin_reversible_command (_("separate"));
doing_undo = true;
}
- XMLNode &before, &after;
+ XMLNode *before;
if (doing_undo)
- before = playlist->get_state();
+ before = &(playlist->get_state());
/* XXX need to consider musical time selections here at some point */
}
if (doing_undo)
- session->add_command(MementoCommand<Playlist>(*playlist, before, playlist->get_state()));
+ session->add_command(new MementoCommand<Playlist>(*playlist, *before, playlist->get_state()));
}
}
}
if (atv->is_audio_track()) {
if ((playlist = atv->playlist()) != 0) {
- XMLNode &before, &after;
+ XMLNode *before;
if (!doing_undo) {
begin_reversible_command (_("separate"));
doing_undo = true;
}
if (doing_undo)
- before = playlist->get_state();
+ before = &(playlist->get_state());
/* XXX need to consider musical time selections here at some point */
playlist->partition ((jack_nframes_t)(loc.start() * speed), (jack_nframes_t)(loc.end() * speed), true);
if (doing_undo)
- session->add_command(MementoCommand<Playlist>(*playlist, before, playlist->get_state()));
+ session->add_command(new MementoCommand<Playlist>(*playlist, *before, playlist->get_state()));
}
}
}
XMLNode &before = (*i)->get_state();
region->trim_to (start, cnt, this);
XMLNode &after = (*i)->get_state();
- session->add_command (MementoCommand<Playlist>(*(*i), before, after));
+ session->add_command (new MementoCommand<Playlist>(*(*i), before, after));
}
commit_reversible_command ();
XMLNode &before = pl->get_state();
pl->add_region (*(new AudioRegion (region)), region.last_frame(), times);
- session->add_command (MementoCommand<Playlist>(*pl, before, pl->get_state()));
+ session->add_command (new MementoCommand<Playlist>(*pl, before, pl->get_state()));
}
commit_reversible_command ();
XMLNode &before = playlist->get_state();
playlist->add_region (*(createRegion (*region)), start, times);
- session->add_command (MementoCommand<Playlist>(*playlist, before, playlist->get_state()));
+ session->add_command (new MementoCommand<Playlist>(*playlist, before, playlist->get_state()));
}
commit_reversible_command ();
XMLNode &before = region.playlist()->get_state();
region.set_sync_position (position);
XMLNode &after = region.playlist()->get_state();
- session->add_command(MementoCommand<Playlist>(*(region.playlist()), before, after));
+ session->add_command(new MementoCommand<Playlist>(*(region.playlist()), before, after));
commit_reversible_command ();
}
XMLNode &before = region.playlist()->get_state();
region.set_sync_position (edit_cursor->current_frame);
XMLNode &after = region.playlist()->get_state();
- session->add_command(MementoCommand<Playlist>(*(region.playlist()), before, after));
+ session->add_command(new MementoCommand<Playlist>(*(region.playlist()), before, after));
commit_reversible_command ();
}
XMLNode &before = region.playlist()->get_state();
region.clear_sync_position ();
XMLNode &after = region.playlist()->get_state();
- session->add_command(MementoCommand<Playlist>(*(region.playlist()), before, after));
+ session->add_command(new MementoCommand<Playlist>(*(region.playlist()), before, after));
commit_reversible_command ();
}
}
XMLNode &before = (*i)->region.get_state();
(*i)->region.move_to_natural_position (this);
XMLNode &after = (*i)->region.get_state();
- session->add_command (MementoCommand<AudioRegion>((*i)->region, before, after));
+ session->add_command (new MementoCommand<AudioRegion>((*i)->region, before, after));
}
commit_reversible_command ();
}
}
XMLNode &after = region.playlist()->get_state();
- session->add_command(MementoCommand<Playlist>(*(region.playlist()), before, after));
+ session->add_command(new MementoCommand<Playlist>(*(region.playlist()), before, after));
}
void
Editor::align_region_internal (Region& region, RegionPoint point, jack_nframes_t position)
{
- XMLNode &before, &after;
- before = region.playlist()->get_state();
+ XMLNode &before = region.playlist()->get_state();
switch (point) {
case SyncPoint:
break;
}
- after = region.playlist()->get_state();
- session->add_command(MementoCommand<Playlist>(*(region.playlist()), before, after));
+ XMLNode &after = region.playlist()->get_state();
+ session->add_command(new MementoCommand<Playlist>(*(region.playlist()), before, after));
}
void
XMLNode &before = region.playlist()->get_state();
region.trim_end( session_frame_to_track_frame(edit_cursor->current_frame, speed), this);
XMLNode &after = region.playlist()->get_state();
- session->add_command(MementoCommand<Playlist>(*(region.playlist()), before, after));
+ session->add_command(new MementoCommand<Playlist>(*(region.playlist()), before, after));
commit_reversible_command ();
}
XMLNode &before = region.playlist()->get_state();
region.trim_front ( session_frame_to_track_frame(edit_cursor->current_frame, speed), this);
XMLNode &after = region.playlist()->get_state();
- session->add_command(MementoCommand<Playlist>(*(region.playlist()), before, after));
+ session->add_command(new MementoCommand<Playlist>(*(region.playlist()), before, after));
commit_reversible_command ();
}
XMLNode &before = playlist->get_state();
atv->audio_track()->bounce_range (start, cnt, itt);
XMLNode &after = playlist->get_state();
- session->add_command (MementoCommand<Playlist> (*playlist, before, after));
+ session->add_command (new MementoCommand<Playlist> (*playlist, before, after));
}
commit_reversible_command ();
insert_result = freezelist.insert (pl);
if (insert_result.second) {
pl->freeze ();
- session->add_command (MementoUndoCommand<Playlist>(*pl, pl->get_state()));
+ session->add_command (new MementoUndoCommand<Playlist>(*pl, pl->get_state()));
}
}
}
for (set<Playlist*>::iterator pl = freezelist.begin(); pl != freezelist.end(); ++pl) {
(*pl)->thaw ();
- session->add_command (MementoRedoCommand<Playlist>(*(*pl), *(*pl)->get_state()));
+ session->add_command (new MementoRedoCommand<Playlist>(*(*pl), (*pl)->get_state()));
}
}
XMLNode &before = apl->get_state();
apl->paste (**chunk, edit_cursor->current_frame, times);
- session->add_command(MementoCommand<AudioPlaylist>(*apl, before, apl->get_state()));
+ session->add_command(new MementoCommand<AudioPlaylist>(*apl, before, apl->get_state()));
if (tmp != ns->playlists.end()) {
chunk = tmp;
playlist = (*i)->region.playlist();
XMLNode &before = playlist->get_state();
playlist->duplicate (r, r.last_frame(), times);
- session->add_command(MementoCommand<Playlist>(*playlist, before, playlist->get_state()));
+ session->add_command(new MementoCommand<Playlist>(*playlist, before, playlist->get_state()));
c.disconnect ();
XMLNode &before = playlist->get_state();
playlist->duplicate (**ri, selection->time[clicked_selection].end, times);
XMLNode &after = playlist->get_state();
- session->add_command (MementoCommand<Playlist>(*playlist, before, after));
+ session->add_command (new MementoCommand<Playlist>(*playlist, before, after));
++ri;
if (ri == new_regions.end()) {
XMLNode &before = playlist.get_state();
playlist.clear ();
XMLNode &after = playlist.get_state();
- session->add_command (MementoCommand<Playlist>(playlist, before, after));
+ session->add_command (new MementoCommand<Playlist>(playlist, before, after));
commit_reversible_command ();
}
XMLNode &before = playlist->get_state();
playlist->nudge_after (start, distance, forwards);
XMLNode &after = playlist->get_state();
- session->add_command (MementoCommand<Playlist>(*playlist, before, after));
+ session->add_command (new MementoCommand<Playlist>(*playlist, before, after));
}
commit_reversible_command ();
XMLNode &before = (*r)->region.get_state();
(*r)->region.normalize_to (0.0f);
XMLNode &after = (*r)->region.get_state();
- session->add_command (MementoCommand<AudioRegion>((*r)->region, before, after));
+ session->add_command (new MementoCommand<AudioRegion>((*r)->region, before, after));
}
commit_reversible_command ();
XMLNode &before = (*r)->region.get_state();
(*r)->region.set_scale_amplitude (1.0f);
XMLNode &after = (*r)->region.get_state();
- session->add_command (MementoCommand<AudioRegion>((*r)->region, before, after));
+ session->add_command (new MementoCommand<AudioRegion>((*r)->region, before, after));
}
commit_reversible_command ();
XMLNode &before = playlist->get_state();
playlist->replace_region (region, *(filter.results.front()), region.position());
XMLNode &after = playlist->get_state();
- session->add_command(MementoCommand<Playlist>(*playlist, before, after));
+ session->add_command(new MementoCommand<Playlist>(*playlist, before, after));
} else {
goto out;
}
#include <libgnomecanvasmm.h>
#include <pbd/error.h>
+#include <pbd/memento_command.h>
#include <gtkmm2ext/utils.h>
#include <gtkmm2ext/gtk_ui.h>
XMLNode &before = map.get_state();
map.add_tempo (Tempo (bpm), requested);
XMLNode &after = map.get_state();
- session->add_command(MementoCommand<TempoMap>(map, before, after));
+ session->add_command(new MementoCommand<TempoMap>(map, before, after));
commit_reversible_command ();
map.dump (cerr);
begin_reversible_command (_("add meter mark"));
XMLNode &before = map.get_state();
map.add_meter (Meter (bpb, note_type), requested);
- session->add_command(MementoCommand<TempoMap>(map, before, map.get_state()));
+ session->add_command(new MementoCommand<TempoMap>(map, before, map.get_state()));
commit_reversible_command ();
map.dump (cerr);
begin_reversible_command (_("replace tempo mark"));
XMLNode &before = session->tempo_map().get_state();
session->tempo_map().replace_meter (*section, Meter (bpb, note_type));
- XMLNode &before = session->tempo_map().get_state();
- session->add_command(MementoCommand<TempoMap>(session->tempo_map(), before, after));
+ XMLNode &after = session->tempo_map().get_state();
+ session->add_command(new MementoCommand<TempoMap>(session->tempo_map(), before, after));
commit_reversible_command ();
}
session->tempo_map().replace_tempo (*section, Tempo (bpm));
session->tempo_map().move_tempo (*section, when);
XMLNode &after = session->tempo_map().get_state();
- session->add_command (MementoCommand<TempoMap>(session->tempo_map(), before, after));
+ session->add_command (new MementoCommand<TempoMap>(session->tempo_map(), before, after));
commit_reversible_command ();
}
XMLNode &before = session->tempo_map().get_state();
session->tempo_map().remove_tempo (*section);
XMLNode &after = session->tempo_map().get_state();
- session->add_command(MementoCommand<TempoMap>(session->tempo_map(), before, after));
+ session->add_command(new MementoCommand<TempoMap>(session->tempo_map(), before, after));
commit_reversible_command ();
return FALSE;
XMLNode &before = session->tempo_map().get_state();
session->tempo_map().remove_meter (*section);
XMLNode &after = session->tempo_map().get_state();
- session->add_command(MementoCommand<TempoMap>(session->tempo_map(), before, after));
+ session->add_command(new MementoCommand<TempoMap>(session->tempo_map(), before, after));
commit_reversible_command ();
return FALSE;
}
#include <pbd/error.h>
#include <pbd/pthread_utils.h>
+#include <pbd/memento_command.h>
#include "editor.h"
#include "audio_time_axis.h"
XMLNode &before = playlist->get_state();
playlist->replace_region (aregion, *new_region, aregion.position());
XMLNode &after = playlist->get_state();
- session->add_command (MementoCommand<Playlist>(*playlist, before, after));
+ session->add_command (new MementoCommand<Playlist>(*playlist, before, after));
i = tmp;
}
#include <ardour/curve.h>
#include <ardour/route.h>
+#include <pbd/memento_command.h>
#include "gain_automation_time_axis.h"
#include "automation_line.h"
_session.begin_reversible_command (_("add gain automation event"));
- XMLNode &before, &after;
- before = curve.get_state();
+ XMLNode &before = curve.get_state();
curve.add (when, y);
- after = curve.get_state();
- _session.add_command(MementoCommand<ARDOUR::Curve>(curve, before, after));
+ XMLNode &after = curve.get_state();
+ _session.add_command(new MementoCommand<ARDOUR::Curve>(curve, before, after));
_session.commit_reversible_command ();
_session.set_dirty ();
}
#include <ardour/utils.h>
#include <ardour/configuration.h>
#include <ardour/session.h>
+#include <pbd/memento_command.h>
#include "ardour_ui.h"
#include "prompter.h"
}
session->begin_reversible_command (_("remove marker"));
- XMLNode &before, &after;
- before = session->locations()->get_state();
+ XMLNode &before = session->locations()->get_state();
session->locations()->remove (loc);
- after = session->locations()->get_state();
- session->add_command(MementoCommand<Location>(*(session->locations()), before, after));
+ XMLNode &after = session->locations()->get_state();
+ session->add_command(new MementoCommand<Locations>(*(session->locations()), before, after));
session->commit_reversible_command ();
return FALSE;
XMLNode &before = session->locations()->get_state();
session->locations()->add (location, true);
XMLNode &after = session->locations()->get_state();
- session->add_command (MementoCommand<Locations>(*(session->locations()), before, after));
+ session->add_command (new MementoCommand<Locations>(*(session->locations()), before, after));
session->commit_reversible_command ();
}
XMLNode &before = session->locations()->get_state();
session->locations()->add (location, true);
XMLNode &after = session->locations()->get_state();
- session->add_command (MementoCommand<Locations>(*(session->locations()), before, after));
+ session->add_command (new MementoCommand<Locations>(*(session->locations()), before, after));
session->commit_reversible_command ();
}
}
#include <ardour/panner.h>
#include <gtkmm2ext/popup.h>
+#include <pbd/memento_command.h>
#include "pan_automation_time_axis.h"
#include "automation_line.h"
AutomationList& alist (lines.front()->the_list());
_session.begin_reversible_command (_("add pan automation event"));
- XMLNode &before, &after;
- before = alist.get_state();
+ XMLNode &before = alist.get_state();
alist.add (when, y);
- after = alist.get_state();
- _seession.add_command(MementoCommand<AutomationList>(alist, before, after));
+ XMLNode &after = alist.get_state();
+ _session.add_command(new MementoCommand<AutomationList>(alist, before, after));
_session.commit_reversible_command ();
_session.set_dirty ();
}
#include <ardour/redirect.h>
#include <ardour/session.h>
#include <cstdlib>
+#include <pbd/memento_command.h>
#include "redirect_automation_time_axis.h"
#include "automation_line.h"
lines.front()->view_to_model_y (y);
_session.begin_reversible_command (description);
- XMLNode &before, &after;
- before = alist.get_state();
+ XMLNode &before = alist.get_state();
alist.add (when, y);
- after = alist.get_state();
- _session.add_command(MementoCommand<AutomationList>(alist, before, after));
+ XMLNode &after = alist.get_state();
+ _session.add_command(new MementoCommand<AutomationList>(alist, before, after));
_session.commit_reversible_command ();
_session.set_dirty ();
}
#include <ardour/curve.h>
#include <ardour/audioregion.h>
+#include <pbd/memento_command.h>
#include "region_gain_line.h"
#include "regionview.h"
{
AutomationLine::start_drag(cp,fraction);
if (!rv.region.envelope_active()) {
- trackview.session().add_command(MementoUndoCommand<AudioRegion>(rv.region, rv.region.get_state()));
+ trackview.session().add_command(new MementoUndoCommand<AudioRegion>(rv.region, rv.region.get_state()));
rv.region.set_envelope_active(false);
}
}
XMLNode &before = rv.region.get_state();
rv.region.set_envelope_active(true);
XMLNode &after = rv.region.get_state();
- trackview.session().add_command(MementoCommand<AudioRegion>(rv.region, before, after));
+ trackview.session().add_command(new MementoCommand<AudioRegion>(rv.region, before, after));
}
alist.erase (mr.start, mr.end);
- trackview.editor.current_session()->add_command (MementoCommand<AudioRegionGainLine>(*this, before, get_state()));
+ trackview.editor.current_session()->add_command (new MementoCommand<AudioRegionGainLine>(*this, before, get_state()));
trackview.editor.current_session()->commit_reversible_command ();
trackview.editor.current_session()->set_dirty ();
}
{
if (!rv.region.envelope_active()) {
rv.region.set_envelope_active(true);
- trackview.session().add_command(MementoRedoCommand<AudioRegion>(rv.region, rv.region.get_state()));
+ trackview.session().add_command(new MementoRedoCommand<AudioRegion>(rv.region, rv.region.get_state()));
}
AutomationLine::end_drag(cp);
}
#include <ardour/audioregion.h>
#include <ardour/audiosource.h>
#include <ardour/audio_diskstream.h>
+#include <pbd/memento_command.h>
#include "streamview.h"
#include "regionview.h"
if (!region.envelope_active()) {
- XMLNode &before, &after;
- before = region.get_state();
+ XMLNode &before = region.get_state();
region.set_envelope_active(true);
- after = region.get_state();
- trackview.session().add_command(MementoCommand<AudioRegion>(region, before, after));
+ XMLNode &after = region.get_state();
+ trackview.session().add_command(new MementoCommand<AudioRegion>(region, before, after));
}
region.envelope().add (fx, y);
XMLNode &after = region.envelope().get_state();
- trackview.session().add_command(MementoCommand<Curve>(region.envelope(), before, after));
+ trackview.session().add_command(new MementoCommand<Curve>(region.envelope(), before, after));
trackview.session().commit_reversible_command ();
}
#include <gtkmm2ext/doi.h>
#include <ardour/route_group.h>
+#include <pbd/memento_command.h>
#include "route_ui.h"
#include "keyboard.h"
/* ctrl-shift-click applies change to all routes */
_session.begin_reversible_command (_("mute change"));
- Session::GlobalMuteStateCommand cmd(this);
+ Session::GlobalMuteStateCommand *cmd = new Session::GlobalMuteStateCommand(this);
_session.set_all_mute (!_route.muted());
- cmd.mark();
+ cmd->mark();
_session.add_command(cmd);
_session.commit_reversible_command ();
/* ctrl-shift-click applies change to all routes */
_session.begin_reversible_command (_("solo change"));
- Session::GlobalSoloStateCommand cmd(this);
+ Session::GlobalSoloStateCommand *cmd = new Session::GlobalSoloStateCommand(this);
_session.set_all_solo (!_route.soloed());
- cmd.mark();
+ cmd->mark();
_session.add_command (cmd);
_session.commit_reversible_command ();
// ctrl-alt-click: exclusively solo this track, not a toggle */
_session.begin_reversible_command (_("solo change"));
- Session::GlobalSoloStateCommand cmd(this);
+ Session::GlobalSoloStateCommand *cmd = new Session::GlobalSoloStateCommand (this);
_session.set_all_solo (false);
_route.set_solo (true, this);
- cmd.mark();
+ cmd->mark();
_session.add_command(cmd);
_session.commit_reversible_command ();
else if (Keyboard::modifier_state_equals (ev->state, Keyboard::ModifierMask (Keyboard::Control|Keyboard::Shift))) {
_session.begin_reversible_command (_("rec-enable change"));
- Session::GlobalRecordEnableStateCommand cmd(this);
+ Session::GlobalRecordEnableStateCommand *cmd = new Session::GlobalRecordEnableStateCommand(this);
if (rec_enable_button->get_active()) {
_session.record_disenable_all ();
_session.record_enable_all ();
}
- cmd.mark();
+ cmd->mark();
_session.add_command(cmd);
_session.commit_reversible_command ();
if((mix_group = route.mix_group()) != 0){
_session.begin_reversible_command (_("mix group solo change"));
- Session::GlobalSoloStateCommand cmd(this);
+ Session::GlobalSoloStateCommand *cmd = new Session::GlobalSoloStateCommand(this);
mix_group->apply(&Route::set_solo, yn, this);
- cmd.mark();
+ cmd->mark();
_session.add_command (cmd);
_session.commit_reversible_command ();
} else {
XMLNode &before = _route.get_state();
bind(mem_fun(_route, func), yn, arg)();
XMLNode &after = _route.get_state();
- _session.add_command (MementoCommand<Route>(_route, before, after));
+ _session.add_command (new MementoCommand<Route>(_route, before, after));
_session.commit_reversible_command ();
}
XMLNode &before = audio_track()->get_state();
bind (mem_fun (*audio_track(), func), yn, arg)();
XMLNode &after = audio_track()->get_state();
- _session.add_command (MementoCommand<AudioTrack>(*audio_track(), before, after));
+ _session.add_command (new MementoCommand<AudioTrack>(*audio_track(), before, after));
_session.commit_reversible_command ();
}
if((mix_group = route.mix_group()) != 0){
_session.begin_reversible_command (_("mix group mute change"));
- Session::GlobalMuteStateCommand cmd(this);
+ Session::GlobalMuteStateCommand *cmd = new Session::GlobalMuteStateCommand (this);
mix_group->apply(&Route::set_mute, yn, this);
- cmd.mark();
+ cmd->mark();
_session.add_command(cmd);
_session.commit_reversible_command ();
} else {
if((mix_group = route.mix_group()) != 0){
_session.begin_reversible_command (_("mix group rec-enable change"));
- Session::GlobalRecordEnableStateCommand cmd(this);
+ Session::GlobalRecordEnableStateCommand *cmd = new Session::GlobalRecordEnableStateCommand(this);
mix_group->apply (&Route::set_record_enable, yn, this);
- cmd.mark();
+ cmd->mark();
_session.add_command(cmd);
_session.commit_reversible_command ();
} else {
};
-class AutomationList : public StateManager
+class AutomationList : public StateManager, public Stateful
{
public:
typedef std::list<ControlEvent*> AutomationEventList;
virtual void store_state (XMLNode& node) const;
virtual void load_state (const XMLNode&);
+ XMLNode &get_state(void);
+ int set_state (const XMLNode &s) {
+ load_state(s);
+ return 1; /*XXX*/
+ }
+
void set_max_xval (double);
double get_max_xval() const { return max_xval; }
void begin_reversible_command (string cmd_name);
void commit_reversible_command (Command* cmd = 0);
- void add_command (const Command& cmd) {
+ void add_command (Command *const cmd) {
current_trans.add_command (cmd);
}
void undo();
XMLNode &serialize();
void mark();
- }
+ };
class GlobalMuteStateCommand : public Command
{
void undo();
XMLNode &serialize();
void mark();
- }
+ };
class GlobalRecordEnableStateCommand : public Command
{
void undo();
XMLNode &serialize();
void mark();
- }
+ };
class GlobalMeteringStateCommand : public Command
{
void undo();
XMLNode &serialize();
void mark();
- }
+ };
/* edit mode */
#include <pbd/basename.h>
#include <glibmm/thread.h>
#include <pbd/xml++.h>
+#include <pbd/memento_command.h>
#include <ardour/ardour.h>
#include <ardour/audioengine.h>
_playlist->thaw ();
XMLNode &after = _playlist->get_state();
- _session.add_command (MementoCommand<Playlist>(*_playlist, before, after));
+ _session.add_command (new MementoCommand<Playlist>(*_playlist, before, after));
}
mark_write_completed = true;
#include <ardour/session.h>
+namespace ARDOUR {
// solo
Session::GlobalSoloStateCommand::GlobalSoloStateCommand(void *src) : src(src)
{
{
}
+} // namespace ARDOUR
struct timeval now;
if (cmd) {
- current_trans.add_command (*cmd);
+ current_trans.add_command (cmd);
}
gettimeofday (&now, 0);
set_global_route_boolean (s, &Route::set_record_enable, src);
}
+#if 0
UndoAction
Session::global_mute_memento (void* src)
{
{
return sigc::bind (mem_fun (*this, &Session::set_global_record_enable), get_global_route_boolean (&Route::record_enabled), src);
}
+#endif
static bool
template_filter (const string &str, void *arg)
#include <pbd/error.h>
#include <glibmm/thread.h>
#include <pbd/pthread_utils.h>
+#include <pbd/memento_command.h>
#include <midi++/mmc.h>
#include <midi++/port.h>
XMLNode &before = loc->get_state();
loc->set_end(_transport_frame);
XMLNode &after = loc->get_state();
- add_command (MementoCommand<Location>(*loc, before, after));
+ add_command (new MementoCommand<Location>(*loc, before, after));
}
_end_location_is_free = false;
: obj(obj), before(before), after(after) {}
void operator() () { obj.set_state(after); }
void undo() { obj.set_state(before); }
- virtual XMLNode &serialize()
- {
+ virtual XMLNode &serialize() ;
+ //{
// obj.id
// key is "MementoCommand" or something
// before and after mementos
- }
+ //}
// TODO does this need a copy constructor?
protected:
obj_T &obj;
};
template <class obj_T>
-class MementoUndoCommand : public MementoCommand<obj_T>
+class MementoUndoCommand : public Command
{
public:
MementoUndoCommand(obj_T &obj,
: obj(obj), before(before) {}
void operator() () { /* noop */ }
void undo() { obj.set_state(before); }
- virtual XMLNode &serialize()
- {
+ virtual XMLNode &serialize() ;
+ //{
// obj.id
// key is "MementoCommand" or something
// before and after mementos
- }
-}
+ //}
+protected:
+ obj_T &obj;
+ XMLNode &before;
+};
template <class obj_T>
-class MementoRedoCommand : public MementoCommand<obj_T>
+class MementoRedoCommand : public Command
{
public:
- MementoUndoCommand(obj_T &obj,
+ MementoRedoCommand(obj_T &obj,
XMLNode &after)
: obj(obj), after(after) {}
void operator() () { obj.set_state(after); }
void undo() { /* noop */ }
- virtual XMLNode &serialize()
- {
+ virtual XMLNode &serialize();
+ //{
// obj.id
// key is "MementoCommand" or something
// before and after mementos
- }
-}
+ //}
+protected:
+ obj_T &obj;
+ XMLNode &after;
+};
#endif // __lib_pbd_memento_h__
{
public:
virtual XMLNode &serialize() = 0;
+ virtual ~Serializable();
};
#endif // __lib_pbd_serializable_h__
using std::string;
using std::list;
-typedef Command UndoAction;
+typedef sigc::slot<void> UndoAction;
class UndoTransaction : public Command
{
void clear ();
- void add_command (const UndoAction&);
+ void add_command (Command *const);
void operator() ();
void undo();
+ void redo();
+
+ XMLNode &serialize();
void set_name (const string& str) {
_name = str;
}
private:
- list<UndoAction> actions;
+ list<Command*> actions;
struct timeval _timestamp;
string _name;
};
}
void
-UndoTransaction::add_command (const UndoAction& action)
+UndoTransaction::add_command (Command *const action)
{
actions.push_back (action);
}
void
UndoTransaction::operator() ()
{
- for (list<UndoAction>::iterator i = actions.begin(); i != actions.end(); ++i) {
- (*i)();
+ for (list<Command*>::iterator i = actions.begin(); i != actions.end(); ++i) {
+ (*(*i))();
}
}
UndoTransaction::undo ()
{
cerr << "Undo " << _name << endl;
- for (list<UndoAction>::reverse_iterator i = actions.rbegin(); i != actions.rend(); ++i) {
- i->undo();
+ for (list<Command*>::reverse_iterator i = actions.rbegin(); i != actions.rend(); ++i) {
+ (*i)->undo();
}
}
UndoTransaction ut = RedoList.back ();
RedoList.pop_back ();
ut.redo ();
- UndoList.push_back (trans);
+ UndoList.push_back (ut);
}
}