Credit Andrew - improve in-tree documentation
[goodguy/cinelerra.git] / cinelerra / swindow.h
1 #ifndef __SWINDOW_H__
2 #define __SWINDOW_H__
3
4 #include <stdio.h>
5 #include <stdint.h>
6
7 #include "arraylist.h"
8 #include "guicast.h"
9 #include "mwindow.inc"
10 #include "swindow.inc"
11
12 class SWindow : public Thread
13 {
14 public:
15         MWindow *mwindow;
16         Mutex *window_lock;
17         Condition *swin_lock;
18         SWindowGUI *gui;
19
20         void start();
21         void stop();
22         void run();
23         void run_swin();
24         void paste_subttl();
25         int update_selection();
26         int done, gui_done;
27
28         SWindow(MWindow *mwindow);
29         ~SWindow();
30 };
31
32
33 class SWindowOK : public BC_OKButton
34 {
35 public:
36         SWindowGUI *gui;
37
38         int button_press_event();
39         int keypress_event();
40
41         SWindowOK(SWindowGUI *gui, int x, int y);
42         ~SWindowOK();
43 };
44
45 class SWindowCancel : public BC_CancelButton
46 {
47 public:
48         SWindowGUI *gui;
49
50         int button_press_event();
51
52         SWindowCancel(SWindowGUI *gui, int x, int y);
53         ~SWindowCancel();
54 };
55
56 class SWindowLoadPath : public BC_TextBox
57 {
58 public:
59         SWindowGUI *sw_gui;
60
61         SWindowLoadPath(SWindowGUI *gui, int x, int y, char *path);
62         ~SWindowLoadPath();
63
64         int handle_event();
65 };
66
67 class SWindowLoadFile : public BC_GenericButton
68 {
69 public:
70         SWindowGUI *sw_gui;
71
72         int handle_event();
73
74         SWindowLoadFile(SWindowGUI *gui, int x, int y);
75         ~SWindowLoadFile();
76 };
77
78 class SWindowSaveFile : public BC_GenericButton
79 {
80 public:
81         SWindowGUI *sw_gui;
82
83         int handle_event();
84
85         SWindowSaveFile(SWindowGUI *gui, int x, int y);
86         ~SWindowSaveFile();
87 };
88
89
90 class ScriptLines
91 {
92         int allocated, used;
93 public:
94         int lines;
95         char *text;
96         void append(char *cp);
97         int size() { return used; }
98         int break_lines();
99         int get_text_rows();
100         char *get_text_row(int n);
101
102         ScriptLines();
103         ~ScriptLines();
104 };
105
106 class ScriptScroll : public BC_ScrollBar
107 {
108 public:
109         SWindowGUI *sw_gui;
110
111         int handle_event();
112
113         ScriptScroll(SWindowGUI *gui, int x, int y, int w);
114         ~ScriptScroll();
115 };
116
117 class ScriptPosition : public BC_TumbleTextBox
118 {
119 public:
120         SWindowGUI *sw_gui;
121
122         int handle_event();
123
124         ScriptPosition(SWindowGUI *gui, int x, int y, int w, int v=0, int mn=0, int mx=0);
125         ~ScriptPosition();
126 };
127
128 class ScriptEntry : public BC_ScrollTextBox
129 {
130 public:
131         SWindowGUI *sw_gui;
132
133         char *ttext;
134         void set_text(char *text, int isz=-1);
135         int handle_event();
136
137         ScriptEntry(SWindowGUI *gui, int x, int y, int w, int rows, char *text);
138         ScriptEntry(SWindowGUI *gui, int x, int y, int w, int rows);
139         ~ScriptEntry();
140 };
141
142 class ScriptPrev : public BC_GenericButton
143 {
144 public:
145         SWindowGUI *sw_gui;
146
147         int handle_event();
148         ScriptPrev(SWindowGUI *gui, int x, int y);
149         ~ScriptPrev();
150 };
151
152 class ScriptNext : public BC_GenericButton
153 {
154 public:
155         SWindowGUI *sw_gui;
156
157         int handle_event();
158         ScriptNext(SWindowGUI *gui, int x, int y);
159         ~ScriptNext();
160 };
161
162 class ScriptPaste : public BC_GenericButton
163 {
164 public:
165         SWindowGUI *sw_gui;
166
167         int handle_event();
168         ScriptPaste(SWindowGUI *gui, int x, int y);
169         ~ScriptPaste();
170 };
171
172 class ScriptClear : public BC_GenericButton
173 {
174 public:
175         SWindowGUI *sw_gui;
176
177         int handle_event();
178         ScriptClear(SWindowGUI *gui, int x, int y);
179         ~ScriptClear();
180 };
181
182 class SWindowGUI : public BC_Window
183 {
184         static int max(int a,int b) { return a>b ? a : b; }
185 public:
186         SWindow *swindow;
187         BC_OKButton *ok;
188         BC_CancelButton *cancel;
189         SWindowLoadPath *load_path;
190         SWindowLoadFile *load_file;
191         SWindowSaveFile *save_file;
192         BC_Title *script_filesz;
193         BC_Title *script_lines;
194         BC_Title *script_entries;
195         BC_Title *script_texts;
196         BC_Title *script_title;
197         BC_Title *line_title;
198         ScriptPrev *prev_script;
199         ScriptNext *next_script;
200         ScriptPaste *paste_script;
201         ScriptClear *clear_script;
202         ScriptPosition *script_position;
203         ScriptEntry *script_entry;
204         ScriptEntry *line_entry;
205         ScriptScroll *script_scroll;
206         int pad;
207         char *blank_line;
208
209         char script_path[BCTEXTLEN];
210         ArrayList<ScriptLines *> script;
211
212         void create_objects();
213         void load();
214         void stop(int v);
215         int translation_event();
216         int resize_event(int w, int h);
217         void load_defaults();
218         void save_defaults();
219         void load_script();
220         void load_script(FILE *fp);
221         int load_script_line(FILE *fp);
222         void set_script_pos(int64_t entry_no, int text_no=0);
223         int load_selection();
224         int load_selection(int pos, int row);
225         int load_prev_selection();
226         int load_next_selection();
227         int update_selection();
228         int paste_text(const char *text, double start, double end);
229         int paste_selection();
230         int clear_selection();
231         void save_spumux_data();
232
233         int ok_x, ok_y, ok_w, ok_h;
234         int cancel_x, cancel_y, cancel_w, cancel_h;
235         int64_t script_entry_no, script_text_no;
236         int64_t script_line_no, script_text_lines;
237         int text_font, text_rowsz;
238
239         SWindowGUI(SWindow *swindow, int x, int y, int w, int h);
240         ~SWindowGUI();
241
242 };
243
244
245 class SubttlSWin : public BC_MenuItem
246 {
247 public:
248         MWindow *mwindow;
249         int handle_event();
250
251         SubttlSWin(MWindow *mwindow);
252         ~SubttlSWin();
253 };
254
255
256 #endif