X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/41ce5eff753793c44801ab162b028027ba124a28..319faba717040fd0af134f4a36fba3f0b8e284ab:/src/common/stattextcmn.cpp diff --git a/src/common/stattextcmn.cpp b/src/common/stattextcmn.cpp index 9558d2dfdd..66cfd3ba96 100644 --- a/src/common/stattextcmn.cpp +++ b/src/common/stattextcmn.cpp @@ -24,28 +24,79 @@ #pragma hdrstop #endif -#include "wx/private/stattext.h" +#if wxUSE_STATTEXT #ifndef WX_PRECOMP + #include "wx/stattext.h" #include "wx/button.h" #include "wx/dcclient.h" #include "wx/intl.h" #include "wx/log.h" #include "wx/settings.h" - #include "wx/stattext.h" #include "wx/sizer.h" #include "wx/containr.h" #endif -const wxChar *wxMarkupEntities[][wxMARKUP_ENTITY_MAX] = -{ - // the entities handled by SetLabel() when wxST_MARKUP is used and their referenced string +#include "wx/textwrapper.h" - { wxT("&"), wxT("<"), wxT(">"), wxT("'"), wxT(""") }, - { wxT("&"), wxT("<"), wxT(">"), wxT("'"), wxT("\"") } -}; +#include "wx/private/markupparser.h" + +extern WXDLLEXPORT_DATA(const char) wxStaticTextNameStr[] = "staticText"; + +// ---------------------------------------------------------------------------- +// XTI +// ---------------------------------------------------------------------------- + +wxDEFINE_FLAGS( wxStaticTextStyle ) +wxBEGIN_FLAGS( wxStaticTextStyle ) +// new style border flags, we put them first to +// use them for streaming out +wxFLAGS_MEMBER(wxBORDER_SIMPLE) +wxFLAGS_MEMBER(wxBORDER_SUNKEN) +wxFLAGS_MEMBER(wxBORDER_DOUBLE) +wxFLAGS_MEMBER(wxBORDER_RAISED) +wxFLAGS_MEMBER(wxBORDER_STATIC) +wxFLAGS_MEMBER(wxBORDER_NONE) + +// old style border flags +wxFLAGS_MEMBER(wxSIMPLE_BORDER) +wxFLAGS_MEMBER(wxSUNKEN_BORDER) +wxFLAGS_MEMBER(wxDOUBLE_BORDER) +wxFLAGS_MEMBER(wxRAISED_BORDER) +wxFLAGS_MEMBER(wxSTATIC_BORDER) +wxFLAGS_MEMBER(wxBORDER) + +// standard window styles +wxFLAGS_MEMBER(wxTAB_TRAVERSAL) +wxFLAGS_MEMBER(wxCLIP_CHILDREN) +wxFLAGS_MEMBER(wxTRANSPARENT_WINDOW) +wxFLAGS_MEMBER(wxWANTS_CHARS) +wxFLAGS_MEMBER(wxFULL_REPAINT_ON_RESIZE) +wxFLAGS_MEMBER(wxALWAYS_SHOW_SB ) +wxFLAGS_MEMBER(wxVSCROLL) +wxFLAGS_MEMBER(wxHSCROLL) + +wxFLAGS_MEMBER(wxST_NO_AUTORESIZE) +wxFLAGS_MEMBER(wxALIGN_LEFT) +wxFLAGS_MEMBER(wxALIGN_RIGHT) +wxFLAGS_MEMBER(wxALIGN_CENTRE) +wxEND_FLAGS( wxStaticTextStyle ) + +wxIMPLEMENT_DYNAMIC_CLASS_XTI(wxStaticText, wxControl, "wx/stattext.h") + +wxBEGIN_PROPERTIES_TABLE(wxStaticText) +wxPROPERTY( Label,wxString, SetLabel, GetLabel, wxString(), 0 /*flags*/, \ + wxT("Helpstring"), wxT("group")) +wxPROPERTY_FLAGS( WindowStyle, wxStaticTextStyle, long, SetWindowStyleFlag, \ + GetWindowStyleFlag, wxEMPTY_PARAMETER_VALUE, 0 /*flags*/, \ + wxT("Helpstring"), wxT("group")) // style +wxEND_PROPERTIES_TABLE() + +wxEMPTY_HANDLERS_TABLE(wxStaticText) + +wxCONSTRUCTOR_6( wxStaticText, wxWindow*, Parent, wxWindowID, Id, \ + wxString, Label, wxPoint, Position, wxSize, Size, long, WindowStyle ) -#if wxUSE_STATTEXT // ---------------------------------------------------------------------------- // wxTextWrapper @@ -68,7 +119,7 @@ void wxTextWrapper::Wrap(wxWindow *win, const wxString& text, int widthMax) lineStart = p; } - if ( p == text.end() || *p == _T('\n') ) + if ( p == text.end() || *p == wxT('\n') ) { DoOutputLine(line); @@ -77,7 +128,7 @@ void wxTextWrapper::Wrap(wxWindow *win, const wxString& text, int widthMax) } else // not EOL { - if ( *p == _T(' ') ) + if ( *p == wxT(' ') ) lastSpace = p; line += *p; @@ -126,7 +177,7 @@ protected: virtual void OnNewLine() { - m_text += _T('\n'); + m_text += wxT('\n'); } private: @@ -144,132 +195,6 @@ void wxStaticTextBase::Wrap(int width) wrapper.WrapLabel(this, width); } -wxString wxStaticTextBase::GetLabelText() const -{ - wxString ret(GetLabel()); - - if (HasFlag(wxST_MARKUP)) - ret = RemoveMarkup(ret); - return RemoveMnemonics(ret); -} - -/*static*/ -wxString wxStaticTextBase::GetLabelText(const wxString& label) -{ - // remove markup - wxString ret = RemoveMarkup(label); - return RemoveMnemonics(ret); -} - -/*static*/ -wxString wxStaticTextBase::RemoveMarkup(const wxString& text) -{ - // strip out of "text" the markup for platforms which don't support it natively - bool inside_tag = false; - - wxString label; - for ( wxString::const_iterator source = text.begin(); - source != text.end(); ++source ) - { - switch ( (*source).GetValue() ) - { - case wxT('<'): - if (inside_tag) - { - wxLogDebug(wxT("Invalid markup !")); - return wxEmptyString; - } - inside_tag = true; - break; - - case wxT('>'): - if (!inside_tag) - { - wxLogDebug(wxT("Invalid markup !")); - return wxEmptyString; - } - inside_tag = false; - break; - - case wxT('&'): - { - if ( source+1 == text.end() ) - { - wxLogDebug(wxT("Cannot use & as last character of the string '%s'"), - text.c_str()); - return wxEmptyString; - } - - // is this ampersand introducing a mnemonic or rather an entity? - bool isMnemonic = true; - size_t distanceFromEnd = text.end() - source; - for (size_t j=0; j < wxMARKUP_ENTITY_MAX; j++) - { - const wxChar *entity = wxMarkupEntities[wxMARKUP_ELEMENT_NAME][j]; - size_t entityLen = wxStrlen(entity); - - if (distanceFromEnd >= entityLen && - wxString(source, source + entityLen) == entity) - { - // replace the &entity; string with the entity reference - label << wxMarkupEntities[wxMARKUP_ELEMENT_VALUE][j]; - // little exception: when the entity reference is - // "&" (i.e. when entity is "&"), substitute it - // with && instead of a single ampersand: - if (*wxMarkupEntities[wxMARKUP_ELEMENT_VALUE][j] == wxT('&')) - label << wxT('&'); - // the -1 is because main for() loop already - // increments i: - source += entityLen - 1; - isMnemonic = false; - break; - } - } - - if (isMnemonic) - label << *source; - } - break; - - - default: - if (!inside_tag) - label << *source; - } - } - - return label; -} - -/* static */ -wxString wxStaticTextBase::EscapeMarkup(const wxString& text) -{ - wxString ret; - - for (wxString::const_iterator source = text.begin(); - source != text.end(); ++source) - { - bool isEntity = false; - - // search in the list of the entities and eventually escape this character - for (size_t j=0; j < wxMARKUP_ENTITY_MAX; j++) - { - if (*source == *wxMarkupEntities[wxMARKUP_ELEMENT_VALUE][j]) - { - ret << wxMarkupEntities[wxMARKUP_ELEMENT_NAME][j]; - isEntity = true; - break; - } - } - - if (!isEntity) - ret << *source; // this character does not need to be escaped - } - - return ret; -} - - // ---------------------------------------------------------------------------- // wxStaticTextBase - generic implementation for wxST_ELLIPSIZE_* support // ---------------------------------------------------------------------------- @@ -279,7 +204,7 @@ void wxStaticTextBase::UpdateLabel() if (!IsEllipsized()) return; - wxString newlabel = GetEllipsizedLabelWithoutMarkup(); + wxString newlabel = GetEllipsizedLabel(); // we need to touch the "real" label (i.e. the text set inside the control, // using port-specific functions) instead of the string returned by GetLabel(). @@ -292,7 +217,7 @@ void wxStaticTextBase::UpdateLabel() DoSetLabel(newlabel); } -wxString wxStaticTextBase::GetEllipsizedLabelWithoutMarkup() const +wxString wxStaticTextBase::GetEllipsizedLabel() const { // this function should be used only by ports which do not support // ellipsis in static texts: we first remove markup (which cannot @@ -300,11 +225,6 @@ wxString wxStaticTextBase::GetEllipsizedLabelWithoutMarkup() const wxString ret(m_labelOrig); - // the order of the following two blocks is important! - - if (HasFlag(wxST_MARKUP)) - ret = RemoveMarkup(ret); - if (IsEllipsized()) ret = Ellipsize(ret);