home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / wxos2240.zip / wxWindows-2.4.0 / src / generic / busyinfo.cpp < prev    next >
C/C++ Source or Header  |  2002-11-09  |  4KB  |  123 lines

  1. /////////////////////////////////////////////////////////////////////////////
  2. // Name:        busyinfo.cpp
  3. // Purpose:     Information window when app is busy
  4. // Author:      Vaclav Slavik
  5. // Copyright:   (c) 1999 Vaclav Slavik
  6. // Licence:     wxWindows Licence
  7. /////////////////////////////////////////////////////////////////////////////
  8.  
  9. #ifdef __GNUG__
  10. #pragma implementation "busyinfo.h"
  11. #endif
  12.  
  13. #include "wx/wxprec.h"
  14.  
  15. #ifdef __BORLANDC__
  16. #pragma hdrstop
  17. #endif
  18.  
  19. #if wxUSE_BUSYINFO
  20.  
  21. #include "wx/stattext.h"
  22. #include "wx/panel.h"
  23. #include "wx/utils.h"
  24. #include "wx/busyinfo.h"
  25.  
  26.  
  27. wxInfoFrame::wxInfoFrame(wxWindow *parent, const wxString& message)
  28.            : wxFrame(parent, -1, wxT("Busy"),
  29.                      wxDefaultPosition, wxDefaultSize,
  30. #if defined(__WXX11__)
  31.                      wxTHICK_FRAME
  32. #else
  33.                      wxSIMPLE_BORDER
  34. #endif
  35.                      | wxFRAME_TOOL_WINDOW)
  36. {
  37.     wxPanel *panel = new wxPanel( this );
  38.     wxStaticText *text = new wxStaticText(panel, -1, message);
  39.  
  40.     panel->SetCursor(*wxHOURGLASS_CURSOR);
  41.     text->SetCursor(*wxHOURGLASS_CURSOR);
  42.  
  43.     // make the frame of at least the standard size (400*80) but big enough
  44.     // for the text we show
  45.     wxSize sizeText = text->GetBestSize();
  46. #ifdef __WXPM__
  47.     int                             nX = 0;
  48.     int                             nY = 0;
  49.     int                             nWidth = 0;
  50.     int                             nHeight = 0;
  51.     int                             nParentHeight = parent->GetClientSize().y;
  52.     int                             nParentWidth = parent->GetClientSize().x;
  53.     int                             nColor;
  54.  
  55.     SetBackgroundColour("WHITE");
  56.     nColor = (LONG)GetBackgroundColour().GetPixel();
  57.  
  58.     ::WinSetPresParam( GetHwnd()
  59.                       ,PP_BACKGROUNDCOLOR
  60.                       ,sizeof(LONG)
  61.                       ,(PVOID)&nColor
  62.                      );
  63.     panel->SetBackgroundColour("WHITE");
  64.     nColor = (LONG)panel->GetBackgroundColour().GetPixel();
  65.  
  66.     ::WinSetPresParam( GetHwndOf(panel)
  67.                       ,PP_BACKGROUNDCOLOR
  68.                       ,sizeof(LONG)
  69.                       ,(PVOID)&nColor
  70.                      );
  71.     nWidth = wxMax(sizeText.x, 340) + 60;
  72.     nHeight = wxMax(sizeText.y, 40) + 40;
  73.     nX = (nParentWidth - nWidth) / 2;
  74.     nY = (nParentHeight / 2) - (nHeight / 2);
  75.     nY = nParentHeight - (nY + nHeight);
  76.     ::WinSetWindowPos( m_hFrame
  77.                       ,HWND_TOP
  78.                       ,nX
  79.                       ,nY
  80.                       ,nWidth
  81.                       ,nHeight
  82.                       ,SWP_SIZE | SWP_MOVE | SWP_ACTIVATE
  83.                      );
  84.     text->SetBackgroundColour("WHITE");
  85.     nColor = (LONG)text->GetBackgroundColour().GetPixel();
  86.  
  87.     ::WinSetPresParam( GetHwndOf(text)
  88.                       ,PP_BACKGROUNDCOLOR
  89.                       ,sizeof(LONG)
  90.                       ,(PVOID)&nColor
  91.                      );
  92.     text->Center(wxBOTH);
  93. #else
  94.     SetClientSize(wxMax(sizeText.x, 340) + 60, wxMax(sizeText.y, 40) + 40);
  95.  
  96.     // need to size the panel correctly first so that text->Centre() works
  97.     panel->SetSize(GetClientSize());
  98.  
  99.     text->Centre(wxBOTH);
  100.     Centre(wxBOTH);
  101. #endif
  102. }
  103.  
  104. wxBusyInfo::wxBusyInfo(const wxString& message, wxWindow *parent)
  105. {
  106.     m_InfoFrame = new wxInfoFrame( parent, message);
  107.     m_InfoFrame->Show(TRUE);
  108.     wxYield();
  109.     m_InfoFrame->Refresh();
  110.     wxYield();
  111. }
  112.  
  113. wxBusyInfo::~wxBusyInfo()
  114. {
  115.     m_InfoFrame->Show(FALSE);
  116.     m_InfoFrame->Close();
  117.     wxYield();
  118. }
  119.  
  120. #endif
  121.   // wxUSE_BUSYINFO
  122.  
  123.