rework keyframe hide popup, keyframe auto render, textbox set_selection wide text
[goodguy/history.git] / cinelerra-5.1 / cinelerra / keyframepopup.C
index 303f599ed1ee5c1abd063acad9ba882963d050f0..45fdb127590a576257423ef85dc8551b99ae320b 100644 (file)
  * 
  */
 
+#include "apatchgui.h"
+#include "autoconf.h"
+#include "autos.h"
+#include "bcwindowbase.h"
+#include "cpanel.h"
+#include "cwindowgui.h" 
 #include "cwindow.h"
 #include "edl.h"
+#include "edlsession.h"
+#include "filexml.h"
+#include "gwindow.h"
+#include "gwindowgui.h"
 #include "keyframe.h"
 #include "keyframepopup.h"
 #include "language.h"
+#include "localsession.h"
+#include "maincursor.h"
+#include "mainmenu.h"
 #include "mainundo.h"
-#include "mwindow.h"
 #include "mwindowgui.h"
-#include "localsession.h"
-#include "cwindowgui.h" 
-#include "cpanel.h"
+#include "mwindow.h"
 #include "patchbay.h"
 #include "patchgui.h" 
-#include "apatchgui.h"
-#include "vpatchgui.h"
 #include "track.h"
-#include "maincursor.h"
-#include "bcwindowbase.h"
-#include "filexml.h"
-#include "edlsession.h"
-#include "autos.h"
+#include "vpatchgui.h"
 
 KeyframePopup::KeyframePopup(MWindow *mwindow, MWindowGUI *gui)
  : BC_PopupMenu(0, 0, 0, "", 0)
@@ -54,6 +58,7 @@ KeyframePopup::KeyframePopup(MWindow *mwindow, MWindowGUI *gui)
        key_free = 0;
        key_mbar = 0;
        key_mode_displayed = false;
+       key_edit_displayed = false;
 }
 
 KeyframePopup::~KeyframePopup()
@@ -65,6 +70,9 @@ KeyframePopup::~KeyframePopup()
                delete key_free_t;
                delete key_free;
        }
+       if( !key_edit_displayed ) {
+               delete key_edit;
+       }
 }
 
 void KeyframePopup::create_objects()
@@ -72,8 +80,8 @@ void KeyframePopup::create_objects()
        add_item(key_show = new KeyframePopupShow(mwindow, this));
        add_item(key_delete = new KeyframePopupDelete(mwindow, this));
        add_item(key_copy = new KeyframePopupCopy(mwindow, this));
-       add_item(key_edit = new KeyframePopupEdit(mwindow, this));
 
+       key_edit   = new KeyframePopupEdit(mwindow, this);
        key_mbar   = new BC_MenuItem("-");
        key_smooth = new KeyframePopupCurveMode(mwindow, this, FloatAuto::SMOOTH);
        key_linear = new KeyframePopupCurveMode(mwindow, this, FloatAuto::LINEAR);
@@ -119,6 +127,15 @@ void KeyframePopup::handle_curve_mode(Autos *autos, Auto *auto_keyframe)
 // determines the type of automation node. if floatauto, adds
 // menu entries showing the curve mode of the node
 {
+       if( !key_edit_displayed && keyframe_plugin ) {
+               add_item(key_edit);
+               key_edit_displayed = true;
+       }
+       else if( key_edit_displayed && !keyframe_plugin ) {
+               remove_item(key_mbar);
+               key_edit_displayed = false;
+       }
+
        if(!key_mode_displayed && autos && autos->get_type() == AUTOMATION_TYPE_FLOAT)
        { // append additional menu entries showing the curve_mode
                add_item(key_mbar);
@@ -190,9 +207,8 @@ int KeyframePopupShow::handle_event()
        {
                mwindow->update_plugin_guis();
                mwindow->show_plugin(popup->keyframe_plugin);
-       } else
-       if (popup->keyframe_automation)
-       {
+       }
+       else if( popup->keyframe_automation ) {
 /*
 
                mwindow->cwindow->gui->lock_window();
@@ -469,4 +485,84 @@ int KeyframePopupEdit::handle_event()
 }
 
 
+KeyframeHidePopup::KeyframeHidePopup(MWindow *mwindow, MWindowGUI *gui)
+ : BC_PopupMenu(0, 0, 0, "", 0)
+{
+       this->mwindow = mwindow;
+       this->gui = gui;
+       this->keyframe_autos = 0;
+}
+
+KeyframeHidePopup::~KeyframeHidePopup()
+{
+}
+
+void KeyframeHidePopup::create_objects()
+{
+        add_item(new KeyframePopupHide(mwindow, this));
+}
+
+int KeyframeHidePopup::update(Autos *autos)
+{
+       this->keyframe_autos = autos;
+       return 0;
+}
+
+KeyframePopupHide::KeyframePopupHide(MWindow *mwindow, KeyframeHidePopup *popup)
+ : BC_MenuItem(_("Hide keyframe type"))
+{
+       this->mwindow = mwindow;
+       this->popup = popup;
+}
+
+int KeyframePopupHide::handle_event()
+{
+// Get the array index of the curve
+       int update_gui = 0;
+       if(popup->keyframe_autos)
+       {
+               if(popup->keyframe_autos->type == Autos::AUTOMATION_TYPE_PLUGIN)
+               {
+                       mwindow->edl->session->auto_conf->plugins = 0;
+                       update_gui = 1;
+               }
+               else
+               {
+                       Track *track = popup->keyframe_autos->track;
+                       if(track)
+                       {
+                               Automation *automation = track->automation;
+                               if(automation)
+                               {
+                                       for(int i = 0; i < AUTOMATION_TOTAL; i++)
+                                       {
+                                               if(automation->autos[i] == popup->keyframe_autos)
+                                               {
+                                                       mwindow->edl->session->auto_conf->autos[i] = 0;
+                                                       update_gui = 1;
+                                                       break;
+                                               }
+                                       }
+                               }
+                       }
+               }
+       }
+
+       if(update_gui)
+       {
+               mwindow->gui->update(0,
+                       1,      // 1 for incremental drawing.  2 for full refresh
+                       0,
+                       0,
+                       0,
+               0,   
+               0);
+               mwindow->gui->mainmenu->update_toggles(1);
+               mwindow->gui->unlock_window();
+               mwindow->gwindow->gui->update_toggles(1);
+               mwindow->gui->lock_window("KeyframePopupHide::handle_event");
+       }
+
+       return 1;
+}