1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski #ifndef SDEXT_PRESENTER_TOOL_BAR_HXX 25*b1cdbd2cSJim Jagielski #define SDEXT_PRESENTER_TOOL_BAR_HXX 26*b1cdbd2cSJim Jagielski 27*b1cdbd2cSJim Jagielski #include "PresenterController.hxx" 28*b1cdbd2cSJim Jagielski #include "PresenterViewFactory.hxx" 29*b1cdbd2cSJim Jagielski 30*b1cdbd2cSJim Jagielski #include <cppuhelper/basemutex.hxx> 31*b1cdbd2cSJim Jagielski #include <cppuhelper/compbase3.hxx> 32*b1cdbd2cSJim Jagielski #include <cppuhelper/compbase5.hxx> 33*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/ActionEvent.hpp> 34*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/XActionListener.hpp> 35*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/XButton.hpp> 36*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/XControl.hpp> 37*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/XControlContainer.hpp> 38*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/XFixedText.hpp> 39*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/XMouseListener.hpp> 40*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/XMouseMotionListener.hpp> 41*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/XPaintListener.hpp> 42*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/XWindowListener.hpp> 43*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XNameAccess.hpp> 44*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/XDrawPage.hpp> 45*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/XDrawView.hpp> 46*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/XPresenterHelper.hpp> 47*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/framework/XView.hpp> 48*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/framework/XResourceId.hpp> 49*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XController.hpp> 50*b1cdbd2cSJim Jagielski #include <map> 51*b1cdbd2cSJim Jagielski #include <boost/scoped_ptr.hpp> 52*b1cdbd2cSJim Jagielski #include <boost/function.hpp> 53*b1cdbd2cSJim Jagielski #include <boost/noncopyable.hpp> 54*b1cdbd2cSJim Jagielski 55*b1cdbd2cSJim Jagielski namespace css = ::com::sun::star; 56*b1cdbd2cSJim Jagielski 57*b1cdbd2cSJim Jagielski namespace { 58*b1cdbd2cSJim Jagielski typedef cppu::WeakComponentImplHelper5< 59*b1cdbd2cSJim Jagielski css::awt::XWindowListener, 60*b1cdbd2cSJim Jagielski css::awt::XPaintListener, 61*b1cdbd2cSJim Jagielski css::awt::XMouseListener, 62*b1cdbd2cSJim Jagielski css::awt::XMouseMotionListener, 63*b1cdbd2cSJim Jagielski css::drawing::XDrawView 64*b1cdbd2cSJim Jagielski > PresenterToolBarInterfaceBase; 65*b1cdbd2cSJim Jagielski 66*b1cdbd2cSJim Jagielski typedef cppu::WeakComponentImplHelper3< 67*b1cdbd2cSJim Jagielski css::awt::XPaintListener, 68*b1cdbd2cSJim Jagielski css::drawing::framework::XView, 69*b1cdbd2cSJim Jagielski css::drawing::XDrawView 70*b1cdbd2cSJim Jagielski > PresenterToolBarViewInterfaceBase; 71*b1cdbd2cSJim Jagielski } 72*b1cdbd2cSJim Jagielski 73*b1cdbd2cSJim Jagielski namespace sdext { namespace presenter { 74*b1cdbd2cSJim Jagielski 75*b1cdbd2cSJim Jagielski /** A simple tool bar that can display bitmapped buttons and labels. At the 76*b1cdbd2cSJim Jagielski moment there are buttons for moving to the next and previous slide and 77*b1cdbd2cSJim Jagielski to the next effect. A label displayes the index of the current slide 78*b1cdbd2cSJim Jagielski and the total number of slides. 79*b1cdbd2cSJim Jagielski */ 80*b1cdbd2cSJim Jagielski class PresenterToolBar 81*b1cdbd2cSJim Jagielski : private ::cppu::BaseMutex, 82*b1cdbd2cSJim Jagielski private ::boost::noncopyable, 83*b1cdbd2cSJim Jagielski public PresenterToolBarInterfaceBase, 84*b1cdbd2cSJim Jagielski public CachablePresenterView 85*b1cdbd2cSJim Jagielski { 86*b1cdbd2cSJim Jagielski public: 87*b1cdbd2cSJim Jagielski typedef ::boost::function<void(void)> Action; 88*b1cdbd2cSJim Jagielski 89*b1cdbd2cSJim Jagielski enum Anchor { Left, Center, Right }; 90*b1cdbd2cSJim Jagielski 91*b1cdbd2cSJim Jagielski PresenterToolBar ( 92*b1cdbd2cSJim Jagielski const css::uno::Reference<css::uno::XComponentContext>& rxContext, 93*b1cdbd2cSJim Jagielski const css::uno::Reference<css::awt::XWindow>& rxWindow, 94*b1cdbd2cSJim Jagielski const css::uno::Reference<css::rendering::XCanvas>& rxCanvas, 95*b1cdbd2cSJim Jagielski const ::rtl::Reference<PresenterController>& rpPresenterController, 96*b1cdbd2cSJim Jagielski const Anchor eAnchor); 97*b1cdbd2cSJim Jagielski virtual ~PresenterToolBar (void); 98*b1cdbd2cSJim Jagielski 99*b1cdbd2cSJim Jagielski void Initialize ( 100*b1cdbd2cSJim Jagielski const ::rtl::OUString& rsConfigurationPath); 101*b1cdbd2cSJim Jagielski 102*b1cdbd2cSJim Jagielski virtual void SAL_CALL disposing (void); 103*b1cdbd2cSJim Jagielski 104*b1cdbd2cSJim Jagielski void InvalidateArea ( 105*b1cdbd2cSJim Jagielski const css::awt::Rectangle& rRepaintBox, 106*b1cdbd2cSJim Jagielski const bool bSynchronous); 107*b1cdbd2cSJim Jagielski sal_Int32 GetSlideCount (void); 108*b1cdbd2cSJim Jagielski sal_Int32 GetCurrentSlideIndex (void); 109*b1cdbd2cSJim Jagielski void RequestLayout (void); 110*b1cdbd2cSJim Jagielski css::geometry::RealSize2D GetSize (void); 111*b1cdbd2cSJim Jagielski css::geometry::RealSize2D GetMinimalSize (void); 112*b1cdbd2cSJim Jagielski ::rtl::Reference<PresenterController> GetPresenterController (void) const; 113*b1cdbd2cSJim Jagielski css::uno::Reference<css::awt::XWindow> GetWindow (void) const; 114*b1cdbd2cSJim Jagielski css::uno::Reference<css::uno::XComponentContext> GetComponentContext (void) const; 115*b1cdbd2cSJim Jagielski 116*b1cdbd2cSJim Jagielski // lang::XEventListener 117*b1cdbd2cSJim Jagielski 118*b1cdbd2cSJim Jagielski virtual void SAL_CALL 119*b1cdbd2cSJim Jagielski disposing (const css::lang::EventObject& rEventObject) 120*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 121*b1cdbd2cSJim Jagielski 122*b1cdbd2cSJim Jagielski 123*b1cdbd2cSJim Jagielski // XWindowListener 124*b1cdbd2cSJim Jagielski 125*b1cdbd2cSJim Jagielski virtual void SAL_CALL windowResized (const css::awt::WindowEvent& rEvent) 126*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 127*b1cdbd2cSJim Jagielski 128*b1cdbd2cSJim Jagielski virtual void SAL_CALL windowMoved (const css::awt::WindowEvent& rEvent) 129*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 130*b1cdbd2cSJim Jagielski 131*b1cdbd2cSJim Jagielski virtual void SAL_CALL windowShown (const css::lang::EventObject& rEvent) 132*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 133*b1cdbd2cSJim Jagielski 134*b1cdbd2cSJim Jagielski virtual void SAL_CALL windowHidden (const css::lang::EventObject& rEvent) 135*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 136*b1cdbd2cSJim Jagielski 137*b1cdbd2cSJim Jagielski 138*b1cdbd2cSJim Jagielski // XPaintListener 139*b1cdbd2cSJim Jagielski 140*b1cdbd2cSJim Jagielski virtual void SAL_CALL windowPaint (const css::awt::PaintEvent& rEvent) 141*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 142*b1cdbd2cSJim Jagielski 143*b1cdbd2cSJim Jagielski 144*b1cdbd2cSJim Jagielski // XMouseListener 145*b1cdbd2cSJim Jagielski 146*b1cdbd2cSJim Jagielski virtual void SAL_CALL mousePressed (const css::awt::MouseEvent& rEvent) 147*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 148*b1cdbd2cSJim Jagielski 149*b1cdbd2cSJim Jagielski virtual void SAL_CALL mouseReleased (const css::awt::MouseEvent& rEvent) 150*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 151*b1cdbd2cSJim Jagielski 152*b1cdbd2cSJim Jagielski virtual void SAL_CALL mouseEntered (const css::awt::MouseEvent& rEvent) 153*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 154*b1cdbd2cSJim Jagielski 155*b1cdbd2cSJim Jagielski virtual void SAL_CALL mouseExited (const css::awt::MouseEvent& rEvent) 156*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 157*b1cdbd2cSJim Jagielski 158*b1cdbd2cSJim Jagielski 159*b1cdbd2cSJim Jagielski // XMouseMotionListener 160*b1cdbd2cSJim Jagielski 161*b1cdbd2cSJim Jagielski virtual void SAL_CALL mouseMoved (const css::awt::MouseEvent& rEvent) 162*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 163*b1cdbd2cSJim Jagielski 164*b1cdbd2cSJim Jagielski virtual void SAL_CALL mouseDragged (const css::awt::MouseEvent& rEvent) 165*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 166*b1cdbd2cSJim Jagielski 167*b1cdbd2cSJim Jagielski 168*b1cdbd2cSJim Jagielski // XDrawView 169*b1cdbd2cSJim Jagielski 170*b1cdbd2cSJim Jagielski virtual void SAL_CALL setCurrentPage ( 171*b1cdbd2cSJim Jagielski const css::uno::Reference<css::drawing::XDrawPage>& rxSlide) 172*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 173*b1cdbd2cSJim Jagielski 174*b1cdbd2cSJim Jagielski virtual css::uno::Reference<css::drawing::XDrawPage> SAL_CALL getCurrentPage (void) 175*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 176*b1cdbd2cSJim Jagielski 177*b1cdbd2cSJim Jagielski class Context; 178*b1cdbd2cSJim Jagielski 179*b1cdbd2cSJim Jagielski private: 180*b1cdbd2cSJim Jagielski css::uno::Reference<css::uno::XComponentContext> mxComponentContext; 181*b1cdbd2cSJim Jagielski 182*b1cdbd2cSJim Jagielski class ElementContainerPart; 183*b1cdbd2cSJim Jagielski typedef ::boost::shared_ptr<ElementContainerPart> SharedElementContainerPart; 184*b1cdbd2cSJim Jagielski typedef ::std::vector<SharedElementContainerPart> ElementContainer; 185*b1cdbd2cSJim Jagielski ElementContainer maElementContainer; 186*b1cdbd2cSJim Jagielski SharedElementContainerPart mpCurrentContainerPart; 187*b1cdbd2cSJim Jagielski css::uno::Reference<css::awt::XWindow> mxWindow; 188*b1cdbd2cSJim Jagielski css::uno::Reference<css::rendering::XCanvas> mxCanvas; 189*b1cdbd2cSJim Jagielski css::uno::Reference<css::presentation::XSlideShowController> mxSlideShowController; 190*b1cdbd2cSJim Jagielski css::uno::Reference<css::drawing::XDrawPage> mxCurrentSlide; 191*b1cdbd2cSJim Jagielski ::rtl::Reference<PresenterController> mpPresenterController; 192*b1cdbd2cSJim Jagielski bool mbIsLayoutPending; 193*b1cdbd2cSJim Jagielski const Anchor meAnchor; 194*b1cdbd2cSJim Jagielski css::geometry::RealRectangle2D maBoundingBox; 195*b1cdbd2cSJim Jagielski /** The minimal size that is necessary to display all elements without 196*b1cdbd2cSJim Jagielski overlap and with minimal gaps between them. 197*b1cdbd2cSJim Jagielski */ 198*b1cdbd2cSJim Jagielski css::geometry::RealSize2D maMinimalSize; 199*b1cdbd2cSJim Jagielski 200*b1cdbd2cSJim Jagielski void CreateControls ( 201*b1cdbd2cSJim Jagielski const ::rtl::OUString& rsConfigurationPath); 202*b1cdbd2cSJim Jagielski void Layout (const css::uno::Reference<css::rendering::XCanvas>& rxCanvas); 203*b1cdbd2cSJim Jagielski css::geometry::RealSize2D CalculatePartSize ( 204*b1cdbd2cSJim Jagielski const css::uno::Reference<css::rendering::XCanvas>& rxCanvas, 205*b1cdbd2cSJim Jagielski const SharedElementContainerPart& rpPart, 206*b1cdbd2cSJim Jagielski const bool bIsHorizontal); 207*b1cdbd2cSJim Jagielski void LayoutPart ( 208*b1cdbd2cSJim Jagielski const css::uno::Reference<css::rendering::XCanvas>& rxCanvas, 209*b1cdbd2cSJim Jagielski const SharedElementContainerPart& rpPart, 210*b1cdbd2cSJim Jagielski const css::geometry::RealRectangle2D& rBoundingBox, 211*b1cdbd2cSJim Jagielski const css::geometry::RealSize2D& rPartSize, 212*b1cdbd2cSJim Jagielski const bool bIsHorizontal); 213*b1cdbd2cSJim Jagielski void Clear ( 214*b1cdbd2cSJim Jagielski const css::awt::Rectangle& rUpdateBox, 215*b1cdbd2cSJim Jagielski const css::rendering::ViewState& rViewState); 216*b1cdbd2cSJim Jagielski void Paint ( 217*b1cdbd2cSJim Jagielski const css::awt::Rectangle& rUpdateBox, 218*b1cdbd2cSJim Jagielski const css::rendering::ViewState& rViewState); 219*b1cdbd2cSJim Jagielski 220*b1cdbd2cSJim Jagielski void UpdateSlideNumber (void); 221*b1cdbd2cSJim Jagielski 222*b1cdbd2cSJim Jagielski void CheckMouseOver ( 223*b1cdbd2cSJim Jagielski const css::awt::MouseEvent& rEvent, 224*b1cdbd2cSJim Jagielski const bool bOverWindow, 225*b1cdbd2cSJim Jagielski const bool bMouseDown=false); 226*b1cdbd2cSJim Jagielski 227*b1cdbd2cSJim Jagielski void ProcessEntry ( 228*b1cdbd2cSJim Jagielski const ::css::uno::Reference<css::beans::XPropertySet>& rProperties, 229*b1cdbd2cSJim Jagielski Context& rContext); 230*b1cdbd2cSJim Jagielski 231*b1cdbd2cSJim Jagielski /** This method throws a DisposedException when the object has already been 232*b1cdbd2cSJim Jagielski disposed. 233*b1cdbd2cSJim Jagielski */ 234*b1cdbd2cSJim Jagielski void ThrowIfDisposed (void) const 235*b1cdbd2cSJim Jagielski throw (css::lang::DisposedException); 236*b1cdbd2cSJim Jagielski }; 237*b1cdbd2cSJim Jagielski 238*b1cdbd2cSJim Jagielski 239*b1cdbd2cSJim Jagielski 240*b1cdbd2cSJim Jagielski 241*b1cdbd2cSJim Jagielski /** View for the PresenterToolBar. 242*b1cdbd2cSJim Jagielski */ 243*b1cdbd2cSJim Jagielski class PresenterToolBarView 244*b1cdbd2cSJim Jagielski : private ::cppu::BaseMutex, 245*b1cdbd2cSJim Jagielski private ::boost::noncopyable, 246*b1cdbd2cSJim Jagielski public PresenterToolBarViewInterfaceBase 247*b1cdbd2cSJim Jagielski { 248*b1cdbd2cSJim Jagielski public: 249*b1cdbd2cSJim Jagielski explicit PresenterToolBarView ( 250*b1cdbd2cSJim Jagielski const css::uno::Reference<css::uno::XComponentContext>& rxContext, 251*b1cdbd2cSJim Jagielski const css::uno::Reference<css::drawing::framework::XResourceId>& rxViewId, 252*b1cdbd2cSJim Jagielski const css::uno::Reference<css::frame::XController>& rxController, 253*b1cdbd2cSJim Jagielski const ::rtl::Reference<PresenterController>& rpPresenterController); 254*b1cdbd2cSJim Jagielski virtual ~PresenterToolBarView (void); 255*b1cdbd2cSJim Jagielski 256*b1cdbd2cSJim Jagielski virtual void SAL_CALL disposing (void); 257*b1cdbd2cSJim Jagielski 258*b1cdbd2cSJim Jagielski ::rtl::Reference<PresenterToolBar> GetPresenterToolBar (void) const; 259*b1cdbd2cSJim Jagielski 260*b1cdbd2cSJim Jagielski 261*b1cdbd2cSJim Jagielski // XPaintListener 262*b1cdbd2cSJim Jagielski 263*b1cdbd2cSJim Jagielski virtual void SAL_CALL windowPaint (const css::awt::PaintEvent& rEvent) 264*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 265*b1cdbd2cSJim Jagielski 266*b1cdbd2cSJim Jagielski 267*b1cdbd2cSJim Jagielski // lang::XEventListener 268*b1cdbd2cSJim Jagielski 269*b1cdbd2cSJim Jagielski virtual void SAL_CALL 270*b1cdbd2cSJim Jagielski disposing (const css::lang::EventObject& rEventObject) 271*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 272*b1cdbd2cSJim Jagielski 273*b1cdbd2cSJim Jagielski 274*b1cdbd2cSJim Jagielski // XResourceId 275*b1cdbd2cSJim Jagielski 276*b1cdbd2cSJim Jagielski virtual css::uno::Reference<css::drawing::framework::XResourceId> SAL_CALL getResourceId (void) 277*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 278*b1cdbd2cSJim Jagielski 279*b1cdbd2cSJim Jagielski virtual sal_Bool SAL_CALL isAnchorOnly (void) 280*b1cdbd2cSJim Jagielski throw (com::sun::star::uno::RuntimeException); 281*b1cdbd2cSJim Jagielski 282*b1cdbd2cSJim Jagielski 283*b1cdbd2cSJim Jagielski // XDrawView 284*b1cdbd2cSJim Jagielski 285*b1cdbd2cSJim Jagielski virtual void SAL_CALL setCurrentPage ( 286*b1cdbd2cSJim Jagielski const css::uno::Reference<css::drawing::XDrawPage>& rxSlide) 287*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 288*b1cdbd2cSJim Jagielski 289*b1cdbd2cSJim Jagielski virtual css::uno::Reference<css::drawing::XDrawPage> SAL_CALL getCurrentPage (void) 290*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 291*b1cdbd2cSJim Jagielski 292*b1cdbd2cSJim Jagielski private: 293*b1cdbd2cSJim Jagielski // css::uno::Reference<css::uno::XComponentContext> mxComponentContext; 294*b1cdbd2cSJim Jagielski css::uno::Reference<css::drawing::framework::XPane> mxPane; 295*b1cdbd2cSJim Jagielski css::uno::Reference<css::drawing::framework::XResourceId> mxViewId; 296*b1cdbd2cSJim Jagielski css::uno::Reference<css::awt::XWindow> mxWindow; 297*b1cdbd2cSJim Jagielski css::uno::Reference<css::rendering::XCanvas> mxCanvas; 298*b1cdbd2cSJim Jagielski ::rtl::Reference<PresenterController> mpPresenterController; 299*b1cdbd2cSJim Jagielski css::uno::Reference<css::presentation::XSlideShowController> mxSlideShowController; 300*b1cdbd2cSJim Jagielski ::rtl::Reference<PresenterToolBar> mpToolBar; 301*b1cdbd2cSJim Jagielski 302*b1cdbd2cSJim Jagielski /** This method throws a DisposedException when the object has already been 303*b1cdbd2cSJim Jagielski disposed. 304*b1cdbd2cSJim Jagielski */ 305*b1cdbd2cSJim Jagielski void ThrowIfDisposed (void) const 306*b1cdbd2cSJim Jagielski throw (css::lang::DisposedException); 307*b1cdbd2cSJim Jagielski }; 308*b1cdbd2cSJim Jagielski 309*b1cdbd2cSJim Jagielski } } // end of namespace ::sdext::presenter 310*b1cdbd2cSJim Jagielski 311*b1cdbd2cSJim Jagielski #endif 312