r260@gandalf: fugalh | 2006-08-03 15:53:50 -0600

It compiles and runs and seems to still work. Still needed is the actual
 serialization. Time to merge back to trunk so things can be tested by all.


git-svn-id: svn://localhost/ardour2/branches/undo@754 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Hans Fugal 2006-08-03 21:54:14 +00:00
parent 1f1c4981de
commit b0b7234458
13 changed files with 104 additions and 54 deletions

View File

@ -1267,3 +1267,15 @@ AutomationLine::hide_all_but_selected_control_points ()
}
}
}
XMLNode &AutomationLine::get_state(void)
{
// TODO
return alist.get_state();
}
int AutomationLine::set_state(const XMLNode &node)
{
// TODO
alist.set_state(node);
}

View File

@ -133,7 +133,7 @@ RouteUI::mute_press(GdkEventButton* ev)
/* ctrl-shift-click applies change to all routes */
_session.begin_reversible_command (_("mute change"));
Session::GlobalMuteStateCommand *cmd = new Session::GlobalMuteStateCommand(this);
Session::GlobalMuteStateCommand *cmd = new Session::GlobalMuteStateCommand(_session, this);
_session.set_all_mute (!_route.muted());
cmd->mark();
_session.add_command(cmd);
@ -209,7 +209,7 @@ RouteUI::solo_press(GdkEventButton* ev)
/* ctrl-shift-click applies change to all routes */
_session.begin_reversible_command (_("solo change"));
Session::GlobalSoloStateCommand *cmd = new Session::GlobalSoloStateCommand(this);
Session::GlobalSoloStateCommand *cmd = new Session::GlobalSoloStateCommand(_session, this);
_session.set_all_solo (!_route.soloed());
cmd->mark();
_session.add_command (cmd);
@ -220,7 +220,7 @@ RouteUI::solo_press(GdkEventButton* ev)
// ctrl-alt-click: exclusively solo this track, not a toggle */
_session.begin_reversible_command (_("solo change"));
Session::GlobalSoloStateCommand *cmd = new Session::GlobalSoloStateCommand (this);
Session::GlobalSoloStateCommand *cmd = new Session::GlobalSoloStateCommand (_session, this);
_session.set_all_solo (false);
_route.set_solo (true, this);
cmd->mark();
@ -284,7 +284,7 @@ RouteUI::rec_enable_press(GdkEventButton* ev)
else if (Keyboard::modifier_state_equals (ev->state, Keyboard::ModifierMask (Keyboard::Control|Keyboard::Shift))) {
_session.begin_reversible_command (_("rec-enable change"));
Session::GlobalRecordEnableStateCommand *cmd = new Session::GlobalRecordEnableStateCommand(this);
Session::GlobalRecordEnableStateCommand *cmd = new Session::GlobalRecordEnableStateCommand(_session, this);
if (rec_enable_button->get_active()) {
_session.record_disenable_all ();
@ -562,7 +562,7 @@ RouteUI::set_mix_group_solo(Route& route, bool yn)
if((mix_group = route.mix_group()) != 0){
_session.begin_reversible_command (_("mix group solo change"));
Session::GlobalSoloStateCommand *cmd = new Session::GlobalSoloStateCommand(this);
Session::GlobalSoloStateCommand *cmd = new Session::GlobalSoloStateCommand(_session, this);
mix_group->apply(&Route::set_solo, yn, this);
cmd->mark();
_session.add_command (cmd);
@ -601,7 +601,7 @@ RouteUI::set_mix_group_mute(Route& route, bool yn)
if((mix_group = route.mix_group()) != 0){
_session.begin_reversible_command (_("mix group mute change"));
Session::GlobalMuteStateCommand *cmd = new Session::GlobalMuteStateCommand (this);
Session::GlobalMuteStateCommand *cmd = new Session::GlobalMuteStateCommand (_session, this);
mix_group->apply(&Route::set_mute, yn, this);
cmd->mark();
_session.add_command(cmd);
@ -618,7 +618,7 @@ RouteUI::set_mix_group_rec_enable(Route& route, bool yn)
if((mix_group = route.mix_group()) != 0){
_session.begin_reversible_command (_("mix group rec-enable change"));
Session::GlobalRecordEnableStateCommand *cmd = new Session::GlobalRecordEnableStateCommand(this);
Session::GlobalRecordEnableStateCommand *cmd = new Session::GlobalRecordEnableStateCommand(_session, this);
mix_group->apply (&Route::set_record_enable, yn, this);
cmd->mark();
_session.add_command(cmd);

View File

@ -75,6 +75,7 @@ send.cc
session.cc
session_butler.cc
session_click.cc
session_command.cc
session_events.cc
session_export.cc
session_midi.cc

View File

@ -154,10 +154,7 @@ class AutomationList : public StateManager, public Stateful
virtual void load_state (const XMLNode&);
XMLNode &get_state(void);
int set_state (const XMLNode &s) {
load_state(s);
return 1; /*XXX*/
}
int set_state (const XMLNode &s);
void set_max_xval (double);
double get_max_xval() const { return max_xval; }

View File

@ -853,8 +853,9 @@ class Session : public sigc::trackable, public Stateful
{
GlobalRouteBooleanState before, after;
void *src;
Session &sess;
public:
GlobalSoloStateCommand(void *src);
GlobalSoloStateCommand(Session &, void *src);
void operator()();
void undo();
XMLNode &serialize();
@ -865,8 +866,9 @@ class Session : public sigc::trackable, public Stateful
{
GlobalRouteBooleanState before, after;
void *src;
Session &sess;
public:
GlobalMuteStateCommand(void *src);
GlobalMuteStateCommand(Session &, void *src);
void operator()();
void undo();
XMLNode &serialize();
@ -877,8 +879,9 @@ class Session : public sigc::trackable, public Stateful
{
GlobalRouteBooleanState before, after;
void *src;
Session &sess;
public:
GlobalRecordEnableStateCommand(void *src);
GlobalRecordEnableStateCommand(Session &, void *src);
void operator()();
void undo();
XMLNode &serialize();
@ -889,8 +892,9 @@ class Session : public sigc::trackable, public Stateful
{
GlobalRouteMeterState before, after;
void *src;
Session &sess;
public:
GlobalMeteringStateCommand(void *src);
GlobalMeteringStateCommand(Session &, void *src);
void operator()();
void undo();
XMLNode &serialize();

View File

@ -1246,3 +1246,17 @@ AutomationList::load_state (const XMLNode& node)
add (x, y);
}
}
XMLNode &AutomationList::get_state ()
{
XMLNode *node = new XMLNode("AutomationList");
store_state(*node);
return *node;
}
int AutomationList::set_state(const XMLNode &s)
{
load_state(s);
return 0;
}

View File

@ -1,87 +1,92 @@
#include <ardour/session.h>
#include <ardour/route.h>
namespace ARDOUR {
// solo
Session::GlobalSoloStateCommand::GlobalSoloStateCommand(void *src) : src(src)
Session::GlobalSoloStateCommand::GlobalSoloStateCommand(Session &sess, void *src)
: sess(sess), src(src)
{
after = before = get_global_route_boolean(&Route::soloed);
after = before = sess.get_global_route_boolean(&Route::soloed);
}
void Session::GlobalSoloStateCommand::mark()
{
after = get_global_route_boolean(&Route::soloed);
after = sess.get_global_route_boolean(&Route::soloed);
}
void operator()()
void Session::GlobalSoloStateCommand::operator()()
{
set_global_solo(after, src);
sess.set_global_solo(after, src);
}
void undo()
void Session::GlobalSoloStateCommand::undo()
{
set_global_solo(before, src);
sess.set_global_solo(before, src);
}
XMLNode &serialize()
XMLNode &Session::GlobalSoloStateCommand::serialize()
{
}
// mute
Session::GlobalMuteStateCommand::GlobalMuteStateCommand(void *src) : src(src)
Session::GlobalMuteStateCommand::GlobalMuteStateCommand(Session &sess, void *src)
: sess(sess), src(src)
{
after = before = get_global_route_boolean(&Route::muted);
after = before = sess.get_global_route_boolean(&Route::muted);
}
void Session::GlobalMuteStateCommand::mark()
{
after = get_global_route_boolean(&Route::muted);
after = sess.get_global_route_boolean(&Route::muted);
}
void operator()()
void Session::GlobalMuteStateCommand::operator()()
{
set_global_mute(after, src);
sess.set_global_mute(after, src);
}
void undo()
void Session::GlobalMuteStateCommand::undo()
{
set_global_mute(before, src);
sess.set_global_mute(before, src);
}
XMLNode &serialize()
XMLNode &Session::GlobalMuteStateCommand::serialize()
{
}
// record enable
Session::GlobalRecordEnableStateCommand::GlobalRecordEnableStateCommand(void *src) : src(src)
Session::GlobalRecordEnableStateCommand::GlobalRecordEnableStateCommand(Session &sess, void *src)
: sess(sess), src(src)
{
after = before = get_global_route_boolean(&Route::record_enabled);
after = before = sess.get_global_route_boolean(&Route::record_enabled);
}
void Session::GlobalRecordEnableStateCommand::mark()
{
after = get_global_route_boolean(&Route::record_enabled);
after = sess.get_global_route_boolean(&Route::record_enabled);
}
void operator()()
void Session::GlobalRecordEnableStateCommand::operator()()
{
set_global_record_enable(after, src);
sess.set_global_record_enable(after, src);
}
void undo()
void Session::GlobalRecordEnableStateCommand::undo()
{
set_global_record_enable(before, src);
sess.set_global_record_enable(before, src);
}
XMLNode &serialize()
XMLNode &Session::GlobalRecordEnableStateCommand::serialize()
{
}
// metering
Session::GlobalMeteringStateCommand::GlobalMeteringStateCommand(void *src) : src(src)
Session::GlobalMeteringStateCommand::GlobalMeteringStateCommand(Session &sess, void *src)
: sess(sess), src(src)
{
after = before = get_global_route_metering();
after = before = sess.get_global_route_metering();
}
void Session::GlobalMeteringStateCommand::mark()
{
after = get_global_route_metering();
after = sess.get_global_route_metering();
}
void operator()()
void Session::GlobalMeteringStateCommand::operator()()
{
set_global_route_metering(after, src);
sess.set_global_route_metering(after, src);
}
void undo()
void Session::GlobalMeteringStateCommand::undo()
{
set_global_route_metering(before, src);
sess.set_global_route_metering(before, src);
}
XMLNode &serialize()
XMLNode &Session::GlobalMeteringStateCommand::serialize()
{
}

View File

@ -21,6 +21,7 @@ pbd3_files = Split("""
basename.cc
base_ui.cc
convert.cc
command.cc
dmalloc.cc
error.cc
mountpoint.cc

10
libs/pbd3/command.cc Normal file
View File

@ -0,0 +1,10 @@
#include <pbd/command.h>
class XMLNode;
XMLNode &Command::serialize()
{
XMLNode *node = new XMLNode ("Command");
// TODO
return *node;
}

View File

@ -26,12 +26,11 @@
class Command : public Serializable
{
public:
virtual ~Command();
virtual ~Command() {}
virtual void operator() () = 0;
virtual void undo() = 0;
virtual void redo() { (*this)(); }
protected:
Command();
virtual XMLNode &serialize();
};
#endif // __lib_pbd_command_h_

View File

@ -39,7 +39,7 @@ class MementoCommand : public Command
: 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
@ -60,7 +60,7 @@ public:
: 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
@ -80,7 +80,7 @@ public:
: 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

View File

@ -27,7 +27,7 @@ class Serializable
{
public:
virtual XMLNode &serialize() = 0;
virtual ~Serializable();
virtual ~Serializable() {}
};
#endif // __lib_pbd_serializable_h__

View File

@ -82,6 +82,13 @@ UndoTransaction::redo ()
(*this)();
}
XMLNode &UndoTransaction::serialize()
{
XMLNode *node = new XMLNode ("UndoTransaction");
// TODO
return *node;
}
void
UndoHistory::add (UndoTransaction ut)
{