]> git.saurik.com Git - wxWidgets.git/blame - src/html/m_list.cpp
FreeBSD compilation fix
[wxWidgets.git] / src / html / m_list.cpp
CommitLineData
5526e819 1/////////////////////////////////////////////////////////////////////////////
c88293a4 2// Name: m_list.cpp
5526e819
VS
3// Purpose: wxHtml module for lists
4// Author: Vaclav Slavik
69941f05 5// RCS-ID: $Id$
5526e819
VS
6// Copyright: (c) 1999 Vaclav Slavik
7// Licence: wxWindows Licence
8/////////////////////////////////////////////////////////////////////////////
ec4f5ef5
RS
9#ifdef __GNUG__
10#pragma implementation
11#endif
12
314260fb 13#include "wx/wxprec.h"
ec4f5ef5 14
5526e819
VS
15
16#include "wx/defs.h"
f6bcfd97 17#if wxUSE_HTML && wxUSE_STREAMS
5526e819 18
ec4f5ef5
RS
19#ifdef __BORDLANDC__
20#pragma hdrstop
21#endif
22
23#ifndef WXPRECOMP
04dbb646
VZ
24 #include "wx/brush.h"
25 #include "wx/dc.h"
ec4f5ef5
RS
26#endif
27
69941f05
VS
28#include "wx/html/forcelnk.h"
29#include "wx/html/m_templ.h"
5526e819 30
69941f05 31#include "wx/html/htmlcell.h"
5526e819 32
c88293a4 33FORCE_LINK_ME(m_list)
5526e819
VS
34
35
36//-----------------------------------------------------------------------------
37// wxHtmlListmarkCell
38//-----------------------------------------------------------------------------
39
40class wxHtmlListmarkCell : public wxHtmlCell
41{
42 private:
43 wxBrush m_Brush;
44 public:
45 wxHtmlListmarkCell(wxDC *dc, const wxColour& clr);
46 void Draw(wxDC& dc, int x, int y, int view_y1, int view_y2);
47};
48
49wxHtmlListmarkCell::wxHtmlListmarkCell(wxDC* dc, const wxColour& clr) : wxHtmlCell(), m_Brush(clr, wxSOLID)
50{
1da7aa8c
VS
51 m_Width = dc->GetCharWidth();
52 m_Height = dc->GetCharHeight();
5526e819
VS
53 m_Descent = 0;
54}
55
56
57
58void wxHtmlListmarkCell::Draw(wxDC& dc, int x, int y, int view_y1, int view_y2)
59{
60 dc.SetBrush(m_Brush);
61 dc.DrawEllipse(x + m_PosX + m_Width / 4, y + m_PosY + m_Height / 4, m_Width / 2, m_Width / 2);
5526e819
VS
62}
63
64
65
66
67//-----------------------------------------------------------------------------
68// The list handler:
69//-----------------------------------------------------------------------------
70
71
72TAG_HANDLER_BEGIN(OLULLI, "OL,UL,LI")
73
74 TAG_HANDLER_VARS
75 int m_Numbering;
76 // this is number of actual item of list or 0 for dots
77
78 TAG_HANDLER_CONSTR(OLULLI)
79 {
80 m_Numbering = 0;
81 }
82
83 TAG_HANDLER_PROC(tag)
84 {
85 wxHtmlContainerCell *c;
86
87 // List Item:
04dbb646
VZ
88 if (tag.GetName() == wxT("LI"))
89 {
90 if (!tag.IsEnding())
91 {
1da7aa8c
VS
92 m_WParser->GetContainer()->SetIndent(0, wxHTML_INDENT_TOP);
93 // this is to prevent indetation in <li><p> case
94 m_WParser->CloseContainer();
95 m_WParser->CloseContainer();
96
97 c = m_WParser->OpenContainer();
98 c->SetWidthFloat(2 * m_WParser->GetCharWidth(), wxHTML_UNITS_PIXELS);
99 c->SetAlignHor(wxHTML_ALIGN_RIGHT);
5526e819 100 if (m_Numbering == 0)
1da7aa8c 101 c->InsertCell(new wxHtmlListmarkCell(m_WParser->GetDC(), m_WParser->GetActualColor()));
04dbb646
VZ
102 else
103 {
5526e819 104 wxString mark;
66a77a74 105 mark.Printf(wxT("%i."), m_Numbering);
1da7aa8c 106 c->InsertCell(new wxHtmlWordCell(mark, *(m_WParser->GetDC())));
5526e819 107 }
1da7aa8c 108 m_WParser->CloseContainer();
5526e819 109
1da7aa8c
VS
110 c = m_WParser->OpenContainer();
111 c->SetIndent(m_WParser->GetCharWidth() / 4, wxHTML_INDENT_LEFT);
112 c->SetWidthFloat(-2 * m_WParser->GetCharWidth(), wxHTML_UNITS_PIXELS);
5526e819 113
1da7aa8c 114 m_WParser->OpenContainer();
5526e819
VS
115
116 if (m_Numbering != 0) m_Numbering++;
117 }
118 return FALSE;
119 }
120
121 // Begin of List (not-numbered): "UL", "OL"
04dbb646
VZ
122 else
123 {
5526e819
VS
124 int oldnum = m_Numbering;
125
0413cec5 126 if (tag.GetName() == wxT("UL")) m_Numbering = 0;
5526e819
VS
127 else m_Numbering = 1;
128
1da7aa8c 129 c = m_WParser->GetContainer();
04dbb646
VZ
130 if (c->GetFirstCell() != NULL)
131 {
1da7aa8c
VS
132 m_WParser->CloseContainer();
133 m_WParser->OpenContainer();
134 c = m_WParser->GetContainer();
5526e819 135 }
1da7aa8c
VS
136 c->SetAlignHor(wxHTML_ALIGN_LEFT);
137 c->SetIndent(2 * m_WParser->GetCharWidth(), wxHTML_INDENT_LEFT);
138 m_WParser->OpenContainer()->SetAlignVer(wxHTML_ALIGN_TOP);
5526e819 139
1da7aa8c
VS
140 m_WParser->OpenContainer();
141 m_WParser->OpenContainer();
5526e819 142 ParseInner(tag);
5526e819 143
1da7aa8c
VS
144 m_WParser->GetContainer()->SetIndent(0, wxHTML_INDENT_TOP);
145 // this is to prevent indetation in <li><p> case
146 m_WParser->CloseContainer();
147
148 m_WParser->CloseContainer();
149 m_WParser->CloseContainer();
150 m_WParser->CloseContainer();
151 m_WParser->OpenContainer();
5526e819
VS
152
153 m_Numbering = oldnum;
154 return TRUE;
155 }
156 }
157
158TAG_HANDLER_END(OLULLI)
159
160
161TAGS_MODULE_BEGIN(List)
162
163 TAGS_MODULE_ADD(OLULLI)
164
165TAGS_MODULE_END(List)
166
167#endif