/*
- 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 "check_box.h"
#include "nag_dialog.h"
+#include "static_text.h"
#include "wx_util.h"
-#include <wx/richtext/richtextctrl.h>
-#include <boost/foreach.hpp>
-using boost::shared_ptr;
-NagDialog::NagDialog (wxWindow* parent, Config::Nag nag, wxString message)
+using std::shared_ptr;
+#if BOOST_VERSION >= 106100
+using namespace boost::placeholders;
+#endif
+
+
+static constexpr int width = 400;
+
+
+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;
}