rework undo compression, add shift viewer overwr/copy/clip/splice, fix paste edl...
[goodguy/history.git] / cinelerra-5.1 / cinelerra / cwindowgui.C
index da38d010ef2d36baea86effe871926a2d64d371f..37dd35bf20c3c244aead401cf5705b10e811dac6 100644 (file)
@@ -296,6 +296,32 @@ int CWindowGUI::resize_event(int w, int h)
 
 int CWindowGUI::button_press_event()
 {
+       if( current_operation == CWINDOW_NONE &&
+           mwindow->edl != 0 && canvas->get_canvas() &&
+           mwindow->edl->session->cwindow_click2play &&
+           canvas->get_canvas()->get_cursor_over_window() ) {
+               switch( get_buttonpress() ) {
+               case LEFT_BUTTON:
+                       if( !cwindow->playback_engine->is_playing_back ) {
+                               double length = mwindow->edl->tracks->total_playable_length();
+                               double position = cwindow->playback_engine->get_tracking_position();
+                               if( position >= length ) transport->goto_start();
+                       }
+                       return transport->forward_play->handle_event();
+               case MIDDLE_BUTTON:
+                       if( !cwindow->playback_engine->is_playing_back ) {
+                               double position = cwindow->playback_engine->get_tracking_position();
+                               if( position <= 0 ) transport->goto_end();
+                       }
+                       return transport->reverse_play->handle_event();
+               case RIGHT_BUTTON:  // activates popup
+                       break;
+               case WHEEL_UP:
+                       return transport->frame_forward_play->handle_event();
+               case WHEEL_DOWN:
+                       return transport->frame_reverse_play->handle_event();
+               }
+       }
        if(canvas->get_canvas())
                return canvas->button_press_event_base(canvas->get_canvas());
        return 0;
@@ -478,32 +504,58 @@ int CWindowGUI::keypress_event()
                                int shift_down = this->shift_down();
                                unlock_window();
                                stop_transport(0);
-                               mwindow->gui->lock_window("CWindowGUI::keypress_event 2");
+                               mwindow->gui->lock_window("CWindowGUI::keypress_event 5");
                                if( alt_down )
                                        mwindow->prev_edit_handle(shift_down);
                                else
                                        mwindow->move_left();
                                mwindow->gui->unlock_window();
-                               lock_window("CWindowGUI::keypress_event 2");
+                               lock_window("CWindowGUI::keypress_event 6");
                                result = 1;
                        }
                        break;
+
+               case ',':
+                       if( !ctrl_down() && !alt_down() ) {
+                               unlock_window();
+                               stop_transport(0);
+                               mwindow->gui->lock_window("CWindowGUI::keypress_event 7");
+                               mwindow->move_left();
+                               mwindow->gui->unlock_window();
+                               lock_window("CWindowGUI::keypress_event 8");
+                               result = 1;
+                       }
+                       break;
+
                case RIGHT:
                        if( !ctrl_down() ) {
                                int alt_down = this->alt_down();
                                int shift_down = this->shift_down();
                                unlock_window();
                                stop_transport(0);
-                               mwindow->gui->lock_window("CWindowGUI::keypress_event 2");
+                               mwindow->gui->lock_window("CWindowGUI::keypress_event 8");
                                if( alt_down )
                                        mwindow->next_edit_handle(shift_down);
                                else
                                        mwindow->move_right();
                                mwindow->gui->unlock_window();
-                               lock_window("CWindowGUI::keypress_event 2");
+                               lock_window("CWindowGUI::keypress_event 9");
                                result = 1;
                        }
                        break;
+
+               case '.':
+                       if( !ctrl_down() && !alt_down() ) {
+                               unlock_window();
+                               stop_transport(0);
+                               mwindow->gui->lock_window("CWindowGUI::keypress_event 10");
+                               mwindow->move_right();
+                               mwindow->gui->unlock_window();
+                               lock_window("CWindowGUI::keypress_event 11");
+                               result = 1;
+                       }
+                       break;
+
        }
 
        if(!result) result = transport->keypress_event();
@@ -661,28 +713,27 @@ void CWindowGUI::stop_transport(const char *lock_msg)
 
 
 CWindowEditing::CWindowEditing(MWindow *mwindow, CWindow *cwindow)
- : EditPanel(mwindow,
-               cwindow->gui,
-               mwindow->theme->cedit_x,
-               mwindow->theme->cedit_y,
+ : EditPanel(mwindow, cwindow->gui, CWINDOW_ID,
+               mwindow->theme->cedit_x, mwindow->theme->cedit_y,
                mwindow->edl->session->editing_mode,
-               0,
-               1,
-               0,
-               0,
-               1,
-               1,
-               1,
-               1,
-               1,
-               0,
+               0, // use_editing_mode
+               1, // use_keyframe
+               0, // use_splice
+               0, // use_overwrite
+               1, // use_lift
+               1, // use_extract
+               1, // use_copy
+               1, // use_paste
+               1, // use_undo
+               0, // use_fit
                0, // locklabels
-               1,
-               1,
-               1,
-               0,
-               1,
-               0)
+               1, // use_labels
+               1, // use_toclip
+               1, // use_meters
+               1, // use_cut
+               0, // use_commerical
+               0, // use_goto
+               1) // use_clk2play
 {
        this->mwindow = mwindow;
        this->cwindow = cwindow;
@@ -701,14 +752,20 @@ CWrapper(set_inpoint)
 CWrapper(set_outpoint)
 CWrapper(unset_inoutpoint)
 CWrapper(toggle_label)
-CWrapper(prev_label)
-CWrapper(next_label)
-CWrapper(prev_edit)
-CWrapper(next_edit)
+
+#define CWrapper_cut(fn) void CWindowEditing::fn(int cut) { \
+       mwindow->gui->lock_window("CWrapper::" #fn); \
+       EditPanel::fn(cut); \
+       mwindow->gui->unlock_window(); \
+}
+CWrapper_cut(prev_label)
+CWrapper_cut(next_label)
+CWrapper_cut(prev_edit)
+CWrapper_cut(next_edit)
 
 void CWindowEditing::to_clip()
 {
-        mwindow->to_clip(mwindow->edl, _("composer window: "));
+        mwindow->to_clip(mwindow->edl, _("composer window: "), 0);
 }
 
 
@@ -3187,7 +3244,8 @@ int CWindowCanvas::button_press_event()
        gui->y_offset = get_y_offset(mwindow->edl, 0, zoom_y, conformed_w, conformed_h);
 
 // Scroll view
-       if(get_buttonpress() == 2)
+       if( mwindow->edl->session->cwindow_operation != CWINDOW_PROTECT &&
+           get_buttonpress() == 2 )
        {
                gui->current_operation = CWINDOW_SCROLL;
                result = 1;