/************************************************************************* * * 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: PresenterScrollBar.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 * * for a copy of the LGPLv3 License. * ************************************************************************/ #ifndef SDEXT_PRESENTER_PRESENTER_SCROLL_BAR_HXX #define SDEXT_PRESENTER_PRESENTER_SCROLL_BAR_HXX #include "PresenterBitmapContainer.hxx" #include #include #include #include #include #include #include #include #include #include namespace css = ::com::sun::star; namespace sdext { namespace presenter { namespace { typedef ::cppu::WeakComponentImplHelper3 < css::awt::XWindowListener, css::awt::XMouseListener, css::awt::XMouseMotionListener > PresenterScrollBarInterfaceBase; } /** Base class of horizontal and vertical scroll bars. */ class PresenterScrollBar : private ::boost::noncopyable, private ::cppu::BaseMutex, public PresenterScrollBarInterfaceBase { public: typedef ::boost::function ThumbMotionListener; virtual ~PresenterScrollBar (void); virtual void SAL_CALL disposing (void); /** Set the bounding box of the scroll bar. */ void SetPosSize (const css::geometry::RealRectangle2D& rBox); /** Set the position of the movable thumb. @param nPosition A value between 0 and the last value given to SetTotalSize() minus the last value given to SetThumbSize(). */ void SetThumbPosition (const double nPosition); /** Set the upper border of the slider range. */ void SetTotalSize (const double nTotalSize); /** Set the size of the movable thumb. @param nThumbSize A value not larger than the last value given to SetTotalSize(). */ void SetThumbSize (const double nThumbSize); /** Set the canvas that is used for painting the scroll bar. */ void SetCanvas (const css::uno::Reference& rxCanvas); /** On some occasions it is necessary to trigger the painting of a scrollbar from the outside. */ virtual void Paint ( const css::awt::Rectangle& rUpdateBox, bool bNoClip = false); virtual sal_Int32 GetSize (void) const = 0; // XWindowListener virtual void SAL_CALL windowResized (const css::awt::WindowEvent& rEvent) throw (css::uno::RuntimeException); virtual void SAL_CALL windowMoved (const css::awt::WindowEvent& rEvent) throw (css::uno::RuntimeException); virtual void SAL_CALL windowShown (const css::lang::EventObject& rEvent) throw (css::uno::RuntimeException); virtual void SAL_CALL windowHidden (const css::lang::EventObject& rEvent) throw (css::uno::RuntimeException); // XMouseListener virtual void SAL_CALL mousePressed (const css::awt::MouseEvent& rEvent) throw(css::uno::RuntimeException); virtual void SAL_CALL mouseReleased (const css::awt::MouseEvent& rEvent) throw(css::uno::RuntimeException); virtual void SAL_CALL mouseEntered (const css::awt::MouseEvent& rEvent) throw(css::uno::RuntimeException); virtual void SAL_CALL mouseExited (const css::awt::MouseEvent& rEvent) throw(css::uno::RuntimeException); // XMouseMotionListener virtual void SAL_CALL mouseMoved (const css::awt::MouseEvent& rEvent) throw (css::uno::RuntimeException); virtual void SAL_CALL mouseDragged (const css::awt::MouseEvent& rEvent) throw (css::uno::RuntimeException); // lang::XEventListener virtual void SAL_CALL disposing (const css::lang::EventObject& rEvent) throw (css::uno::RuntimeException); protected: css::uno::Reference mxComponentContext; css::uno::Reference mxParentWindow; css::uno::Reference mxWindow; css::uno::Reference mxCanvas; css::uno::Reference mxPresenterHelper; double mnThumbPosition; double mnTotalSize; double mnThumbSize; css::awt::Point maDragPosition; ::boost::function maThumbMotionListener; enum Area { None, Total, Pager, Thumb, PagerUp, PagerDown, PrevButton, NextButton }; Area meButtonDownArea; Area meMouseMoveArea; enum Border { LeftOrTopOfPrevButton, RightOrBottomOfPrevButton, LeftOrTopOfThumb, RightOrBottomOfThumb, LeftOrTopOfNextButton, RightOrBottomOfNextButton, _Count }; double maBorders[_Count]; bool mbIsNotificationActive; static boost::weak_ptr mpSharedBitmaps; boost::shared_ptr mpBitmaps; PresenterBitmapContainer::BitmapSet maPrevButtonSet; PresenterBitmapContainer::BitmapSet maNextButtonSet; PresenterBitmapContainer::BitmapSet maPagerStartSet; PresenterBitmapContainer::BitmapSet maPagerCenterSet; PresenterBitmapContainer::BitmapSet maPagerEndSet; PresenterBitmapContainer::BitmapSet maThumbStartSet; PresenterBitmapContainer::BitmapSet maThumbCenterSet; PresenterBitmapContainer::BitmapSet maThumbEndSet; virtual css::geometry::RealRectangle2D GetRectangle (const Area eArea) const; virtual css::geometry::RealRectangle2D GetBorderRectangle ( const sal_Int32 nLeftOrTopBorder, const sal_Int32 nRightOrBottomBorder) const = 0; virtual double GetDragDistance (const sal_Int32 nX, const sal_Int32 nY) const = 0; virtual css::geometry::RealPoint2D GetPoint (const double nMajor, const double nMinor) const = 0; virtual double GetMajor (const double nX, const double nY) const = 0; virtual double GetMinor (const double nX, const double nY) const = 0; virtual void UpdateBorders (void) = 0; virtual void UpdateBitmaps (void) = 0; PresenterScrollBar ( const css::uno::Reference& rxComponentContext, const css::uno::Reference& rxParentWindow, const ::boost::function& rThumbMotionListener); void Repaint (const css::geometry::RealRectangle2D aBox); void Paint( const Area eArea, const PresenterBitmapContainer::BitmapSet& rBitmaps, const double nRed, const double nGreen, const double nBlue); void PaintBitmap( const Area eArea, const PresenterBitmapContainer::BitmapSet& rBitmaps); void PaintBox ( const Area eArea, const double nRed, const double nGreen, const double nBlue); void Paint( const Area eArea, const PresenterBitmapContainer::BitmapSet& rStartBitmaps, const PresenterBitmapContainer::BitmapSet& rCenterBitmaps, const PresenterBitmapContainer::BitmapSet& rEndBitmaps); void NotifyThumbPositionChange (void); void UpdateWidthOrHeight (sal_Int32& rSize, const PresenterBitmapContainer::BitmapSet& rSet); css::uno::Reference GetBitmap ( const Area eArea, const PresenterBitmapContainer::BitmapSet& rBitmaps) const; private: Area GetArea (const double nX, const double nY) const; }; /** A vertical scroll bar. */ class PresenterVerticalScrollBar : public PresenterScrollBar { public: PresenterVerticalScrollBar ( const css::uno::Reference& rxComponentContext, const css::uno::Reference& rxParentWindow, const ::boost::function& rThumbMotionListener); virtual ~PresenterVerticalScrollBar (void); virtual sal_Int32 GetSize (void) const; protected: virtual css::geometry::RealRectangle2D GetBorderRectangle ( const sal_Int32 nLeftOrTopBorder, const sal_Int32 nRightOrBottomBorder) const; virtual double GetDragDistance (const sal_Int32 nX, const sal_Int32 nY) const; virtual css::geometry::RealPoint2D GetPoint (const double nMajor, const double nMinor) const; virtual double GetMinor (const double nX, const double nY) const; virtual double GetMajor (const double nX, const double nY) const; virtual void UpdateBorders (void); virtual void UpdateBitmaps (void); private: sal_Int32 mnScrollBarWidth; }; /** A horizontal scroll bar. */ class PresenterHorizontalScrollBar : public PresenterScrollBar { public: PresenterHorizontalScrollBar ( const css::uno::Reference& rxComponentContext, const css::uno::Reference& rxParentWindow, const ::boost::function& rThumbMotionListener); virtual ~PresenterHorizontalScrollBar (void); virtual sal_Int32 GetSize (void) const; protected: virtual css::geometry::RealRectangle2D GetBorderRectangle ( const sal_Int32 nLeftOrTopBorder, const sal_Int32 nRightOrBottomBorder) const; virtual double GetDragDistance (const sal_Int32 nX, const sal_Int32 nY) const; virtual css::geometry::RealPoint2D GetPoint (const double nMajor, const double nMinor) const; virtual double GetMinor (const double nX, const double nY) const; virtual double GetMajor (const double nX, const double nY) const; virtual void UpdateBorders (void); virtual void UpdateBitmaps (void); private: sal_Int32 mnScrollBarHeight; }; } } // end of namespace ::sdext::presenter #endif