]> git.saurik.com Git - wxWidgets.git/commitdiff
improved sizing of wxBusyInfo window and updated the docs a bit
authorVadim Zeitlin <vadim@wxwidgets.org>
Mon, 29 Oct 2001 14:32:42 +0000 (14:32 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Mon, 29 Oct 2001 14:32:42 +0000 (14:32 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@12197 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/latex/wx/busyinfo.tex
docs/latex/wx/wnddisbl.tex
include/wx/busyinfo.h
samples/dialogs/dialogs.cpp
src/generic/busyinfo.cpp

index da43b7e4e1335614fe2d00c7cf860380e0af001d..caf6bf1ba6a060b41b0b0ce8a32633a8bff9a5b0 100644 (file)
@@ -7,15 +7,40 @@ a message window will be shown.
 For example:
 
 \begin{verbatim}
-  wxBusyInfo wait("Please wait, working...");
+    wxBusyInfo wait("Please wait, working...");
 
-  for (int i = 0; i < 100000; i++)
-    DoACalculation();
+    for (int i = 0; i < 100000; i++)
+    {
+        DoACalculation();
+    }
 \end{verbatim}
 
 It works by creating a window in the constructor,
 and deleting it in the destructor.
 
+You may also want to call wxTheApp->Yield() to refresh the window
+periodically (in case it had been obscured by other windows, for
+example) like this:
+
+\begin{verbatim}
+    wxWindowDisabler disableAll;
+
+    wxBusyInfo wait("Please wait, working...");
+
+    for (int i = 0; i < 100000; i++)
+    {
+        DoACalculation();
+
+        if ( !(i % 1000) )
+            wxTheApp->Yield();
+    }
+\end{verbatim}
+
+but take care to not cause undesirable reentrancies when doing it (see 
+\helpref{wxApp::Yield()}{wxappyield} for more details). The simplest way to do
+it is to use \helpref{wxWindowDisabler}{wxwindowdisabler} class as illustrated
+in the above example.
+
 \wxheading{Derived from}
 
 None
@@ -28,7 +53,17 @@ None
 
 \membersection{wxBusyInfo::wxBusyInfo}
 
-\func{}{wxBusyInfo}{\param{const wxString\&}{ msg}}
+\func{}{wxBusyInfo}{\param{const wxString\&}{ msg}, \param{wxParent }{*parent = NULL}}
+
+Constructs a busy info window as child of {\it parent} and displays {\it msg}
+in it.
+
+{\bf NB:} If {\it parent} is not {\tt NULL} you must ensure that it is not
+closed while the busy info is shown.
+
+\membersection{wxBusyInfo::\destruct{wxBusyInfo}}
+
+\func{}{\destruct{wxBusyInfo}}{\void}
 
-Constructs a busy info object, displays {\it msg}.
+Hides and closes the window containing the information text.
 
index 798dae3dd7827bbc58fc16aca7c7819e8b39e8bd..75965bf910283fb60a7590f9997c49dc3b306815 100644 (file)
@@ -39,5 +39,7 @@ Disables all top level windows of the applications with the exception of
 
 \membersection{wxWindowDisabler::\destruct{wxWindowDisabler}}
 
+\func{}{\destruct{wxWindowDisabler}}{\void}
+
 Reenables back the windows disabled by the constructor.
 
index 37e7238cb6005ab094c4e505151ce833f827fe52..0050bfa08a5e3303cedf9c8f1636811f91b7678b 100644 (file)
@@ -26,8 +26,8 @@
 
 class WXDLLEXPORT wxInfoFrame : public wxFrame
 {
-    public:
-        wxInfoFrame(wxWindow *parent, const wxString& message);
+public:
+    wxInfoFrame(wxWindow *parent, const wxString& message);
 };
 
 
@@ -39,12 +39,13 @@ class WXDLLEXPORT wxInfoFrame : public wxFrame
 
 class WXDLLEXPORT wxBusyInfo : public wxObject
 {
-    public:
-        wxBusyInfo(const wxString& message);
-        ~wxBusyInfo();
+public:
+    wxBusyInfo(const wxString& message, wxWindow *parent = NULL);
 
-    private:
-        wxInfoFrame *m_InfoFrame;
+    virtual ~wxBusyInfo();
+
+private:
+    wxInfoFrame *m_InfoFrame;
 };
 
 
index 2fe34c932b38fbba33f08144caf5f0dfaea3b42f..1e087c45e72a73adf74c555fa3b43d2b3b342f30 100644 (file)
@@ -641,7 +641,9 @@ void MyFrame::ShowProgress( wxCommandEvent& WXUNUSED(event) )
 
 void MyFrame::ShowBusyInfo(wxCommandEvent& WXUNUSED(event))
 {
-    wxBusyInfo info("Sleep^H^H^H^H^HWorkiing, please wait...\n... a bit more");
+    wxWindowDisabler disableAll;
+
+    wxBusyInfo info("Sleep^H^H^H^H^HWorkiing, please wait...", this);
 
     for ( int i = 0; i < 30; i++ )
     {
index be101dcf52f5dc86ffca7a01b1d6a4f03f6d052b..ce2e3a45d00466acf3acf23b264eaf22d981315c 100644 (file)
 
 
 wxInfoFrame::wxInfoFrame(wxWindow *parent, const wxString& message)
-    : wxFrame(parent, -1, wxT(""), wxPoint(0, 0), wxSize(400, 80), wxTHICK_FRAME | wxSIMPLE_BORDER | wxFRAME_TOOL_WINDOW)
+           : wxFrame(parent, -1, wxT(""),
+                     wxDefaultPosition, wxDefaultSize,
+                     wxSIMPLE_BORDER | wxFRAME_TOOL_WINDOW)
 {
-    wxPanel *p = new wxPanel( this );
-    wxStaticText *s = new wxStaticText( p, -1, message, wxPoint(20, 20), wxSize(360, 40), wxALIGN_CENTER );
+    wxPanel *panel = new wxPanel( this );
+    wxStaticText *text = new wxStaticText(panel, -1, message);
+
+    panel->SetCursor(*wxHOURGLASS_CURSOR);
+    text->SetCursor(*wxHOURGLASS_CURSOR);
+
+    // make the frame of at least the standard size (400*80) but big enough
+    // for the text we show
+    wxSize sizeText = text->GetBestSize();
+    SetClientSize(wxMax(sizeText.x, 340) + 60, wxMax(sizeText.y, 40) + 40);
+
+    // need to size the panel correctly first so that text->Centre() works
+    panel->SetSize(GetClientSize());
+
+    text->Centre(wxBOTH);
     Centre(wxBOTH);
-    p->SetCursor(*wxHOURGLASS_CURSOR);
-    s->SetCursor(*wxHOURGLASS_CURSOR);
 }
 
-wxBusyInfo::wxBusyInfo(const wxString& message) : wxObject()
+wxBusyInfo::wxBusyInfo(const wxString& message, wxWindow *parent)
 {
-    m_InfoFrame = new wxInfoFrame( (wxWindow*) NULL, message);
+    m_InfoFrame = new wxInfoFrame( parent, message);
     m_InfoFrame->Show(TRUE);
     wxYield();
     m_InfoFrame->Refresh();