added support for ellipsization and markup in wxStaticText (modified patch 1629946)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@45199 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2007-04-01 14:13:15 +00:00
parent 9d529fa05c
commit 39bc0347fd
35 changed files with 1387 additions and 280 deletions

View File

@@ -41,7 +41,7 @@ wxStaticText::wxStaticText(wxWindow *parent,
long style,
const wxString &name)
{
Create( parent, id, label, pos, size, style, name );
Create( parent, id, label, pos, size, style, name );
}
bool wxStaticText::Create(wxWindow *parent,
@@ -61,9 +61,7 @@ bool wxStaticText::Create(wxWindow *parent,
return FALSE;
}
const wxString labelGTK = GTKConvertMnemonics(label);
m_label = label;
m_widget = gtk_label_new_with_mnemonic(wxGTK_CONV(labelGTK));
m_widget = gtk_label_new(NULL);
GtkJustification justify;
if ( style & wxALIGN_CENTER )
@@ -89,6 +87,24 @@ bool wxStaticText::Create(wxWindow *parent,
gtk_label_set_line_wrap( GTK_LABEL(m_widget), TRUE );
#ifdef __WXGTK26__
if (!gtk_check_version(2,6,0))
{
// set ellipsize mode
PangoEllipsizeMode ellipsizeMode = PANGO_ELLIPSIZE_NONE;
if ( style & wxST_ELLIPSIZE_START )
ellipsizeMode = PANGO_ELLIPSIZE_START;
else if ( style & wxST_ELLIPSIZE_MIDDLE )
ellipsizeMode = PANGO_ELLIPSIZE_MIDDLE;
else if ( style & wxST_ELLIPSIZE_END )
ellipsizeMode = PANGO_ELLIPSIZE_END;
gtk_label_set_ellipsize( GTK_LABEL(m_widget), ellipsizeMode );
}
#endif // __WXGTK26__
SetLabel(label);
m_parent->DoAddChild( this );
PostCreation(size);
@@ -110,20 +126,39 @@ bool wxStaticText::Create(wxWindow *parent,
wxString wxStaticText::GetLabel() const
{
GtkLabel *label = GTK_LABEL(m_widget);
wxString str = wxGTK_CONV_BACK( gtk_label_get_text( label ) );
return wxString(str);
// we need to return the label just like it was passed to the last call
// to SetLabel(): i.e. with wx-style mnemonics and with markup
return wxControl::GetLabel();
}
void wxStaticText::SetLabel( const wxString &label )
void wxStaticText::SetLabel( const wxString& str )
{
wxCHECK_RET( m_widget != NULL, wxT("invalid static text") );
GTKSetLabelForLabel(GTK_LABEL(m_widget), label);
// save the label inside m_labelOrig in case user calls GetLabel() later
m_labelOrig = str;
wxString label(str);
if (gtk_check_version(2,6,0) &&
IsEllipsized())
{
// GTK+ < 2.6 does not support ellipsization:
// since we need to use our generic code for ellipsization (which does not
// behaves well in conjunction with markup; i.e. it may break the markup
// validity erasing portions of the string), we also need to strip out
// the markup (if present) from the label.
label = GetEllipsizedLabelWithoutMarkup();
}
if ( HasFlag(wxST_MARKUP) )
GTKSetLabelWithMarkupForLabel(GTK_LABEL(m_widget), label);
else
GTKSetLabelForLabel(GTK_LABEL(m_widget), label);
// adjust the label size to the new label unless disabled
if ( !HasFlag(wxST_NO_AUTORESIZE) )
if ( !HasFlag(wxST_NO_AUTORESIZE) &&
!IsEllipsized() ) // if ellipsize is ON, then we don't want to get resized!
SetSize( GetBestSize() );
}
@@ -171,6 +206,13 @@ void wxStaticText::DoSetSize(int x, int y,
int sizeFlags )
{
wxControl::DoSetSize( x, y, width, height, sizeFlags );
if (gtk_check_version(2,6,0))
{
// GTK+ < 2.6 does not support ellipsization - we need to run our
// generic code (actually it will be run only if IsEllipsized() == true)
UpdateLabel();
}
}
wxSize wxStaticText::DoGetBestSize() const
@@ -215,6 +257,20 @@ void wxStaticText::GTKWidgetDoSetMnemonic(GtkWidget* w)
gtk_label_set_mnemonic_widget(GTK_LABEL(m_widget), w);
}
// These functions should be used only when GTK+ < 2.6 by wxStaticTextBase::UpdateLabel()
wxString wxStaticText::DoGetLabel() const
{
GtkLabel *label = GTK_LABEL(m_widget);
return wxGTK_CONV_BACK( gtk_label_get_text( label ) );
}
void wxStaticText::DoSetLabel(const wxString& str)
{
GTKSetLabelForLabel(GTK_LABEL(m_widget), str);
}
// static
wxVisualAttributes
wxStaticText::GetClassDefaultAttributes(wxWindowVariant WXUNUSED(variant))