/* This file is part of the KDE project Copyright (C) 1998, 1999 Reginald Stadlbauer Copyright (C) 2005-2006 Thorsten Zachmann This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. */ #ifndef kptextobject_h #define kptextobject_h #include "KPrObject.h" #include "KoRichText.h" #include #include // for KoStyleChangeDefMap #include class TQDragObject; class KoSavingContext; class KPrView; class KPrDocument; class TQDomElement; class TextCmd; class KPrGradient; class KoTextView; class KoTextObject; class KPrTextView; class KCommand; class KPrCanvas; class KoPoint; class KoVariable; class KPrTextDocument; class DCOPObject; class KPrPage; class KoParagStyle; class KPrTextObject : public TQObject, public KPr2DObject, public KoTextFlow { Q_OBJECT public: KPrTextObject( KPrDocument *doc ); virtual ~KPrTextObject(); virtual DCOPObject* dcopObject(); virtual void setSize( double _width, double _height ); virtual void setDrawEditRect( bool b ) { drawEditRect = b; } virtual void setDrawEmpty( bool b ) { drawEmpty = b; } virtual ObjType getType() const { return OT_TEXT; } virtual TQString getTypeString() const { return i18n("Text"); } virtual bool getDrawEditRect() const { return drawEditRect; } virtual bool getDrawEmpty() const { return drawEmpty; } virtual int getSubPresSteps() const; virtual TQBrush getBrush() const; virtual void setShadowParameter(int _distance,ShadowDirection _direction,const TQColor &_color); virtual TQDomDocumentFragment save( TQDomDocument& doc, double offset ); virtual double load(const TQDomElement &element); virtual void loadOasis(const TQDomElement &element, KoOasisContext& context, KPrLoadingInfo *info); virtual void saveOasisMarginElement( KoGenStyle &styleobjectauto ) const; virtual void paint( TQPainter *_painter, KoTextZoomHandler*_zoomHandler, int pageNum, bool drawingShadow, bool drawContour ); void paint( TQPainter *_painter, KoTextZoomHandler*_zoomHandler, bool onlyChanged, KoTextCursor* cursor, bool resetChanged, bool drawContour ); void paintEdited( TQPainter *_painter, KoTextZoomHandler*_zoomHandler, bool onlyChanged, KoTextCursor* cursor, bool resetChanged ); void drawCursor( TQPainter *p, KoTextCursor *cursor, bool cursorVisible, KPrCanvas* /*canvas*/ ); void recalcPageNum( KPrPage *page ); /// Return the current text cursor position TQPoint cursorPos(KPrCanvas*, KoTextCursor *) const; /** Return the contained text object */ KoTextObject * textObject() const { return m_textobj; } virtual void addTextObjects( TQPtrList &lst ) const { if ( !isProtectContent() ) lst.append( m_textobj ); } KPrTextDocument *textDocument() const; KPrDocument* kPresenterDocument() const { return m_doc; } KPrTextView * createKPTextView( KPrCanvas *,bool temp=false ); void applyStyleChange( KoStyleChangeDefMap changed ); void removeHighlight(); void highlightPortion( KoTextParag * parag, int index, int length, KPrCanvas *canvas, bool repaint, KDialogBase* dialog = 0 ); KCommand * pasteOasis( KoTextCursor * cursor, const TQByteArray & data, bool removeSelected ); void saveParagraph( TQDomDocument& doc, KoTextParag * parag, TQDomElement &parentElem, int from /* default 0 */, int to /* default length()-2 */ ); KoParagLayout loadParagLayout( TQDomElement & parentElem, KPrDocument *doc, bool useRefStyle); static KoTextFormat loadFormat( TQDomElement &n, KoTextFormat * refFormat, const TQFont & defaultFont, const TQString & defaultLanguage, bool hyphen ); void setEditingTextObj( bool _edit ) { editingTextObj = _edit; } KCommand *textContentsToHeight(); KCommand *textObjectToContents(); void setProtectContent ( bool _protect ) { textObject()->setProtectContent(_protect);} bool isProtectContent() const { return textObject()->protectContent();} void loadVariable( TQValueList & listVariable,KoTextParag *lastParag, int offset=0 ); void layout(); /** Reimplemented from KoTextFlow */ int availableHeight() const; /** set left margin size */ void setBLeft( double b ) { bleft = b; } /** set right margin size */ void setBRight( double b ) { bright = b; } /** set top margin size */ void setBTop( double b ) { btop = b; } /** set bottom margin size */ void setBBottom( double b ) { bbottom = b; } /** get left margin size */ double bLeft()const { return bleft; } /** get right margin size */ double bRight()const { return bright; } /** get top margin size */ double bTop()const { return btop; } /** get bottom margin size */ double bBottom()const { return bbottom; } void setTextMargins( double _left, double _top, double right, double bottom); KoRect innerRect() const; double innerWidth() const; double innerHeight() const; void resizeTextDocument( bool widthChanged = true, bool heightChanged = true ); VerticalAlignmentType verticalAlignment() const { return m_textVertAlign; } void setVerticalAligment( VerticalAlignmentType _type) ; double alignmentValue() const { return alignVertical; } virtual KPrTextObject *nextTextObject() { return this;} static void saveFormat( TQDomElement & element, KoTextFormat*lastFormat ); TQPoint viewToInternal( const TQPoint & pos, KPrCanvas* canvas ) const; signals: void repaintChanged( KPrTextObject* ); protected slots: void slotFormatChanged(const KoTextFormat &); void slotAfterFormatting( int, KoTextParag*, bool* ); void slotParagraphDeleted(KoTextParag*_parag); protected: virtual const char * getOasisElementName() const; virtual bool saveOasisObjectAttributes( KPOasisSaveContext &sc ) const; virtual TQDomElement saveKTextObject( TQDomDocument& doc ); TQDomElement saveHelper(const TQString &tmpText,KoTextFormat*lastFormat ,TQDomDocument &doc); virtual void fillStyle( KoGenStyle& styleObjectAuto, KoGenStyles& mainStyles ) const; virtual void loadKTextObject( const TQDomElement &e ); void drawText( TQPainter* _painter, KoTextZoomHandler* zoomHandler, bool onlyChanged, KoTextCursor* cursor, bool resetChanged ); void drawParags( TQPainter *p, KoTextZoomHandler* zoomHandler, const TQColorGroup& cg, int from, int to ); void saveParagLayout( const KoParagLayout& layout, TQDomElement & parentElem ); void invalidate(); void recalcVerticalAlignment(); virtual KoPen defaultPen() const; protected slots: void slotNewCommand( KCommand *cmd ); void slotAvailableHeightNeeded(); void slotRepaintChanged(); private: KPrTextObject &operator=( const KPrTextObject & ); void shadowCompatibility(); static const TQString &tagTEXTOBJ, &attrLineSpacing, &attrParagSpacing, &attrMargin, &attrBulletType1, &attrBulletType2, &attrBulletType3, &attrBulletType4, &attrBulletColor1, &attrBulletColor2, &attrBulletColor3, &attrBulletColor4, &attrObjType, &tagP, &attrAlign, &attrType, &attrDepth, &tagTEXT, &attrFamily, &attrPointSize, &attrBold, &attrItalic, & attrUnderline,& attrStrikeOut, &attrColor, &attrWhitespace, &attrTextBackColor, &attrVertAlign, &attrLinkName, &attrHrefName; /** The contained text object */ KoTextObject *m_textobj; KPrDocument *m_doc; KoParagLayout m_paragLayout; VerticalAlignmentType m_textVertAlign; double bleft, bright, btop, bbottom; // margins double alignVertical; bool drawEditRect, drawEmpty; bool editingTextObj; }; class KPrTextView : public KoTextView { Q_OBJECT public: KPrTextView( KPrTextObject * txtObj, KPrCanvas *_canvas, bool temp=false ); virtual ~KPrTextView(); virtual KoTextViewIface* dcopObject(); KoTextView * textView() { return this; } KPrTextObject * kpTextObject() const { return m_kptextobj; } void keyPressEvent( TQKeyEvent * ); void keyReleaseEvent( TQKeyEvent * ); void imStartEvent( TQIMEvent * ); void imComposeEvent( TQIMEvent * ); void imEndEvent( TQIMEvent * ); void mousePressEvent( TQMouseEvent *, const TQPoint &); void mouseMoveEvent( TQMouseEvent *, const TQPoint & ); void mouseReleaseEvent( TQMouseEvent *, const TQPoint & ); void mouseDoubleClickEvent( TQMouseEvent *, const TQPoint &); void dragEnterEvent( TQDragEnterEvent * ); void dragMoveEvent( TQDragMoveEvent *, const TQPoint & ); void dropEvent( TQDropEvent * ); void clearSelection(); void selectAll(bool select = true); virtual void drawCursor( bool b ); const KoParagLayout & currentParagLayout() const { return m_paragLayout; } void showPopup( KPrView *view, const TQPoint &point, TQPtrList &actionList ); void insertVariable( int type, int subtype = 0 ); void insertCustomVariable( const TQString &name); void insertLink(const TQString &_linkName, const TQString & hrefName); void insertVariable( KoVariable *var, KoTextFormat *format =0, bool refreshCustomMenu =false /*don't refresh variable custom menu all the time */); void terminate(bool removeSelection=true); void insertComment(const TQString &_note); /** return true if some text is selected */ bool hasSelection() const; virtual void removeToolTipCompletion(); bool isLinkVariable(const TQPoint &); void openLink(); TQPoint viewToInternal( const TQPoint & pos ) const; public slots: void cut(); void copy(); void paste(); // Reimplemented from KoTextView virtual void updateUI( bool updateFormat, bool force = false ); virtual void ensureCursorVisible(); protected slots: virtual void startDrag(); protected: bool canDecode( TQMimeSource *e ); TQDragObject * newDrag( TQWidget * parent ); // Reimplemented from KoTextView virtual void doAutoFormat( KoTextCursor* cursor, KoTextParag *parag, int index, TQChar ch ); virtual bool doIgnoreDoubleSpace(KoTextParag * parag, int index,TQChar ch ); virtual bool doCompletion( KoTextCursor* cursor, KoTextParag *parag, int index ); virtual bool doToolTipCompletion( KoTextCursor* , KoTextParag *, int, int ); virtual void showToolTipBox(KoTextParag *parag, int index, TQWidget *widget, const TQPoint &pos); virtual void textIncreaseIndent(); virtual bool textDecreaseIndent(); virtual void showFormat( KoTextFormat *format ) ; virtual bool pgUpKeyPressed(); virtual bool pgDownKeyPressed(); KPrTextObject *m_kptextobj; KPrCanvas *m_canvas; KoParagLayout m_paragLayout; TQPtrList m_actionList; // for the kodatatools }; #endif