1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-06-16 08:09:32 +02:00
audacity/src/widgets/Warning.cpp
Paul Licameli 5fef82dccf Define Setting classes, bundling config path with settings value...
... the intention being, that no string literal for a path, or its default
value, shall ever occur twice in the code, relying on long-distance coincidence
of literal values.  Instead, a named Setting object is constructed once, then
read and written.

For now, the Tie... functions in ShuttleGuiBase will take references to
implicitly constructed temporary Setting objects.  But all should later be
made static objects, and the constructors made explicit.
2021-05-17 08:46:08 -04:00

113 lines
2.9 KiB
C++

/**********************************************************************
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 "Warning.h"
#include "../ShuttleGui.h"
#include <wx/artprov.h>
#include <wx/button.h>
#include <wx/checkbox.h>
#include <wx/intl.h>
#include <wx/sizer.h>
#include <wx/stattext.h>
#include "wxPanelWrapper.h"
class WarningDialog final : public wxDialogWrapper
{
public:
// constructors and destructors
WarningDialog(wxWindow *parent,
const TranslatableString &message,
const TranslatableString &footer,
bool showCancelButton);
private:
void OnOK(wxCommandEvent& event);
wxCheckBox *mCheckBox;
DECLARE_EVENT_TABLE()
};
BEGIN_EVENT_TABLE(WarningDialog, wxDialogWrapper)
EVT_BUTTON(wxID_OK, WarningDialog::OnOK)
END_EVENT_TABLE()
const TranslatableString &DefaultWarningFooter()
{
static auto result = XXO("Don't show this warning again");
return result;
}
WarningDialog::WarningDialog(wxWindow *parent, const TranslatableString &message,
const TranslatableString &footer,
bool showCancelButton)
: wxDialogWrapper(parent, wxID_ANY, XO("Warning"),
wxDefaultPosition, wxDefaultSize,
(showCancelButton ? wxDEFAULT_DIALOG_STYLE : wxCAPTION | wxSYSTEM_MENU)) // Unlike wxDEFAULT_DIALOG_STYLE, no wxCLOSE_BOX.
{
SetName();
SetIcon(wxArtProvider::GetIcon(wxART_WARNING, wxART_MESSAGE_BOX));
ShuttleGui S(this, eIsCreating);
S.SetBorder(10);
S.StartVerticalLay(false);
{
S.AddFixedText(message);
mCheckBox = S.AddCheckBox(footer, false);
}
S.EndVerticalLay();
S.SetBorder(0);
S.AddStandardButtons(showCancelButton ? eOkButton | eCancelButton : eOkButton);
Layout();
GetSizer()->Fit(this);
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,
const wxString &internalDialogName,
const TranslatableString &message,
bool showCancelButton,
const TranslatableString &footer)
{
auto key = WarningDialogKey(internalDialogName);
if (!gPrefs->Read(key, (long) true)) {
return wxID_OK;
}
WarningDialog dlog(parent, message, footer, showCancelButton);
int retCode = dlog.ShowModal();
if (retCode == wxID_CANCEL)
return retCode;
gPrefs->Write(key, (retCode == wxID_YES));
gPrefs->Flush();
return wxID_OK;
}