| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248 |
- /////////////////////////////////////////////////////////////////////////////
- // Name: wx/statusbr.h
- // Purpose: wxStatusBar class interface
- // Author: Vadim Zeitlin
- // Modified by:
- // Created: 05.02.00
- // 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/control.h"
- #include "wx/list.h"
- #include "wx/dynarray.h"
- extern WXDLLIMPEXP_DATA_CORE(const char) wxStatusBarNameStr[];
- // ----------------------------------------------------------------------------
- // wxStatusBar constants
- // ----------------------------------------------------------------------------
- // 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 wxControl
- {
- public:
- wxStatusBarBase();
- virtual ~wxStatusBarBase();
- // field count
- // -----------
- // 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 (int)m_panes.GetCount(); }
- // field text
- // ----------
- // 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);
- // 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[]);
- int GetStatusWidth(int n) const
- { return m_panes[n].GetWidth(); }
- // field styles
- // ------------
- // 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
- // --------
- // Get the position and size of the field's internal bounding rectangle
- virtual bool GetFieldRect(int i, wxRect& rect) const = 0;
- // sets the minimal vertical size of the status bar
- virtual void SetMinHeight(int height) = 0;
- // 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:
- // called after the status bar pane text changed and should update its
- // display
- virtual void DoUpdateStatusText(int number) = 0;
- // 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 // wxUSE_TOOLTIPS
- 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;
- // should be called to remember if the pane text is currently being show
- // ellipsized or not
- void SetEllipsizedFlag(int n, bool isEllipsized);
- // the array with the pane infos:
- wxStatusBarPaneArray m_panes;
- // if true overrides the width info of the wxStatusBarPanes
- bool m_bSameWidthForAllPanes;
- wxDECLARE_NO_COPY_CLASS(wxStatusBarBase);
- };
- // ----------------------------------------------------------------------------
- // include the actual wxStatusBar class declaration
- // ----------------------------------------------------------------------------
- #if defined(__WXUNIVERSAL__)
- #define wxStatusBarUniv wxStatusBar
- #include "wx/univ/statusbr.h"
- #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
- #endif // wxUSE_STATUSBAR
- #endif
- // _WX_STATUSBR_H_BASE_
|