summaryrefslogtreecommitdiffstats
path: root/kpresenter/KPrTextObject.h
diff options
context:
space:
mode:
Diffstat (limited to 'kpresenter/KPrTextObject.h')
-rw-r--r--kpresenter/KPrTextObject.h312
1 files changed, 312 insertions, 0 deletions
diff --git a/kpresenter/KPrTextObject.h b/kpresenter/KPrTextObject.h
new file mode 100644
index 00000000..b30754c7
--- /dev/null
+++ b/kpresenter/KPrTextObject.h
@@ -0,0 +1,312 @@
+// -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*-
+/* This file is part of the KDE project
+ Copyright (C) 1998, 1999 Reginald Stadlbauer <[email protected]>
+ Copyright (C) 2005-2006 Thorsten Zachmann <[email protected]>
+
+ 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 <KoTextView.h>
+#include <KoStyleCollection.h> // for KoStyleChangeDefMap
+#include <KoStyleStack.h>
+
+class QDragObject;
+
+class KoSavingContext;
+class KPrView;
+class KPrDocument;
+class QDomElement;
+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 QObject, 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 QString getTypeString() const
+ { return i18n("Text"); }
+
+ virtual bool getDrawEditRect() const
+ { return drawEditRect; }
+ virtual bool getDrawEmpty() const
+ { return drawEmpty; }
+ virtual int getSubPresSteps() const;
+
+ virtual QBrush getBrush() const;
+
+ virtual void setShadowParameter(int _distance,ShadowDirection _direction,const QColor &_color);
+
+ virtual QDomDocumentFragment save( QDomDocument& doc, double offset );
+ virtual double load(const QDomElement &element);
+ virtual void loadOasis(const QDomElement &element, KoOasisContext& context, KPrLoadingInfo *info);
+ virtual void saveOasisMarginElement( KoGenStyle &styleobjectauto ) const;
+
+ virtual void paint( QPainter *_painter, KoTextZoomHandler*_zoomHandler,
+ int pageNum, bool drawingShadow, bool drawContour );
+ void paint( QPainter *_painter, KoTextZoomHandler*_zoomHandler, bool onlyChanged, KoTextCursor* cursor,
+ bool resetChanged, bool drawContour );
+ void paintEdited( QPainter *_painter, KoTextZoomHandler*_zoomHandler,
+ bool onlyChanged, KoTextCursor* cursor, bool resetChanged );
+
+ void drawCursor( QPainter *p, KoTextCursor *cursor, bool cursorVisible, KPrCanvas* /*canvas*/ );
+
+ void recalcPageNum( KPrPage *page );
+ /// Return the current text cursor position
+ QPoint cursorPos(KPrCanvas*, KoTextCursor *) const;
+
+
+ /** Return the contained text object */
+ KoTextObject * textObject() const { return m_textobj; }
+ virtual void addTextObjects( QPtrList<KoTextObject> &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 QByteArray & data, bool removeSelected );
+
+ void saveParagraph( QDomDocument& doc,
+ KoTextParag * parag,
+ QDomElement &parentElem,
+ int from /* default 0 */,
+ int to /* default length()-2 */ );
+ KoParagLayout loadParagLayout( QDomElement & parentElem, KPrDocument *doc, bool useRefStyle);
+
+ static KoTextFormat loadFormat( QDomElement &n, KoTextFormat * refFormat, const QFont & defaultFont,
+ const QString & 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( QValueList<QDomElement> & 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( QDomElement & element, KoTextFormat*lastFormat );
+
+ QPoint viewToInternal( const QPoint & 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 QDomElement saveKTextObject( QDomDocument& doc );
+ QDomElement saveHelper(const QString &tmpText,KoTextFormat*lastFormat ,QDomDocument &doc);
+
+ virtual void fillStyle( KoGenStyle& styleObjectAuto, KoGenStyles& mainStyles ) const;
+
+ virtual void loadKTextObject( const QDomElement &e );
+ void drawText( QPainter* _painter, KoTextZoomHandler* zoomHandler, bool onlyChanged, KoTextCursor* cursor, bool resetChanged );
+ void drawParags( QPainter *p, KoTextZoomHandler* zoomHandler, const QColorGroup& cg, int from, int to );
+ void saveParagLayout( const KoParagLayout& layout, QDomElement & 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 QString &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( QKeyEvent * );
+ void keyReleaseEvent( QKeyEvent * );
+ void imStartEvent( QIMEvent * );
+ void imComposeEvent( QIMEvent * );
+ void imEndEvent( QIMEvent * );
+ void mousePressEvent( QMouseEvent *, const QPoint &);
+ void mouseMoveEvent( QMouseEvent *, const QPoint & );
+ void mouseReleaseEvent( QMouseEvent *, const QPoint & );
+ void mouseDoubleClickEvent( QMouseEvent *, const QPoint &);
+ void dragEnterEvent( QDragEnterEvent * );
+ void dragMoveEvent( QDragMoveEvent *, const QPoint & );
+ void dropEvent( QDropEvent * );
+
+ void clearSelection();
+ void selectAll(bool select = true);
+ virtual void drawCursor( bool b );
+
+ const KoParagLayout & currentParagLayout() const { return m_paragLayout; }
+ void showPopup( KPrView *view, const QPoint &point, QPtrList<KAction> &actionList );
+ void insertVariable( int type, int subtype = 0 );
+ void insertCustomVariable( const QString &name);
+ void insertLink(const QString &_linkName, const QString & 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 QString &_note);
+
+ /** return true if some text is selected */
+ bool hasSelection() const;
+
+ virtual void removeToolTipCompletion();
+ bool isLinkVariable(const QPoint &);
+ void openLink();
+ QPoint viewToInternal( const QPoint & 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( QMimeSource *e );
+ QDragObject * newDrag( QWidget * parent );
+ // Reimplemented from KoTextView
+ virtual void doAutoFormat( KoTextCursor* cursor, KoTextParag *parag, int index, QChar ch );
+ virtual bool doIgnoreDoubleSpace(KoTextParag * parag, int index,QChar ch );
+ virtual bool doCompletion( KoTextCursor* cursor, KoTextParag *parag, int index );
+ virtual bool doToolTipCompletion( KoTextCursor* , KoTextParag *, int, int );
+ virtual void showToolTipBox(KoTextParag *parag, int index, QWidget *widget, const QPoint &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;
+ QPtrList<KAction> m_actionList; // for the kodatatools
+};
+
+
+#endif