git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_4_BRANCH@17765 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
171 lines
4.6 KiB
C++
171 lines
4.6 KiB
C++
/////////////////////////////////////////////////////////////////////////////
|
|
// Name: m_list.cpp
|
|
// Purpose: wxHtml module for lists
|
|
// Author: Vaclav Slavik
|
|
// RCS-ID: $Id$
|
|
// Copyright: (c) 1999 Vaclav Slavik
|
|
// Licence: wxWindows Licence
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
#ifdef __GNUG__
|
|
#pragma implementation
|
|
#endif
|
|
|
|
#include "wx/wxprec.h"
|
|
|
|
|
|
#include "wx/defs.h"
|
|
#if wxUSE_HTML && wxUSE_STREAMS
|
|
|
|
#ifdef __BORLANDC__
|
|
#pragma hdrstop
|
|
#endif
|
|
|
|
#ifndef WXPRECOMP
|
|
#include "wx/brush.h"
|
|
#include "wx/dc.h"
|
|
#endif
|
|
|
|
#include "wx/html/forcelnk.h"
|
|
#include "wx/html/m_templ.h"
|
|
|
|
#include "wx/html/htmlcell.h"
|
|
|
|
FORCE_LINK_ME(m_list)
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// wxHtmlListmarkCell
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class wxHtmlListmarkCell : public wxHtmlCell
|
|
{
|
|
private:
|
|
wxBrush m_Brush;
|
|
public:
|
|
wxHtmlListmarkCell(wxDC *dc, const wxColour& clr);
|
|
void Draw(wxDC& dc, int x, int y, int view_y1, int view_y2);
|
|
};
|
|
|
|
wxHtmlListmarkCell::wxHtmlListmarkCell(wxDC* dc, const wxColour& clr) : wxHtmlCell(), m_Brush(clr, wxSOLID)
|
|
{
|
|
m_Width = dc->GetCharHeight();
|
|
m_Height = dc->GetCharHeight();
|
|
m_Descent = 0;
|
|
}
|
|
|
|
|
|
|
|
void wxHtmlListmarkCell::Draw(wxDC& dc, int x, int y, int WXUNUSED(view_y1), int WXUNUSED(view_y2))
|
|
{
|
|
dc.SetBrush(m_Brush);
|
|
dc.DrawEllipse(x + m_PosX + m_Width / 3, y + m_PosY + m_Height / 3,
|
|
(m_Width / 3), (m_Width / 3));
|
|
}
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// The list handler:
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
|
TAG_HANDLER_BEGIN(OLULLI, "OL,UL,LI")
|
|
|
|
TAG_HANDLER_VARS
|
|
int m_Numbering;
|
|
// this is number of actual item of list or 0 for dots
|
|
|
|
TAG_HANDLER_CONSTR(OLULLI)
|
|
{
|
|
m_Numbering = 0;
|
|
}
|
|
|
|
TAG_HANDLER_PROC(tag)
|
|
{
|
|
wxHtmlContainerCell *c;
|
|
|
|
// List Item:
|
|
if (tag.GetName() == wxT("LI"))
|
|
{
|
|
m_WParser->GetContainer()->SetIndent(0, wxHTML_INDENT_TOP);
|
|
// this is to prevent indetation in <li><p> case
|
|
m_WParser->CloseContainer();
|
|
m_WParser->CloseContainer();
|
|
|
|
c = m_WParser->OpenContainer();
|
|
c->SetWidthFloat(2 * m_WParser->GetCharWidth(), wxHTML_UNITS_PIXELS);
|
|
if (m_Numbering == 0)
|
|
{
|
|
// Centering gives more space after the bullet
|
|
c->SetAlignHor(wxHTML_ALIGN_CENTER);
|
|
c->InsertCell(new wxHtmlListmarkCell(m_WParser->GetDC(), m_WParser->GetActualColor()));
|
|
}
|
|
else
|
|
{
|
|
c->SetAlignHor(wxHTML_ALIGN_RIGHT);
|
|
wxString mark;
|
|
mark.Printf(wxT("%i."), m_Numbering);
|
|
c->InsertCell(new wxHtmlWordCell(mark, *(m_WParser->GetDC())));
|
|
}
|
|
m_WParser->CloseContainer();
|
|
|
|
c = m_WParser->OpenContainer();
|
|
c->SetIndent(m_WParser->GetCharWidth() / 4, wxHTML_INDENT_LEFT);
|
|
c->SetWidthFloat(-2 * m_WParser->GetCharWidth(), wxHTML_UNITS_PIXELS);
|
|
|
|
m_WParser->OpenContainer();
|
|
|
|
if (m_Numbering != 0) m_Numbering++;
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
// Begin of List (not-numbered): "UL", "OL"
|
|
else
|
|
{
|
|
int oldnum = m_Numbering;
|
|
|
|
if (tag.GetName() == wxT("UL")) m_Numbering = 0;
|
|
else m_Numbering = 1;
|
|
|
|
c = m_WParser->GetContainer();
|
|
if (c->GetFirstCell() != NULL)
|
|
{
|
|
m_WParser->CloseContainer();
|
|
m_WParser->OpenContainer();
|
|
c = m_WParser->GetContainer();
|
|
}
|
|
c->SetAlignHor(wxHTML_ALIGN_LEFT);
|
|
c->SetIndent(2 * m_WParser->GetCharWidth(), wxHTML_INDENT_LEFT);
|
|
m_WParser->OpenContainer()->SetAlignVer(wxHTML_ALIGN_TOP);
|
|
|
|
m_WParser->OpenContainer();
|
|
m_WParser->OpenContainer();
|
|
ParseInner(tag);
|
|
|
|
m_WParser->GetContainer()->SetIndent(0, wxHTML_INDENT_TOP);
|
|
// this is to prevent indetation in <li><p> case
|
|
m_WParser->CloseContainer();
|
|
|
|
m_WParser->CloseContainer();
|
|
m_WParser->CloseContainer();
|
|
m_WParser->CloseContainer();
|
|
m_WParser->OpenContainer();
|
|
|
|
m_Numbering = oldnum;
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
TAG_HANDLER_END(OLULLI)
|
|
|
|
|
|
TAGS_MODULE_BEGIN(List)
|
|
|
|
TAGS_MODULE_ADD(OLULLI)
|
|
|
|
TAGS_MODULE_END(List)
|
|
|
|
#endif
|