X-Git-Url: https://git.cinelerra-gg.org/git/?a=blobdiff_plain;ds=sidebyside;f=cinelerra-5.1%2Fcinelerra%2Fzwindow.C;h=a833b284fbf09c5ad866d27f22833a4cb91c984f;hb=HEAD;hp=a6f6d73f8119c29120291817e891178de5ac86cc;hpb=2e28d225c343f02500594688bf8d0528df40600c;p=goodguy%2Fcinelerra.git diff --git a/cinelerra-5.1/cinelerra/zwindow.C b/cinelerra-5.1/cinelerra/zwindow.C index a6f6d73f..37dd6feb 100644 --- a/cinelerra-5.1/cinelerra/zwindow.C +++ b/cinelerra-5.1/cinelerra/zwindow.C @@ -32,6 +32,7 @@ #include "renderengine.h" #include "timelinepane.h" #include "track.h" +#include "tracks.h" #include "transportque.h" #include "zwindow.h" #include "zwindowgui.h" @@ -45,14 +46,14 @@ Mixers::~Mixers() remove_all_objects(); } -Mixer *Mixers::new_mixer() +Mixer *Mixers::new_mixer(int show) { int idx = 0; for( int i=0; iidx ) idx = mixer->idx; } - return append(new Mixer(idx+1)); + return append(new Mixer(idx+1, show)); } Mixer *Mixers::get_mixer(int idx) @@ -64,10 +65,9 @@ Mixer *Mixers::get_mixer(int idx) return 0; } -void Mixers::del_mixer(int idx) +void Mixers::del_mixer(Mixer *mixer) { - Mixer *mixer = get_mixer(idx); - if( mixer ) remove_object(mixer); + remove_object(mixer); } void Mixer::set_title(const char *tp) @@ -99,6 +99,7 @@ int Mixers::load(FileXML *file) if( file->tag.title_is("MIXER") ) { Mixer *mixer = new_mixer(); file->tag.get_property("TITLE", mixer->title); + mixer->show = file->tag.get_property("SHOW", 1); mixer->x = file->tag.get_property("X", mixer->x); mixer->y = file->tag.get_property("Y", mixer->y); mixer->w = file->tag.get_property("W", mixer->w); @@ -121,6 +122,7 @@ void Mixers::copy_from(Mixers &that) void Mixer::save(FileXML *file) { file->tag.set_title("MIXER"); + file->tag.set_property("SHOW",show); file->tag.set_property("TITLE",title); file->tag.set_property("X",x); file->tag.set_property("Y",y); @@ -141,9 +143,10 @@ void Mixer::save(FileXML *file) file->append_newline(); } -Mixer::Mixer(int idx) +Mixer::Mixer(int idx, int show) { this->idx = idx; + this->show = show; title[0] = 0; x = y = 100 + idx*64; w = 400; h = 300; @@ -171,6 +174,7 @@ void Mixer::copy_from(Mixer &that) mixer_ids.remove_all(); strncpy(title, that.title, sizeof(title)); title[sizeof(title)-1] = 0; + show = that.show; x = that.x; y = that.y; w = that.w; h = that.h; for( int i=0; iedl->mixers.get_mixer(idx); + mixer->show = 1; zgui = new ZWindowGUI(mwindow, this, mixer); zgui->create_objects(); return zgui; @@ -207,8 +213,16 @@ BC_Window* ZWindow::new_gui() void ZWindow::handle_done_event(int result) { - if( destroy ) - mwindow->del_mixer(this); + stop_playback(1); + if( result ) { + mwindow->close_mixer(this); + Mixer *mixer = mwindow->edl->mixers.get_mixer(idx); + if( mixer ) mixer->show = 0; + Track *track = mixer ? mwindow->edl->tracks->first : 0; + while( track && track->index_in(mixer) < 0 ) track = track->next; +// if no refs to tracks, delete it + if( !track ) mwindow->edl->mixers.del_mixer(mixer); + } idx = -1; } void ZWindow::handle_close_event(int result) @@ -219,8 +233,7 @@ void ZWindow::handle_close_event(int result) void ZWindow::change_source(EDL *edl) { if( this->edl == edl ) return; - if( !edl || !this->edl || this->edl->equivalent_output(edl) >= 0 ) - zgui->playback_engine->refresh_frame(CHANGE_ALL, edl); + zgui->playback_engine->refresh_frame(CHANGE_ALL, edl); if( this->edl ) this->edl->remove_user(); this->edl = edl; @@ -234,6 +247,7 @@ void ZWindow::stop_playback(int wait) void ZWindow::handle_mixer(int command, int wait_tracking, int use_inout, int toggle_audio, int loop_play, float speed) { + if( !playable ) return; PlaybackEngine *engine = zgui->playback_engine; engine->next_command->toggle_audio = toggle_audio; engine->next_command->loop_play = loop_play; @@ -259,10 +273,20 @@ void ZWindow::update_mixer_ids() void ZWindow::set_title(const char *tp) { + Track *track = 0; Mixer *mixer = mwindow->edl->mixers.get_mixer(idx); - if( mixer ) mixer->set_title(tp); + if( mixer ) { + mixer->set_title(tp); + for( track=mwindow->edl->tracks->first; track; track=track->next ) { + if( track->data_type != TRACK_VIDEO ) continue; + int mixer_id = track->get_mixer_id(); + int k = mixer->mixer_ids.size(); + while( --k >= 0 && mixer_id != mixer->mixer_ids[k] ); + if( k >= 0 ) break; + } + } char *cp = title, *ep = cp + sizeof(title)-1; - cp += snprintf(title, ep-cp, _("Mixer %d"), idx); + cp += snprintf(title, ep-cp, track ? track->title : _("Mixer %d"), idx); if( tp ) cp += snprintf(cp, ep-cp, ": %s", tp); *cp = 0; }