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