improved sizing of wxBusyInfo window and updated the docs a bit
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@12197 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
a62b0bcc14
commit
21977bac1a
@ -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 object, displays {\it msg}.
|
||||
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}
|
||||
|
||||
Hides and closes the window containing the information text.
|
||||
|
||||
|
@ -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.
|
||||
|
||||
|
@ -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;
|
||||
};
|
||||
|
||||
|
||||
|
@ -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++ )
|
||||
{
|
||||
|
@ -25,18 +25,31 @@
|
||||
|
||||
|
||||
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();
|
||||
|
Loading…
Reference in New Issue
Block a user