/////////////////////////////////////////////////////////////////////////////// // Name: wx/bannerwindow.h // Purpose: wxBannerWindow class declaration // Author: Vadim Zeitlin // Created: 2011-08-16 // Copyright: (c) 2011 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// #ifndef _WX_BANNERWINDOW_H_ #define _WX_BANNERWINDOW_H_ #include "wx/defs.h" #if wxUSE_BANNERWINDOW #include "wx/bitmap.h" #include "wx/event.h" #include "wx/window.h" class WXDLLIMPEXP_FWD_CORE wxBitmap; class WXDLLIMPEXP_FWD_CORE wxColour; class WXDLLIMPEXP_FWD_CORE wxDC; extern WXDLLIMPEXP_DATA_ADV(const char) wxBannerWindowNameStr[]; // ---------------------------------------------------------------------------- // A simple banner window showing either a bitmap or text. // ---------------------------------------------------------------------------- class WXDLLIMPEXP_ADV wxBannerWindow : public wxWindow { public: // Default constructor, use Create() later. wxBannerWindow() { Init(); } // Convenient constructor that should be used in the majority of cases. // // The banner orientation changes how the text in it is displayed and also // defines where is the bitmap truncated if it's too big to fit but doesn't // do anything for the banner position, this is supposed to be taken care // of in the usual way, e.g. using sizers. wxBannerWindow(wxWindow* parent, wxDirection dir = wxLEFT) { Init(); Create(parent, wxID_ANY, dir); } // Full constructor provided for consistency with the other classes only. wxBannerWindow(wxWindow* parent, wxWindowID winid, wxDirection dir = wxLEFT, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0, const wxString& name = wxBannerWindowNameStr) { Init(); Create(parent, winid, dir, pos, size, style, name); } // Can be only called on objects created with the default constructor. bool Create(wxWindow* parent, wxWindowID winid, wxDirection dir = wxLEFT, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0, const wxString& name = wxBannerWindowNameStr); // Provide an existing bitmap to show. For wxLEFT orientation the bitmap is // truncated from the top, for wxTOP and wxBOTTOM -- from the right and for // wxRIGHT -- from the bottom, so put the most important part of the bitmap // information in the opposite direction. void SetBitmap(const wxBitmap& bmp); // Set the text to display. This is mutually exclusive with SetBitmap(). // Title is rendered in bold and should be single line, message can have // multiple lines but is not wrapped automatically. void SetText(const wxString& title, const wxString& message); // Set the colours between which the gradient runs. This can be combined // with SetText() but not SetBitmap(). void SetGradient(const wxColour& start, const wxColour& end); protected: virtual wxSize DoGetBestClientSize() const wxOVERRIDE; private: // Common part of all constructors. void Init(); // Fully invalidates the window. void OnSize(wxSizeEvent& event); // Redraws the window using either m_bitmap or m_title/m_message. void OnPaint(wxPaintEvent& event); // Helper of OnPaint(): draw the bitmap at the correct position depending // on our orientation. void DrawBitmapBackground(wxDC& dc); // Helper of OnPaint(): draw the text in the appropriate direction. void DrawBannerTextLine(wxDC& dc, const wxString& str, const wxPoint& pos); // Return the font to use for the title. Currently this is hardcoded as a // larger bold version of the standard window font but could be made // configurable in the future. wxFont GetTitleFont() const; // Return the colour to use for extending the bitmap. Non-const as it // updates m_colBitmapBg if needed. wxColour GetBitmapBg(); // The window side along which the banner is laid out. wxDirection m_direction; // If valid, this bitmap is drawn as is. wxBitmap m_bitmap; // If bitmap is valid, this is the colour we use to extend it if the bitmap // is smaller than this window. It is computed on demand by GetBitmapBg(). wxColour m_colBitmapBg; // The title and main message to draw, used if m_bitmap is invalid. wxString m_title, m_message; // Start and stop gradient colours, only used when drawing text. wxColour m_colStart, m_colEnd; wxDECLARE_EVENT_TABLE(); wxDECLARE_NO_COPY_CLASS(wxBannerWindow); }; #endif // wxUSE_BANNERWINDOW #endif // _WX_BANNERWINDOW_H_