Files
wxWidgets/src/generic/stattextg.cpp
Vadim Zeitlin 2814e718ba Add markup support to generic wxStaticText implementation.
wxMarkupText allows to easily support markup in the controls that we draw
ourselves so use it in wxGenericStaticText to have a possibility to use
markup on all platforms, even those where there is no native markup support in
wxStaticText itself.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@67067 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-02-27 12:48:38 +00:00

170 lines
4.1 KiB
C++

/////////////////////////////////////////////////////////////////////////////
// Name: src/generic/stattextg.cpp
// Purpose: wxGenericStaticText
// Author: Marcin Wojdyr
// Created: 2008-06-26
// RCS-ID: $Id$
// Copyright: Marcin Wojdyr
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#if wxUSE_STATTEXT
#ifndef WX_PRECOMP
#include "wx/dcclient.h"
#include "wx/settings.h"
#include "wx/validate.h"
#endif
#include "wx/generic/stattextg.h"
#if wxUSE_MARKUP
#include "wx/generic/private/markuptext.h"
#endif // wxUSE_MARKUP
IMPLEMENT_DYNAMIC_CLASS(wxGenericStaticText, wxStaticTextBase)
bool wxGenericStaticText::Create(wxWindow *parent,
wxWindowID id,
const wxString &label,
const wxPoint &pos,
const wxSize &size,
long style,
const wxString &name)
{
if ( !wxControl::Create(parent, id, pos, size, style,
wxDefaultValidator, name) )
return false;
SetLabel(label);
SetInitialSize(size);
Connect(wxEVT_PAINT, wxPaintEventHandler(wxGenericStaticText::OnPaint));
return true;
}
wxGenericStaticText::~wxGenericStaticText()
{
#if wxUSE_MARKUP
delete m_markupText;
#endif // wxUSE_MARKUP
}
void wxGenericStaticText::DoDrawLabel(wxDC& dc, const wxRect& rect)
{
#if wxUSE_MARKUP
if ( m_markupText )
m_markupText->Render(dc, rect, wxMarkupText::Render_ShowAccels);
else
#endif // wxUSE_MARKUP
dc.DrawLabel(m_label, rect, GetAlignment(), m_mnemonic);
}
void wxGenericStaticText::OnPaint(wxPaintEvent& WXUNUSED(event))
{
wxPaintDC dc(this);
wxRect rect = GetClientRect();
if ( IsEnabled() )
{
dc.SetTextForeground(
wxSystemSettings::GetColour(wxSYS_COLOUR_BTNTEXT));
}
else // paint disabled text
{
// draw shadow of the text
dc.SetTextForeground(
wxSystemSettings::GetColour(wxSYS_COLOUR_BTNHIGHLIGHT));
wxRect rectShadow = rect;
rectShadow.Offset(1, 1);
DoDrawLabel(dc, rectShadow);
dc.SetTextForeground(
wxSystemSettings::GetColour(wxSYS_COLOUR_BTNSHADOW));
}
DoDrawLabel(dc, rect);
}
wxSize wxGenericStaticText::DoGetBestClientSize() const
{
wxClientDC dc(wxConstCast(this, wxGenericStaticText));
#if wxUSE_MARKUP
if ( m_markupText )
return m_markupText->Measure(dc);
#endif // wxUSE_MARKUP
return dc.GetMultiLineTextExtent(GetLabel());
}
void wxGenericStaticText::SetLabel(const wxString& label)
{
wxControl::SetLabel(label);
DoSetLabel(GetEllipsizedLabel());
if ( !HasFlag(wxST_NO_AUTORESIZE) && !IsEllipsized() )
InvalidateBestSize();
#if wxUSE_MARKUP
if ( m_markupText )
{
delete m_markupText;
m_markupText = NULL;
}
#endif // wxUSE_MARKUP
Refresh();
}
void wxGenericStaticText::DoSetLabel(const wxString& label)
{
m_mnemonic = FindAccelIndex(label, &m_label);
}
#if wxUSE_MARKUP
bool wxGenericStaticText::DoSetLabelMarkup(const wxString& markup)
{
if ( !wxStaticTextBase::DoSetLabelMarkup(markup) )
return false;
if ( !m_markupText )
m_markupText = new wxMarkupText(markup);
else
m_markupText->SetMarkup(markup);
if ( !HasFlag(wxST_NO_AUTORESIZE) )
InvalidateBestSize();
Refresh();
return true;
}
#endif // wxUSE_MARKUP
bool wxGenericStaticText::SetFont(const wxFont &font)
{
if ( !wxControl::SetFont(font) )
return false;
if ( !HasFlag(wxST_NO_AUTORESIZE) )
InvalidateBestSize();
Refresh();
return true;
}
void wxGenericStaticText::DoSetSize(int x, int y, int width, int height,
int sizeFlags)
{
wxStaticTextBase::DoSetSize(x, y, width, height, sizeFlags);
UpdateLabel();
}
#endif // wxUSE_STATTEXT