1 /////////////////////////////////////////////////////////////////////////////// 2 // Name: wx/bannerwindow.h 3 // Purpose: wxBannerWindow class declaration 4 // Author: Vadim Zeitlin 5 // Created: 2011-08-16 6 // Copyright: (c) 2011 Vadim Zeitlin <vadim@wxwidgets.org> 7 // Licence: wxWindows licence 8 /////////////////////////////////////////////////////////////////////////////// 9 10 #ifndef _WX_BANNERWINDOW_H_ 11 #define _WX_BANNERWINDOW_H_ 12 13 #include "wx/defs.h" 14 15 #if wxUSE_BANNERWINDOW 16 17 #include "wx/bitmap.h" 18 #include "wx/event.h" 19 #include "wx/window.h" 20 21 class WXDLLIMPEXP_FWD_CORE wxBitmap; 22 class WXDLLIMPEXP_FWD_CORE wxColour; 23 class WXDLLIMPEXP_FWD_CORE wxDC; 24 25 extern WXDLLIMPEXP_DATA_ADV(const char) wxBannerWindowNameStr[]; 26 27 // ---------------------------------------------------------------------------- 28 // A simple banner window showing either a bitmap or text. 29 // ---------------------------------------------------------------------------- 30 31 class WXDLLIMPEXP_ADV wxBannerWindow : public wxWindow 32 { 33 public: 34 // Default constructor, use Create() later. wxBannerWindow()35 wxBannerWindow() { Init(); } 36 37 // Convenient constructor that should be used in the majority of cases. 38 // 39 // The banner orientation changes how the text in it is displayed and also 40 // defines where is the bitmap truncated if it's too big to fit but doesn't 41 // do anything for the banner position, this is supposed to be taken care 42 // of in the usual way, e.g. using sizers. 43 wxBannerWindow(wxWindow* parent, wxDirection dir = wxLEFT) 44 { 45 Init(); 46 47 Create(parent, wxID_ANY, dir); 48 } 49 50 // Full constructor provided for consistency with the other classes only. 51 wxBannerWindow(wxWindow* parent, 52 wxWindowID winid, 53 wxDirection dir = wxLEFT, 54 const wxPoint& pos = wxDefaultPosition, 55 const wxSize& size = wxDefaultSize, 56 long style = 0, 57 const wxString& name = wxBannerWindowNameStr) 58 { 59 Init(); 60 61 Create(parent, winid, dir, pos, size, style, name); 62 } 63 64 // Can be only called on objects created with the default constructor. 65 bool Create(wxWindow* parent, 66 wxWindowID winid, 67 wxDirection dir = wxLEFT, 68 const wxPoint& pos = wxDefaultPosition, 69 const wxSize& size = wxDefaultSize, 70 long style = 0, 71 const wxString& name = wxBannerWindowNameStr); 72 73 74 // Provide an existing bitmap to show. For wxLEFT orientation the bitmap is 75 // truncated from the top, for wxTOP and wxBOTTOM -- from the right and for 76 // wxRIGHT -- from the bottom, so put the most important part of the bitmap 77 // information in the opposite direction. 78 void SetBitmap(const wxBitmap& bmp); 79 80 // Set the text to display. This is mutually exclusive with SetBitmap(). 81 // Title is rendered in bold and should be single line, message can have 82 // multiple lines but is not wrapped automatically. 83 void SetText(const wxString& title, const wxString& message); 84 85 // Set the colours between which the gradient runs. This can be combined 86 // with SetText() but not SetBitmap(). 87 void SetGradient(const wxColour& start, const wxColour& end); 88 89 protected: 90 virtual wxSize DoGetBestClientSize() const; 91 92 private: 93 // Common part of all constructors. 94 void Init(); 95 96 // Fully invalidates the window. 97 void OnSize(wxSizeEvent& event); 98 99 // Redraws the window using either m_bitmap or m_title/m_message. 100 void OnPaint(wxPaintEvent& event); 101 102 // Helper of OnPaint(): draw the bitmap at the correct position depending 103 // on our orientation. 104 void DrawBitmapBackground(wxDC& dc); 105 106 // Helper of OnPaint(): draw the text in the appropriate direction. 107 void DrawBannerTextLine(wxDC& dc, const wxString& str, const wxPoint& pos); 108 109 // Return the font to use for the title. Currently this is hardcoded as a 110 // larger bold version of the standard window font but could be made 111 // configurable in the future. 112 wxFont GetTitleFont() const; 113 114 // Return the colour to use for extending the bitmap. Non-const as it 115 // updates m_colBitmapBg if needed. 116 wxColour GetBitmapBg(); 117 118 119 // The window side along which the banner is laid out. 120 wxDirection m_direction; 121 122 // If valid, this bitmap is drawn as is. 123 wxBitmap m_bitmap; 124 125 // If bitmap is valid, this is the colour we use to extend it if the bitmap 126 // is smaller than this window. It is computed on demand by GetBitmapBg(). 127 wxColour m_colBitmapBg; 128 129 // The title and main message to draw, used if m_bitmap is invalid. 130 wxString m_title, 131 m_message; 132 133 // Start and stop gradient colours, only used when drawing text. 134 wxColour m_colStart, 135 m_colEnd; 136 137 wxDECLARE_EVENT_TABLE(); 138 139 wxDECLARE_NO_COPY_CLASS(wxBannerWindow); 140 }; 141 142 #endif // wxUSE_BANNERWINDOW 143 144 #endif // _WX_BANNERWINDOW_H_ 145