no longer need ffmpeg patch0 which was for Termux
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / mwindowgui.C
index 5e4dc7bd53560ca7a721d8814f754df314314b7b..3b939df5bb6fe3459c093d3835a83bb02a01e3a0 100644 (file)
@@ -56,6 +56,7 @@
 #include "pluginpopup.h"
 #include "pluginset.h"
 #include "preferences.h"
+#include "proxy.h"
 #include "record.h"
 #include "recordgui.h"
 #include "renderengine.h"
@@ -127,6 +128,8 @@ MWindowGUI::MWindowGUI(MWindow *mwindow)
        cwindow_remote_handler = 0;
        record_remote_handler = 0;
        android_control = 0;
+// *** CONTEXT_HELP ***
+       context_help_set_keyword("Program Window");
 }
 
 
@@ -578,10 +581,9 @@ void MWindowGUI::update_patchbay()
 
 void MWindowGUI::update_proxy_toggle()
 {
-       int value = mwindow->edl->session->proxy_scale == 1 ? 1 : 0;
+       int value = mwindow->edl->session->proxy_state == PROXY_ACTIVE ? 0 : 1;
        proxy_toggle->set_value(value);
-       if( mwindow->edl->session->proxy_scale == 1 &&
-           mwindow->edl->session->proxy_disabled_scale == 1 )
+       if( mwindow->edl->session->proxy_state == PROXY_INACTIVE )
                proxy_toggle->hide();
        else
                proxy_toggle->show();
@@ -1042,6 +1044,7 @@ void MWindowGUI::default_positions()
        mwindow->cwindow->gui->unlock_window();
        mwindow->awindow->gui->unlock_window();
 //printf("MWindowGUI::default_positions 2\n");
+       mwindow->tile_mixers();
 }
 
 
@@ -1089,20 +1092,23 @@ int MWindowGUI::keypress_event()
 
        switch( get_keypress() ) {
        case 'A':
-               if( !alt_down() && ctrl_down() ) {
+               if( !alt_down() ) {
+                       if( !ctrl_down() || !shift_down() ) break;
                        mwindow->edl->tracks->clear_selected_edits();
                        draw_overlays(1);
                        result = 1;
-               }
-               break;
+                       break;
+               } // fall thru
        case 'a':
-               if( !ctrl_down() && alt_down() ) {
-                       stop_transport("MWindowGUI::keypress_event 1");
-                       mwindow->nearest_auto_keyframe(shift_down(),
-                               !ctrl_down() ? PLAY_FORWARD : PLAY_REVERSE);
-                       result = 1;
-               }
-               else if( ctrl_down() && alt_down() ) {
+               if( !alt_down() ) break;
+               stop_transport("MWindowGUI::keypress_event 1");
+               mwindow->nearest_auto_keyframe(shift_down(),
+                       !ctrl_down() ? PLAY_FORWARD : PLAY_REVERSE);
+               result = 1;
+               break;
+
+       case '\'':
+               if( ctrl_down() && alt_down() ) {
                        mwindow->select_edits(1);
                        result = 1;
                }
@@ -1230,6 +1236,32 @@ int MWindowGUI::keypress_event()
                }
                break;
 
+       case '!':
+               if( !ctrl_down() || !shift_down() ) break;
+               {
+                       if( mwindow->session->current_operation != NO_OPERATION ) return 1;
+                       first_track = mwindow->edl->tracks->first;
+                       double start = mwindow->edl->local_session->get_selectionstart();
+                       int64_t pos = first_track->to_units(start, 0);
+                       Edit *edit=first_track->edits->editof(pos, PLAY_FORWARD, 0);
+                       if( !edit || !edit->asset ) return 1;
+                       Asset *asset = edit->asset;
+                       double timecode = asset->timecode != -2 ? asset->timecode :
+                               FFMPEG::get_timecode(asset->path,
+                                       edit->track->data_type, edit->channel,
+                                       mwindow->edl->session->frame_rate);
+                       asset->timecode = timecode;
+                       if( timecode >= 0 ) {
+                               int64_t pos = edit->startproject + edit->startsource;
+                               double position = edit->track->from_units(pos);
+                               mwindow->set_timecode_offset(timecode - position);
+                       }
+                       else
+                               mwindow->set_timecode_offset(0);
+               }
+               result = 1;
+               break;
+
        case UP:
                if( ctrl_down() && !alt_down() )
                        mwindow->expand_y();
@@ -1309,6 +1341,9 @@ int MWindowGUI::keypress_event()
        if(result)
                cursor_motion_event();
 
+       if(!result)
+               result = context_help_check_and_show();
+
        return result;
 }
 
@@ -2367,6 +2402,8 @@ FFMpegToggle::FFMpegToggle(MWindow *mwindow, MButtons *mbuttons, int x, int y)
        this->mwindow = mwindow;
        this->mbuttons = mbuttons;
        set_tooltip(get_value() ? FFMPEG_EARLY_TIP : FFMPEG_LATE_TIP);
+// *** CONTEXT_HELP ***
+       context_help_set_keyword("FFmpeg Early Probe Explanation");
 }
 
 FFMpegToggle::~FFMpegToggle()
@@ -2391,6 +2428,8 @@ StackButton::StackButton(MWindow *mwindow, int x, int y)
 {
        this->mwindow = mwindow;
        set_tooltip(_("Close EDL"));
+// *** CONTEXT_HELP ***
+       context_help_set_keyword("OpenEDL");
 }
 
 int StackButton::handle_event()
@@ -2414,13 +2453,15 @@ ProxyToggle::ProxyToggle(MWindow *mwindow, MButtons *mbuttons, int x, int y)
  : BC_Toggle(x, y, ( !mwindow->edl->session->proxy_use_scaler ?
                        mwindow->theme->proxy_p_toggle :
                        mwindow->theme->proxy_s_toggle ),
-               mwindow->edl->session->proxy_disabled_scale != 1)
+               mwindow->edl->session->proxy_state == PROXY_DISABLED)
 {
        this->mwindow = mwindow;
        this->mbuttons = mbuttons;
        scaler_images = mwindow->edl->session->proxy_use_scaler;
-       set_tooltip(mwindow->edl->session->proxy_disabled_scale==1 ?
+       set_tooltip(mwindow->edl->session->proxy_state!=PROXY_DISABLED ?
                _("Disable proxy") : _("Enable proxy"));
+// *** CONTEXT_HELP ***
+       context_help_set_keyword("Proxy");
 }
 
 void ProxyToggle::show()
@@ -2455,6 +2496,12 @@ int ProxyToggle::handle_event()
                mwindow->enable_proxy();
        mwindow->gui->lock_window("ProxyToggle::handle_event");
        set_tooltip(!disabled ? _("Disable proxy") : _("Enable proxy"));
+       ProxyDialog *dialog = mwindow->gui->mainmenu->proxy->dialog;
+       if( dialog && dialog->gui ) {
+               dialog->gui->lock_window("ProxyToggle::handle_event");
+               dialog->gui->update();
+               dialog->gui->unlock_window();
+       }
        return 1;
 }
 
@@ -2468,6 +2515,6 @@ int ProxyToggle::keypress_event()
                        return handle_event();
                }
        }
-       return 0;
+       return context_help_check_and_show();
 }