#include "renderengine.h"
#include "timelinepane.h"
#include "track.h"
+#include "tracks.h"
#include "transportque.h"
#include "zwindow.h"
#include "zwindowgui.h"
remove_all_objects();
}
-Mixer *Mixers::new_mixer()
+Mixer *Mixers::new_mixer(int show)
{
int idx = 0;
for( int i=0; i<size(); ++i ) {
Mixer *mixer = get(i);
if( idx < mixer->idx ) idx = mixer->idx;
}
- return append(new Mixer(idx+1));
+ return append(new Mixer(idx+1, show));
}
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)
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);
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);
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;
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; i<that.mixer_ids.size(); ++i )
idx = -1;
edl = 0;
highlighted = 0;
- destroy = 1;
+ playable = 1;
title[0] = 0;
zgui = 0;
+ zoom = 0;
}
ZWindow::~ZWindow()
BC_Window* ZWindow::new_gui()
{
Mixer *mixer = mwindow->edl->mixers.get_mixer(idx);
+ mixer->show = 1;
zgui = new ZWindowGUI(mwindow, this, mixer);
zgui->create_objects();
return zgui;
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)
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;
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;
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;
}