C++11 tidying.
[dcpomatic.git] / src / wx / nag_dialog.cc
index 69b64cb400a9c79c7c454c7b77c82c251b5a1900..edaf8f83f6a41f97d0da29b7ae6d422be5478d3b 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2017 Carl Hetherington <cth@carlh.net>
+    Copyright (C) 2017-2021 Carl Hetherington <cth@carlh.net>
 
     This file is part of DCP-o-matic.
 
 
 */
 
+
 #include "nag_dialog.h"
 #include "wx_util.h"
-#include <wx/richtext/richtextctrl.h>
-#include <boost/foreach.hpp>
+#include "static_text.h"
+#include "check_box.h"
+
+
+using std::shared_ptr;
+#if BOOST_VERSION >= 106100
+using namespace boost::placeholders;
+#endif
+
 
-using boost::shared_ptr;
+static constexpr int width = 400;
 
-NagDialog::NagDialog (wxWindow* parent, Config::Nag nag, wxString message)
+
+NagDialog::NagDialog (wxWindow* parent, Config::Nag nag, wxString message, bool can_cancel)
        : wxDialog (parent, wxID_ANY, _("Important notice"))
        , _nag (nag)
 {
-       wxBoxSizer* sizer = new wxBoxSizer (wxVERTICAL);
-       _text = new wxStaticText (this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize (400, 300));
-       sizer->Add (_text, 1, wxEXPAND | wxALL, 6);
+       auto sizer = new wxBoxSizer (wxVERTICAL);
+       _text = new StaticText (this, wxEmptyString, wxDefaultPosition, wxSize(width, 300));
+       sizer->Add (_text, 1, wxEXPAND | wxALL, DCPOMATIC_DIALOG_BORDER);
 
-       wxCheckBox* b = new wxCheckBox (this, wxID_ANY, _("Don't show this message again"));
-       b->SetValue (true);
-       Config::instance()->set_nagged (_nag, true);
+       auto b = new CheckBox (this, _("Don't show this message again"));
        sizer->Add (b, 0, wxALL, 6);
        b->Bind (wxEVT_CHECKBOX, bind (&NagDialog::shut_up, this, _1));
 
-       wxStdDialogButtonSizer* buttons = CreateStdDialogButtonSizer (0);
-       sizer->Add (CreateSeparatedSizer(buttons), wxSizerFlags().Expand().DoubleBorder());
-       buttons->SetAffirmativeButton (new wxButton (this, wxID_OK));
-       buttons->Realize ();
+       int flags = wxOK;
+       if (can_cancel) {
+               flags |= wxCANCEL;
+       }
+       auto buttons = CreateSeparatedButtonSizer (flags);
+       if (buttons) {
+               sizer->Add(buttons, wxSizerFlags().Expand().DoubleBorder());
+       }
+
+       _text->SetLabelMarkup (message);
+       _text->Wrap (width);
 
        SetSizer (sizer);
        sizer->Layout ();
        sizer->SetSizeHints (this);
-
-       _text->SetLabelMarkup (message);
 }
 
+
 void
 NagDialog::shut_up (wxCommandEvent& ev)
 {
        Config::instance()->set_nagged (_nag, ev.IsChecked());
 }
 
-void
-NagDialog::maybe_nag (wxWindow* parent, Config::Nag nag, wxString message)
+
+/** @return true if the user clicked Cancel */
+bool
+NagDialog::maybe_nag (wxWindow* parent, Config::Nag nag, wxString message, bool can_cancel)
 {
-       if (!Config::instance()->nagged (nag)) {
-               NagDialog* d = new NagDialog (parent, nag, message);
-               d->ShowModal ();
-               d->Destroy ();
+       if (Config::instance()->nagged(nag)) {
+               return false;
        }
+
+       auto d = new NagDialog (parent, nag, message, can_cancel);
+       int const r = d->ShowModal();
+       d->Destroy ();
+
+       return r == wxID_CANCEL;
 }