summaryrefslogtreecommitdiffstats
path: root/kword/KWFrameView.h
diff options
context:
space:
mode:
Diffstat (limited to 'kword/KWFrameView.h')
-rw-r--r--kword/KWFrameView.h190
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