169 lines
4.0 KiB
C++

/////////////////////////////////////////////////////////////////////////////
// Name: src/generic/stattextg.cpp
// Purpose: wxGenericStaticText
// Author: Marcin Wojdyr
// Created: 2008-06-26
// 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