+CWindowMaskOnTrack::CWindowMaskOnTrack(MWindow *mwindow, CWindowMaskGUI *gui,
+ int x, int y, int w, const char *text)
+ : BC_PopupTextBox(gui, 0, text, x, y, w, 120)
+{
+ this->mwindow = mwindow;
+ this->gui = gui;
+}
+
+CWindowMaskOnTrack::~CWindowMaskOnTrack()
+{
+}
+
+int CWindowMaskOnTrack::handle_event()
+{
+ int k = get_number();
+//printf("selected %d = %s\n", k, k<0 ? "()" : track_items[k]->get_text());
+ CWindowMaskItem *track_item = k >= 0 ? (CWindowMaskItem *)track_items[k] : 0;
+ Track *track = track_item ? mwindow->edl->tracks->get_track_by_id(track_item->id) : 0;
+ int track_id = track_item && track && track->record ? track_item->id : -1;
+ set_back_color(track_id >= 0 ?
+ gui->get_resources()->text_background :
+ gui->get_resources()->text_background_disarmed);
+ gui->mask_on_track->update(track_item ? track_item->get_text() : "");
+ mwindow->cwindow->mask_track_id = track_id;
+ mwindow->edl->local_session->solo_track_id = -1;
+ gui->mask_solo_track->update(0);
+ gui->update_preview(1);
+ return 1;
+}
+
+void CWindowMaskOnTrack::update_items()
+{
+ track_items.remove_all_objects();
+ for( Track *track=mwindow->edl->tracks->first; track; track=track->next ) {
+ if( track->data_type != TRACK_VIDEO ) continue;
+ int color = track->record ? -1 : RED;
+ track_items.append(new CWindowMaskItem(track->title, track->get_id(), color));
+ }
+ update_list(&track_items);
+}
+
+CWindowMaskTrackTumbler::CWindowMaskTrackTumbler(MWindow *mwindow, CWindowMaskGUI *gui,
+ int x, int y)
+ : BC_Tumbler(x, y)
+{
+ this->mwindow = mwindow;
+ this->gui = gui;
+}
+CWindowMaskTrackTumbler::~CWindowMaskTrackTumbler()
+{
+}
+
+int CWindowMaskTrackTumbler::handle_up_event()
+{
+ return do_event(1);
+}
+
+int CWindowMaskTrackTumbler::handle_down_event()
+{
+ return do_event(-1);
+}
+
+int CWindowMaskTrackTumbler::do_event(int dir)
+{
+ CWindowMaskItem *track_item = 0;
+ CWindowMaskItem **items = (CWindowMaskItem**)&gui->mask_on_track->track_items[0];
+ int n = gui->mask_on_track->track_items.size();
+ int id = mwindow->cwindow->mask_track_id;
+ if( n > 0 ) {
+ int k = n;
+ while( --k >= 0 && items[k]->id != id );
+ if( k >= 0 ) {
+ k += dir;
+ bclamp(k, 0, n-1);
+ track_item = items[k];
+ }
+ else
+ track_item = items[0];
+ }
+ Track *track = track_item ? mwindow->edl->tracks->get_track_by_id(track_item->id) : 0;
+ int track_id = track_item && track && track->record ? track_item->id : -1;
+ gui->mask_on_track->set_back_color(track_id >= 0 ?
+ gui->get_resources()->text_background :
+ gui->get_resources()->text_background_disarmed);
+ gui->mask_on_track->update(track_item ? track_item->get_text() : "");
+ mwindow->cwindow->mask_track_id = track_item ? track_item->id : -1;
+ mwindow->edl->local_session->solo_track_id = -1;
+ gui->mask_solo_track->update(0);
+ gui->update_preview(1);
+ return 1;
+}
+
+