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