+ void view_cpl (wxCommandEvent& ev)
+ {
+ shared_ptr<DCPContent> dcp = boost::dynamic_pointer_cast<DCPContent>(_film->content().front());
+ DCPOMATIC_ASSERT (dcp);
+ DCPExaminer ex (dcp);
+ int id = ev.GetId() - ID_view_cpl;
+ DCPOMATIC_ASSERT (id >= 0);
+ DCPOMATIC_ASSERT (id < int(ex.cpls().size()));
+ list<shared_ptr<dcp::CPL> > cpls = ex.cpls();
+ list<shared_ptr<dcp::CPL> >::iterator i = cpls.begin();
+ while (id > 0) {
+ ++i;
+ --id;
+ }
+
+ dcp->set_cpl ((*i)->id());
+ dcp->examine (_film, shared_ptr<Job>());
+ }
+
+ void view_full_screen ()
+ {
+ if (_mode == Config::PLAYER_MODE_FULL) {
+ _mode = Config::PLAYER_MODE_WINDOW;
+ } else {
+ _mode = Config::PLAYER_MODE_FULL;
+ }
+ setup_screen ();
+ setup_menu ();
+ }
+
+ void view_dual_screen ()
+ {
+ if (_mode == Config::PLAYER_MODE_DUAL) {
+ _mode = Config::PLAYER_MODE_WINDOW;
+ } else {
+ _mode = Config::PLAYER_MODE_DUAL;
+ }
+ setup_screen ();
+ setup_menu ();
+ }
+
+ void setup_menu ()
+ {
+ if (_view_full_screen) {
+ _view_full_screen->Check (_mode == Config::PLAYER_MODE_FULL);
+ }
+ if (_view_dual_screen) {
+ _view_dual_screen->Check (_mode == Config::PLAYER_MODE_DUAL);
+ }
+ }
+
+ void setup_screen ()
+ {
+ _controls->Show (_mode != Config::PLAYER_MODE_FULL);
+ _info->Show (_mode != Config::PLAYER_MODE_FULL);
+ _overall_panel->SetBackgroundColour (_mode == Config::PLAYER_MODE_FULL ? wxColour(0, 0, 0) : wxNullColour);
+ ShowFullScreen (_mode == Config::PLAYER_MODE_FULL);
+ _viewer->set_pad_black (_mode != Config::PLAYER_MODE_WINDOW);
+
+ if (_mode == Config::PLAYER_MODE_DUAL) {
+ _dual_screen = new wxFrame (this, wxID_ANY, wxT(""));
+ _dual_screen->SetBackgroundColour (wxColour(0, 0, 0));
+ _dual_screen->ShowFullScreen (true);
+ _viewer->panel()->Reparent (_dual_screen);
+ _dual_screen->Show ();
+ if (wxDisplay::GetCount() > 1) {
+ switch (Config::instance()->image_display()) {
+ case 0:
+ _dual_screen->Move (0, 0);
+ Move (wxDisplay(0).GetClientArea().GetWidth(), 0);
+ break;
+ case 1:
+ _dual_screen->Move (wxDisplay(0).GetClientArea().GetWidth(), 0);
+ // (0, 0) doesn't seem to work for some strange reason
+ Move (8, 8);
+ break;
+ }
+ }
+ } else {
+ if (_dual_screen) {
+ _viewer->panel()->Reparent (_overall_panel);
+ _dual_screen->Destroy ();
+ _dual_screen = 0;
+ }
+ }
+
+ setup_main_sizer (_mode);
+ }
+
+ void view_closed_captions ()
+ {
+ _viewer->show_closed_captions ();
+ }
+
+ void tools_verify ()
+ {
+ shared_ptr<DCPContent> dcp = boost::dynamic_pointer_cast<DCPContent>(_film->content().front());
+ DCPOMATIC_ASSERT (dcp);
+
+ JobManager* jm = JobManager::instance ();
+ jm->add (shared_ptr<Job> (new VerifyDCPJob (dcp->directories())));
+ bool const ok = display_progress (_("DCP-o-matic Player"), _("Verifying DCP"));
+ if (!ok) {
+ return;
+ }
+
+ DCPOMATIC_ASSERT (!jm->get().empty());
+ shared_ptr<VerifyDCPJob> last = dynamic_pointer_cast<VerifyDCPJob> (jm->get().back());
+ DCPOMATIC_ASSERT (last);
+
+ VerifyDCPDialog* d = new VerifyDCPDialog (this, last);
+ d->ShowModal ();
+ d->Destroy ();
+ }
+