summaryrefslogtreecommitdiff
path: root/sd/source/ui/slidesorter/inc/view/SlsViewOverlay.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'sd/source/ui/slidesorter/inc/view/SlsViewOverlay.hxx')
-rw-r--r--sd/source/ui/slidesorter/inc/view/SlsViewOverlay.hxx273
1 files changed, 273 insertions, 0 deletions
diff --git a/sd/source/ui/slidesorter/inc/view/SlsViewOverlay.hxx b/sd/source/ui/slidesorter/inc/view/SlsViewOverlay.hxx
new file mode 100644
index 000000000000..4ff076f72560
--- /dev/null
+++ b/sd/source/ui/slidesorter/inc/view/SlsViewOverlay.hxx
@@ -0,0 +1,273 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef SD_SLIDESORTER_VIEW_OVERLAY_HXX
+#define SD_SLIDESORTER_VIEW_OVERLAY_HXX
+
+#include "model/SlsSharedPageDescriptor.hxx"
+
+#include <basegfx/polygon/b2dpolypolygon.hxx>
+#include <osl/mutex.hxx>
+#include <svx/sdr/overlay/overlayobject.hxx>
+#include <tools/gen.hxx>
+#include <vector>
+#include <boost/weak_ptr.hpp>
+#include <boost/noncopyable.hpp>
+
+class OutputDevice;
+class Region;
+
+
+namespace sd { namespace slidesorter {
+class SlideSorter;
+} }
+
+namespace sd { namespace slidesorter { namespace model {
+class PageEnumeration;
+} } }
+
+namespace sd { namespace slidesorter { namespace controller {
+class SlideSorterController;
+} } }
+
+namespace sdr { namespace overlay {
+class OverlayManager;
+} }
+
+namespace sd { namespace slidesorter { namespace view {
+
+
+class InsertionIndicatorOverlay;
+class PageObjectViewObjectContact;
+class SelectionRectangleOverlay;
+class SubstitutionOverlay;
+class ViewOverlay;
+
+/** This base class of slide sorter overlays uses the drawing layer overlay
+ support for the display.
+*/
+class OverlayBase
+ : public sdr::overlay::OverlayObject
+{
+public:
+ OverlayBase (ViewOverlay& rViewOverlay);
+ virtual ~OverlayBase (void);
+
+protected:
+ ::osl::Mutex maMutex;
+
+ ViewOverlay& mrViewOverlay;
+
+ /** Make sure that the overlay object is registered at the
+ OverlayManager. This registration is done on demand.
+ */
+ void EnsureRegistration (void);
+ void RemoveRegistration();
+};
+
+
+
+
+/** During internal drag and drop the outlines of the selected slides are
+ painted at the mouse position in dashed lines.
+*/
+class SubstitutionOverlay
+ : public OverlayBase
+{
+public:
+ SubstitutionOverlay (ViewOverlay& rViewOverlay);
+ virtual ~SubstitutionOverlay (void);
+
+ /** Setup the substitution display of the given set of selected pages.
+ The given mouse position is remembered so that it later can be
+ returned by GetPosition(). This is a convenience feature.
+ */
+ void Create (
+ model::PageEnumeration& rSelection,
+ const Point& rPosition);
+
+ /** Clear the substitution display. Until the next call of Create() no
+ substution is painted.
+ */
+ void Clear (void);
+
+ /** Move the substitution display by the given amount of pixels.
+ */
+ void Move (const Point& rOffset);
+ void SetPosition (const Point& rPosition);
+ Point GetPosition (void) const;
+
+ // react on stripe definition change
+ virtual void stripeDefinitionHasChanged();
+
+protected:
+ // geometry creation for OverlayObject
+ virtual drawinglayer::primitive2d::Primitive2DSequence createOverlayObjectPrimitive2DSequence();
+
+private:
+ Point maPosition;
+ basegfx::B2DPolyPolygon maShapes;
+};
+
+
+
+
+/** Slides can be selected by drawing a selection rectangle in the slide
+ sorter. When the left mouse button is released all slides that are at
+ least partially in the rectangle are selected.
+*/
+class SelectionRectangleOverlay
+ : public OverlayBase
+{
+public:
+ SelectionRectangleOverlay (ViewOverlay& rViewOverlay);
+ virtual ~SelectionRectangleOverlay();
+
+ void Start (const Point& rAnchor);
+ void Update (const Point& rSecondCorner);
+
+ Rectangle GetSelectionRectangle (void);
+
+ // react on stripe definition change
+ virtual void stripeDefinitionHasChanged();
+
+protected:
+ // geometry creation for OverlayObject
+ virtual drawinglayer::primitive2d::Primitive2DSequence createOverlayObjectPrimitive2DSequence();
+
+private:
+ Point maAnchor;
+ Point maSecondCorner;
+};
+
+
+
+
+/** The insertion indicator is painted as a vertical or horizonal bar
+ in the space between slides.
+*/
+class InsertionIndicatorOverlay
+ : public OverlayBase
+{
+public:
+ InsertionIndicatorOverlay (ViewOverlay& rViewOverlay);
+ virtual ~InsertionIndicatorOverlay();
+
+ /** Given a position in model coordinates this method calculates the
+ insertion marker both as an index in the document and as a rectangle
+ used for drawing the insertion indicator.
+ */
+ void SetPosition (const Point& rPosition);
+
+ sal_Int32 GetInsertionPageIndex (void) const;
+
+protected:
+ // geometry creation for OverlayObject
+ virtual drawinglayer::primitive2d::Primitive2DSequence createOverlayObjectPrimitive2DSequence();
+
+private:
+ sal_Int32 mnInsertionIndex;
+ Rectangle maBoundingBox;
+
+ void SetPositionAndSize (const Rectangle& rBoundingBox);
+};
+
+
+
+
+/** Paint a frame around the slide preview under the mouse. The actual
+ painting is done by the PageObjectViewObjectContact of the slidesorter.
+*/
+class MouseOverIndicatorOverlay
+ : public OverlayBase
+{
+public:
+ MouseOverIndicatorOverlay (ViewOverlay& rViewOverlay);
+ virtual ~MouseOverIndicatorOverlay (void);
+
+ /** Set the page object for which to paint a mouse over indicator.
+ @param pContact
+ A value of <NULL/> indicates to not paint the mouse over indicator.
+ */
+ void SetSlideUnderMouse (const model::SharedPageDescriptor& rpDescriptor);
+
+protected:
+ // geometry creation for OverlayObject
+ virtual drawinglayer::primitive2d::Primitive2DSequence createOverlayObjectPrimitive2DSequence();
+
+private:
+ /** The page under the mouse is stored as weak shared pointer so that
+ model changes can be handled without having the SlideSorterModel
+ inform this class explicitly.
+ */
+ ::boost::weak_ptr<model::PageDescriptor> mpPageUnderMouse;
+
+ view::PageObjectViewObjectContact* GetViewObjectContact (void) const;
+};
+
+
+
+
+/** The view overlay manages and paints some indicators that are painted on
+ top of the regular view content (the page objects). It is separated
+ from the view to allow the indicators to be altered in position and size
+ without repainting the whole view content (inside that the bounding box
+ of the indicator). This is achieved by using the drawing layer overlay
+ support.
+
+ The view overlay itself simply gives access to the more specialized
+ classes that handle individual indicators.
+
+*/
+class ViewOverlay
+{
+public:
+ ViewOverlay (SlideSorter& rSlideSorter);
+ ~ViewOverlay (void);
+
+ SelectionRectangleOverlay& GetSelectionRectangleOverlay (void);
+ MouseOverIndicatorOverlay& GetMouseOverIndicatorOverlay (void);
+ InsertionIndicatorOverlay& GetInsertionIndicatorOverlay (void);
+ SubstitutionOverlay& GetSubstitutionOverlay (void);
+
+ SlideSorter& GetSlideSorter (void) const;
+
+ sdr::overlay::OverlayManager* GetOverlayManager (void) const;
+
+private:
+ SlideSorter& mrSlideSorter;
+ SelectionRectangleOverlay maSelectionRectangleOverlay;
+ MouseOverIndicatorOverlay maMouseOverIndicatorOverlay;
+ InsertionIndicatorOverlay maInsertionIndicatorOverlay;
+ SubstitutionOverlay maSubstitutionOverlay;
+};
+
+
+
+} } } // end of namespace ::sd::slidesorter::view
+
+#endif