diff options
Diffstat (limited to 'kword/KWFormulaFrameSet.h')
-rw-r--r-- | kword/KWFormulaFrameSet.h | 177 |
1 files changed, 177 insertions, 0 deletions
diff --git a/kword/KWFormulaFrameSet.h b/kword/KWFormulaFrameSet.h new file mode 100644 index 00000000..e7d64987 --- /dev/null +++ b/kword/KWFormulaFrameSet.h @@ -0,0 +1,177 @@ +/* This file is part of the KDE project + Copyright (C) 2003 Ulrich Kuettler <ulrich.kuettler@gmx.de> + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This program 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 + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; see the file COPYING. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. +*/ + +#ifndef KWFORMULAFRAME_H +#define KWFORMULAFRAME_H + +#include "KWFrameSet.h" +#include "KWFrameSetEdit.h" + +class DCOPObject; +namespace KFormula { + class FormulaCursor; + class Container; + class View; +} + +/******************************************************************/ +/* Class: KWFormulaFrameSet */ +/******************************************************************/ + +// needed for signals & slots ;( +using KFormula::Container; +using KFormula::FormulaCursor; +using KFormula::View; + +class KWFormulaFrameSetEdit; + +class KWFormulaFrameSet : public KWFrameSet +{ + Q_OBJECT +public: + KWFormulaFrameSet( KWDocument *doc, const QString & name ); + /// Used for OASIS loading + KWFormulaFrameSet( KWDocument* doc, const QDomElement& frame, + const QDomElement& objectTag, KoOasisContext& context ); + virtual ~KWFormulaFrameSet(); + + virtual KWordFrameSetIface* dcopObject(); + + /** The type of frameset. Use this to differentiate between different instantiations of + * the framesets. Each implementation will return a different frameType. + */ + virtual FrameSetType type() const { return FT_FORMULA; } + + virtual void addFrame( KWFrame *frame, bool recalc = true ); + + /** + * Delete a frame from the set of frames this frameSet has. + * @param num The frameNumber to be removed. + * @param remove passing true means that there can not be an undo of the action. + * @param recalc do an updateFrames() + */ + virtual void deleteFrame( unsigned int num, bool remove = true, bool recalc = true ); + + virtual KWFrameSetEdit* createFrameSetEdit(KWCanvas*); + + virtual MouseMeaning getMouseMeaningInsideFrame( const KoPoint& ); + + /** + * Paint this frameset + */ + virtual void drawFrameContents(KWFrame *, QPainter*, const QRect&, + const QColorGroup&, bool onlyChanged, bool resetChanged, + KWFrameSetEdit *edit, KWViewMode *viewMode); + + virtual QDomElement save( QDomElement &parentElem, bool saveFrames = true ); + virtual void load( QDomElement &attributes, bool loadFrames = true ); + virtual void saveOasis(KoXmlWriter&, KoSavingContext&, bool saveFrames ) const; + void paste( QDomNode& formulaElem ); + + KFormula::Container* getFormula() const { return formula; } + + void setChanged() { m_changed = true; } + + virtual void moveFloatingFrame( int frameNum, const KoPoint &position ); + virtual int floatingFrameBaseline( int /*frameNum*/ ); + + virtual void setAnchorFormat( KoTextFormat* format, int /*frameNum*/ ); + + + // TODO support for protecting the formula's contents + virtual void setProtectContent ( bool ) {} + virtual bool protectContent() const { return false; } + +protected slots: + + void slotFormulaChanged( double width, double height ); + void slotErrorMessage( const QString& msg ); + +private: + void init(); + + static QPixmap* doubleBufferPixmap( const QSize& s ); + static QPixmap* m_bufPixmap; + + friend class KWFormulaFrameSetEdit; + + KFormula::Container* formula; + bool m_changed; + + KWFormulaFrameSetEdit* m_edit; +}; + + +class KWFormulaFrameSetEdit : public QObject, public KWFrameSetEdit +{ + Q_OBJECT +public: + KWFormulaFrameSetEdit(KWFormulaFrameSet* fs, KWCanvas* canvas); + virtual ~KWFormulaFrameSetEdit(); + + KWFormulaFrameSet* formulaFrameSet() const + { + return static_cast<KWFormulaFrameSet*>(frameSet()); + } + + const KFormula::View* getFormulaView() const; + KFormula::View* getFormulaView(); + + virtual DCOPObject* dcopObject(); + + // Events forwarded by the canvas (when being in "edit" mode) + virtual void keyPressEvent(QKeyEvent*); + virtual void mousePressEvent(QMouseEvent*, const QPoint & n, const KoPoint & d ); + virtual void mouseMoveEvent(QMouseEvent*, const QPoint & n, const KoPoint & d); // only called if button is pressed + virtual void mouseReleaseEvent(QMouseEvent*, const QPoint & n, const KoPoint & d); + //virtual void mouseDoubleClickEvent( QMouseEvent *, const QPoint & n, const KoPoint & d ) {} + //virtual void dragEnterEvent( QDragEnterEvent * ) {} + //virtual void dragMoveEvent( QDragMoveEvent *, const QPoint &, const KoPoint & ) {} + //virtual void dragLeaveEvent( QDragLeaveEvent * ) {} + //virtual void dropEvent( QDropEvent *, const QPoint &, const KoPoint &, KWView* ) {} + virtual void focusInEvent(); + virtual void focusOutEvent(); + virtual void copy(); + virtual void cut(); + virtual void paste(); + virtual void pasteData( QMimeSource* data, int provides, bool drop ); + virtual void selectAll(); + + /** Moves the cursor to the first position */ + void moveHome(); + /** Moves the cursor to the last position */ + void moveEnd(); + + void removeFormula(); + +protected slots: + + /** + * Make sure the cursor can be seen at its new position. + */ + void cursorChanged( bool visible, bool selecting ); + + void slotLeaveFormula( Container*, FormulaCursor*, int ); + +private: + KFormula::View* formulaView; + DCOPObject *dcop; +}; + +#endif |