kword

KWTableFrameSet.h
1#ifndef KWTABLEFRAMESET_H
2#define KWTABLEFRAMESET_H
3/*
4 Copyright (C) 2001, S.R.Haque (srhaque@iee.org).
5 This file is part of the KDE project
6
7 This library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Library General Public
9 License as published by the Free Software Foundation; either
10 version 2 of the License, or (at your option) any later version.
11
12 This library is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Library General Public License for more details.
16
17 You should have received a copy of the GNU Library General Public License
18 along with this library; see the file COPYING.LIB. If not, write to
19 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20 * Boston, MA 02110-1301, USA.
21
22DESCRIPTION
23
24 This file defines KWord tables. A table is a KWFrameSet, thus allowing its
25 internal structure to be invisible to the rest of kword. This is useful
26 since the internal structure of a table is itself a series of KWFrameSets
27 (one for each cell).
28*/
29
30#include "KWFrame.h"
31#include "KWTextFrameSet.h"
32
33#include <tqptrlist.h>
34#include <tqvaluevector.h>
35#include <tqobject.h>
36#include <tqstring.h>
37#include <KoRichText.h>
38
39class KWDocument;
41class TQPainter;
42class KWAnchor;
43class KWordFrameSetIface;
45
46class RemovedRow;
47class RemovedColumn;
48
59{
60 TQ_OBJECT
61
62public:
63
68 class Cell : public KWTextFrameSet
69 {
70 unsigned int m_row, m_col;
71 unsigned int m_rows, m_cols;
72
73 bool m_isJoinedCell;
74 bool m_marker;
75 void calcIfJoinedCell() {
76 m_isJoinedCell = ( (m_rows > 1) || (m_cols > 1) );
77 }
78
79 public:
81 Cell( KWTableFrameSet *table, unsigned int row, unsigned int col, const TQString & name = TQString() );
82 Cell( KWTableFrameSet *table, const Cell &original );
83 // destructor
84 virtual ~Cell();
85
86 uint firstRow() const { return m_row; }
87 uint firstColumn() const { return m_col; }
88 uint rowSpan() const { return m_rows; }
89 uint columnSpan() const { return m_cols; }
90
91 uint lastRow() const { return m_row + m_rows - 1; }
92 uint lastColumn() const { return m_col + m_cols - 1; }
93 uint rowAfter() const { return m_row + m_rows; }
94 uint columnAfter() const { return m_col + m_cols; }
95
96 void setFirstRow(uint row) { m_row = row; }
97 void setFirstColumn(uint col) { m_col = col; }
98 void setRowSpan(uint rows) {
99 m_rows = rows;
100 calcIfJoinedCell();
101 }
102 void setColumnSpan(uint cols) {
103 m_cols = cols;
104 calcIfJoinedCell();
105 }
106
107 bool isFirstGridPosn(uint row, uint col) const {
108 return (row == m_row) && (col == m_col);
109 }
110
111 bool isFirstGridPosnFast(uint row, uint col) const {
112 if(!m_isJoinedCell) return true;
113 return (row == m_row) && (col == m_col);
114 }
115 virtual void addFrame(KWFrame *_frame, bool recalc = true);
117 virtual void frameDeleted( KWFrame* frm, bool recalc );
118
119 bool isAboveOrLeftOf( unsigned row, unsigned column ) const;
120 bool containsCell( unsigned row, unsigned column ) const;
121
122 double leftBorder();
123 double rightBorder();
124 double topBorder();
125 double bottomBorder();
126
127 void setLeftBorder(KoBorder newBorder);
128 void setRightBorder(KoBorder newBorder);
129 void setTopBorder(KoBorder newBorder);
130 void setBottomBorder(KoBorder newBorder);
134 void setZOrder();
135 bool isJoinedCell() const { return m_isJoinedCell; }
136 void clearMark() { m_marker = false; }
137 void setMark() { m_marker = true; }
138 bool marked() const { return m_marker; }
139
141 void drawContents( TQPainter *painter, const TQRect & crect,
142 const TQColorGroup & cg, bool onlyChanged, bool resetChanged,
143 KWFrameSetEdit * edit, KWViewMode * viewMode,
144 KWFrameViewManager *frameViewManager );
145
146 };
147 friend class Cell;
148
150 class Row {
151 public:
152 Cell* operator[] ( uint i ) const { return i < size() ? m_cellArray[i] : 0; }
153 uint size() const { return m_cellArray.size(); }
154 uint count() const { return m_cellArray.count(); }
155
156 void addCell( Cell *cell );
157 void removeCell( Cell* cell );
158
165 TQPtrVector< Cell > m_cellArray;
166
167 };
168
177
187 CHECKED = 3
188 };
189
242 template<int VisitStyle = VISIT_CELL>
244 public:
250
251 Cell* toFirstCell ();
252 void goToCell(Cell*);
253
254 operator Cell* () const { return m_cell; }
255 Cell * current() const;
256 Cell * operator->() { return m_cell; }
257 Cell * operator++ ();
258
259 protected:
260 KWTableFrameSet *m_table;
261 void set_limits(uint left, uint right, uint high, uint low)
262 {
263 m_limit[LEFT] = left;
264 m_limit[RIGHT] = right;
265 m_limit[HIGH] = high;
266 m_limit[LOW] = low;
267 }
268 private:
269
270 Cell *m_cell;
271 uint m_row;
272 uint m_col;
273
274 enum Direction {LEFT, RIGHT, HIGH, LOW};
275 static const uint DIRECTION_SIZE = 4;
276 uint m_limit[DIRECTION_SIZE];
277 };
278
279 typedef TableIterator<VISIT_CELL> TableIter;
281 typedef TableIterator<CHECKED> CheckedIter;
282
292 class MarkedIterator : public GridIter {
293 public:
295 Cell *operator++(); // overridden from base but not virtual
296
297 };
298
299
303 virtual FrameSetType type() const { return FT_TABLE; }
304
305 virtual KWordFrameSetIface* dcopObject();
306
307 virtual void addTextFrameSets( TQPtrList<KWTextFrameSet> & lst, bool onlyReadWrite =false );
308
310 KWTableFrameSet( KWDocument *_doc, const TQString & name );
312 virtual ~KWTableFrameSet();
313
314 virtual KWFrameSetEdit * createFrameSetEdit( KWCanvas * canvas );
315
322 virtual void createEmptyRegion( const TQRect & crect, TQRegion & emptyRegion, KWViewMode *viewMode );
323 void drawBorders( TQPainter& painter, const TQRect &crect, KWViewMode *viewMode );
324 virtual void drawContents( TQPainter * painter, const TQRect & crect,
325 const TQColorGroup & cg, bool onlyChanged, bool resetChanged,
326 KWFrameSetEdit *edit, KWViewMode *viewMode,
327 KWFrameViewManager *frameViewManager );
329 virtual void drawFrame(KWFrame *, TQPainter *, const TQRect &, const TQRect&,
330 const TQPoint&,
331 KWFrame *, const TQColorGroup &, bool, bool,
332 KWFrameSetEdit *, KWViewMode *, bool ) {}
333
334 // Frameset management
335 Cell *cell( unsigned int row, unsigned int column ) const;
336 Cell *cellByPos( double x, double y ) const;
337
338 enum CellSize {
339 TblAuto = 0,
340 TblManual
341 };
342
348 KoRect boundingRect();
349
354 void setBoundingRect( KoRect rect, CellSize widthMode, CellSize heightMode );
355
360 double topWithoutBorder();
361
366 double leftWithoutBorder();
367
372 void resizeWidth( double width );
373
375 void recalcCols(uint column, uint row);
376 void recalcRows(uint column, uint row);
377
379 void resizeColumn( unsigned int col, double x );
381 void resizeRow( unsigned int row, double y );
382
383 double columnSize( unsigned int col );
384 double rowSize( unsigned int col );
385
387 int columnEdgeAt( double x ) const;
389 int rowEdgeAt( double y ) const;
390
392 unsigned int getRows() const { return m_rows; }
394 unsigned int getColumns() const { return m_cols; }
395
398 unsigned int getNumCells()const { return m_nr_cells; }
399
400
402 void moveBy( double dx, double dy );
403
405 void insertNewRow( uint _idx, bool _recalc = true, bool _removeable = false );
407 void insertNewColumn( uint _idx, double width = KWTableFrameSet::m_sDefaultColWidth);
408
410 void deleteRow( uint _idx, RemovedRow &rr, bool _recalc = true);
411
413 void deleteColumn( uint _idx, RemovedColumn &rc);
414
416 void reInsertRow(RemovedRow &row);
418 void reInsertColumn(RemovedColumn &col);
419
422 void ungroup();
423
424 void group();
425
426 bool isActive()const { return m_active; }
427
434 KCommand *joinCells(unsigned int firstColumn,unsigned int firstRow, unsigned int endColumn,unsigned int endRow);
444 KCommand * splitCell(unsigned int intoRows, unsigned int intoColumns, unsigned int column,
445 unsigned int row, TQPtrList<KWFrameSet> listFrameSet=TQPtrList<KWFrameSet>(),
446 TQPtrList<KWFrame>listFrame=TQPtrList<KWFrame>() );
447
449 void viewFormatting( TQPainter &painter, int zoom );
452 void validate();
453
455 virtual TQDomElement save( TQDomElement &parentElem, bool saveFrames = true );
456
457 virtual void saveOasis( KoXmlWriter&, KoSavingContext&, bool saveFrames ) const;
458 void loadOasis( const TQDomElement& tag, KoOasisContext& context );
459 virtual bool canBeSavedAsInlineCharacter() const { return false; }
460
462 Cell* loadCell( TQDomElement &frameElem, bool loadFrames = true, bool useNames = true );
463
465 virtual TQDomElement toXML( TQDomElement &parentElem, bool saveFrames = true );
466 virtual void fromXML( TQDomElement &framesetElem, bool loadFrames = true, bool useNames = true );
467
469 virtual int paragraphs();
470 virtual int paragraphsSelected();
471 virtual bool statistics( TQProgressDialog *progress, ulong & charsWithSpace, ulong & charsWithoutSpace, ulong & words,
472 ulong & sentences, ulong & syllables,ulong & lines, bool selected );
473
474 virtual void finalize();
475 virtual void invalidate();
476 virtual void layout();
477
478 virtual void updateFrames( int flags = 0xff );
479
480 /* Overloaded methods, look for docu in kwframe.h */
481 virtual void moveFloatingFrame( int frameNum, const KoPoint &position );
482 virtual KoSize floatingFrameSize( int frameNum = 0 );
483 virtual KCommand * anchoredObjectCreateCommand( int frameNum );
484 virtual KCommand * anchoredObjectDeleteCommand( int frameNum );
485 virtual KWAnchor * createAnchor( KoTextDocument *txt, int frameNum );
486
487 virtual void setVisible( bool v );
488 virtual bool canRemovePage( int num );
489
493 void addCell( Cell *cell );
494
497 void removeCell( Cell* cell );
498
499 // The normal mechanism doesn't apply to tables; cells are protected individually
500 // (in terms of data; the GUI has an item for protecting all cells at once)
501 virtual void setProtectContent ( bool ) {}
502 virtual bool protectContent() const { return false; }
503
504 virtual KWTextFrameSet* nextTextObject( KWFrameSet * );
508 void setZOrder();
509
510 TQByteArray convertTableToText();
511
512#ifndef NDEBUG
513 virtual void printDebug( KWFrame * frame );
514 virtual void printDebug();
515 void printArrayDebug();
516#endif
517 static const uint m_sDefaultColWidth = 60;
518protected:
519 /* Overloaded methods, look for docu in kwframe.h */
521 virtual void deleteAnchors();
523 virtual void createAnchors( KoTextParag * parag, int index, bool placeHolderExists = false, bool repaint = true );
524
525private:
526 void addCellToArray( Cell* cell );
527 void afterLoadingCell( Cell* cell );
528 void parseInsideOfTable( const TQDomElement& parent, KoOasisContext& context,
529 const TQMemArray<double> & columnLefts, uint& row, uint& column,
530 double currentRowHeight );
531 void loadOasisCell( const TQDomElement& element, KoOasisContext& context,
532 const TQMemArray<double> & columnLefts, uint row, uint column,
533 double currentRowHeight );
534
545 void position(Cell *theCell, bool setMinFrameHeight=false);
546
556 double getPositionOfRow(unsigned int row, bool bottom=false);
557
558 void insertEmptyColumn(uint index);
563 void insertRowVector(uint index, Row *row);
569 Row* removeRowVector(uint index);
570
571private:
572 unsigned int m_rows, m_cols, m_nr_cells;
573 bool m_active;
574 TQPtrVector< Row > m_rowArray;
575
582 TQValueList<unsigned int> m_pageBoundaries;
583 unsigned int m_redrawFromCol;
584 TQValueList<double> m_rowPositions, m_colPositions;
585};
586
587
588// all three templates specialise operator++
589template<>
592
593template<>
596
597template<>
600
601template<int VisitStyle>
603 m_table(table)
604{
605 Q_ASSERT(m_table);
606 set_limits(0, m_table->getColumns() - 1, 0, m_table->getRows() - 1);
607 toFirstCell();
608}
609
610// CHECKED specialises the constructor
611template<>
613
614
615template<int VisitStyle>
618 m_cell = m_table->cell(m_limit[HIGH], m_limit[LEFT]);
619 Q_ASSERT(m_cell);
620 if ( !m_cell )
621 return 0;
622 m_row = m_cell->firstRow();
623 m_col = m_cell->firstColumn();
624 return m_cell;
625}
626
627template<int VisitStyle>
628void
630{
631 m_cell = cell;
632 Q_ASSERT( m_cell );
633 if ( m_cell )
634 {
635 m_row = m_cell->firstRow();
636 m_col = m_cell->firstColumn();
637 }
638}
639
640// CHECKED specialises to first cell
641template<>
644
645
646template<int VisitStyle>
649 return m_cell;
650}
651
656
659 uint m_index;
660 double m_rowHeight;
661
662 uint index() const { return m_index; }
663 double height() const { return m_rowHeight; }
664 KWTableFrameSet::Row *takeRow();
665 KWTableFrameSet::Row *row() { return m_row; }
666
667 friend class KWTableFrameSet;
668public:
669 RemovedRow();
670 ~RemovedRow();
671};
672
673class RemovedColumn {
674
675 TQPtrList<KWTableFrameSet::Cell> m_column;
676 TQValueList<bool> m_removed;
677 uint m_index;
678 double m_width;
679 bool m_initialized;
680
681 friend class KWTableFrameSet;
682public:
683 RemovedColumn();
684};
685
693{
694public:
696 : KWFrameSetEdit( fs, canvas ), m_currentCell( 0L ) {}
697 virtual ~KWTableFrameSetEdit();
698
699 KWTableFrameSet * tableFrameSet() const {
700 return static_cast<KWTableFrameSet *>( m_fs );
701 }
702
703 virtual KWFrameSetEdit* currentTextEdit();
704
705 KWFrameSetEdit* currentCell() const { return m_currentCell; }
706
707 // Forward all events to the current cell
708 virtual void keyPressEvent( TQKeyEvent * e );
709 virtual void keyReleaseEvent( TQKeyEvent * e );
710 virtual void imStartEvent( TQIMEvent* e );
711 virtual void imComposeEvent( TQIMEvent* e );
712 virtual void imEndEvent( TQIMEvent* e );
713 virtual void mousePressEvent( TQMouseEvent * e, const TQPoint &, const KoPoint & );
714 virtual void mouseMoveEvent( TQMouseEvent * e, const TQPoint & n, const KoPoint & d )
715 { if ( m_currentCell ) m_currentCell->mouseMoveEvent( e, n, d ); }
716 virtual void mouseReleaseEvent( TQMouseEvent * e, const TQPoint & n, const KoPoint & d )
717 { if ( m_currentCell ) m_currentCell->mouseReleaseEvent( e, n, d ); }
718 virtual void mouseDoubleClickEvent( TQMouseEvent * e, const TQPoint & n, const KoPoint & d )
719 { if ( m_currentCell ) m_currentCell->mouseDoubleClickEvent( e, n, d ); } // TODO check current cell
720
721 virtual void dragEnterEvent( TQDragEnterEvent * e )
722 { if ( m_currentCell ) m_currentCell->dragEnterEvent( e ); }
723 virtual void dragMoveEvent( TQDragMoveEvent * e, const TQPoint &n, const KoPoint &d );
724 virtual void dragLeaveEvent( TQDragLeaveEvent * e )
725 { if ( m_currentCell ) m_currentCell->dragLeaveEvent( e ); }
726 virtual void dropEvent( TQDropEvent * e, const TQPoint &n, const KoPoint &d, KWView* view )
727 { if ( m_currentCell ) m_currentCell->dropEvent( e, n, d, view ); } // TODO check current cell
728
729 virtual void focusInEvent() { if ( m_currentCell ) m_currentCell->focusInEvent(); }
730 virtual void focusOutEvent() { if ( m_currentCell ) m_currentCell->focusOutEvent(); }
731 virtual void copy() { if ( m_currentCell ) m_currentCell->copy(); }
732 virtual void cut() { if ( m_currentCell ) m_currentCell->cut(); }
733 virtual void paste() { if ( m_currentCell ) m_currentCell->paste(); }
735 virtual void selectAll() { if ( m_currentCell ) m_currentCell->selectAll(); }
736
738 void setCurrentCell( KWFrameSet * fs, bool eraseSelection=true );
740 void setCurrentCell( const KoPoint & dPoint );
741
742 void showPopup( KWFrame* frame, KWView* view, const TQPoint & _point );
743
744protected:
745 KWFrameSetEdit * m_currentCell;
746
747};
748#endif
An anchor is a special character, or 'custom item'.
Definition KWAnchor.h:35
Class: KWCanvas This class is responsible for the rendering of the frames to the screen as well as th...
Definition KWCanvas.h:61
This object is created to edit a particular frameset in a particular view The view's canvas creates i...
Class: KWFrameSet Base type, a frameset holds content as well as frames to show that content.
Definition KWFrameSet.h:62
KWFrame * frame(unsigned int _num) const
get a frame by number
TQString name() const
get/set frameset name. For tables in particular, this must be unique
Definition KWFrameSet.h:428
Class that knows about all the (visible) frames in the document and will act as a manager between the...
This class represents a single frame.
Definition KWFrame.h:68
The object created to edit this table.
virtual void selectAll()
virtual void frameDeleted(KWFrame *frm, bool recalc)
Called by deleteFrame when it really deletes a frame (remove=true), to remove it from the table too.
void drawContents(TQPainter *painter, const TQRect &crect, const TQColorGroup &cg, bool onlyChanged, bool resetChanged, KWFrameSetEdit *edit, KWViewMode *viewMode, KWFrameViewManager *frameViewManager)
Overloaded to not clear any preview borders.
void setZOrder()
set zorder for all frames in this cell
This iterator does not look at the Cell instance variables during traversal, (except m_marker),...
Represents a row, for direct access to cells with m_rowArray[row][column].
TQPtrVector< Cell > m_cellArray
Array of cells in the row.
All the TableIterator templates are the same, except for the pre-increment operator (operator++).
TableIterator(KWTableFrameSet *table)
This class implements tables by acting as the manager for the frame(set)s which make up the table cel...
void resizeWidth(double width)
change the width of the table, keeping the proportions of the cells (if one is wider than the others,...
virtual void finalize()
Called once the frameset has been completely loaded or constructed.
Cell * loadCell(TQDomElement &frameElem, bool loadFrames=true, bool useNames=true)
load one cell
virtual bool canBeSavedAsInlineCharacter() const
If the frameset is inline, is it ok to save it inside an oasis <text:p>? If not, KWAnchor will create...
virtual void layout()
relayout text in frames, so that it flows correctly around other frames
void insertNewColumn(uint _idx, double width=KWTableFrameSet::m_sDefaultColWidth)
insert a column of new cells use the getRows() call to decide how many cells are created
void moveBy(double dx, double dy)
move the whole of the table, this is mainly for anchored frames.
virtual KCommand * anchoredObjectCreateCommand(int frameNum)
Store command for creating an anchored object.
virtual FrameSetType type() const
The type of frameset.
void setZOrder()
Sets zOrder for all cells in this table.
virtual KCommand * anchoredObjectDeleteCommand(int frameNum)
Store command for deleting an anchored object.
void resizeColumn(unsigned int col, double x)
move a column edge (i.e.
virtual TQDomElement save(TQDomElement &parentElem, bool saveFrames=true)
override save so we save in table style.
virtual void drawFrame(KWFrame *, TQPainter *, const TQRect &, const TQRect &, const TQPoint &, KWFrame *, const TQColorGroup &, bool, bool, KWFrameSetEdit *, KWViewMode *, bool)
Dummy since we reimplement drawContents.
virtual int paragraphs()
Contribute to the document statistics.
virtual void moveFloatingFrame(int frameNum, const KoPoint &position)
Move the frame frameNum to the given position - this is called when the frame is anchored and the anc...
void removeCell(Cell *cell)
Remove a cell from this table (either to delete it, or to move it)
void reInsertRow(RemovedRow &row)
replace a row that was removed with deleteRow()
void ungroup()
release the constrains of the table and allow all frames to be edited apart from each other.
virtual void updateFrames(int flags=0xff)
Called when our frames change, or when another frameset's frames change.
virtual void drawContents(TQPainter *painter, const TQRect &crect, const TQColorGroup &cg, bool onlyChanged, bool resetChanged, KWFrameSetEdit *edit, KWViewMode *viewMode, KWFrameViewManager *frameViewManager)
Paint this frameset.
void validate()
do a number of complex tests to test the validity of the table.
virtual TQDomElement toXML(TQDomElement &parentElem, bool saveFrames=true)
from and to XML - used when copying and pasting a table
virtual void createEmptyRegion(const TQRect &crect, TQRegion &emptyRegion, KWViewMode *viewMode)
KoRect boundingRect()
Calculate the absolute size of the complete table.
void setBoundingRect(KoRect rect, CellSize widthMode, CellSize heightMode)
Layout all cells to fit inside the rect, cells will however use a minimum size, so the table might en...
void deleteColumn(uint _idx, RemovedColumn &rc)
remove all the cells in a certain column
void insertNewRow(uint _idx, bool _recalc=true, bool _removeable=false)
insert a row of new cells, use the getCols() call to decide how many cells are created
KCommand * splitCell(unsigned int intoRows, unsigned int intoColumns, unsigned int column, unsigned int row, TQPtrList< KWFrameSet > listFrameSet=TQPtrList< KWFrameSet >(), TQPtrList< KWFrame >listFrame=TQPtrList< KWFrame >())
split one cell into a number of cells and return a command for undo purposes.
double topWithoutBorder()
Calculate the top postion of the cell(s) in the leftmost column.
virtual KoSize floatingFrameSize(int frameNum=0)
Get the size of the "floating frame" identified by frameNum.
int columnEdgeAt(double x) const
return the number of the column edge closest to x (between 0 and getCols()+1)
virtual void setVisible(bool v)
set the visibility of the frameset.
void reInsertColumn(RemovedColumn &col)
replace a column that was removed with deleteColumn()
void recalcCols(uint column, uint row)
resize and position all cells
unsigned int getColumns() const
returns the number of columns
void resizeRow(unsigned int row, double y)
move a row edge (i.e.
virtual KWAnchor * createAnchor(KoTextDocument *txt, int frameNum)
Create an anchor for the floating frame identified by frameNum.
int rowEdgeAt(double y) const
return the number of the row edge closest to x (between 0 and getRows()+1)
VisitType
The three different types of TableIterators.
@ VISIT_GRID
This iterator visits each grid position once, ie every location in the m_rowArray rows.
@ VISIT_CELL
This iterator visits each cell in the table once, whether or not some of the cells are joined.
@ CHECKED
Like VISIT_CELL it also visits each cell once, but has some other benefits.
virtual void fromXML(TQDomElement &framesetElem, bool loadFrames=true, bool useNames=true)
load from XML - when pasting from clipboard
void addCell(Cell *cell)
Add a cell to this table, the cell should already have info like row, col and should already have a f...
virtual bool canRemovePage(int num)
Return true if page num can be removed, as far as this frameset is concerned.
double leftWithoutBorder()
Calculate the top postion of the cell(s) in the top row.
virtual void saveOasis(KoXmlWriter &, KoSavingContext &, bool saveFrames) const
Save to OASIS format.
void deleteRow(uint _idx, RemovedRow &rr, bool _recalc=true)
Remove all the cells in a certain row.
void viewFormatting(TQPainter &painter, int zoom)
display formatting information
KCommand * joinCells(unsigned int firstColumn, unsigned int firstRow, unsigned int endColumn, unsigned int endRow)
merge cells to one cell.
virtual KWFrameSetEdit * createFrameSetEdit(KWCanvas *canvas)
Create a framesetedit object to edit this frameset in canvas.
virtual ~KWTableFrameSet()
destructor
unsigned int getRows() const
returns the number of rows
unsigned int getNumCells() const
returns the number of cells the table contains, this includes temporary headers.
Class: KWTextFrameSet Contains text (KoTextObject) and frames to display that text.
Abstract base class for KWCanvas's view modes.
Definition KWViewMode.h:48
RemovedRow and RemovedColumn implement the Memento design pattern.