20#include "tablehandler.h"
22#include <wv2/word97_generated.h>
28KWordTableHandler::KWordTableHandler()
34void KWordTableHandler::tableStart( KWord::Table* table )
37 Q_ASSERT( !table->name.isEmpty() );
38 m_currentTable = table;
39 qHeapSort( table->m_cellEdges );
41 for (
unsigned int i = 0; i < table->m_cellEdges.size(); i++)
42 kdDebug(30513) << table->m_cellEdges[i] << endl;
48void KWordTableHandler::tableEnd()
56void KWordTableHandler::tableRowStart( wvWare::SharedPtr<const wvWare::Word97::TAP> tap )
60 kdWarning(30513) <<
"tableRowStart: tableStart not called previously!" << endl;
63 Q_ASSERT( m_currentTable );
64 Q_ASSERT( !m_currentTable->name.isEmpty() );
68 kdDebug(30513) <<
"tableRowStart row=" << m_row << endl;
71void KWordTableHandler::tableRowEnd()
73 kdDebug(30513) <<
"tableRowEnd" << endl;
74 m_currentY += rowHeight();
77void KWordTableHandler::tableCellStart()
83 int nbCells = m_tap->itcMac;
84 Q_ASSERT( m_column < nbCells );
85 if ( m_column >= nbCells )
89 const wvWare::Word97::TC& tc = m_tap->rgtc[ m_column ];
91 int left = m_tap->rgdxaCenter[ m_column ];
92 int right = m_tap->rgdxaCenter[ m_column+1 ];
98 if ( tc.fFirstMerged )
102 int i = m_column + 1;
103 while ( i < nbCells && m_tap->rgtc[ i ].fMerged && !m_tap->rgtc[i].fFirstMerged ) {
110 if ( tc.fVertRestart )
115 TQValueList<KWord::Row>::Iterator it = m_currentTable->rows.at( m_row + 1 );
116 for( ; it != m_currentTable->rows.end(); ++it ) {
118 KWord::TAPptr tapBelow = (*it).tap;
119 const wvWare::Word97::TC* tcBelow = 0L;
120 for (
int c = 0; !tcBelow && c < tapBelow->itcMac ; ++c )
122 if ( TQABS( tapBelow->rgdxaCenter[ c ] - left ) <= 3
123 && TQABS( tapBelow->rgdxaCenter[ c + 1 ] - right ) <= 3 ) {
124 tcBelow = &tapBelow->rgtc[ c ];
128 if ( tcBelow && tcBelow->fVertMerge && !tcBelow->fVertRestart )
137 if ( tc.fVertMerge && !tc.fVertRestart )
141 int leftCellNumber = m_currentTable->columnNumber( left );
142 int rightCellNumber = m_currentTable->columnNumber( right );
148 if ( m_column == nbCells - 1 ) {
149 rightCellNumber = m_currentTable->m_cellEdges.size() - 1;
150 right = m_currentTable->m_cellEdges[ rightCellNumber ];
153 Q_ASSERT( rightCellNumber >= leftCellNumber );
154 int colSpan = rightCellNumber - leftCellNumber;
156 KoRect cellRect( left / 20.0,
158 ( right - left ) / 20.0,
161 kdDebug(30513) <<
" tableCellStart row=" << m_row <<
" WordColumn=" << m_column <<
" colSpan=" << colSpan <<
" (from " << leftCellNumber <<
" to " << rightCellNumber <<
" for KWord) rowSpan=" << rowSpan <<
" cellRect=" << cellRect << endl;
169 const wvWare::Word97::BRC& brcTop = tc.brcTop;
170 const wvWare::Word97::BRC& brcBottom = tc.brcBottom;
171 const wvWare::Word97::BRC& brcLeft =
172 ( tc.brcLeft.cv == 255 && tc.brcLeft.dptLineWidth == 255 && m_column > 0 ) ?
173 m_tap->rgtc[ m_column - 1 ].brcRight
175 const wvWare::Word97::BRC& brcRight =
176 ( tc.brcRight.cv == 255 && tc.brcRight.dptLineWidth == 255 && m_column < nbCells - 1 ) ?
177 m_tap->rgtc[ m_column + 1 ].brcLeft
180 emit sigTableCellStart( m_row, leftCellNumber, rowSpan, colSpan, cellRect, m_currentTable->name, brcTop, brcBottom, brcLeft, brcRight, m_tap->rgshd[ m_column ] );
183void KWordTableHandler::tableCellEnd()
185 kdDebug(30513) <<
" tableCellEnd" << endl;
186 emit sigTableCellEnd();
191void KWord::Table::cacheCellEdge(
int cellEdge)
193 uint size = m_cellEdges.size();
195 for (
unsigned int i = 0; i < size; i++)
197 if (m_cellEdges[i] == cellEdge) {
198 kdDebug(30513) << k_funcinfo << cellEdge <<
" -> found" << endl;
204 m_cellEdges.resize(size + 1, TQGArray::SpeedOptim);
205 m_cellEdges[size] = cellEdge;
206 kdDebug(30513) << k_funcinfo << cellEdge <<
" -> added. Size=" << size+1 << endl;
211int KWord::Table::columnNumber(
int cellEdge)
const
213 for (
unsigned int i = 0; i < m_cellEdges.size(); i++)
215 if (m_cellEdges[i] == cellEdge)
219 kdWarning(30513) <<
"Column not found for cellEdge x=" << cellEdge <<
" - BUG." << endl;
223double KWordTableHandler::rowHeight()
const
225 return TQMAX( m_tap->dyaRowHeight / 20.0, 20);
228#include "tablehandler.moc"