bsd lang segv fix, enable bsd lv2, lv2 gui enable fix, proxy/ffmpeg toggle resize...
[goodguy/history.git] / cinelerra-5.1 / cinelerra / mwindowgui.C
index 9259dde163549c657a431c26b7a20304cdaf7ab2..679a56e33fe429f1ca001435054ed0059ce78ccf 100644 (file)
@@ -277,7 +277,10 @@ void MWindowGUI::create_objects()
 
        add_subwindow(mbuttons = new MButtons(mwindow, this));
        mbuttons->create_objects();
-       add_subwindow(ffmpeg_toggle = new FFMpegToggle(mwindow, mbuttons, menu_w(), menu_h()+2));
+       int x1 = mbuttons->get_x() + mbuttons->get_w(), y1 = mbuttons->get_y()+2;
+       add_subwindow(proxy_toggle = new ProxyToggle(mwindow, mbuttons, x1, y1));
+       x1 += proxy_toggle->get_w() + 3;
+       add_subwindow(ffmpeg_toggle = new FFMpegToggle(mwindow, mbuttons, x1, y1));
 
        pane[TOP_LEFT_PANE] = new TimelinePane(mwindow,
                TOP_LEFT_PANE,
@@ -403,10 +406,13 @@ int MWindowGUI::resize_event(int w, int h)
        int x = w - MainShBtns::calculate_w(0);
        mainmenu->resize_event(x, mainmenu->get_h());
        mainshbtns->reposition_window(x, -1);
-       ffmpeg_toggle->reposition_window(menu_w(), menu_h()+2);
        mwindow->theme->get_mwindow_sizes(this, w, h);
        mwindow->theme->draw_mwindow_bg(this);
        mbuttons->resize_event();
+       int x1 = mbuttons->get_x() + mbuttons->get_w(), y1 = mbuttons->get_y()+2;
+       proxy_toggle->reposition_window(x1, y1);
+       x1 += proxy_toggle->get_w() + 3;
+       ffmpeg_toggle->reposition_window(x1, y1);
        statusbar->resize_event();
        zoombar->resize_event();
 
@@ -656,6 +662,27 @@ void MWindowGUI::update_patchbay()
        }
 }
 
+void MWindowGUI::update_proxy_toggle()
+{
+       if( mwindow->edl->session->proxy_scale == 1 &&
+           mwindow->edl->session->proxy_disabled_scale == 1 )
+               proxy_toggle->hide_window();
+       else
+               proxy_toggle->show_window();
+}
+
+void MWindowGUI::update_plugintoggles()
+{
+       for(int i = 0; i < TOTAL_PANES; i++)
+       {
+               if(pane[i])
+               {
+                       pane[i]->canvas->refresh_plugintoggles();
+               }
+       }
+
+}
+
 void MWindowGUI::draw_indexes(Indexable *indexable)
 {
        for(int i = 0; i < TOTAL_PANES; i++)
@@ -702,6 +729,13 @@ void MWindowGUI::flash_canvas(int flush)
        }
 }
 
+int MWindowGUI::show_window(int flush)
+{
+       int ret = BC_WindowBase::show_window(flush);
+       update_proxy_toggle();
+       return ret;
+}
+
 void MWindowGUI::draw_cursor(int do_plugintoggles)
 {
        for(int i = 0; i < TOTAL_PANES; i++)
@@ -757,18 +791,6 @@ void MWindowGUI::set_playing_back(int value)
        }
 }
 
-void MWindowGUI::update_plugintoggles()
-{
-       for(int i = 0; i < TOTAL_PANES; i++)
-       {
-               if(pane[i])
-               {
-                       pane[i]->canvas->refresh_plugintoggles();
-               }
-       }
-
-}
-
 void MWindowGUI::update_scrollbars(int flush)
 {
        for(int i = 0; i < TOTAL_PANES; i++)
@@ -2365,3 +2387,41 @@ int FFMpegToggle::handle_event()
 }
 
 
+ProxyToggle::ProxyToggle(MWindow *mwindow, MButtons *mbuttons, int x, int y)
+ : BC_Toggle(x, y, mwindow->theme->proxy_toggle,
+               mwindow->edl->session->proxy_disabled_scale != 1)
+{
+       this->mwindow = mwindow;
+       this->mbuttons = mbuttons;
+       set_tooltip(mwindow->edl->session->proxy_disabled_scale==1 ?
+               _("Disable proxy") : _("Enable proxy"));
+}
+
+ProxyToggle::~ProxyToggle()
+{
+}
+
+int ProxyToggle::handle_event()
+{
+       int disabled = get_value();
+       if( disabled )
+               mwindow->disable_proxy();
+       else
+               mwindow->enable_proxy();
+       set_tooltip(!disabled ? _("Disable proxy") : _("Enable proxy"));
+       return 1;
+}
+
+int ProxyToggle::keypress_event()
+{
+       if( ctrl_down() && !shift_down() && !alt_down() ) {
+               int key = get_keypress();
+               if( key == 'r' ) {
+                       int value = get_value() ? 0 : 1;
+                       set_value(value);
+                       return handle_event();
+               }
+       }
+       return 0;
+}
+