130 lines
4.0 KiB
C++
130 lines
4.0 KiB
C++
/////////////////////////////////////////////////////////////////////////////
|
|
// Name: src/html/m_links.cpp
|
|
// Purpose: wxHtml module for links & anchors
|
|
// Author: Vaclav Slavik
|
|
// Copyright: (c) 1999 Vaclav Slavik
|
|
// Licence: wxWindows licence
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include "wx/wxprec.h"
|
|
|
|
|
|
#if wxUSE_HTML && wxUSE_STREAMS
|
|
|
|
#ifndef WX_PRECOMP
|
|
#endif
|
|
|
|
#include "wx/html/forcelnk.h"
|
|
#include "wx/html/m_templ.h"
|
|
#include "wx/html/styleparams.h"
|
|
|
|
|
|
FORCE_LINK_ME(m_links)
|
|
|
|
|
|
class wxHtmlAnchorCell : public wxHtmlCell
|
|
{
|
|
private:
|
|
wxString m_AnchorName;
|
|
|
|
public:
|
|
wxHtmlAnchorCell(const wxString& name) : wxHtmlCell()
|
|
, m_AnchorName(name) { }
|
|
void Draw(wxDC& WXUNUSED(dc),
|
|
int WXUNUSED(x), int WXUNUSED(y),
|
|
int WXUNUSED(view_y1), int WXUNUSED(view_y2),
|
|
wxHtmlRenderingInfo& WXUNUSED(info)) wxOVERRIDE {}
|
|
|
|
virtual const wxHtmlCell* Find(int condition, const void* param) const wxOVERRIDE
|
|
{
|
|
if ((condition == wxHTML_COND_ISANCHOR) &&
|
|
(m_AnchorName == (*((const wxString*)param))))
|
|
{
|
|
return this;
|
|
}
|
|
else
|
|
{
|
|
return wxHtmlCell::Find(condition, param);
|
|
}
|
|
}
|
|
|
|
wxDECLARE_NO_COPY_CLASS(wxHtmlAnchorCell);
|
|
};
|
|
|
|
|
|
|
|
TAG_HANDLER_BEGIN(A, "A")
|
|
TAG_HANDLER_CONSTR(A) { }
|
|
|
|
TAG_HANDLER_PROC(tag)
|
|
{
|
|
wxString name;
|
|
if (tag.GetParamAsString(wxT("NAME"), &name))
|
|
{
|
|
m_WParser->GetContainer()->InsertCell(new wxHtmlAnchorCell(name));
|
|
}
|
|
|
|
wxString href;
|
|
if (tag.GetParamAsString(wxT("HREF"), &href))
|
|
{
|
|
wxHtmlLinkInfo oldlnk = m_WParser->GetLink();
|
|
wxColour oldclr = m_WParser->GetActualColor();
|
|
wxColour oldbackclr = m_WParser->GetActualBackgroundColor();
|
|
int oldbackmode = m_WParser->GetActualBackgroundMode();
|
|
int oldsize = m_WParser->GetFontSize();
|
|
int oldbold = m_WParser->GetFontBold();
|
|
int olditalic = m_WParser->GetFontItalic();
|
|
int oldund = m_WParser->GetFontUnderlined();
|
|
wxString oldfontface = m_WParser->GetFontFace();
|
|
wxString target = tag.GetParam( wxT("TARGET") );
|
|
|
|
// set default styles, might get overridden by ApplyStyle
|
|
m_WParser->SetActualColor(m_WParser->GetLinkColor());
|
|
m_WParser->GetContainer()->InsertCell(new wxHtmlColourCell(m_WParser->GetLinkColor()));
|
|
m_WParser->SetFontUnderlined(true);
|
|
m_WParser->GetContainer()->InsertCell(new wxHtmlFontCell(m_WParser->CreateCurrentFont()));
|
|
m_WParser->SetLink(wxHtmlLinkInfo(href, target));
|
|
|
|
// Load any style parameters
|
|
wxHtmlStyleParams styleParams(tag);
|
|
ApplyStyle(styleParams);
|
|
|
|
ParseInner(tag);
|
|
|
|
m_WParser->SetLink(oldlnk);
|
|
m_WParser->SetFontSize(oldsize);
|
|
m_WParser->SetFontBold(oldbold);
|
|
m_WParser->SetFontFace(oldfontface);
|
|
m_WParser->SetFontItalic(olditalic);
|
|
m_WParser->SetFontUnderlined(oldund);
|
|
m_WParser->GetContainer()->InsertCell(new wxHtmlFontCell(m_WParser->CreateCurrentFont()));
|
|
m_WParser->SetActualColor(oldclr);
|
|
m_WParser->GetContainer()->InsertCell(new wxHtmlColourCell(oldclr));
|
|
|
|
if (oldbackmode != m_WParser->GetActualBackgroundMode() ||
|
|
oldbackclr != m_WParser->GetActualBackgroundColor())
|
|
{
|
|
m_WParser->SetActualBackgroundMode(oldbackmode);
|
|
m_WParser->SetActualBackgroundColor(oldbackclr);
|
|
m_WParser->GetContainer()->InsertCell(
|
|
new wxHtmlColourCell(oldbackclr, oldbackmode == wxBRUSHSTYLE_TRANSPARENT ? wxHTML_CLR_TRANSPARENT_BACKGROUND : wxHTML_CLR_BACKGROUND));
|
|
}
|
|
|
|
return true;
|
|
}
|
|
else return false;
|
|
}
|
|
|
|
TAG_HANDLER_END(A)
|
|
|
|
|
|
|
|
TAGS_MODULE_BEGIN(Links)
|
|
|
|
TAGS_MODULE_ADD(A)
|
|
|
|
TAGS_MODULE_END(Links)
|
|
|
|
|
|
#endif
|