diff options
author | Andre Fischer <af@openoffice.org> | 2010-01-27 11:41:30 +0100 |
---|---|---|
committer | Andre Fischer <af@openoffice.org> | 2010-01-27 11:41:30 +0100 |
commit | 23a61a9969af9d099ce87d1169b7c2aeb5f6bb1e (patch) | |
tree | f5d555e01530492e92ef69fb0d917338c8fb1dea /sd/source/ui/slidesorter/inc/view/SlsPageObjectLayouter.hxx | |
parent | 5c2d284b0f9973aada365a8f464f1152671bd629 (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.hxx | 178 |
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 |