4691fc0781b41a75fac87e57468bfb6194269fdc
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / cwindowtool.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 CWINDOWTOOL_H
23 #define CWINDOWTOOL_H
24
25 #include "condition.inc"
26 #include "cwindowgui.inc"
27 #include "cwindowtool.inc"
28 #include "guicast.h"
29 #include "keyframe.inc"
30 #include "maskauto.inc"
31 #include "maskautos.inc"
32 #include "mwindow.inc"
33
34
35 // This common thread supports all the tool GUI's.
36 class CWindowTool : public Thread
37 {
38 public:
39         CWindowTool(MWindow *mwindow, CWindowGUI *gui);
40         ~CWindowTool();
41
42 // Called depending on state of toggle button
43         void start_tool(int operation);
44         void stop_tool();
45
46 // Called when window is visible
47         void show_tool();
48         void hide_tool();
49
50         void run();
51         void update_show_window();
52         void raise_window();
53         void update_values();
54
55         MWindow *mwindow;
56         CWindowGUI *gui;
57         CWindowToolGUI *tool_gui;
58         int done;
59         int current_tool;
60         Condition *input_lock;
61         Condition *output_lock;
62 // Lock run and update_values
63         Mutex *tool_gui_lock;
64 };
65
66 class CWindowToolGUI : public BC_Window
67 {
68 public:
69         CWindowToolGUI(MWindow *mwindow,
70                 CWindowTool *thread,
71                 const char *title,
72                 int w,
73                 int h);
74         ~CWindowToolGUI();
75
76         virtual void create_objects() {};
77 // Update the keyframe from text boxes
78         virtual void handle_event() {};
79 // Update text boxes from keyframe here
80         virtual void update() {};
81 // Update EDL and preview only
82         virtual void update_preview() {};
83         int current_operation;
84         int close_event();
85         int keypress_event();
86         int translation_event();
87
88         MWindow *mwindow;
89         CWindowTool *thread;
90         CWindowCoord *event_caller;
91 };
92
93 class CWindowCoord : public BC_TumbleTextBox
94 {
95 public:
96         CWindowCoord(CWindowToolGUI *gui, int x, int y, float value, int logincrement);
97         CWindowCoord(CWindowToolGUI *gui, int x, int y, int value);
98
99 // Calls the window's handle_event
100         int handle_event();
101
102         CWindowToolGUI *gui;
103 };
104
105 class CWindowCropOK : public BC_GenericButton
106 {
107 public:
108         CWindowCropOK(MWindow *mwindow, CWindowToolGUI *gui, int x, int y);
109 // Perform the cropping operation
110         int handle_event();
111         int keypress_event();
112         MWindow *mwindow;
113         CWindowToolGUI *gui;
114 };
115
116 class CWindowCropGUI : public CWindowToolGUI
117 {
118 public:
119         CWindowCropGUI(MWindow *mwindow, CWindowTool *thread);
120         ~CWindowCropGUI();
121         void create_objects();
122         void update();
123 // Update the gui
124         void handle_event();
125         CWindowCoord *x1, *y1, *width, *height;
126 };
127
128 class CWindowMaskItems : public ArrayList<BC_ListBoxItem*>
129 {
130 public:
131         CWindowMaskItems() {}
132         ~CWindowMaskItems() { remove_all_objects(); }
133 };
134
135 class CWindowMaskName : public BC_PopupTextBox
136 {
137 public:
138         CWindowMaskName(MWindow *mwindow, CWindowToolGUI *gui, int x, int y, const char *text);
139         ~CWindowMaskName();
140         MWindow *mwindow;
141         CWindowToolGUI *gui;
142         CWindowMaskItems mask_items;
143
144         int handle_event();
145         void update_items(MaskAuto *keyframe);
146 };
147
148 class CWindowMaskFade : public BC_TumbleTextBox
149 {
150 public:
151         CWindowMaskFade(MWindow *mwindow, CWindowToolGUI *gui, int x, int y);
152         ~CWindowMaskFade();
153         int update(float v);
154         int update_value(float v);
155         int handle_event();
156         MWindow *mwindow;
157         CWindowToolGUI *gui;
158 };
159
160 class CWindowMaskFadeSlider : public BC_ISlider
161 {
162 public:
163         CWindowMaskFadeSlider(MWindow *mwindow, CWindowToolGUI *gui,
164                 int x, int y, int w);
165         ~CWindowMaskFadeSlider();
166         int handle_event();
167         int update(int64_t v);
168         char *get_caption() { return 0; }
169         MWindow *mwindow;
170         CWindowToolGUI *gui;
171         int stick;
172         Timer *timer;
173 };
174
175 class CWindowMaskMode : public BC_Toggle
176 {
177 public:
178         CWindowMaskMode(MWindow *mwindow, CWindowToolGUI *gui, int x, int y);
179         ~CWindowMaskMode();
180         int handle_event();
181         MWindow *mwindow;
182         CWindowToolGUI *gui;
183 };
184
185 class CWindowMaskDelMask : public BC_GenericButton
186 {
187 public:
188         CWindowMaskDelMask(MWindow *mwindow, CWindowToolGUI *gui, int x, int y);
189         int handle_event();
190         MWindow *mwindow;
191         CWindowToolGUI *gui;
192 };
193
194 class CWindowMaskAffectedPoint : public BC_TumbleTextBox
195 {
196 public:
197         CWindowMaskAffectedPoint(MWindow *mwindow, CWindowToolGUI *gui, int x, int y);
198         ~CWindowMaskAffectedPoint();
199         int handle_event();
200         MWindow *mwindow;
201         CWindowToolGUI *gui;
202 };
203
204 class CWindowMaskFocus : public BC_CheckBox
205 {
206 public:
207         CWindowMaskFocus(MWindow *mwindow, CWindowToolGUI *gui, int x, int y);
208         ~CWindowMaskFocus();
209         int handle_event();
210         MWindow *mwindow;
211         CWindowToolGUI *gui;
212 };
213
214 class CWindowMaskDelPoint : public BC_GenericButton
215 {
216 public:
217         CWindowMaskDelPoint(MWindow *mwindow, CWindowToolGUI *gui, int x, int y);
218         int handle_event();
219         int keypress_event();
220         MWindow *mwindow;
221         CWindowToolGUI *gui;
222 };
223
224 class CWindowMaskFeather : public BC_TumbleTextBox
225 {
226 public:
227         CWindowMaskFeather(MWindow *mwindow, CWindowToolGUI *gui, int x, int y);
228         ~CWindowMaskFeather();
229         int update(float v);
230         int update_value(float v);
231         int handle_event();
232         MWindow *mwindow;
233         CWindowToolGUI *gui;
234 };
235
236 class CWindowMaskFeatherSlider : public BC_FSlider
237 {
238 public:
239         CWindowMaskFeatherSlider(MWindow *mwindow, CWindowToolGUI *gui,
240                 int x, int y, int w, float v);
241         ~CWindowMaskFeatherSlider();
242         int handle_event();
243         int update(float v);
244         char *get_caption() { return 0; }
245         MWindow *mwindow;
246         CWindowToolGUI *gui;
247 };
248
249 class CWindowMaskClrMask : public BC_Button
250 {
251 public:
252         CWindowMaskClrMask(MWindow *mwindow, CWindowMaskGUI *gui, int x, int y);
253         ~CWindowMaskClrMask();
254         static int calculate_w(MWindow *mwindow);
255         int handle_event();
256         MWindow *mwindow;
257         CWindowMaskGUI *gui;
258 };
259
260 class CWindowMaskClrFeather : public BC_Button
261 {
262 public:
263         CWindowMaskClrFeather(MWindow *mwindow, CWindowMaskGUI *gui, int x, int y);
264         ~CWindowMaskClrFeather();
265         int handle_event();
266         MWindow *mwindow;
267         CWindowMaskGUI *gui;
268 };
269
270 class CWindowMaskBeforePlugins : public BC_CheckBox
271 {
272 public:
273         CWindowMaskBeforePlugins(CWindowToolGUI *gui, int x, int y);
274         int handle_event();
275         CWindowToolGUI *gui;
276 };
277
278 class CWindowDisableOpenGLMasking : public BC_CheckBox
279 {
280 public:
281         CWindowDisableOpenGLMasking(CWindowToolGUI *gui, int x, int y);
282         int handle_event();
283         CWindowToolGUI *gui;
284 };
285
286 class CWindowMaskGUI : public CWindowToolGUI
287 {
288 public:
289         CWindowMaskGUI(MWindow *mwindow, CWindowTool *thread);
290         ~CWindowMaskGUI();
291         void create_objects();
292         void update();
293         void set_focused(int v, float cx, float cy);
294         void handle_event();
295         void get_keyframe(Track* &track, MaskAutos* &autos, MaskAuto* &keyframe,
296                 SubMask* &mask, MaskPoint* &point, int create_it);
297         void update_preview();
298
299         CWindowMaskName *name;
300         CWindowMaskClrMask *clr_mask;
301         CWindowMaskDelMask *del_mask;
302         CWindowMaskFade *fade;
303         CWindowMaskFadeSlider *fade_slider;
304         CWindowMaskMode *mode;
305         CWindowMaskAffectedPoint *active_point;
306         CWindowMaskDelPoint *del_point;
307         CWindowCoord *x, *y;
308         CWindowMaskFocus *focus;
309         int focused;
310         CWindowCoord *focus_x, *focus_y;
311         CWindowMaskFeather *feather;
312         CWindowMaskFeatherSlider *feather_slider;
313         CWindowMaskBeforePlugins *apply_before_plugins;
314         CWindowDisableOpenGLMasking *disable_opengl_masking;
315 };
316
317
318 class CWindowEyedropGUI : public CWindowToolGUI
319 {
320 public:
321         CWindowEyedropGUI(MWindow *mwindow, CWindowTool *thread);
322         ~CWindowEyedropGUI();
323
324         void handle_event();
325         void create_objects();
326         void update();
327
328         BC_Title *current;
329         CWindowCoord *radius;
330         CWindowEyedropCheckBox *use_max;
331         BC_Title *red, *green, *blue, *y, *u, *v;
332         BC_Title *rgb_hex, *yuv_hex;
333         BC_SubWindow *sample;
334 };
335
336
337 class CWindowEyedropCheckBox : public BC_CheckBox
338 {
339 public:
340         CWindowEyedropCheckBox(MWindow *mwindow, 
341                 CWindowEyedropGUI *gui,
342                 int x, 
343                 int y);
344
345         int handle_event();
346         MWindow *mwindow;
347         CWindowEyedropGUI *gui;
348 };
349
350
351
352 class CWindowCameraGUI : public CWindowToolGUI
353 {
354 public:
355         CWindowCameraGUI(MWindow *mwindow, CWindowTool *thread);
356         ~CWindowCameraGUI();
357         void create_objects();
358         void update();
359         void update_preview();
360
361 // Update the keyframe from text boxes
362         void handle_event();
363 //      BezierAuto* get_keyframe();
364         CWindowCoord *x, *y, *z;
365 private:
366 // Toggles for keyframe curve mode (for camera automation only)
367         CWindowCurveToggle *t_smooth, *t_linear;
368 };
369
370 class CWindowCameraLeft : public BC_Button
371 {
372 public:
373         CWindowCameraLeft(MWindow *mwindow, CWindowCameraGUI *gui, int x, int y);
374         int handle_event();
375         MWindow *mwindow;
376         CWindowCameraGUI *gui;
377 };
378
379 class CWindowCameraCenter : public BC_Button
380 {
381 public:
382         CWindowCameraCenter(MWindow *mwindow, CWindowCameraGUI *gui, int x, int y);
383         int handle_event();
384         MWindow *mwindow;
385         CWindowCameraGUI *gui;
386 };
387
388 class CWindowCameraRight : public BC_Button
389 {
390 public:
391         CWindowCameraRight(MWindow *mwindow, CWindowCameraGUI *gui, int x, int y);
392         int handle_event();
393         MWindow *mwindow;
394         CWindowCameraGUI *gui;
395 };
396
397 class CWindowCameraTop : public BC_Button
398 {
399 public:
400         CWindowCameraTop(MWindow *mwindow, CWindowCameraGUI *gui, int x, int y);
401         int handle_event();
402         MWindow *mwindow;
403         CWindowCameraGUI *gui;
404 };
405
406 class CWindowCameraMiddle : public BC_Button
407 {
408 public:
409         CWindowCameraMiddle(MWindow *mwindow, CWindowCameraGUI *gui, int x, int y);
410         int handle_event();
411         MWindow *mwindow;
412         CWindowCameraGUI *gui;
413 };
414
415 class CWindowCameraBottom : public BC_Button
416 {
417 public:
418         CWindowCameraBottom(MWindow *mwindow, CWindowCameraGUI *gui, int x, int y);
419         int handle_event();
420         MWindow *mwindow;
421         CWindowCameraGUI *gui;
422 };
423
424 class CWindowProjectorGUI : public CWindowToolGUI
425 {
426 public:
427         CWindowProjectorGUI(MWindow *mwindow, CWindowTool *thread);
428         ~CWindowProjectorGUI();
429         void create_objects();
430         void update();
431         void update_preview();
432         void handle_event();
433 //      BezierAuto* get_keyframe();
434         CWindowCoord *x, *y, *z;
435 private:
436 // Toggles for keyframe curve mode (projector automation only)
437         CWindowCurveToggle *t_smooth, *t_linear;
438 };
439
440 class CWindowProjectorLeft : public BC_Button
441 {
442 public:
443         CWindowProjectorLeft(MWindow *mwindow, CWindowProjectorGUI *gui, int x, int y);
444         int handle_event();
445         MWindow *mwindow;
446         CWindowProjectorGUI *gui;
447 };
448
449 class CWindowProjectorCenter : public BC_Button
450 {
451 public:
452         CWindowProjectorCenter(MWindow *mwindow, CWindowProjectorGUI *gui, int x, int y);
453         int handle_event();
454         MWindow *mwindow;
455         CWindowProjectorGUI *gui;
456 };
457
458 class CWindowProjectorRight : public BC_Button
459 {
460 public:
461         CWindowProjectorRight(MWindow *mwindow, CWindowProjectorGUI *gui, int x, int y);
462         int handle_event();
463         MWindow *mwindow;
464         CWindowProjectorGUI *gui;
465 };
466
467 class CWindowProjectorTop : public BC_Button
468 {
469 public:
470         CWindowProjectorTop(MWindow *mwindow, CWindowProjectorGUI *gui, int x, int y);
471         int handle_event();
472         MWindow *mwindow;
473         CWindowProjectorGUI *gui;
474 };
475
476 class CWindowProjectorMiddle : public BC_Button
477 {
478 public:
479         CWindowProjectorMiddle(MWindow *mwindow, CWindowProjectorGUI *gui, int x, int y);
480         int handle_event();
481         MWindow *mwindow;
482         CWindowProjectorGUI *gui;
483 };
484
485 class CWindowProjectorBottom : public BC_Button
486 {
487 public:
488         CWindowProjectorBottom(MWindow *mwindow, CWindowProjectorGUI *gui, int x, int y);
489         int handle_event();
490         MWindow *mwindow;
491         CWindowProjectorGUI *gui;
492 };
493
494
495
496
497 class CWindowRulerGUI : public CWindowToolGUI
498 {
499 public:
500         CWindowRulerGUI(MWindow *mwindow, CWindowTool *thread);
501         ~CWindowRulerGUI();
502         void create_objects();
503         void update();
504 // Update the gui
505         void handle_event();
506
507         BC_TextBox *current;
508         BC_TextBox *point1;
509         BC_TextBox *point2;
510         BC_TextBox *deltas;
511         BC_TextBox *distance;
512         BC_TextBox *angle;
513 };
514
515
516
517 #endif