/**********************************************************************

  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 <wx/button.h>
#include <wx/checkbox.h>
#include <wx/dialog.h>
#include <wx/intl.h>
#include <wx/sizer.h>
#include <wx/stattext.h>

class WarningDialog : public wxDialog
{
   public:
   // constructors and destructors
   WarningDialog(wxWindow *parent, 
                 wxString message);

   bool dontShow;
   
private:
   void OnOk( wxCommandEvent &event );

   wxCheckBox *mCheckBox;
   
private:
   DECLARE_EVENT_TABLE()
};

BEGIN_EVENT_TABLE(WarningDialog, wxDialog)
   EVT_BUTTON( wxID_OK, WarningDialog::OnOk )
END_EVENT_TABLE()

WarningDialog::WarningDialog(wxWindow *parent, wxString message):
   wxDialog(parent, (wxWindowID)-1, (wxString)_("Warning")),
   dontShow( false )
{
   wxBoxSizer *mainSizer = new wxBoxSizer(wxVERTICAL);
   wxBoxSizer *vSizer = new wxBoxSizer(wxVERTICAL);

   wxStaticText *statText = new wxStaticText(this, -1, message);
   vSizer->Add(statText, 0, wxALIGN_LEFT|wxALL, 5);

   mCheckBox = new wxCheckBox(this, -1, _("Don't show this warning again"));
   vSizer->Add(mCheckBox, 0, wxALIGN_LEFT|wxALL, 5);

   wxButton *ok = new wxButton(this, wxID_OK, _("OK"));
   ok->SetDefault();
   ok->SetFocus();
   vSizer->Add(ok, 0, wxALIGN_CENTRE|wxALL, 5);

   mainSizer->Add(vSizer, 0, wxALL, 15);

   SetAutoLayout(true);
   SetSizer(mainSizer);
   mainSizer->Fit(this);
   mainSizer->SetSizeHints(this);
}

void WarningDialog::OnOk(wxCommandEvent &event)
{
   dontShow = mCheckBox->GetValue();
   
   EndModal(true);
}

void ShowWarningDialog(wxWindow *parent,
                       wxString internalDialogName,
                       wxString message)
{
   bool dontShow = false;

   gPrefs->SetPath(wxT("/Warnings"));
   gPrefs->Read(internalDialogName, &dontShow, false);
   gPrefs->SetPath(wxT("/"));

   if (dontShow)
      return;

   WarningDialog dlog(parent, message);
   dlog.CentreOnParent();
   dlog.ShowModal();

   if (dlog.dontShow) {
      gPrefs->SetPath(wxT("/Warnings"));
      gPrefs->Write(internalDialogName, true);
      gPrefs->SetPath(wxT("/"));
   }
}

// Indentation settings for Vim and Emacs and unique identifier for Arch, a
// version control system. Please do not modify past this point.
//
// Local Variables:
// c-basic-offset: 3
// indent-tabs-mode: nil
// End:
//
// vim: et sts=3 sw=3
// arch-tag: b84d77e0-4375-43f0-868e-3130e18c14c8

