#include "swindow.h"
#include "theme.h"
#include "trackcanvas.h"
+#include "trackpopup.h"
#include "trackscroll.h"
#include "tracks.h"
#include "transitionpopup.h"
statusbar = 0;
zoombar = 0;
mainclock = 0;
+ track_menu = 0;
edit_menu = 0;
plugin_menu = 0;
keyframe_menu = 0;
// cursor->create_objects();
+ if(debug) printf("MWindowGUI::create_objects %d\n", __LINE__);
+ add_subwindow(track_menu = new TrackPopup(mwindow, this));
+ track_menu->create_objects();
if(debug) printf("MWindowGUI::create_objects %d\n", __LINE__);
add_subwindow(edit_menu = new EditPopup(mwindow, this));
edit_menu->create_objects();
}
}
-void MWindowGUI::draw_canvas(int mode /* = 0 */, int hide_cursor /* = 1 */)
+void MWindowGUI::draw_canvas(int redraw, int hide_cursor)
{
- if(mode != IGNORE_THREAD)
- {
- resource_thread->stop_draw(1);
- }
-
+ resource_thread->stop_draw(0);
- for(int i = 0; i < TOTAL_PANES; i++)
- {
- if(pane[i])
- {
+ int mode = redraw ? FORCE_REDRAW : NORMAL_DRAW;
+ for(int i = 0; i < TOTAL_PANES; i++) {
+ if( pane[i] )
pane[i]->canvas->draw(mode, hide_cursor);
- }
- }
-
-
- if(mode != IGNORE_THREAD)
- {
- resource_thread->start_draw();
}
+ resource_thread->start_draw();
}
void MWindowGUI::flash_canvas(int flush)
{
if(pane[i])
{
- pane[i]->update(1, 0, 0, 0);
+ pane[i]->update(1, NO_DRAW, 0, 0);
}
}
if(flush) this->flush();
mwindow->edl->tracks->update_y_pixels(mwindow->theme);
- if(do_canvas && do_canvas != IGNORE_THREAD)
- {
+ if( do_canvas != NO_DRAW && do_canvas != IGNORE_THREAD )
resource_thread->stop_draw(1);
- }
for(int i = 0; i < TOTAL_PANES; i++)
{
patchbay);
}
- if(do_canvas && do_canvas != IGNORE_THREAD)
- {
+ if( do_canvas != NO_DRAW && do_canvas != IGNORE_THREAD )
resource_thread->start_draw();
- }
// if(scrollbars) this->get_scrollbars(0);
// if(timebar) this->timebar->update(0);
// Can't age if the cache called this to draw missing picons
// or the GUI is updating the status of the draw toggle.
- if(do_canvas != FORCE_REDRAW && do_canvas != IGNORE_THREAD)
- {
+ if( do_canvas != FORCE_REDRAW && do_canvas != IGNORE_THREAD ) {
unlock_window();
mwindow->age_caches();
lock_window("MWindowGUI::update");
int result = mbuttons->keypress_event();
if( result ) return result;
- Track *this_track = 0;
+ Track *this_track = 0, *first_track = 0;
+ int collapse = 0, packed = 0, overwrite = 0;
+ double position = 0;
- switch(get_keypress()) {
+ switch( get_keypress() ) {
+ case 'A':
+ if( !ctrl_down() || !shift_down() || alt_down() ) break;
+ mwindow->edl->tracks->clear_selected_edits();
+ draw_overlays(1);
+ result = 1;
+ break;
case 'e':
mwindow->toggle_editing_mode();
result = 1;
result = 1;
break;
+ case 'C':
+ packed = 1;
+ case 'c':
+ if( !ctrl_down() || alt_down() ) break;
+ mwindow->selected_to_clipboard(packed);
+ result = 1;
+ break;
+ case 'b':
+ overwrite = -1; // fall thru
+ case 'v':
+ if( !ctrl_down() || alt_down() ) break;
+ if( mwindow->session->current_operation == DROP_TARGETING ) {
+ mwindow->session->current_operation = NO_OPERATION;
+ mwindow->gui->set_editing_mode(1);
+ int pane_no = 0;
+ for( ; pane_no<TOTAL_PANES; ++pane_no ) {
+ if( !pane[pane_no] ) continue;
+ first_track = pane[pane_no]->over_track();
+ if( first_track ) break;
+ }
+ if( first_track ) {
+ int cursor_x = pane[pane_no]->canvas->get_relative_cursor_x();
+ position = mwindow->edl->get_cursor_position(cursor_x, pane_no);
+ }
+ }
+ else
+ position = mwindow->edl->local_session->get_selectionstart();
+ mwindow->paste(position, first_track, 0, overwrite);
+ mwindow->edl->tracks->clear_selected_edits();
+ draw_overlays(1);
+ result = 1;
+ break;
+ case 'M':
+ collapse = 1;
+ case 'm':
+ mwindow->cut_selected_edits(0, collapse);
+ result = 1;
+ break;
+ case 'z':
+ collapse = 1;
+ case 'x':
+ if( !ctrl_down() || alt_down() ) break;
+ mwindow->cut_selected_edits(1, collapse);
+ result = 1;
+ break;
+
case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8':
if( !alt_down() || shift_down() ) break;
if( !selected && this_track ) this_track->record = 1;
}
- update(0, 1, 0, 0, 1, 0, 1);
+ update(0, NORMAL_DRAW, 0, 0, 1, 0, 1);
unlock_window();
mwindow->cwindow->update(0, 1, 1);
lock_window("MWindowGUI::keypress_event 3");
void MWindowGUI::stop_pane_drag()
{
dragging_pane = 0;
- resource_thread->stop_draw(1);
+ resource_thread->stop_draw(0);
if(x_pane_drag)
{
int ProxyToggle::handle_event()
{
int disabled = get_value();
+ mwindow->gui->unlock_window();
if( disabled )
mwindow->disable_proxy();
else
mwindow->enable_proxy();
+ mwindow->gui->lock_window("ProxyToggle::handle_event");
set_tooltip(!disabled ? _("Disable proxy") : _("Enable proxy"));
return 1;
}