| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248 |
- /////////////////////////////////////////////////////////////////////////////
- // Name: wx/control.h
- // Purpose: wxControl common interface
- // Author: Vadim Zeitlin
- // Modified by:
- // Created: 26.07.99
- // Copyright: (c) wxWidgets team
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
- #ifndef _WX_CONTROL_H_BASE_
- #define _WX_CONTROL_H_BASE_
- // ----------------------------------------------------------------------------
- // headers
- // ----------------------------------------------------------------------------
- #include "wx/defs.h"
- #if wxUSE_CONTROLS
- #include "wx/window.h" // base class
- extern WXDLLIMPEXP_DATA_CORE(const char) wxControlNameStr[];
- // ----------------------------------------------------------------------------
- // Ellipsize() constants
- // ----------------------------------------------------------------------------
- enum wxEllipsizeFlags
- {
- wxELLIPSIZE_FLAGS_NONE = 0,
- wxELLIPSIZE_FLAGS_PROCESS_MNEMONICS = 1,
- wxELLIPSIZE_FLAGS_EXPAND_TABS = 2,
- wxELLIPSIZE_FLAGS_DEFAULT = wxELLIPSIZE_FLAGS_PROCESS_MNEMONICS |
- wxELLIPSIZE_FLAGS_EXPAND_TABS
- };
- // NB: Don't change the order of these values, they're the same as in
- // PangoEllipsizeMode enum.
- enum wxEllipsizeMode
- {
- wxELLIPSIZE_NONE,
- wxELLIPSIZE_START,
- wxELLIPSIZE_MIDDLE,
- wxELLIPSIZE_END
- };
- // ----------------------------------------------------------------------------
- // wxControl is the base class for all controls
- // ----------------------------------------------------------------------------
- class WXDLLIMPEXP_CORE wxControlBase : public wxWindow
- {
- public:
- wxControlBase() { }
- virtual ~wxControlBase();
- // Create() function adds the validator parameter
- bool Create(wxWindow *parent, wxWindowID id,
- const wxPoint& pos = wxDefaultPosition,
- const wxSize& size = wxDefaultSize,
- long style = 0,
- const wxValidator& validator = wxDefaultValidator,
- const wxString& name = wxControlNameStr);
- // get the control alignment (left/right/centre, top/bottom/centre)
- int GetAlignment() const { return m_windowStyle & wxALIGN_MASK; }
- // set label with mnemonics
- virtual void SetLabel(const wxString& label)
- {
- m_labelOrig = label;
- InvalidateBestSize();
- wxWindow::SetLabel(label);
- }
- // return the original string, as it was passed to SetLabel()
- // (i.e. with wx-style mnemonics)
- virtual wxString GetLabel() const { return m_labelOrig; }
- // set label text (mnemonics will be escaped)
- virtual void SetLabelText(const wxString& text)
- {
- SetLabel(EscapeMnemonics(text));
- }
- // get just the text of the label, without mnemonic characters ('&')
- virtual wxString GetLabelText() const { return GetLabelText(GetLabel()); }
- #if wxUSE_MARKUP
- // Set the label with markup (and mnemonics). Markup is a simple subset of
- // HTML with tags such as <b>, <i> and <span>. By default it is not
- // supported i.e. all the markup is simply stripped and SetLabel() is
- // called but some controls in some ports do support this already and in
- // the future most of them should.
- //
- // Notice that, being HTML-like, markup also supports XML entities so '<'
- // should be encoded as "<" and so on, a bare '<' in the input will
- // likely result in an error. As an exception, a bare '&' is allowed and
- // indicates that the next character is a mnemonic. To insert a literal '&'
- // in the control you need to use "&" in the input string.
- //
- // Returns true if the label was set, even if the markup in it was ignored.
- // False is only returned if we failed to parse the label.
- bool SetLabelMarkup(const wxString& markup)
- {
- return DoSetLabelMarkup(markup);
- }
- #endif // wxUSE_MARKUP
- // controls by default inherit the colours of their parents, if a
- // particular control class doesn't want to do it, it can override
- // ShouldInheritColours() to return false
- virtual bool ShouldInheritColours() const { return true; }
- // WARNING: this doesn't work for all controls nor all platforms!
- //
- // simulates the event of given type (i.e. wxButton::Command() is just as
- // if the button was clicked)
- virtual void Command(wxCommandEvent &event);
- virtual bool SetFont(const wxFont& font);
- // wxControl-specific processing after processing the update event
- virtual void DoUpdateWindowUI(wxUpdateUIEvent& event);
- wxSize GetSizeFromTextSize(int xlen, int ylen = -1) const
- { return DoGetSizeFromTextSize(xlen, ylen); }
- wxSize GetSizeFromTextSize(const wxSize& tsize) const
- { return DoGetSizeFromTextSize(tsize.x, tsize.y); }
- // static utilities for mnemonics char (&) handling
- // ------------------------------------------------
- // returns the given string without mnemonic characters ('&')
- static wxString GetLabelText(const wxString& label);
- // returns the given string without mnemonic characters ('&')
- // this function is identic to GetLabelText() and is provided for clarity
- // and for symmetry with the wxStaticText::RemoveMarkup() function.
- static wxString RemoveMnemonics(const wxString& str);
- // escapes (by doubling them) the mnemonics
- static wxString EscapeMnemonics(const wxString& str);
- // miscellaneous static utilities
- // ------------------------------
- // replaces parts of the given (multiline) string with an ellipsis if needed
- static wxString Ellipsize(const wxString& label, const wxDC& dc,
- wxEllipsizeMode mode, int maxWidth,
- int flags = wxELLIPSIZE_FLAGS_DEFAULT);
- // return the accel index in the string or -1 if none and puts the modified
- // string into second parameter if non NULL
- static int FindAccelIndex(const wxString& label,
- wxString *labelOnly = NULL);
- // this is a helper for the derived class GetClassDefaultAttributes()
- // implementation: it returns the right colours for the classes which
- // contain something else (e.g. wxListBox, wxTextCtrl, ...) instead of
- // being simple controls (such as wxButton, wxCheckBox, ...)
- static wxVisualAttributes
- GetCompositeControlsDefaultAttributes(wxWindowVariant variant);
- protected:
- // choose the default border for this window
- virtual wxBorder GetDefaultBorder() const;
- // creates the control (calls wxWindowBase::CreateBase inside) and adds it
- // to the list of parents children
- bool CreateControl(wxWindowBase *parent,
- wxWindowID id,
- const wxPoint& pos,
- const wxSize& size,
- long style,
- const wxValidator& validator,
- const wxString& name);
- #if wxUSE_MARKUP
- // This function may be overridden in the derived classes to implement
- // support for labels with markup. The base class version simply strips the
- // markup and calls SetLabel() with the remaining text.
- virtual bool DoSetLabelMarkup(const wxString& markup);
- #endif // wxUSE_MARKUP
- // override this to return the total control's size from a string size
- virtual wxSize DoGetSizeFromTextSize(int xlen, int ylen = -1) const;
- // initialize the common fields of wxCommandEvent
- void InitCommandEvent(wxCommandEvent& event) const;
- // Ellipsize() helper:
- static wxString DoEllipsizeSingleLine(const wxString& label, const wxDC& dc,
- wxEllipsizeMode mode, int maxWidth,
- int replacementWidth);
- #if wxUSE_MARKUP
- // Remove markup from the given string, returns empty string on error i.e.
- // if markup was syntactically invalid.
- static wxString RemoveMarkup(const wxString& markup);
- #endif // wxUSE_MARKUP
- // this field contains the label in wx format, i.e. with '&' mnemonics,
- // as it was passed to the last SetLabel() call
- wxString m_labelOrig;
- wxDECLARE_NO_COPY_CLASS(wxControlBase);
- };
- // ----------------------------------------------------------------------------
- // include platform-dependent wxControl declarations
- // ----------------------------------------------------------------------------
- #if defined(__WXUNIVERSAL__)
- #include "wx/univ/control.h"
- #elif defined(__WXMSW__)
- #include "wx/msw/control.h"
- #elif defined(__WXMOTIF__)
- #include "wx/motif/control.h"
- #elif defined(__WXGTK20__)
- #include "wx/gtk/control.h"
- #elif defined(__WXGTK__)
- #include "wx/gtk1/control.h"
- #elif defined(__WXMAC__)
- #include "wx/osx/control.h"
- #elif defined(__WXCOCOA__)
- #include "wx/cocoa/control.h"
- #elif defined(__WXPM__)
- #include "wx/os2/control.h"
- #endif
- #endif // wxUSE_CONTROLS
- #endif
- // _WX_CONTROL_H_BASE_
|