no longer need ffmpeg patch0 which was for Termux
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / strack.h
1
2 /*
3  * CINELERRA
4  * Copyright (C) 2008 Adam Williams <broadcast at earthling dot net>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  *
20  */
21
22 #ifndef STRACK_H
23 #define STRACK_H
24
25 #include "arraylist.h"
26 #include "automation.h"
27 #include "autoconf.inc"
28 #include "bcwindowbase.inc"
29 #include "edl.inc"
30 #include "edit.h"
31 #include "edits.h"
32 #include "filexml.inc"
33 #include "floatautos.inc"
34 #include "linklist.h"
35 #include "maxchannels.h"
36 #include "mwindow.h"
37 #include "panautos.inc"
38 #include "patchbay.h"
39 #include "patchgui.h"
40 #include "track.h"
41
42
43
44
45 class STrack : public Track
46 {
47 public:
48         STrack(EDL *edl, Tracks *tracks);
49         ~STrack();
50
51         int load_defaults(BC_Hash *defaults);
52         void synchronize_params(Track *track);
53         int copy_settings(Track *track);
54         int save_header(FileXML *file);
55         int save_derived(FileXML *file);
56         int load_header(FileXML *file, uint32_t load_flags);
57         int load_derived(FileXML *file, uint32_t load_flags);
58         void create_objects();
59         void set_default_title();
60         int vertical_span(Theme *theme);
61         int64_t to_units(double position, int round);
62         double to_doubleunits(double position);
63         double from_units(int64_t position);
64         int get_dimensions(int pane_number,
65                 double &view_start,
66                 double &view_units,
67                 double &zoom_units);
68         int identical(int64_t sample1, int64_t sample2);
69         int64_t length();
70 };
71
72 class SEdits;
73
74 class SEdit : public Edit
75 {
76         char text[BCTEXTLEN];
77 public:
78         SEdit(EDL *edl, Edits *edits);
79         ~SEdit();
80
81         void copy_from(Edit *edit);
82         int load_properties_derived(FileXML *xml);
83         int copy_properties_derived(FileXML *xml, int64_t length_in_selection);
84         int dump_derived();
85         int64_t get_source_end(int64_t default_);
86         char *get_text() { return text; }
87 };
88
89 class SEdits : public Edits {
90 public:
91         SEdits(EDL *edl, Track *track) : Edits(edl, track) {}
92         Edit* create_edit() { return new SEdit(edl, this); }
93         Edit* append_new_edit() { return append(create_edit()); }
94         Edit* insert_edit_after(Edit* previous_edit) {
95                 return insert_after(previous_edit, create_edit());
96         }
97         //int optimize() { return 0; }
98 };
99
100
101 class SAutomation : public Automation {
102 public:
103         SAutomation(EDL *edl, Track *track) : Automation(edl, track) {}
104         ~SAutomation() {}
105         void create_objects() { Automation::create_objects(); }
106 };
107
108 class SPatchGUI : public PatchGUI
109 {
110 public:
111         SPatchGUI(MWindow *mwindow, PatchBay *patchbay, STrack *track, int x, int y) :
112                 PatchGUI(mwindow, patchbay, track, x, y) { data_type = TRACK_SUBTITLE; }
113         ~SPatchGUI() {}
114
115         void create_objects() { update(x, y); }
116         int reposition(int x, int y) { return PatchGUI::reposition(x, y); }
117         int update(int x, int y) {
118                 return track->vertical_span(mwindow->theme) + PatchGUI::update(x, y);
119         }
120 };
121
122 #endif