X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Ftools%2Fdcpomatic_disk.cc;h=17a24d4c102e651099d0b8ef0f9f33bb27ba3f5f;hb=3b50beca67cc53f15ef736398c549e0b5d1c9d12;hp=b94d4bf941016c4deb5e898040c7e50995c88fe5;hpb=2da4caba7871455c097c0ed940dd6f2332dbda5d;p=dcpomatic.git diff --git a/src/tools/dcpomatic_disk.cc b/src/tools/dcpomatic_disk.cc index b94d4bf94..17a24d4c1 100644 --- a/src/tools/dcpomatic_disk.cc +++ b/src/tools/dcpomatic_disk.cc @@ -51,8 +51,19 @@ using std::string; using std::exception; using std::cout; using std::cerr; -using boost::shared_ptr; +using std::shared_ptr; using boost::optional; +#if BOOST_VERSION >= 106100 +using namespace boost::placeholders; +#endif + + +#ifdef DCPOMATIC_OSX +enum { + ID_tools_uninstall = 1, +}; +#endif + class DOMFrame : public wxFrame { @@ -62,6 +73,15 @@ public: , _nanomsg (true) , _sizer (new wxBoxSizer(wxVERTICAL)) { +#ifdef DCPOMATIC_OSX + wxMenuBar* bar = new wxMenuBar; + wxMenu* tools = new wxMenu; + tools->Append(ID_tools_uninstall, _("Uninstall...")); + bar->Append(tools, _("Tools")); + SetMenuBar (bar); + Bind (wxEVT_MENU, boost::bind(&DOMFrame::uninstall, this), ID_tools_uninstall); +#endif + /* Use a panel as the only child of the Frame so that we avoid the dark-grey background on Windows. */ @@ -109,7 +129,7 @@ public: _sizer->Add (grid, 1, wxALL | wxEXPAND, DCPOMATIC_DIALOG_BORDER); overall_panel->SetSizer (_sizer); Fit (); - SetSize (768, GetSize().GetHeight() + 32); + SetSize (1024, GetSize().GetHeight() + 32); /* XXX: this is a hack, but I expect we'll need logs and I'm not sure if there's * a better place to put them. @@ -159,6 +179,14 @@ private: } +#ifdef DCPOMATIC_OSX + void uninstall() + { + system(String::compose("osascript \"%1/uninstall_disk.applescript\"", resources_path().string()).c_str()); + } +#endif + + bool should_close () { if (!JobManager::instance()->work_to_do()) { @@ -210,6 +238,31 @@ private: DCPOMATIC_ASSERT (_drive->GetSelection() != wxNOT_FOUND); DCPOMATIC_ASSERT (static_cast(_dcp_path)); + bool have_writer = true; + if (!_nanomsg.send(DISK_WRITER_PING "\n", 2000)) { + have_writer = false; + } else { + optional reply = _nanomsg.receive (2000); + if (!reply || *reply != DISK_WRITER_PONG) { + have_writer = false; + } + } + + if (!have_writer) { +#ifdef DCPOMATIC_WINDOWS + MessageDialog* m = new MessageDialog ( + this, + _("DCP-o-matic Disk Writer"), + _("Do you see a 'User Account Control' dialogue asking about dcpomatic2_disk_writer.exe? If so, click 'Yes', then try again.") + ); + m->ShowModal (); + m->Destroy (); + return; +#else + throw CommunicationFailedError (); +#endif + } + Drive const& drive = _drives[_drive->GetSelection()]; if (drive.mounted()) { TryUnmountDialog* d = new TryUnmountDialog(this, drive.description()); @@ -264,7 +317,7 @@ private: int re_select = wxNOT_FOUND; int j = 0; _drives = Drive::get (); - BOOST_FOREACH (Drive i, _drives) { + for (auto i: _drives) { wxString const s = std_to_wx(i.description()); if (s == current) { re_select = j; @@ -320,6 +373,7 @@ public: #endif #ifdef DCPOMATIC_OSX + dcpomatic_sleep_seconds (1); make_foreground_application (); #endif