X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/03e11df5470fd64d9d9a669d0b50b84c2d714736..c220de0b393b5098c705c1a62ef7fc4698e2fa52:/include/wx/statusbr.h diff --git a/include/wx/statusbr.h b/include/wx/statusbr.h index ac33321b0c..70f24e2734 100644 --- a/include/wx/statusbr.h +++ b/include/wx/statusbr.h @@ -5,35 +5,84 @@ // Modified by: // Created: 05.02.00 // RCS-ID: $Id$ -// Copyright: (c) wxWindows team -// Licence: wxWindows license +// Copyright: (c) Vadim Zeitlin +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #ifndef _WX_STATUSBR_H_BASE_ #define _WX_STATUSBR_H_BASE_ +#include "wx/defs.h" + +#if wxUSE_STATUSBAR + #include "wx/window.h" +#include "wx/list.h" +#include "wx/dynarray.h" + +extern WXDLLIMPEXP_DATA_CORE(const char) wxStatusBarNameStr[]; + +WX_DECLARE_LIST(wxString, wxListString); + +// ---------------------------------------------------------------------------- +// wxStatusBar constants +// ---------------------------------------------------------------------------- + +// style flags for fields +#define wxSB_NORMAL 0x0000 +#define wxSB_FLAT 0x0001 +#define wxSB_RAISED 0x0002 // ---------------------------------------------------------------------------- // wxStatusBar: a window near the bottom of the frame used for status info // ---------------------------------------------------------------------------- -class WXDLLEXPORT wxStatusBarBase : public wxWindow +class WXDLLIMPEXP_CORE wxStatusBarBase : public wxWindow { public: - wxStatusBarBase() { m_statusWidths = NULL; } + wxStatusBarBase(); + + virtual ~wxStatusBarBase(); + + // field count + // ----------- - // get/set the number of fields - virtual void SetFieldsCount(int number = 1, - const int *widths = (const int *) NULL) = 0; + // set the number of fields and call SetStatusWidths(widths) if widths are + // given + virtual void SetFieldsCount(int number = 1, const int *widths = NULL); int GetFieldsCount() const { return m_nFields; } - // get/set the text of the given field + // field text + // ---------- + virtual void SetStatusText(const wxString& text, int number = 0) = 0; virtual wxString GetStatusText(int number = 0) const = 0; - // set status line widths (n should be the same as field count) - virtual void SetStatusWidths(int n, const int widths[]) = 0; + void PushStatusText(const wxString& text, int number = 0); + void PopStatusText(int number = 0); + + // fields widths + // ------------- + + // set status field widths as absolute numbers: positive widths mean that + // the field has the specified absolute width, negative widths are + // interpreted as the sizer options, i.e. the extra space (total space + // minus the sum of fixed width fields) is divided between the fields with + // negative width according to the abs value of the width (field with width + // -2 grows twice as much as one with width -1 &c) + virtual void SetStatusWidths(int n, const int widths[]); + + // field styles + // ------------ + + // Set the field style. Use either wxSB_NORMAL (default) for a standard 3D + // border around a field, wxSB_FLAT for no border around a field, so that it + // appears flat or wxSB_POPOUT to make the field appear raised. + // Setting field styles only works on wxMSW + virtual void SetStatusStyles(int n, const int styles[]); + + // geometry + // -------- // Get the position and size of the field's internal bounding rectangle virtual bool GetFieldRect(int i, wxRect& rect) const = 0; @@ -45,52 +94,83 @@ public: virtual int GetBorderX() const = 0; virtual int GetBorderY() const = 0; + // don't want status bars to accept the focus at all + virtual bool AcceptsFocus() const { return false; } + + virtual bool CanBeOutsideClientArea() const { return true; } + protected: - int m_nFields; // the current number of fields - int *m_statusWidths; // the width (if !NULL) of the fields + virtual wxBorder GetDefaultBorder() const { return wxBORDER_NONE; } + + // set the widths array to NULL + void InitWidths(); + + // free the status widths arrays + void FreeWidths(); + + // reset the widths + void ReinitWidths() { FreeWidths(); InitWidths(); } + + // same, for field styles + void InitStyles(); + void FreeStyles(); + void ReinitStyles() { FreeStyles(); InitStyles(); } + + // same, for text stacks + void InitStacks(); + void FreeStacks(); + void ReinitStacks() { FreeStacks(); InitStacks(); } + + // calculate the real field widths for the given total available size + wxArrayInt CalculateAbsWidths(wxCoord widthTotal) const; + + // use these functions to access the stacks of field strings + wxListString *GetStatusStack(int i) const; + wxListString *GetOrCreateStatusStack(int i); + + // the current number of fields + int m_nFields; + + // the widths of the fields in pixels if !NULL, all fields have the same + // width otherwise + int *m_statusWidths; + + // the styles of the fields + int *m_statusStyles; + + // stacks of previous values for PushStatusText/PopStatusText + // this is created on demand, use GetStatusStack/GetOrCreateStatusStack + wxListString **m_statusTextStacks; + + DECLARE_NO_COPY_CLASS(wxStatusBarBase) }; -#if defined(__WIN32__) && wxUSE_NATIVE_STATUSBAR - #include "wx/msw/statbr95.h" +// ---------------------------------------------------------------------------- +// include the actual wxStatusBar class declaration +// ---------------------------------------------------------------------------- - typedef wxStatusBar95 wxStatusBarReal; -#elif defined(__WXMAC__) && !defined(__UNIX__) - #include "wx/mac/statusbr.h" +#if defined(__WXUNIVERSAL__) + #define wxStatusBarUniv wxStatusBar + + #include "wx/univ/statusbr.h" +#elif defined(__WXPALMOS__) + #define wxStatusBarPalm wxStatusBar + + #include "wx/palmos/statusbr.h" +#elif defined(__WIN32__) && wxUSE_NATIVE_STATUSBAR + #include "wx/msw/statusbar.h" +#elif defined(__WXMAC__) + #define wxStatusBarMac wxStatusBar - typedef wxStatusBarMac wxStatusBarReal; -#else #include "wx/generic/statusbr.h" + #include "wx/osx/statusbr.h" +#else + #define wxStatusBarGeneric wxStatusBar - typedef wxStatusBarGeneric wxStatusBarReal; + #include "wx/generic/statusbr.h" #endif -// we can't just typedef wxStatusBar to be one of 95/Generic because we should -// be able to forward declare it (done in several places) and because wxWin -// RTTI wouldn't work then -class WXDLLEXPORT wxStatusBar : public wxStatusBarReal -{ -public: - wxStatusBar() { } - wxStatusBar(wxWindow *parent, - wxWindowID id, - const wxPoint& WXUNUSED(pos) = wxDefaultPosition, - const wxSize& WXUNUSED(size) = wxDefaultSize, - long style = wxST_SIZEGRIP, - const wxString& name = wxPanelNameStr) - { - Create(parent, id, style, name); - } - wxStatusBar(wxWindow *parent, - wxWindowID id, - long style, - const wxString& name = wxPanelNameStr) - { - Create(parent, id, style, name); - } - -private: - DECLARE_DYNAMIC_CLASS(wxStatusBar) -}; +#endif // wxUSE_STATUSBAR #endif // _WX_STATUSBR_H_BASE_