/********************************************************************** Audacity: A Digital Audio Editor Warning.cpp Dominic Mazzoni *******************************************************************//** \class WarningDialog \brief Gives a warning message, that can be dismissed, with crucially the ability to not see similar warnings again for this session. *//********************************************************************/ #include "../Audacity.h" #include "Warning.h" #include "../Prefs.h" #include "../ShuttleGui.h" #include #include #include #include #include #include #include class WarningDialog : public wxDialog { public: // constructors and destructors WarningDialog(wxWindow *parent, wxString message, bool showCancelButton); private: void OnOK(wxCommandEvent& event); wxCheckBox *mCheckBox; DECLARE_EVENT_TABLE() }; BEGIN_EVENT_TABLE(WarningDialog, wxDialog) EVT_BUTTON(wxID_OK, WarningDialog::OnOK) END_EVENT_TABLE() WarningDialog::WarningDialog(wxWindow *parent, wxString message, bool showCancelButton) : wxDialog(parent, wxID_ANY, (wxString)_("Warning"), wxDefaultPosition, wxDefaultSize, (showCancelButton ? wxDEFAULT_DIALOG_STYLE : wxCAPTION | wxSYSTEM_MENU)) // Unlike wxDEFAULT_DIALOG_STYLE, no wxCLOSE_BOX. { SetName(GetTitle()); SetIcon(wxArtProvider::GetIcon(wxART_WARNING, wxART_MESSAGE_BOX)); ShuttleGui S(this, eIsCreating); S.SetBorder(10); S.StartVerticalLay(false); { S.AddUnits(message); mCheckBox = S.AddCheckBox(_("Don't show this warning again"), wxT("false")); } S.SetBorder(0); S.AddStandardButtons(showCancelButton ? eOkButton | eCancelButton : eOkButton); Fit(); CentreOnParent(); } void WarningDialog::OnOK(wxCommandEvent& WXUNUSED(event)) { EndModal(mCheckBox->GetValue() ? wxID_NO : wxID_YES); // return YES, if message should be shown again } int ShowWarningDialog(wxWindow *parent, wxString internalDialogName, wxString message, bool showCancelButton) { wxString key(wxT("/Warnings/") + internalDialogName); if (!gPrefs->Read(key, (long) true)) { return wxID_OK; } WarningDialog dlog(parent, message, showCancelButton); int retCode = dlog.ShowModal(); if (retCode == wxID_CANCEL) return retCode; gPrefs->Write(key, (retCode == wxID_YES)); gPrefs->Flush(); return wxID_OK; }