c901bc0b72ee92e89d072c040b2fe1bf106c5b8b
[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     virtual void paint(PaintInfo& i, int tx, int ty);
89
90     int numRows() const { return gridRows; }
91     int numColumns() const;
92     int getBaseline(int row) {return grid[row].baseLine;}
93
94     void setNeedCellRecalc() {
95         needCellRecalc = true;
96         table()->setNeedSectionRecalc();
97     }
98
99     virtual RenderObject* removeChildNode(RenderObject* child);
100
101     virtual bool nodeAtPoint(NodeInfo& info, int x, int y, int tx, int ty, HitTestAction action);
102
103     // this gets a cell grid data structure. changing the number of
104     // columns is done by the table
105     DeprecatedArray<RowStruct> grid;
106     int gridRows;
107     DeprecatedArray<int> rowPos;
108
109     // the current insertion position
110     int cCol;
111     int cRow;
112     bool needCellRecalc;
113
114     void recalcCells();
115 protected:
116     bool ensureRows(int numRows);
117     void clearGrid();
118 };
119
120 }
121 #endif