#include "gwindowgui.h"
#include "intauto.h"
#include "intautos.h"
+#include "keys.h"
#include "language.h"
#include "localsession.h"
#include "mainsession.h"
}
}
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;
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;
}
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;
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;
}
{
}
-int AKeyPanPatch::button_release_event()
-{
- APanPatch::button_release_event();
- return 0;
-}
-
int AKeyPanPatch::handle_event()
{
int ret = APanPatch::handle_event();