summaryrefslogtreecommitdiff
path: root/sd/source/ui/slidesorter/inc/view/SlsPageObjectLayouter.hxx
diff options
context:
space:
mode:
authorAndre Fischer <af@openoffice.org>2010-01-27 11:41:30 +0100
committerAndre Fischer <af@openoffice.org>2010-01-27 11:41:30 +0100
commit23a61a9969af9d099ce87d1169b7c2aeb5f6bb1e (patch)
treef5d555e01530492e92ef69fb0d917338c8fb1dea /sd/source/ui/slidesorter/inc/view/SlsPageObjectLayouter.hxx
parent5c2d284b0f9973aada365a8f464f1152671bd629 (diff)
renaissance1: #i107215# First draft of the new slide sorter design.
Diffstat (limited to 'sd/source/ui/slidesorter/inc/view/SlsPageObjectLayouter.hxx')
-rw-r--r--sd/source/ui/slidesorter/inc/view/SlsPageObjectLayouter.hxx178
1 files changed, 178 insertions, 0 deletions
diff --git a/sd/source/ui/slidesorter/inc/view/SlsPageObjectLayouter.hxx b/sd/source/ui/slidesorter/inc/view/SlsPageObjectLayouter.hxx
new file mode 100644
index 000000000000..fcd398377b01
--- /dev/null
+++ b/sd/source/ui/slidesorter/inc/view/SlsPageObjectLayouter.hxx
@@ -0,0 +1,178 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: SlsViewCacheContext.hxx,v $
+ *
+ * $Revision: 1.3 $
+ *
+ * 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_PAGE_OBJECT_LAYOUTER_HXX
+#define SD_SLIDESORTER_PAGE_OBJECT_LAYOUTER_HXX
+
+#include "SlideSorter.hxx"
+#include "model/SlsSharedPageDescriptor.hxx"
+#include "tools/gen.hxx"
+#include <vcl/image.hxx>
+
+namespace sd { namespace slidesorter { namespace view {
+
+
+/** In contrast to the Layouter that places page objects in the view, the
+ PageObjectLayouter places the parts of individual page objects like page
+ number area, borders, preview.
+*/
+class PageObjectLayouter
+{
+public:
+ /** Create a new PageObjectLayouter object.
+ @param rPageObjectSize
+ In general either the width or the height will be 0 in order to
+ signal that this size component has to be calculated from the other.
+ This calculation will make the preview as large as possible.
+ @param nPageCount
+ The page count is used to determine how wide the page number
+ area has to be, how many digits to except for the largest page number.
+ */
+ PageObjectLayouter (
+ const Size& rPageObjectWindowSize,
+ const Size& rPreviewModelSize,
+ const ::boost::shared_ptr< ::Window>& rpWindow,
+ const int nPageCount);
+
+ enum Part {
+ // This is the outer bounding box that includes the preview, page
+ // number, title.
+ PageObject,
+ // Bounding box of the actual preview.
+ Preview,
+ // Bounding box of the mouse indicator indicator frame.
+ MouseOverIndicator,
+ // Bounding box of the focus indicator frame.
+ FocusIndicator,
+ // Bounding box of the selection indicator frame.
+ SelectionIndicator,
+ // Bounding box of the page number.
+ PageNumber,
+ // Bounding box of the pane name.
+ Name,
+ // Indicator whether or not there is a slide transition associated
+ // with this slide.
+ TransitionEffectIndicator,
+ ButtonArea,
+ Button
+ };
+ /** Two coordinate systems are supported. They differ only in
+ translation not in scale. Both relate to pixel values in the window.
+ A position in the window coordinate system does not change when the window content is
+ scrolled up or down. In the screen coordinate system (relative
+ to the top left point of the window)scrolling leads to different values.
+ Example: Scroll up the point (0,0) in the the window coordinate
+ system by 20 pixels. It lies not inside the visible area of the
+ window anymore. Its screen coordinates are now (-20,0).
+
+ WindowCoordinateSystem corresponds to the logic coordinate system of
+ class Window, while ScreenCoordinateSystem corresponds to its pixel
+ coordinate system.
+ */
+ enum CoordinateSystem {
+ WindowCoordinateSystem,
+ ScreenCoordinateSystem};
+
+ /** Return the bounding box of the page object or one of its graphical
+ parts.
+ @param rWindow
+ This device is used to translate between model and window
+ coordinates.
+ @param rpPageDescriptor
+ The page for which to calculate the bounding box.
+ @param ePart
+ The part of the page object for which to return the bounding
+ box.
+ @param eCoodinateSystem
+ The bounding box can be returned in model and in pixel
+ (window) coordinates.
+ @param nIndex
+ Used only for some parts (Button) to distinguish between
+ different parts of the same type.
+ */
+ Rectangle GetBoundingBox (
+ const model::SharedPageDescriptor& rpPageDescriptor,
+ const Part ePart,
+ const CoordinateSystem eCoordinateSystem,
+ const sal_Int32 nIndex = 0);
+
+ /** Return the size in pixel of the whole page object.
+ */
+ Size GetPageObjectSize (void) const;
+
+ /** Return the size in pixel of the preview.
+ */
+ Size GetPreviewSize (void) const;
+
+ Image GetTransitionEffectIcon (void) const;
+
+ // void Update (void);
+
+ sal_Int32 GetButtonIndexAt (
+ const model::SharedPageDescriptor& rpPageDescriptor,
+ const Point& rWindowLocation);
+
+private:
+ /// Gap between border of page object and inside of selection rectangle.
+ static const sal_Int32 mnSelectionIndicatorOffset;
+ /// Thickness of the selection rectangle.
+ static const sal_Int32 mnSelectionIndicatorThickness;
+ /// Gap between border of page object and inside of focus rectangle.
+ static const sal_Int32 mnFocusIndicatorOffset;
+ /// Minimal border around the page number area.
+ static const sal_Int32 mnPageNumberOffset;
+ static const sal_Int32 mnOuterBorderWidth;
+ static const Size maButtonSize;
+ static const sal_Int32 mnButtonGap;
+
+ const ::boost::shared_ptr< ::Window> mpWindow;
+ Size maPageObjectSize;
+ double mnModelToWindowScale;
+ Rectangle maPageObjectBoundingBox;
+ Rectangle maPageNumberAreaBoundingBox;
+ Rectangle maPreviewBoundingBox;
+ Rectangle maFocusIndicatorBoundingBox;
+ Rectangle maSelectionIndicatorBoundingBox;
+ Rectangle maTransitionEffectBoundingBox;
+ Rectangle maButtonAreaBoundingBox;
+ const Image maTransitionEffectIcon;
+
+ Size GetPageNumberAreaSize (const int nPageCount);
+ Rectangle CalculatePreviewBoundingBox (
+ Size& rPageObjectSize,
+ const Size& rPreviewModelSize,
+ const Size& rPageNumberAreaSize);
+};
+
+
+} } } // end of namespace ::sd::slidesorter::view
+
+#endif