splashgui text clr, faders/speed keyframe popup slider rework, reticle rework
[goodguy/history.git] / cinelerra-5.1 / cinelerra / apatchgui.C
index abfe57cd963998384c462cdc45bd11bee559a070..f46e4ab7390d6426e0f7d7c007e373abd6292784 100644 (file)
@@ -30,6 +30,7 @@
 #include "gwindowgui.h"
 #include "intauto.h"
 #include "intautos.h"
+#include "keys.h"
 #include "language.h"
 #include "localsession.h"
 #include "mainsession.h"
@@ -112,8 +113,9 @@ int APatchGUI::update(int x, int y)
                }
        }
        else if( h >= y2 ) {
-               patchbay->add_subwindow(fade = new AFadePatch(mwindow, this, x1+x, y1+y,
-                       patchbay->get_w() - 10));
+               float v = mwindow->get_float_auto(this, AUTOMATION_FADE)->get_value();
+               patchbay->add_subwindow(fade = new AFadePatch(this, x1+x, y1+y,
+                       patchbay->get_w() - 10, v));
        }
        y1 = y2;
 
@@ -171,43 +173,40 @@ int APatchGUI::update(int x, int y)
        return y1;
 }
 
-void APatchGUI::synchronize_fade(float value_change)
+void APatchGUI::update_faders(float v)
 {
-       if( fade && !change_source ) {
-               fade->update(fade->get_value() + value_change);
-               fade->update_edl();
-       }
-}
-
-
-
-AFadePatch::AFadePatch(MWindow *mwindow, APatchGUI *patch, int x, int y, int w)
- : BC_FSlider(x, y, 0, w, w,
-       mwindow->edl->local_session->automation_mins[AUTOGROUPTYPE_AUDIO_FADE],
-       mwindow->edl->local_session->automation_maxs[AUTOGROUPTYPE_AUDIO_FADE],
-       mwindow->get_float_auto(patch, AUTOMATION_FADE)->get_value())
-{
-       this->mwindow = mwindow;
-       this->patch = patch;
-}
+       if( fade )
+               fade->update(v);
 
-float AFadePatch::update_edl()
-{
-       FloatAuto *current;
+       change_source = 1;
        double position = mwindow->edl->local_session->get_selectionstart(1);
-       Autos *fade_autos = patch->atrack->automation->autos[AUTOMATION_FADE];
+       Autos *fade_autos = atrack->automation->autos[AUTOMATION_FADE];
        int need_undo = !fade_autos->auto_exists_for_editing(position);
 
        mwindow->undo->update_undo_before(_("fade"), need_undo ? 0 : this);
+       FloatAuto *current = (FloatAuto*)fade_autos->get_auto_for_editing(position);
+       float change = v - current->get_value();
+       current->set_value(v);
 
-       current = (FloatAuto*)fade_autos->get_auto_for_editing(position);
+       if( track->gang && track->record )
+               patchbay->synchronize_faders(change, TRACK_AUDIO, track);
+       mwindow->undo->update_undo_after(_("fade"), LOAD_AUTOMATION);
+       change_source = 0;
 
-       float result = get_value() - current->get_value();
-       current->set_value(this->get_value());
+       mwindow->sync_parameters(CHANGE_PARAMS);
 
-       mwindow->undo->update_undo_after(_("fade"), LOAD_AUTOMATION);
+       if( mwindow->edl->session->auto_conf->autos[AUTOMATION_FADE] ) {
+               mwindow->gui->draw_overlays(1);
+       }
+}
 
-       return result;
+AFadePatch::AFadePatch(APatchGUI *patch, int x, int y, int w, float v)
+ : BC_FSlider(x, y, 0, w, w,
+       patch->mwindow->edl->local_session->automation_mins[AUTOGROUPTYPE_AUDIO_FADE],
+       patch->mwindow->edl->local_session->automation_maxs[AUTOGROUPTYPE_AUDIO_FADE],
+       v)
+{
+       this->patch = patch;
 }
 
 
@@ -217,24 +216,12 @@ int AFadePatch::handle_event()
                update(0.0);
                set_tooltip(get_caption());
        }
