]> git.saurik.com Git - wxWidgets.git/blob - src/html/m_links.cpp
No changes, just use wxRecursionGuard instead of manual boolean flag.
[wxWidgets.git] / src / html / m_links.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: src/html/m_links.cpp
3 // Purpose: wxHtml module for links & anchors
4 // Author: Vaclav Slavik
5 // Copyright: (c) 1999 Vaclav Slavik
6 // Licence: wxWindows licence
7 /////////////////////////////////////////////////////////////////////////////
8
9 #include "wx/wxprec.h"
10
11 #ifdef __BORLANDC__
12 #pragma hdrstop
13 #endif
14
15 #if wxUSE_HTML && wxUSE_STREAMS
16
17 #ifndef WX_PRECOMP
18 #endif
19
20 #include "wx/html/forcelnk.h"
21 #include "wx/html/m_templ.h"
22 #include "wx/html/styleparams.h"
23
24
25 FORCE_LINK_ME(m_links)
26
27
28 class wxHtmlAnchorCell : public wxHtmlCell
29 {
30 private:
31 wxString m_AnchorName;
32
33 public:
34 wxHtmlAnchorCell(const wxString& name) : wxHtmlCell()
35 { m_AnchorName = name; }
36 void Draw(wxDC& WXUNUSED(dc),
37 int WXUNUSED(x), int WXUNUSED(y),
38 int WXUNUSED(view_y1), int WXUNUSED(view_y2),
39 wxHtmlRenderingInfo& WXUNUSED(info)) {}
40
41 virtual const wxHtmlCell* Find(int condition, const void* param) const
42 {
43 if ((condition == wxHTML_COND_ISANCHOR) &&
44 (m_AnchorName == (*((const wxString*)param))))
45 {
46 return this;
47 }
48 else
49 {
50 return wxHtmlCell::Find(condition, param);
51 }
52 }
53
54 wxDECLARE_NO_COPY_CLASS(wxHtmlAnchorCell);
55 };
56
57
58
59 TAG_HANDLER_BEGIN(A, "A")
60 TAG_HANDLER_CONSTR(A) { }
61
62 TAG_HANDLER_PROC(tag)
63 {
64 if (tag.HasParam( wxT("NAME") ))
65 {
66 m_WParser->GetContainer()->InsertCell(new wxHtmlAnchorCell(tag.GetParam( wxT("NAME") )));
67 }
68
69 if (tag.HasParam( wxT("HREF") ))
70 {
71 wxHtmlLinkInfo oldlnk = m_WParser->GetLink();
72 wxColour oldclr = m_WParser->GetActualColor();
73 wxColour oldbackclr = m_WParser->GetActualBackgroundColor();
74 int oldbackmode = m_WParser->GetActualBackgroundMode();
75 int oldsize = m_WParser->GetFontSize();
76 int oldbold = m_WParser->GetFontBold();
77 int olditalic = m_WParser->GetFontItalic();
78 int oldund = m_WParser->GetFontUnderlined();
79 wxString oldfontface = m_WParser->GetFontFace();
80 wxString name(tag.GetParam( wxT("HREF") )), target;
81
82 if (tag.HasParam( wxT("TARGET") )) target = tag.GetParam( wxT("TARGET") );
83
84 // set default styles, might get overridden by ApplyStyle
85 m_WParser->SetActualColor(m_WParser->GetLinkColor());
86 m_WParser->GetContainer()->InsertCell(new wxHtmlColourCell(m_WParser->GetLinkColor()));
87 m_WParser->SetFontUnderlined(true);
88 m_WParser->GetContainer()->InsertCell(new wxHtmlFontCell(m_WParser->CreateCurrentFont()));
89 m_WParser->SetLink(wxHtmlLinkInfo(name, target));
90
91 // Load any style parameters
92 wxHtmlStyleParams styleParams(tag);
93 ApplyStyle(styleParams);
94
95 ParseInner(tag);
96
97 m_WParser->SetLink(oldlnk);
98 m_WParser->SetFontSize(oldsize);
99 m_WParser->SetFontBold(oldbold);
100 m_WParser->SetFontFace(oldfontface);
101 m_WParser->SetFontItalic(olditalic);
102 m_WParser->SetFontUnderlined(oldund);
103 m_WParser->GetContainer()->InsertCell(new wxHtmlFontCell(m_WParser->CreateCurrentFont()));
104 m_WParser->SetActualColor(oldclr);
105 m_WParser->GetContainer()->InsertCell(new wxHtmlColourCell(oldclr));
106
107 if (oldbackmode != m_WParser->GetActualBackgroundMode() ||
108 oldbackclr != m_WParser->GetActualBackgroundColor())
109 {
110 m_WParser->SetActualBackgroundMode(oldbackmode);
111 m_WParser->SetActualBackgroundColor(oldbackclr);
112 m_WParser->GetContainer()->InsertCell(
113 new wxHtmlColourCell(oldbackclr, oldbackmode == wxTRANSPARENT ? wxHTML_CLR_TRANSPARENT_BACKGROUND : wxHTML_CLR_BACKGROUND));
114 }
115
116 return true;
117 }
118 else return false;
119 }
120
121 TAG_HANDLER_END(A)
122
123
124
125 TAGS_MODULE_BEGIN(Links)
126
127 TAGS_MODULE_ADD(A)
128
129 TAGS_MODULE_END(Links)
130
131
132 #endif