home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / wxos2240.zip / wxWindows-2.4.0 / samples / config / conftest.cpp < prev    next >
C/C++ Source or Header  |  2002-12-16  |  9KB  |  265 lines

  1. ///////////////////////////////////////////////////////////////////////////////
  2. // Name:        conftest.cpp
  3. // Purpose:     demo of wxConfig and related classes
  4. // Author:      Vadim Zeitlin
  5. // Modified by:
  6. // Created:     03.08.98
  7. // RCS-ID:      $Id: conftest.cpp,v 1.15.2.1 2002/12/13 21:38:47 MBN Exp $
  8. // Copyright:   (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
  9. // Licence:     wxWindows license
  10. ///////////////////////////////////////////////////////////////////////////////
  11.  
  12. // ============================================================================
  13. // declarations
  14. // ============================================================================
  15.  
  16. // ----------------------------------------------------------------------------
  17. // headers
  18. // ----------------------------------------------------------------------------
  19. #include "wx/wxprec.h"
  20.  
  21. #ifndef  WX_PRECOMP
  22.   #include "wx/wx.h"
  23. #endif //precompiled headers
  24.  
  25. #include "wx/log.h"
  26. #include "wx/config.h"
  27.  
  28. // ----------------------------------------------------------------------------
  29. // classes
  30. // ----------------------------------------------------------------------------
  31.  
  32. class MyApp: public wxApp
  33. {
  34. public:
  35.   // implement base class virtuals
  36.   virtual bool OnInit();
  37.   virtual int OnExit();
  38. };
  39.  
  40. class MyFrame: public wxFrame
  41. {
  42. public:
  43.   MyFrame();
  44.   virtual ~MyFrame();
  45.  
  46.   // callbacks
  47.   void OnQuit(wxCommandEvent& event);
  48.   void OnAbout(wxCommandEvent& event);
  49.   void OnDelete(wxCommandEvent& event);
  50.  
  51. private:
  52.   wxTextCtrl *m_text;
  53.   wxCheckBox *m_check;
  54.  
  55.   DECLARE_EVENT_TABLE()
  56. };
  57.  
  58. enum
  59. {
  60.   ConfTest_Quit,
  61.   ConfTest_About,
  62.   ConfTest_Delete
  63. };
  64.  
  65. // ----------------------------------------------------------------------------
  66. // event tables
  67. // ----------------------------------------------------------------------------
  68.  
  69. BEGIN_EVENT_TABLE(MyFrame, wxFrame)
  70.   EVT_MENU(ConfTest_Quit, MyFrame::OnQuit)
  71.   EVT_MENU(ConfTest_About, MyFrame::OnAbout)
  72.   EVT_MENU(ConfTest_Delete, MyFrame::OnDelete)
  73. END_EVENT_TABLE()
  74.  
  75. // ============================================================================
  76. // implementation
  77. // ============================================================================
  78.  
  79. // ----------------------------------------------------------------------------
  80. // application
  81. // ----------------------------------------------------------------------------
  82.  
  83. IMPLEMENT_APP(MyApp)
  84.  
  85. // `Main program' equivalent, creating windows and returning main app frame
  86. bool MyApp::OnInit()
  87. {
  88.   // we're using wxConfig's "create-on-demand" feature: it will create the
  89.   // config object when it's used for the first time. It has a number of
  90.   // advantages compared with explicitly creating our wxConfig:
  91.   //  1) we don't pay for it if we don't use it
  92.   //  2) there is no danger to create it twice
  93.  
  94.   // application and vendor name are used by wxConfig to construct the name
  95.   // of the config file/registry key and must be set before the first call
  96.   // to Get() if you want to override the default values (the application
  97.   // name is the name of the executable and the vendor name is the same)
  98.   SetVendorName(_T("wxWindows"));
  99.   SetAppName(_T("conftest")); // not needed, it's the default value
  100.  
  101.   wxConfigBase *pConfig = wxConfigBase::Get();
  102.  
  103.   // uncomment this to force writing back of the defaults for all values
  104.   // if they're not present in the config - this can give the user an idea
  105.   // of all possible settings for this program
  106.   pConfig->SetRecordDefaults();
  107.  
  108.   // or you could also write something like this:
  109.   //  wxFileConfig *pConfig = new wxFileConfig("conftest");
  110.   //  wxConfigBase::Set(pConfig);
  111.   // where you can also specify the file names explicitly if you wish.
  112.   // Of course, calling Set() is optional and you only must do it if
  113.   // you want to later retrieve this pointer with Get().
  114.  
  115.   // create the main program window
  116.   MyFrame *frame = new MyFrame;
  117.   frame->Show(TRUE);
  118.   SetTopWindow(frame);
  119.  
  120.   // use our config object...
  121.   if ( pConfig->Read(_T("/Controls/Check"), 1l) != 0 ) {
  122.       wxMessageBox(_T("You can disable this message box by unchecking\n")
  123.                    _T("the checkbox in the main window (of course, a real\n")
  124.                    _T("program would have a checkbox right here but we\n")
  125.                  _T("keep it simple)"), _T("Welcome to wxConfig demo"),
  126.                  wxICON_INFORMATION | wxOK);
  127.   }
  128.  
  129.   return TRUE;
  130. }
  131.  
  132. int MyApp::OnExit()
  133. {
  134.   // clean up: Set() returns the active config object as Get() does, but unlike
  135.   // Get() it doesn't try to create one if there is none (definitely not what
  136.   // we want here!)
  137.   delete wxConfigBase::Set((wxConfigBase *) NULL);
  138.  
  139.   return 0;
  140. }
  141.  
  142. // ----------------------------------------------------------------------------
  143. // frame
  144. // ----------------------------------------------------------------------------
  145.  
  146. // main frame ctor
  147. MyFrame::MyFrame()
  148.        : wxFrame((wxFrame *) NULL, -1, _T("wxConfig Demo"))
  149. {
  150.   // menu
  151.   wxMenu *file_menu = new wxMenu;
  152.  
  153.   file_menu->Append(ConfTest_Delete, _T("&Delete"), _T("Delete config file"));
  154.   file_menu->AppendSeparator();
  155.   file_menu->Append(ConfTest_About, _T("&About\tF1"), _T("About this sample"));
  156.   file_menu->AppendSeparator();
  157.   file_menu->Append(ConfTest_Quit, _T("E&xit\tAlt-X"), _T("Exit the program"));
  158.   wxMenuBar *menu_bar = new wxMenuBar;
  159.   menu_bar->Append(file_menu, _T("&File"));
  160.   SetMenuBar(menu_bar);
  161.  
  162.   CreateStatusBar();
  163.  
  164.   // child controls
  165.   wxPanel *panel = new wxPanel(this);
  166.   (void)new wxStaticText(panel, -1, _T("These controls remember their values!"),
  167.                          wxPoint(10, 10), wxSize(300, 20));
  168.   m_text = new wxTextCtrl(panel, -1, _T(""), wxPoint(10, 40), wxSize(300, 20));
  169.   m_check = new wxCheckBox(panel, -1, _T("show welcome message box at startup"),
  170.                            wxPoint(10, 70), wxSize(300, 20));
  171.  
  172.   // restore the control's values from the config
  173.  
  174.   // NB: in this program, the config object is already created at this moment
  175.   // because we had called Get() from MyApp::OnInit(). However, if you later
  176.   // change the code and don't create it before this line, it won't break
  177.   // anything - unlike if you manually create wxConfig object with Create()
  178.   // or in any other way (then you must be sure to create it before using it!).
  179.   wxConfigBase *pConfig = wxConfigBase::Get();
  180.  
  181.   // we could write Read("/Controls/Text") as well, it's just to show SetPath()
  182.   pConfig->SetPath(_T("/Controls"));
  183.  
  184.   m_text->SetValue(pConfig->Read(_T("Text"), _T("")));
  185.   m_check->SetValue(pConfig->Read(_T("Check"), 1l) != 0);
  186.  
  187.   // SetPath() understands ".."
  188.   pConfig->SetPath(_T("../MainFrame"));
  189.  
  190.   // restore frame position and size
  191.   int x = pConfig->Read(_T("x"), 50),
  192.       y = pConfig->Read(_T("y"), 50),
  193.       w = pConfig->Read(_T("w"), 350),
  194.       h = pConfig->Read(_T("h"), 200);
  195.   Move(x, y);
  196.   SetClientSize(w, h);
  197.  
  198.   pConfig->SetPath(_T("/"));
  199.   wxString s;
  200.   if ( pConfig->Read(_T("TestValue"), &s) )
  201.   {
  202.       wxLogStatus(this, wxT("TestValue from config is '%s'"), s.c_str());
  203.   }
  204.   else
  205.   {
  206.       wxLogStatus(this, wxT("TestValue not found in the config"));
  207.   }
  208. }
  209.  
  210. void MyFrame::OnQuit(wxCommandEvent&)
  211. {
  212.   Close(TRUE);
  213. }
  214.  
  215. void MyFrame::OnAbout(wxCommandEvent&)
  216. {
  217.   wxMessageBox(_T("wxConfig demo\n⌐ 1998-2001 Vadim Zeitlin"), _T("About"),
  218.                wxICON_INFORMATION | wxOK);
  219. }
  220.  
  221. void MyFrame::OnDelete(wxCommandEvent&)
  222. {
  223.     wxConfigBase *pConfig = wxConfigBase::Get();
  224.     if ( pConfig == NULL )
  225.     {
  226.         wxLogError(_T("No config to delete!"));
  227.         return;
  228.     }
  229.  
  230.     if ( pConfig->DeleteAll() )
  231.     {
  232.         wxLogMessage(_T("Config file/registry key successfully deleted."));
  233.  
  234.         delete wxConfigBase::Set(NULL);
  235.         wxConfigBase::DontCreateOnDemand();
  236.     }
  237.     else
  238.     {
  239.         wxLogError(_T("Deleting config file/registry key failed."));
  240.     }
  241. }
  242.  
  243. MyFrame::~MyFrame()
  244. {
  245.   wxConfigBase *pConfig = wxConfigBase::Get();
  246.   if ( pConfig == NULL )
  247.     return;
  248.  
  249.   // save the control's values to the config
  250.   pConfig->Write(_T("/Controls/Text"), m_text->GetValue());
  251.   pConfig->Write(_T("/Controls/Check"), m_check->GetValue());
  252.  
  253.   // save the frame position
  254.   int x, y, w, h;
  255.   GetClientSize(&w, &h);
  256.   GetPosition(&x, &y);
  257.   pConfig->Write(_T("/MainFrame/x"), (long) x);
  258.   pConfig->Write(_T("/MainFrame/y"), (long) y);
  259.   pConfig->Write(_T("/MainFrame/w"), (long) w);
  260.   pConfig->Write(_T("/MainFrame/h"), (long) h);
  261.  
  262.   pConfig->Write(_T("/TestValue"), wxT("A test value"));
  263. }
  264.  
  265.