Rect fix
[ardour.git] / libs / ardour / session_command.cc
1 #include <ardour/session.h>
2 #include <ardour/route.h>
3 #include <pbd/memento_command.h>
4 #include <ardour/diskstream.h>
5
6 namespace ARDOUR {
7
8 Command *Session::memento_command_factory(XMLNode *n)
9 {
10     PBD::ID id;
11     XMLNode *before, *after;
12
13     /* get obj_id */
14
15     /* get before and/or after */
16
17     /* get an object by id by trial and error, and use it to construct an
18      * appropriate memento command */
19     // e.g.
20     if (Diskstream *obj = diskstream_by_id(id))
21         return new MementoCommand<Diskstream>(*obj, *before, *after);
22     // etc.
23 }
24
25 // solo
26 Session::GlobalSoloStateCommand::GlobalSoloStateCommand(Session &sess, void *src)
27     : sess(sess), src(src)
28 {
29     after = before = sess.get_global_route_boolean(&Route::soloed);
30 }
31 void Session::GlobalSoloStateCommand::mark()
32 {
33     after = sess.get_global_route_boolean(&Route::soloed);
34 }
35 void Session::GlobalSoloStateCommand::operator()()
36 {
37     sess.set_global_solo(after, src);
38 }
39 void Session::GlobalSoloStateCommand::undo()
40 {
41     sess.set_global_solo(before, src);
42 }
43 XMLNode &Session::GlobalSoloStateCommand::get_state()
44 {
45     XMLNode *node = new XMLNode("GlobalSoloStateCommand");
46     return *node;
47 }
48
49 // mute
50 Session::GlobalMuteStateCommand::GlobalMuteStateCommand(Session &sess, void *src)
51     : sess(sess), src(src)
52 {
53     after = before = sess.get_global_route_boolean(&Route::muted);
54 }
55 void Session::GlobalMuteStateCommand::mark()
56 {
57     after = sess.get_global_route_boolean(&Route::muted);
58 }
59 void Session::GlobalMuteStateCommand::operator()()
60 {
61     sess.set_global_mute(after, src);
62 }
63 void Session::GlobalMuteStateCommand::undo()
64 {
65     sess.set_global_mute(before, src);
66 }
67 XMLNode &Session::GlobalMuteStateCommand::get_state()
68 {
69     XMLNode *node = new XMLNode("GlobalMuteStateCommand");
70     return *node;
71 }
72
73 // record enable
74 Session::GlobalRecordEnableStateCommand::GlobalRecordEnableStateCommand(Session &sess, void *src) 
75     : sess(sess), src(src)
76 {
77     after = before = sess.get_global_route_boolean(&Route::record_enabled);
78 }
79 void Session::GlobalRecordEnableStateCommand::mark()
80 {
81     after = sess.get_global_route_boolean(&Route::record_enabled);
82 }
83 void Session::GlobalRecordEnableStateCommand::operator()()
84 {
85     sess.set_global_record_enable(after, src);
86 }
87 void Session::GlobalRecordEnableStateCommand::undo()
88 {
89     sess.set_global_record_enable(before, src);
90 }
91 XMLNode &Session::GlobalRecordEnableStateCommand::get_state()
92 {
93     XMLNode *node = new XMLNode("GlobalRecordEnableStateCommand");
94     return *node;
95 }
96
97 // metering
98 Session::GlobalMeteringStateCommand::GlobalMeteringStateCommand(Session &sess, void *src) 
99     : sess(sess), src(src)
100 {
101     after = before = sess.get_global_route_metering();
102 }
103 void Session::GlobalMeteringStateCommand::mark()
104 {
105     after = sess.get_global_route_metering();
106 }
107 void Session::GlobalMeteringStateCommand::operator()()
108 {
109     sess.set_global_route_metering(after, src);
110 }
111 void Session::GlobalMeteringStateCommand::undo()
112 {
113     sess.set_global_route_metering(before, src);
114 }
115 XMLNode &Session::GlobalMeteringStateCommand::get_state()
116 {
117     XMLNode *node = new XMLNode("GlobalMeteringStateCommand");
118     return *node;
119 }
120
121 } // namespace ARDOUR