LayoutTests:
[WebKit-https.git] / WebCore / rendering / RenderTableSection.h
1 /*
2  * This file is part of the DOM implementation for KDE.
3  *
4  * Copyright (C) 1997 Martin Jones (mjones@kde.org)
5  *           (C) 1997 Torben Weis (weis@kde.org)
6  *           (C) 1998 Waldo Bastian (bastian@kde.org)
7  *           (C) 1999 Lars Knoll (knoll@kde.org)
8  *           (C) 1999 Antti Koivisto (koivisto@kde.org)
9  * Copyright (C) 2003, 2004, 2005, 2006 Apple Computer, Inc.
10  *
11  * This library is free software; you can redistribute it and/or
12  * modify it under the terms of the GNU Library General Public
13  * License as published by the Free Software Foundation; either
14  * version 2 of the License, or (at your option) any later version.
15  *
16  * This library is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19  * Library General Public License for more details.
20  *
21  * You should have received a copy of the GNU Library General Public License
22  * along with this library; see the file COPYING.LIB.  If not, write to
23  * the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
24  * Boston, MA 02111-1307, USA.
25  */
26
27 #ifndef RenderTableSection_H
28 #define RenderTableSection_H
29
30 #include "RenderTable.h"
31
32 namespace WebCore {
33
34 class RenderTableCell;
35
36 class RenderTableSection : public RenderContainer
37 {
38 public:
39     RenderTableSection(WebCore::Node* node);
40     ~RenderTableSection();
41     virtual void destroy();
42
43     virtual void setStyle(RenderStyle *style);
44
45     virtual const char *renderName() const { return "RenderTableSection"; }
46
47     // overrides
48     virtual void addChild(RenderObject *child, RenderObject *beforeChild = 0);
49     virtual bool isTableSection() const { return true; }
50
51     virtual short lineHeight(bool) const { return 0; }
52     virtual void position(int, int, int, int, int, bool, bool, int) {}
53
54 #ifndef NDEBUG
55     virtual void dump(QTextStream *stream, DeprecatedString ind = "") const;
56 #endif
57
58     void addCell(RenderTableCell *cell, RenderObject* row);
59
60     void setCellWidths();
61     void calcRowHeight();
62     int layoutRows(int height);
63
64     RenderTable *table() const { return static_cast<RenderTable *>(parent()); }
65
66     struct CellStruct {
67         RenderTableCell *cell;
68         bool inColSpan; // true for columns after the first in a colspan
69     };
70     typedef DeprecatedArray<CellStruct> Row;
71     struct RowStruct {
72         Row* row;
73         RenderObject* rowRenderer;
74         int baseLine;
75         Length height;
76     };
77
78     CellStruct& cellAt(int row,  int col) {
79         return (*grid[row].row)[col];
80     }
81     const CellStruct& cellAt(int row, int col) const {
82         return (*grid[row].row)[col];
83     }
84
85     virtual int lowestPosition(bool includeOverflowInterior, bool includeSelf) const;
86     virtual int rightmostPosition(bool includeOverflowInterior, bool includeSelf) const;
87     virtual int leftmostPosition(bool includeOverflowInterior, bool includeSelf) const;
88
89     int calcOuterBorderTop() const;
90     int calcOuterBorderBottom() const;
91     int calcOuterBorderLeft(bool rtl) const;
92     int calcOuterBorderRight(bool rtl) const;
93     void recalcOuterBorder();
94
95     int outerBorderTop() const { return m_outerBorderTop; }
96     int outerBorderBottom() const { return m_outerBorderBottom; }
97     int outerBorderLeft() const { return m_outerBorderLeft; }
98     int outerBorderRight() const { return m_outerBorderRight; }
99
100     virtual void paint(PaintInfo& i, int tx, int ty);
101
102     int numRows() const { return gridRows; }
103     int numColumns() const;
104     int getBaseline(int row) {return grid[row].baseLine;}
105
106     void setNeedCellRecalc() {
107         needCellRecalc = true;
108         table()->setNeedSectionRecalc();
109     }
110
111     virtual RenderObject* removeChildNode(RenderObject* child);
112
113     virtual bool nodeAtPoint(NodeInfo& info, int x, int y, int tx, int ty, HitTestAction action);
114
115     // this gets a cell grid data structure. changing the number of
116     // columns is done by the table
117     DeprecatedArray<RowStruct> grid;
118     int gridRows;
119     DeprecatedArray<int> rowPos;
120
121     // the current insertion position
122     int cCol;
123     int cRow;
124     bool needCellRecalc;
125
126     void recalcCells();
127 protected:
128     bool ensureRows(int numRows);
129     void clearGrid();
130     int m_outerBorderLeft;
131     int m_outerBorderRight;
132     int m_outerBorderTop;
133     int m_outerBorderBottom;
134 };
135
136 }
137 #endif