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
{
, _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.
*/
_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.
}
+#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()) {
DCPOMATIC_ASSERT (_drive->GetSelection() != wxNOT_FOUND);
DCPOMATIC_ASSERT (static_cast<bool>(_dcp_path));
+ bool have_writer = true;
+ if (!_nanomsg.send(DISK_WRITER_PING "\n", 2000)) {
+ have_writer = false;
+ } else {
+ optional<string> 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());
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;
#endif
#ifdef DCPOMATIC_OSX
+ dcpomatic_sleep_seconds (1);
make_foreground_application ();
#endif