X-Git-Url: https://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fkeyframepopup.C;h=45fdb127590a576257423ef85dc8551b99ae320b;hb=d4cfc2eaf603cd5abc76e98676a5ac8a53285c4e;hp=303f599ed1ee5c1abd063acad9ba882963d050f0;hpb=30bdb85eb33a8ee7ba675038a86c6be59c43d7bd;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/cinelerra/keyframepopup.C b/cinelerra-5.1/cinelerra/keyframepopup.C index 303f599e..45fdb127 100644 --- a/cinelerra-5.1/cinelerra/keyframepopup.C +++ b/cinelerra-5.1/cinelerra/keyframepopup.C @@ -19,27 +19,31 @@ * */ +#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; +}