-
-       patch->change_source = 1;
-       float change = update_edl();
-       if( patch->track->gang && patch->track->record )
-               patch->patchbay->synchronize_faders(change, TRACK_AUDIO, patch->track);
-       patch->change_source = 0;
-
-       mwindow->sync_parameters(CHANGE_PARAMS);
-
-       if( mwindow->edl->session->auto_conf->autos[AUTOMATION_FADE] ) {
-               mwindow->gui->draw_overlays(1);
-       }
+       patch->update_faders(get_value());
        return 1;
 }
 
 AKeyFadePatch::AKeyFadePatch(MWindow *mwindow, APatchGUI *patch, int x, int y)
- : BC_SubWindow(x,y, patch->patchbay->get_w(),20,
-       GWindowGUI::auto_colors[AUTOMATION_FADE])
+ : BC_SubWindow(x,y, 200,20, GWindowGUI::auto_colors[AUTOMATION_FADE])
 {
        this->mwindow = mwindow;
        this->patch = patch;
@@ -242,33 +229,65 @@ AKeyFadePatch::AKeyFadePatch(MWindow *mwindow, APatchGUI *patch, int x, int y)
 
 void AKeyFadePatch::create_objects()
 {
-       akey_fade_value = new AKeyFadeValue(this);
-       add_subwindow(akey_fade_value);
-       akey_fade_value->activate();
+       int x = 0, y = 0;
+       float v = mwindow->get_float_auto(patch, AUTOMATION_FADE)->get_value();
+       add_subwindow(akey_fade_text = new AKeyFadeText(this, x, y, 64, v));
+       x += akey_fade_text->get_w();
+       VFrame **lok_images = mwindow->theme->get_image_set("lok");
+       int w1 = get_w() - x - lok_images[0]->get_w();
+       add_subwindow(akey_fade_slider = new AKeyFadeSlider(this, x, y, w1, v));
+       x += akey_fade_slider->get_w();
+       add_subwindow(akey_fade_ok = new AKeyFadeOK(this, x, y, lok_images));
+       activate();
        show_window();
 }
 
-AKeyFadeValue::AKeyFadeValue(AKeyFadePatch *akey_fade_patch)
- : AFadePatch(akey_fade_patch->mwindow, akey_fade_patch->patch,
-       0,0, akey_fade_patch->get_w())
+void AKeyFadePatch::update(float v)
+{
+       akey_fade_text->update(v);
+       akey_fade_slider->update(v);
+       patch->update_faders(v);
+}
+
+AKeyFadeOK::AKeyFadeOK(AKeyFadePatch *akey_fade_patch, int x, int y, VFrame **images)
+ : BC_Button(x, y, images)
 {
        this->akey_fade_patch = akey_fade_patch;
 }
 
-int AKeyFadeValue::button_release_event()
+int AKeyFadeOK::handle_event()
 {
-       AFadePatch::button_release_event();
-       return 0;
+       MWindowGUI *mgui = akey_fade_patch->mwindow->gui;
+       delete mgui->keyvalue_popup;
+       mgui->keyvalue_popup = 0;
+       return 1;
 }
 
-int AKeyFadeValue::handle_event()
+AKeyFadeText::AKeyFadeText(AKeyFadePatch *akey_fade_patch, int x, int y, int w, float v)
+ : BC_TextBox(x, y, w, 1, v, 1, MEDIUMFONT, 2)
 {
-       APatchGUI *patch = akey_fade_patch->patch;
-       int ret = AFadePatch::handle_event();
-       AFadePatch *fade = patch->fade;
-       if( fade )
-               fade->update(get_value());
-       return ret;
+       this->akey_fade_patch = akey_fade_patch;
+}
+
+int AKeyFadeText::handle_event()
+{
+       float v = atof(get_text());
+       akey_fade_patch->update(v);
+       return get_keypress() != RETURN ? 1 :
+               akey_fade_patch->akey_fade_ok->handle_event();
+}
+
+AKeyFadeSlider::AKeyFadeSlider(AKeyFadePatch *akey_fade_patch, int x, int y, int w, float v)
+ : AFadePatch(akey_fade_patch->patch, x, y, w, v)
+{
+       this->akey_fade_patch = akey_fade_patch;
+}
+
+int AKeyFadeSlider::handle_event()
+{
+       float v = get_value();
+       akey_fade_patch->update(v);
+       return 1;
 }
 
 
@@ -315,12 +334,6 @@ AKeyPanPatch::AKeyPanPatch(MWindow *mwindow, APatchGUI *patch)
 {
 }
 
-int AKeyPanPatch::button_release_event()
-{
-       APanPatch::button_release_event();
-       return 0;
-}
-
 int AKeyPanPatch::handle_event()
 {
        int ret = APanPatch::handle_event();