X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/23318a5358be74727fb62854f623da84a4545bcd..3e33568e0bd8416417916d194fc9a50cab9636bf:/include/wx/statusbr.h diff --git a/include/wx/statusbr.h b/include/wx/statusbr.h index 70f24e2734..17e033ffc3 100644 --- a/include/wx/statusbr.h +++ b/include/wx/statusbr.h @@ -4,7 +4,6 @@ // Author: Vadim Zeitlin // Modified by: // Created: 05.02.00 -// RCS-ID: $Id$ // Copyright: (c) Vadim Zeitlin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -16,28 +15,98 @@ #if wxUSE_STATUSBAR -#include "wx/window.h" +#include "wx/control.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 +// wxStatusBar styles +#define wxSTB_SIZEGRIP 0x0010 +#define wxSTB_SHOW_TIPS 0x0020 + +#define wxSTB_ELLIPSIZE_START 0x0040 +#define wxSTB_ELLIPSIZE_MIDDLE 0x0080 +#define wxSTB_ELLIPSIZE_END 0x0100 + +#define wxSTB_DEFAULT_STYLE (wxSTB_SIZEGRIP|wxSTB_ELLIPSIZE_END|wxSTB_SHOW_TIPS|wxFULL_REPAINT_ON_RESIZE) + + +// old compat style name: +#define wxST_SIZEGRIP wxSTB_SIZEGRIP + + +// style flags for wxStatusBar fields #define wxSB_NORMAL 0x0000 #define wxSB_FLAT 0x0001 #define wxSB_RAISED 0x0002 +#define wxSB_SUNKEN 0x0003 + +// ---------------------------------------------------------------------------- +// wxStatusBarPane: an helper for wxStatusBar +// ---------------------------------------------------------------------------- + +class WXDLLIMPEXP_CORE wxStatusBarPane +{ +public: + wxStatusBarPane(int style = wxSB_NORMAL, int width = 0) + : m_nStyle(style), m_nWidth(width) + { m_bEllipsized = false; } + + int GetWidth() const { return m_nWidth; } + int GetStyle() const { return m_nStyle; } + wxString GetText() const { return m_text; } + + + // implementation-only from now on + // ------------------------------- + + bool IsEllipsized() const + { return m_bEllipsized; } + void SetIsEllipsized(bool isEllipsized) { m_bEllipsized = isEllipsized; } + + void SetWidth(int width) { m_nWidth = width; } + void SetStyle(int style) { m_nStyle = style; } + + // set text, return true if it changed or false if it was already set to + // this value + bool SetText(const wxString& text); + + // save the existing text on top of our stack and make the new text + // current; return true if the text really changed + bool PushText(const wxString& text); + + // restore the message saved by the last call to Push() (unless it was + // changed by an intervening call to SetText()) and return true if we + // really restored anything + bool PopText(); + +private: + int m_nStyle; + int m_nWidth; // may be negative, indicating a variable-width field + wxString m_text; + + // the array used to keep the previous values of this pane after a + // PushStatusText() call, its top element is the value to restore after the + // next PopStatusText() call while the currently shown value is always in + // m_text + wxArrayString m_arrStack; + + // is the currently shown value shown with ellipsis in the status bar? + bool m_bEllipsized; +}; + +WX_DECLARE_EXPORTED_OBJARRAY(wxStatusBarPane, wxStatusBarPaneArray); // ---------------------------------------------------------------------------- // wxStatusBar: a window near the bottom of the frame used for status info // ---------------------------------------------------------------------------- -class WXDLLIMPEXP_CORE wxStatusBarBase : public wxWindow +class WXDLLIMPEXP_CORE wxStatusBarBase : public wxControl { public: wxStatusBarBase(); @@ -50,14 +119,17 @@ public: // 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; } + int GetFieldsCount() const { return (int)m_panes.GetCount(); } // field text // ---------- - virtual void SetStatusText(const wxString& text, int number = 0) = 0; - virtual wxString GetStatusText(int number = 0) const = 0; + // just change or get the currently shown text + void SetStatusText(const wxString& text, int number = 0); + wxString GetStatusText(int number = 0) const; + // change the currently shown text to the new one and save the current + // value to be restored by the next call to PopStatusText() void PushStatusText(const wxString& text, int number = 0); void PopStatusText(int number = 0); @@ -72,15 +144,18 @@ public: // -2 grows twice as much as one with width -1 &c) virtual void SetStatusWidths(int n, const int widths[]); + int GetStatusWidth(int n) const + { return m_panes[n].GetWidth(); } + // 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 + // Set the field border style to one of wxSB_XXX values. virtual void SetStatusStyles(int n, const int styles[]); + int GetStatusStyle(int n) const + { return m_panes[n].GetStyle(); } + // geometry // -------- @@ -94,55 +169,59 @@ public: virtual int GetBorderX() const = 0; virtual int GetBorderY() const = 0; + wxSize GetBorders() const + { return wxSize(GetBorderX(), GetBorderY()); } + + // miscellaneous + // ------------- + + const wxStatusBarPane& GetField(int n) const + { return m_panes[n]; } + + // wxWindow overrides: + // don't want status bars to accept the focus at all virtual bool AcceptsFocus() const { return false; } + // the client size of a toplevel window doesn't include the status bar virtual bool CanBeOutsideClientArea() const { return true; } protected: - virtual wxBorder GetDefaultBorder() const { return wxBORDER_NONE; } + // called after the status bar pane text changed and should update its + // display + virtual void DoUpdateStatusText(int number) = 0; - // set the widths array to NULL - void InitWidths(); - // free the status widths arrays - void FreeWidths(); + // wxWindow overrides: - // reset the widths - void ReinitWidths() { FreeWidths(); InitWidths(); } +#if wxUSE_TOOLTIPS + virtual void DoSetToolTip( wxToolTip *tip ) + { + wxASSERT_MSG(!HasFlag(wxSTB_SHOW_TIPS), + "Do not set tooltip(s) manually when using wxSTB_SHOW_TIPS!"); + wxWindow::DoSetToolTip(tip); + } +#endif // wxUSE_TOOLTIPS + virtual wxBorder GetDefaultBorder() const { return wxBORDER_NONE; } - // same, for field styles - void InitStyles(); - void FreeStyles(); - void ReinitStyles() { FreeStyles(); InitStyles(); } - // same, for text stacks - void InitStacks(); - void FreeStacks(); - void ReinitStacks() { FreeStacks(); InitStacks(); } + // internal helpers & data: // 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); + // should be called to remember if the pane text is currently being show + // ellipsized or not + void SetEllipsizedFlag(int n, bool isEllipsized); - // 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 array with the pane infos: + wxStatusBarPaneArray m_panes; - // the styles of the fields - int *m_statusStyles; + // if true overrides the width info of the wxStatusBarPanes + bool m_bSameWidthForAllPanes; - // stacks of previous values for PushStatusText/PopStatusText - // this is created on demand, use GetStatusStack/GetOrCreateStatusStack - wxListString **m_statusTextStacks; - - DECLARE_NO_COPY_CLASS(wxStatusBarBase) + wxDECLARE_NO_COPY_CLASS(wxStatusBarBase); }; // ---------------------------------------------------------------------------- @@ -151,22 +230,15 @@ protected: #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 +#elif defined(__WXMSW__) && wxUSE_NATIVE_STATUSBAR #include "wx/msw/statusbar.h" #elif defined(__WXMAC__) #define wxStatusBarMac wxStatusBar - #include "wx/generic/statusbr.h" #include "wx/osx/statusbr.h" #else #define wxStatusBarGeneric wxStatusBar - #include "wx/generic/statusbr.h" #endif