mirror of
https://github.com/cookiengineer/audacity
synced 2025-06-16 08:09:32 +02:00
... 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.
113 lines
2.9 KiB
C++
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;
|
|
}
|