1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 // MARKER(update_precomp.py): autogen include statement, do not remove 25 #include "precompiled_sd.hxx" 26 #include <com/sun/star/lang/DisposedException.hpp> 27 #include <com/sun/star/presentation/ClickAction.hpp> 28 #include <com/sun/star/presentation/FadeEffect.hpp> 29 #include <com/sun/star/presentation/AnimationEffect.hpp> 30 #include <com/sun/star/presentation/PresentationRange.hpp> 31 #include <com/sun/star/presentation/AnimationSpeed.hpp> 32 #include <com/sun/star/view/PaperOrientation.hpp> 33 #include <com/sun/star/animations/AnimationNodeType.hpp> 34 #include <com/sun/star/presentation/EffectNodeType.hpp> 35 #include <com/sun/star/lang/DisposedException.hpp> 36 #include <comphelper/processfactory.hxx> 37 #include <rtl/ustrbuf.hxx> 38 #include <vcl/bitmapex.hxx> 39 #include <vcl/metaact.hxx> 40 #include <toolkit/unohlp.hxx> 41 #include <vcl/svapp.hxx> 42 #include <vcl/settings.hxx> 43 #include <unomodel.hxx> 44 #include <unopage.hxx> 45 #include <svx/svxids.hrc> 46 #include <svl/itemset.hxx> 47 #include <svx/svdmodel.hxx> 48 #include <sdresid.hxx> 49 #include <glob.hrc> 50 #include <sdpage.hxx> 51 #include <unoprnms.hxx> 52 #include <sdattr.hxx> 53 #include <drawdoc.hxx> 54 #include <svx/unoshape.hxx> 55 #include <com/sun/star/style/XStyle.hpp> 56 #include <svx/svdorect.hxx> 57 #include <vos/mutex.hxx> 58 #include <svl/style.hxx> 59 #include <rtl/uuid.h> 60 #include <rtl/memory.h> 61 #include <comphelper/serviceinfohelper.hxx> 62 63 #include <comphelper/extract.hxx> 64 #include <list> 65 #include <svx/svditer.hxx> 66 #include <svtools/wmf.hxx> 67 #include <svx/svdoole2.hxx> 68 #include <svx/svdpool.hxx> 69 #include <svx/svdview.hxx> 70 #include "misc.hxx" 71 #include "View.hxx" 72 #ifndef SVX_LIGHT 73 #ifndef SD_DRAW_DOC_SHELL_HXX 74 #include "DrawDocShell.hxx" 75 #endif 76 #endif 77 #include "ViewShell.hxx" 78 #include "DrawViewShell.hxx" 79 #include "unoobj.hxx" 80 #include "res_bmp.hrc" 81 #include "unokywds.hxx" 82 #include "unopback.hxx" 83 #include "unohelp.hxx" 84 85 using ::com::sun::star::animations::XAnimationNode; 86 using ::com::sun::star::animations::XAnimationNodeSupplier; 87 using ::rtl::OUString; 88 using ::rtl::OUStringBuffer; 89 90 using namespace ::vos; 91 using namespace ::osl; 92 using namespace ::com::sun::star; 93 using namespace ::com::sun::star::uno; 94 using namespace ::com::sun::star::lang; 95 using namespace ::com::sun::star::container; 96 using namespace ::com::sun::star::drawing; 97 using namespace ::com::sun::star::office; 98 99 namespace sd { 100 extern Reference< XAnnotation > createAnnotation( const Reference< XComponentContext >& xContext, SdPage* ); 101 extern Reference< XAnnotationEnumeration > createAnnotationEnumeration( const sd::AnnotationVector& ); 102 } 103 104 /* this are the ids for page properties */ 105 enum WID_PAGE 106 { 107 WID_PAGE_LEFT, WID_PAGE_RIGHT, WID_PAGE_TOP, WID_PAGE_BOTTOM, WID_PAGE_WIDTH, 108 WID_PAGE_HEIGHT, WID_PAGE_EFFECT, WID_PAGE_CHANGE, WID_PAGE_SPEED, WID_PAGE_NUMBER, 109 WID_PAGE_ORIENT, WID_PAGE_LAYOUT, WID_PAGE_DURATION, WID_PAGE_LDNAME, WID_PAGE_LDBITMAP, 110 WID_PAGE_BACK, WID_PAGE_PREVIEW, WID_PAGE_PREVIEWBITMAP, WID_PAGE_VISIBLE, WID_PAGE_SOUNDFILE, WID_PAGE_BACKFULL, 111 WID_PAGE_BACKVIS, WID_PAGE_BACKOBJVIS, WID_PAGE_USERATTRIBS, WID_PAGE_BOOKMARK, WID_PAGE_ISDARK, 112 WID_PAGE_HEADERVISIBLE, WID_PAGE_HEADERTEXT, WID_PAGE_FOOTERVISIBLE, WID_PAGE_FOOTERTEXT, 113 WID_PAGE_PAGENUMBERVISIBLE, WID_PAGE_DATETIMEVISIBLE, WID_PAGE_DATETIMEFIXED, 114 WID_PAGE_DATETIMETEXT, WID_PAGE_DATETIMEFORMAT, WID_TRANSITION_TYPE, WID_TRANSITION_SUBTYPE, 115 WID_TRANSITION_DIRECTION, WID_TRANSITION_FADE_COLOR, WID_TRANSITION_DURATION, WID_LOOP_SOUND, 116 WID_NAVORDER 117 }; 118 119 #ifndef SEQTYPE 120 #if defined(__SUNPRO_CC) && (__SUNPRO_CC == 0x500) 121 #define SEQTYPE(x) (new ::com::sun::star::uno::Type( x )) 122 #else 123 #define SEQTYPE(x) &(x) 124 #endif 125 #endif 126 127 static sal_Char __FAR_DATA sEmptyPageName[sizeof("page")] = "page"; 128 129 /** this function stores the property maps for draw pages in impress and draw */ 130 const SvxItemPropertySet* ImplGetDrawPagePropertySet( sal_Bool bImpress, PageKind ePageKind ) 131 { 132 static const SfxItemPropertyMapEntry aDrawPagePropertyMap_Impl[] = 133 { 134 { MAP_CHAR_LEN(UNO_NAME_PAGE_BACKGROUND), WID_PAGE_BACK, &ITYPE( beans::XPropertySet ), beans::PropertyAttribute::MAYBEVOID,0}, 135 { MAP_CHAR_LEN(UNO_NAME_PAGE_BOTTOM), WID_PAGE_BOTTOM, &::getCppuType((const sal_Int32*)0), 0, 0}, 136 { MAP_CHAR_LEN(UNO_NAME_PAGE_LEFT), WID_PAGE_LEFT, &::getCppuType((const sal_Int32*)0), 0, 0}, 137 { MAP_CHAR_LEN(UNO_NAME_PAGE_RIGHT), WID_PAGE_RIGHT, &::getCppuType((const sal_Int32*)0), 0, 0}, 138 { MAP_CHAR_LEN(UNO_NAME_PAGE_TOP), WID_PAGE_TOP, &::getCppuType((const sal_Int32*)0), 0, 0}, 139 { MAP_CHAR_LEN(UNO_NAME_PAGE_CHANGE), WID_PAGE_CHANGE, &::getCppuType((const sal_Int32*)0), 0, 0}, 140 { MAP_CHAR_LEN(UNO_NAME_PAGE_DURATION), WID_PAGE_DURATION, &::getCppuType((const sal_Int32*)0), 0, 0}, 141 { MAP_CHAR_LEN(UNO_NAME_PAGE_EFFECT), WID_PAGE_EFFECT, &::getCppuType((const presentation::FadeEffect*)0), 0, 0}, 142 { MAP_CHAR_LEN(UNO_NAME_PAGE_HEIGHT), WID_PAGE_HEIGHT, &::getCppuType((const sal_Int32*)0), 0, 0}, 143 { MAP_CHAR_LEN(UNO_NAME_PAGE_LAYOUT), WID_PAGE_LAYOUT, &::getCppuType((const sal_Int16*)0), 0, 0}, 144 { MAP_CHAR_LEN(UNO_NAME_LINKDISPLAYBITMAP), WID_PAGE_LDBITMAP, &ITYPE( awt::XBitmap), beans::PropertyAttribute::READONLY, 0}, 145 { MAP_CHAR_LEN(UNO_NAME_LINKDISPLAYNAME), WID_PAGE_LDNAME, &::getCppuType((const OUString*)0), beans::PropertyAttribute::READONLY, 0}, 146 { MAP_CHAR_LEN(UNO_NAME_PAGE_NUMBER), WID_PAGE_NUMBER, &::getCppuType((const sal_Int16*)0), beans::PropertyAttribute::READONLY, 0}, 147 { MAP_CHAR_LEN(UNO_NAME_PAGE_ORIENTATION), WID_PAGE_ORIENT, &::getCppuType((const view::PaperOrientation*)0),0, 0}, 148 { MAP_CHAR_LEN(UNO_NAME_PAGE_SPEED), WID_PAGE_SPEED, &::getCppuType((const presentation::AnimationSpeed*)0), 0, 0}, 149 { MAP_CHAR_LEN(UNO_NAME_PAGE_WIDTH), WID_PAGE_WIDTH, &::getCppuType((const sal_Int32*)0), 0, 0}, 150 { MAP_CHAR_LEN(UNO_NAME_PAGE_PREVIEW), WID_PAGE_PREVIEW, SEQTYPE(::getCppuType((::com::sun::star::uno::Sequence<sal_Int8>*)0)), ::com::sun::star::beans::PropertyAttribute::READONLY, 0}, 151 { MAP_CHAR_LEN(UNO_NAME_PAGE_PREVIEWBITMAP), WID_PAGE_PREVIEWBITMAP, SEQTYPE(::getCppuType((::com::sun::star::uno::Sequence<sal_Int8>*)0)), ::com::sun::star::beans::PropertyAttribute::READONLY, 0}, 152 { MAP_CHAR_LEN(UNO_NAME_PAGE_VISIBLE), WID_PAGE_VISIBLE, &::getBooleanCppuType(), 0, 0}, 153 { MAP_CHAR_LEN(UNO_NAME_OBJ_SOUNDFILE), WID_PAGE_SOUNDFILE, &::getCppuType((const Any*)0), 0, 0}, 154 { MAP_CHAR_LEN(sUNO_Prop_IsBackgroundVisible), WID_PAGE_BACKVIS, &::getBooleanCppuType(), 0, 0}, 155 { MAP_CHAR_LEN(sUNO_Prop_IsBackgroundObjectsVisible), WID_PAGE_BACKOBJVIS, &::getBooleanCppuType(), 0, 0}, 156 { MAP_CHAR_LEN(sUNO_Prop_UserDefinedAttributes),WID_PAGE_USERATTRIBS, &::getCppuType((const Reference< ::com::sun::star::container::XNameContainer >*)0) , 0, 0}, 157 { MAP_CHAR_LEN(sUNO_Prop_BookmarkURL), WID_PAGE_BOOKMARK, &::getCppuType((const OUString*)0), 0, 0}, 158 { MAP_CHAR_LEN("IsBackgroundDark" ), WID_PAGE_ISDARK, &::getBooleanCppuType(), beans::PropertyAttribute::READONLY, 0}, 159 { MAP_CHAR_LEN("IsFooterVisible"), WID_PAGE_FOOTERVISIBLE, &::getBooleanCppuType(), 0, 0}, 160 { MAP_CHAR_LEN("FooterText"), WID_PAGE_FOOTERTEXT, &::getCppuType((const OUString*)0), 0, 0}, 161 { MAP_CHAR_LEN("IsPageNumberVisible"), WID_PAGE_PAGENUMBERVISIBLE, &::getBooleanCppuType(), 0, 0}, 162 { MAP_CHAR_LEN("IsDateTimeVisible"), WID_PAGE_DATETIMEVISIBLE, &::getBooleanCppuType(), 0, 0}, 163 { MAP_CHAR_LEN("IsDateTimeFixed"), WID_PAGE_DATETIMEFIXED, &::getBooleanCppuType(), 0, 0}, 164 { MAP_CHAR_LEN("DateTimeText"), WID_PAGE_DATETIMETEXT, &::getCppuType((const OUString*)0), 0, 0}, 165 { MAP_CHAR_LEN("DateTimeFormat"), WID_PAGE_DATETIMEFORMAT, &::getCppuType((const sal_Int32*)0), 0, 0}, 166 { MAP_CHAR_LEN("TransitionType"), WID_TRANSITION_TYPE, &::getCppuType((const sal_Int16*)0), 0, 0}, 167 { MAP_CHAR_LEN("TransitionSubtype"), WID_TRANSITION_SUBTYPE, &::getCppuType((const sal_Int16*)0), 0, 0}, 168 { MAP_CHAR_LEN("TransitionDirection"), WID_TRANSITION_DIRECTION, &::getCppuType((const sal_Bool*)0), 0, 0}, 169 { MAP_CHAR_LEN("TransitionFadeColor"), WID_TRANSITION_FADE_COLOR, &::getCppuType((const sal_Int32*)0), 0, 0}, 170 { MAP_CHAR_LEN("TransitionDuration"), WID_TRANSITION_DURATION, &::getCppuType((const double*)0), 0, 0}, 171 { MAP_CHAR_LEN("LoopSound"), WID_LOOP_SOUND, &::getBooleanCppuType(), 0, 0}, 172 { MAP_CHAR_LEN("NavigationOrder"), WID_NAVORDER, &::com::sun::star::container::XIndexAccess::static_type(),0, 0}, 173 {0,0,0,0,0,0} 174 }; 175 176 #define DRAW_PAGE_NOTES_PROPERTIES \ 177 { MAP_CHAR_LEN(UNO_NAME_PAGE_BOTTOM), WID_PAGE_BOTTOM, &::getCppuType((const sal_Int32*)0), 0, 0}, \ 178 { MAP_CHAR_LEN(UNO_NAME_PAGE_LEFT), WID_PAGE_LEFT, &::getCppuType((const sal_Int32*)0), 0, 0}, \ 179 { MAP_CHAR_LEN(UNO_NAME_PAGE_RIGHT), WID_PAGE_RIGHT, &::getCppuType((const sal_Int32*)0), 0, 0}, \ 180 { MAP_CHAR_LEN(UNO_NAME_PAGE_TOP), WID_PAGE_TOP, &::getCppuType((const sal_Int32*)0), 0, 0}, \ 181 { MAP_CHAR_LEN(UNO_NAME_PAGE_HEIGHT), WID_PAGE_HEIGHT, &::getCppuType((const sal_Int32*)0), 0, 0}, \ 182 { MAP_CHAR_LEN(UNO_NAME_PAGE_LAYOUT), WID_PAGE_LAYOUT, &::getCppuType((const sal_Int16*)0), 0, 0}, \ 183 { MAP_CHAR_LEN(UNO_NAME_LINKDISPLAYBITMAP), WID_PAGE_LDBITMAP, &ITYPE( awt::XBitmap), beans::PropertyAttribute::READONLY, 0}, \ 184 { MAP_CHAR_LEN(UNO_NAME_LINKDISPLAYNAME), WID_PAGE_LDNAME, &::getCppuType((const OUString*)0), beans::PropertyAttribute::READONLY, 0}, \ 185 { MAP_CHAR_LEN(UNO_NAME_PAGE_NUMBER), WID_PAGE_NUMBER, &::getCppuType((const sal_Int16*)0), beans::PropertyAttribute::READONLY, 0}, \ 186 { MAP_CHAR_LEN(UNO_NAME_PAGE_ORIENTATION), WID_PAGE_ORIENT, &::getCppuType((const view::PaperOrientation*)0),0, 0}, \ 187 { MAP_CHAR_LEN(UNO_NAME_PAGE_WIDTH), WID_PAGE_WIDTH, &::getCppuType((const sal_Int32*)0), 0, 0}, \ 188 { MAP_CHAR_LEN(sUNO_Prop_UserDefinedAttributes),WID_PAGE_USERATTRIBS, &::getCppuType((const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >*)0) , 0, 0},\ 189 { MAP_CHAR_LEN("IsHeaderVisible"), WID_PAGE_HEADERVISIBLE, &::getBooleanCppuType(), 0, 0}, \ 190 { MAP_CHAR_LEN("HeaderText"), WID_PAGE_HEADERTEXT, &::getCppuType((const OUString*)0), 0, 0}, \ 191 { MAP_CHAR_LEN("IsBackgroundDark" ), WID_PAGE_ISDARK, &::getBooleanCppuType(), beans::PropertyAttribute::READONLY, 0}, \ 192 { MAP_CHAR_LEN("IsFooterVisible"), WID_PAGE_FOOTERVISIBLE, &::getBooleanCppuType(), 0, 0}, \ 193 { MAP_CHAR_LEN("FooterText"), WID_PAGE_FOOTERTEXT, &::getCppuType((const OUString*)0), 0, 0}, \ 194 { MAP_CHAR_LEN("IsPageNumberVisible"), WID_PAGE_PAGENUMBERVISIBLE, &::getBooleanCppuType(), 0, 0}, \ 195 { MAP_CHAR_LEN("IsDateTimeVisible"), WID_PAGE_DATETIMEVISIBLE, &::getBooleanCppuType(), 0, 0}, \ 196 { MAP_CHAR_LEN("IsDateTimeFixed"), WID_PAGE_DATETIMEFIXED, &::getBooleanCppuType(), 0, 0}, \ 197 { MAP_CHAR_LEN("DateTimeText"), WID_PAGE_DATETIMETEXT, &::getCppuType((const OUString*)0), 0, 0}, \ 198 { MAP_CHAR_LEN("DateTimeFormat"), WID_PAGE_DATETIMEFORMAT, &::getCppuType((const sal_Int32*)0), 0, 0}, \ 199 { MAP_CHAR_LEN("NavigationOrder"), WID_NAVORDER, &::com::sun::star::container::XIndexAccess::static_type(),0, 0}, \ 200 {0,0,0,0,0,0} 201 202 static const SfxItemPropertyMapEntry aDrawPageNotesHandoutPropertyMap_Impl[] = 203 { 204 // this must be the first two entries so they can be excluded for PK_STANDARD 205 { MAP_CHAR_LEN(UNO_NAME_PAGE_BACKGROUND), WID_PAGE_BACK, &ITYPE( beans::XPropertySet ), beans::PropertyAttribute::MAYBEVOID,0}, 206 DRAW_PAGE_NOTES_PROPERTIES 207 }; 208 static const SfxItemPropertyMapEntry aDrawPageNotesHandoutPropertyNoBackMap_Impl[] = 209 { 210 DRAW_PAGE_NOTES_PROPERTIES 211 }; 212 213 #define GRAPHIC_PAGE_PROPERTIES \ 214 { MAP_CHAR_LEN(UNO_NAME_PAGE_BOTTOM), WID_PAGE_BOTTOM, &::getCppuType((const sal_Int32*)0), 0, 0}, \ 215 { MAP_CHAR_LEN(UNO_NAME_PAGE_LEFT), WID_PAGE_LEFT, &::getCppuType((const sal_Int32*)0), 0, 0}, \ 216 { MAP_CHAR_LEN(UNO_NAME_PAGE_RIGHT), WID_PAGE_RIGHT, &::getCppuType((const sal_Int32*)0), 0, 0}, \ 217 { MAP_CHAR_LEN(UNO_NAME_PAGE_TOP), WID_PAGE_TOP, &::getCppuType((const sal_Int32*)0), 0, 0}, \ 218 { MAP_CHAR_LEN(UNO_NAME_PAGE_HEIGHT), WID_PAGE_HEIGHT, &::getCppuType((const sal_Int32*)0), 0, 0}, \ 219 { MAP_CHAR_LEN(UNO_NAME_LINKDISPLAYBITMAP), WID_PAGE_LDBITMAP, &ITYPE(awt::XBitmap), beans::PropertyAttribute::READONLY, 0}, \ 220 { MAP_CHAR_LEN(UNO_NAME_LINKDISPLAYNAME), WID_PAGE_LDNAME, &::getCppuType((const OUString*)0), beans::PropertyAttribute::READONLY, 0}, \ 221 { MAP_CHAR_LEN(UNO_NAME_PAGE_NUMBER), WID_PAGE_NUMBER, &::getCppuType((const sal_Int16*)0), beans::PropertyAttribute::READONLY, 0}, \ 222 { MAP_CHAR_LEN(UNO_NAME_PAGE_ORIENTATION), WID_PAGE_ORIENT, &::getCppuType((const view::PaperOrientation*)0),0, 0}, \ 223 { MAP_CHAR_LEN(UNO_NAME_PAGE_WIDTH), WID_PAGE_WIDTH, &::getCppuType((const sal_Int32*)0), 0, 0}, \ 224 { MAP_CHAR_LEN(UNO_NAME_PAGE_PREVIEW), WID_PAGE_PREVIEW, SEQTYPE(::getCppuType((::com::sun::star::uno::Sequence<sal_Int8>*)0)), ::com::sun::star::beans::PropertyAttribute::READONLY, 0}, \ 225 { MAP_CHAR_LEN(UNO_NAME_PAGE_PREVIEWBITMAP), WID_PAGE_PREVIEWBITMAP, SEQTYPE(::getCppuType((::com::sun::star::uno::Sequence<sal_Int8>*)0)), ::com::sun::star::beans::PropertyAttribute::READONLY, 0},\ 226 { MAP_CHAR_LEN(sUNO_Prop_UserDefinedAttributes),WID_PAGE_USERATTRIBS, &::getCppuType((const Reference< ::com::sun::star::container::XNameContainer >*)0) , 0, 0}, \ 227 { MAP_CHAR_LEN(sUNO_Prop_BookmarkURL), WID_PAGE_BOOKMARK, &::getCppuType((const OUString*)0), 0, 0}, \ 228 { MAP_CHAR_LEN("IsBackgroundDark" ), WID_PAGE_ISDARK, &::getBooleanCppuType(), beans::PropertyAttribute::READONLY, 0}, \ 229 { MAP_CHAR_LEN("NavigationOrder"), WID_NAVORDER, &::com::sun::star::container::XIndexAccess::static_type(),0, 0}, \ 230 {0,0,0,0,0,0} 231 232 static const SfxItemPropertyMapEntry aGraphicPagePropertyMap_Impl[] = 233 { 234 { MAP_CHAR_LEN(UNO_NAME_PAGE_BACKGROUND), WID_PAGE_BACK, &ITYPE( beans::XPropertySet), beans::PropertyAttribute::MAYBEVOID,0}, 235 GRAPHIC_PAGE_PROPERTIES 236 }; 237 static const SfxItemPropertyMapEntry aGraphicPagePropertyNoBackMap_Impl[] = 238 { 239 GRAPHIC_PAGE_PROPERTIES 240 }; 241 242 // 243 bool bWithoutBackground = ePageKind != PK_STANDARD && ePageKind != PK_HANDOUT; 244 const SvxItemPropertySet* pRet = 0; 245 if( bImpress ) 246 { 247 if( ePageKind == PK_STANDARD ) 248 { 249 //PK_STANDARD always has a background property 250 static SvxItemPropertySet aDrawPagePropertySet_Impl( aDrawPagePropertyMap_Impl, SdrObject::GetGlobalDrawObjectItemPool() ); 251 pRet = &aDrawPagePropertySet_Impl; 252 } 253 else 254 { 255 if(bWithoutBackground) 256 { 257 static SvxItemPropertySet aDrawPageNotesHandoutPropertyNoBackSet_Impl( aDrawPageNotesHandoutPropertyNoBackMap_Impl, SdrObject::GetGlobalDrawObjectItemPool() ); 258 pRet = &aDrawPageNotesHandoutPropertyNoBackSet_Impl; 259 } 260 else 261 { 262 static SvxItemPropertySet aDrawPageNotesHandoutPropertySet_Impl( aDrawPageNotesHandoutPropertyMap_Impl, SdrObject::GetGlobalDrawObjectItemPool() ); 263 pRet = &aDrawPageNotesHandoutPropertySet_Impl; 264 } 265 } 266 } 267 else 268 { 269 if(bWithoutBackground) 270 { 271 static SvxItemPropertySet aGraphicPagePropertyNoBackSet_Impl( aGraphicPagePropertyNoBackMap_Impl, SdrObject::GetGlobalDrawObjectItemPool() ); 272 pRet = &aGraphicPagePropertyNoBackSet_Impl; 273 } 274 else 275 { 276 static SvxItemPropertySet aGraphicPagePropertySet_Impl( aGraphicPagePropertyMap_Impl, SdrObject::GetGlobalDrawObjectItemPool() ); 277 pRet = &aGraphicPagePropertySet_Impl; 278 } 279 } 280 return pRet; 281 } 282 283 /** this function stores the property map for master pages in impress and draw */ 284 const SvxItemPropertySet* ImplGetMasterPagePropertySet( PageKind ePageKind ) 285 { 286 static const SfxItemPropertyMapEntry aMasterPagePropertyMap_Impl[] = 287 { 288 { MAP_CHAR_LEN(UNO_NAME_PAGE_BACKGROUND), WID_PAGE_BACK, &ITYPE(beans::XPropertySet), 0, 0}, 289 { MAP_CHAR_LEN(UNO_NAME_PAGE_BOTTOM), WID_PAGE_BOTTOM, &::getCppuType((const sal_Int32*)0), 0, 0}, 290 { MAP_CHAR_LEN(UNO_NAME_PAGE_LEFT), WID_PAGE_LEFT, &::getCppuType((const sal_Int32*)0), 0, 0}, 291 { MAP_CHAR_LEN(UNO_NAME_PAGE_RIGHT), WID_PAGE_RIGHT, &::getCppuType((const sal_Int32*)0), 0, 0}, 292 { MAP_CHAR_LEN(UNO_NAME_PAGE_TOP), WID_PAGE_TOP, &::getCppuType((const sal_Int32*)0), 0, 0}, 293 { MAP_CHAR_LEN(UNO_NAME_PAGE_HEIGHT), WID_PAGE_HEIGHT, &::getCppuType((const sal_Int32*)0), 0, 0}, 294 { MAP_CHAR_LEN(UNO_NAME_LINKDISPLAYBITMAP), WID_PAGE_LDBITMAP, &ITYPE(awt::XBitmap), beans::PropertyAttribute::READONLY, 0}, 295 { MAP_CHAR_LEN(UNO_NAME_LINKDISPLAYNAME), WID_PAGE_LDNAME, &::getCppuType((const OUString*)0), beans::PropertyAttribute::READONLY, 0}, 296 { MAP_CHAR_LEN(UNO_NAME_PAGE_NUMBER), WID_PAGE_NUMBER, &::getCppuType((const sal_Int16*)0), beans::PropertyAttribute::READONLY, 0}, 297 { MAP_CHAR_LEN(UNO_NAME_PAGE_ORIENTATION), WID_PAGE_ORIENT, &::getCppuType((const view::PaperOrientation*)0),0, 0}, 298 { MAP_CHAR_LEN(UNO_NAME_PAGE_WIDTH), WID_PAGE_WIDTH, &::getCppuType((const sal_Int32*)0), 0, 0}, 299 { MAP_CHAR_LEN("BackgroundFullSize"), WID_PAGE_BACKFULL, &::getBooleanCppuType(), 0, 0}, 300 { MAP_CHAR_LEN(sUNO_Prop_UserDefinedAttributes),WID_PAGE_USERATTRIBS, &::getCppuType((const Reference< ::com::sun::star::container::XNameContainer >*)0) , 0, 0}, 301 { MAP_CHAR_LEN("IsBackgroundDark" ), WID_PAGE_ISDARK, &::getBooleanCppuType(), beans::PropertyAttribute::READONLY, 0}, 302 {0,0,0,0,0,0} 303 }; 304 305 static const SfxItemPropertyMapEntry aHandoutMasterPagePropertyMap_Impl[] = 306 { 307 { MAP_CHAR_LEN(UNO_NAME_PAGE_BOTTOM), WID_PAGE_BOTTOM, &::getCppuType((const sal_Int32*)0), 0, 0}, 308 { MAP_CHAR_LEN(UNO_NAME_PAGE_LEFT), WID_PAGE_LEFT, &::getCppuType((const sal_Int32*)0), 0, 0}, 309 { MAP_CHAR_LEN(UNO_NAME_PAGE_RIGHT), WID_PAGE_RIGHT, &::getCppuType((const sal_Int32*)0), 0, 0}, 310 { MAP_CHAR_LEN(UNO_NAME_PAGE_TOP), WID_PAGE_TOP, &::getCppuType((const sal_Int32*)0), 0, 0}, 311 { MAP_CHAR_LEN(UNO_NAME_PAGE_HEIGHT), WID_PAGE_HEIGHT, &::getCppuType((const sal_Int32*)0), 0, 0}, 312 { MAP_CHAR_LEN(UNO_NAME_PAGE_ORIENTATION), WID_PAGE_ORIENT, &::getCppuType((const view::PaperOrientation*)0),0, 0}, 313 { MAP_CHAR_LEN(UNO_NAME_PAGE_NUMBER), WID_PAGE_NUMBER, &::getCppuType((const sal_Int16*)0), beans::PropertyAttribute::READONLY, 0}, 314 { MAP_CHAR_LEN(UNO_NAME_PAGE_WIDTH), WID_PAGE_WIDTH, &::getCppuType((const sal_Int32*)0), 0, 0}, 315 { MAP_CHAR_LEN(UNO_NAME_PAGE_LAYOUT), WID_PAGE_LAYOUT, &::getCppuType((const sal_Int16*)0), 0, 0}, 316 { MAP_CHAR_LEN(sUNO_Prop_UserDefinedAttributes),WID_PAGE_USERATTRIBS, &::getCppuType((const Reference< ::com::sun::star::container::XNameContainer >*)0) , 0, 0}, 317 { MAP_CHAR_LEN("IsBackgroundDark" ), WID_PAGE_ISDARK, &::getBooleanCppuType(), beans::PropertyAttribute::READONLY, 0}, 318 { MAP_CHAR_LEN("IsHeaderVisible"), WID_PAGE_HEADERVISIBLE, &::getBooleanCppuType(), 0, 0}, 319 { MAP_CHAR_LEN("HeaderText"), WID_PAGE_HEADERTEXT, &::getCppuType((const OUString*)0), 0, 0}, 320 { MAP_CHAR_LEN("IsFooterVisible"), WID_PAGE_FOOTERVISIBLE, &::getBooleanCppuType(), 0, 0}, 321 { MAP_CHAR_LEN("FooterText"), WID_PAGE_FOOTERTEXT, &::getCppuType((const OUString*)0), 0, 0}, 322 { MAP_CHAR_LEN("IsPageNumberVisible"), WID_PAGE_PAGENUMBERVISIBLE, &::getBooleanCppuType(), 0, 0}, 323 { MAP_CHAR_LEN("IsDateTimeVisible"), WID_PAGE_DATETIMEVISIBLE, &::getBooleanCppuType(), 0, 0}, 324 { MAP_CHAR_LEN("IsDateTimeFixed"), WID_PAGE_DATETIMEFIXED, &::getBooleanCppuType(), 0, 0}, 325 { MAP_CHAR_LEN("DateTimeText"), WID_PAGE_DATETIMETEXT, &::getCppuType((const OUString*)0), 0, 0}, 326 { MAP_CHAR_LEN("DateTimeFormat"), WID_PAGE_DATETIMEFORMAT, &::getCppuType((const sal_Int32*)0), 0, 0}, 327 {0,0,0,0,0,0} 328 }; 329 330 const SvxItemPropertySet* pRet = 0; 331 if( ePageKind == PK_HANDOUT ) 332 { 333 static SvxItemPropertySet aHandoutMasterPagePropertySet_Impl( aHandoutMasterPagePropertyMap_Impl, SdrObject::GetGlobalDrawObjectItemPool() ); 334 pRet = &aHandoutMasterPagePropertySet_Impl; 335 } 336 else 337 { 338 static SvxItemPropertySet aMasterPagePropertySet_Impl( aMasterPagePropertyMap_Impl, SdrObject::GetGlobalDrawObjectItemPool() ); 339 pRet = &aMasterPagePropertySet_Impl; 340 } 341 return pRet; 342 } 343 344 const ::com::sun::star::uno::Sequence< sal_Int8 > & SdGenericDrawPage::getUnoTunnelId() throw() 345 { 346 static ::com::sun::star::uno::Sequence< sal_Int8 > * pSeq = 0; 347 if( !pSeq ) 348 { 349 ::osl::Guard< ::osl::Mutex > aGuard( ::osl::Mutex::getGlobalMutex() ); 350 if( !pSeq ) 351 { 352 static ::com::sun::star::uno::Sequence< sal_Int8 > aSeq( 16 ); 353 rtl_createUuid( (sal_uInt8*)aSeq.getArray(), 0, sal_True ); 354 pSeq = &aSeq; 355 } 356 } 357 return *pSeq; 358 } 359 360 sal_Int64 SAL_CALL SdGenericDrawPage::getSomething( const ::com::sun::star::uno::Sequence< sal_Int8 >& rId ) throw(::com::sun::star::uno::RuntimeException) 361 { 362 if( rId.getLength() == 16 && 0 == rtl_compareMemory( getUnoTunnelId().getConstArray(), 363 rId.getConstArray(), 16 ) ) 364 { 365 return sal::static_int_cast<sal_Int64>(reinterpret_cast<sal_IntPtr>(this)); 366 } 367 else 368 { 369 return SvxFmDrawPage::getSomething( rId ); 370 } 371 } 372 373 /*********************************************************************** 374 * * 375 ***********************************************************************/ 376 SdGenericDrawPage::SdGenericDrawPage( SdXImpressDocument* _pModel, SdPage* pInPage, const SvxItemPropertySet* _pSet ) throw() 377 : SvxFmDrawPage( (SdrPage*) pInPage ), 378 SdUnoSearchReplaceShape(this), 379 mpModel ( _pModel ), 380 mpSdrModel(0), 381 mnTempPageNumber(0), 382 mpPropSet ( _pSet ), 383 mbIsImpressDocument(false) 384 { 385 mpSdrModel = SvxFmDrawPage::mpModel; 386 if( mpModel ) 387 mbIsImpressDocument = mpModel->IsImpressDocument() ? true : false; 388 389 } 390 391 SdGenericDrawPage::~SdGenericDrawPage() throw() 392 { 393 } 394 395 void SdGenericDrawPage::throwIfDisposed() const throw (::com::sun::star::uno::RuntimeException ) 396 { 397 if( (SvxFmDrawPage::mpModel == 0) || (mpModel == 0) || (SvxFmDrawPage::mpPage == 0) ) 398 throw lang::DisposedException(); 399 } 400 401 SdXImpressDocument* SdGenericDrawPage::GetModel() const 402 { 403 if( mpSdrModel != SvxFmDrawPage::mpModel ) 404 { 405 const_cast< SdGenericDrawPage* >(this)->mpSdrModel = SvxFmDrawPage::mpModel; 406 if( mpSdrModel ) 407 { 408 uno::Reference< uno::XInterface > xModel( SvxFmDrawPage::mpModel->getUnoModel() ); 409 const_cast< SdGenericDrawPage*>(this)->mpModel = SdXImpressDocument::getImplementation( xModel ); 410 if( mpModel ) 411 const_cast< SdGenericDrawPage*>(this)->mbIsImpressDocument = mpModel->IsImpressDocument() ? true : false; 412 } 413 else 414 { 415 const_cast< SdGenericDrawPage* >(this)->mpModel = 0; 416 } 417 } 418 419 return mpModel; 420 } 421 422 // this is called whenever a SdrObject must be created for a empty api shape wrapper 423 SdrObject * SdGenericDrawPage::_CreateSdrObject( const Reference< drawing::XShape >& xShape ) throw() 424 { 425 if( NULL == SvxFmDrawPage::mpPage || !xShape.is() ) 426 return NULL; 427 428 String aType( xShape->getShapeType() ); 429 const String aPrefix( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.presentation.") ); 430 if( aType.CompareTo( aPrefix, aPrefix.Len() ) != 0 ) 431 { 432 SdrObject* pObj = SvxFmDrawPage::_CreateSdrObject( xShape ); 433 if( pObj && ( (pObj->GetObjInventor() != SdrInventor) || (pObj->GetObjIdentifier() != OBJ_PAGE) ) ) 434 { 435 SdDrawDocument* pDoc = (SdDrawDocument*)GetPage()->GetModel(); 436 if( pDoc ) 437 pObj->NbcSetStyleSheet( pDoc->GetDefaultStyleSheet(), sal_True ); 438 } 439 return pObj; 440 } 441 442 aType = aType.Copy( aPrefix.Len() ); 443 444 PresObjKind eObjKind = PRESOBJ_NONE; 445 446 if( aType.EqualsAscii( "TitleTextShape" ) ) 447 { 448 eObjKind = PRESOBJ_TITLE; 449 } 450 else if( aType.EqualsAscii( "OutlinerShape" ) ) 451 { 452 eObjKind = PRESOBJ_OUTLINE; 453 } 454 else if( aType.EqualsAscii( "SubtitleShape" ) ) 455 { 456 eObjKind = PRESOBJ_TEXT; 457 } 458 else if( aType.EqualsAscii( "OLE2Shape" ) ) 459 { 460 eObjKind = PRESOBJ_OBJECT; 461 } 462 else if( aType.EqualsAscii( "ChartShape" ) ) 463 { 464 eObjKind = PRESOBJ_CHART; 465 } 466 else if( aType.EqualsAscii( "CalcShape" ) ) 467 { 468 eObjKind = PRESOBJ_CALC; 469 } 470 else if( aType.EqualsAscii( "TableShape" ) ) 471 { 472 eObjKind = PRESOBJ_TABLE; 473 } 474 else if( aType.EqualsAscii( "GraphicObjectShape" ) ) 475 { 476 #ifdef STARIMAGE_AVAILABLE 477 eObjKind = PRESOBJ_IMAGE; 478 #else 479 eObjKind = PRESOBJ_GRAPHIC; 480 #endif 481 } 482 else if( aType.EqualsAscii( "OrgChartShape" ) ) 483 { 484 eObjKind = PRESOBJ_ORGCHART; 485 } 486 else if( aType.EqualsAscii( "PageShape" ) ) 487 { 488 if( GetPage()->GetPageKind() == PK_NOTES && GetPage()->IsMasterPage() ) 489 eObjKind = PRESOBJ_TITLE; 490 else 491 eObjKind = PRESOBJ_PAGE; 492 } 493 else if( aType.EqualsAscii( "NotesShape" ) ) 494 { 495 eObjKind = PRESOBJ_NOTES; 496 } 497 else if( aType.EqualsAscii( "HandoutShape" ) ) 498 { 499 eObjKind = PRESOBJ_HANDOUT; 500 } 501 else if( aType.EqualsAscii( "FooterShape" ) ) 502 { 503 eObjKind = PRESOBJ_FOOTER; 504 } 505 else if( aType.EqualsAscii( "HeaderShape" ) ) 506 { 507 eObjKind = PRESOBJ_HEADER; 508 } 509 else if( aType.EqualsAscii( "SlideNumberShape" ) ) 510 { 511 eObjKind = PRESOBJ_SLIDENUMBER; 512 } 513 else if( aType.EqualsAscii( "DateTimeShape" ) ) 514 { 515 eObjKind = PRESOBJ_DATETIME; 516 } 517 else if( aType.EqualsAscii( "MediaShape" ) ) 518 { 519 eObjKind = PRESOBJ_MEDIA; 520 } 521 522 Rectangle aRect( eObjKind == PRESOBJ_TITLE ? GetPage()->GetTitleRect() : GetPage()->GetLayoutRect() ); 523 524 const awt::Point aPos( aRect.Left(), aRect.Top() ); 525 xShape->setPosition( aPos ); 526 527 const awt::Size aSize( aRect.GetWidth(), aRect.GetHeight() ); 528 xShape->setSize( aSize ); 529 530 SdrObject *pPresObj = 0; 531 if( (eObjKind == PRESOBJ_TABLE) || (eObjKind == PRESOBJ_MEDIA) ) 532 { 533 pPresObj = SvxFmDrawPage::_CreateSdrObject( xShape ); 534 if( pPresObj ) 535 { 536 SdDrawDocument* pDoc = (SdDrawDocument*)GetPage()->GetModel(); 537 if( pDoc ) 538 pPresObj->NbcSetStyleSheet( pDoc->GetDefaultStyleSheet(), sal_True ); 539 GetPage()->InsertPresObj( pPresObj, eObjKind ); 540 } 541 } 542 else 543 { 544 pPresObj = GetPage()->CreatePresObj( eObjKind, sal_False, aRect, sal_True ); 545 } 546 547 if( pPresObj ) 548 pPresObj->SetUserCall( GetPage() ); 549 550 return pPresObj; 551 } 552 553 // XInterface 554 Any SAL_CALL SdGenericDrawPage::queryInterface( const uno::Type & rType ) 555 throw(uno::RuntimeException) 556 { 557 Any aAny; 558 559 QUERYINT( beans::XPropertySet ); 560 else QUERYINT( container::XNamed ); 561 else QUERYINT( util::XReplaceable ); 562 else QUERYINT( util::XSearchable ); 563 else QUERYINT( document::XLinkTargetSupplier ); 564 else QUERYINT( drawing::XShapeCombiner ); 565 else QUERYINT( drawing::XShapeBinder ); 566 else QUERYINT( beans::XMultiPropertySet ); 567 else if( rType == ITYPE( office::XAnnotationAccess ) ) 568 { 569 return Any( Reference< office::XAnnotationAccess >( this ) ); 570 } 571 else if( rType == ITYPE( XAnimationNodeSupplier ) ) 572 { 573 if( mbIsImpressDocument ) 574 { 575 const PageKind ePageKind = GetPage() ? GetPage()->GetPageKind() : PK_STANDARD; 576 577 if( ePageKind == PK_STANDARD ) 578 return makeAny( Reference< XAnimationNodeSupplier >( this ) ); 579 } 580 } 581 else 582 return SvxDrawPage::queryInterface( rType ); 583 584 return aAny; 585 } 586 587 // XPropertySet 588 Reference< beans::XPropertySetInfo > SAL_CALL SdGenericDrawPage::getPropertySetInfo() 589 throw(uno::RuntimeException) 590 { 591 OGuard aGuard( Application::GetSolarMutex() ); 592 throwIfDisposed(); 593 return mpPropSet->getPropertySetInfo(); 594 } 595 596 void SAL_CALL SdGenericDrawPage::setPropertyValue( const OUString& aPropertyName, const Any& aValue ) 597 throw(beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException) 598 { 599 OGuard aGuard( Application::GetSolarMutex() ); 600 601 throwIfDisposed(); 602 603 const SfxItemPropertySimpleEntry* pEntry = mpPropSet->getPropertyMapEntry(aPropertyName); 604 605 switch( pEntry ? pEntry->nWID : -1 ) 606 { 607 case WID_NAVORDER: 608 setNavigationOrder( aValue ); 609 break; 610 case WID_PAGE_LEFT: 611 case WID_PAGE_RIGHT: 612 case WID_PAGE_TOP: 613 case WID_PAGE_BOTTOM: 614 case WID_PAGE_LAYOUT: 615 case WID_PAGE_DURATION: 616 case WID_PAGE_CHANGE: 617 { 618 sal_Int32 nValue = 0; 619 if(!(aValue >>= nValue)) 620 throw lang::IllegalArgumentException(); 621 622 switch( pEntry->nWID ) 623 { 624 case WID_PAGE_LEFT: 625 SetLftBorder(nValue); 626 break; 627 case WID_PAGE_RIGHT: 628 SetRgtBorder( nValue ); 629 break; 630 case WID_PAGE_TOP: 631 SetUppBorder( nValue ); 632 break; 633 case WID_PAGE_BOTTOM: 634 SetLwrBorder( nValue ); 635 break; 636 case WID_PAGE_CHANGE: 637 GetPage()->SetPresChange( (PresChange)nValue ); 638 break; 639 case WID_PAGE_LAYOUT: 640 GetPage()->SetAutoLayout( (AutoLayout)nValue, sal_True ); 641 break; 642 case WID_PAGE_DURATION: 643 GetPage()->SetTime((sal_uInt32)nValue); 644 break; 645 } 646 break; 647 } 648 case WID_PAGE_WIDTH: 649 { 650 sal_Int32 nWidth = 0; 651 if(!(aValue >>= nWidth)) 652 throw lang::IllegalArgumentException(); 653 654 SetWidth( nWidth ); 655 break; 656 } 657 case WID_PAGE_HEIGHT: 658 { 659 sal_Int32 nHeight = 0; 660 if(!(aValue >>= nHeight)) 661 throw lang::IllegalArgumentException(); 662 663 SetHeight( nHeight ); 664 break; 665 } 666 case WID_PAGE_ORIENT: 667 { 668 sal_Int32 nEnum = 0; 669 if(!::cppu::enum2int( nEnum, aValue )) 670 throw lang::IllegalArgumentException(); 671 672 Orientation eOri = (((view::PaperOrientation)nEnum) == view::PaperOrientation_PORTRAIT)?ORIENTATION_PORTRAIT:ORIENTATION_LANDSCAPE; 673 674 if( eOri != GetPage()->GetOrientation() ) 675 { 676 SdDrawDocument* pDoc = (SdDrawDocument*)GetPage()->GetModel(); 677 const PageKind ePageKind = GetPage()->GetPageKind(); 678 679 sal_uInt16 i, nPageCnt = pDoc->GetMasterSdPageCount(ePageKind); 680 for (i = 0; i < nPageCnt; i++) 681 { 682 SdPage* pPage = pDoc->GetMasterSdPage(i, ePageKind); 683 pPage->SetOrientation( eOri ); 684 } 685 686 nPageCnt = pDoc->GetSdPageCount(ePageKind); 687 688 for (i = 0; i < nPageCnt; i++) 689 { 690 SdPage* pPage = pDoc->GetSdPage(i, ePageKind); 691 pPage->SetOrientation( eOri ); 692 } 693 } 694 break; 695 } 696 case WID_PAGE_EFFECT: 697 { 698 sal_Int32 nEnum = 0; 699 if(!::cppu::enum2int( nEnum, aValue )) 700 throw lang::IllegalArgumentException(); 701 702 GetPage()->SetFadeEffect( (presentation::FadeEffect)nEnum ); 703 break; 704 } 705 case WID_PAGE_BACK: 706 setBackground( aValue ); 707 break; 708 case WID_PAGE_SPEED: 709 { 710 sal_Int32 nEnum = 0; 711 if(!::cppu::enum2int( nEnum, aValue )) 712 throw lang::IllegalArgumentException(); 713 714 GetPage()->setTransitionDuration( nEnum == 0 ? 3.0 : (nEnum == 1 ? 2.0 : 1.0 ) ); 715 break; 716 } 717 case WID_PAGE_VISIBLE : 718 { 719 sal_Bool bVisible = sal_False; 720 if( ! ( aValue >>= bVisible ) ) 721 throw lang::IllegalArgumentException(); 722 GetPage()->SetExcluded( bVisible == sal_False ); 723 break; 724 } 725 case WID_PAGE_SOUNDFILE : 726 { 727 OUString aURL; 728 if( aValue >>= aURL ) 729 { 730 GetPage()->SetSoundFile( aURL ); 731 GetPage()->SetSound( aURL.getLength() != 0 ? sal_True : sal_False ); 732 break; 733 } 734 else 735 { 736 sal_Bool bStopSound = sal_False; 737 if( aValue >>= bStopSound ) 738 { 739 GetPage()->SetStopSound( bStopSound ? true : false ); 740 break; 741 } 742 } 743 744 745 throw lang::IllegalArgumentException(); 746 } 747 case WID_LOOP_SOUND: 748 { 749 sal_Bool bLoop = sal_False; 750 if( ! (aValue >>= bLoop) ) 751 throw lang::IllegalArgumentException(); 752 753 GetPage()->SetLoopSound( bLoop ? true : false ); 754 break; 755 } 756 case WID_PAGE_BACKFULL: 757 { 758 sal_Bool bFullSize = sal_False; 759 if( ! ( aValue >>= bFullSize ) ) 760 throw lang::IllegalArgumentException(); 761 GetPage()->SetBackgroundFullSize( bFullSize ); 762 break; 763 } 764 case WID_PAGE_BACKVIS: 765 { 766 sal_Bool bVisible = sal_False; 767 if( ! ( aValue >>= bVisible ) ) 768 throw lang::IllegalArgumentException(); 769 770 SdrPage* pPage = GetPage(); 771 if( pPage ) 772 { 773 SdDrawDocument* pDoc = (SdDrawDocument*)pPage->GetModel(); 774 if( pDoc->GetMasterPageCount() ) 775 { 776 SdrLayerAdmin& rLayerAdmin = pDoc->GetLayerAdmin(); 777 SetOfByte aVisibleLayers = pPage->TRG_GetMasterPageVisibleLayers(); 778 aVisibleLayers.Set(rLayerAdmin.GetLayerID(String(SdResId(STR_LAYER_BCKGRND)), sal_False), bVisible); 779 pPage->TRG_SetMasterPageVisibleLayers(aVisibleLayers); 780 } 781 } 782 break; 783 } 784 case WID_PAGE_BACKOBJVIS: 785 { 786 sal_Bool bVisible = sal_False; 787 if( ! ( aValue >>= bVisible ) ) 788 throw lang::IllegalArgumentException(); 789 790 SdrPage* pPage = GetPage(); 791 if( pPage ) 792 { 793 SdDrawDocument* pDoc = (SdDrawDocument*)pPage->GetModel(); 794 if( pDoc->GetMasterPageCount() ) 795 { 796 SdrLayerAdmin& rLayerAdmin = pDoc->GetLayerAdmin(); 797 SetOfByte aVisibleLayers = pPage->TRG_GetMasterPageVisibleLayers(); 798 aVisibleLayers.Set(rLayerAdmin.GetLayerID(String(SdResId(STR_LAYER_BCKGRNDOBJ)), sal_False), bVisible); 799 pPage->TRG_SetMasterPageVisibleLayers(aVisibleLayers); 800 } 801 } 802 803 break; 804 } 805 case WID_PAGE_USERATTRIBS: 806 { 807 if( !GetPage()->setAlienAttributes( aValue ) ) 808 throw lang::IllegalArgumentException(); 809 break; 810 } 811 case WID_PAGE_BOOKMARK: 812 { 813 OUString aBookmarkURL; 814 if( ! ( aValue >>= aBookmarkURL ) ) 815 throw lang::IllegalArgumentException(); 816 817 setBookmarkURL( aBookmarkURL ); 818 break; 819 } 820 821 case WID_PAGE_HEADERVISIBLE: 822 case WID_PAGE_HEADERTEXT: 823 case WID_PAGE_FOOTERVISIBLE: 824 case WID_PAGE_FOOTERTEXT: 825 case WID_PAGE_PAGENUMBERVISIBLE: 826 case WID_PAGE_DATETIMEVISIBLE: 827 case WID_PAGE_DATETIMEFIXED: 828 case WID_PAGE_DATETIMETEXT: 829 case WID_PAGE_DATETIMEFORMAT: 830 { 831 sd::HeaderFooterSettings aHeaderFooterSettings( GetPage()->getHeaderFooterSettings() ); 832 833 switch( pEntry->nWID ) 834 { 835 case WID_PAGE_HEADERVISIBLE: 836 { 837 sal_Bool bVisible = sal_False; 838 if( ! ( aValue >>= bVisible ) ) 839 throw lang::IllegalArgumentException(); 840 841 aHeaderFooterSettings.mbHeaderVisible = bVisible; 842 break; 843 } 844 case WID_PAGE_HEADERTEXT: 845 { 846 OUString aText; 847 if( ! ( aValue >>= aText ) ) 848 throw lang::IllegalArgumentException(); 849 850 aHeaderFooterSettings.maHeaderText = aText; 851 break; 852 } 853 case WID_PAGE_FOOTERVISIBLE: 854 { 855 sal_Bool bVisible = sal_False; 856 if( ! ( aValue >>= bVisible ) ) 857 throw lang::IllegalArgumentException(); 858 859 aHeaderFooterSettings.mbFooterVisible = bVisible; 860 break; 861 } 862 case WID_PAGE_FOOTERTEXT: 863 { 864 OUString aText; 865 if( ! ( aValue >>= aText ) ) 866 throw lang::IllegalArgumentException(); 867 868 aHeaderFooterSettings.maFooterText = aText; 869 break; 870 } 871 case WID_PAGE_PAGENUMBERVISIBLE: 872 { 873 sal_Bool bVisible = sal_False; 874 if( ! ( aValue >>= bVisible ) ) 875 throw lang::IllegalArgumentException(); 876 877 aHeaderFooterSettings.mbSlideNumberVisible = bVisible; 878 break; 879 } 880 case WID_PAGE_DATETIMEVISIBLE: 881 { 882 sal_Bool bVisible = sal_False; 883 if( ! ( aValue >>= bVisible ) ) 884 throw lang::IllegalArgumentException(); 885 886 aHeaderFooterSettings.mbDateTimeVisible = bVisible; 887 break; 888 } 889 case WID_PAGE_DATETIMEFIXED: 890 { 891 sal_Bool bVisible = sal_False; 892 if( ! ( aValue >>= bVisible ) ) 893 throw lang::IllegalArgumentException(); 894 895 aHeaderFooterSettings.mbDateTimeIsFixed = bVisible; 896 break; 897 } 898 case WID_PAGE_DATETIMETEXT: 899 { 900 OUString aText; 901 if( ! ( aValue >>= aText ) ) 902 throw lang::IllegalArgumentException(); 903 904 aHeaderFooterSettings.maDateTimeText = aText; 905 break; 906 } 907 case WID_PAGE_DATETIMEFORMAT: 908 { 909 sal_Int32 nValue = 0; 910 if( ! ( aValue >>= nValue ) ) 911 throw lang::IllegalArgumentException(); 912 913 aHeaderFooterSettings.meDateTimeFormat = nValue; 914 break; 915 } 916 } 917 918 if( !(aHeaderFooterSettings == GetPage()->getHeaderFooterSettings()) ) 919 GetPage()->setHeaderFooterSettings( aHeaderFooterSettings ); 920 921 break; 922 } 923 924 case WID_PAGE_NUMBER: 925 if( (GetPage()->GetPageKind() == PK_HANDOUT) && !GetPage()->IsMasterPage() ) 926 { 927 if( !(aValue >>= mnTempPageNumber) ) 928 throw lang::IllegalArgumentException(); 929 930 break; 931 } 932 throw beans::PropertyVetoException(); 933 934 case WID_PAGE_LDBITMAP: 935 case WID_PAGE_LDNAME: 936 case WID_PAGE_ISDARK: 937 throw beans::PropertyVetoException(); 938 939 case WID_TRANSITION_TYPE: 940 { 941 sal_Int16 nValue = 0; 942 if( ! ( aValue >>= nValue ) ) 943 throw lang::IllegalArgumentException(); 944 945 GetPage()->setTransitionType( nValue ); 946 break; 947 } 948 949 case WID_TRANSITION_SUBTYPE: 950 { 951 sal_Int16 nValue = 0; 952 if( ! ( aValue >>= nValue ) ) 953 throw lang::IllegalArgumentException(); 954 955 GetPage()->setTransitionSubtype( nValue ); 956 break; 957 } 958 959 case WID_TRANSITION_DIRECTION: 960 { 961 sal_Bool bValue = sal_False; 962 if( ! ( aValue >>= bValue ) ) 963 throw lang::IllegalArgumentException(); 964 965 GetPage()->setTransitionDirection( bValue ); 966 break; 967 } 968 969 case WID_TRANSITION_FADE_COLOR: 970 { 971 sal_Int32 nValue = 0; 972 if( ! ( aValue >>= nValue ) ) 973 throw lang::IllegalArgumentException(); 974 975 GetPage()->setTransitionFadeColor( nValue ); 976 break; 977 } 978 979 case WID_TRANSITION_DURATION: 980 { 981 double fValue = 0.0; 982 if( ! ( aValue >>= fValue ) ) 983 throw lang::IllegalArgumentException(); 984 985 GetPage()->setTransitionDuration( fValue ); 986 break; 987 } 988 989 default: 990 throw beans::UnknownPropertyException(); 991 } 992 993 GetModel()->SetModified(); 994 } 995 996 /*********************************************************************** 997 * * 998 ***********************************************************************/ 999 Any SAL_CALL SdGenericDrawPage::getPropertyValue( const OUString& PropertyName ) 1000 throw(beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) 1001 { 1002 OGuard aGuard( Application::GetSolarMutex() ); 1003 1004 throwIfDisposed(); 1005 1006 uno::Any aAny; 1007 1008 const SfxItemPropertySimpleEntry* pEntry = mpPropSet->getPropertyMapEntry(PropertyName); 1009 1010 switch( pEntry ? pEntry->nWID : -1 ) 1011 { 1012 case WID_NAVORDER: 1013 aAny = getNavigationOrder(); 1014 break; 1015 case WID_PAGE_LEFT: 1016 aAny <<= (sal_Int32)( GetPage()->GetLftBorder() ); 1017 break; 1018 case WID_PAGE_RIGHT: 1019 aAny <<= (sal_Int32)( GetPage()->GetRgtBorder() ); 1020 break; 1021 case WID_PAGE_TOP: 1022 aAny <<= (sal_Int32)( GetPage()->GetUppBorder() ); 1023 break; 1024 case WID_PAGE_BOTTOM: 1025 aAny <<= (sal_Int32)( GetPage()->GetLwrBorder() ); 1026 break; 1027 case WID_PAGE_WIDTH: 1028 aAny <<= (sal_Int32)( GetPage()->GetSize().getWidth() ); 1029 break; 1030 case WID_PAGE_HEIGHT: 1031 aAny <<= (sal_Int32)( GetPage()->GetSize().getHeight() ); 1032 break; 1033 case WID_PAGE_ORIENT: 1034 aAny = ::cppu::int2enum( (sal_Int32)((GetPage()->GetOrientation() == ORIENTATION_PORTRAIT)? view::PaperOrientation_PORTRAIT: view::PaperOrientation_LANDSCAPE), ::getCppuType((const view::PaperOrientation*)0) ); 1035 break; 1036 case WID_PAGE_EFFECT: 1037 aAny = ::cppu::int2enum( (sal_Int32)GetPage()->GetFadeEffect(), ::getCppuType((const presentation::FadeEffect*)0) ); 1038 break; 1039 case WID_PAGE_CHANGE: 1040 aAny <<= (sal_Int32)( GetPage()->GetPresChange() ); 1041 break; 1042 case WID_PAGE_SPEED: 1043 { 1044 const double fDuration = GetPage()->getTransitionDuration(); 1045 aAny = ::cppu::int2enum( fDuration < 2.0 ? 2 : (fDuration > 2.0 ? 0 : 1), ::getCppuType((const presentation::AnimationSpeed*)0) ); 1046 } 1047 break; 1048 case WID_PAGE_LAYOUT: 1049 aAny <<= (sal_Int16)( GetPage()->GetAutoLayout() ); 1050 break; 1051 case WID_PAGE_NUMBER: 1052 { 1053 const sal_uInt16 nPageNumber(GetPage()->GetPageNum()); 1054 1055 if(nPageNumber > 0) 1056 { 1057 // for all other pages calculate the number 1058 aAny <<= (sal_Int16)((sal_uInt16)((nPageNumber-1)>>1) + 1); 1059 } 1060 else 1061 { 1062 aAny <<= mnTempPageNumber; 1063 } 1064 } 1065 break; 1066 case WID_PAGE_DURATION: 1067 aAny <<= (sal_Int32)(GetPage()->GetTime()); 1068 break; 1069 case WID_PAGE_LDNAME: 1070 { 1071 const OUString aName( GetPage()->GetName() ); 1072 aAny <<= aName; 1073 break; 1074 } 1075 case WID_PAGE_LDBITMAP: 1076 { 1077 sal_Bool bHC = Application::GetSettings().GetStyleSettings().GetHighContrastMode(); 1078 Reference< awt::XBitmap > xBitmap( 1079 VCLUnoHelper::CreateBitmap( BitmapEx( SdResId( bHC ? BMP_PAGE_H : BMP_PAGE ) ) ) ); 1080 aAny <<= xBitmap; 1081 } 1082 break; 1083 case WID_PAGE_BACK: 1084 getBackground( aAny ); 1085 break; 1086 case WID_PAGE_PREVIEW : 1087 { 1088 SdDrawDocument* pDoc = (SdDrawDocument*)GetPage()->GetModel(); 1089 if ( pDoc ) 1090 { 1091 ::sd::DrawDocShell* pDocShell = pDoc->GetDocSh(); 1092 if ( pDocShell ) 1093 { 1094 sal_uInt16 nPgNum = 0; 1095 sal_uInt16 nPageCount = pDoc->GetSdPageCount( PK_STANDARD ); 1096 sal_uInt16 nPageNumber = (sal_uInt16)( ( GetPage()->GetPageNum() - 1 ) >> 1 ); 1097 while( nPgNum < nPageCount ) 1098 { 1099 pDoc->SetSelected( pDoc->GetSdPage( nPgNum, PK_STANDARD ), nPgNum == nPageNumber ); 1100 nPgNum++; 1101 } 1102 ::boost::shared_ptr<GDIMetaFile> pMetaFile = 1103 pDocShell->GetPreviewMetaFile(); 1104 if ( pMetaFile ) 1105 { 1106 Point aPoint; 1107 Size aSize( GetPage()->GetSize() ); 1108 pMetaFile->AddAction( (MetaAction*) new MetaFillColorAction( COL_WHITE, sal_True ), 0 ); 1109 pMetaFile->AddAction( (MetaAction*) new MetaRectAction( Rectangle( aPoint, aSize ) ), 1 ); 1110 pMetaFile->SetPrefMapMode( MAP_100TH_MM ); 1111 pMetaFile->SetPrefSize( aSize ); 1112 1113 SvMemoryStream aDestStrm( 65535, 65535 ); 1114 ConvertGDIMetaFileToWMF( *pMetaFile, aDestStrm, NULL, sal_False ); 1115 Sequence<sal_Int8> aSeq( (sal_Int8*)aDestStrm.GetData(), aDestStrm.Tell() ); 1116 aAny <<= aSeq; 1117 } 1118 } 1119 } 1120 } 1121 break; 1122 1123 case WID_PAGE_PREVIEWBITMAP : 1124 { 1125 SdDrawDocument* pDoc = (SdDrawDocument*)GetPage()->GetModel(); 1126 if ( pDoc ) 1127 { 1128 ::sd::DrawDocShell* pDocShell = pDoc->GetDocSh(); 1129 if ( pDocShell ) 1130 { 1131 sal_uInt16 nPgNum = 0; 1132 sal_uInt16 nPageCount = pDoc->GetSdPageCount( PK_STANDARD ); 1133 sal_uInt16 nPageNumber = (sal_uInt16)( ( GetPage()->GetPageNum() - 1 ) >> 1 ); 1134 while( nPgNum < nPageCount ) 1135 { 1136 pDoc->SetSelected( pDoc->GetSdPage( nPgNum, PK_STANDARD ), nPgNum == nPageNumber ); 1137 nPgNum++; 1138 } 1139 ::boost::shared_ptr<GDIMetaFile> pMetaFile = 1140 pDocShell->GetPreviewMetaFile(); 1141 BitmapEx aBitmap; 1142 if ( pMetaFile && pMetaFile->CreateThumbnail( 160, /* magic value taken from GraphicHelper::getThumbnailFormatFromGDI_Impl() */ 1143 aBitmap ) ) 1144 { 1145 SvMemoryStream aMemStream; 1146 aBitmap.GetBitmap().Write( aMemStream, sal_False, sal_False ); 1147 uno::Sequence<sal_Int8> aSeq( (sal_Int8*)aMemStream.GetData(), aMemStream.Tell() ); 1148 aAny <<= aSeq; 1149 } 1150 } 1151 } 1152 } 1153 break; 1154 1155 case WID_PAGE_VISIBLE : 1156 { 1157 sal_Bool bVisible = GetPage()->IsExcluded() == sal_False; 1158 aAny <<= Any( &bVisible, ::getBooleanCppuType() ); 1159 break; 1160 } 1161 1162 case WID_PAGE_SOUNDFILE : 1163 { 1164 if( GetPage()->IsStopSound() ) 1165 { 1166 aAny <<= sal_True; 1167 } 1168 else 1169 { 1170 OUString aURL; 1171 if( GetPage()->IsSoundOn() ) 1172 aURL = GetPage()->GetSoundFile(); 1173 aAny <<= aURL; 1174 } 1175 break; 1176 } 1177 case WID_LOOP_SOUND: 1178 { 1179 aAny <<= (sal_Bool)GetPage()->IsLoopSound(); 1180 break; 1181 } 1182 case WID_PAGE_BACKFULL: 1183 { 1184 sal_Bool bFullSize = GetPage()->IsBackgroundFullSize(); 1185 aAny = Any( &bFullSize, ::getBooleanCppuType() ); 1186 break; 1187 } 1188 case WID_PAGE_BACKVIS: 1189 { 1190 SdrPage* pPage = GetPage(); 1191 if( pPage ) 1192 { 1193 SdDrawDocument* pDoc = (SdDrawDocument*)pPage->GetModel(); 1194 if( pDoc->GetMasterPageCount() ) 1195 { 1196 SdrLayerAdmin& rLayerAdmin = pDoc->GetLayerAdmin(); 1197 SetOfByte aVisibleLayers = pPage->TRG_GetMasterPageVisibleLayers(); 1198 aAny <<= (sal_Bool)aVisibleLayers.IsSet(rLayerAdmin.GetLayerID(String(SdResId(STR_LAYER_BCKGRND)), sal_False)); 1199 } 1200 else 1201 { 1202 aAny <<= (sal_Bool)sal_False; 1203 } 1204 } 1205 break; 1206 } 1207 case WID_PAGE_BACKOBJVIS: 1208 { 1209 SdrPage* pPage = GetPage(); 1210 if( pPage ) 1211 { 1212 SdDrawDocument* pDoc = (SdDrawDocument*)pPage->GetModel(); 1213 if( pDoc->GetMasterPageCount() ) 1214 { 1215 SdrLayerAdmin& rLayerAdmin = pDoc->GetLayerAdmin(); 1216 SetOfByte aVisibleLayers = pPage->TRG_GetMasterPageVisibleLayers(); 1217 aAny <<= (sal_Bool)aVisibleLayers.IsSet(rLayerAdmin.GetLayerID(String(SdResId(STR_LAYER_BCKGRNDOBJ)), sal_False)); 1218 } 1219 else 1220 { 1221 aAny <<= (sal_Bool)sal_False; 1222 } 1223 } 1224 break; 1225 } 1226 case WID_PAGE_USERATTRIBS: 1227 { 1228 GetPage()->getAlienAttributes( aAny ); 1229 break; 1230 } 1231 case WID_PAGE_BOOKMARK: 1232 { 1233 aAny <<= getBookmarkURL(); 1234 break; 1235 } 1236 case WID_PAGE_ISDARK: 1237 { 1238 aAny <<= (sal_Bool)GetPage()->GetPageBackgroundColor().IsDark(); 1239 break; 1240 } 1241 case WID_PAGE_HEADERVISIBLE: 1242 aAny <<= (sal_Bool)GetPage()->getHeaderFooterSettings().mbHeaderVisible; 1243 break; 1244 case WID_PAGE_HEADERTEXT: 1245 { 1246 const OUString aText( GetPage()->getHeaderFooterSettings().maHeaderText ); 1247 aAny <<= aText; 1248 } 1249 break; 1250 case WID_PAGE_FOOTERVISIBLE: 1251 aAny <<= (sal_Bool)GetPage()->getHeaderFooterSettings().mbFooterVisible; 1252 break; 1253 case WID_PAGE_FOOTERTEXT: 1254 { 1255 const OUString aText( GetPage()->getHeaderFooterSettings().maFooterText ); 1256 aAny <<= aText; 1257 } 1258 break; 1259 case WID_PAGE_PAGENUMBERVISIBLE: 1260 aAny <<= (sal_Bool)GetPage()->getHeaderFooterSettings().mbSlideNumberVisible; 1261 break; 1262 case WID_PAGE_DATETIMEVISIBLE: 1263 aAny <<= (sal_Bool)GetPage()->getHeaderFooterSettings().mbDateTimeVisible; 1264 break; 1265 case WID_PAGE_DATETIMEFIXED: 1266 aAny <<= (sal_Bool)GetPage()->getHeaderFooterSettings().mbDateTimeIsFixed; 1267 break; 1268 case WID_PAGE_DATETIMETEXT: 1269 { 1270 const OUString aText( GetPage()->getHeaderFooterSettings().maDateTimeText ); 1271 aAny <<= aText; 1272 } 1273 break; 1274 case WID_PAGE_DATETIMEFORMAT: 1275 aAny <<= (sal_Int32)GetPage()->getHeaderFooterSettings().meDateTimeFormat; 1276 break; 1277 1278 case WID_TRANSITION_TYPE: 1279 aAny <<= GetPage()->getTransitionType(); 1280 break; 1281 1282 case WID_TRANSITION_SUBTYPE: 1283 aAny <<= GetPage()->getTransitionSubtype(); 1284 break; 1285 1286 case WID_TRANSITION_DIRECTION: 1287 aAny <<= GetPage()->getTransitionDirection(); 1288 break; 1289 1290 case WID_TRANSITION_FADE_COLOR: 1291 aAny <<= GetPage()->getTransitionFadeColor(); 1292 break; 1293 1294 case WID_TRANSITION_DURATION: 1295 aAny <<= GetPage()->getTransitionDuration(); 1296 break; 1297 1298 default: 1299 throw beans::UnknownPropertyException(); 1300 } 1301 return aAny; 1302 } 1303 1304 void SAL_CALL SdGenericDrawPage::addPropertyChangeListener( const OUString& , const Reference< beans::XPropertyChangeListener >& ) throw(beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) {} 1305 void SAL_CALL SdGenericDrawPage::removePropertyChangeListener( const OUString& , const Reference< beans::XPropertyChangeListener >& ) throw(beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) {} 1306 void SAL_CALL SdGenericDrawPage::addVetoableChangeListener( const OUString& , const Reference< beans::XVetoableChangeListener >& ) throw(beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) {} 1307 void SAL_CALL SdGenericDrawPage::removeVetoableChangeListener( const OUString& , const Reference< beans::XVetoableChangeListener >& ) throw(beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) {} 1308 1309 // XMultiPropertySet 1310 void SAL_CALL SdGenericDrawPage::setPropertyValues( const Sequence< OUString >& aPropertyNames, const Sequence< Any >& aValues ) throw (beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, RuntimeException ) 1311 { 1312 if( aPropertyNames.getLength() != aValues.getLength() ) 1313 throw lang::IllegalArgumentException(); 1314 1315 const OUString* pNames = aPropertyNames.getConstArray(); 1316 const Any* pValues = aValues.getConstArray(); 1317 sal_uInt32 nCount = aValues.getLength(); 1318 while( nCount-- ) 1319 { 1320 try 1321 { 1322 setPropertyValue( *pNames++, *pValues++ ); 1323 } 1324 catch( beans::UnknownPropertyException& ) 1325 { 1326 // ignore for multi property set 1327 // todo: optimize this! 1328 } 1329 } 1330 } 1331 1332 Sequence< Any > SAL_CALL SdGenericDrawPage::getPropertyValues( const Sequence< OUString >& aPropertyNames ) throw (RuntimeException) 1333 { 1334 const OUString* pNames = aPropertyNames.getConstArray(); 1335 sal_uInt32 nCount = aPropertyNames.getLength(); 1336 Sequence< Any > aValues( nCount ); 1337 Any* pValues = aValues.getArray(); 1338 while( nCount-- ) 1339 { 1340 Any aValue; 1341 try 1342 { 1343 aValue = getPropertyValue( *pNames++ ); 1344 } 1345 catch( beans::UnknownPropertyException& ) 1346 { 1347 // ignore for multi property set 1348 // todo: optimize this! 1349 } 1350 *pValues++ = aValue; 1351 } 1352 return aValues; 1353 } 1354 1355 void SAL_CALL SdGenericDrawPage::addPropertiesChangeListener( const Sequence< OUString >& , const Reference< beans::XPropertiesChangeListener >& ) throw (RuntimeException) 1356 { 1357 } 1358 1359 void SAL_CALL SdGenericDrawPage::removePropertiesChangeListener( const Reference< beans::XPropertiesChangeListener >& ) throw (RuntimeException) 1360 { 1361 } 1362 1363 void SAL_CALL SdGenericDrawPage::firePropertiesChangeEvent( const Sequence< OUString >& , const Reference< beans::XPropertiesChangeListener >& ) throw (RuntimeException) 1364 { 1365 } 1366 1367 Reference< drawing::XShape > SdGenericDrawPage::_CreateShape( SdrObject *pObj ) const throw() 1368 { 1369 DBG_ASSERT( GetPage(), "SdGenericDrawPage::_CreateShape(), can't create shape for disposed page!" ); 1370 DBG_ASSERT( pObj, "SdGenericDrawPage::_CreateShape(), invalid call with pObj == 0!" ); 1371 1372 if( GetPage() && pObj ) 1373 { 1374 PresObjKind eKind = GetPage()->GetPresObjKind(pObj); 1375 1376 SvxShape* pShape = NULL; 1377 1378 if(pObj->GetObjInventor() == SdrInventor) 1379 { 1380 sal_uInt32 nInventor = pObj->GetObjIdentifier(); 1381 switch( nInventor ) 1382 { 1383 case OBJ_TITLETEXT: 1384 pShape = new SvxShapeText( pObj ); 1385 if( GetPage()->GetPageKind() == PK_NOTES && GetPage()->IsMasterPage() ) 1386 { 1387 // fake a empty PageShape if its a title shape on the master page 1388 pShape->SetShapeType(OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.presentation.PageShape"))); 1389 } 1390 else 1391 { 1392 pShape->SetShapeType(OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.presentation.TitleTextShape"))); 1393 } 1394 eKind = PRESOBJ_NONE; 1395 break; 1396 case OBJ_OUTLINETEXT: 1397 pShape = new SvxShapeText( pObj ); 1398 pShape->SetShapeType(OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.presentation.OutlinerShape"))); 1399 eKind = PRESOBJ_NONE; 1400 break; 1401 } 1402 } 1403 1404 Reference< drawing::XShape > xShape( pShape ); 1405 1406 if(!xShape.is()) 1407 xShape = SvxFmDrawPage::_CreateShape( pObj ); 1408 1409 1410 if( eKind != PRESOBJ_NONE ) 1411 { 1412 String aShapeType( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.presentation.")); 1413 1414 switch( eKind ) 1415 { 1416 case PRESOBJ_TITLE: 1417 aShapeType += String( RTL_CONSTASCII_USTRINGPARAM("TitleTextShape") ); 1418 break; 1419 case PRESOBJ_OUTLINE: 1420 aShapeType += String( RTL_CONSTASCII_USTRINGPARAM("OutlinerShape") ); 1421 break; 1422 case PRESOBJ_TEXT: 1423 aShapeType += String( RTL_CONSTASCII_USTRINGPARAM("SubtitleShape") ); 1424 break; 1425 case PRESOBJ_GRAPHIC: 1426 aShapeType += String( RTL_CONSTASCII_USTRINGPARAM("GraphicObjectShape") ); 1427 break; 1428 case PRESOBJ_OBJECT: 1429 aShapeType += String( RTL_CONSTASCII_USTRINGPARAM("OLE2Shape") ); 1430 break; 1431 case PRESOBJ_CHART: 1432 aShapeType += String( RTL_CONSTASCII_USTRINGPARAM("ChartShape") ); 1433 break; 1434 case PRESOBJ_ORGCHART: 1435 aShapeType += String( RTL_CONSTASCII_USTRINGPARAM("OrgChartShape") ); 1436 break; 1437 case PRESOBJ_CALC: 1438 aShapeType += String( RTL_CONSTASCII_USTRINGPARAM("CalcShape") ); 1439 break; 1440 case PRESOBJ_TABLE: 1441 aShapeType += String( RTL_CONSTASCII_USTRINGPARAM("TableShape") ); 1442 break; 1443 case PRESOBJ_MEDIA: 1444 aShapeType += String( RTL_CONSTASCII_USTRINGPARAM("MediaShape") ); 1445 break; 1446 case PRESOBJ_PAGE: 1447 aShapeType += String( RTL_CONSTASCII_USTRINGPARAM("PageShape") ); 1448 break; 1449 case PRESOBJ_HANDOUT: 1450 aShapeType += String( RTL_CONSTASCII_USTRINGPARAM("HandoutShape") ); 1451 break; 1452 case PRESOBJ_NOTES: 1453 aShapeType += String( RTL_CONSTASCII_USTRINGPARAM("NotesShape") ); 1454 break; 1455 case PRESOBJ_FOOTER: 1456 aShapeType += String( RTL_CONSTASCII_USTRINGPARAM("FooterShape") ); 1457 break; 1458 case PRESOBJ_HEADER: 1459 aShapeType += String( RTL_CONSTASCII_USTRINGPARAM("HeaderShape") ); 1460 break; 1461 case PRESOBJ_SLIDENUMBER: 1462 aShapeType += String( RTL_CONSTASCII_USTRINGPARAM("SlideNumberShape") ); 1463 break; 1464 case PRESOBJ_DATETIME: 1465 aShapeType += String( RTL_CONSTASCII_USTRINGPARAM("DateTimeShape") ); 1466 break; 1467 case PRESOBJ_NONE: 1468 case PRESOBJ_IMAGE: 1469 case PRESOBJ_MAX: 1470 break; 1471 } 1472 1473 if( !pShape ) 1474 pShape = SvxShape::getImplementation( xShape ); 1475 1476 if( pShape ) 1477 pShape->SetShapeType( aShapeType ); 1478 } 1479 1480 // SdXShape aggregiert SvxShape 1481 new SdXShape( SvxShape::getImplementation( xShape ), GetModel() ); 1482 return xShape; 1483 } 1484 else 1485 { 1486 return SvxFmDrawPage::_CreateShape( pObj ); 1487 } 1488 1489 } 1490 1491 //---------------------------------------------------------------------- 1492 1493 // XServiceInfo 1494 Sequence< OUString > SAL_CALL SdGenericDrawPage::getSupportedServiceNames() 1495 throw(uno::RuntimeException) 1496 { 1497 Sequence< OUString > aSeq( SvxFmDrawPage::getSupportedServiceNames() ); 1498 comphelper::ServiceInfoHelper::addToSequence( aSeq, 3, "com.sun.star.drawing.GenericDrawPage", 1499 "com.sun.star.document.LinkTarget", 1500 "com.sun.star.document.LinkTargetSupplier"); 1501 return aSeq; 1502 } 1503 1504 //---------------------------------------------------------------------- 1505 1506 // XLinkTargetSupplier 1507 Reference< container::XNameAccess > SAL_CALL SdGenericDrawPage::getLinks( ) 1508 throw(uno::RuntimeException) 1509 { 1510 return new SdPageLinkTargets( (SdGenericDrawPage*)this ); 1511 } 1512 1513 //---------------------------------------------------------------------- 1514 1515 void SdGenericDrawPage::setBackground( const Any& ) throw(lang::IllegalArgumentException) 1516 { 1517 DBG_ERROR( "Don't call me, I'm useless!" ); 1518 } 1519 1520 //---------------------------------------------------------------------- 1521 1522 void SdGenericDrawPage::getBackground( Any& ) throw() 1523 { 1524 DBG_ERROR( "Don't call me, I'm useless!" ); 1525 } 1526 1527 //---------------------------------------------------------------------- 1528 1529 OUString SdGenericDrawPage::getBookmarkURL() const 1530 { 1531 OUStringBuffer aRet; 1532 if( SvxFmDrawPage::mpPage ) 1533 { 1534 OUString aFileName( static_cast<SdPage*>(SvxFmDrawPage::mpPage)->GetFileName() ); 1535 if( aFileName.getLength() ) 1536 { 1537 const OUString aBookmarkName( SdDrawPage::getPageApiNameFromUiName( static_cast<SdPage*>(SvxFmDrawPage::mpPage)->GetBookmarkName() ) ); 1538 aRet.append( aFileName ); 1539 aRet.append( (sal_Unicode)'#' ); 1540 aRet.append( aBookmarkName ); 1541 } 1542 } 1543 1544 return aRet.makeStringAndClear(); 1545 } 1546 1547 //---------------------------------------------------------------------- 1548 void SdGenericDrawPage::setBookmarkURL( rtl::OUString& rURL ) 1549 { 1550 if( SvxFmDrawPage::mpPage ) 1551 { 1552 sal_Int32 nIndex = rURL.indexOf( (sal_Unicode)'#' ); 1553 if( nIndex != -1 ) 1554 { 1555 const String aFileName( rURL.copy( 0, nIndex ) ); 1556 const String aBookmarkName( SdDrawPage::getUiNameFromPageApiName( rURL.copy( nIndex+1 ) ) ); 1557 1558 if( aFileName.Len() && aBookmarkName.Len() ) 1559 { 1560 static_cast<SdPage*>(SvxFmDrawPage::mpPage)->DisconnectLink(); 1561 static_cast<SdPage*>(SvxFmDrawPage::mpPage)->SetFileName( aFileName ); 1562 static_cast<SdPage*>(SvxFmDrawPage::mpPage)->SetBookmarkName( aBookmarkName ); 1563 static_cast<SdPage*>(SvxFmDrawPage::mpPage)->ConnectLink(); 1564 } 1565 } 1566 } 1567 } 1568 1569 //---------------------------------------------------------------------- 1570 Reference< drawing::XShape > SAL_CALL SdGenericDrawPage::combine( const Reference< drawing::XShapes >& xShapes ) 1571 throw( uno::RuntimeException ) 1572 { 1573 OGuard aGuard( Application::GetSolarMutex() ); 1574 1575 throwIfDisposed(); 1576 1577 DBG_ASSERT(SvxFmDrawPage::mpPage,"SdrPage ist NULL! [CL]"); 1578 DBG_ASSERT(mpView, "SdrView ist NULL! [CL]"); 1579 1580 Reference< drawing::XShape > xShape; 1581 if(mpView==NULL||!xShapes.is()||GetPage()==NULL) 1582 return xShape; 1583 1584 SdrPageView* pPageView = mpView->ShowSdrPage( GetPage() ); 1585 1586 _SelectObjectsInView( xShapes, pPageView ); 1587 1588 mpView->CombineMarkedObjects( sal_False ); 1589 1590 mpView->AdjustMarkHdl(); 1591 const SdrMarkList& rMarkList = mpView->GetMarkedObjectList(); 1592 if( rMarkList.GetMarkCount() == 1 ) 1593 { 1594 SdrObject* pObj = rMarkList.GetMark(0)->GetMarkedSdrObj(); 1595 if( pObj ) 1596 xShape = Reference< drawing::XShape >::query( pObj->getUnoShape() ); 1597 } 1598 1599 mpView->HideSdrPage(); 1600 1601 GetModel()->SetModified(); 1602 1603 return xShape; 1604 } 1605 1606 //---------------------------------------------------------------------- 1607 void SAL_CALL SdGenericDrawPage::split( const Reference< drawing::XShape >& xGroup ) 1608 throw( uno::RuntimeException ) 1609 { 1610 OGuard aGuard( Application::GetSolarMutex() ); 1611 1612 throwIfDisposed(); 1613 1614 if(mpView==NULL||!xGroup.is()||GetPage()==NULL) 1615 return; 1616 1617 SdrPageView* pPageView = mpView->ShowSdrPage( GetPage() ); 1618 _SelectObjectInView( xGroup, pPageView ); 1619 mpView->DismantleMarkedObjects( sal_False ); 1620 mpView->HideSdrPage(); 1621 1622 GetModel()->SetModified(); 1623 } 1624 1625 //---------------------------------------------------------------------- 1626 Reference< drawing::XShape > SAL_CALL SdGenericDrawPage::bind( const Reference< drawing::XShapes >& xShapes ) 1627 throw( uno::RuntimeException ) 1628 { 1629 OGuard aGuard( Application::GetSolarMutex() ); 1630 1631 throwIfDisposed(); 1632 1633 uno::Reference< drawing::XShape > xShape; 1634 if(mpView==NULL||!xShapes.is()||GetPage()==NULL) 1635 return xShape; 1636 1637 SdrPageView* pPageView = mpView->ShowSdrPage( GetPage() ); 1638 1639 _SelectObjectsInView( xShapes, pPageView ); 1640 1641 mpView->CombineMarkedObjects( sal_True ); 1642 1643 mpView->AdjustMarkHdl(); 1644 const SdrMarkList& rMarkList = mpView->GetMarkedObjectList(); 1645 if( rMarkList.GetMarkCount() == 1 ) 1646 { 1647 SdrObject* pObj = rMarkList.GetMark(0)->GetMarkedSdrObj(); 1648 if( pObj ) 1649 xShape = Reference< drawing::XShape >::query( pObj->getUnoShape() ); 1650 } 1651 1652 mpView->HideSdrPage(); 1653 1654 GetModel()->SetModified(); 1655 1656 return xShape; 1657 } 1658 1659 //---------------------------------------------------------------------- 1660 void SAL_CALL SdGenericDrawPage::unbind( const Reference< drawing::XShape >& xShape ) 1661 throw( uno::RuntimeException ) 1662 { 1663 OGuard aGuard( Application::GetSolarMutex() ); 1664 1665 throwIfDisposed(); 1666 1667 if(mpView==NULL||!xShape.is()||GetPage()==NULL) 1668 return; 1669 1670 SdrPageView* pPageView = mpView->ShowSdrPage( GetPage() ); 1671 _SelectObjectInView( xShape, pPageView ); 1672 mpView->DismantleMarkedObjects( sal_True ); 1673 mpView->HideSdrPage(); 1674 1675 GetModel()->SetModified(); 1676 } 1677 1678 void SdGenericDrawPage::SetLftBorder( sal_Int32 nValue ) 1679 { 1680 if( nValue != GetPage()->GetLftBorder() ) 1681 { 1682 SdDrawDocument* pDoc = (SdDrawDocument*)GetPage()->GetModel(); 1683 const PageKind ePageKind = GetPage()->GetPageKind(); 1684 1685 sal_uInt16 i, nPageCnt = pDoc->GetMasterSdPageCount(ePageKind); 1686 for (i = 0; i < nPageCnt; i++) 1687 { 1688 SdPage* pPage = pDoc->GetMasterSdPage(i, ePageKind); 1689 pPage->SetLftBorder( nValue ); 1690 } 1691 1692 nPageCnt = pDoc->GetSdPageCount(ePageKind); 1693 1694 for (i = 0; i < nPageCnt; i++) 1695 { 1696 SdPage* pPage = pDoc->GetSdPage(i, ePageKind); 1697 pPage->SetLftBorder( nValue ); 1698 } 1699 } 1700 } 1701 1702 void SdGenericDrawPage::SetRgtBorder( sal_Int32 nValue ) 1703 { 1704 if( nValue != GetPage()->GetRgtBorder() ) 1705 { 1706 SdDrawDocument* pDoc = (SdDrawDocument*)GetPage()->GetModel(); 1707 const PageKind ePageKind = GetPage()->GetPageKind(); 1708 1709 sal_uInt16 i, nPageCnt = pDoc->GetMasterSdPageCount(ePageKind); 1710 for (i = 0; i < nPageCnt; i++) 1711 { 1712 SdPage* pPage = pDoc->GetMasterSdPage(i, ePageKind); 1713 pPage->SetRgtBorder( nValue ); 1714 } 1715 1716 nPageCnt = pDoc->GetSdPageCount(ePageKind); 1717 1718 for (i = 0; i < nPageCnt; i++) 1719 { 1720 SdPage* pPage = pDoc->GetSdPage(i, ePageKind); 1721 pPage->SetRgtBorder( nValue ); 1722 } 1723 } 1724 } 1725 1726 void SdGenericDrawPage::SetUppBorder( sal_Int32 nValue ) 1727 { 1728 if( nValue != GetPage()->GetUppBorder() ) 1729 { 1730 SdDrawDocument* pDoc = (SdDrawDocument*)GetPage()->GetModel(); 1731 const PageKind ePageKind = GetPage()->GetPageKind(); 1732 1733 sal_uInt16 i, nPageCnt = pDoc->GetMasterSdPageCount(ePageKind); 1734 for (i = 0; i < nPageCnt; i++) 1735 { 1736 SdPage* pPage = pDoc->GetMasterSdPage(i, ePageKind); 1737 pPage->SetUppBorder( nValue ); 1738 } 1739 1740 nPageCnt = pDoc->GetSdPageCount(ePageKind); 1741 1742 for (i = 0; i < nPageCnt; i++) 1743 { 1744 SdPage* pPage = pDoc->GetSdPage(i, ePageKind); 1745 pPage->SetUppBorder( nValue ); 1746 } 1747 } 1748 } 1749 1750 void SdGenericDrawPage::SetLwrBorder( sal_Int32 nValue ) 1751 { 1752 if( nValue != GetPage()->GetLwrBorder() ) 1753 { 1754 SdDrawDocument* pDoc = (SdDrawDocument*)GetPage()->GetModel(); 1755 const PageKind ePageKind = GetPage()->GetPageKind(); 1756 1757 sal_uInt16 i, nPageCnt = pDoc->GetMasterSdPageCount(ePageKind); 1758 for (i = 0; i < nPageCnt; i++) 1759 { 1760 SdPage* pPage = pDoc->GetMasterSdPage(i, ePageKind); 1761 pPage->SetLwrBorder( nValue ); 1762 } 1763 1764 nPageCnt = pDoc->GetSdPageCount(ePageKind); 1765 1766 for (i = 0; i < nPageCnt; i++) 1767 { 1768 SdPage* pPage = pDoc->GetSdPage(i, ePageKind); 1769 pPage->SetLwrBorder( nValue ); 1770 } 1771 } 1772 } 1773 1774 static void refreshpage( SdDrawDocument* pDoc, const PageKind ePageKind ) 1775 { 1776 ::sd::DrawDocShell* pDocShell = pDoc->GetDocSh(); 1777 if ( pDocShell ) 1778 { 1779 ::sd::ViewShell* pViewSh = pDocShell->GetViewShell(); 1780 1781 if( pViewSh ) 1782 { 1783 if( pViewSh->ISA(::sd::DrawViewShell ) ) 1784 static_cast< ::sd::DrawViewShell*>(pViewSh)->ResetActualPage(); 1785 1786 Size aPageSize = pDoc->GetSdPage(0, ePageKind)->GetSize(); 1787 const long nWidth = aPageSize.Width(); 1788 const long nHeight = aPageSize.Height(); 1789 1790 Point aPageOrg = Point(nWidth, nHeight / 2); 1791 Size aViewSize = Size(nWidth * 3, nHeight * 2); 1792 1793 pDoc->SetMaxObjSize(aViewSize); 1794 1795 pViewSh->InitWindows(aPageOrg, aViewSize, Point(-1, -1), sal_True); 1796 1797 pViewSh->UpdateScrollBars(); 1798 } 1799 } 1800 } 1801 1802 void SdGenericDrawPage::SetWidth( sal_Int32 nWidth ) 1803 { 1804 Size aSize( GetPage()->GetSize() ); 1805 if( aSize.getWidth() != nWidth ) 1806 { 1807 aSize.setWidth( nWidth ); 1808 1809 SdDrawDocument* pDoc = (SdDrawDocument*)GetPage()->GetModel(); 1810 const PageKind ePageKind = GetPage()->GetPageKind(); 1811 1812 sal_uInt16 i, nPageCnt = pDoc->GetMasterSdPageCount(ePageKind); 1813 for (i = 0; i < nPageCnt; i++) 1814 { 1815 SdPage* pPage = pDoc->GetMasterSdPage(i, ePageKind); 1816 pPage->SetSize(aSize); 1817 } 1818 1819 nPageCnt = pDoc->GetSdPageCount(ePageKind); 1820 1821 for (i = 0; i < nPageCnt; i++) 1822 { 1823 SdPage* pPage = pDoc->GetSdPage(i, ePageKind); 1824 pPage->SetSize(aSize); 1825 } 1826 1827 refreshpage( pDoc, ePageKind ); 1828 } 1829 } 1830 1831 void SdGenericDrawPage::SetHeight( sal_Int32 nHeight ) 1832 { 1833 Size aSize( GetPage()->GetSize() ); 1834 if( aSize.getHeight() != nHeight ) 1835 { 1836 aSize.setHeight( nHeight ); 1837 1838 SdDrawDocument* pDoc = (SdDrawDocument*)GetPage()->GetModel(); 1839 const PageKind ePageKind = GetPage()->GetPageKind(); 1840 1841 sal_uInt16 i, nPageCnt = pDoc->GetMasterSdPageCount(ePageKind); 1842 for (i = 0; i < nPageCnt; i++) 1843 { 1844 SdPage* pPage = pDoc->GetMasterSdPage(i, ePageKind); 1845 pPage->SetSize(aSize); 1846 } 1847 1848 nPageCnt = pDoc->GetSdPageCount(ePageKind); 1849 1850 for (i = 0; i < nPageCnt; i++) 1851 { 1852 SdPage* pPage = pDoc->GetSdPage(i, ePageKind); 1853 pPage->SetSize(aSize); 1854 } 1855 1856 refreshpage( pDoc, ePageKind ); 1857 } 1858 } 1859 1860 // XInterface 1861 void SdGenericDrawPage::release() throw() 1862 { 1863 1864 OWeakAggObject::release(); 1865 } 1866 1867 // XComponent 1868 void SdGenericDrawPage::disposing() throw() 1869 { 1870 mpModel = 0; 1871 SvxFmDrawPage::disposing(); 1872 } 1873 1874 // XAnimationNodeSupplier 1875 Reference< XAnimationNode > SAL_CALL SdGenericDrawPage::getAnimationNode() throw (uno::RuntimeException) 1876 { 1877 OGuard aGuard( Application::GetSolarMutex() ); 1878 1879 throwIfDisposed(); 1880 1881 SdPage *pSdPage = static_cast<SdPage*>(SvxFmDrawPage::mpPage); 1882 1883 1884 return pSdPage->getAnimationNode(); 1885 } 1886 1887 //======================================================================== 1888 // SdPageLinkTargets 1889 //======================================================================== 1890 1891 SdPageLinkTargets::SdPageLinkTargets( SdGenericDrawPage* pUnoPage ) throw() 1892 { 1893 mxPage = pUnoPage; 1894 mpUnoPage = pUnoPage; 1895 } 1896 1897 SdPageLinkTargets::~SdPageLinkTargets() throw() 1898 { 1899 } 1900 1901 // XElementAccess 1902 uno::Type SAL_CALL SdPageLinkTargets::getElementType() 1903 throw(uno::RuntimeException) 1904 { 1905 return ITYPE(beans::XPropertySet); 1906 } 1907 1908 sal_Bool SAL_CALL SdPageLinkTargets::hasElements() 1909 throw(uno::RuntimeException) 1910 { 1911 OGuard aGuard( Application::GetSolarMutex() ); 1912 1913 SdPage* pPage = mpUnoPage->GetPage(); 1914 if( pPage != NULL ) 1915 { 1916 SdrObjListIter aIter( *pPage, IM_DEEPWITHGROUPS ); 1917 1918 while( aIter.IsMore() ) 1919 { 1920 SdrObject* pObj = aIter.Next(); 1921 String aStr( pObj->GetName() ); 1922 if( !aStr.Len() && pObj->ISA( SdrOle2Obj ) ) 1923 aStr = static_cast< const SdrOle2Obj* >( pObj )->GetPersistName(); 1924 if( aStr.Len() ) 1925 return sal_True; 1926 } 1927 } 1928 1929 return sal_False; 1930 } 1931 1932 // container::XNameAccess 1933 1934 // XNameAccess 1935 Any SAL_CALL SdPageLinkTargets::getByName( const OUString& aName ) 1936 throw(container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException) 1937 { 1938 OGuard aGuard( Application::GetSolarMutex() ); 1939 1940 SdPage* pPage = mpUnoPage->GetPage(); 1941 if( pPage != NULL ) 1942 { 1943 SdrObject* pObj = FindObject( aName ); 1944 if( pObj ) 1945 { 1946 Reference< beans::XPropertySet > aRef( pObj->getUnoShape(), uno::UNO_QUERY ); 1947 return makeAny( aRef ); 1948 } 1949 } 1950 1951 throw container::NoSuchElementException(); 1952 } 1953 1954 Sequence< OUString > SAL_CALL SdPageLinkTargets::getElementNames() 1955 throw(uno::RuntimeException) 1956 { 1957 OGuard aGuard( Application::GetSolarMutex() ); 1958 1959 sal_uInt32 nObjCount = 0; 1960 1961 SdPage* pPage = mpUnoPage->GetPage(); 1962 if( pPage != NULL ) 1963 { 1964 SdrObjListIter aIter( *pPage, IM_DEEPWITHGROUPS ); 1965 while( aIter.IsMore() ) 1966 { 1967 SdrObject* pObj = aIter.Next(); 1968 String aStr( pObj->GetName() ); 1969 if( !aStr.Len() && pObj->ISA( SdrOle2Obj ) ) 1970 aStr = static_cast< const SdrOle2Obj* >( pObj )->GetPersistName(); 1971 if( aStr.Len() ) 1972 nObjCount++; 1973 } 1974 } 1975 1976 Sequence< OUString > aSeq( nObjCount ); 1977 if( nObjCount > 0 ) 1978 { 1979 OUString* pStr = aSeq.getArray(); 1980 1981 SdrObjListIter aIter( *pPage, IM_DEEPWITHGROUPS ); 1982 while( aIter.IsMore() ) 1983 { 1984 SdrObject* pObj = aIter.Next(); 1985 String aStr( pObj->GetName() ); 1986 if( !aStr.Len() && pObj->ISA( SdrOle2Obj ) ) 1987 aStr = static_cast< const SdrOle2Obj* >( pObj )->GetPersistName(); 1988 if( aStr.Len() ) 1989 *pStr++ = aStr; 1990 } 1991 } 1992 1993 return aSeq; 1994 } 1995 1996 sal_Bool SAL_CALL SdPageLinkTargets::hasByName( const OUString& aName ) 1997 throw(uno::RuntimeException) 1998 { 1999 OGuard aGuard( Application::GetSolarMutex() ); 2000 2001 return FindObject( aName ) != NULL; 2002 } 2003 2004 /*********************************************************************** 2005 * * 2006 ***********************************************************************/ 2007 SdrObject* SdPageLinkTargets::FindObject( const String& rName ) const throw() 2008 { 2009 SdPage* pPage = mpUnoPage->GetPage(); 2010 if( pPage == NULL ) 2011 return NULL; 2012 2013 SdrObjListIter aIter( *pPage, IM_DEEPWITHGROUPS ); 2014 2015 while( aIter.IsMore() ) 2016 { 2017 SdrObject* pObj = aIter.Next(); 2018 String aStr( pObj->GetName() ); 2019 if( !aStr.Len() && pObj->ISA( SdrOle2Obj ) ) 2020 aStr = static_cast< const SdrOle2Obj* >( pObj )->GetPersistName(); 2021 if( aStr.Len() && (aStr == rName) ) 2022 return pObj; 2023 } 2024 2025 return NULL; 2026 } 2027 2028 // XServiceInfo 2029 OUString SAL_CALL SdPageLinkTargets::getImplementationName() 2030 throw(uno::RuntimeException) 2031 { 2032 return OUString( RTL_CONSTASCII_USTRINGPARAM("SdPageLinkTargets") ); 2033 } 2034 2035 sal_Bool SAL_CALL SdPageLinkTargets::supportsService( const OUString& ServiceName ) 2036 throw(uno::RuntimeException) 2037 { 2038 return comphelper::ServiceInfoHelper::supportsService( ServiceName, getSupportedServiceNames() ); 2039 } 2040 2041 Sequence< OUString > SAL_CALL SdPageLinkTargets::getSupportedServiceNames() 2042 throw(uno::RuntimeException) 2043 { 2044 const OUString aSN( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.document.LinkTargets") ); 2045 Sequence< OUString > aSeq( &aSN, 1); 2046 return aSeq; 2047 } 2048 2049 //======================================================================== 2050 // SdDrawPage 2051 //======================================================================== 2052 2053 SdDrawPage::SdDrawPage( SdXImpressDocument* pModel, SdPage* pPage ) throw() 2054 : SdGenericDrawPage( pModel, pPage, ImplGetDrawPagePropertySet( pModel->IsImpressDocument(), pPage->GetPageKind() ) ) 2055 { 2056 } 2057 2058 SdDrawPage::~SdDrawPage() throw() 2059 { 2060 } 2061 2062 // XInterface 2063 Any SAL_CALL SdDrawPage::queryInterface( const uno::Type & rType ) 2064 throw(uno::RuntimeException) 2065 { 2066 if( rType == ITYPE( drawing::XMasterPageTarget ) ) 2067 { 2068 return makeAny( Reference< drawing::XMasterPageTarget >( this ) ); 2069 } 2070 else 2071 { 2072 if( mbIsImpressDocument ) 2073 { 2074 const PageKind ePageKind = GetPage() ? GetPage()->GetPageKind() : PK_STANDARD; 2075 2076 if( ePageKind != PK_HANDOUT && rType == ITYPE( presentation::XPresentationPage ) ) 2077 { 2078 return makeAny( Reference< presentation::XPresentationPage >( this ) ); 2079 } 2080 } 2081 } 2082 2083 return SdGenericDrawPage::queryInterface( rType ); 2084 } 2085 2086 void SAL_CALL SdDrawPage::acquire() throw() 2087 { 2088 SvxDrawPage::acquire(); 2089 } 2090 2091 void SAL_CALL SdDrawPage::release() throw() 2092 { 2093 SvxDrawPage::release(); 2094 } 2095 2096 UNO3_GETIMPLEMENTATION2_IMPL( SdDrawPage, SdGenericDrawPage ); 2097 2098 // XTypeProvider 2099 Sequence< uno::Type > SAL_CALL SdDrawPage::getTypes() throw(uno::RuntimeException) 2100 { 2101 OGuard aGuard( Application::GetSolarMutex() ); 2102 2103 throwIfDisposed(); 2104 2105 if( maTypeSequence.getLength() == 0 ) 2106 { 2107 const PageKind ePageKind = GetPage() ? GetPage()->GetPageKind() : PK_STANDARD; 2108 sal_Bool bPresPage = mbIsImpressDocument && ePageKind != PK_HANDOUT; 2109 2110 // Collect the types of this class. 2111 ::std::vector<uno::Type> aTypes; 2112 aTypes.reserve(13); 2113 aTypes.push_back(ITYPE(drawing::XDrawPage)); 2114 aTypes.push_back(ITYPE(beans::XPropertySet)); 2115 aTypes.push_back(ITYPE(container::XNamed)); 2116 aTypes.push_back(ITYPE(drawing::XMasterPageTarget)); 2117 aTypes.push_back(ITYPE(lang::XServiceInfo)); 2118 aTypes.push_back(ITYPE(util::XReplaceable)); 2119 aTypes.push_back(ITYPE(document::XLinkTargetSupplier)); 2120 aTypes.push_back(ITYPE( drawing::XShapeCombiner )); 2121 aTypes.push_back(ITYPE( drawing::XShapeBinder )); 2122 aTypes.push_back(ITYPE( office::XAnnotationAccess )); 2123 aTypes.push_back(ITYPE( beans::XMultiPropertySet )); 2124 if( bPresPage ) 2125 aTypes.push_back(ITYPE(presentation::XPresentationPage)); 2126 if( bPresPage && ePageKind == PK_STANDARD ) 2127 aTypes.push_back(ITYPE(XAnimationNodeSupplier)); 2128 2129 // Get types of base class. 2130 const Sequence< uno::Type > aBaseTypes( SdGenericDrawPage::getTypes() ); 2131 const sal_Int32 nBaseTypes = aBaseTypes.getLength(); 2132 const uno::Type* pBaseTypes = aBaseTypes.getConstArray(); 2133 2134 // Join those types in a sequence. 2135 maTypeSequence.realloc(aTypes.size() + nBaseTypes); 2136 uno::Type* pTypes = maTypeSequence.getArray(); 2137 ::std::vector<uno::Type>::const_iterator iType; 2138 for (iType=aTypes.begin(); iType!=aTypes.end(); ++iType) 2139 *pTypes++ = *iType; 2140 for( sal_Int32 nType = 0; nType < nBaseTypes; nType++ ) 2141 *pTypes++ = *pBaseTypes++; 2142 } 2143 2144 return maTypeSequence; 2145 } 2146 2147 Sequence< sal_Int8 > SAL_CALL SdDrawPage::getImplementationId() throw(uno::RuntimeException) 2148 { 2149 OGuard aGuard( Application::GetSolarMutex() ); 2150 2151 throwIfDisposed(); 2152 2153 static Sequence< sal_Int8 > aId; 2154 if( aId.getLength() == 0 ) 2155 { 2156 aId.realloc( 16 ); 2157 rtl_createUuid( (sal_uInt8 *)aId.getArray(), 0, sal_True ); 2158 } 2159 return aId; 2160 } 2161 2162 OUString SdDrawPage::getPageApiName( SdPage* pPage ) 2163 { 2164 return ::getPageApiName( pPage ); 2165 } 2166 2167 OUString getPageApiName( SdPage* pPage ) 2168 { 2169 OUString aPageName; 2170 2171 if(pPage) 2172 { 2173 aPageName = pPage->GetRealName(); 2174 2175 if( aPageName.getLength() == 0 ) 2176 { 2177 OUStringBuffer sBuffer; 2178 sBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( sEmptyPageName ) ); 2179 const sal_Int32 nPageNum = ( ( pPage->GetPageNum() - 1 ) >> 1 ) + 1; 2180 sBuffer.append( nPageNum ); 2181 aPageName = sBuffer.makeStringAndClear(); 2182 } 2183 } 2184 2185 return aPageName; 2186 } 2187 2188 2189 OUString getPageApiNameFromUiName( const String& rUIName ) 2190 { 2191 OUString aApiName; 2192 2193 String aDefPageName(SdResId(STR_PAGE)); 2194 aDefPageName += sal_Unicode( ' ' ); 2195 2196 if( rUIName.Equals( aDefPageName, 0, aDefPageName.Len() ) ) 2197 { 2198 aApiName = OUString( RTL_CONSTASCII_USTRINGPARAM( sEmptyPageName ) ); 2199 aApiName += rUIName.Copy( aDefPageName.Len() ); 2200 } 2201 else 2202 { 2203 aApiName = rUIName; 2204 } 2205 2206 return aApiName; 2207 } 2208 2209 OUString SdDrawPage::getPageApiNameFromUiName( const String& rUIName ) 2210 { 2211 return ::getPageApiNameFromUiName( rUIName ); 2212 } 2213 2214 String getUiNameFromPageApiNameImpl( const OUString& rApiName ) 2215 { 2216 const String aDefPageName(RTL_CONSTASCII_USTRINGPARAM( sEmptyPageName )); 2217 if( rApiName.compareTo( aDefPageName, aDefPageName.Len() ) == 0 ) 2218 { 2219 OUString aNumber( rApiName.copy( sizeof( sEmptyPageName ) - 1 ) ); 2220 2221 // create the page number 2222 sal_Int32 nPageNumber = aNumber.toInt32(); 2223 2224 // check if there are non number characters in the number part 2225 const sal_Int32 nChars = aNumber.getLength(); 2226 const sal_Unicode* pString = aNumber.getStr(); 2227 sal_Int32 nChar; 2228 for( nChar = 0; nChar < nChars; nChar++, pString++ ) 2229 { 2230 if((*pString < sal_Unicode('0')) || (*pString > sal_Unicode('9'))) 2231 { 2232 // found a non number character, so this is not the default 2233 // name for this page 2234 nPageNumber = -1; 2235 break; 2236 } 2237 } 2238 2239 if( nPageNumber != -1) 2240 { 2241 OUStringBuffer sBuffer; 2242 sBuffer.append( String(SdResId(STR_PAGE)) ); 2243 sBuffer.append( sal_Unicode( ' ' ) ); 2244 sBuffer.append( aNumber ); 2245 return sBuffer.makeStringAndClear(); 2246 } 2247 } 2248 2249 return rApiName; 2250 } 2251 2252 String SdDrawPage::getUiNameFromPageApiName( const OUString& rApiName ) 2253 { 2254 return getUiNameFromPageApiNameImpl( rApiName ); 2255 } 2256 2257 // XServiceInfo 2258 OUString SAL_CALL SdDrawPage::getImplementationName() throw(uno::RuntimeException) 2259 { 2260 return OUString( RTL_CONSTASCII_USTRINGPARAM("SdDrawPage") ); 2261 } 2262 2263 Sequence< OUString > SAL_CALL SdDrawPage::getSupportedServiceNames() throw(uno::RuntimeException) 2264 { 2265 OGuard aGuard( Application::GetSolarMutex() ); 2266 2267 throwIfDisposed(); 2268 2269 Sequence< OUString > aSeq( SdGenericDrawPage::getSupportedServiceNames() ); 2270 comphelper::ServiceInfoHelper::addToSequence( aSeq, 1, "com.sun.star.drawing.DrawPage" ); 2271 2272 if( mbIsImpressDocument ) 2273 comphelper::ServiceInfoHelper::addToSequence( aSeq, 1, "com.sun.star.presentation.DrawPage" ); 2274 2275 return aSeq; 2276 } 2277 2278 sal_Bool SAL_CALL SdDrawPage::supportsService( const OUString& ServiceName ) 2279 throw(uno::RuntimeException) 2280 { 2281 return SdGenericDrawPage::supportsService( ServiceName ); 2282 } 2283 2284 // XNamed 2285 void SAL_CALL SdDrawPage::setName( const OUString& rName ) 2286 throw(uno::RuntimeException) 2287 { 2288 OGuard aGuard( Application::GetSolarMutex() ); 2289 2290 throwIfDisposed(); 2291 2292 DBG_ASSERT( GetPage() && !GetPage()->IsMasterPage(), "Don't call base implementation for masterpages!" ); 2293 2294 OUString aName( rName ); 2295 2296 if(GetPage() && GetPage()->GetPageKind() != PK_NOTES) 2297 { 2298 // check if this is the default 'page1234' name 2299 if(aName.compareToAscii( sEmptyPageName, sizeof( sEmptyPageName ) - 1 ) == 0) 2300 { 2301 // ok, it maybe is, first get the number part after 'page' 2302 OUString aNumber( aName.copy( sizeof( sEmptyPageName ) - 1 ) ); 2303 2304 // create the page number 2305 sal_Int32 nPageNumber = aNumber.toInt32(); 2306 2307 // check if there are non number characters in the number part 2308 const sal_Int32 nChars = aNumber.getLength(); 2309 const sal_Unicode* pString = aNumber.getStr(); 2310 sal_Int32 nChar; 2311 for( nChar = 0; nChar < nChars; nChar++, pString++ ) 2312 { 2313 if((*pString < '0') || (*pString > '9')) 2314 { 2315 // found a non number character, so this is not the default 2316 // name for this page 2317 nPageNumber = -1; 2318 break; 2319 } 2320 } 2321 2322 if( nPageNumber == ( ( GetPage()->GetPageNum() - 1 ) >> 1 ) + 1 ) 2323 aName = OUString(); 2324 } 2325 else 2326 { 2327 String aDefaultPageName( SdResId(STR_PAGE) ); 2328 aDefaultPageName += sal_Unicode( ' ' ); 2329 if( aName.compareTo( aDefaultPageName, aDefaultPageName.Len() ) == 0 ) 2330 aName = OUString(); 2331 } 2332 2333 GetPage()->SetName( aName ); 2334 2335 sal_uInt16 nNotesPageNum = (GetPage()->GetPageNum()-1)>>1; 2336 if( GetModel()->GetDoc()->GetSdPageCount( PK_NOTES ) > nNotesPageNum ) 2337 { 2338 SdPage* pNotesPage = GetModel()->GetDoc()->GetSdPage( nNotesPageNum, PK_NOTES ); 2339 if( pNotesPage ) 2340 pNotesPage->SetName(aName); 2341 } 2342 2343 // fake a mode change to repaint the page tab bar 2344 ::sd::DrawDocShell* pDocSh = GetModel()->GetDocShell(); 2345 ::sd::ViewShell* pViewSh = pDocSh ? pDocSh->GetViewShell() : NULL; 2346 if( pViewSh && pViewSh->ISA(::sd::DrawViewShell)) 2347 { 2348 ::sd::DrawViewShell* pDrawViewSh = static_cast< 2349 ::sd::DrawViewShell*>(pViewSh); 2350 2351 EditMode eMode = pDrawViewSh->GetEditMode(); 2352 if( eMode == EM_PAGE ) 2353 { 2354 sal_Bool bLayer = pDrawViewSh->IsLayerModeActive(); 2355 2356 pDrawViewSh->ChangeEditMode( eMode, !bLayer ); 2357 pDrawViewSh->ChangeEditMode( eMode, bLayer ); 2358 } 2359 } 2360 2361 GetModel()->SetModified(); 2362 } 2363 } 2364 2365 OUString SAL_CALL SdDrawPage::getName() 2366 throw(uno::RuntimeException) 2367 { 2368 OGuard aGuard( Application::GetSolarMutex() ); 2369 2370 throwIfDisposed(); 2371 2372 return getPageApiName( GetPage() ); 2373 } 2374 2375 // XMasterPageTarget 2376 Reference< drawing::XDrawPage > SAL_CALL SdDrawPage::getMasterPage( ) 2377 throw(uno::RuntimeException) 2378 { 2379 OGuard aGuard( Application::GetSolarMutex() ); 2380 2381 throwIfDisposed(); 2382 2383 if(GetPage()) 2384 { 2385 Reference< drawing::XDrawPages > xPages( GetModel()->getMasterPages() ); 2386 Reference< drawing::XDrawPage > xPage; 2387 2388 if(SvxFmDrawPage::mpPage->TRG_HasMasterPage()) 2389 { 2390 SdrPage& rMasterPage = SvxFmDrawPage::mpPage->TRG_GetMasterPage(); 2391 xPage = uno::Reference< drawing::XDrawPage >( rMasterPage.getUnoPage(), uno::UNO_QUERY ); 2392 } 2393 2394 return xPage; 2395 } 2396 return NULL; 2397 } 2398 2399 void SAL_CALL SdDrawPage::setMasterPage( const Reference< drawing::XDrawPage >& xMasterPage ) 2400 throw(uno::RuntimeException) 2401 { 2402 OGuard aGuard( Application::GetSolarMutex() ); 2403 2404 throwIfDisposed(); 2405 2406 if(SvxFmDrawPage::mpPage) 2407 { 2408 SdMasterPage* pMasterPage = SdMasterPage::getImplementation( xMasterPage ); 2409 if( pMasterPage && pMasterPage->isValid() ) 2410 { 2411 SvxFmDrawPage::mpPage->TRG_ClearMasterPage(); 2412 2413 SdPage* pSdPage = (SdPage*) pMasterPage->GetSdrPage(); 2414 SvxFmDrawPage::mpPage->TRG_SetMasterPage(*pSdPage); 2415 2416 SvxFmDrawPage::mpPage->SetBorder(pSdPage->GetLftBorder(),pSdPage->GetUppBorder(), 2417 pSdPage->GetRgtBorder(),pSdPage->GetLwrBorder() ); 2418 2419 SvxFmDrawPage::mpPage->SetSize( pSdPage->GetSize() ); 2420 SvxFmDrawPage::mpPage->SetOrientation( pSdPage->GetOrientation() ); 2421 ((SdPage*)SvxFmDrawPage::mpPage)->SetLayoutName( ( (SdPage*)pSdPage )->GetLayoutName() ); 2422 2423 // set notes master also 2424 SdPage* pNotesPage = GetModel()->GetDoc()->GetSdPage( (SvxFmDrawPage::mpPage->GetPageNum()-1)>>1, PK_NOTES ); 2425 2426 pNotesPage->TRG_ClearMasterPage(); 2427 sal_uInt16 nNum = (SvxFmDrawPage::mpPage->TRG_GetMasterPage()).GetPageNum() + 1; 2428 pNotesPage->TRG_SetMasterPage(*SvxFmDrawPage::mpPage->GetModel()->GetMasterPage(nNum)); 2429 pNotesPage->SetLayoutName( ( (SdPage*)pSdPage )->GetLayoutName() ); 2430 2431 GetModel()->SetModified(); 2432 } 2433 2434 } 2435 } 2436 2437 // XPresentationPage 2438 Reference< drawing::XDrawPage > SAL_CALL SdDrawPage::getNotesPage() 2439 throw(uno::RuntimeException) 2440 { 2441 OGuard aGuard( Application::GetSolarMutex() ); 2442 2443 throwIfDisposed(); 2444 2445 if(SvxFmDrawPage::mpPage && GetModel()->GetDoc() && SvxFmDrawPage::mpPage->GetPageNum() ) 2446 { 2447 SdPage* pNotesPage = GetModel()->GetDoc()->GetSdPage( (SvxFmDrawPage::mpPage->GetPageNum()-1)>>1, PK_NOTES ); 2448 if( pNotesPage ) 2449 { 2450 Reference< drawing::XDrawPage > xPage( pNotesPage->getUnoPage(), uno::UNO_QUERY ); 2451 return xPage; 2452 } 2453 } 2454 return NULL; 2455 } 2456 2457 2458 // XIndexAccess 2459 sal_Int32 SAL_CALL SdDrawPage::getCount() 2460 throw(uno::RuntimeException) 2461 { 2462 return SdGenericDrawPage::getCount(); 2463 } 2464 2465 Any SAL_CALL SdDrawPage::getByIndex( sal_Int32 Index ) 2466 throw(lang::IndexOutOfBoundsException, lang::WrappedTargetException, uno::RuntimeException) 2467 { 2468 return SdGenericDrawPage::getByIndex( Index ); 2469 } 2470 2471 // XElementAccess 2472 uno::Type SAL_CALL SdDrawPage::getElementType() 2473 throw(uno::RuntimeException) 2474 { 2475 return SdGenericDrawPage::getElementType(); 2476 } 2477 2478 sal_Bool SAL_CALL SdDrawPage::hasElements() 2479 throw(uno::RuntimeException) 2480 { 2481 return SdGenericDrawPage::hasElements(); 2482 } 2483 2484 // XShapes 2485 void SAL_CALL SdDrawPage::add( const Reference< drawing::XShape >& xShape ) throw(uno::RuntimeException) 2486 { 2487 SdGenericDrawPage::add( xShape ); 2488 } 2489 2490 void SAL_CALL SdDrawPage::remove( const Reference< drawing::XShape >& xShape ) throw(uno::RuntimeException) 2491 { 2492 OGuard aGuard( Application::GetSolarMutex() ); 2493 2494 throwIfDisposed(); 2495 2496 SvxShape* pShape = SvxShape::getImplementation( xShape ); 2497 if( pShape ) 2498 { 2499 SdrObject* pObj = pShape->GetSdrObject(); 2500 if( pObj ) 2501 { 2502 GetPage()->RemovePresObj(pObj); 2503 pObj->SetUserCall(NULL); 2504 } 2505 } 2506 2507 SdGenericDrawPage::remove( xShape ); 2508 } 2509 2510 void SdDrawPage::setBackground( const Any& rValue ) 2511 throw( lang::IllegalArgumentException ) 2512 { 2513 Reference< beans::XPropertySet > xSet; 2514 2515 if( !(rValue >>= xSet) && !rValue.hasValue() ) 2516 throw lang::IllegalArgumentException(); 2517 2518 if( !xSet.is() ) 2519 { 2520 // the easy case, no background set. Set XFILL_NONE to represent this 2521 GetPage()->getSdrPageProperties().PutItem(XFillStyleItem(XFILL_NONE)); 2522 return; 2523 } 2524 2525 // is it our own implementation? 2526 SdUnoPageBackground* pBack = SdUnoPageBackground::getImplementation( xSet ); 2527 2528 SfxItemSet aSet( GetModel()->GetDoc()->GetPool(), XATTR_FILL_FIRST, XATTR_FILL_LAST ); 2529 2530 if( pBack ) 2531 { 2532 pBack->fillItemSet( (SdDrawDocument*)GetPage()->GetModel(), aSet ); 2533 } 2534 else 2535 { 2536 SdUnoPageBackground* pBackground = new SdUnoPageBackground(); 2537 2538 Reference< beans::XPropertySetInfo > xSetInfo( xSet->getPropertySetInfo() ); 2539 Reference< beans::XPropertySet > xDestSet( (beans::XPropertySet*)pBackground ); 2540 Reference< beans::XPropertySetInfo > xDestSetInfo( xDestSet->getPropertySetInfo() ); 2541 2542 Sequence< beans::Property > aProperties( xDestSetInfo->getProperties() ); 2543 sal_Int32 nCount = aProperties.getLength(); 2544 beans::Property* pProp = aProperties.getArray(); 2545 2546 while( nCount-- ) 2547 { 2548 const OUString aPropName( pProp->Name ); 2549 if( xSetInfo->hasPropertyByName( aPropName ) ) 2550 xDestSet->setPropertyValue( aPropName, 2551 xSet->getPropertyValue( aPropName ) ); 2552 2553 pProp++; 2554 } 2555 2556 pBackground->fillItemSet( (SdDrawDocument*)GetPage()->GetModel(), aSet ); 2557 } 2558 2559 //-/ pObj->NbcSetAttributes( aSet, sal_False ); 2560 if( aSet.Count() == 0 ) 2561 { 2562 // no background fill, represent by setting XFILL_NONE 2563 GetPage()->getSdrPageProperties().PutItem(XFillStyleItem(XFILL_NONE)); 2564 } 2565 else 2566 { 2567 // background fill, set at page (not sure if ClearItem is needed) 2568 GetPage()->getSdrPageProperties().ClearItem(); 2569 GetPage()->getSdrPageProperties().PutItemSet(aSet); 2570 } 2571 2572 // repaint only 2573 SvxFmDrawPage::mpPage->ActionChanged(); 2574 // pPage->SendRepaintBroadcast(); 2575 } 2576 2577 // XAnnotationAccess: 2578 Reference< XAnnotation > SAL_CALL SdGenericDrawPage::createAndInsertAnnotation() throw (RuntimeException) 2579 { 2580 if( !GetPage() ) 2581 throw DisposedException(); 2582 2583 Reference< XAnnotation > xRet; 2584 GetPage()->createAnnotation(xRet); 2585 return xRet; 2586 } 2587 2588 void SAL_CALL SdGenericDrawPage::removeAnnotation(const Reference< XAnnotation > & annotation) throw (RuntimeException, IllegalArgumentException) 2589 { 2590 GetPage()->removeAnnotation(annotation); 2591 } 2592 2593 Reference< XAnnotationEnumeration > SAL_CALL SdGenericDrawPage::createAnnotationEnumeration() throw (RuntimeException) 2594 { 2595 return ::sd::createAnnotationEnumeration( GetPage()->getAnnotations() ); 2596 } 2597 2598 void SdDrawPage::getBackground( Any& rValue ) throw() 2599 { 2600 const SfxItemSet& rFillAttributes = GetPage()->getSdrPageProperties().GetItemSet(); 2601 2602 if(XFILL_NONE == ((const XFillStyleItem&)rFillAttributes.Get(XATTR_FILLSTYLE)).GetValue()) 2603 { 2604 // no fill set (switched off by XFILL_NONE), clear rValue to represent this 2605 rValue.clear(); 2606 } 2607 else 2608 { 2609 // there is a fill set, export to rValue 2610 Reference< beans::XPropertySet > xSet(new SdUnoPageBackground( 2611 GetModel()->GetDoc(), 2612 &GetPage()->getSdrPageProperties().GetItemSet())); 2613 rValue <<= xSet; 2614 } 2615 } 2616 2617 void SdGenericDrawPage::setNavigationOrder( const Any& rValue ) 2618 { 2619 Reference< XIndexAccess > xIA( rValue, UNO_QUERY ); 2620 if( xIA.is() ) 2621 { 2622 if( dynamic_cast< SdDrawPage* >( xIA.get() ) == this ) 2623 { 2624 if( GetPage()->HasObjectNavigationOrder() ) 2625 GetPage()->ClearObjectNavigationOrder(); 2626 2627 return; 2628 } 2629 else if( xIA->getCount() == static_cast< sal_Int32 >( GetPage()->GetObjCount() ) ) 2630 { 2631 GetPage()->SetNavigationOrder(xIA); 2632 return; 2633 } 2634 } 2635 throw IllegalArgumentException(); 2636 } 2637 2638 class NavigationOrderAccess : public ::cppu::WeakImplHelper1< XIndexAccess > 2639 { 2640 public: 2641 NavigationOrderAccess( SdrPage* pPage ); 2642 2643 // XIndexAccess 2644 virtual sal_Int32 SAL_CALL getCount( ) throw (RuntimeException); 2645 virtual Any SAL_CALL getByIndex( sal_Int32 Index ) throw (IndexOutOfBoundsException, WrappedTargetException, RuntimeException); 2646 2647 // XElementAccess 2648 virtual Type SAL_CALL getElementType( ) throw (RuntimeException); 2649 virtual sal_Bool SAL_CALL hasElements( ) throw (RuntimeException); 2650 2651 private: 2652 std::vector< Reference< XShape > > maShapes; 2653 }; 2654 2655 NavigationOrderAccess::NavigationOrderAccess( SdrPage* pPage ) 2656 : maShapes( static_cast< sal_uInt32 >( pPage ? pPage->GetObjCount() : 0 ) ) 2657 { 2658 if( pPage ) 2659 { 2660 sal_uInt32 nIndex; 2661 const sal_uInt32 nCount = static_cast< sal_uInt32 >( pPage->GetObjCount() ); 2662 for( nIndex = 0; nIndex < nCount; ++nIndex ) 2663 { 2664 SdrObject* pObj = pPage->GetObj( nIndex ); 2665 sal_uInt32 nNavPos = pObj->GetNavigationPosition(); 2666 DBG_ASSERT( !maShapes[nNavPos].is(), "sd::NavigationOrderAccess::NavigationOrderAccess(), duplicate navigation positions from core!" ); 2667 maShapes[nNavPos] = Reference< XShape >( pObj->getUnoShape(), UNO_QUERY ); 2668 } 2669 } 2670 } 2671 2672 // XIndexAccess 2673 sal_Int32 SAL_CALL NavigationOrderAccess::getCount( ) throw (RuntimeException) 2674 { 2675 return static_cast< sal_Int32 >( maShapes.size() ); 2676 } 2677 2678 Any SAL_CALL NavigationOrderAccess::getByIndex( sal_Int32 Index ) throw (IndexOutOfBoundsException, WrappedTargetException, RuntimeException) 2679 { 2680 if( (Index < 0) || (Index > getCount()) ) 2681 throw IndexOutOfBoundsException(); 2682 2683 return Any( maShapes[Index] ); 2684 } 2685 2686 // XElementAccess 2687 Type SAL_CALL NavigationOrderAccess::getElementType( ) throw (RuntimeException) 2688 { 2689 return XShape::static_type(); 2690 } 2691 2692 sal_Bool SAL_CALL NavigationOrderAccess::hasElements( ) throw (RuntimeException) 2693 { 2694 return maShapes.empty() ? sal_False : sal_True; 2695 } 2696 2697 Any SdGenericDrawPage::getNavigationOrder() 2698 { 2699 if( GetPage()->HasObjectNavigationOrder() ) 2700 { 2701 return Any( Reference< XIndexAccess >( new NavigationOrderAccess( GetPage() ) ) ); 2702 } 2703 else 2704 { 2705 return Any( Reference< XIndexAccess >( this ) ); 2706 } 2707 } 2708 2709 //======================================================================== 2710 // class SdMasterPage 2711 //======================================================================== 2712 2713 SdMasterPage::SdMasterPage( SdXImpressDocument* pModel, SdPage* pPage ) throw() 2714 : SdGenericDrawPage( pModel, pPage, ImplGetMasterPagePropertySet( pPage ? pPage->GetPageKind() : PK_STANDARD ) ) 2715 { 2716 } 2717 2718 SdMasterPage::~SdMasterPage() throw() 2719 { 2720 } 2721 2722 // XInterface 2723 Any SAL_CALL SdMasterPage::queryInterface( const uno::Type & rType ) 2724 throw(uno::RuntimeException) 2725 { 2726 OGuard aGuard( Application::GetSolarMutex() ); 2727 2728 throwIfDisposed(); 2729 2730 uno::Any aAny; 2731 2732 if( rType == ITYPE( container::XIndexAccess ) ) 2733 aAny <<= Reference< container::XIndexAccess >((presentation::XPresentationPage*)(this)); 2734 else if( rType == ITYPE( container::XElementAccess ) ) 2735 aAny <<= Reference< container::XElementAccess >((presentation::XPresentationPage*)(this)); 2736 else if( rType == ITYPE( container::XNamed ) ) 2737 aAny <<= Reference< container::XNamed >(this); 2738 else if( rType == ITYPE( presentation::XPresentationPage ) && 2739 ( mbIsImpressDocument && 2740 GetPage() && GetPage()->GetPageKind() != PK_HANDOUT) ) 2741 aAny <<= Reference< presentation::XPresentationPage >( this ); 2742 else 2743 return SdGenericDrawPage::queryInterface( rType ); 2744 2745 return aAny; 2746 } 2747 2748 void SAL_CALL SdMasterPage::acquire() throw() 2749 { 2750 SvxDrawPage::acquire(); 2751 } 2752 2753 void SAL_CALL SdMasterPage::release() throw() 2754 { 2755 SvxDrawPage::release(); 2756 } 2757 2758 UNO3_GETIMPLEMENTATION2_IMPL( SdMasterPage, SdGenericDrawPage ); 2759 2760 // XTypeProvider 2761 Sequence< uno::Type > SAL_CALL SdMasterPage::getTypes() throw(uno::RuntimeException) 2762 { 2763 OGuard aGuard( Application::GetSolarMutex() ); 2764 2765 throwIfDisposed(); 2766 2767 if( maTypeSequence.getLength() == 0 ) 2768 { 2769 const PageKind ePageKind = GetPage() ? GetPage()->GetPageKind() : PK_STANDARD; 2770 sal_Bool bPresPage = mbIsImpressDocument && SvxFmDrawPage::mpPage && ePageKind != PK_HANDOUT; 2771 2772 // Collect the types of this class. 2773 ::std::vector<uno::Type> aTypes; 2774 aTypes.reserve(12); 2775 aTypes.push_back(ITYPE(drawing::XDrawPage)); 2776 aTypes.push_back(ITYPE(beans::XPropertySet)); 2777 aTypes.push_back(ITYPE(container::XNamed)); 2778 aTypes.push_back(ITYPE(lang::XServiceInfo)); 2779 aTypes.push_back(ITYPE(util::XReplaceable)); 2780 aTypes.push_back(ITYPE(document::XLinkTargetSupplier)); 2781 aTypes.push_back(ITYPE( drawing::XShapeCombiner )); 2782 aTypes.push_back(ITYPE( drawing::XShapeBinder )); 2783 aTypes.push_back(ITYPE( office::XAnnotationAccess )); 2784 aTypes.push_back(ITYPE( beans::XMultiPropertySet )); 2785 if( bPresPage ) 2786 aTypes.push_back(ITYPE(presentation::XPresentationPage)); 2787 if( bPresPage && ePageKind == PK_STANDARD ) 2788 aTypes.push_back(ITYPE(XAnimationNodeSupplier)); 2789 2790 // Get types of base class. 2791 const Sequence< uno::Type > aBaseTypes( SdGenericDrawPage::getTypes() ); 2792 const sal_Int32 nBaseTypes = aBaseTypes.getLength(); 2793 const uno::Type* pBaseTypes = aBaseTypes.getConstArray(); 2794 2795 // Join those types in a sequence. 2796 maTypeSequence.realloc(aTypes.size() + nBaseTypes); 2797 uno::Type* pTypes = maTypeSequence.getArray(); 2798 ::std::vector<uno::Type>::const_iterator iType; 2799 for (iType=aTypes.begin(); iType!=aTypes.end(); ++iType) 2800 *pTypes++ = *iType; 2801 for( sal_Int32 nType = 0; nType < nBaseTypes; nType++ ) 2802 *pTypes++ = *pBaseTypes++; 2803 } 2804 2805 return maTypeSequence; 2806 } 2807 2808 Sequence< sal_Int8 > SAL_CALL SdMasterPage::getImplementationId() throw(uno::RuntimeException) 2809 { 2810 OGuard aGuard( Application::GetSolarMutex() ); 2811 2812 throwIfDisposed(); 2813 2814 static Sequence< sal_Int8 > aId; 2815 if( aId.getLength() == 0 ) 2816 { 2817 aId.realloc( 16 ); 2818 rtl_createUuid( (sal_uInt8 *)aId.getArray(), 0, sal_True ); 2819 } 2820 return aId; 2821 } 2822 2823 // XServiceInfo 2824 OUString SAL_CALL SdMasterPage::getImplementationName() throw(uno::RuntimeException) 2825 { 2826 return OUString( RTL_CONSTASCII_USTRINGPARAM("SdMasterPage") ); 2827 } 2828 2829 Sequence< OUString > SAL_CALL SdMasterPage::getSupportedServiceNames() throw(uno::RuntimeException) 2830 { 2831 OGuard aGuard( Application::GetSolarMutex() ); 2832 2833 throwIfDisposed(); 2834 2835 Sequence< OUString > aSeq( SdGenericDrawPage::getSupportedServiceNames() ); 2836 comphelper::ServiceInfoHelper::addToSequence( aSeq, 1, "com.sun.star.drawing.MasterPage" ); 2837 2838 if( SvxFmDrawPage::mpPage && ((SdPage*)SvxFmDrawPage::mpPage)->GetPageKind() == PK_HANDOUT ) 2839 comphelper::ServiceInfoHelper::addToSequence( aSeq, 1, "com.sun.star.presentation.HandoutMasterPage" ); 2840 2841 return aSeq; 2842 } 2843 2844 sal_Bool SAL_CALL SdMasterPage::supportsService( const OUString& ServiceName ) 2845 throw(uno::RuntimeException) 2846 { 2847 return SdGenericDrawPage::supportsService( ServiceName ); 2848 } 2849 2850 // XElementAccess 2851 sal_Bool SAL_CALL SdMasterPage::hasElements() throw(uno::RuntimeException) 2852 { 2853 OGuard aGuard( Application::GetSolarMutex() ); 2854 2855 throwIfDisposed(); 2856 2857 if( SvxFmDrawPage::mpPage == NULL ) 2858 return sal_False; 2859 2860 return SvxFmDrawPage::mpPage->GetObjCount() > 0; 2861 } 2862 2863 uno::Type SAL_CALL SdMasterPage::getElementType() 2864 throw(uno::RuntimeException) 2865 { 2866 return SdGenericDrawPage::getElementType(); 2867 } 2868 2869 // XIndexAccess 2870 sal_Int32 SAL_CALL SdMasterPage::getCount() 2871 throw(uno::RuntimeException) 2872 { 2873 OGuard aGuard( Application::GetSolarMutex() ); 2874 2875 throwIfDisposed(); 2876 2877 return SdGenericDrawPage::getCount(); 2878 } 2879 2880 Any SAL_CALL SdMasterPage::getByIndex( sal_Int32 Index ) 2881 throw(lang::IndexOutOfBoundsException, lang::WrappedTargetException, uno::RuntimeException) 2882 { 2883 OGuard aGuard( Application::GetSolarMutex() ); 2884 2885 throwIfDisposed(); 2886 2887 return SdGenericDrawPage::getByIndex(Index); 2888 } 2889 2890 // intern 2891 void SdMasterPage::setBackground( const Any& rValue ) 2892 throw( lang::IllegalArgumentException ) 2893 { 2894 // we need at least an beans::XPropertySet 2895 Reference< beans::XPropertySet > xInputSet( rValue, UNO_QUERY ); 2896 if( !xInputSet.is() ) 2897 throw lang::IllegalArgumentException(); 2898 2899 try 2900 { 2901 if( GetModel() && mbIsImpressDocument ) 2902 { 2903 Reference< container::XNameAccess > xFamilies( GetModel()->getStyleFamilies(), UNO_QUERY_THROW ); 2904 Reference< container::XNameAccess > xFamily( xFamilies->getByName( getName() ), UNO_QUERY_THROW ) ; 2905 if( xFamily.is() ) 2906 { 2907 OUString aStyleName( OUString::createFromAscii(sUNO_PseudoSheet_Background) ); 2908 2909 Reference< beans::XPropertySet > xStyleSet( xFamily->getByName( aStyleName ), UNO_QUERY_THROW ); 2910 2911 Reference< beans::XPropertySetInfo > xSetInfo( xInputSet->getPropertySetInfo(), UNO_QUERY_THROW ); 2912 Reference< beans::XPropertyState > xSetStates( xInputSet, UNO_QUERY ); 2913 2914 PropertyEntryVector_t aBackgroundProperties = ImplGetPageBackgroundPropertySet()->getPropertyMap()->getPropertyEntries(); 2915 PropertyEntryVector_t::const_iterator aIt = aBackgroundProperties.begin(); 2916 while( aIt != aBackgroundProperties.end() ) 2917 { 2918 if( xSetInfo->hasPropertyByName( aIt->sName ) ) 2919 { 2920 if( !xSetStates.is() || xSetStates->getPropertyState( aIt->sName ) == beans::PropertyState_DIRECT_VALUE ) 2921 xStyleSet->setPropertyValue( aIt->sName, xInputSet->getPropertyValue( aIt->sName ) ); 2922 else 2923 xSetStates->setPropertyToDefault( aIt->sName ); 2924 } 2925 2926 ++aIt; 2927 } 2928 } 2929 } 2930 else 2931 { 2932 // first fill an item set 2933 // is it our own implementation? 2934 SdUnoPageBackground* pBack = SdUnoPageBackground::getImplementation( xInputSet ); 2935 2936 SfxItemSet aSet( GetModel()->GetDoc()->GetPool(), XATTR_FILL_FIRST, XATTR_FILL_LAST ); 2937 2938 if( pBack ) 2939 { 2940 pBack->fillItemSet( (SdDrawDocument*)GetPage()->GetModel(), aSet ); 2941 } 2942 else 2943 { 2944 SdUnoPageBackground* pBackground = new SdUnoPageBackground(); 2945 2946 Reference< beans::XPropertySetInfo > xInputSetInfo( xInputSet->getPropertySetInfo(), UNO_QUERY_THROW ); 2947 Reference< beans::XPropertySet > xDestSet( (beans::XPropertySet*)pBackground ); 2948 Reference< beans::XPropertySetInfo > xDestSetInfo( xDestSet->getPropertySetInfo(), UNO_QUERY_THROW ); 2949 2950 uno::Sequence< beans::Property> aProperties( xDestSetInfo->getProperties() ); 2951 sal_Int32 nCount = aProperties.getLength(); 2952 beans::Property* pProp = aProperties.getArray(); 2953 2954 while( nCount-- ) 2955 { 2956 const OUString aPropName( pProp->Name ); 2957 if( xInputSetInfo->hasPropertyByName( aPropName ) ) 2958 xDestSet->setPropertyValue( aPropName, xInputSet->getPropertyValue( aPropName ) ); 2959 2960 pProp++; 2961 } 2962 2963 pBackground->fillItemSet( (SdDrawDocument*)SvxFmDrawPage::mpPage->GetModel(), aSet ); 2964 } 2965 2966 // if we find the background style, copy the set to the background 2967 SdDrawDocument* pDoc = (SdDrawDocument*)SvxFmDrawPage::mpPage->GetModel(); 2968 SfxStyleSheetBasePool* pSSPool = (SfxStyleSheetBasePool*)pDoc->GetStyleSheetPool(); 2969 if(pSSPool) 2970 { 2971 String aLayoutName( static_cast< SdPage* >( SvxFmDrawPage::mpPage )->GetLayoutName() ); 2972 aLayoutName.Erase(aLayoutName.Search(String(RTL_CONSTASCII_USTRINGPARAM(SD_LT_SEPARATOR)))+4); 2973 aLayoutName += String(SdResId(STR_LAYOUT_BACKGROUND)); 2974 SfxStyleSheetBase* pStyleSheet = pSSPool->Find( aLayoutName, SD_STYLE_FAMILY_MASTERPAGE ); 2975 2976 if( pStyleSheet ) 2977 { 2978 pStyleSheet->GetItemSet().Put( aSet ); 2979 2980 // repaint only 2981 SvxFmDrawPage::mpPage->ActionChanged(); 2982 return; 2983 } 2984 } 2985 2986 // if no background style is available, set at page directly. This 2987 // is an error and should NOT happen (and will be asserted from the SdrPage) 2988 GetPage()->getSdrPageProperties().PutItemSet(aSet); 2989 } 2990 } 2991 catch( Exception& ) 2992 { 2993 DBG_ERROR("sd::SdMasterPage::setBackground(), exception caught!"); 2994 } 2995 } 2996 2997 void SdMasterPage::getBackground( Any& rValue ) throw() 2998 { 2999 if( GetModel() ) try 3000 { 3001 if( mbIsImpressDocument ) 3002 { 3003 Reference< container::XNameAccess > xFamilies( GetModel()->getStyleFamilies(), UNO_QUERY_THROW ); 3004 Reference< container::XNameAccess > xFamily( xFamilies->getByName( getName() ), UNO_QUERY_THROW ); 3005 3006 const OUString aStyleName( OUString::createFromAscii(sUNO_PseudoSheet_Background) ); 3007 rValue <<= Reference< beans::XPropertySet >( xFamily->getByName( aStyleName ), UNO_QUERY_THROW ); 3008 } 3009 else 3010 { 3011 SdDrawDocument* pDoc = (SdDrawDocument*)SvxFmDrawPage::mpPage->GetModel(); 3012 SfxStyleSheetBasePool* pSSPool = (SfxStyleSheetBasePool*)pDoc->GetStyleSheetPool(); 3013 if(pSSPool) 3014 { 3015 String aLayoutName( static_cast< SdPage* >(SvxFmDrawPage::mpPage)->GetLayoutName() ); 3016 aLayoutName.Erase( aLayoutName.Search(String(RTL_CONSTASCII_USTRINGPARAM(SD_LT_SEPARATOR)))+4); 3017 aLayoutName += String(SdResId(STR_LAYOUT_BACKGROUND)); 3018 SfxStyleSheetBase* pStyleSheet = pSSPool->Find( aLayoutName, SD_STYLE_FAMILY_MASTERPAGE ); 3019 3020 if( pStyleSheet ) 3021 { 3022 SfxItemSet aStyleSet( pStyleSheet->GetItemSet()); 3023 if( aStyleSet.Count() ) 3024 { 3025 rValue <<= Reference< beans::XPropertySet >( new SdUnoPageBackground( pDoc, &aStyleSet ) ); 3026 return; 3027 } 3028 } 3029 } 3030 3031 // No style found, use fill attributes from page background. This 3032 // should NOT happen and is an error 3033 const SfxItemSet& rFallbackItemSet(SvxFmDrawPage::mpPage->getSdrPageProperties().GetItemSet()); 3034 3035 if(XFILL_NONE == ((const XFillStyleItem&)rFallbackItemSet.Get(XATTR_FILLSTYLE)).GetValue()) 3036 { 3037 rValue <<= Reference< beans::XPropertySet >( 3038 new SdUnoPageBackground(GetModel()->GetDoc(), &rFallbackItemSet)); 3039 } 3040 else 3041 { 3042 rValue.clear(); 3043 } 3044 } 3045 } 3046 catch( Exception& ) 3047 { 3048 rValue.clear(); 3049 DBG_ERROR("sd::SdMasterPage::getBackground(), exception caught!"); 3050 } 3051 } 3052 3053 // XNamed 3054 void SAL_CALL SdMasterPage::setName( const OUString& aName ) 3055 throw(uno::RuntimeException) 3056 { 3057 OGuard aGuard( Application::GetSolarMutex() ); 3058 3059 throwIfDisposed(); 3060 3061 if(SvxFmDrawPage::mpPage && GetPage()->GetPageKind() != PK_NOTES) 3062 { 3063 String aNewName( aName ); 3064 GetPage()->SetName( aNewName ); 3065 3066 if(GetModel()->GetDoc()) 3067 GetModel()->GetDoc()->RenameLayoutTemplate(GetPage()->GetLayoutName(), aNewName); 3068 3069 // fake a mode change to repaint the page tab bar 3070 ::sd::DrawDocShell* pDocSh = GetModel()->GetDocShell(); 3071 ::sd::ViewShell* pViewSh = pDocSh ? pDocSh->GetViewShell() : NULL; 3072 if( pViewSh && pViewSh->ISA(::sd::DrawViewShell ) ) 3073 { 3074 ::sd::DrawViewShell* pDrawViewSh = 3075 static_cast< ::sd::DrawViewShell*>(pViewSh); 3076 3077 EditMode eMode = pDrawViewSh->GetEditMode(); 3078 if( eMode == EM_MASTERPAGE ) 3079 { 3080 sal_Bool bLayer = pDrawViewSh->IsLayerModeActive(); 3081 3082 pDrawViewSh->ChangeEditMode( eMode, !bLayer ); 3083 pDrawViewSh->ChangeEditMode( eMode, bLayer ); 3084 } 3085 } 3086 3087 GetModel()->SetModified(); 3088 } 3089 } 3090 3091 OUString SAL_CALL SdMasterPage::getName( ) 3092 throw(uno::RuntimeException) 3093 { 3094 OGuard aGuard( Application::GetSolarMutex() ); 3095 3096 throwIfDisposed(); 3097 3098 if(SvxFmDrawPage::mpPage) 3099 { 3100 String aLayoutName( GetPage()->GetLayoutName() ); 3101 aLayoutName = aLayoutName.Erase(aLayoutName.Search( String( RTL_CONSTASCII_USTRINGPARAM((SD_LT_SEPARATOR))))); 3102 3103 return aLayoutName; 3104 } 3105 3106 return OUString(); 3107 } 3108 3109 // XPresentationPage 3110 Reference< drawing::XDrawPage > SAL_CALL SdMasterPage::getNotesPage() 3111 throw(uno::RuntimeException) 3112 { 3113 OGuard aGuard( Application::GetSolarMutex() ); 3114 3115 throwIfDisposed(); 3116 3117 if(SvxFmDrawPage::mpPage && GetModel()->GetDoc() ) 3118 { 3119 SdPage* pNotesPage = GetModel()->GetDoc()->GetMasterSdPage( (SvxFmDrawPage::mpPage->GetPageNum()-1)>>1, PK_NOTES ); 3120 if( pNotesPage ) 3121 { 3122 Reference< drawing::XDrawPage > xPage( pNotesPage->getUnoPage(), uno::UNO_QUERY ); 3123 return xPage; 3124 } 3125 } 3126 return NULL; 3127 } 3128 3129 // XShapes 3130 void SAL_CALL SdMasterPage::add( const Reference< drawing::XShape >& xShape ) throw(uno::RuntimeException) 3131 { 3132 SdGenericDrawPage::add( xShape ); 3133 } 3134 3135 void SAL_CALL SdMasterPage::remove( const Reference< drawing::XShape >& xShape ) throw(uno::RuntimeException) 3136 { 3137 OGuard aGuard( Application::GetSolarMutex() ); 3138 3139 throwIfDisposed(); 3140 3141 SvxShape* pShape = SvxShape::getImplementation( xShape ); 3142 if( pShape ) 3143 { 3144 SdrObject* pObj = pShape->GetSdrObject(); 3145 if( pObj ) 3146 { 3147 if( GetPage()->IsPresObj( pObj ) ) 3148 GetPage()->RemovePresObj(pObj); 3149 } 3150 } 3151 3152 SdGenericDrawPage::remove( xShape ); 3153 } 3154 3155 3156 Reference< uno::XInterface > createUnoPageImpl( SdPage* pPage ) 3157 { 3158 Reference< uno::XInterface > xPage; 3159 3160 if( pPage && pPage->GetModel() ) 3161 { 3162 SdXImpressDocument* pModel = SdXImpressDocument::getImplementation( pPage->GetModel()->getUnoModel() ); 3163 if( pModel ) 3164 { 3165 if( pPage->IsMasterPage() ) 3166 { 3167 xPage = (::cppu::OWeakObject*)new SdMasterPage( pModel, pPage ); 3168 } 3169 else 3170 { 3171 xPage = (::cppu::OWeakObject*)new SdDrawPage( pModel, pPage ); 3172 } 3173 } 3174 } 3175 3176 return xPage; 3177 } 3178