r602: Fix baver's code... don't insert timecode when show_tc is not set
[cinelerra_cv/mob.git] / cinelerra / cwindow.C
blobffcb756b48d0cadd7ae1e1c6501633462259e409
1 #include "autos.h"
2 #include "bcsignals.h"
3 #include "cplayback.h"
4 #include "ctimebar.h"
5 #include "ctracking.h"
6 #include "cwindow.h"
7 #include "cwindowgui.h"
8 #include "defaults.h"
9 #include "edl.h"
10 #include "edlsession.h"
11 #include "mwindowgui.h"
12 #include "playbackengine.h"
13 #include "playtransport.h"
14 #include "preferences.h"
15 #include "theme.h"
16 #include "track.h"
17 #include "trackcanvas.h"
18 #include "tracks.h"
19 #include "transportque.h"
20 #include "mwindow.h"
24 #include <unistd.h>
28 CWindow::CWindow(MWindow *mwindow)
29  : Thread()
31         this->mwindow = mwindow;
35 CWindow::~CWindow()
37         delete playback_engine;
38         delete playback_cursor;
41 int CWindow::create_objects()
43         destination = mwindow->defaults->get("CWINDOW_DESTINATION", 0);
45         gui = new CWindowGUI(mwindow, this);
46     gui->create_objects();
48         playback_engine = new CPlayback(mwindow, this, gui->canvas);
50 // Start command loop
51         playback_engine->create_objects();
52         gui->transport->set_engine(playback_engine);
53         playback_cursor = new CTracking(mwindow, this);
54         playback_cursor->create_objects();
55     return 0;
58 Track* CWindow::calculate_affected_track()
60         Track* affected_track = 0;
61         for(Track *track = mwindow->edl->tracks->first;
62                 track;
63                 track = track->next)
64         {
65                 if(track->data_type == TRACK_VIDEO &&
66                         track->record)
67                 {
68                         affected_track = track;
69                         break;
70                 }
71         }
72         return affected_track;
75 Auto* CWindow::calculate_affected_auto(Autos *autos, int create)
77         Auto* affected_auto = 0;
79         if(create)
80         {
81                 int total = autos->total();
82                 affected_auto = autos->get_auto_for_editing();
83                 if(total != autos->total())
84                 {
85                         mwindow->gui->lock_window("CWindow::calculate_affected_auto");
86                         mwindow->gui->canvas->draw_overlays();
87                         mwindow->gui->canvas->flash();
88                         mwindow->gui->unlock_window();
89                 }
90         }
91         else
92         {
93                 affected_auto = autos->get_prev_auto(PLAY_FORWARD, affected_auto);
94         }
96         return affected_auto;
99 void CWindow::run()
101         gui->run_window();
104 void CWindow::update(int position, 
105         int overlays, 
106         int tool_window, 
107         int operation,
108         int timebar)
110 //TRACE("CWindow::update 1");
112         if(position)
113         {
114 //printf("CWindow::update 2\n");
115                 gui->lock_window("CWindow::update 1");
116                 gui->slider->set_position();
117                 gui->unlock_window();
118 //printf("CWindow::update 2\n");
119                 playback_engine->que->send_command(CURRENT_FRAME, 
120                         CHANGE_NONE,
121                         mwindow->edl,
122                         1);
123 //printf("CWindow::update 3\n");
124         }
125 //TRACE("CWindow::update 4");
127         gui->lock_window("CWindow::update 2");
130 // Create tool window
131         if(operation)
132         {
133                 gui->set_operation(mwindow->edl->session->cwindow_operation);
134         }
136 //TRACE("CWindow::update 5");
138 // Updated by video device.
139         if(overlays && !position)
140         {
141                 gui->canvas->draw_refresh();
142         }
144 //TRACE("CWindow::update 5");
145 // Update tool parameters
146 // Never updated by someone else
147         if(tool_window || position)
148         {
149                 gui->update_tool();
150         }
152         if(timebar)
153         {
154                 gui->timebar->update(1, 1);
155         }
157 //TRACE("CWindow::update 6");
158         if(!mwindow->edl->session->cwindow_scrollbars)
159                 gui->zoom_panel->update(AUTO_ZOOM);
160         else
161                 gui->zoom_panel->update(mwindow->edl->session->cwindow_zoom);
162 //printf("CWindow::update 6\n");
164         gui->canvas->update_zoom(mwindow->edl->session->cwindow_xscroll,
165                         mwindow->edl->session->cwindow_yscroll, 
166                         mwindow->edl->session->cwindow_zoom);
167 //printf("CWindow::update 6\n");
168         gui->canvas->reposition_window(mwindow->edl, 
169                         mwindow->theme->ccanvas_x,
170                         mwindow->theme->ccanvas_y,
171                         mwindow->theme->ccanvas_w,
172                         mwindow->theme->ccanvas_h);
174 //printf("CWindow::update 6\n");
178         gui->unlock_window();
183 //printf("CWindow::update 7\n");