+
+ _reference->Bind (wxEVT_CHECKBOX, boost::bind (&VideoPanel::reference_clicked, this));
+ _scale_fit->Bind (wxEVT_RADIOBUTTON, boost::bind (&VideoPanel::scale_fit_clicked, this));
+ _scale_custom->Bind (wxEVT_RADIOBUTTON, boost::bind (&VideoPanel::scale_custom_clicked, this));
+ _scale_custom_edit->Bind (wxEVT_BUTTON, boost::bind (&VideoPanel::scale_custom_edit_clicked, this));
+ _colour_conversion->Bind (wxEVT_CHOICE, boost::bind (&VideoPanel::colour_conversion_changed, this));
+ _range->Bind (wxEVT_CHOICE, boost::bind (&VideoPanel::range_changed, this));
+ _edit_colour_conversion_button->Bind (wxEVT_BUTTON, boost::bind (&VideoPanel::edit_colour_conversion_clicked, this));
+ _left_right_link->Bind (wxEVT_TOGGLEBUTTON, boost::bind(&VideoPanel::left_right_link_clicked, this));
+ _top_bottom_link->Bind (wxEVT_TOGGLEBUTTON, boost::bind(&VideoPanel::top_bottom_link_clicked, this));
+
+ add_to_grid ();
+}
+
+void
+VideoPanel::add_to_grid ()
+{
+ int r = 0;
+
+ wxBoxSizer* reference_sizer = new wxBoxSizer (wxVERTICAL);
+ reference_sizer->Add (_reference, 0);
+ reference_sizer->Add (_reference_note, 0);
+ _grid->Add (reference_sizer, wxGBPosition(r, 0), wxGBSpan(1, 3));
+ ++r;
+
+ add_label_to_sizer (_grid, _type_label, true, wxGBPosition(r, 0));
+ _frame_type->add (_grid, wxGBPosition(r, 1), wxGBSpan(1, 2));
+ ++r;
+
+ int cr = 0;
+ wxGridBagSizer* crop = new wxGridBagSizer (DCPOMATIC_SIZER_X_GAP, DCPOMATIC_SIZER_Y_GAP);
+
+ add_label_to_sizer (crop, _left_crop_label, true, wxGBPosition (cr, 0));
+ _left_crop->add (crop, wxGBPosition(cr, 1), wxDefaultSpan, wxALIGN_CENTER_VERTICAL);
+#ifdef __WXGTK3__
+ crop->Add (_left_right_link, wxGBPosition(cr, 2), wxGBSpan(2, 1));
+ ++cr;
+ add_label_to_sizer (crop, _right_crop_label, true, wxGBPosition(cr, 0));
+ _right_crop->add (crop, wxGBPosition(cr, 1));
+#else
+ crop->Add (_left_right_link, wxGBPosition(cr, 2), wxDefaultSpan, wxALIGN_CENTER_VERTICAL);
+ add_label_to_sizer (crop, _right_crop_label, true, wxGBPosition (cr, 3));
+ _right_crop->add (crop, wxGBPosition (cr, 4), wxDefaultSpan, wxALIGN_CENTER_VERTICAL);
+#endif
+ ++cr;
+ add_label_to_sizer (crop, _top_crop_label, true, wxGBPosition (cr, 0));
+ _top_crop->add (crop, wxGBPosition (cr, 1), wxDefaultSpan, wxALIGN_CENTER_VERTICAL);
+#ifdef __WXGTK3__
+ crop->Add (_top_bottom_link, wxGBPosition(cr, 2), wxGBSpan(2, 1));
+ ++cr;
+ add_label_to_sizer (crop, _bottom_crop_label, true, wxGBPosition(cr, 0));
+ _bottom_crop->add (crop, wxGBPosition(cr, 1), wxDefaultSpan, wxALIGN_CENTER_VERTICAL);
+#else
+ crop->Add (_top_bottom_link, wxGBPosition(cr, 2), wxDefaultSpan, wxALIGN_CENTER_VERTICAL);
+ add_label_to_sizer (crop, _bottom_crop_label, true, wxGBPosition (cr, 3));
+ _bottom_crop->add (crop, wxGBPosition (cr, 4), wxDefaultSpan, wxALIGN_CENTER_VERTICAL);
+#endif
+ add_label_to_sizer (_grid, _crop_label, true, wxGBPosition(r, 0));
+ _grid->Add (crop, wxGBPosition(r, 1));
+ ++r;
+
+ add_label_to_sizer (_grid, _fade_in_label, true, wxGBPosition (r, 0));
+ _grid->Add (_fade_in, wxGBPosition (r, 1), wxGBSpan (1, 3));
+ ++r;
+
+ add_label_to_sizer (_grid, _fade_out_label, true, wxGBPosition (r, 0));
+ _grid->Add (_fade_out, wxGBPosition (r, 1), wxGBSpan (1, 3));
+ ++r;
+
+ add_label_to_sizer (_grid, _scale_label, true, wxGBPosition (r, 0));
+ {
+ wxSizer* v = new wxBoxSizer (wxVERTICAL);
+ v->Add (_scale_fit, 0, wxBOTTOM, 4);
+ wxSizer* h = new wxBoxSizer (wxHORIZONTAL);
+ h->Add (_scale_custom, 1, wxRIGHT | wxALIGN_CENTER_VERTICAL, 6);
+ h->Add (_scale_custom_edit, 0, wxALIGN_CENTER_VERTICAL);
+ v->Add (h, 0);
+ _grid->Add (v, wxGBPosition(r, 1));
+ }
+ ++r;
+
+ add_label_to_sizer (_grid, _colour_conversion_label, true, wxGBPosition(r, 0));
+ {
+ wxSizer* s = new wxBoxSizer (wxHORIZONTAL);
+ s->Add (_colour_conversion, 1, wxALIGN_CENTER_VERTICAL | wxTOP | wxBOTTOM | wxRIGHT, 6);
+ s->Add (_edit_colour_conversion_button, 0, wxALIGN_CENTER_VERTICAL);
+ _grid->Add (s, wxGBPosition (r, 1), wxDefaultSpan, wxALIGN_CENTER_VERTICAL);
+ }
+ ++r;
+
+ add_label_to_sizer (_grid, _range_label, true, wxGBPosition(r, 0));
+ _grid->Add (_range, wxGBPosition(r, 1), wxGBSpan(1, 2), wxALIGN_CENTER_VERTICAL);
+ ++r;
+
+ _grid->Add (_description, wxGBPosition (r, 0), wxGBSpan (1, 4), wxEXPAND | wxALIGN_CENTER_VERTICAL, 6);
+ ++r;
+}
+
+void
+VideoPanel::range_changed ()
+{
+ ContentList vc = _parent->selected_video ();
+ if (vc.size() != 1) {
+ return;
+ }
+
+ switch (_range->GetSelection()) {
+ case 0:
+ vc.front()->video->set_range (VideoRange::FULL);
+ break;
+ case 1:
+ vc.front()->video->set_range (VideoRange::VIDEO);
+ break;
+ default:
+ DCPOMATIC_ASSERT (false);
+ }