/* This file is part of the KDE project Original TQTextCustomItem is Copyright (C) 1999-2000 Trolltech AS. All rights reserved. KoText modifications Copyright (C) 2001-2005 David Faure 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. */ // This file isn't standalone at this point; it's included by KoRichText.h /** * KoTextCustomItem is the base class for custom items (i.e. special chars) * Custom items include: * - variables ( KoVariable, kovariable.h ) * - in kword: inline images ( KWTextImage, kwtextimage.h ) (to be removed) * - in kword: anchors, i.e. floating frames ( KWAnchor, kwanchor.h ) */ class KOTEXT_EXPORT KoTextCustomItem { public: KoTextCustomItem( KoTextDocument *p ); virtual ~KoTextCustomItem(); virtual void draw(TQPainter* p, int x, int y, int cx, int cy, int cw, int ch, const TQColorGroup& cg, bool selected ) /* = 0*/; // Called after the item's paragraph has been formatted virtual void finalize() {} void move( int x, int y ) { xpos = x; ypos = y; } int x() const { return xpos; } int y() const { return ypos; } // Called when the format of the character is being changed, see KoTextStringChar::setFormat virtual void setFormat( KoTextFormat * ) { } //virtual void setPainter( TQPainter*, bool adjust ); enum Placement { PlaceInline = 0, PlaceLeft, PlaceRight }; virtual Placement placement() const { return PlaceInline; } bool placeInline() { return placement() == PlaceInline; } virtual bool ownLine() const { return FALSE; } // Called for "ownline" items virtual void resize( int nwidth ) { width = nwidth; } virtual void invalidate() {}; virtual bool isNested() const { return FALSE; } virtual int minimumWidth() const { return 0; } virtual int widthHint() const { return 0; } virtual int ascent() const { return height; } virtual TQString richText() const { return TQString(); } int width; int height; TQRect geometry() const { return TQRect( xpos, ypos, width, height ); } virtual bool enter( KoTextCursor *, KoTextDocument *&doc, KoTextParag *¶g, int &idx, int &ox, int &oy, bool atEnd = FALSE ); virtual bool enterAt( KoTextCursor *, KoTextDocument *&doc, KoTextParag *¶g, int &idx, int &ox, int &oy, const TQPoint & ); virtual bool next( KoTextCursor *, KoTextDocument *&doc, KoTextParag *¶g, int &idx, int &ox, int &oy ); virtual bool prev( KoTextCursor *, KoTextDocument *&doc, KoTextParag *¶g, int &idx, int &ox, int &oy ); virtual bool down( KoTextCursor *, KoTextDocument *&doc, KoTextParag *¶g, int &idx, int &ox, int &oy ); virtual bool up( KoTextCursor *, KoTextDocument *&doc, KoTextParag *¶g, int &idx, int &ox, int &oy ); void setParagraph( KoTextParag * p ) { parag = p; } KoTextParag *paragraph() const { return parag; } virtual void pageBreak( int /*y*/, KoTextFlow* /*flow*/ ) {} KoTextDocument *parent; /** The text document in which this customitem is */ KoTextDocument * textDocument() const { return parent; } /** When the user deletes a custom item, it isn't destroyed but * moved into the undo/redo history - setDeleted( true ) * and it can be then copied back from there into the real world - setDeleted( false ). */ virtual void setDeleted( bool b ) { m_deleted = b; } bool isDeleted() const { return m_deleted; } /** Called when the item is created or 'deleted' by the user * Most custom items don't need to reimplement those, since * the custom item is simply moved into the undo/redo history * when deleting (or undoing a creation). * It is not deleted and re-created later. */ virtual KCommand * createCommand() { return 0L; } virtual KCommand * deleteCommand() { return 0L; } /** Save to XML */ virtual void save( TQDomElement& formatElem ) = 0; /** Save to Oasis XML */ virtual void saveOasis( KoXmlWriter& writer, KoSavingContext& context ) const = 0; /** Return type of custom item. See DTD for VARIABLE.id docu. */ virtual int typeId() const = 0; /** Reimplement this to calculate the item width * It is important to start with "if ( m_deleted ) return;" */ virtual void resize() {} /** Reimplemented by KoVariable to recalculate the value. * It exists at the KoTextCustomItem level so that KoTextParag::setCustomItem * can call it to set the initial value. * This should call always resize(). */ virtual void recalc() { resize(); } /** The index in paragraph(), where this anchor is * Slightly slow (does a linear search in the paragraph) */ int index() const; /** The formatting given to this 'special' character * Slightly slow (does a linear search in the paragraph) */ KoTextFormat * format() const; /** * All coordinates are in pixels. */ virtual void drawCustomItem(TQPainter* p, int x, int y, int wpix, int hpix, int ascentpix, int cx, int cy, int cw, int ch, const TQColorGroup& cg, bool selected, int offset, bool drawingShadow) = 0; protected: bool m_deleted; protected: int xpos; int ypos; private: KoTextParag *parag; };