X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Ftools%2Fdcpomatic_disk.cc;h=88f5420ee0a045c8693ec5220a54df7a4a8a2669;hb=2693be674d071a7d0d04d10f7b5e1de62734234d;hp=92429aa53238c43a75a57bae33328750c895696a;hpb=1a7c50245309bb0b99001940b2203a267de942ca;p=dcpomatic.git diff --git a/src/tools/dcpomatic_disk.cc b/src/tools/dcpomatic_disk.cc index 92429aa53..88f5420ee 100644 --- a/src/tools/dcpomatic_disk.cc +++ b/src/tools/dcpomatic_disk.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2019-2020 Carl Hetherington + Copyright (C) 2019-2021 Carl Hetherington This file is part of DCP-o-matic. @@ -18,6 +18,7 @@ */ + #include "wx/wx_signal_manager.h" #include "wx/wx_util.h" #include "wx/job_manager_view.h" @@ -47,38 +48,56 @@ DCPOMATIC_ENABLE_WARNINGS #include #endif -using std::string; -using std::exception; -using std::cout; + using std::cerr; -using boost::shared_ptr; +using std::cout; +using std::exception; +using std::make_shared; +using std::shared_ptr; +using std::string; 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 { public: explicit DOMFrame (wxString const & title) - : wxFrame (0, -1, title) + : wxFrame (nullptr, wxID_ANY, title) , _nanomsg (true) , _sizer (new wxBoxSizer(wxVERTICAL)) { +#ifdef DCPOMATIC_OSX + auto bar = new wxMenuBar; + auto 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. */ - wxPanel* overall_panel = new wxPanel (this); - wxSizer* s = new wxBoxSizer (wxHORIZONTAL); + auto overall_panel = new wxPanel (this); + auto s = new wxBoxSizer (wxHORIZONTAL); s->Add (overall_panel, 1, wxEXPAND); SetSizer (s); - wxGridBagSizer* grid = new wxGridBagSizer (DCPOMATIC_SIZER_X_GAP, DCPOMATIC_SIZER_Y_GAP); + auto grid = new wxGridBagSizer (DCPOMATIC_SIZER_X_GAP, DCPOMATIC_SIZER_Y_GAP); int r = 0; add_label_to_sizer (grid, overall_panel, _("DCP"), true, wxGBPosition(r, 0)); - wxBoxSizer* dcp_name_sizer = new wxBoxSizer (wxHORIZONTAL); + auto dcp_name_sizer = new wxBoxSizer (wxHORIZONTAL); _dcp_name = new wxStaticText (overall_panel, wxID_ANY, wxEmptyString); dcp_name_sizer->Add (_dcp_name, 1, wxALIGN_CENTER_VERTICAL | wxRIGHT, DCPOMATIC_SIZER_X_GAP); _dcp_open = new wxButton (overall_panel, wxID_ANY, _("Open...")); @@ -87,7 +106,7 @@ public: ++r; add_label_to_sizer (grid, overall_panel, _("Drive"), true, wxGBPosition(r, 0)); - wxBoxSizer* drive_sizer = new wxBoxSizer (wxHORIZONTAL); + auto drive_sizer = new wxBoxSizer (wxHORIZONTAL); _drive = new wxChoice (overall_panel, wxID_ANY); drive_sizer->Add (_drive, 1, wxALIGN_CENTER_VERTICAL | wxRIGHT, DCPOMATIC_SIZER_X_GAP); _drive_refresh = new wxButton (overall_panel, wxID_ANY, _("Refresh")); @@ -113,7 +132,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. @@ -163,13 +182,21 @@ 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()) { return true; } - wxMessageDialog* d = new wxMessageDialog ( + auto d = new wxMessageDialog ( 0, _("There are unfinished jobs; are you sure you want to quit?"), _("Unfinished jobs"), @@ -195,7 +222,7 @@ private: void open () { - wxDirDialog* d = new wxDirDialog (this, _("Choose a DCP folder"), wxT(""), wxDD_DIR_MUST_EXIST); + auto d = new wxDirDialog (this, _("Choose a DCP folder"), wxT(""), wxDD_DIR_MUST_EXIST); int r = d->ShowModal (); boost::filesystem::path const path (wx_to_std(d->GetPath())); d->Destroy (); @@ -218,7 +245,7 @@ private: if (!_nanomsg.send(DISK_WRITER_PING "\n", 2000)) { have_writer = false; } else { - optional reply = _nanomsg.receive (2000); + auto reply = _nanomsg.receive (2000); if (!reply || *reply != DISK_WRITER_PONG) { have_writer = false; } @@ -226,7 +253,7 @@ private: if (!have_writer) { #ifdef DCPOMATIC_WINDOWS - MessageDialog* m = new MessageDialog ( + auto 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.") @@ -239,9 +266,9 @@ private: #endif } - Drive const& drive = _drives[_drive->GetSelection()]; + auto const& drive = _drives[_drive->GetSelection()]; if (drive.mounted()) { - TryUnmountDialog* d = new TryUnmountDialog(this, drive.description()); + auto d = new TryUnmountDialog(this, drive.description()); int const r = d->ShowModal (); d->Destroy (); if (r != wxID_OK) { @@ -255,9 +282,9 @@ private: if (!_nanomsg.send(drive.as_xml(), 2000)) { throw CommunicationFailedError (); } - optional reply = _nanomsg.receive (2000); + auto reply = _nanomsg.receive (2000); if (!reply || *reply != DISK_WRITER_OK) { - MessageDialog* m = new MessageDialog ( + auto * m = new MessageDialog ( this, _("DCP-o-matic Disk Writer"), wxString::Format(_("The drive %s could not be unmounted.\nClose any application that is using it, then try again."), std_to_wx(drive.description())) @@ -269,7 +296,7 @@ private: } - DriveWipeWarningDialog* d = new DriveWipeWarningDialog (this, _drive->GetString(_drive->GetSelection())); + auto * d = new DriveWipeWarningDialog (this, _drive->GetString(_drive->GetSelection())); int const r = d->ShowModal (); bool ok = r == wxID_OK && d->confirmed(); d->Destroy (); @@ -278,7 +305,7 @@ private: return; } - JobManager::instance()->add(shared_ptr(new CopyToDriveJob(*_dcp_path, _drives[_drive->GetSelection()], _nanomsg))); + JobManager::instance()->add(make_shared(*_dcp_path, _drives[_drive->GetSelection()], _nanomsg)); setup_sensitivity (); } @@ -293,8 +320,8 @@ private: int re_select = wxNOT_FOUND; int j = 0; _drives = Drive::get (); - BOOST_FOREACH (Drive i, _drives) { - wxString const s = std_to_wx(i.description()); + for (auto i: _drives) { + auto const s = std_to_wx(i.description()); if (s == current) { re_select = j; } @@ -325,6 +352,7 @@ private: wxSizer* _sizer; }; + class App : public wxApp { public: @@ -349,6 +377,7 @@ public: #endif #ifdef DCPOMATIC_OSX + dcpomatic_sleep_seconds (1); make_foreground_application (); #endif @@ -372,7 +401,7 @@ public: */ Config::drop (); - DiskWarningDialog* warning = new DiskWarningDialog (); + auto warning = new DiskWarningDialog (); warning->ShowModal (); if (!warning->confirmed()) { return false;