X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fpatchgui.C;h=a2a19864703cb2cb9ff1c6b46b8c3ec741fe675f;hb=60f8df69db9ddd8148bfc41a17bb0955b52a45e6;hp=51e47ba19699aac93be332b0de61190529fdc44e;hpb=394f84fcbfbb6fc97758f09cfcf5319da036b8cd;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/cinelerra/patchgui.C b/cinelerra-5.1/cinelerra/patchgui.C index 51e47ba1..a2a19864 100644 --- a/cinelerra-5.1/cinelerra/patchgui.C +++ b/cinelerra-5.1/cinelerra/patchgui.C @@ -42,7 +42,7 @@ #include "tracks.h" #include "transportque.h" #include "vframe.h" - +#include "zwindow.h" PatchGUI::PatchGUI(MWindow *mwindow, @@ -65,22 +65,24 @@ PatchGUI::PatchGUI(MWindow *mwindow, mute = 0; expand = 0; nudge = 0; + mix = 0; change_source = 0; - track_id = -1; - if(track) track_id = track->get_id(); + track_id = track ? track->get_id() : -1; + mixer = 0; } PatchGUI::~PatchGUI() { - if(title) delete title; - if(record) delete record; - if(play) delete play; -// if(automate) delete automate; - if(gang) delete gang; - if(draw) delete draw; - if(mute) delete mute; - if(expand) delete expand; - if(nudge) delete nudge; + delete title; + delete record; + delete play; +// delete automate; + delete gang; + delete draw; + delete mute; + delete expand; + delete nudge; + delete mix; } void PatchGUI::create_objects() @@ -199,7 +201,7 @@ int PatchGUI::update(int x, int y) record->update(track->record); gang->update(track->gang); draw->update(track->draw); - mute->update(mute->get_keyframe(mwindow, this)->value); + mute->update(mwindow->get_int_auto(this, AUTOMATION_MUTE)->value); expand->update(track->expand_view); } } @@ -237,29 +239,17 @@ void PatchGUI::toggle_behavior(int type, BC_Toggle *toggle, int *output) { - if(toggle->shift_down()) - { + if(toggle->shift_down()) { + int sense = type != Tracks::MUTE ? 1 : 0; // all selected if nothing previously selected or // if this patch was previously the only one selected - switch( type ) { - case Tracks::MUTE: { // negative logic for normally off - int total_selected = mwindow->edl->tracks->total() - - mwindow->edl->tracks->total_of(type); - int current_output = *output; - int selected = !total_selected || (total_selected == 1 && - !current_output ) ? 0 : 1; - mwindow->edl->tracks->select_all(type, selected); - if( selected ) *output = 0; - break; } - default: { - int total_selected = mwindow->edl->tracks->total_of(type); - int current_output = *output; - int selected = !total_selected || (total_selected == 1 && - current_output ) ? 1 : 0; - mwindow->edl->tracks->select_all(type, selected); - if( !selected ) *output = 1; - break; } - } + int total_type = mwindow->edl->tracks->total_of(type); + int total_selected = sense ? total_type : + mwindow->edl->tracks->total() - total_type; + int selected = !total_selected || (total_selected == 1 && + *output == sense ) ? sense : 1-sense; + mwindow->edl->tracks->select_all(type, selected); + if( selected != sense ) *output = sense; patchbay->drag_operation = type; patchbay->new_status = 1; @@ -567,7 +557,7 @@ int DrawPatch::button_release_event() MutePatch::MutePatch(MWindow *mwindow, PatchGUI *patch, int x, int y) : BC_Toggle(x, y, mwindow->theme->get_image_set("mutepatch_data"), - get_keyframe(mwindow, patch)->value, + mwindow->get_int_auto(patch, AUTOMATION_MUTE)->value, "", 0, 0, @@ -621,27 +611,6 @@ int MutePatch::button_release_event() return result; } -IntAuto* MutePatch::get_keyframe(MWindow *mwindow, PatchGUI *patch) -{ - Auto *current = 0; - double unit_position = mwindow->edl->local_session->get_selectionstart(1); - unit_position = mwindow->edl->align_to_frame(unit_position, 0); - unit_position = patch->track->to_units(unit_position, 0); - return (IntAuto*)patch->track->automation->autos[AUTOMATION_MUTE]->get_prev_auto( - (int64_t)unit_position, - PLAY_FORWARD, - current); -} - - - - - - - - - - ExpandPatch::ExpandPatch(MWindow *mwindow, PatchGUI *patch, int x, int y) @@ -746,13 +715,13 @@ int NudgePatch::handle_event() void NudgePatch::set_value(int64_t value) { - mwindow->undo->update_undo_before(_("nudge"), this); + mwindow->undo->update_undo_before(_("nudge."), this); patch->track->nudge = value; if(patch->track->gang && patch->track->record) patch->patchbay->synchronize_nudge(patch->track->nudge, patch->track); - mwindow->undo->update_undo_after(_("nudge"), LOAD_PATCHES); + mwindow->undo->update_undo_after(_("nudge."), LOAD_PATCHES); mwindow->gui->unlock_window(); if(patch->track->data_type == TRACK_VIDEO) @@ -822,5 +791,34 @@ void NudgePatch::update() } +MixPatch::MixPatch(MWindow *mwindow, PatchGUI *patch, int x, int y) + : BC_Toggle(x, y, mwindow->theme->get_image_set("mixpatch_data"), + patch->mixer, "", 0, 0, 0) +{ + this->mwindow = mwindow; + this->patch = patch; +} +MixPatch::~MixPatch() +{ +} + +int MixPatch::handle_event() +{ + int v = patch->track ? get_value() : 0; + if( patch->mixer != v ) { + if( patch->track ) + mwindow->gui->update_mixers(patch->track, v); + else + update(v); + mwindow->update_mixer_tracks(); + } + return 1; +} + +void MixPatch::update(int v) +{ + patch->mixer = v; + BC_Toggle::update(v); +}