+CWindowMaskButton::CWindowMaskButton(MWindow *mwindow, CWindowMaskGUI *gui,
+ int x, int y, int no, int v)
+ : BC_CheckBox(x, y, v)
+{
+ this->mwindow = mwindow;
+ this->gui = gui;
+ this->no = no;
+}
+
+CWindowMaskButton::~CWindowMaskButton()
+{
+}
+
+int CWindowMaskButton::handle_event()
+{
+ mwindow->edl->session->cwindow_mask = no;
+ gui->mask_name->update(gui->mask_name->mask_items[no]->get_text());
+ gui->update();
+ gui->update_preview();
+ return 1;
+}
+
+CWindowMaskThumbler::CWindowMaskThumbler(MWindow *mwindow, CWindowMaskGUI *gui,
+ int x, int y)
+ : BC_Tumbler(x, y)
+{
+ this->mwindow = mwindow;
+ this->gui = gui;
+}
+
+CWindowMaskThumbler::~CWindowMaskThumbler()
+{
+}
+
+int CWindowMaskThumbler::handle_up_event()
+{
+ return do_event(1);
+}
+
+int CWindowMaskThumbler::handle_down_event()
+{
+ return do_event(-1);
+}
+
+int CWindowMaskThumbler::do_event(int dir)
+{
+ int k = mwindow->edl->session->cwindow_mask;
+ if( (k+=dir) >= SUBMASKS ) k = 0;
+ else if( k < 0 ) k = SUBMASKS-1;
+ mwindow->edl->session->cwindow_mask = k;
+ gui->mask_name->update(gui->mask_name->mask_items[k]->get_text());
+ gui->update();
+ gui->update_preview();
+ return 1;
+}
+
+CWindowMaskEnable::CWindowMaskEnable(MWindow *mwindow, CWindowMaskGUI *gui,
+ int x, int y, int no, int v)
+ : BC_CheckBox(x, y, v)
+{
+ this->mwindow = mwindow;
+ this->gui = gui;
+ this->no = no;
+}
+
+CWindowMaskEnable::~CWindowMaskEnable()
+{
+}
+
+int CWindowMaskEnable::handle_event()
+{
+ Track *track = mwindow->cwindow->calculate_mask_track();
+ if( track ) {
+ mwindow->undo->update_undo_before(_("mask enable"), this);
+ int bit = 1 << no;
+ if( get_value() )
+ track->masks |= bit;
+ else
+ track->masks &= ~bit;
+ gui->update();
+ gui->update_preview(1);
+ mwindow->undo->update_undo_after(_("mask enable"), LOAD_PATCHES);
+ }
+ return 1;
+}
+
+CWindowMaskUnclear::CWindowMaskUnclear(MWindow *mwindow,
+ CWindowMaskGUI *gui, int x, int y, int w)
+ : BC_GenericButton(x, y, w, _("Enable"))
+{
+ this->mwindow = mwindow;
+ this->gui = gui;
+ set_tooltip(_("Show/Hide mask"));
+}
+
+int CWindowMaskUnclear::handle_event()
+{
+ Track *track = mwindow->cwindow->calculate_mask_track();
+ if( track ) {
+ mwindow->undo->update_undo_before(_("mask enables"), this);
+ int m = (1<<SUBMASKS)-1;
+ if( track->masks == m )
+ track->masks = 0;
+ else
+ track->masks = m;
+ for( int i=0; i<SUBMASKS; ++i )
+ gui->mask_enables[i]->update((track->masks>>i) & 1);
+ gui->update_preview(1);
+ mwindow->undo->update_undo_after(_("mask enables"), LOAD_PATCHES);
+ }
+ return 1;
+}
+
+CWindowMaskSoloTrack::CWindowMaskSoloTrack(MWindow *mwindow,
+ CWindowMaskGUI *gui, int x, int y, int v)
+ : BC_CheckBox(x, y, v, _("Solo"))
+{
+ this->mwindow = mwindow;
+ this->gui = gui;
+ set_tooltip(_("Solo video track"));
+}
+
+int CWindowMaskSoloTrack::handle_event()
+{
+ mwindow->edl->local_session->solo_track_id =
+ get_value() ? mwindow->cwindow->mask_track_id : -1;
+ gui->update_preview(1);
+ return 1;
+}
+
+int CWindowMaskSoloTrack::calculate_w(BC_WindowBase *gui)
+{
+ int w = 0, h = 0;
+ calculate_extents(gui, &w, &h, _("Solo"));
+ return w;
+}
+