X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/7b6fefbed1ef1cb879b72950d9f8fa35da128827..31cc5049d386913adeba034e499e3c181ad54a50:/include/wx/statusbr.h diff --git a/include/wx/statusbr.h b/include/wx/statusbr.h index a5593c27cf..0b286fc7f7 100644 --- a/include/wx/statusbr.h +++ b/include/wx/statusbr.h @@ -26,7 +26,22 @@ extern WXDLLIMPEXP_DATA_CORE(const char) wxStatusBarNameStr[]; // 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 @@ -35,19 +50,44 @@ extern WXDLLIMPEXP_DATA_CORE(const char) wxStatusBarNameStr[]; // wxStatusBarPane: an helper for wxStatusBar // ---------------------------------------------------------------------------- -class wxStatusBarPane +class WXDLLIMPEXP_CORE wxStatusBarPane { + // only wxStatusBarBase can access our internal members and modify them: + friend class WXDLLIMPEXP_FWD_CORE wxStatusBarBase; + public: wxStatusBarPane(int style = wxSB_NORMAL, size_t width = 0) - : nStyle(style), nWidth(width) {} + : m_nStyle(style), m_nWidth(width) + { m_arrStack.Add(wxEmptyString); m_bEllipsized=false; } + + int GetWidth() const + { return m_nWidth; } + int GetStyle() const + { return m_nStyle; } + + const wxArrayString& GetStack() const + { return m_arrStack; } + + // implementation-only getter: + bool IsEllipsized() const + { return m_bEllipsized; } + + // NOTE: there are no setters in wxStatusBarPane; + // use wxStatusBar functions to modify a wxStatusBarPane - int nStyle; - int nWidth; // the width maybe negative, indicating a variable-width field +protected: + int m_nStyle; + int m_nWidth; // the width maybe negative, indicating a variable-width field // this is the array of the stacked strings of this pane; note that this - // stack does not include the string currently displayed in this pane - // as it's stored in the native status bar control - wxArrayString arrStack; + // stack does include also the string currently displayed in this pane + // as the version stored in the native status bar control is possibly + // ellipsized; note that m_arrStack.Last() is the top of the stack + // (i.e. the string shown in the status bar) + wxArrayString m_arrStack; + + // was the m_arrStack.Last() string shown in the status bar control ellipsized? + bool m_bEllipsized; }; WX_DECLARE_OBJARRAY(wxStatusBarPane, wxStatusBarPaneArray); @@ -74,8 +114,14 @@ public: // field text // ---------- - virtual void SetStatusText(const wxString& text, int number = 0) = 0; - virtual wxString GetStatusText(int number = 0) const = 0; + // NOTE: even if it is not pure virtual, SetStatusText() must be overloaded by + // the derived classes to update the given text in the native control + virtual void SetStatusText(const wxString& text, int number = 0) + { m_panes[number].GetStack().Last() = text; } + virtual wxString GetStatusText(int number = 0) const + { return m_panes[number].GetStack().Last(); } + const wxArrayString& GetStatusStack(int n) const + { return m_panes[n].GetStack(); } void PushStatusText(const wxString& text, int number = 0); void PopStatusText(int number = 0); @@ -90,6 +136,9 @@ public: // 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[]); + + int GetStatusWidth(int n) const + { return m_panes[n].GetWidth(); } // field styles // ------------ @@ -99,6 +148,9 @@ public: // 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[]); + + int GetStatusStyle(int n) const + { return m_panes[n].GetStyle(); } // geometry // -------- @@ -112,17 +164,49 @@ public: // get the dimensions of the horizontal and vertical borders 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: + + // wxWindow overrides: + +#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 + virtual wxBorder GetDefaultBorder() const { return wxBORDER_NONE; } + + // internal helpers & data: + // calculate the real field widths for the given total available size wxArrayInt CalculateAbsWidths(wxCoord widthTotal) const; + + // an internal utility used to keep track of which panes have labels + // which were last rendered as ellipsized... + void SetEllipsizedFlag(int n, bool ellipsized) + { m_panes[n].m_bEllipsized = ellipsized; } // the array with the pane infos: wxStatusBarPaneArray m_panes; @@ -130,7 +214,7 @@ protected: // if true overrides the width info of the wxStatusBarPanes bool m_bSameWidthForAllPanes; - DECLARE_NO_COPY_CLASS(wxStatusBarBase) + wxDECLARE_NO_COPY_CLASS(wxStatusBarBase); }; // ----------------------------------------------------------------------------