mixer align audio, track dump tweak, zwdw refresh edl fix, sketcher tweak
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / remotecontrol.C
1
2 #include "bccolors.h"
3 #include "mainsession.h"
4 #include "mwindow.h"
5 #include "mwindowgui.h"
6 #include "record.h"
7 #include "remotecontrol.h"
8
9
10 RemoteWindow::RemoteWindow(RemoteControl *remote_control)
11  : BC_Window(_(PROGRAM_NAME ": RemoteWindow"),
12                 0, 0, 16, 16, -1, -1, 1, 0, 1)
13 {
14         this->remote_control = remote_control;
15 }
16
17 RemoteWindow::~RemoteWindow()
18 {
19 }
20
21
22 RemoteControl::RemoteControl(MWindowGUI *mwindow_gui)
23  : Thread(1, 0, 0)
24 {
25         this->mwindow_gui = mwindow_gui;
26         this->handler = 0;
27         active_lock = new Mutex("RemoteControl::active_lock");
28
29         remote_window = new RemoteWindow(this);
30         Thread::start();
31         remote_window->init_wait();
32         gui = new RemoteGUI(remote_window, this);
33 }
34
35 void RemoteControl::run()
36 {
37         remote_window->run_window();
38 }
39
40 RemoteControl::~RemoteControl()
41 {
42         if( Thread::running() ) {
43                 remote_window->close(1);
44         }
45         Thread::join();
46         delete gui;
47         delete remote_window;
48         delete active_lock;
49 }
50
51
52
53 int RemoteControl::activate(RemoteHandler *handler)
54 {
55         int result = 0;
56         active_lock->lock("RemoteControl::activate");
57         if( !is_active() ) {
58                 if( !handler ) handler = !mwindow_gui->record->running() ?
59                         (RemoteHandler *)mwindow_gui->cwindow_remote_handler :
60                         (RemoteHandler *)mwindow_gui->record_remote_handler ;
61                 gui->lock_window("RemoteControl::activate");
62                 gui->set_active(handler);
63                 gui->set_color(handler->color);
64                 gui->fill_color(handler->color);
65                 gui->unlock_window();
66                 result = 1;
67         }
68         active_lock->unlock();
69         return result;
70 }
71
72 int RemoteControl::deactivate()
73 {
74         int result = 0;
75         active_lock->lock("RemoteControl::deactivate");
76         if( is_active() ) {
77                 gui->set_inactive();
78                 result = 1;
79         }
80         active_lock->unlock();
81         return result;
82 }
83
84 int RemoteControl::remote_key(int key)
85 {
86         if( !is_active() ) return 0;
87         return handler->remote_process_key(this, key);
88 }
89
90 void RemoteControl::set_color(int color)
91 {
92         gui->lock_window("RemoteControl::fill_color");
93         gui->set_color(color);
94         gui->unlock_window();
95 }
96
97 void RemoteControl::fill_color(int color)
98 {
99         gui->lock_window("RemoteControl::fill_color");
100         gui->fill_color(color);
101         gui->unlock_window();
102 }
103
104 RemoteGUI::RemoteGUI(BC_WindowBase *wdw, RemoteControl *remote_control)
105  : BC_Popup(wdw, remote_control->mwindow_gui->mwindow->session->mwindow_x,0,16,16, -1, 1)
106 {
107         this->remote_control = remote_control;
108 }
109
110 RemoteGUI::~RemoteGUI()
111 {
112 }
113
114 void RemoteGUI::set_active(RemoteHandler *handler)
115 {
116         remote_control->handler = handler;
117         show_window();
118         grab_keyboard();
119 }
120
121 void RemoteGUI::set_inactive()
122 {
123         remote_control->handler = 0;
124         ungrab_keyboard();
125         hide_window();
126 }
127
128 void RemoteGUI::
129 fill_color(int color)
130 {
131         set_color(color);
132         draw_box(0, 0, get_w(), get_h());
133         flash();
134 }
135
136 void RemoteGUI::tile_windows(int config)
137 {
138         MWindow *mwindow = remote_control->mwindow_gui->mwindow;
139         if( config == mwindow->session->window_config ) return;
140         lock_window("RemoteGUI::tile_windows");
141         ungrab_keyboard();  hide_window();
142         mwindow->gui->lock_window("RemoteGUI::tile_windows 1");
143         int need_reload = mwindow->tile_windows(config);
144         mwindow->gui->unlock_window();
145         if( !need_reload ) {
146                 show_window();  raise_window();  grab_keyboard();
147                 reposition_window(mwindow->session->mwindow_x,0);
148                 unlock_window();
149         }
150         else {
151                 unlock_window();
152                 mwindow->restart_status = 1;
153                 mwindow->quit();
154         }
155 }
156
157 int RemoteGUI::button_press_event()
158 {
159         remote_control->deactivate();
160         return 1;
161 }
162
163 int RemoteGUI::keypress_event()
164 {
165         int key = get_keypress();
166         int result = remote_control->remote_key(key);
167         if( result < 0 ) {
168                 remote_control->deactivate();
169                 result = 0;
170         }
171         return result;
172 }
173
174 RemoteHandler::
175 RemoteHandler(RemoteGUI *gui, int color)
176 {
177         this->gui = gui;
178         this->color = color;
179 }
180
181 RemoteHandler::~RemoteHandler()
182 {
183 }
184
185