r373: Merged the official release 1.2.1.
[cinelerra_cv.git] / cinelerra / localsession.C
blob752c993d79c699eec221e307b1f728797f8e3680
1 #include "clip.h"
2 #include "defaults.h"
3 #include "edl.h"
4 #include "filexml.h"
5 #include "localsession.h"
11 LocalSession::LocalSession(EDL *edl)
13         this->edl = edl;
15         selectionstart = selectionend = 0;
16         in_point = out_point = -1;
17         strcpy(folder, CLIP_FOLDER);
18         sprintf(clip_title, "Program");
19         strcpy(clip_notes, "Hello world");
20         clipboard_length = 0;
21         preview_start = preview_end = 0;
22         loop_playback = 0;
23         view_start = 0;
24         track_start = 0;
27 LocalSession::~LocalSession()
31 void LocalSession::copy_from(LocalSession *that)
33         strcpy(clip_title, that->clip_title);
34         strcpy(clip_notes, that->clip_notes);
35         strcpy(folder, that->folder);
36         in_point = that->in_point;
37         loop_playback = that->loop_playback;
38         loop_start = that->loop_start;
39         loop_end = that->loop_end;
40         out_point = that->out_point;
41         selectionend = that->selectionend;
42         selectionstart = that->selectionstart;
43         track_start = that->track_start;
44         view_start = that->view_start;
45         zoom_sample = that->zoom_sample;
46         zoom_y = that->zoom_y;
47         zoom_track = that->zoom_track;
48         preview_start = that->preview_start;
49         preview_end = that->preview_end;
52 void LocalSession::save_xml(FileXML *file, double start)
54         file->tag.set_title("LOCALSESSION");
56         file->tag.set_property("IN_POINT", in_point - start);
57         file->tag.set_property("LOOP_PLAYBACK", loop_playback);
58         file->tag.set_property("LOOP_START", loop_start - start);
59         file->tag.set_property("LOOP_END", loop_end - start);
60         file->tag.set_property("OUT_POINT", out_point - start);
61         file->tag.set_property("SELECTION_START", selectionstart - start);
62         file->tag.set_property("SELECTION_END", selectionend - start);
63         file->tag.set_property("CLIP_TITLE", clip_title);
64         file->tag.set_property("CLIP_NOTES", clip_notes);
65         file->tag.set_property("FOLDER", folder);
66         file->tag.set_property("TRACK_START", track_start);
67         file->tag.set_property("VIEW_START", view_start);
68         file->tag.set_property("ZOOM_SAMPLE", zoom_sample);
69 //printf("EDLSession::save_session 1\n");
70         file->tag.set_property("ZOOMY", zoom_y);
71 //printf("EDLSession::save_session 1 %d\n", zoom_track);
72         file->tag.set_property("ZOOM_TRACK", zoom_track);
73         
74         double preview_start = this->preview_start - start;
75         if(preview_start < 0) preview_start = 0;
76         double preview_end = this->preview_end - start;
77         if(preview_end < 0) preview_end = 0;
78         
79         file->tag.set_property("PREVIEW_START", preview_start);
80         file->tag.set_property("PREVIEW_END", preview_end);
81         file->append_tag();
82         file->tag.set_title("/LOCALSESSION");
83         file->append_tag();
84         file->append_newline();
85         file->append_newline();
88 void LocalSession::synchronize_params(LocalSession *that)
90         loop_playback = that->loop_playback;
91         loop_start = that->loop_start;
92         loop_end = that->loop_end;
93         preview_start = that->preview_start;
94         preview_end = that->preview_end;
98 void LocalSession::load_xml(FileXML *file, unsigned long load_flags)
100         if(load_flags & LOAD_SESSION)
101         {
102                 clipboard_length = 0;
103 // Overwritten by MWindow::load_filenames       
104                 file->tag.get_property("CLIP_TITLE", clip_title);
105                 file->tag.get_property("CLIP_NOTES", clip_notes);
106                 file->tag.get_property("FOLDER", folder);
107                 loop_playback = file->tag.get_property("LOOP_PLAYBACK", 0);
108                 loop_start = file->tag.get_property("LOOP_START", (double)0);
109                 loop_end = file->tag.get_property("LOOP_END", (double)0);
110                 selectionstart = file->tag.get_property("SELECTION_START", (double)0);
111                 selectionend = file->tag.get_property("SELECTION_END", (double)0);
112                 track_start = file->tag.get_property("TRACK_START", track_start);
113                 view_start = file->tag.get_property("VIEW_START", view_start);
114                 zoom_sample = file->tag.get_property("ZOOM_SAMPLE", zoom_sample);
115                 zoom_y = file->tag.get_property("ZOOMY", zoom_y);
116                 zoom_track = file->tag.get_property("ZOOM_TRACK", zoom_track);
117                 preview_start = file->tag.get_property("PREVIEW_START", preview_start);
118                 preview_end = file->tag.get_property("PREVIEW_END", preview_end);
119         }
121         if(load_flags & LOAD_TIMEBAR)
122         {
123                 in_point = file->tag.get_property("IN_POINT", (double)-1);
124                 out_point = file->tag.get_property("OUT_POINT", (double)-1);
125         }
128 void LocalSession::boundaries()
130         zoom_sample = MAX(1, zoom_sample);
133 int LocalSession::load_defaults(Defaults *defaults)
135         loop_playback = defaults->get("LOOP_PLAYBACK", 0);
136         loop_start = defaults->get("LOOP_START", (double)0);
137         loop_end = defaults->get("LOOP_END", (double)0);
138         selectionstart = defaults->get("SELECTIONSTART", selectionstart);
139         selectionend = defaults->get("SELECTIONEND", selectionend);
140 //      track_start = defaults->get("TRACK_START", 0);
141 //      view_start = defaults->get("VIEW_START", 0);
142         zoom_sample = defaults->get("ZOOM_SAMPLE", 1);
143         zoom_y = defaults->get("ZOOMY", 64);
144         zoom_track = defaults->get("ZOOM_TRACK", 64);
145         return 0;
148 int LocalSession::save_defaults(Defaults *defaults)
150         defaults->update("LOOP_PLAYBACK", loop_playback);
151         defaults->update("LOOP_START", loop_start);
152         defaults->update("LOOP_END", loop_end);
153         defaults->update("SELECTIONSTART", selectionstart);
154         defaults->update("SELECTIONEND", selectionend);
155         defaults->update("TRACK_START", track_start);
156         defaults->update("VIEW_START", view_start);
157         defaults->update("ZOOM_SAMPLE", zoom_sample);
158         defaults->update("ZOOMY", zoom_y);
159         defaults->update("ZOOM_TRACK", zoom_track);
160 //      defaults->update("PREVIEW_START", preview_start);
161 //      defaults->update("PREVIEW_END", preview_end);
162         return 0;
166 double LocalSession::get_selectionstart()
168         if(in_point >= 0)
169                 return in_point;
170         else
171         if(out_point >= 0)
172                 return out_point;
173         else
174                 return selectionstart;
177 double LocalSession::get_selectionend()
179         if(out_point >= 0)
180                 return out_point;
181         else
182         if(in_point >= 0)
183                 return in_point;
184         else
185                 return selectionend;