r260@gandalf: fugalh | 2006-08-03 15:53:50 -0600
authorHans Fugal <hans@fugal.net>
Thu, 3 Aug 2006 21:54:14 +0000 (21:54 +0000)
committerHans Fugal <hans@fugal.net>
Thu, 3 Aug 2006 21:54:14 +0000 (21:54 +0000)
 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

13 files changed:
gtk2_ardour/automation_line.cc
gtk2_ardour/route_ui.cc
libs/ardour/SConscript
libs/ardour/ardour/automation_event.h
libs/ardour/ardour/session.h
libs/ardour/automation_event.cc
libs/ardour/session_command.cc
libs/pbd3/SConscript
libs/pbd3/command.cc [new file with mode: 0644]
libs/pbd3/pbd/command.h
libs/pbd3/pbd/memento_command.h
libs/pbd3/pbd/serializable.h
libs/pbd3/undo.cc

index a8f2952ed98edbf436d938f852451acc306b5f0b..4cf6779c9827406ff76f672a2357e04d3dabd962 100644 (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);
+}
index 0dc25f3f7b00e4800ef47e89c05340b8d998d58a..988d6c8b196b542e9ee8e3c679c1d115399511cf 100644 (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);
index f5f1272fb8bbbab8de2a6a4562c74ed5b23fbd6c..a1bed7aeefe9015825894e0a65b0999f2f474b5b 100644 (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
index 73aed389c1aa758e8d1e82aadde2b93d2f1f1928..1fa29d4adf5e581a86aaabe2c49d4c62221f122b 100644 (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; }
index a809a2e479b7fce06cc771e7482efaaf44b7bc8e..7a9e50ae9ba04667031593c75a6f85dc96dc0a59 100644 (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();
index 3df7dd94f7ae0aa44104c3f9e00599774dcbce29..a9e76ac55cc24f2b7119aa94bc648c7626a3cf72 100644 (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;
+}
+
index 9e473fe233a2ddfe8c35a257d0b01f8e5ee2bb10..6482de41fb8f7ca6993c0a36e2ea28ac1ccf5978 100644 (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()
 {
 }
 
index 2766b3c5eda15f62027acbdf12164f6cf936c314..fedb3cded44665a26c520d0bb639926f56437b0d 100644 (file)
@@ -21,6 +21,7 @@ pbd3_files = Split("""
 basename.cc
 base_ui.cc
 convert.cc
+command.cc
 dmalloc.cc
 error.cc
 mountpoint.cc
diff --git a/libs/pbd3/command.cc b/libs/pbd3/command.cc
new file mode 100644 (file)
index 0000000..3f5aca8
--- /dev/null
@@ -0,0 +1,10 @@
+#include <pbd/command.h>
+
+class XMLNode;
+
+XMLNode &Command::serialize()
+{
+    XMLNode *node = new XMLNode ("Command");
+    // TODO
+    return *node;
+}
index 89b358a7702b840716d12f496811eb9281d3c112..35ae011530c0b69e7898002e37006f5f360bcd08 100644 (file)
 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_
index fe10893de638d968d9ecbe76f5c7c0a87e3bd3ef..c8bfe5de4ca0d2e173d2bade668e1a8c85634785 100644 (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
index 4082b840f0edb2800c30808bdf7e7ccdfbe45c67..f6ac4e92fbf0d21b028211879311fe75955705f2 100644 (file)
@@ -27,7 +27,7 @@ class Serializable
 {
 public:
     virtual XMLNode &serialize() = 0;
-    virtual ~Serializable();
+    virtual ~Serializable() {}
 };
 
 #endif // __lib_pbd_serializable_h__
index 43e98313a27ed6b1009194c5dce67c0e5b81c072..aa27f95789a6e378b77828b25273781561efb602 100644 (file)
@@ -82,6 +82,13 @@ UndoTransaction::redo ()
         (*this)();
 }
 
+XMLNode &UndoTransaction::serialize()
+{
+    XMLNode *node = new XMLNode ("UndoTransaction");
+    // TODO
+    return *node;
+}
+
 void
 UndoHistory::add (UndoTransaction ut)
 {