1
/* This file is part of the KDE project
2
Copyright (C) 2000 Reginald Stadlbauer <reggie@kde.org>
4
This library is free software; you can redistribute it and/or
5
modify it under the terms of the GNU Library General Public
6
License as published by the Free Software Foundation; either
7
version 2 of the License, or (at your option) any later version.
9
This library is distributed in the hope that it will be useful,
10
but WITHOUT ANY WARRANTY; without even the implied warranty of
11
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
Library General Public License for more details.
14
You should have received a copy of the GNU Library General Public License
15
along with this library; see the file COPYING.LIB. If not, write to
16
the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17
Boston, MA 02111-1307, USA.
27
#include <qfontmetrics.h>
30
#include <qstringlist.h>
34
#include <qvaluelist.h>
35
#include <qvaluestack.h>
37
#include <qtextstream.h>
52
class KTextEditDocument;
53
class KTextEditCommand;
55
class KTextEditString;
56
class KTextEditCommandHistory;
57
class KTextEditFormat;
58
class KTextEditCursor;
60
class KTextEditFormatter;
61
class KTextEditFormat;
62
class KTextEditFormatCollection;
64
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
65
//#define DEBUG_COLLECTION 1
70
KTextEditCursor( KTextEditDocument *d );
72
KTextEditParag *parag() const;
74
void setParag( KTextEditParag *s );
84
void gotoPageUp( KTextEdit *view );
85
void gotoPageDown( KTextEdit *view );
89
void insert( const QString &s, bool checkNewLine );
90
void splitAndInsertEmtyParag( bool ind = TRUE, bool updateIds = TRUE );
97
void setIndex( int i );
102
KTextEditParag *string;
103
KTextEditDocument *doc;
108
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
111
class KTextEditCommandHistory
114
KTextEditCommandHistory( int s, KPresenterDoc *doc, KPTextObject *txtobj ) :
115
document(doc), kptextobject(txtobj), current( -1 ), steps( s ) { history.setAutoDelete( TRUE ); }
117
void addCommand( KTextEditCommand *cmd );
118
KTextEditCursor *undo( KTextEditCursor *c );
119
KTextEditCursor *redo( KTextEditCursor *c );
122
QList<KTextEditCommand> history;
123
KPresenterDoc *document;
124
KPTextObject *kptextobject;
129
class KTextEditCommand
132
enum Commands { Invalid, Insert, Delete, Format };
133
KTextEditCommand( KTextEditDocument *d ) : doc( d ), cursor( d ) {}
134
virtual ~KTextEditCommand() {}
135
virtual Commands type() const { return Invalid; };
137
virtual KTextEditCursor *execute( KTextEditCursor *c ) = 0;
138
virtual KTextEditCursor *unexecute( KTextEditCursor *c ) = 0;
141
KTextEditDocument *doc;
142
KTextEditCursor cursor;
146
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
148
class KTextEditDeleteCommand : public KTextEditCommand
151
KTextEditDeleteCommand( KTextEditDocument *d, int i, int idx, const QString &str )
152
: KTextEditCommand( d ), id( i ), index( idx ), text( str ) {}
153
virtual Commands type() const { return Delete; };
155
virtual KTextEditCursor *execute( KTextEditCursor *c );
156
virtual KTextEditCursor *unexecute( KTextEditCursor *c );
164
class KTextEditInsertCommand : public KTextEditDeleteCommand
167
KTextEditInsertCommand( KTextEditDocument *d, int i, int idx, const QString &str )
168
: KTextEditDeleteCommand( d, i, idx, str ) {}
169
Commands type() const { return Insert; };
171
virtual KTextEditCursor *execute( KTextEditCursor *c ) { return KTextEditDeleteCommand::unexecute( c ); }
172
virtual KTextEditCursor *unexecute( KTextEditCursor *c ) { return KTextEditDeleteCommand::execute( c ); }
176
class KTextEditFormatCommand : public KTextEditCommand
179
KTextEditFormatCommand( KTextEditDocument *d, int selId, KTextEditFormat *f, int flags );
180
~KTextEditFormatCommand();
181
Commands type() const { return Format; }
183
virtual KTextEditCursor *execute( KTextEditCursor *c );
184
virtual KTextEditCursor *unexecute( KTextEditCursor *c );
188
KTextEditFormat *format;
193
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
194
class KTextEditDocument
200
Temp // This selection must not be drawn, it's used e.g. by undo/redo to
201
// remove multiple lines with removeSelectedText()
204
static const int numSelections;
213
KTextEditDocument( KPresenterDoc *doc, KPTextObject *txtobj );
217
void setText( const QString &text );
218
QString text( KTextEditParag *p = 0 ) const;
224
void setWidth( int w );
226
KTextEditParag *firstParag() const;
227
KTextEditParag *lastParag() const;
228
void setFirstParag( KTextEditParag *p );
229
void setLastParag( KTextEditParag *p );
233
void setFormatter( KTextEditFormatter *f );
234
KTextEditFormatter *formatter() const;
236
QColor selectionColor( int id ) const;
237
bool invertSelectionText( int id ) const;
238
bool hasSelection( int id ) const;
239
void setSelectionStart( int id, KTextEditCursor *cursor );
240
bool setSelectionEnd( int id, KTextEditCursor *cursor );
241
bool removeSelection( int id );
242
void selectionStart( int id, int ¶gId, int &index );
243
void selectionEnd( int id, int ¶gId, int &index );
244
void setFormat( int id, KTextEditFormat *f, int flags );
245
KTextEditParag *selectionStart( int id );
246
KTextEditParag *selectionEnd( int id );
248
QString selectedText( int id ) const;
249
void copySelectedText( int id );
250
void removeSelectedText( int id, KTextEditCursor *cursor );
251
void indentSelection( int id );
253
KTextEditParag *paragAt( int i ) const;
255
void addCommand( KTextEditCommand *cmd );
256
KTextEditCursor *undo( KTextEditCursor *c = 0 );
257
KTextEditCursor *redo( KTextEditCursor *c = 0 );
259
KTextEditFormatCollection *formatCollection() const;
261
int listIndent( int depth ) const;
262
Bullet bullet( int depth ) const;
263
QColor bulletColor( int depth ) const;
265
bool find( const QString &expr, bool cs, bool wo, bool forward, int *parag, int *index, KTextEditCursor *cursor );
267
void setParagSpacing( int s );
268
void setLineSpacing( int s );
269
void setMargin( int m );
270
int paragSpacing( KTextEditParag *p = 0 ) const;
271
int lineSpacing() const;
272
int margin() const { return marg; }
274
bool inSelection( int selId, const QPoint &pos ) const;
276
void draw( QPainter *p, const QColorGroup &cg );
277
void zoom( float f );
280
void enableDrawAllInOneColor( const QColor &c ) { allColor = c; allInOne = TRUE; }
281
void disableDrawAllInOneColor() { allInOne = FALSE; }
283
bool drawAllInOneColor() const { return allInOne; }
284
QColor allInOneColor() const { return allColor; }
286
void setAlignmentToAll( int a );
287
void setFontToAll( const QFont &f );
288
void setColorToAll( const QColor &c );
289
void setBoldToAll( bool b );
290
void setItalicToAll( bool b );
291
void setUnderlineToAll( bool b );
292
void setPointSizeToAll( int s );
293
void setFamilyToAll( const QString &f );
298
bulletType[0] = KTextEditDocument::FilledCircle;
299
bulletType[1] = KTextEditDocument::FilledSquare;
300
bulletType[2] = KTextEditDocument::OutlinedCircle;
301
bulletType[3] = KTextEditDocument::OutlinedSquare;
302
bulletColor[0] = bulletColor[1] = bulletColor[2] = bulletColor[3] = Qt::black;
303
lineSpacing = paragSpacing = margin = 0;
306
KTextEditDocument::Bullet bulletType[4];
307
QColor bulletColor[4];
308
int lineSpacing, paragSpacing, margin;
311
TextSettings textSettings() const { return txtSettings; }
312
void setTextSettings( TextSettings s );
316
KTextEditParag *startParag, *endParag;
321
KTextEditParag *fParag, *lParag;
322
QMap<int, QColor> selectionColors;
323
QMap<int, Selection> selections;
324
QMap<int, bool> selectionText;
325
KTextEditCommandHistory *commandHistory;
326
KTextEditFormatter *pFormatter;
332
int oldLineSpacing, oldParagSpacing;
333
TextSettings txtSettings;
335
KPresenterDoc *kpr_doc;
339
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
341
class KTextEditString
346
Char() : format( 0 ), lineStart( 0 ) {}
347
~Char() { format = 0; }
350
KTextEditFormat *format;
353
Char &operator=( const Char & ) {
361
QString toString() const;
363
Char &at( int i ) const;
366
void insert( int index, const QString &s, KTextEditFormat *f );
367
void truncate( int index );
368
void remove( int index, int len );
370
void setFormat( int index, KTextEditFormat *f, bool useCollection );
378
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
384
LineStart() : y( 0 ), baseLine( 0 ), h( 0 ) {}
385
LineStart( ushort y_, ushort bl, ushort h_ ) : y( y_ ), baseLine( bl ), h( h_ ) {}
386
ushort y, baseLine, h;
395
KTextEditParag( KTextEditDocument *d, KTextEditParag *pr, KTextEditParag *nx, bool updateIds = TRUE );
396
virtual ~KTextEditParag() {}
399
void setType( Type t );
401
KTextEditString *string() const;
402
KTextEditString::Char *at( int i ) const; // maybe remove later
403
int length() const; // maybe remove later
405
KTextEditDocument *document() const;
409
KTextEditParag *prev() const;
410
KTextEditParag *next() const;
411
void setPrev( KTextEditParag *s );
412
void setNext( KTextEditParag *s );
414
void insert( int index, const QString &s );
415
void append( const QString &s );
416
void truncate( int index );
417
void remove( int index, int len );
418
void join( KTextEditParag *s );
420
void invalidate( int chr );
423
void format( int start = -1, bool doMove = TRUE );
425
bool isValid() const;
426
bool hasChanged() const;
427
void setChanged( bool b );
429
int lineHeightOfChar( int i, int *bl = 0, int *y = 0 ) const;
430
KTextEditString::Char *lineStartOfChar( int i, int *index = 0, int *line = 0 ) const;
432
KTextEditString::Char *lineStartOfLine( int line, int *index = 0 ) const;
433
int lineY( int l ) const;
434
int lineBaseLine( int l ) const;
435
int lineHeight( int l ) const;
436
void lineInfo( int l, int &y, int &h, int &bl ) const;
438
void setSelection( int id, int start, int end );
439
void removeSelection( int id );
440
int selectionStart( int id ) const;
441
int selectionEnd( int id ) const;
442
bool hasSelection( int id ) const;
443
bool hasAnySelection() const;
444
bool fullSelected( int id ) const;
446
void setParagId( int i );
449
void indent( int *oldIndent = 0, int *newIndent = 0 );
451
QMap<int, LineStart*> &lineStartList();
453
void setFormat( int index, int len, KTextEditFormat *f, bool useCollection, int flags = -1 );
455
int leftIndent() const;
456
int listDepth() const;
457
void setListDepth( int d );
459
void setAlignment( int a );
460
int alignment() const;
462
virtual void paint( QPainter &painter, const QColorGroup &cg,
463
KTextEditCursor *cusror = 0, bool drawSelections = FALSE );
466
void drawParagBuffer( QPainter &painter, const QString &buffer, int startX,
467
int lastY, int baseLine, int bw, int h, bool drawSelections,
468
KTextEditFormat *lastFormat, int i, int *selectionStarts,
469
int *selectionEnds, const QColorGroup &cg );
476
QMap<int, LineStart*> lineStarts;
479
KTextEditParag *p, *n;
480
KTextEditDocument *doc;
483
QMap<int, Selection> selections;
485
KTextEditString *str;
493
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
495
class KTextEditFormatter
498
KTextEditFormatter( KTextEditDocument *d );
499
virtual ~KTextEditFormatter() {}
500
virtual int format( KTextEditParag *parag, int start ) = 0;
503
KTextEditDocument *doc;
507
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
509
class KTextEditFormatterBreakWords : public KTextEditFormatter
512
KTextEditFormatterBreakWords( KTextEditDocument *d );
513
int format( KTextEditParag *parag, int start );
517
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
519
class KTextEditFormat
521
friend class KTextEditFormatCollection;
531
Font = Bold | Italic | Underline | Family | Size,
532
Format = Font | Color
535
KTextEditFormat( const QFont &f, const QColor &c );
536
KTextEditFormat( const KTextEditFormat &fm );
537
QColor color() const;
539
int minLeftBearing() const;
540
int minRightBearing() const;
541
int width( const QChar &c ) const;
546
void setBold( bool b );
547
void setItalic( bool b );
548
void setUnderline( bool b );
549
void setFamily( const QString &f );
550
void setPointSize( int s );
551
void setFont( const QFont &f );
552
void setColor( const QColor &c );
554
bool operator==( const KTextEditFormat &f ) const;
555
KTextEditFormatCollection *parent() const;
558
static QString getKey( const QFont &f, const QColor &c );
566
const QFontMetrics *fontMetrics() const;
573
int leftBearing, rightBearing;
576
KTextEditFormatCollection *collection;
582
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
584
class KTextEditFormatCollection
587
KTextEditFormatCollection();
588
~KTextEditFormatCollection();
591
void setDefaultFormat( KTextEditFormat *f );
592
KTextEditFormat *defaultFormat() const;
593
KTextEditFormat *format( KTextEditFormat *f );
594
KTextEditFormat *format( KTextEditFormat *of, KTextEditFormat *nf, int flags );
595
KTextEditFormat *format( const QFont &f, const QColor &c );
596
void remove( KTextEditFormat *f );
600
void zoom( float f );
604
KTextEditFormat *defFormat, *lastFormat, *cachedFormat;
605
QDict<KTextEditFormat> cKey;
607
KTextEditFormat *cres;
616
class KTextEdit : public QWidget
627
KTextEdit( KPresenterDoc *doc, KPTextObject *txtobj, QWidget *parent, const QString &fn, bool tabify = FALSE );
628
KTextEdit( KPresenterDoc *doc, KPTextObject *txtobj, QWidget *parent = 0, const char *name = 0 );
629
virtual ~KTextEdit();
633
KTextEditDocument *document() const;
635
QString text() const;
636
void setText( const QString &txt );
638
void cursorPosition( int ¶g, int &index );
639
void selection( int ¶g_from, int &index_from,
640
int ¶g_to, int &index_to );
641
virtual bool find( const QString &expr, bool cs, bool wo, bool forward = TRUE,
642
int *parag = 0, int *index = 0 );
643
void insert( const QString &text, bool checkNewLine = FALSE );
645
int paragraphs() const;
647
int linesOfParagraph( int parag ) const;
648
int lineOfChar( int parag, int chr );
650
bool isReadOnly() const;
651
bool isModified() const;
655
bool underline() const;
656
QString family() const;
657
int pointSize() const;
658
QColor color() const;
660
ParagType paragType() const;
661
int alignment() const;
662
int maxLines() const;
664
void zoom( float f );
667
KTextEditParag *currentParagraph() { return cursor->parag(); }
668
void extendContents2Height();
669
void updateCurrentFormat();
677
virtual void paste();
679
virtual void indent();
681
virtual void setItalic( bool b );
682
virtual void setBold( bool b );
683
virtual void setUnderline( bool b );
684
virtual void setFamily( const QString &f );
685
virtual void setPointSize( int s );
686
virtual void setColor( const QColor &c );
687
virtual void setFont( const QFont &f );
689
virtual void setParagType( ParagType t );
690
virtual void setAlignment( int );
691
virtual void setListDepth( int diff );
693
virtual void setCursorPosition( int parag, int index );
694
virtual void setSelection( int parag_from, int index_from,
695
int parag_to, int index_to );
697
virtual void setReadOnly( bool ro );
698
virtual void setModified( bool m );
699
virtual void selectAll( bool select );
701
virtual void setMaxLines( int l );
702
virtual void resetFormat();
704
QSize neededSize() const { return QSize( doc->width(), doc->lastParag()->rect().bottom() + 1 ); }
707
void currentFontChanged( const QFont &f );
708
void currentColorChanged( const QColor &c );
709
void currentAlignmentChanged( int );
710
void currentParagTypeChanged( KTextEdit::ParagType );
715
void setFormat( KTextEditFormat *f, int flags );
716
void drawContents( QPainter *p, int cx, int cy, int cw, int ch );
717
void keyPressEvent( QKeyEvent *e );
718
void resizeEvent( QResizeEvent *e );
719
void paintEvent( QPaintEvent *e );
720
void mousePressEvent( QMouseEvent *e );
721
void mouseMoveEvent( QMouseEvent *e );
722
void mouseReleaseEvent( QMouseEvent *e );
723
void mouseDoubleClickEvent( QMouseEvent *e );
724
void dragEnterEvent( QDragEnterEvent *e );
725
void dragMoveEvent( QDragMoveEvent *e );
726
void dragLeaveEvent( QDragLeaveEvent *e );
727
void dropEvent( QDropEvent *e );
728
bool event( QEvent * e );
729
bool eventFilter( QObject *o, QEvent *e );
730
bool focusNextPrevChild( bool next );
735
void doChangeInterval();
751
enum KeyboardAction {
757
struct UndoRedoInfo {
758
enum Type { Invalid, Insert, Delete, Backspace, Return, RemoveSelected };
759
UndoRedoInfo( KTextEditDocument *d ) : type( Invalid ), doc( d )
760
{ text = QString::null; id = -1; index = -1; }
762
inline bool valid() const { return !text.isEmpty() && id >= 0&& index >= 0; }
768
KTextEditDocument *doc;
772
QPixmap *bufferPixmap( const QSize &s );
774
void drawCursor( bool visible );
775
void placeCursor( const QPoint &pos, KTextEditCursor *c = 0 );
776
void moveCursor( int direction, bool shift, bool control );
777
void moveCursor( int direction, bool control );
778
void removeSelectedText();
779
void doKeyboardAction( int action );
780
void checkUndoRedoInfo( UndoRedoInfo::Type t );
781
void repaintChanged();
782
QColor getColorTextBack();
785
KTextEditDocument *doc;
786
KTextEditCursor *cursor;
789
QTimer *formatTimer, *changeIntervalTimer, *blinkTimer, *dragStartTimer;
790
KTextEditParag *lastFormatted;
792
UndoRedoInfo undoRedoInfo;
793
KTextEditFormat *currentFormat;
795
QPixmap *doubleBuffer;
796
int currentAlignment;
797
ParagType currentParagType;
799
QPoint oldMousePos, mousePos;
801
bool cursorVisible, blinkCursorVisible;
802
bool readOnly, modified, mightStartDrag;
805
KPresenterDoc *kp_doc;
810
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
812
inline KTextEditParag *KTextEditCursor::parag() const
817
inline int KTextEditCursor::index() const
822
inline void KTextEditCursor::setIndex( int i )
828
inline void KTextEditCursor::setParag( KTextEditParag *s )
835
inline void KTextEditCursor::checkIndex()
837
if ( idx >= string->length() )
838
idx = string->length() - 1;
841
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
843
inline int KTextEditDocument::x() const
848
inline int KTextEditDocument::y() const
853
inline int KTextEditDocument::width() const
855
return cw - 2 * marg;
858
inline int KTextEditDocument::height() const
862
return lParag->rect().bottom() + 1;
865
inline KTextEditParag *KTextEditDocument::firstParag() const
870
inline KTextEditParag *KTextEditDocument::lastParag() const
875
inline void KTextEditDocument::setFirstParag( KTextEditParag *p )
880
inline void KTextEditDocument::setLastParag( KTextEditParag *p )
885
inline void KTextEditDocument::setWidth( int w )
890
inline void KTextEditDocument::setFormatter( KTextEditFormatter *f )
895
inline KTextEditFormatter *KTextEditDocument::formatter() const
900
inline QColor KTextEditDocument::selectionColor( int id ) const
902
return selectionColors[ id ];
905
inline bool KTextEditDocument::invertSelectionText( int id ) const
907
return selectionText[ id ];
910
inline bool KTextEditDocument::hasSelection( int id ) const
912
return selections.find( id ) != selections.end();
915
inline void KTextEditDocument::setSelectionStart( int id, KTextEditCursor *cursor )
918
sel.startParag = cursor->parag();
919
sel.endParag = cursor->parag();
920
sel.startParag->setSelection( id, cursor->index(), cursor->index() );
921
sel.startIndex = cursor->index();
922
selections[ id ] = sel;
925
inline KTextEditParag *KTextEditDocument::paragAt( int i ) const
927
KTextEditParag *s = fParag;
929
if ( s->paragId() == i )
936
inline int KTextEditDocument::listIndent( int depth ) const
939
return ( depth + 1 ) * listMult;
942
inline KTextEditDocument::Bullet KTextEditDocument::bullet( int depth ) const
945
return txtSettings.bulletType[ 0 ];
946
else if ( depth == 1 )
947
return txtSettings.bulletType[ 1 ];
948
else if ( depth == 2 )
949
return txtSettings.bulletType[ 2 ];
950
else if ( depth == 3 )
951
return txtSettings.bulletType[ 3 ];
953
return txtSettings.bulletType[ 0 ];
956
inline QColor KTextEditDocument::bulletColor( int depth ) const
959
return txtSettings.bulletColor[ 0 ];
960
else if ( depth == 1 )
961
return txtSettings.bulletColor[ 1 ];
962
else if ( depth == 2 )
963
return txtSettings.bulletColor[ 2 ];
964
else if ( depth == 3 )
965
return txtSettings.bulletColor[ 3 ];
967
return txtSettings.bulletColor[ 0 ];
970
inline int KTextEditDocument::paragSpacing( KTextEditParag * ) const
975
inline int KTextEditDocument::lineSpacing() const
980
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
982
inline KTextEditFormat::KTextEditFormat( const QFont &f, const QColor &c )
983
: fn( f ), col( c ), fm( new QFontMetrics( f ) ), collection( 0L )
985
leftBearing = fm->minLeftBearing();
986
rightBearing = fm->minRightBearing();
990
for ( int i = 0; i < 256; ++i )
996
inline KTextEditFormat::KTextEditFormat( const KTextEditFormat &f ) : collection( 0L )
998
//qDebug("constructing a format from another one");
1001
fm = new QFontMetrics( fn );
1002
leftBearing = f.leftBearing;
1003
rightBearing = f.rightBearing;
1004
for ( int i = 0; i < 256; ++i )
1005
widths[ i ] = f.widths[ i ];
1013
inline void KTextEditFormat::update()
1015
*fm = QFontMetrics( fn );
1016
leftBearing = fm->minLeftBearing();
1017
rightBearing = fm->minRightBearing();
1020
dsc = fm->descent();
1021
for ( int i = 0; i < 256; ++i )
1026
inline const QFontMetrics *KTextEditFormat::fontMetrics() const
1031
inline QColor KTextEditFormat::color() const
1036
inline QFont KTextEditFormat::font() const
1041
inline int KTextEditFormat::minLeftBearing() const
1046
inline int KTextEditFormat::minRightBearing() const
1048
return rightBearing;
1051
inline int KTextEditFormat::width( const QChar &c ) const
1056
if ( c.unicode() < 256 )
1057
w = widths[ c.unicode() ];
1060
if ( c.unicode() < 256 )
1061
( (KTextEditFormat*)this )->widths[ c.unicode() ] = w;
1066
inline int KTextEditFormat::height() const
1071
inline int KTextEditFormat::ascent() const
1076
inline int KTextEditFormat::descent() const
1081
inline bool KTextEditFormat::operator==( const KTextEditFormat &f ) const
1086
inline KTextEditFormatCollection *KTextEditFormat::parent() const
1091
inline void KTextEditFormat::addRef()
1094
#ifdef DEBUG_COLLECTION
1095
qDebug( "add ref of '%s' to %d (%p)", k.latin1(), ref, this );
1099
inline void KTextEditFormat::removeRef()
1104
#ifdef DEBUG_COLLECTION
1105
qDebug( "remove ref of '%s' to %d (%p)", k.latin1(), ref, this );
1108
collection->remove( this );
1111
inline QString KTextEditFormat::key() const
1116
inline void KTextEditFormat::generateKey()
1118
QTextOStream ts( &k );
1119
ts << fn.pointSize()
1121
<< (int)fn.underline()
1127
inline QString KTextEditFormat::getKey( const QFont &fn, const QColor &col )
1130
QTextOStream ts( &k );
1131
ts << fn.pointSize()
1133
<< (int)fn.underline()
1140
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1142
inline KTextEditString::Char &KTextEditString::at( int i ) const
1147
inline QString KTextEditString::toString() const
1152
inline int KTextEditString::length() const
1157
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1159
inline KTextEditString::Char *KTextEditParag::at( int i ) const
1161
return &str->at( i );
1164
inline int KTextEditParag::length() const
1166
return str->length();
1169
inline bool KTextEditParag::isValid() const
1171
return invalid == -1;
1174
inline bool KTextEditParag::hasChanged() const
1179
inline void KTextEditParag::setChanged( bool b )
1184
inline void KTextEditParag::append( const QString &s )
1186
insert( str->length(), s );
1189
inline QRect KTextEditParag::rect() const
1194
inline KTextEditParag *KTextEditParag::prev() const
1199
inline KTextEditParag *KTextEditParag::next() const
1204
inline void KTextEditParag::setSelection( int id, int start, int end )
1206
QMap<int, Selection>::ConstIterator it = selections.find( id );
1207
if ( it != selections.end() ) {
1208
if ( start == ( *it ).start && end == ( *it ).end )
1215
selections[ id ] = sel;
1219
inline void KTextEditParag::removeSelection( int id )
1221
selections.remove( id );
1225
inline int KTextEditParag::selectionStart( int id ) const
1227
QMap<int, Selection>::ConstIterator it = selections.find( id );
1228
if ( it == selections.end() )
1230
return ( *it ).start;
1233
inline int KTextEditParag::selectionEnd( int id ) const
1235
QMap<int, Selection>::ConstIterator it = selections.find( id );
1236
if ( it == selections.end() )
1241
inline bool KTextEditParag::hasSelection( int id ) const
1243
QMap<int, Selection>::ConstIterator it = selections.find( id );
1244
if ( it == selections.end() )
1246
return ( *it ).start != ( *it ).end || length() == 1;
1249
inline bool KTextEditParag::hasAnySelection() const
1251
return !selections.isEmpty();
1254
inline bool KTextEditParag::fullSelected( int id ) const
1256
QMap<int, Selection>::ConstIterator it = selections.find( id );
1257
if ( it == selections.end() )
1259
return ( *it ).start == 0 && ( *it ).end == str->length() - 1;
1262
inline void KTextEditParag::setParagId( int i )
1267
inline int KTextEditParag::paragId() const
1270
qWarning( "invalid parag id!!!!!!!! (%p)", this );
1274
inline QMap<int, KTextEditParag::LineStart*> &KTextEditParag::lineStartList()
1279
inline int KTextEditParag::lineY( int l ) const
1281
if ( l > (int)lineStarts.count() - 1 ) {
1282
qWarning( "KTextEditParag::lineY: line %d out of range!", l );
1287
( (KTextEditParag*)this )->format();
1289
QMap<int, LineStart*>::ConstIterator it = lineStarts.begin();
1296
inline int KTextEditParag::lineBaseLine( int l ) const
1298
if ( l > (int)lineStarts.count() - 1 ) {
1299
qWarning( "KTextEditParag::lineBaseLine: line %d out of range!", l );
1304
( (KTextEditParag*)this )->format();
1306
QMap<int, LineStart*>::ConstIterator it = lineStarts.begin();
1309
return ( *it )->baseLine;
1312
inline int KTextEditParag::lineHeight( int l ) const
1314
if ( l > (int)lineStarts.count() - 1 ) {
1315
qWarning( "KTextEditParag::lineHeight: line %d out of range!", l );
1320
( (KTextEditParag*)this )->format();
1322
QMap<int, LineStart*>::ConstIterator it = lineStarts.begin();
1328
inline void KTextEditParag::lineInfo( int l, int &y, int &h, int &bl ) const
1330
if ( l > (int)lineStarts.count() - 1 ) {
1331
qWarning( "KTextEditParag::lineInfo: line %d out of range!", l );
1332
qDebug( "%d %d", lineStarts.count() - 1, l );
1340
( (KTextEditParag*)this )->format();
1342
QMap<int, LineStart*>::ConstIterator it = lineStarts.begin();
1347
bl = ( *it )->baseLine;
1350
inline KTextEditString *KTextEditParag::string() const
1355
inline KTextEditDocument *KTextEditParag::document() const
1360
inline KTextEditParag::Type KTextEditParag::type() const
1365
inline void KTextEditParag::setType( Type t )
1369
if ( p && p->type() == typ )
1377
inline int KTextEditParag::leftIndent() const
1382
inline int KTextEditParag::listDepth() const
1387
inline void KTextEditParag::setAlignment( int a )
1395
inline int KTextEditParag::alignment() const
1400
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1402
inline void KTextEditFormatCollection::setDefaultFormat( KTextEditFormat *f )
1407
inline KTextEditFormat *KTextEditFormatCollection::defaultFormat() const
1412
inline KTextEditDocument *KTextEdit::document() const