1 #include "awindowgui.h"
4 #include "cwindowgui.h"
9 #include "edlsession.h"
10 #include "filesystem.h"
11 #include "keyframepopup.h"
14 #include "localsession.h"
15 #include "mainclock.h"
16 #include "maincursor.h"
18 #include "mainsession.h"
22 #include "mwindowgui.h"
25 #include "pluginpopup.h"
26 #include "samplescroll.h"
27 #include "statusbar.h"
29 #include "trackcanvas.h"
30 #include "trackscroll.h"
32 #include "transitionpopup.h"
33 #include "vwindowgui.h"
37 // the main window uses its own private colormap for video
38 MWindowGUI::MWindowGUI(MWindow *mwindow)
39 : BC_Window(PROGRAM_NAME ": Program",
40 mwindow->session->mwindow_x,
41 mwindow->session->mwindow_y,
42 mwindow->session->mwindow_w,
43 mwindow->session->mwindow_h,
50 this->mwindow = mwindow;
58 MWindowGUI::~MWindowGUI()
63 if(samplescroll) delete samplescroll;
64 if(trackscroll) delete trackscroll;
72 delete transition_menu;
75 void MWindowGUI::get_scrollbars()
77 //printf("MWindowGUI::get_scrollbars 1\n");
78 int64_t h_needed = mwindow->edl->get_tracks_height(mwindow->theme);
79 int64_t w_needed = mwindow->edl->get_tracks_width();
82 view_w = mwindow->theme->mcanvas_w;
83 view_h = mwindow->theme->mcanvas_h;
84 //printf("MWindowGUI::get_scrollbars 1\n");
86 // Scrollbars are constitutive
87 need_xscroll = need_yscroll = 1;
88 view_h = mwindow->theme->mcanvas_h - BC_ScrollBar::get_span(SCROLL_VERT);
89 view_w = mwindow->theme->mcanvas_w - BC_ScrollBar::get_span(SCROLL_HORIZ);
91 // for(int i = 0; i < 2; i++)
93 // if(w_needed > view_w)
96 // view_h = mwindow->theme->mcanvas_h - SCROLL_SPAN;
101 // if(h_needed > view_h)
104 // view_w = mwindow->theme->mcanvas_w - SCROLL_SPAN;
109 //printf("MWindowGUI::get_scrollbars 1\n");
111 if(canvas && (view_w != canvas->get_w() || view_h != canvas->get_h()))
113 canvas->reposition_window(mwindow->theme->mcanvas_x,
114 mwindow->theme->mcanvas_y,
118 //printf("MWindowGUI::get_scrollbars 1\n");
123 add_subwindow(samplescroll = new SampleScroll(mwindow,
127 samplescroll->resize_event();
129 samplescroll->set_position();
133 if(samplescroll) delete samplescroll;
135 mwindow->edl->local_session->view_start = 0;
137 //printf("MWindowGUI::get_scrollbars 1\n");
141 //printf("MWindowGUI::get_scrollbars 1.1 %p %p\n", this, canvas);
143 add_subwindow(trackscroll = new TrackScroll(mwindow,
147 trackscroll->resize_event();
150 //printf("MWindowGUI::get_scrollbars 1.2\n");
151 trackscroll->update_length(mwindow->edl->get_tracks_height(mwindow->theme),
152 mwindow->edl->local_session->track_start,
154 //printf("MWindowGUI::get_scrollbars 1.3\n");
158 if(trackscroll) delete trackscroll;
160 mwindow->edl->local_session->track_start = 0;
162 //printf("get_scrollbars 2 %d %d\n", need_xscroll, w_needed);
165 int MWindowGUI::create_objects()
169 //printf("MWindowGUI::create_objects 1\n");
170 set_icon(mwindow->theme->mwindow_icon);
172 //printf("MWindowGUI::create_objects 1\n");
175 add_subwindow(mainmenu = new MainMenu(mwindow, this));
176 //printf("MWindowGUI::create_objects 1\n");
178 mwindow->theme->get_mwindow_sizes(this, get_w(), get_h());
179 mwindow->theme->draw_mwindow_bg(this);
180 mainmenu->create_objects();
181 //printf("MWindowGUI::create_objects 1\n");
183 add_subwindow(mbuttons = new MButtons(mwindow, this));
184 mbuttons->create_objects();
185 //printf("MWindowGUI::create_objects 1\n");
187 add_subwindow(mwindow->timebar = timebar = new MTimeBar(mwindow,
189 mwindow->theme->mtimebar_x,
190 mwindow->theme->mtimebar_y,
191 mwindow->theme->mtimebar_w,
192 mwindow->theme->mtimebar_h));
193 timebar->create_objects();
194 //printf("MWindowGUI::create_objects 2\n");
196 add_subwindow(mwindow->patches = patchbay = new PatchBay(mwindow, this));
197 patchbay->create_objects();
198 //printf("MWindowGUI::create_objects 1\n");
202 //printf("MWindowGUI::create_objects 1\n");
203 mwindow->gui->add_subwindow(canvas = new TrackCanvas(mwindow, this));
204 canvas->create_objects();
205 //printf("MWindowGUI::create_objects 1\n");
207 add_subwindow(zoombar = new ZoomBar(mwindow, this));
208 zoombar->create_objects();
209 //printf("MWindowGUI::create_objects 1\n");
211 add_subwindow(statusbar = new StatusBar(mwindow, this));
212 statusbar->create_objects();
213 //printf("MWindowGUI::create_objects 1\n");
215 add_subwindow(mainclock = new MainClock(mwindow,
216 mwindow->theme->mclock_x,
217 mwindow->theme->mclock_y,
218 mwindow->theme->mclock_w));
219 mainclock->update(0);
221 //printf("MWindowGUI::create_objects 1\n");
223 cursor = new MainCursor(mwindow, this);
224 cursor->create_objects();
225 //printf("MWindowGUI::create_objects 1\n");
227 add_subwindow(edit_menu = new EditPopup(mwindow, this));
228 edit_menu->create_objects();
229 //printf("MWindowGUI::create_objects 1\n");
231 add_subwindow(plugin_menu = new PluginPopup(mwindow, this));
232 plugin_menu->create_objects();
233 //printf("MWindowGUI::create_objects 1\n");
235 add_subwindow(keyframe_menu = new KeyframePopup(mwindow, this));
236 keyframe_menu->create_objects();
238 add_subwindow(transition_menu = new TransitionPopup(mwindow, this));
239 transition_menu->create_objects();
240 //printf("MWindowGUI::create_objects 1\n");
243 //printf("MWindowGUI::create_objects 1\n");
247 void MWindowGUI::update_title(char *path)
250 char filename[BCTEXTLEN], string[BCTEXTLEN];
251 fs.extract_name(filename, path);
252 sprintf(string, PROGRAM_NAME ": %s", filename);
254 //printf("MWindowGUI::update_title %s\n", string);
258 void MWindowGUI::redraw_time_dependancies()
260 zoombar->redraw_time_dependancies();
262 mainclock->update(mwindow->edl->local_session->selectionstart);
265 int MWindowGUI::focus_in_event()
267 cursor->focus_in_event();
271 int MWindowGUI::focus_out_event()
273 cursor->focus_out_event();
278 int MWindowGUI::resize_event(int w, int h)
280 mwindow->session->mwindow_w = w;
281 mwindow->session->mwindow_h = h;
282 mwindow->theme->get_mwindow_sizes(this, w, h);
283 mwindow->theme->draw_mwindow_bg(this);
285 mainmenu->reposition_window(0, 0, w, mainmenu->get_h());
286 mbuttons->resize_event();
287 statusbar->resize_event();
288 timebar->resize_event();
289 patchbay->resize_event();
290 zoombar->resize_event();
292 canvas->resize_event();
297 void MWindowGUI::update(int scrollbars,
305 //TRACE("MWindowGUI::update 1");
306 mwindow->edl->tracks->update_y_pixels(mwindow->theme);
307 //TRACE("MWindowGUI::update 1");
308 if(scrollbars) this->get_scrollbars();
309 //TRACE("MWindowGUI::update 1");
310 if(timebar) this->timebar->update();
311 //TRACE("MWindowGUI::update 1");
312 if(zoombar) this->zoombar->update();
313 //TRACE("MWindowGUI::update 1");
314 if(patchbay) this->patchbay->update();
315 //TRACE("MWindowGUI::update 1");
316 if(clock) this->mainclock->update(mwindow->edl->local_session->selectionstart);
317 //TRACE("MWindowGUI::update 1");
320 this->canvas->draw(canvas == 2);
321 this->cursor->show();
322 this->canvas->flash();
323 this->canvas->activate();
325 //TRACE("MWindowGUI::update 1");
326 if(buttonbar) mbuttons->update();
327 //TRACE("MWindowGUI::update 100");
330 int MWindowGUI::visible(int64_t x1, int64_t x2, int64_t view_x1, int64_t view_x2)
332 return (x1 >= view_x1 && x1 < view_x2) ||
333 (x2 > view_x1 && x2 <= view_x2) ||
334 (x1 <= view_x1 && x2 >= view_x2);
338 int MWindowGUI::show_message(char *message, int color)
340 //printf("MWindowGUI::show_message %s %d\n", message, color);
341 statusbar->status_text->set_color(color);
342 statusbar->status_text->update(message);
346 // Drag motion called from other window
347 int MWindowGUI::drag_motion()
349 if(get_hidden()) return 0;
351 canvas->drag_motion();
355 int MWindowGUI::drag_stop()
357 if(get_hidden()) return 0;
359 int result = canvas->drag_stop();
363 void MWindowGUI::default_positions()
365 //printf("MWindowGUI::default_positions 1\n");
366 mwindow->vwindow->gui->lock_window("MWindowGUI::default_positions");
367 mwindow->cwindow->gui->lock_window("MWindowGUI::default_positions");
368 mwindow->awindow->gui->lock_window("MWindowGUI::default_positions");
370 // printf("MWindowGUI::default_positions 1 %d %d %d %d\n", mwindow->session->vwindow_x,
371 // mwindow->session->vwindow_y,
372 // mwindow->session->vwindow_w,
373 // mwindow->session->vwindow_h);
374 reposition_window(mwindow->session->mwindow_x,
375 mwindow->session->mwindow_y,
376 mwindow->session->mwindow_w,
377 mwindow->session->mwindow_h);
378 mwindow->vwindow->gui->reposition_window(mwindow->session->vwindow_x,
379 mwindow->session->vwindow_y,
380 mwindow->session->vwindow_w,
381 mwindow->session->vwindow_h);
382 mwindow->cwindow->gui->reposition_window(mwindow->session->cwindow_x,
383 mwindow->session->cwindow_y,
384 mwindow->session->cwindow_w,
385 mwindow->session->cwindow_h);
386 mwindow->awindow->gui->reposition_window(mwindow->session->awindow_x,
387 mwindow->session->awindow_y,
388 mwindow->session->awindow_w,
389 mwindow->session->awindow_h);
390 //printf("MWindowGUI::default_positions 1\n");
392 resize_event(mwindow->session->mwindow_w,
393 mwindow->session->mwindow_h);
394 //printf("MWindowGUI::default_positions 1\n");
395 mwindow->vwindow->gui->resize_event(mwindow->session->vwindow_w,
396 mwindow->session->vwindow_h);
397 //printf("MWindowGUI::default_positions 1\n");
398 mwindow->cwindow->gui->resize_event(mwindow->session->cwindow_w,
399 mwindow->session->cwindow_h);
400 //printf("MWindowGUI::default_positions 1\n");
401 mwindow->awindow->gui->resize_event(mwindow->session->awindow_w,
402 mwindow->session->awindow_h);
404 //printf("MWindowGUI::default_positions 1\n");
407 mwindow->vwindow->gui->flush();
408 mwindow->cwindow->gui->flush();
409 mwindow->awindow->gui->flush();
411 mwindow->vwindow->gui->unlock_window();
412 mwindow->cwindow->gui->unlock_window();
413 mwindow->awindow->gui->unlock_window();
414 //printf("MWindowGUI::default_positions 2\n");
433 int MWindowGUI::repeat_event(int64_t duration)
435 // if(duration == 100)
436 // mwindow->sync_parameters(CHANGE_ALL);
437 return cursor->repeat_event(duration);
441 int MWindowGUI::translation_event()
443 //printf("MWindowGUI::translation_event 1 %d %d\n", get_x(), get_y());
444 mwindow->session->mwindow_x = get_x();
445 mwindow->session->mwindow_y = get_y();
450 int MWindowGUI::save_defaults(Defaults *defaults)
452 defaults->update("MWINDOWWIDTH", get_w());
453 defaults->update("MWINDOWHEIGHT", get_h());
454 mainmenu->save_defaults(defaults);
455 BC_WindowBase::save_defaults(defaults);
458 int MWindowGUI::keypress_event()
460 //printf("MWindowGUI::keypress_event 1 %d\n", get_keypress());
462 result = mbuttons->keypress_event();
467 int MWindowGUI::close_event()
472 int MWindowGUI::menu_h()
474 return mainmenu->get_h();