lib Library API Documentation

kotextobject.h

00001 /* This file is part of the KDE project 00002 Copyright (C) 2001 David Faure <faure@kde.org> 00003 00004 This library is free software; you can redistribute it and/or 00005 modify it under the terms of the GNU Library General Public 00006 License as published by the Free Software Foundation; either 00007 version 2 of the License, or (at your option) any later version. 00008 00009 This library is distributed in the hope that it will be useful, 00010 but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00012 Library General Public License for more details. 00013 00014 You should have received a copy of the GNU Library General Public License 00015 along with this library; see the file COPYING.LIB. If not, write to 00016 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 00017 Boston, MA 02111-1307, USA. 00018 */ 00019 00020 #ifndef kotextobject_h 00021 #define kotextobject_h 00022 00023 #include <korichtext.h> 00024 #include "koChangeCaseDia.h" 00025 #include "kostyle.h" 00026 #include "kotextdocument.h" 00027 class KCommand; 00028 class KoTextFormat; 00029 //#define TIMING_FORMAT 00030 //#include <qdatetime.h> 00031 00041 class KoTextFormatInterface 00042 { 00043 public: 00044 KoTextFormatInterface() {} 00045 00047 virtual KoTextFormat * currentFormat() const = 0; 00048 00049 virtual bool rtl() const = 0; 00050 00056 virtual KCommand *setFormatCommand( const KoTextFormat *format, int flags, bool zoomFont = false ) = 0; 00057 00059 virtual const KoParagLayout * currentParagLayoutFormat() const = 0; 00060 00065 virtual KCommand *setParagLayoutFormatCommand( KoParagLayout *newLayout, int flags, int marginIndex=-1) = 0; 00066 00067 virtual KCommand *setChangeCaseOfTextCommand(KoChangeCaseDia::TypeOfCase _type)=0; 00068 00069 KoTextDocCommand *deleteTextCommand( KoTextDocument *textdoc, int id, int index, const QMemArray<KoTextStringChar> & str, const CustomItemsMap & customItemsMap, const QValueList<KoParagLayout> & oldParagLayouts ); 00070 00071 void setParagLayoutFormat( KoParagLayout *newLayout,int flags, int marginIndex=-1); 00072 void setFormat( KoTextFormat * newFormat, int flags, bool zoomFont = false ); 00073 00074 // Warning: use the methods that return a command! The others just leak the commands away 00075 //void setBold(bool on); 00076 KCommand *setBoldCommand(bool on); 00077 //void setItalic(bool on); 00078 KCommand *setItalicCommand(bool on); 00079 //void setUnderline(bool on); 00080 KCommand *setUnderlineCommand(bool on); 00081 //void setStrikeOut(bool on); 00082 KCommand *setDoubleUnderlineCommand( bool on ); 00083 KCommand *setUnderlineColorCommand( const QColor &color ); 00084 KCommand *setStrikeOutCommand(bool on); 00085 //void setTextColor(const QColor &color); 00086 KCommand *setTextColorCommand(const QColor &color); 00087 //void setPointSize( int s ); 00088 KCommand *setPointSizeCommand( int s ); 00089 //void setFamily(const QString &font); 00090 KCommand *setFamilyCommand(const QString &font); 00091 //void setTextSubScript(bool on); 00092 KCommand *setTextSubScriptCommand(bool on); 00093 //void setTextSuperScript(bool on); 00094 KCommand *setTextSuperScriptCommand(bool on); 00095 00096 //void setDefaultFormat(); 00097 KCommand *setDefaultFormatCommand(); 00098 00099 //void setTextBackgroundColor(const QColor &); 00100 KCommand *setTextBackgroundColorCommand(const QColor &); 00101 00102 //void setAlign(int align); 00103 KCommand *setAlignCommand(int align); 00104 00105 //void setMargin(QStyleSheetItem::Margin m, double margin); 00106 KCommand *setMarginCommand(QStyleSheetItem::Margin m, double margin); 00107 00108 //void setTabList(const KoTabulatorList & tabList ); 00109 KCommand *setTabListCommand(const KoTabulatorList & tabList ); 00110 00111 //void setCounter(const KoParagCounter & counter ); 00112 KCommand *setCounterCommand(const KoParagCounter & counter ); 00113 00114 KCommand *setLanguageCommand(const QString &); 00115 00116 KCommand *setShadowTextCommand( double shadowDistanceX, double shadowDistanceY, const QColor& shadowColor ); 00117 00118 KCommand *setHyphenationCommand( bool _b ); 00119 00120 00121 KCommand *setFontAttributeCommand( KoTextFormat::AttributeStyle _att); 00122 00123 KCommand *setRelativeTextSizeCommand( double _size ); 00124 00125 KCommand *setOffsetFromBaseLineCommand( int _offset ); 00126 00127 KCommand *setWordByWordCommand( bool _b ); 00128 00129 00130 QColor textColor() const; 00131 QFont textFont() const; 00132 QString textFontFamily()const; 00133 QString language() const; 00134 QColor textBackgroundColor()const; 00135 QColor textUnderlineColor()const; 00136 00137 KoTextFormat::UnderlineType underlineType()const; 00138 KoTextFormat::StrikeOutType strikeOutType()const; 00139 KoTextFormat::UnderlineStyle underlineStyle()const; 00140 KoTextFormat::StrikeOutStyle strikeOutStyle()const; 00141 00142 00143 00144 bool textUnderline()const; 00145 bool textDoubleUnderline()const; 00146 00147 bool textBold()const; 00148 bool textStrikeOut()const; 00149 bool textItalic() const; 00150 bool textSubScript() const; 00151 bool textSuperScript() const; 00152 double shadowDistanceX() const; 00153 double shadowDistanceY() const; 00154 QColor shadowColor() const; 00155 KoTextFormat::AttributeStyle fontAttribute() const; 00156 double relativeTextSize() const; 00157 int offsetFromBaseLine()const; 00158 bool wordByWord()const; 00159 bool hyphenation()const; 00160 }; 00161 00168 class KoTextObject : public QObject, public KoTextFormatInterface 00169 { 00170 Q_OBJECT 00171 public: 00178 KoTextObject( KoZoomHandler *zh, const QFont& defaultFont, const QString &defaultLanguage, bool hyphen, double ulw, KoStyle* defaultStyle,int _tabStopWidth = -1, 00179 QObject* parent = 0, const char *name = 0 ); 00180 00187 KoTextObject( KoTextDocument *textdoc, KoStyle* defaultStyle, 00188 QObject* parent = 0, const char *name = 0 ); 00189 00190 virtual ~KoTextObject(); 00191 00192 00193 void setNeedSpellCheck(bool b); 00194 bool needSpellCheck() const { return m_needsSpellCheck;} 00195 void setProtectContent(bool b) { m_protectContent = b; } 00196 bool protectContent() const{ return m_protectContent;} 00200 KoTextDocument *textDocument() const { return textdoc; } 00201 00202 void setAvailableHeight( int avail ) { m_availableHeight = avail; } 00203 int availableHeight() const; 00204 00205 void undo(); 00206 void redo(); 00208 void clearUndoRedoInfo(); 00209 00211 bool hasSelection() const { return textdoc->hasSelection( KoTextDocument::Standard, true ); } 00213 QString selectedText( int selectionId = KoTextDocument::Standard ) const { 00214 return textdoc->selectedText( selectionId ); 00215 } 00217 bool selectionHasCustomItems( int selectionId = KoTextDocument::Standard ) const; 00218 00230 void insert( KoTextCursor * cursor, KoTextFormat * currentFormat, const QString &text, 00231 bool checkNewLine, bool removeSelected, const QString & commandName, 00232 CustomItemsMap customItemsMap = CustomItemsMap(), 00233 int selectionId = KoTextDocument::Standard, 00234 bool repaint = true ); 00241 void removeSelectedText( KoTextCursor * cursor, int selectionId = KoTextDocument::Standard, 00242 const QString & cmdName = QString::null, bool createUndoRedo=true ); 00243 00244 KCommand * replaceSelectionCommand( KoTextCursor * cursor, const QString & replacement, 00245 int selectionId, const QString & cmdName, bool repaint = true ); 00246 KCommand * removeSelectedTextCommand( KoTextCursor * cursor, int selectionId, bool repaint = true ); 00247 KCommand* insertParagraphCommand( KoTextCursor * cursor ); 00248 00249 void pasteText( KoTextCursor * cursor, const QString & text, KoTextFormat * currentFormat, bool removeSelected ); 00250 void selectAll( bool select ); 00251 00255 void highlightPortion( KoTextParag * parag, int index, int length, bool repaint ); 00256 void removeHighlight( bool repaint ); 00257 00259 KCommand *setFormatCommand( const KoTextFormat *format, int flags, bool zoomFont = false ); 00260 00263 KCommand *setFormatCommand( KoTextCursor * cursor, KoTextFormat ** currentFormat, const KoTextFormat *format, int flags, bool zoomFont = false, int selectionId = KoTextDocument::Standard ); 00264 00266 enum SelectionIds { 00267 HighlightSelection = 1 // used to highlight during search/replace 00268 }; 00269 00270 enum KeyboardAction { // keep in sync with QTextEdit 00271 ActionBackspace, 00272 ActionDelete, 00273 ActionReturn, 00274 ActionKill 00275 }; 00278 void doKeyboardAction( KoTextCursor * cursor, KoTextFormat * & currentFormat, KeyboardAction action ); 00279 00280 // -- Paragraph settings -- 00281 KCommand * setCounterCommand( KoTextCursor * cursor, const KoParagCounter & counter, int selectionId = KoTextDocument::Standard ); 00282 KCommand * setAlignCommand( KoTextCursor * cursor, int align , int selectionId = KoTextDocument::Standard); 00283 KCommand * setLineSpacingCommand( KoTextCursor * cursor, double spacing, KoParagLayout::SpacingType _type,int selectionId = KoTextDocument::Standard ); 00284 KCommand * setBordersCommand( KoTextCursor * cursor, const KoBorder& leftBorder, const KoBorder& rightBorder, const KoBorder& topBorder, const KoBorder& bottomBorder, int selectionId = KoTextDocument::Standard ); 00285 KCommand * setMarginCommand( KoTextCursor * cursor, QStyleSheetItem::Margin m, double margin, int selectionId = KoTextDocument::Standard); 00286 KCommand* setTabListCommand( KoTextCursor * cursor,const KoTabulatorList & tabList , int selectionId = KoTextDocument::Standard ); 00287 00288 KCommand * setParagDirectionCommand( KoTextCursor * cursor, QChar::Direction d, int selectionId = KoTextDocument::Standard ); 00289 00300 void applyStyle( KoTextCursor * cursor, const KoStyle * style, 00301 int selectionId = KoTextDocument::Standard, 00302 int paragLayoutFlags = KoParagLayout::All, int formatFlags = KoTextFormat::Format, 00303 bool createUndoRedo = true, bool interactive = true ); 00304 00310 KCommand* applyStyleCommand( KoTextCursor * cursor, const KoStyle * style, 00311 int selectionId = KoTextDocument::Standard, 00312 int paragLayoutFlags = KoParagLayout::All, int formatFlags = KoTextFormat::Format, 00313 bool createUndoRedo = true, bool interactive = true ); 00314 00315 00321 void applyStyleChange( StyleChangeDefMap changed ); 00324 void setFormat( KoTextCursor * cursor, KoTextFormat ** currentFormat, KoTextFormat *format, int flags, bool zoomFont = false ); 00325 00326 00332 virtual KoTextFormat * currentFormat() const; 00333 00337 virtual const KoParagLayout * currentParagLayoutFormat() const; 00338 00339 virtual bool rtl() const; 00340 00344 virtual KCommand *setParagLayoutFormatCommand( KoParagLayout *newLayout, int flags, int marginIndex=-1); 00345 00346 // common for setParagLayoutFormatCommand above and KoTextView::setParagLayoutFormatCommand 00347 KCommand *setParagLayoutFormatCommand( KoTextCursor* cursor, int selectionId, KoParagLayout *newLayout, int flags, int marginIndex ); 00348 00352 virtual void setFormat( KoTextFormat * newFormat, int flags, bool zoomFont = false ); 00353 00355 int docFontSize( KoTextFormat * format ) const; 00357 int zoomedFontSize( int docFontSize ) const; 00358 00360 void setViewArea( QWidget* w, int maxY ); 00362 void ensureFormatted( KoTextParag * parag, bool emitAfterFormatting = true ); 00363 void setLastFormattedParag( KoTextParag *parag ); 00364 00365 static QChar customItemChar() { return QChar( s_customItemChar ); } 00366 00367 // Qt should really have support for public signals 00368 void emitHideCursor() { emit hideCursor(); } 00369 void emitShowCursor() { emit showCursor(); } 00370 void emitEnsureCursorVisible() { emit ensureCursorVisible(); } 00371 void emitUpdateUI( bool updateFormat, bool force = false ) { emit updateUI( updateFormat, force ); } 00372 00373 void typingStarted(); 00374 void typingDone(); 00375 00382 void abortFormatting(); 00383 00384 void selectionChangedNotify( bool enableActions = true ); 00385 00386 void emitNewCommand(KCommand *cmd); 00387 00388 virtual KCommand *setChangeCaseOfTextCommand(KoChangeCaseDia::TypeOfCase _type); 00389 00390 KCommand *changeCaseOfText(KoTextCursor *cursor, KoChangeCaseDia::TypeOfCase _type); 00391 QString textChangedCase(const QString& _text, KoChangeCaseDia::TypeOfCase _type); 00392 KCommand *changeCaseOfTextParag(int cursorPosStart, int cursorPosEnd,KoChangeCaseDia::TypeOfCase _type,KoTextCursor *cursor, KoTextParag *parag); 00393 00394 #ifndef NDEBUG 00395 void printRTDebug(int); 00396 #endif 00397 00398 enum ParagModifyType { AddChar = 0, RemoveChar = 1, ChangeFormat = 2 }; 00399 00400 signals: 00403 void availableHeightNeeded(); 00404 00408 void afterFormatting( int bottom, KoTextParag* m_lastFormatted, bool* abort ); 00409 00414 void chapterParagraphFormatted( KoTextParag* parag ); 00415 00418 void formattingFirstParag(); 00419 00424 void newCommand( KCommand *cmd ); 00425 00427 void repaintChanged( KoTextObject * ); 00428 00429 void hideCursor(); 00430 void showCursor(); 00432 void setCursor( KoTextCursor * cursor ); 00435 void updateUI( bool updateFormat, bool force = false ); 00437 void showCurrentFormat(); 00439 void ensureCursorVisible(); 00441 void selectionChanged( bool hasSelection ); 00442 00443 void showFormatObject(const KoTextFormat &); 00444 00445 // Keeping track of text modifications - not emitted during loading/closing. 00446 void paragraphCreated( KoTextParag* parag ); 00447 void paragraphModified( KoTextParag* parag, int /*ParagModifyType*/, int pos, int length ); 00448 void paragraphDeleted( KoTextParag* parag ); 00449 00450 public slots: 00451 // The default arguments are those used by the formatTimer. 00452 // The return value is used by ensureFormatted 00453 bool formatMore( int count = 10, bool emitAfterFormatting = true ); 00454 00455 void emitRepaintChanged() { emit repaintChanged( this ); } 00456 00457 public: // made public for KWTextFrameSet... 00458 00462 void storeParagUndoRedoInfo( KoTextCursor * cursor, int selectionId = KoTextDocument::Standard ); 00464 void copyCharFormatting( KoTextParag *parag, int position, int index /*in text*/, bool moveCustomItems ); 00465 void readFormats( KoTextCursor &c1, KoTextCursor &c2, bool copyParagLayouts = false, bool moveCustomItems = false ); 00466 00476 struct UndoRedoInfo { // borrowed from QTextEdit 00477 enum Type { Invalid, Insert, Delete, Return, RemoveSelected }; 00478 UndoRedoInfo( KoTextObject* textobj ); 00479 ~UndoRedoInfo() {} 00480 void clear(); 00481 bool valid() const; 00482 00483 KoTextString text; // storage for formatted text 00484 int id; // id of first parag 00485 int eid; // id of last parag 00486 int index; // index (for insertion/deletion) 00487 Type type; // type of command 00488 KoTextObject* textobj; // parent 00489 CustomItemsMap customItemsMap; // character position -> qtextcustomitem 00490 QValueList<KoParagLayout> oldParagLayouts; 00491 KoParagLayout newParagLayout; 00492 KoTextCursor *cursor; // basically a "mark" of the view that started this undo/redo info 00493 // If the view changes, the next call to checkUndoRedoInfo will terminate the previous view's edition 00494 KMacroCommand *placeHolderCmd; 00495 }; 00502 void newPlaceHolderCommand( const QString & name ); 00503 void checkUndoRedoInfo( KoTextCursor * cursor, UndoRedoInfo::Type t ); 00504 00506 UndoRedoInfo & undoRedoInfoStruct() { return undoRedoInfo; } 00507 00508 void setVisible(bool vis) { m_visible=vis; } 00509 bool isVisible() const { return m_visible; } 00510 00511 private slots: 00512 void doChangeInterval(); 00517 void slotAfterUndoRedo(); 00518 void slotParagraphModified(KoTextParag *, int, int , int); 00519 void slotParagraphCreated(KoTextParag *); 00520 void slotParagraphDeleted(KoTextParag *); 00521 private: 00522 void init(); 00523 00524 private: 00525 class KoTextObjectPrivate; 00526 KoTextObjectPrivate* d; 00528 KoTextDocument *textdoc; 00529 00532 KoStyle* m_defaultStyle; 00533 00534 bool m_visible; 00535 00537 UndoRedoInfo undoRedoInfo; 00538 00542 KoTextParag *m_lastFormatted; 00544 QTimer *formatTimer, *changeIntervalTimer; 00545 int interval; 00546 00548 int m_availableHeight; 00550 QMap<QWidget *, int> m_mapViewAreas; 00551 00552 //QPtrDict<int> m_origFontSizes; // Format -> doc font size. 00553 00554 bool m_highlightSelectionAdded; 00555 00556 #ifdef TIMING_FORMAT 00557 QTime m_time; 00558 #endif 00559 00560 static const char s_customItemChar; 00561 bool m_needsSpellCheck; 00562 bool m_protectContent; 00563 }; 00564 00565 #endif
KDE Logo
This file is part of the documentation for lib Library Version 1.3.3.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Fri Sep 24 18:22:27 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003