X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d78b3d64143f165857922e1e695ba4164d61869f..b879becf6af686ab38d1c67799d837c64fb4833d:/src/generic/busyinfo.cpp?ds=sidebyside diff --git a/src/generic/busyinfo.cpp b/src/generic/busyinfo.cpp index 0b5893dd9f..245741c191 100644 --- a/src/generic/busyinfo.cpp +++ b/src/generic/busyinfo.cpp @@ -1,64 +1,134 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: busyinfo.cpp +// Name: src/generic/busyinfo.cpp // Purpose: Information window when app is busy // Author: Vaclav Slavik // Copyright: (c) 1999 Vaclav Slavik -// Licence: wxWindows Licence +// RCS-ID: $Id$ +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ -#pragma implementation -#endif - -#include +#include "wx/wxprec.h" -#ifdef __BORDLANDC__ +#ifdef __BORLANDC__ #pragma hdrstop #endif -#ifndef WXPRECOMP -#include -#endif - #if wxUSE_BUSYINFO -#include "wx/busyinfo.h" +// for all others, include the necessary headers +#ifndef WX_PRECOMP + #include "wx/frame.h" + #include "wx/stattext.h" + #include "wx/panel.h" + #include "wx/utils.h" +#endif +#include "wx/busyinfo.h" +#include "wx/generic/stattextg.h" +class WXDLLEXPORT wxInfoFrame : public wxFrame +{ +public: + wxInfoFrame(wxWindow *parent, const wxString& message); +private: + wxDECLARE_NO_COPY_CLASS(wxInfoFrame); +}; wxInfoFrame::wxInfoFrame(wxWindow *parent, const wxString& message) - : wxFrame(parent, -1, "", wxPoint(0, 0), wxSize(400, 80), wxTHICK_FRAME | wxSIMPLE_BORDER | wxFRAME_TOOL_WINDOW) + : wxFrame(parent, wxID_ANY, wxT("Busy"), + wxDefaultPosition, wxDefaultSize, +#if defined(__WXX11__) + wxRESIZE_BORDER +#else + wxSIMPLE_BORDER +#endif + | wxFRAME_TOOL_WINDOW | wxSTAY_ON_TOP) { - 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 ); +#ifdef __WXGTK__ + wxGenericStaticText *text = new wxGenericStaticText(panel, wxID_ANY, message); +#else + wxStaticText *text = new wxStaticText(panel, wxID_ANY, message); +#endif + + 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(); +#ifdef __WXPM__ + int nX = 0; + int nY = 0; + int nWidth = 0; + int nHeight = 0; + int nParentHeight = parent->GetClientSize().y; + int nParentWidth = parent->GetClientSize().x; + int nColor; + + SetBackgroundColour(wxT("WHITE")); + nColor = (LONG)GetBackgroundColour().GetPixel(); + + ::WinSetPresParam( GetHwnd() + ,PP_BACKGROUNDCOLOR + ,sizeof(LONG) + ,(PVOID)&nColor + ); + panel->SetBackgroundColour(wxT("WHITE")); + nColor = (LONG)panel->GetBackgroundColour().GetPixel(); + + ::WinSetPresParam( GetHwndOf(panel) + ,PP_BACKGROUNDCOLOR + ,sizeof(LONG) + ,(PVOID)&nColor + ); + nWidth = wxMax(sizeText.x, 340) + 60; + nHeight = wxMax(sizeText.y, 40) + 40; + nX = (nParentWidth - nWidth) / 2; + nY = (nParentHeight / 2) - (nHeight / 2); + nY = nParentHeight - (nY + nHeight); + ::WinSetWindowPos( m_hFrame + ,HWND_TOP + ,nX + ,nY + ,nWidth + ,nHeight + ,SWP_SIZE | SWP_MOVE | SWP_ACTIVATE + ); + text->SetBackgroundColour(wxT("WHITE")); + nColor = (LONG)text->GetBackgroundColour().GetPixel(); + + ::WinSetPresParam( GetHwndOf(text) + ,PP_BACKGROUNDCOLOR + ,sizeof(LONG) + ,(PVOID)&nColor + ); + text->Center(wxBOTH); +#else + 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); +#endif } - - - -wxBusyInfo::wxBusyInfo(const wxString& message) : wxObject() +wxBusyInfo::wxBusyInfo(const wxString& message, wxWindow *parent) { - m_InfoFrame = new wxInfoFrame(NULL, message); - m_InfoFrame -> Show(TRUE); - wxYield(); - m_InfoFrame -> Refresh(); - wxYield(); + m_InfoFrame = new wxInfoFrame(parent, message); + m_InfoFrame->Show(true); + m_InfoFrame->Refresh(); + m_InfoFrame->Update(); } - - wxBusyInfo::~wxBusyInfo() { - m_InfoFrame -> Show(FALSE); - m_InfoFrame -> Close(); - wxYield(); + m_InfoFrame->Show(false); + m_InfoFrame->Close(); } - - -#endif +#endif // wxUSE_BUSYINFO