X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d6f2a8911e509fd9e61f881cc881a97f5aa05ae8..edae63b0769fab90e3a64d0e211ae3090b6120c8:/src/msw/stattext.cpp diff --git a/src/msw/stattext.cpp b/src/msw/stattext.cpp index 2df67c28b8..1309628465 100644 --- a/src/msw/stattext.cpp +++ b/src/msw/stattext.cpp @@ -94,15 +94,24 @@ bool wxStaticText::Create(wxWindow *parent, if ( !CreateControl(parent, id, pos, size, style, wxDefaultValidator, name) ) return false; - if ( !MSWCreateControl(wxT("STATIC"), label, pos, size) ) + if ( !MSWCreateControl(wxT("STATIC"), wxEmptyString, pos, size) ) return false; - return true; -} + // we set the label here and not through MSWCreateControl() because we + // need to do many operation on it for ellipsization&markup support + SetLabel(label); -wxBorder wxStaticText::GetDefaultBorder() const -{ - return wxBORDER_NONE; + // as we didn't pass the correct label to MSWCreateControl(), it didn't set + // the initial size correctly -- do it now + InvalidateBestSize(); + SetInitialSize(size); + + // NOTE: if the label contains ampersand characters which are interpreted as + // accelerators, they will be rendered (at least on WinXP) only if the + // static text is placed inside a window class which correctly handles + // focusing by TAB traversal (e.g. wxPanel). + + return true; } WXDWORD wxStaticText::MSWGetStyle(long style, WXDWORD *exstyle) const @@ -138,9 +147,9 @@ WXDWORD wxStaticText::MSWGetStyle(long style, WXDWORD *exstyle) const return msStyle; } -wxSize wxStaticText::DoGetBestSize() const +wxSize wxStaticText::DoGetBestClientSize() const { - wxClientDC dc(wx_const_cast(wxStaticText *, this)); + wxClientDC dc(const_cast(this)); wxFont font(GetFont()); if (!font.Ok()) font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); @@ -155,40 +164,7 @@ wxSize wxStaticText::DoGetBestSize() const widthTextMax += 2; #endif // __WXWINCE__ - // border takes extra space - // - // TODO: this is probably not wxStaticText-specific and should be moved - wxCoord border; - switch ( GetBorder() ) - { - case wxBORDER_STATIC: - case wxBORDER_SIMPLE: - border = 1; - break; - - case wxBORDER_SUNKEN: - border = 2; - break; - - case wxBORDER_RAISED: - case wxBORDER_DOUBLE: - border = 3; - break; - - default: - wxFAIL_MSG( _T("unknown border style") ); - // fall through - - case wxBORDER_NONE: - border = 0; - } - - widthTextMax += 2*border; - heightTextTotal += 2*border; - - wxSize best(widthTextMax, heightTextTotal); - CacheBestSize(best); - return best; + return wxSize(widthTextMax, heightTextTotal); } void wxStaticText::DoSetSize(int x, int y, int w, int h, int sizeFlags) @@ -220,9 +196,9 @@ void wxStaticText::SetLabel(const wxString& label) if ( HasFlag(wxST_ELLIPSIZE_END) && wxGetOsVersion() == wxOS_WINDOWS_NT ) { - // adding SS_ENDELLIPSIS or SS_ENDELLIPSIS "disables" the correct - // newline handling in static texts: the newlines in the labels are - // shown as square. Thus we don't use it even on newer OS when + // adding SS_ENDELLIPSIS or SS_ENDELLIPSIS "disables" the correct + // newline handling in static texts: the newlines in the labels are + // shown as square. Thus we don't use it even on newer OS when // the static label contains a newline. if ( label.Contains(wxT('\n')) ) styleReal &= ~SS_ENDELLIPSIS; @@ -238,13 +214,13 @@ void wxStaticText::SetLabel(const wxString& label) } #endif // SS_ENDELLIPSIS - // this call will save the label in m_labelOrig and set it into this window - // (through wxWindow::SetLabel) + // save the label in m_labelOrig with both the markup (if any) and + // the mnemonics characters (if any) m_labelOrig = label; #ifdef SS_ENDELLIPSIS if ( styleReal & SS_ENDELLIPSIS ) - DoSetLabel(RemoveMarkup(label)); + DoSetLabel(GetLabelWithoutMarkup()); else #endif // SS_ENDELLIPSIS DoSetLabel(GetEllipsizedLabelWithoutMarkup());