X-Git-Url: http://git.cinelerra-gg.org/git/?p=goodguy%2Fhistory.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fapatchgui.C;fp=cinelerra-5.1%2Fcinelerra%2Fapatchgui.C;h=f46e4ab7390d6426e0f7d7c007e373abd6292784;hp=abfe57cd963998384c462cdc45bd11bee559a070;hb=702161ddaf384a773831f1643fca0a54133625b2;hpb=0f8dc862440439b96c65bed178f2457f6f1cc079 diff --git a/cinelerra-5.1/cinelerra/apatchgui.C b/cinelerra-5.1/cinelerra/apatchgui.C index abfe57cd..f46e4ab7 100644 --- a/cinelerra-5.1/cinelerra/apatchgui.C +++ b/cinelerra-5.1/cinelerra/apatchgui.C @@ -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();