1 /////////////////////////////////////////////////////////////////////////////
2 // Name:        src/html/m_links.cpp
3 // Purpose:     wxHtml module for links & anchors
4 // Author:      Vaclav Slavik
5 // RCS-ID:      $Id: m_links.cpp 38788 2006-04-18 08:11:26Z ABX $
6 // Copyright:   (c) 1999 Vaclav Slavik
7 // Licence:     wxWindows licence
8 /////////////////////////////////////////////////////////////////////////////
9 
10 #include "wx/wxprec.h"
11 
12 #ifdef __BORLANDC__
13     #pragma hdrstop
14 #endif
15 
16 #if wxUSE_HTML && wxUSE_STREAMS
17 
18 #ifndef WXPRECOMP
19 #endif
20 
21 #include "wx/html/forcelnk.h"
22 #include "wx/html/m_templ.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:
wxHtmlAnchorCell(const wxString & name)34     wxHtmlAnchorCell(const wxString& name) : wxHtmlCell()
35         { m_AnchorName = name; }
Draw(wxDC & WXUNUSED (dc),int WXUNUSED (x),int WXUNUSED (y),int WXUNUSED (view_y1),int WXUNUSED (view_y2),wxHtmlRenderingInfo & WXUNUSED (info))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 
Find(int condition,const void * param) const41     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     DECLARE_NO_COPY_CLASS(wxHtmlAnchorCell)
55 };
56 
57 
58 
59 TAG_HANDLER_BEGIN(A, "A")
TAG_HANDLER_CONSTR(A)60     TAG_HANDLER_CONSTR(A) { }
61 
TAG_HANDLER_PROC(tag)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             int oldund = m_WParser->GetFontUnderlined();
74             wxString name(tag.GetParam( wxT("HREF") )), target;
75 
76             if (tag.HasParam( wxT("TARGET") )) target = tag.GetParam( wxT("TARGET") );
77             m_WParser->SetActualColor(m_WParser->GetLinkColor());
78             m_WParser->GetContainer()->InsertCell(new wxHtmlColourCell(m_WParser->GetLinkColor()));
79             m_WParser->SetFontUnderlined(true);
80             m_WParser->GetContainer()->InsertCell(new wxHtmlFontCell(m_WParser->CreateCurrentFont()));
81             m_WParser->SetLink(wxHtmlLinkInfo(name, target));
82 
83             ParseInner(tag);
84 
85             m_WParser->SetLink(oldlnk);
86             m_WParser->SetFontUnderlined(oldund);
87             m_WParser->GetContainer()->InsertCell(new wxHtmlFontCell(m_WParser->CreateCurrentFont()));
88             m_WParser->SetActualColor(oldclr);
89             m_WParser->GetContainer()->InsertCell(new wxHtmlColourCell(oldclr));
90 
91             return true;
92         }
93         else return false;
94     }
95 
96 TAG_HANDLER_END(A)
97 
98 
99 
100 TAGS_MODULE_BEGIN(Links)
101 
102     TAGS_MODULE_ADD(A)
103 
104 TAGS_MODULE_END(Links)
105 
106 
107 #endif
108