initial commit
[goodguy/history.git] / cinelerra-5.0 / cinelerra / recordgui.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 RECORDGUI_H
23 #define RECORDGUI_H
24
25
26 class RecordGUIBatches;
27 class RecordBatch;
28 class RecordStartType;
29 class RecordStart;
30 class RecordPath;
31 class BrowseButton;
32 class RecordDuration;
33 class RecordSource;
34 class RecordNews;
35 class RecordGUISave;
36 class RecordGUIStartOver;
37 class RecordGUICancel;
38 class RecordGUIMonitorVideo;
39 class RecordGUIMonitorAudio;
40 class RecordGUIAudioMeters;
41 class RecordGUINewBatch;
42 class RecordGUIDeleteBatch;
43 class RecordGUIStartBatches;
44 class RecordGUIStopBatches;
45 class RecordGUIActivateBatch;
46 class RecordStatusThread;
47 class RecordGUIFlash;
48
49 class RecordGUIDCOffset;
50 class RecordGUIDropFrames;
51 class RecordGUIFillFrames;
52 class RecordGUIPowerOff;
53 class RecordGUICommCheck;
54 class RecordGUILabel;
55 class RecordGUIClearLabels;
56 class RecordGUILoop;
57 class RecordGUILoopHr;
58 class RecordGUILoopMin;
59 class RecordGUILoopSec;
60 class RecordGUIModeMenu;
61 class RecordGUIMode;
62 class RecordGUIOK;
63 class RecordGUIReset;
64 class RecordStartoverThread;
65 class EndRecordThread;
66
67 #include "browsebutton.inc"
68 #include "condition.inc"
69 #include "guicast.h"
70 #include "loadmode.inc"
71 #include "maxchannels.h"
72 #include "mutex.inc"
73 #include "mwindow.inc"
74 #include "question.inc"
75 #include "recordgui.inc"
76 #include "record.inc"
77 #include "recordbatches.h"
78 #include "recordmonitor.inc"
79 #include "recordtransport.inc"
80 #include "timeentry.h"
81
82 class RecordGUIBatches : public RecordBatchesGUI
83 {
84 public:
85         RecordGUI *gui;
86
87         int handle_event();
88         int selection_changed();
89
90         RecordGUIBatches(RecordGUI *gui, int x, int y, int w, int h);
91 };
92
93 class RecordGUI : public BC_Window
94 {
95         static int max(int a,int b) { return a>b ? a : b; }
96 public:
97         RecordGUI(MWindow *mwindow, Record *record);
98         ~RecordGUI();
99
100         void create_objects();
101         int resize_event(int w, int h);
102         int translation_event();
103
104         BC_Title *current_operation;
105         BC_Title *position_title;
106         BC_Title *prev_label_title;
107         BC_Title *frames_behind;
108         BC_Title *frames_dropped;
109         BC_Title *framerate;
110         BC_Title *samples_clipped;
111         BC_Title *cron_status;
112         MWindow *mwindow;
113         Record *record;
114         RecordGUIBatches *batch_bay;
115         RecordPath *batch_path;
116         RecordStatusThread *status_thread;
117         TimeEntry *batch_start;
118         TimeEntry *batch_duration;
119         RecordStartType *start_type;
120         RecordTransport *record_transport;
121         BrowseButton *batch_browse;
122         RecordSource *batch_source;
123         RecordGUIModeMenu *batch_mode;
124         RecordGUINewBatch *new_batch;
125         RecordGUIDeleteBatch *delete_batch;
126         RecordGUIStartBatches *start_batches;
127         RecordGUIStopBatches *stop_batches;
128         RecordGUIActivateBatch *activate_batch;
129         RecordGUILabel *label_button;
130         RecordGUIClearLabels *clrlbls_button;
131         RecordGUIDropFrames *drop_frames;
132         RecordGUIFillFrames *fill_frames;
133         RecordGUIPowerOff *power_off;
134         RecordGUICommCheck *commercial_check;
135         RecordGUIMonitorVideo *monitor_video;
136         RecordGUIMonitorAudio *monitor_audio;
137         RecordGUIAudioMeters *meter_audio;
138         RecordGUIFlash *batch_flash;
139         RecordStartoverThread *startover_thread;
140         EndRecordThread *interrupt_thread;
141         LoadMode *load_mode;
142         int flash_color;
143
144         RecordGUILoopHr *loop_hr;
145         RecordGUILoopMin *loop_min;
146         RecordGUILoopSec *loop_sec;
147         RecordGUIReset *reset;
148         RecordGUIDCOffset *dc_offset_button;
149         RecordGUIDCOffsetText *dc_offset_text[MAXCHANNELS];
150         RecordMonitor *monitor_video_window;
151         BC_Meter *meter[MAXCHANNELS];
152         int total_dropped_frames;
153         int total_clipped_samples;
154
155         int set_loop_status(int value);
156         int keypress_event();
157         int set_translation(int x, int y, float z);
158
159         void update_batches();
160         Batch *get_current_batch();
161         Batch *get_editing_batch();
162         void start_flash_batch();
163         void stop_flash_batch();
164         void flash_batch();
165 // Update the batch channel table when edited
166         void update_batch_sources();
167 // Update the batch editing tools
168         void update_batch_tools();
169         void enable_batch_buttons();
170         void disable_batch_buttons();
171
172         void reset_audio();
173         void reset_video();
174         void update_frames_behind(long value);
175         void update_dropped_frames(long value);
176         void update_position(double value);
177         void update_clipped_samples(long value);
178         void update_framerate(double value);
179         void update_video(int dropped, int behind);
180         void update_audio(int channels, double *max, int *over);
181         void update_cron_status(const char *status);
182         void update_power_off(int value);
183         void update_labels(double new_position);
184         int update_prev_label(long new_position);
185         int update_title(BC_Title *title, double position);
186 };
187
188 class RecordGUISave : public BC_Button
189 {
190 public:
191         RecordGUISave(RecordGUI *gui);
192         int handle_event();
193         int keypress_event();
194         RecordGUI *gui;
195 };
196
197
198 class RecordGUICancel : public BC_CancelButton
199 {
200 public:
201         RecordGUICancel(RecordGUI *record_gui);
202         int handle_event();
203         int keypress_event();
204         RecordGUI *gui;
205         Record *record;
206 };
207
208 class RecordGUIOK : public BC_OKButton
209 {
210 public:
211         RecordGUIOK(RecordGUI *record_gui);
212         int handle_event();
213         RecordGUI *gui;
214 };
215
216 class RecordGUIStartBatches : public RecordBatchesGUI::StartBatches
217 {
218 public:
219         RecordGUI *gui;
220         int handle_event();
221         RecordGUIStartBatches(RecordGUI *gui, int x, int y);
222 };
223
224
225 class RecordGUIStopBatches : public RecordBatchesGUI::StopBatches
226 {
227 public:
228         RecordGUI *gui;
229         int handle_event();
230         RecordGUIStopBatches(RecordGUI *gui, int x, int y);
231 };
232
233 class RecordGUIActivateBatch : public RecordBatchesGUI::ActivateBatch
234 {
235 public:
236         RecordGUIActivateBatch(RecordGUI *gui, int x, int y);
237         int handle_event();
238         RecordGUI *gui;
239 };
240
241
242 class RecordGUIStartOver : public BC_GenericButton
243 {
244 public:
245         RecordGUIStartOver(RecordGUI *gui, int x, int y);
246         ~RecordGUIStartOver();
247
248         int handle_event();
249
250         RecordGUI *gui;
251 };
252
253 class EndRecordThread : public Thread
254 {
255 public:
256         EndRecordThread(RecordGUI *record_gui);
257         ~EndRecordThread();
258
259         void start(int is_ok);
260         void run();
261
262         RecordGUI *gui;
263         QuestionWindow *window;
264 // OK Button was pressed
265         int is_ok;
266 };
267
268 class RecordStartoverThread : public Thread
269 {
270 public:
271         RecordStartoverThread(RecordGUI *record_gui);
272         ~RecordStartoverThread();
273         void run();
274
275         RecordGUI *gui;
276         QuestionWindow *window;
277 };
278
279 class RecordBatch : public BC_PopupTextBox
280 {
281 public:
282         RecordBatch(RecordGUI *gui, int x, int y);
283         int handle_event();
284         RecordGUI *gui;
285 };
286
287 class RecordPath : public RecordBatchesGUI::Path
288 {
289 public:
290         RecordGUI *gui;
291         int handle_event();
292         RecordPath(RecordGUI *gui, int x, int y);
293 };
294
295 class RecordStart : public RecordBatchesGUI::StartTime
296 {
297 public:
298         RecordGUI *gui;
299         int handle_event();
300         RecordStart(RecordGUI *gui, int x, int y);
301 };
302
303 class RecordDuration : public RecordBatchesGUI::Duration
304 {
305 public:
306         RecordGUI *gui;
307         int handle_event();
308         RecordDuration(RecordGUI *gui, int x, int y);
309 };
310
311 class RecordSource : public RecordBatchesGUI::Source
312 {
313 public:
314         RecordGUI *gui;
315         int handle_event();
316         RecordSource(RecordGUI *gui, int x, int y);
317 };
318
319 class RecordNews : public RecordBatchesGUI::News
320 {
321 public:
322         RecordNews(RecordGUI *gui, int x, int y);
323         int handle_event();
324         RecordGUI *gui;
325 };
326
327 class RecordGUIDropFrames : public BC_CheckBox
328 {
329 public:
330         RecordGUIDropFrames(RecordGUI *gui, int x, int y);
331         int handle_event();
332         int keypress_event();
333         RecordGUI *gui;
334 };
335
336 class RecordGUIFillFrames : public BC_CheckBox
337 {
338 public:
339         RecordGUIFillFrames(RecordGUI *gui, int x, int y);
340         int handle_event();
341         int keypress_event();
342         RecordGUI *gui;
343 };
344
345 class RecordGUIPowerOff : public BC_CheckBox
346 {
347 public:
348         RecordGUIPowerOff(RecordGUI *gui, int x, int y);
349         int handle_event();
350         int keypress_event();
351         RecordGUI *gui;
352 };
353
354 class RecordGUICommCheck : public BC_CheckBox
355 {
356 public:
357         RecordGUICommCheck(RecordGUI *gui, int x, int y);
358         int handle_event();
359         int keypress_event();
360         RecordGUI *gui;
361 };
362
363 class RecordGUIMonitorVideo : public BC_CheckBox
364 {
365 public:
366         RecordGUIMonitorVideo(RecordGUI *gui, int x, int y);
367         int handle_event();
368         int keypress_event();
369         RecordGUI *gui;
370 };
371
372 class RecordGUIMonitorAudio : public BC_CheckBox
373 {
374 public:
375         RecordGUIMonitorAudio(RecordGUI *gui, int x, int y);
376         int handle_event();
377         int keypress_event();
378         RecordGUI *gui;
379 };
380
381 class RecordGUIAudioMeters : public BC_CheckBox
382 {
383 public:
384         RecordGUIAudioMeters(RecordGUI *gui, int x, int y);
385         int handle_event();
386         int keypress_event();
387         RecordGUI *gui;
388 };
389
390 class RecordGUINewBatch : public RecordBatchesGUI::NewBatch
391 {
392 public:
393         RecordGUI *gui;
394         int handle_event();
395         RecordGUINewBatch(RecordGUI *gui, int x, int y);
396 };
397
398
399 class RecordGUIDeleteBatch : public RecordBatchesGUI::DeleteBatch
400 {
401 public:
402         RecordGUI *gui;
403         int handle_event();
404         RecordGUIDeleteBatch(RecordGUI *gui, int x, int y);
405 };
406
407 class RecordGUILabel : public BC_GenericButton
408 {
409 public:
410         RecordGUILabel(RecordGUI *gui, int x, int y);
411         ~RecordGUILabel();
412
413         int handle_event();
414         int keypress_event();
415         RecordGUI *gui;
416 };
417
418 class RecordGUIClearLabels : public BC_GenericButton
419 {
420 public:
421         RecordGUIClearLabels(RecordGUI *gui, int x, int y);
422         ~RecordGUIClearLabels();
423
424         int handle_event();
425         RecordGUI *gui;
426 };
427
428 // Stop GUI blocking the recording when X11 is busy
429 class RecordStatusThread : public Thread
430 {
431 public:
432         RecordStatusThread(MWindow *mwindow, RecordGUI *gui);
433         ~RecordStatusThread();
434
435         void reset_video();
436         void reset_audio();
437         void update_frames_behind(long value);
438         void update_dropped_frames(long value);
439         void update_position(double value);
440         void update_clipped_samples(long value);
441         void update_framerate(double value);
442         template<class T>
443         void update_status_string(const char *fmt,T &new_value,T &displayed_value,BC_Title *widgit);
444         void run();
445
446         MWindow *mwindow;
447         RecordGUI *gui;
448         long new_dropped_frames, displayed_dropped_frames;
449         long new_frames_behind, displayed_frames_behind;
450         double new_framerate, displayed_framerate;
451         long new_clipped_samples, displayed_clipped_samples;
452         double new_position;
453         int done;
454         Condition *input_lock;
455 };
456
457 class RecordGUIFlash : public Thread
458 {
459 public:
460         RecordGUI *record_gui;
461         Condition *flash_lock;
462         int done;
463
464         void run();
465         RecordGUIFlash(RecordGUI *gui);
466         ~RecordGUIFlash();
467 };
468
469 class RecordGUIModeMenu;
470
471 class RecordGUIModeTextBox : public BC_TextBox
472 {
473 public:
474         RecordGUIModeTextBox(RecordGUIModeMenu *mode_menu,
475                 int x, int y, int w,const char *text);
476         ~RecordGUIModeTextBox();
477         RecordGUI *record_gui;
478         RecordGUIModeMenu *mode_menu;
479         int handle_event();
480 };
481
482 class RecordGUIModeListBox : public BC_ListBox
483 {
484 public:
485         RecordGUIModeListBox(RecordGUIModeMenu *mode_menu);
486         ~RecordGUIModeListBox();
487         RecordGUI *record_gui;
488         RecordGUIModeMenu *mode_menu;
489         int handle_event();
490 };
491
492 class RecordGUIModeMenu
493 {
494 public:
495         RecordGUIModeMenu(RecordGUI *record_gui,int x, int y, int w, const char *text);
496         ~RecordGUIModeMenu();
497
498         int handle_event();
499         void create_objects();
500         void update(int value);
501         int get_w();
502         int get_h();
503
504         RecordGUI *record_gui;
505         RecordGUIModeTextBox *textbox;
506         RecordGUIModeListBox *listbox;
507         ArrayList<BC_ListBoxItem*> modes;
508         int value;
509 };
510
511
512 class RecordGUIDCOffset : public BC_Button
513 {
514 public:
515         RecordGUIDCOffset(MWindow *mwindow, int y);
516         ~RecordGUIDCOffset();
517
518         int handle_event();
519         int keypress_event();
520 };
521
522 class RecordGUIDCOffsetText : public BC_TextBox
523 {
524 public:
525         RecordGUIDCOffsetText(char *text, int y, int number);
526         ~RecordGUIDCOffsetText();
527
528         int handle_event();
529         int number;
530 };
531
532 class RecordGUIReset : public BC_Button
533 {
534 public:
535         RecordGUIReset(MWindow *mwindow, RecordGUI *gui, int y);
536         ~RecordGUIReset();
537
538         int handle_event();
539         RecordGUI *gui;
540 };
541
542 class RecordGUIResetTranslation : public BC_Button
543 {
544 public:
545         RecordGUIResetTranslation(MWindow *mwindow, RecordGUI *gui, int y);
546         ~RecordGUIResetTranslation();
547
548         int handle_event();
549         RecordGUI *gui;
550 };
551
552
553
554
555
556
557
558 #endif