diff options
Diffstat (limited to 'kword/KWFrameView.h')
-rw-r--r-- | kword/KWFrameView.h | 190 |
1 files changed, 190 insertions, 0 deletions
diff --git a/kword/KWFrameView.h b/kword/KWFrameView.h new file mode 100644 index 00000000..85e6981d --- /dev/null +++ b/kword/KWFrameView.h @@ -0,0 +1,190 @@ +/* This file is part of the KOffice project + * Copyright (C) 2005 Thomas Zander <zander@kde.org> + * + * 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; version 2. + * + * 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 kwframeview_h +#define kwframeview_h + +#include "defs.h" +class KWFrameView; +class KWFrameViewManager; +class KWFrame; +class KWView; +class KWViewMode; +class KoZoomHandler; +class KoPoint; +class KActionSeparator; +class KAction; +class QPopupMenu; + +/** + * This base class is an interface for Policies used in the KWFrameView. + */ +class FramePolicy { +public: + /** Constructor */ + FramePolicy(KWFrameView *view); + /** + * Return the MouseMeaning enum value for the parent view. + * @param point the point where the mouse is hovering. + * @param keyState the bitmask of keys that are pressed. Same as Event::state(); + */ + virtual MouseMeaning mouseMeaning( const KoPoint &point, int keyState ) = 0; + /** + * Return a fully initialized popup for the context of frame at @p point + * @param point the point where the mouse is hovering. + * @param view the parent view widget + */ + virtual QPopupMenu* createPopup( const KoPoint &point, KWView *view ) = 0; + /** + * Override this method to do more than select the parent frame-view + */ + virtual void setSelected(MouseMeaning) { } + +protected: + /** + * Shared method for all policies called when the border of the frame is clicked. + * @param point the point where the mouse is hovering. + * @param keyState the bitmask of keys that are pressed. Same as Event::state(); + */ + virtual MouseMeaning mouseMeaningOnBorder(const KoPoint &point, int keyState); + /** + * Shared method for all policies to add the 'set floating' action to a popup menu. + * @param view the parent view widget + * @param actionList the list of actions where the floating action should be added to + */ + void addFloatingAction(KWView *view, QPtrList<KAction> &actionList); + + KWFrameView *m_view; + KActionSeparator *m_separator; + + friend class KWFrameView; // so it can call mouseMeaningOnBorder which assumes some stuff +}; + +/** + * an instance of a KWFrameView represents the view in the MVC model of a frame; there can be + * multiple KWFrameView objects per frame. Typically there is one per view (KWView). + * This class registers selectedness and has methods to show the frame and its interaction methods + */ +class KWFrameView { +public: + /** + * Constructor + * @param parent the parent + * @param frame the frame this view represents. + */ + KWFrameView(KWFrameViewManager *parent, KWFrame *frame); + virtual ~KWFrameView(); + + /// returns if this frameView is selected. A selected frame is shown differently on screen. + bool selected() const { return m_selected; } + /** + * Set the selected state of this frameView. + * @param selected the new selected state + * @param selectPolicy an optionaly mouseMeaning at which the mouse was clicked to + * make this selection happen. See the FramePolicy::setSelected() for more info. + */ + void setSelected(bool selected, MouseMeaning selectPolicy = MEANING_MOUSE_SELECT); + + /// returns the frame this frameView represents + KWFrame *frame() const { return m_frame; } + + /// returns if the @p point is on the border + bool isBorderHit(const KoPoint &point) const; + /// returns if the @p point is anywhere in te frame, if fuzzy is true; also a little outside + bool contains(const KoPoint &point, bool fuzzy = true) const; + + /** + * Return the MouseMeaning enum value for the parent view. + * @param point the point where the mouse is hovering. + * @param keyState the bitmask of keys that are pressed. Same as Event::state(); + */ + MouseMeaning mouseMeaning( const KoPoint &point, int keyState ); + + /// Return the parent KWFrameViewManager this frameView belongs to + KWFrameViewManager *parent() const { return m_manager; } + + /** + * Show a context-sensitive popup menu based on the location of 'point'. + * @param point the point at which the mouse was clicked. The context is based on + * what is present at that location. + * @param popupPoint the point in the same coordinate system as the parent widget of + * where the popup menu should be located. + * @param view the parent widget for the popup. + */ + void showPopup( const KoPoint &point, KWView *view, const QPoint &popupPoint) const; + + /** + * Paint view based items of the frameView, like selected state + * @param painter the painter to paint to + * @param crect the clip rect; nothing outside this rect is important + * @param zh the zoomHandler to convert from internal coordinates to view coordinates + * @param vm the current Viewmode. + */ + void paintFrameAttributes(QPainter *painter, const QRect &crect, KWViewMode *vm, KoZoomHandler *zh); + +private: + /** + * Helper method for isBorderHit() and contains() + * @param point the point + * @param borderOnly if true; exclude the range inside the frame + * @param fuzzy don't take all the coordinates too strict, allow for some margin + */ + bool hit(const KoPoint &point, bool fuzzy, bool borderOnly) const; + +private: + KWFrame *m_frame; + bool m_selected; + FramePolicy *m_policy; + KWFrameViewManager *m_manager; +}; + +/** A policy for Table Frames */ +class TableFramePolicy : public FramePolicy { +public: + TableFramePolicy(KWFrameView *view); + MouseMeaning mouseMeaning( const KoPoint &point, int keyState ); + QPopupMenu* createPopup( const KoPoint &point, KWView *view ); + void setSelected(MouseMeaning selectPolicy); + +protected: + MouseMeaning mouseMeaningOnBorder( const KoPoint &point, int keyState); +}; + +/** A policy for Part Frames */ +class PartFramePolicy : public FramePolicy { +public: + PartFramePolicy(KWFrameView *view); + MouseMeaning mouseMeaning( const KoPoint &point, int keyState ); + QPopupMenu* createPopup( const KoPoint &point, KWView *view ); +}; + +/** A policy for Text Frames */ +class TextFramePolicy : public FramePolicy { +public: + TextFramePolicy(KWFrameView *view); + MouseMeaning mouseMeaning( const KoPoint &point, int keyState ); + QPopupMenu* createPopup( const KoPoint &point, KWView *view ); +}; + +/** A policy for Image (aka Picture) Frames */ +class ImageFramePolicy : public FramePolicy { +public: + ImageFramePolicy(KWFrameView *view); + MouseMeaning mouseMeaning( const KoPoint &point, int keyState ); + QPopupMenu* createPopup( const KoPoint &point, KWView *view ); +}; +#endif |