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 #ifndef INCLUDED_SLIDESHOW_SHAPEIMPORTER_HXX 24*b1cdbd2cSJim Jagielski #define INCLUDED_SLIDESHOW_SHAPEIMPORTER_HXX 25*b1cdbd2cSJim Jagielski 26*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/XDrawPage.hpp> 27*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/XShapes.hpp> 28*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/XPropertySet.hpp> 29*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/XLayer.hpp> 30*b1cdbd2cSJim Jagielski #include "unoviewcontainer.hxx" 31*b1cdbd2cSJim Jagielski #include "unoview.hxx" 32*b1cdbd2cSJim Jagielski 33*b1cdbd2cSJim Jagielski #include "shape.hxx" 34*b1cdbd2cSJim Jagielski 35*b1cdbd2cSJim Jagielski #include <stack> 36*b1cdbd2cSJim Jagielski 37*b1cdbd2cSJim Jagielski namespace slideshow { 38*b1cdbd2cSJim Jagielski namespace internal { 39*b1cdbd2cSJim Jagielski 40*b1cdbd2cSJim Jagielski struct SlideShowContext; 41*b1cdbd2cSJim Jagielski 42*b1cdbd2cSJim Jagielski typedef ::std::vector< ::cppcanvas::PolyPolygonSharedPtr> PolyPolygonVector; 43*b1cdbd2cSJim Jagielski typedef ::boost::shared_ptr< UnoView > UnoViewSharedPtr; 44*b1cdbd2cSJim Jagielski typedef ::std::vector< UnoViewSharedPtr > UnoViewVector; 45*b1cdbd2cSJim Jagielski 46*b1cdbd2cSJim Jagielski /** This class imports all shapes from a given XShapes object 47*b1cdbd2cSJim Jagielski */ 48*b1cdbd2cSJim Jagielski class ShapeImporter 49*b1cdbd2cSJim Jagielski { 50*b1cdbd2cSJim Jagielski public: 51*b1cdbd2cSJim Jagielski /** Create shape importer. 52*b1cdbd2cSJim Jagielski 53*b1cdbd2cSJim Jagielski @param xPage 54*b1cdbd2cSJim Jagielski Page containing the shapes 55*b1cdbd2cSJim Jagielski 56*b1cdbd2cSJim Jagielski @param xActualPage 57*b1cdbd2cSJim Jagielski Actual page that's imported - if xPage is a master 58*b1cdbd2cSJim Jagielski page, this argument must refer to the using, i.e the 59*b1cdbd2cSJim Jagielski page that embeds this specific masterpage. Otherwise, 60*b1cdbd2cSJim Jagielski this argument is probably equal to xPage. 61*b1cdbd2cSJim Jagielski 62*b1cdbd2cSJim Jagielski @param nOrdNumStart 63*b1cdbd2cSJim Jagielski Each shape receives a z order number, in order of 64*b1cdbd2cSJim Jagielski import (which relies on the fact that the API returns 65*b1cdbd2cSJim Jagielski the shapes in draw order - which it does, 66*b1cdbd2cSJim Jagielski currently). Since we might mix several pages on screen 67*b1cdbd2cSJim Jagielski (e.g. master page and foreground page), this value can 68*b1cdbd2cSJim Jagielski be used as an offset to distinguish those pages. 69*b1cdbd2cSJim Jagielski 70*b1cdbd2cSJim Jagielski @param bConvertingMasterPage 71*b1cdbd2cSJim Jagielski When true, then the master page is imported. Otherwise, this 72*b1cdbd2cSJim Jagielski object imports the draw page. 73*b1cdbd2cSJim Jagielski */ 74*b1cdbd2cSJim Jagielski ShapeImporter( const ::com::sun::star::uno::Reference< 75*b1cdbd2cSJim Jagielski ::com::sun::star::drawing::XDrawPage >& xPage, 76*b1cdbd2cSJim Jagielski const ::com::sun::star::uno::Reference< 77*b1cdbd2cSJim Jagielski ::com::sun::star::drawing::XDrawPage >& xActualPage, 78*b1cdbd2cSJim Jagielski const ::com::sun::star::uno::Reference< 79*b1cdbd2cSJim Jagielski ::com::sun::star::drawing::XDrawPagesSupplier>& xPagesSupplier, 80*b1cdbd2cSJim Jagielski const SlideShowContext& rContext, 81*b1cdbd2cSJim Jagielski sal_Int32 nOrdNumStart, 82*b1cdbd2cSJim Jagielski bool bConvertingMasterPage ); 83*b1cdbd2cSJim Jagielski 84*b1cdbd2cSJim Jagielski /** This method imports the presentation background shape 85*b1cdbd2cSJim Jagielski */ 86*b1cdbd2cSJim Jagielski ShapeSharedPtr importBackgroundShape(); // throw (ShapeLoadFailedException) 87*b1cdbd2cSJim Jagielski 88*b1cdbd2cSJim Jagielski /** This method imports presentation-visible shapes (and skips all others). 89*b1cdbd2cSJim Jagielski 90*b1cdbd2cSJim Jagielski @return the generated Shape, or NULL for no more shapes. 91*b1cdbd2cSJim Jagielski */ 92*b1cdbd2cSJim Jagielski ShapeSharedPtr importShape(); // throw (ConversionFailedException) 93*b1cdbd2cSJim Jagielski 94*b1cdbd2cSJim Jagielski /** Test whether import is done. 95*b1cdbd2cSJim Jagielski 96*b1cdbd2cSJim Jagielski @return true, if all shapes are imported via the 97*b1cdbd2cSJim Jagielski importShape() call. 98*b1cdbd2cSJim Jagielski */ 99*b1cdbd2cSJim Jagielski bool isImportDone() const; 100*b1cdbd2cSJim Jagielski PolyPolygonVector getPolygons(); 101*b1cdbd2cSJim Jagielski private: 102*b1cdbd2cSJim Jagielski bool isSkip( ::com::sun::star::uno::Reference< 103*b1cdbd2cSJim Jagielski ::com::sun::star::beans::XPropertySet> const& xPropSet, 104*b1cdbd2cSJim Jagielski ::rtl::OUString const& shapeType, 105*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Reference< 106*b1cdbd2cSJim Jagielski ::com::sun::star::drawing::XLayer> const& xLayer); 107*b1cdbd2cSJim Jagielski 108*b1cdbd2cSJim Jagielski ShapeSharedPtr createShape( 109*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Reference< 110*b1cdbd2cSJim Jagielski ::com::sun::star::drawing::XShape> const& xCurrShape, 111*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Reference< 112*b1cdbd2cSJim Jagielski ::com::sun::star::beans::XPropertySet> const& xPropSet, 113*b1cdbd2cSJim Jagielski ::rtl::OUString const& shapeType ) const; 114*b1cdbd2cSJim Jagielski 115*b1cdbd2cSJim Jagielski void importPolygons(::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > const& xPropSet) ; 116*b1cdbd2cSJim Jagielski 117*b1cdbd2cSJim Jagielski struct XShapesEntry 118*b1cdbd2cSJim Jagielski { 119*b1cdbd2cSJim Jagielski ShapeSharedPtr const mpGroupShape; 120*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Reference< 121*b1cdbd2cSJim Jagielski ::com::sun::star::drawing::XShapes> const mxShapes; 122*b1cdbd2cSJim Jagielski sal_Int32 const mnCount; 123*b1cdbd2cSJim Jagielski sal_Int32 mnPos; 124*b1cdbd2cSJim Jagielski XShapesEntryslideshow::internal::ShapeImporter::XShapesEntry125*b1cdbd2cSJim Jagielski explicit XShapesEntry( ShapeSharedPtr const& pGroupShape ) 126*b1cdbd2cSJim Jagielski : mpGroupShape(pGroupShape), 127*b1cdbd2cSJim Jagielski mxShapes( pGroupShape->getXShape(), 128*b1cdbd2cSJim Jagielski ::com::sun::star::uno::UNO_QUERY_THROW ), 129*b1cdbd2cSJim Jagielski mnCount(mxShapes->getCount()), mnPos(0) {} XShapesEntryslideshow::internal::ShapeImporter::XShapesEntry130*b1cdbd2cSJim Jagielski explicit XShapesEntry( ::com::sun::star::uno::Reference< 131*b1cdbd2cSJim Jagielski ::com::sun::star::drawing::XShapes> const& xShapes ) 132*b1cdbd2cSJim Jagielski : mpGroupShape(), mxShapes(xShapes), 133*b1cdbd2cSJim Jagielski mnCount(xShapes->getCount()), mnPos(0) {} 134*b1cdbd2cSJim Jagielski }; 135*b1cdbd2cSJim Jagielski typedef ::std::stack<XShapesEntry> XShapesStack; 136*b1cdbd2cSJim Jagielski 137*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Reference< 138*b1cdbd2cSJim Jagielski ::com::sun::star::drawing::XDrawPage> mxPage; 139*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Reference< 140*b1cdbd2cSJim Jagielski ::com::sun::star::drawing::XDrawPagesSupplier> mxPagesSupplier; 141*b1cdbd2cSJim Jagielski const SlideShowContext& mrContext; 142*b1cdbd2cSJim Jagielski PolyPolygonVector maPolygons; 143*b1cdbd2cSJim Jagielski XShapesStack maShapesStack; 144*b1cdbd2cSJim Jagielski double mnAscendingPrio; 145*b1cdbd2cSJim Jagielski bool mbConvertingMasterPage; 146*b1cdbd2cSJim Jagielski }; 147*b1cdbd2cSJim Jagielski 148*b1cdbd2cSJim Jagielski } // namespace internal 149*b1cdbd2cSJim Jagielski } // namespace presentation 150*b1cdbd2cSJim Jagielski 151*b1cdbd2cSJim Jagielski #endif 152