Revision: 7402
http://mahogany.svn.sourceforge.net/mahogany/?rev=7402&view=rev
Author: vadz
Date: 2008-02-23 19:27:26 -0800 (Sat, 23 Feb 2008)
Log Message:
-----------
create page controls only when the page is shown to reduce the time needed to
show the options dialog initially
Modified Paths:
--------------
trunk/M/include/gui/wxOptionsPage.h
trunk/M/src/gui/wxOptionsDlg.cpp
Modified: trunk/M/include/gui/wxOptionsPage.h
===================================================================
--- trunk/M/include/gui/wxOptionsPage.h 2008-01-23 11:39:33 UTC (rev 7401)
+++ trunk/M/include/gui/wxOptionsPage.h 2008-02-24 03:27:26 UTC (rev 7402)
@@ -165,10 +165,14 @@
virtual ~wxOptionsPage();
- // transfer data to/from the controls
+ // transfer data to/from the controls: derived classes should implement
+ // DoTransferOptionsTo/FromWindow() instead of overriding those
virtual bool TransferDataToWindow();
virtual bool TransferDataFromWindow();
+ // create controls when the page is shown in the notebook for the first time
+ virtual bool Show(bool show = true);
+
// to change the profile associated with the page:
void SetProfile(Profile *profile);
@@ -192,6 +196,10 @@
int HelpId(void) const { return m_HelpId; }
protected:
+ // these methods are called from TransferDataTo/FromWindow()
+ virtual bool DoTransferOptionsToWindow();
+ virtual bool DoTransferOptionsFromWindow();
+
/// get the name of the folder we're editing the options of
String GetFolderName() const;
@@ -518,9 +526,6 @@
public:
wxOptionsPageNetwork(wxNotebook *parent, Profile *profile);
- virtual bool TransferDataToWindow();
- virtual bool TransferDataFromWindow();
-
// for wxOptionsPageDesc
static wxOptionsPage *New(wxNotebook *parent,
const wxString& title,
@@ -537,6 +542,10 @@
helpID, image);
}
+protected:
+ virtual bool DoTransferOptionsToWindow();
+ virtual bool DoTransferOptionsFromWindow();
+
private:
// ctor for New()
wxOptionsPageNetwork(wxNotebook *parent,
@@ -580,8 +589,9 @@
void OnButton(wxCommandEvent&);
- virtual bool TransferDataToWindow();
- virtual bool TransferDataFromWindow();
+protected:
+ virtual bool DoTransferOptionsToWindow();
+ virtual bool DoTransferOptionsFromWindow();
private:
// create m_folder for our m_Profile
@@ -654,8 +664,9 @@
void OnButton(wxCommandEvent&);
- virtual bool TransferDataToWindow();
- virtual bool TransferDataFromWindow();
+protected:
+ virtual bool DoTransferOptionsToWindow();
+ virtual bool DoTransferOptionsFromWindow();
private:
// the names of all available viewers
@@ -674,10 +685,10 @@
public:
wxOptionsPageFolderView(wxNotebook *parent, Profile *profile);
- virtual bool TransferDataToWindow();
- virtual bool TransferDataFromWindow();
+protected:
+ virtual bool DoTransferOptionsToWindow();
+ virtual bool DoTransferOptionsFromWindow();
-protected:
void OnButton(wxCommandEvent&);
private:
@@ -691,8 +702,9 @@
public:
wxOptionsPageFolderTree(wxNotebook *parent, Profile *profile);
- virtual bool TransferDataToWindow();
- virtual bool TransferDataFromWindow();
+protected:
+ virtual bool DoTransferOptionsToWindow();
+ virtual bool DoTransferOptionsFromWindow();
private:
bool m_isHomeOrig;
@@ -707,8 +719,9 @@
public:
wxOptionsPageFolders(wxNotebook *parent, Profile *profile);
- virtual bool TransferDataToWindow();
- virtual bool TransferDataFromWindow();
+protected:
+ virtual bool DoTransferOptionsToWindow();
+ virtual bool DoTransferOptionsFromWindow();
void OnUpdateUIBtns(wxUpdateUIEvent&);
@@ -727,7 +740,7 @@
public:
wxOptionsPagePython(wxNotebook *parent, Profile *profile);
- virtual bool TransferDataFromWindow();
+ virtual bool DoTransferOptionsFromWindow();
private:
DECLARE_NO_COPY_CLASS(wxOptionsPagePython)
@@ -741,8 +754,9 @@
public:
wxOptionsPageAdb(wxNotebook *parent, Profile *profile);
- virtual bool TransferDataToWindow();
- virtual bool TransferDataFromWindow();
+protected:
+ virtual bool DoTransferOptionsToWindow();
+ virtual bool DoTransferOptionsFromWindow();
private:
DECLARE_NO_COPY_CLASS(wxOptionsPageAdb)
@@ -765,12 +779,13 @@
public:
wxOptionsPageSync(wxNotebook *parent, Profile *profile);
- virtual bool TransferDataToWindow();
- virtual bool TransferDataFromWindow();
+protected:
+ virtual bool DoTransferOptionsToWindow();
+ virtual bool DoTransferOptionsFromWindow();
void OnButton(wxCommandEvent& event);
-protected:
+
// do we want to use settings synchronization?
// (may be true, false or -1 if unknown)
int m_activateSync;
@@ -791,12 +806,13 @@
public:
wxOptionsPageOthers(wxNotebook *parent, Profile *profile);
- virtual bool TransferDataToWindow();
- virtual bool TransferDataFromWindow();
+protected:
+ virtual bool DoTransferOptionsToWindow();
+ virtual bool DoTransferOptionsFromWindow();
void OnButton(wxCommandEvent&);
-protected:
+
// the old auto save timer interval
long m_nAutosaveDelay;
Modified: trunk/M/src/gui/wxOptionsDlg.cpp
===================================================================
--- trunk/M/src/gui/wxOptionsDlg.cpp 2008-01-23 11:39:33 UTC (rev 7401)
+++ trunk/M/src/gui/wxOptionsDlg.cpp 2008-02-24 03:27:26 UTC (rev 7402)
@@ -76,6 +76,13 @@
#include "ColourNames.h"
+// uncomment this to output some timings about options dialog creation
+#define PROFILE_OPTIONS_DLG
+
+#ifdef PROFILE_OPTIONS_DLG
+ #include <wx/stopwatch.h>
+#endif
+
// ----------------------------------------------------------------------------
// persistent msgboxes we use here
// ----------------------------------------------------------------------------
@@ -2369,8 +2376,6 @@
image = -1;
}
- notebook->AddPage(this, title, FALSE /* don't select */, image);
-
m_Profile = profile;
m_Profile->IncRef();
@@ -2379,8 +2384,11 @@
m_nFirst = nFirst;
m_nLast = nLast;
- CreateControls();
+ notebook->AddPage(this, title, FALSE /* don't select */, image);
+ // don't create controls yet, this will be done in Show() when we become the
+ // notebook current page
+
return true;
}
@@ -2397,6 +2405,33 @@
SafeDecRef(m_Profile);
}
+bool wxOptionsPage::Show(bool show)
+{
+ if ( !wxNotebookPageBase::Show(show) )
+ return false;
+
+ if ( show && m_aControls.IsEmpty() )
+ {
+#ifdef PROFILE_OPTIONS_DLG
+ wxStopWatch sw;
+#endif
+
+ CreateControls();
+
+ Layout();
+
+ TransferDataToWindow();
+
+ UpdateUI();
+
+#ifdef PROFILE_OPTIONS_DLG
+ wxLogStatus(_T("Options page created in %ldms"), sw.Time());
+#endif
+ }
+
+ return true;
+}
+
String wxOptionsPage::GetFolderName() const
{
return m_Profile->GetFolderName();
@@ -2655,6 +2690,9 @@
void wxOptionsPage::UpdateUI()
{
+ if ( m_aControls.IsEmpty() )
+ return;
+
for ( size_t n = m_nFirst; n < m_nLast; n++ ) {
int nCheckField = m_aFields[n].enable;
if ( nCheckField != -1 ) {
@@ -2784,6 +2822,17 @@
// read the data from config
bool wxOptionsPage::TransferDataToWindow()
{
+ if ( m_aControls.IsEmpty() )
+ {
+ // we're not created yet, will do this later
+ return true;
+ }
+
+ return DoTransferOptionsToWindow();
+}
+
+bool wxOptionsPage::DoTransferOptionsToWindow()
+{
// disable environment variable expansion here because we want the user to
// edit the real value stored in the config
ProfileEnvVarSave suspend(m_Profile, false);
@@ -2974,12 +3023,23 @@
ClearDirty(n);
}
- return TRUE;
+ return true;
}
// write the data to config
bool wxOptionsPage::TransferDataFromWindow()
{
+ if ( m_aControls.IsEmpty() )
+ {
+ // we must have been never shown so no data could have been modified
+ return true;
+ }
+
+ return DoTransferOptionsFromWindow();
+}
+
+bool wxOptionsPage::DoTransferOptionsFromWindow()
+{
String strValue;
long lValue = 0;
for ( size_t n = m_nFirst; n < m_nLast; n++ )
@@ -3451,9 +3511,9 @@
}
}
-bool wxOptionsPageMessageView::TransferDataToWindow()
+bool wxOptionsPageMessageView::DoTransferOptionsToWindow()
{
- bool bRc = wxOptionsPage::TransferDataToWindow();
+ bool bRc = wxOptionsPage::DoTransferOptionsToWindow();
if ( bRc )
{
wxArrayString descViewers;
@@ -3489,9 +3549,9 @@
return bRc;
}
-bool wxOptionsPageMessageView::TransferDataFromWindow()
+bool wxOptionsPageMessageView::DoTransferOptionsFromWindow()
{
- bool bRc = wxOptionsPage::TransferDataFromWindow();
+ bool bRc = wxOptionsPage::DoTransferOptionsFromWindow();
if ( bRc )
{
wxWindow *win = GetControl(ConfigField_MsgViewer);
@@ -3541,9 +3601,9 @@
{
}
-bool wxOptionsPageFolderView::TransferDataToWindow()
+bool wxOptionsPageFolderView::DoTransferOptionsToWindow()
{
- if ( !wxOptionsPageStandard::TransferDataToWindow() )
+ if ( !wxOptionsPageStandard::DoTransferOptionsToWindow() )
return false;
wxRadioBox *radio =
@@ -3568,9 +3628,9 @@
return true;
}
-bool wxOptionsPageFolderView::TransferDataFromWindow()
+bool wxOptionsPageFolderView::DoTransferOptionsFromWindow()
{
- if ( !wxOptionsPageStandard::TransferDataFromWindow() )
+ if ( !wxOptionsPageStandard::DoTransferOptionsFromWindow() )
return false;
wxRadioBox *radio =
@@ -3643,9 +3703,9 @@
{
}
-bool wxOptionsPageFolderTree::TransferDataToWindow()
+bool wxOptionsPageFolderTree::DoTransferOptionsToWindow()
{
- if ( !wxOptionsPageStandard::TransferDataToWindow() )
+ if ( !wxOptionsPageStandard::DoTransferOptionsToWindow() )
return false;
wxControl *control = GetControl(ConfigField_FolderTreeIsHome);
@@ -3668,9 +3728,9 @@
return true;
}
-bool wxOptionsPageFolderTree::TransferDataFromWindow()
+bool wxOptionsPageFolderTree::DoTransferOptionsFromWindow()
{
- if ( !wxOptionsPageStandard::TransferDataFromWindow() )
+ if ( !wxOptionsPageStandard::DoTransferOptionsFromWindow() )
return false;
wxControl *control = GetControl(ConfigField_FolderTreeIsHome);
@@ -3787,7 +3847,7 @@
#endif // USE_DIALUP
// dynamically fill the RAS connections combo box under Windows
-bool wxOptionsPageNetwork::TransferDataToWindow()
+bool wxOptionsPageNetwork::DoTransferOptionsToWindow()
{
#ifdef USE_OWN_CCLIENT
m_oldAuthsDisabled = READ_CONFIG_TEXT(m_Profile, MP_SMTP_DISABLED_AUTHS);
@@ -3805,7 +3865,7 @@
}
#endif // USE_OWN_CCLIENT
- bool bRc = wxOptionsPage::TransferDataToWindow();
+ bool bRc = wxOptionsPage::DoTransferOptionsToWindow();
#if defined(OS_WIN) && defined(USE_DIALUP)
if ( bRc )
@@ -3833,7 +3893,7 @@
return bRc;
}
-bool wxOptionsPageNetwork::TransferDataFromWindow()
+bool wxOptionsPageNetwork::DoTransferOptionsFromWindow()
{
#ifdef USE_OWN_CCLIENT
// we need to massage the disabled authentificators string a bit to fit it
@@ -3858,7 +3918,7 @@
}
#endif // USE_OWN_CCLIENT
- return wxOptionsPage::TransferDataFromWindow();
+ return wxOptionsPage::DoTransferOptionsFromWindow();
}
// ----------------------------------------------------------------------------
@@ -3895,7 +3955,7 @@
return m_folder != NULL;
}
-bool wxOptionsPageNewMail::TransferDataToWindow()
+bool wxOptionsPageNewMail::DoTransferOptionsToWindow()
{
// the "collect new mail" checkbox corresponds to the value of
// MF_FLAGS_INCOMING flag
@@ -3934,12 +3994,12 @@
m_nIncomingDelay = READ_CONFIG(m_Profile, MP_POLLINCOMINGDELAY);
m_nPingDelay = READ_CONFIG(m_Profile, MP_UPDATEINTERVAL);
- return wxOptionsPage::TransferDataToWindow();
+ return wxOptionsPage::DoTransferOptionsToWindow();
}
-bool wxOptionsPageNewMail::TransferDataFromWindow()
+bool wxOptionsPageNewMail::DoTransferOptionsFromWindow()
{
- bool rc = wxOptionsPage::TransferDataFromWindow();
+ bool rc = wxOptionsPage::DoTransferOptionsFromWindow();
if ( rc )
{
@@ -4049,11 +4109,11 @@
{
}
-bool wxOptionsPagePython::TransferDataFromWindow()
+bool wxOptionsPagePython::DoTransferOptionsFromWindow()
{
// currently we still have the old value for "Enable Python" in config
const bool usePythonOld = READ_CONFIG_BOOL(m_Profile, MP_USEPYTHON);
- if ( !wxOptionsPageStandard::TransferDataFromWindow() )
+ if ( !wxOptionsPageStandard::DoTransferOptionsFromWindow() )
{
return false;
}
@@ -4116,9 +4176,9 @@
m_lboxData = lboxDataEquivList;
}
-bool wxOptionsPageAdb::TransferDataToWindow()
+bool wxOptionsPageAdb::DoTransferOptionsToWindow()
{
- bool bRc = wxOptionsPage::TransferDataToWindow();
+ bool bRc = wxOptionsPage::DoTransferOptionsToWindow();
if ( bRc )
{
@@ -4134,7 +4194,7 @@
return bRc;
}
-bool wxOptionsPageAdb::TransferDataFromWindow()
+bool wxOptionsPageAdb::DoTransferOptionsFromWindow()
{
// if the listbox contains just the return address, empty it: it is the
// default anyhow and this avoids remembering it in config
@@ -4146,7 +4206,7 @@
listbox->Clear();
}
- return wxOptionsPage::TransferDataFromWindow();
+ return wxOptionsPage::DoTransferOptionsFromWindow();
}
// ----------------------------------------------------------------------------
@@ -4168,9 +4228,9 @@
m_activateSync = -1;
}
-bool wxOptionsPageSync::TransferDataToWindow()
+bool wxOptionsPageSync::DoTransferOptionsToWindow()
{
- bool rc = wxOptionsPage::TransferDataToWindow();
+ bool rc = wxOptionsPage::DoTransferOptionsToWindow();
if ( rc )
{
m_activateSync = READ_CONFIG(m_Profile, MP_SYNC_REMOTE);
@@ -4189,9 +4249,9 @@
return rc;
}
-bool wxOptionsPageSync::TransferDataFromWindow()
+bool wxOptionsPageSync::DoTransferOptionsFromWindow()
{
- bool rc = wxOptionsPage::TransferDataFromWindow();
+ bool rc = wxOptionsPage::DoTransferOptionsFromWindow();
if ( rc )
{
bool syncRemote = READ_CONFIG_BOOL(m_Profile, MP_SYNC_REMOTE);
@@ -4387,7 +4447,7 @@
}
}
-bool wxOptionsPageOthers::TransferDataToWindow()
+bool wxOptionsPageOthers::DoTransferOptionsToWindow()
{
// if the user checked "don't ask me again" checkbox in the message box
// these setting might be out of date - synchronize
@@ -4396,7 +4456,7 @@
m_Profile->writeEntry(GetPersMsgBoxName(M_MSGBOX_CONFIRM_EXIT),
!wxPMessageBoxIsDisabled(MP_CONFIRMEXIT));
- bool rc = wxOptionsPage::TransferDataToWindow();
+ bool rc = wxOptionsPage::DoTransferOptionsToWindow();
if ( rc )
{
m_nAutosaveDelay = READ_CONFIG(m_Profile, MP_AUTOSAVEDELAY);
@@ -4406,13 +4466,13 @@
return rc;
}
-bool wxOptionsPageOthers::TransferDataFromWindow()
+bool wxOptionsPageOthers::DoTransferOptionsFromWindow()
{
- // read the old value before calling the base class TransferDataFromWindow()
- // whieh may change it
+ // read the old value before calling the base class
+ // DoTransferOptionsFromWindow() whieh may change it
wxString logfileOld = READ_CONFIG(m_Profile, MP_LOGFILE);
- bool rc = wxOptionsPage::TransferDataFromWindow();
+ bool rc = wxOptionsPage::DoTransferOptionsFromWindow();
if ( rc )
{
// now if the user checked "confirm exit" checkbox we must reenable
@@ -4498,9 +4558,9 @@
m_lboxData->m_lboxDlgPers = _T("LastStartupFolder");
}
-bool wxOptionsPageFolders::TransferDataToWindow()
+bool wxOptionsPageFolders::DoTransferOptionsToWindow()
{
- bool bRc = wxOptionsPage::TransferDataToWindow();
+ bool bRc = wxOptionsPage::DoTransferOptionsToWindow();
if ( bRc )
{
@@ -4523,10 +4583,10 @@
return bRc;
}
-bool wxOptionsPageFolders::TransferDataFromWindow()
+bool wxOptionsPageFolders::DoTransferOptionsFromWindow()
{
- // undo what we did in TransferDataToWindow: remove the main folder from
- // the list of folders to be opened on startup
+ // undo what we did in DoTransferOptionsToWindow: remove the main folder
+ // from the list of folders to be opened on startup
wxControl *control = GetControl(ConfigField_OpenFolders);
if ( control )
{
@@ -4539,7 +4599,7 @@
}
}
- bool rc = wxOptionsPage::TransferDataFromWindow();
+ bool rc = wxOptionsPage::DoTransferOptionsFromWindow();
if ( rc )
{
@@ -5155,10 +5215,19 @@
void ShowOptionsDialog(wxFrame *parent, OptionsPage page)
{
+#ifdef PROFILE_OPTIONS_DLG
+ wxStopWatch sw;
+#endif
+
wxGlobalOptionsDialog dlg(parent);
dlg.CreateAllControls();
dlg.SetNotebookPage(page);
dlg.Layout();
+
+#ifdef PROFILE_OPTIONS_DLG
+ wxLogStatus(_T("Options dialog created in %ldms"), sw.Time());
+#endif
+
(void)dlg.ShowModal();
}
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Mahogany-cvsupdates mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mahogany-cvsupdates