00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
#ifndef KOTEXTDOCUMENT_H
00022
#define KOTEXTDOCUMENT_H
00023
00024
#include "korichtext.h"
00025
00026
#if defined(Q_TEMPLATEDLL)
00027
00028
template class Q_EXPORT
QMap<int, QColor>;
00029
template class Q_EXPORT
QMap<int, bool>;
00030
template class Q_EXPORT
QMap<int, KoTextDocumentSelection>;
00031
template class Q_EXPORT
QPtrList<KoTextDocument>;
00032
00033
#endif
00034
00035
class KoZoomHandler;
00036
class KoTextFormatCollection;
00037
class KoParagVisitor;
00038
class KoTextFormatter;
00039
class KoTextParag;
00040
class CustomItemsMap;
00041
00042
class Q_EXPORT KoTextDocument :
public QObject
00043 {
00044 Q_OBJECT
00045
00046
friend class KoTextCursor;
00047
friend class KoTextParag;
00048
00049
public:
00050
enum SelectionIds {
00051 Standard = 0,
00052 Temp = 32000
00053
00054 };
00055
00056
00057
00058
00059
virtual ~KoTextDocument();
00060
00061
00062
00063
void setText(
const QString &text,
const QString &context );
00064
00065
QString text() const;
00066
QString text(
int parag ) const;
00067
00068
00069
int x() const;
00070
int y() const;
00071
int width() const;
00072
00073
00074
int height() const;
00075
void setWidth(
int w );
00076
00077
00078
00079
void setY(
int y );
00080
int leftMargin() const;
00081
void setLeftMargin(
int lm );
00082
int rightMargin() const;
00083
void setRightMargin(
int rm );
00084
00085 KoTextParag *firstParag() const;
00086 KoTextParag *lastParag() const;
00087
void setFirstParag( KoTextParag *p );
00088
void setLastParag( KoTextParag *p );
00089
00090
void invalidate();
00091
00092
00093
00094
00095
void setFormatter( KoTextFormatterBase *f );
00096 KoTextFormatterBase *formatter() const;
00097
00098
void setIndent( KoTextIndent *i );
00099 KoTextIndent *indent() const;
00100
00101
QColor selectionColor(
int id ) const;
00102
bool invertSelectionText(
int id ) const;
00103
void setSelectionColor(
int id, const
QColor &c );
00104
void setInvertSelectionText(
int id,
bool b );
00105
bool hasSelection(
int id,
bool visible = false ) const;
00106
bool isSelectionSwapped(
int id );
00107
void setSelectionStart(
int id, KoTextCursor *cursor );
00108
bool setSelectionEnd(
int id, KoTextCursor *cursor );
00109
void selectAll(
int id );
00110
bool removeSelection(
int id );
00111
void selectionStart(
int id,
int ¶gId,
int &index );
00112 KoTextCursor selectionStartCursor(
int id );
00113 KoTextCursor selectionEndCursor(
int id );
00114
void selectionEnd(
int id,
int ¶gId,
int &index );
00115
void setFormat(
int id, const
KoTextFormat *f,
int flags );
00116 KoTextParag *selectionStart(
int id );
00117 KoTextParag *selectionEnd(
int id );
00118
int numSelections()
const {
return nSelections; }
00119
void addSelection(
int id );
00120
00121
QString selectedText(
int id,
bool withCustom = TRUE )
const;
00122
00123
void removeSelectedText(
int id, KoTextCursor *cursor );
00124
void indentSelection(
int id );
00125
00126 KoTextParag *paragAt(
int i )
const;
00127
00128
void addCommand( KoTextDocCommand *cmd );
00129 KoTextCursor *undo( KoTextCursor *c = 0 );
00130 KoTextCursor *redo( KoTextCursor *c = 0 );
00131 KoTextDocCommandHistory *commands()
const {
return commandHistory; }
00132
00133 KoTextFormatCollection *formatCollection() const;
00134
00135
bool find( const
QString &expr,
bool cs,
bool wo,
bool forward,
int *parag,
int *index, KoTextCursor *cursor );
00136
00137
00138
00139
00140
bool inSelection(
int selId, const
QPoint &pos ) const;
00141
00142
void setUnderlineLinks(
bool b ) { underlLinks = b; }
00143
bool underlineLinks()
const {
return underlLinks; }
00144
00145
void setPaper(
QBrush *brush ) {
if ( backBrush )
delete backBrush; backBrush = brush; }
00146
QBrush *paper()
const {
return backBrush; }
00147
00148
00149
#if 0 // see KoTextDocument
00150
void draw(
QPainter *p,
const QRect& rect,
const QColorGroup &cg,
const QBrush *paper = 0 );
00151
void drawParag(
QPainter *p, KoTextParag *parag,
int cx,
int cy,
int cw,
int ch,
00152
QPixmap *&doubleBuffer,
const QColorGroup &cg,
00153
bool drawCursor, KoTextCursor *cursor,
bool resetChanged = TRUE );
00154 KoTextParag *draw(
QPainter *p,
int cx,
int cy,
int cw,
int ch,
const QColorGroup &cg,
00155
bool onlyChanged = FALSE,
bool drawCursor = FALSE, KoTextCursor *cursor = 0,
00156
bool resetChanged = TRUE );
00157
#endif
00158
00159
00160
00161
void registerCustomItem( KoTextCustomItem *i, KoTextParag *p );
00162
void unregisterCustomItem( KoTextCustomItem *i, KoTextParag *p );
00163
const QPtrList<KoTextCustomItem> & allCustomItems()
const {
return customItems; }
00164
00165
void setFlow( KoTextFlow *f );
00166
void takeFlow();
00167 KoTextFlow *flow()
const {
return flow_; }
00168
bool isPageBreakEnabled()
const {
return m_pageBreakEnabled; }
00169
void setPageBreakEnabled(
bool b ) { m_pageBreakEnabled = b; }
00170
00171
void setWithoutDoubleBuffer(
bool b ) { withoutDoubleBuffer = b; }
00172
bool isWithoutDoubleBuffer()
const {
return withoutDoubleBuffer; }
00173
00174
void setUseFormatCollection(
bool b ) { useFC = b; }
00175
bool useFormatCollection()
const {
return useFC; }
00176
00177
#ifdef QTEXTTABLE_AVAILABLE
00178
KoTextTableCell *tableCell()
const {
return tc; }
00179
void setTableCell( KoTextTableCell *c ) { tc = c; }
00180
#endif
00181
00182
void setPlainText(
const QString &text );
00183
00184
QString richText( KoTextParag *p = 0 )
const;
00185
QString plainText( KoTextParag *p = 0 )
const;
00186
00187
00188
00189
int alignment() const;
00190
void setAlignment(
int a );
00191
00192
int *tabArray() const;
00193
int tabStopWidth() const;
00194
void setTabArray(
int *a );
00195
void setTabStops(
int tw );
00196
00197
void setUndoDepth(
int d ) { commandHistory->setUndoDepth( d ); }
00198
int undoDepth()
const {
return commandHistory->undoDepth(); }
00199
00200
int length() const;
00201
void clear(
bool createEmptyParag = FALSE );
00202
00203 virtual KoTextParag *createParag( KoTextDocument *d, KoTextParag *pr = 0, KoTextParag *nx = 0,
bool updateIds = TRUE );
00204
void insertChild(
QObject *o ) { QObject::insertChild( o ); }
00205
void removeChild(
QObject *o ) { QObject::removeChild( o ); }
00206
00207
00208
00209
00210
void setAddMargins(
bool b ) { addMargs = b; }
00211
int addMargins()
const {
return addMargs; }
00212
00213
00214
00215
00216
00217
void informParagraphDeleted( KoTextParag* parag );
00218
00219 signals:
00220
00221
00223
void paragraphDeleted( KoTextParag* parag );
00224
00225
private:
00226
void init();
00227
QPixmap *bufferPixmap(
const QSize &s );
00228
00230
00231
public:
00245 KoTextDocument(
KoZoomHandler *zoomHandler,
00246 KoTextFormatCollection *fc,
KoTextFormatter *formatter = 0L,
00247
bool createInitialParag =
true );
00248
00251
KoZoomHandler * formattingZoomHandler()
const {
return m_zoomHandler; }
00252
00260
KoZoomHandler * paintingZoomHandler()
const {
return m_zoomHandler; }
00261
00262
00265
bool visitSelection(
int selectionId,
KoParagVisitor *visitor,
bool forward =
true );
00266
00269
bool visitDocument(
KoParagVisitor *visitor,
bool forward =
true );
00270
00273
bool visitFromTo( KoTextParag *firstParag,
int firstIndex, KoTextParag* lastParag,
int lastIndex,
KoParagVisitor* visitor,
bool forw =
true );
00274
00278
bool isDestroying()
const {
return m_bDestroying; }
00279
00283
enum DrawingFlags {
00284 DrawMisspelledLine = 1,
00285 DrawFormattingChars = 2,
00286 DrawSelections = 4,
00287 DontDrawNoteVariable = 8
00288 };
00291 KoTextParag *drawWYSIWYG(
QPainter *p,
int cx,
int cy,
int cw,
int ch,
const QColorGroup &cg,
00292
KoZoomHandler* zoomHandler,
bool onlyChanged = FALSE,
00293
bool drawCursor = FALSE, KoTextCursor *cursor = 0,
00294
bool resetChanged = TRUE, uint drawingFlags = KoTextDocument::DrawSelections );
00295
00298
void drawParagWYSIWYG(
QPainter *p, KoTextParag *parag,
int cx,
int cy,
int cw,
int ch,
00299
QPixmap *&doubleBuffer,
const QColorGroup &cg,
00300
KoZoomHandler* zoomHandler,
00301
bool drawCursor, KoTextCursor *cursor,
00302
bool resetChanged = TRUE,
00303 uint drawingFlags = KoTextDocument::DrawSelections );
00304
00306
bool drawFormattingChars()
const {
return (m_drawingFlags & DrawFormattingChars); }
00308
bool drawingMissingSpellLine()
const {
return (m_drawingFlags & DrawMisspelledLine); }
00309
00311
bool dontDrawingNoteVariable()
const {
return (m_drawingFlags & DontDrawNoteVariable); }
00312
00313
virtual KoTextDocCommand *deleteTextCommand( KoTextDocument *textdoc,
int id,
int index,
const QMemArray<KoTextStringChar> & str,
const CustomItemsMap & customItemsMap,
const QValueList<KoParagLayout> & oldParagLayouts );
00314
00315
void emitNewCommand(KCommand *cmd) {
00316 emit newCommand( cmd );
00317 }
00318
void emitRepaintChanged() {
00319 emit repaintChanged();
00320 }
00321 signals:
00327
void newCommand( KCommand *cmd );
00332
void repaintChanged();
00333
00334
protected:
00335
void drawWithoutDoubleBuffer(
QPainter *p,
const QRect &rect,
const QColorGroup &cg,
00336
KoZoomHandler* zoomHandler,
const QBrush *paper = 0 );
00337
00338
private:
00339
00340
00341
KoZoomHandler * m_zoomHandler;
00342
bool m_bDestroying;
00343 uint m_drawingFlags;
00344
00346
00347
private:
00348
00349
00350
00351
00352
00353
00354
int cx, cy;
00355 KoTextParag *fParag, *lParag;
00356
00357 QMap<int, QColor> selectionColors;
00358 QMap<int, KoTextDocumentSelection> selections;
00359 QMap<int, bool> selectionText;
00360 KoTextDocCommandHistory *commandHistory;
00361 KoTextFormatterBase *pFormatter;
00362 KoTextIndent *indenter;
00363 KoTextFormatCollection *fCollection;
00364
00365
00366
bool m_pageBreakEnabled : 1;
00367
bool useFC : 1;
00368
bool withoutDoubleBuffer : 1;
00369
bool underlLinks : 1;
00370
00371
bool addMargs : 1;
00372
00373
int nSelections;
00374 KoTextFlow *flow_;
00375
QPtrList<KoTextCustomItem> customItems;
00376
00377
#ifdef QTEXTTABLE_AVAILABLE
00378
KoTextTableCell *tc;
00379
#endif
00380
KoTextCursor *tmpCursor;
00381
QBrush *backBrush;
00382
QPixmap *buf_pixmap;
00383
00384
00385
int leftmargin;
00386
int rightmargin;
00387
00388
int align;
00389
int *tArray;
00390
int tStopWidth;
00391
int uDepth;
00392
00393
00394 };
00395
00396
inline int KoTextDocument::x()
const
00397
{
00398
return cx;
00399 }
00400
00401
inline int KoTextDocument::y()
const
00402
{
00403
return cy;
00404 }
00405
00406
inline int KoTextDocument::width()
const
00407
{
00408
return flow_->width();
00409
00410 }
00411
00412
00413
00414
00415
00416
00417
inline KoTextParag *KoTextDocument::firstParag()
const
00418
{
00419
return fParag;
00420 }
00421
00422
inline KoTextParag *KoTextDocument::lastParag()
const
00423
{
00424
return lParag;
00425 }
00426
00427
inline void KoTextDocument::setFirstParag( KoTextParag *p )
00428 {
00429 fParag = p;
00430 }
00431
00432
inline void KoTextDocument::setLastParag( KoTextParag *p )
00433 {
00434 lParag = p;
00435 }
00436
00437
inline void KoTextDocument::setWidth(
int w )
00438 {
00439
00440 flow_->setWidth( w );
00441
00442 }
00443
00444
00445
00446
00447
00448
00449
inline void KoTextDocument::setY(
int y )
00450 {
00451 cy = y;
00452 }
00453
00454
inline int KoTextDocument::leftMargin()
const
00455
{
00456
return leftmargin;
00457 }
00458
00459
inline void KoTextDocument::setLeftMargin(
int lm )
00460 {
00461 leftmargin = lm;
00462 }
00463
00464
inline int KoTextDocument::rightMargin()
const
00465
{
00466
return rightmargin;
00467 }
00468
00469
inline void KoTextDocument::setRightMargin(
int rm )
00470 {
00471 rightmargin = rm;
00472 }
00473
00474
00475
00476
00477
00478
00479
00480
00481
00482
00483
00484
inline void KoTextDocument::setFormatter( KoTextFormatterBase *f )
00485 {
00486
delete pFormatter;
00487 pFormatter = f;
00488 }
00489
00490
inline KoTextFormatterBase *KoTextDocument::formatter()
const
00491
{
00492
return pFormatter;
00493 }
00494
00495
inline void KoTextDocument::setIndent( KoTextIndent *i )
00496 {
00497 indenter = i;
00498 }
00499
00500
inline KoTextIndent *KoTextDocument::indent()
const
00501
{
00502
return indenter;
00503 }
00504
00505
inline QColor KoTextDocument::selectionColor(
int id )
const
00506
{
00507
return selectionColors[
id ];
00508 }
00509
00510
inline bool KoTextDocument::invertSelectionText(
int id )
const
00511
{
00512
return selectionText[
id ];
00513 }
00514
00515
inline void KoTextDocument::setSelectionColor(
int id,
const QColor &c )
00516 {
00517 selectionColors[
id ] = c;
00518 }
00519
00520
inline void KoTextDocument::setInvertSelectionText(
int id,
bool b )
00521 {
00522 selectionText[
id ] = b;
00523 }
00524
00525
inline KoTextFormatCollection *KoTextDocument::formatCollection()
const
00526
{
00527
return fCollection;
00528 }
00529
00530
inline int KoTextDocument::alignment()
const
00531
{
00532
return align;
00533 }
00534
00535
inline void KoTextDocument::setAlignment(
int a )
00536 {
00537 align = a;
00538 }
00539
00540
inline int *KoTextDocument::tabArray()
const
00541
{
00542
return tArray;
00543 }
00544
00545
inline int KoTextDocument::tabStopWidth()
const
00546
{
00547
return tStopWidth;
00548 }
00549
00550
inline void KoTextDocument::setTabArray(
int *a )
00551 {
00552 tArray = a;
00553 }
00554
00555
inline void KoTextDocument::setTabStops(
int tw )
00556 {
00557 tStopWidth = tw;
00558 }
00559
00560
00561
00562
00563
00564
00565
00566
00567
inline void KoTextDocument::setFlow( KoTextFlow *f )
00568 {
00569
if ( flow_ )
00570
delete flow_;
00571 flow_ = f;
00572 }
00573
00574
inline void KoTextDocument::takeFlow()
00575 {
00576 flow_ = 0L;
00577 }
00578
00584 class KoParagVisitor
00585 {
00586
protected:
00588 KoParagVisitor() {}
00589
virtual ~
KoParagVisitor() {}
00590
public:
00592
virtual bool visit( KoTextParag *parag,
int start,
int end ) = 0;
00593 };
00594
00595
class KCommand;
00596
class QDomElement;
00597
class KMacroCommand;
00598
00601 class CustomItemsMap :
public QMap<int, KoTextCustomItem *>
00602 {
00603
public:
00604
00606
void insertItems(
const KoTextCursor & startCursor,
int size );
00607
00609
void deleteAll( KMacroCommand *macroCmd );
00610 };
00611
00612
#endif