1*5b190011SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*5b190011SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*5b190011SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*5b190011SAndrew Rist  * distributed with this work for additional information
6*5b190011SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*5b190011SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*5b190011SAndrew Rist  * "License"); you may not use this file except in compliance
9*5b190011SAndrew Rist  * with the License.  You may obtain a copy of the License at
10*5b190011SAndrew Rist  *
11*5b190011SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*5b190011SAndrew Rist  *
13*5b190011SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*5b190011SAndrew Rist  * software distributed under the License is distributed on an
15*5b190011SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*5b190011SAndrew Rist  * KIND, either express or implied.  See the License for the
17*5b190011SAndrew Rist  * specific language governing permissions and limitations
18*5b190011SAndrew Rist  * under the License.
19*5b190011SAndrew Rist  *
20*5b190011SAndrew Rist  *************************************************************/
21*5b190011SAndrew Rist 
22*5b190011SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_sd.hxx"
26cdf0e10cSrcweir 
27cdf0e10cSrcweir #ifndef _COM_SUN_STAR_UTIL_XCOLLATOR_HPP_
28cdf0e10cSrcweir #include <com/sun/star/i18n/XCollator.hpp>
29cdf0e10cSrcweir #endif
30cdf0e10cSrcweir 
31cdf0e10cSrcweir #ifndef _UNOTOOLS_PROCESSFACTORY_HXX
32cdf0e10cSrcweir #include <comphelper/processfactory.hxx>
33cdf0e10cSrcweir #endif
34cdf0e10cSrcweir #include <vcl/svapp.hxx>
35cdf0e10cSrcweir #include <vcl/tabctrl.hxx>
36cdf0e10cSrcweir #include <vcl/tabpage.hxx>
37cdf0e10cSrcweir 
38cdf0e10cSrcweir #ifndef _SV_BUTTON_HXX
39cdf0e10cSrcweir #include <vcl/button.hxx>
40cdf0e10cSrcweir #endif
41cdf0e10cSrcweir #include <vcl/fixed.hxx>
42cdf0e10cSrcweir #include <vcl/lstbox.hxx>
43cdf0e10cSrcweir #include <vcl/combobox.hxx>
44cdf0e10cSrcweir #include <svtools/valueset.hxx>
45cdf0e10cSrcweir 
46cdf0e10cSrcweir #include <svx/svdetc.hxx>
47cdf0e10cSrcweir #include <svx/svdstr.hrc>
48cdf0e10cSrcweir #include "sdresid.hxx"
49cdf0e10cSrcweir #include <unotools/viewoptions.hxx>
50cdf0e10cSrcweir #include <com/sun/star/presentation/EffectNodeType.hpp>
51cdf0e10cSrcweir #include "CustomAnimationCreateDialog.hxx"
52cdf0e10cSrcweir #ifndef _SD_CUSTOMANIMATIONCREATEDIALOG_HRC
53cdf0e10cSrcweir #include "CustomAnimationCreateDialog.hrc"
54cdf0e10cSrcweir #endif
55cdf0e10cSrcweir #ifndef _SD_CUSTOMANIMATION_HRC
56cdf0e10cSrcweir #include "CustomAnimation.hrc"
57cdf0e10cSrcweir #endif
58cdf0e10cSrcweir #include "CustomAnimationPane.hxx"
59cdf0e10cSrcweir #include "optsitem.hxx"
60cdf0e10cSrcweir #include "sddll.hxx"
61cdf0e10cSrcweir 
62cdf0e10cSrcweir #include "helpids.h"
63cdf0e10cSrcweir 
64cdf0e10cSrcweir using namespace ::com::sun::star;
65cdf0e10cSrcweir 
66cdf0e10cSrcweir using ::rtl::OUString;
67cdf0e10cSrcweir using ::com::sun::star::uno::UNO_QUERY;
68cdf0e10cSrcweir using ::com::sun::star::uno::UNO_QUERY_THROW;
69cdf0e10cSrcweir using ::com::sun::star::uno::Any;
70cdf0e10cSrcweir using ::com::sun::star::uno::Reference;
71cdf0e10cSrcweir using ::com::sun::star::uno::Exception;
72cdf0e10cSrcweir 
73cdf0e10cSrcweir using namespace ::com::sun::star::presentation;
74cdf0e10cSrcweir 
75cdf0e10cSrcweir namespace sd {
76cdf0e10cSrcweir 
77cdf0e10cSrcweir 
78cdf0e10cSrcweir const int ENTRANCE = 0;
79cdf0e10cSrcweir const int EMPHASIS = 1;
80cdf0e10cSrcweir const int EXIT = 2;
81cdf0e10cSrcweir const int MOTIONPATH = 3;
82cdf0e10cSrcweir const int MISCEFFECTS = 4;
83cdf0e10cSrcweir 
84cdf0e10cSrcweir extern void fillDurationComboBox( ComboBox* pBox );
85cdf0e10cSrcweir 
86cdf0e10cSrcweir // --------------------------------------------------------------------
87cdf0e10cSrcweir 
88cdf0e10cSrcweir class CategoryListBox : public ListBox
89cdf0e10cSrcweir {
90cdf0e10cSrcweir public:
91cdf0e10cSrcweir 	CategoryListBox( Window* pParent, const ResId& rResId );
92cdf0e10cSrcweir 	~CategoryListBox();
93cdf0e10cSrcweir 
94cdf0e10cSrcweir 	virtual void        MouseButtonUp( const MouseEvent& rMEvt );
95cdf0e10cSrcweir 
96cdf0e10cSrcweir 	sal_uInt16			InsertCategory( const XubString& rStr, sal_uInt16 nPos = LISTBOX_APPEND );
97cdf0e10cSrcweir 
SetDoubleClickLink(const Link & rDoubleClickHdl)98cdf0e10cSrcweir 	void			SetDoubleClickLink( const Link& rDoubleClickHdl ) { maDoubleClickHdl = rDoubleClickHdl; }
99cdf0e10cSrcweir 
100cdf0e10cSrcweir 	DECL_LINK( implDoubleClickHdl, Control* );
101cdf0e10cSrcweir 
102cdf0e10cSrcweir private:
103cdf0e10cSrcweir 	virtual void	UserDraw( const UserDrawEvent& rUDEvt );
104cdf0e10cSrcweir 
105cdf0e10cSrcweir 	Link			maDoubleClickHdl;
106cdf0e10cSrcweir };
107cdf0e10cSrcweir 
CategoryListBox(Window * pParent,const ResId & rResId)108cdf0e10cSrcweir CategoryListBox::CategoryListBox( Window* pParent, const ResId& rResId )
109cdf0e10cSrcweir : ListBox( pParent, rResId )
110cdf0e10cSrcweir {
111cdf0e10cSrcweir 	EnableUserDraw( sal_True );
112cdf0e10cSrcweir 	SetDoubleClickHdl( LINK( this, CategoryListBox, implDoubleClickHdl ) );
113cdf0e10cSrcweir }
114cdf0e10cSrcweir 
~CategoryListBox()115cdf0e10cSrcweir CategoryListBox::~CategoryListBox()
116cdf0e10cSrcweir {
117cdf0e10cSrcweir }
118cdf0e10cSrcweir 
InsertCategory(const XubString & rStr,sal_uInt16 nPos)119cdf0e10cSrcweir sal_uInt16 CategoryListBox::InsertCategory( const XubString& rStr, sal_uInt16 nPos /* = LISTBOX_APPEND */ )
120cdf0e10cSrcweir {
121cdf0e10cSrcweir 	sal_uInt16 n = ListBox::InsertEntry( rStr, nPos );
122cdf0e10cSrcweir 	if( n != LISTBOX_ENTRY_NOTFOUND )
123cdf0e10cSrcweir 		ListBox::SetEntryFlags( n, ListBox::GetEntryFlags(n) | LISTBOX_ENTRY_FLAG_DISABLE_SELECTION );
124cdf0e10cSrcweir 
125cdf0e10cSrcweir 	return n;
126cdf0e10cSrcweir }
127cdf0e10cSrcweir 
UserDraw(const UserDrawEvent & rUDEvt)128cdf0e10cSrcweir void CategoryListBox::UserDraw( const UserDrawEvent& rUDEvt )
129cdf0e10cSrcweir {
130cdf0e10cSrcweir 	const sal_uInt16 nItem = rUDEvt.GetItemId();
131cdf0e10cSrcweir 
132cdf0e10cSrcweir 	if( ListBox::GetEntryFlags(nItem) & LISTBOX_ENTRY_FLAG_DISABLE_SELECTION )
133cdf0e10cSrcweir 	{
134cdf0e10cSrcweir 		Rectangle aOutRect( rUDEvt.GetRect() );
135cdf0e10cSrcweir 		OutputDevice* pDev = rUDEvt.GetDevice();
136cdf0e10cSrcweir 
137cdf0e10cSrcweir 		// fill the background
138cdf0e10cSrcweir         Color aColor (GetSettings().GetStyleSettings().GetDialogColor());
139cdf0e10cSrcweir 
140cdf0e10cSrcweir         pDev->SetFillColor (aColor);
141cdf0e10cSrcweir         pDev->SetLineColor ();
142cdf0e10cSrcweir         pDev->DrawRect(aOutRect);
143cdf0e10cSrcweir 
144cdf0e10cSrcweir         // Erase the four corner pixels to make the rectangle appear rounded.
145cdf0e10cSrcweir         pDev->SetLineColor( GetSettings().GetStyleSettings().GetWindowColor());
146cdf0e10cSrcweir         pDev->DrawPixel( aOutRect.TopLeft());
147cdf0e10cSrcweir         pDev->DrawPixel( Point(aOutRect.Right(), aOutRect.Top()));
148cdf0e10cSrcweir         pDev->DrawPixel( Point(aOutRect.Left(), aOutRect.Bottom()));
149cdf0e10cSrcweir         pDev->DrawPixel( Point(aOutRect.Right(), aOutRect.Bottom()));
150cdf0e10cSrcweir 
151cdf0e10cSrcweir 		// draw the category title
152cdf0e10cSrcweir 		pDev->DrawText (aOutRect, GetEntry(nItem), TEXT_DRAW_CENTER );
153cdf0e10cSrcweir 	}
154cdf0e10cSrcweir 	else
155cdf0e10cSrcweir 	{
156cdf0e10cSrcweir 		DrawEntry( rUDEvt, sal_True, sal_True );
157cdf0e10cSrcweir 	}
158cdf0e10cSrcweir }
159cdf0e10cSrcweir 
160cdf0e10cSrcweir // --------------------------------------------------------------------
161cdf0e10cSrcweir 
IMPL_LINK(CategoryListBox,implDoubleClickHdl,Control *,EMPTYARG)162cdf0e10cSrcweir IMPL_LINK( CategoryListBox, implDoubleClickHdl, Control*, EMPTYARG )
163cdf0e10cSrcweir {
164cdf0e10cSrcweir 	CaptureMouse();
165cdf0e10cSrcweir 	return 0;
166cdf0e10cSrcweir }
167cdf0e10cSrcweir 
168cdf0e10cSrcweir // --------------------------------------------------------------------
169cdf0e10cSrcweir 
MouseButtonUp(const MouseEvent & rMEvt)170cdf0e10cSrcweir void CategoryListBox::MouseButtonUp( const MouseEvent& rMEvt )
171cdf0e10cSrcweir {
172cdf0e10cSrcweir     ReleaseMouse();
173cdf0e10cSrcweir 	if( rMEvt.IsLeft() && (rMEvt.GetClicks() == 2) )
174cdf0e10cSrcweir 	{
175cdf0e10cSrcweir 		if( maDoubleClickHdl.IsSet() )
176cdf0e10cSrcweir 			maDoubleClickHdl.Call( this );
177cdf0e10cSrcweir 	}
178cdf0e10cSrcweir 	else
179cdf0e10cSrcweir 	{
180cdf0e10cSrcweir 		ListBox::MouseButtonUp( rMEvt );
181cdf0e10cSrcweir 	}
182cdf0e10cSrcweir }
183cdf0e10cSrcweir 
184cdf0e10cSrcweir // --------------------------------------------------------------------
185cdf0e10cSrcweir 
186cdf0e10cSrcweir class CustomAnimationCreateTabPage : public TabPage
187cdf0e10cSrcweir {
188cdf0e10cSrcweir public:
189cdf0e10cSrcweir 	CustomAnimationCreateTabPage( Window* pParent, CustomAnimationCreateDialog* pDialogParent, int nTabId, const PresetCategoryList& rCategoryList, bool bHasText );
190cdf0e10cSrcweir 	~CustomAnimationCreateTabPage();
191cdf0e10cSrcweir 
192cdf0e10cSrcweir 	PathKind getCreatePathKind() const;
193cdf0e10cSrcweir 	CustomAnimationPresetPtr getSelectedPreset() const;
194cdf0e10cSrcweir 	double getDuration() const;
195cdf0e10cSrcweir 	void setDuration( double fDuration );
196cdf0e10cSrcweir 
197cdf0e10cSrcweir 	bool getIsPreview() const;
198cdf0e10cSrcweir 	void setIsPreview( bool bIsPreview );
199cdf0e10cSrcweir 
200cdf0e10cSrcweir 	bool select( const OUString& rsPresetId );
201cdf0e10cSrcweir 
202cdf0e10cSrcweir private:
203cdf0e10cSrcweir 	DECL_LINK( implSelectHdl, Control* );
204cdf0e10cSrcweir 	DECL_LINK( implDoubleClickHdl, Control* );
205cdf0e10cSrcweir 
206cdf0e10cSrcweir 	void onSelectEffect();
207cdf0e10cSrcweir 
208cdf0e10cSrcweir 	void clearEffects();
209cdf0e10cSrcweir 
210cdf0e10cSrcweir private:
211cdf0e10cSrcweir 	CategoryListBox*	mpLBEffects;
212cdf0e10cSrcweir 	FixedText*	mpFTSpeed;
213cdf0e10cSrcweir 	ComboBox*	mpCBSpeed;
214cdf0e10cSrcweir 	CheckBox*	mpCBXPReview;
215cdf0e10cSrcweir 
216cdf0e10cSrcweir 	CustomAnimationCreateDialog*		mpParent;
217cdf0e10cSrcweir 
218cdf0e10cSrcweir 	sal_uInt16 mnCurvePathPos;
219cdf0e10cSrcweir 	sal_uInt16 mnPolygonPathPos;
220cdf0e10cSrcweir 	sal_uInt16 mnFreeformPathPos;
221cdf0e10cSrcweir 
222cdf0e10cSrcweir };
223cdf0e10cSrcweir 
224cdf0e10cSrcweir struct ImplStlEffectCategorySortHelper
225cdf0e10cSrcweir {
226cdf0e10cSrcweir 	ImplStlEffectCategorySortHelper();
227cdf0e10cSrcweir 	bool operator()( const CustomAnimationPresetPtr& p1, const CustomAnimationPresetPtr& p2 );
228cdf0e10cSrcweir 
229cdf0e10cSrcweir private:
230cdf0e10cSrcweir 	uno::Reference< i18n::XCollator > mxCollator;
231cdf0e10cSrcweir };
232cdf0e10cSrcweir 
ImplStlEffectCategorySortHelper()233cdf0e10cSrcweir ImplStlEffectCategorySortHelper::ImplStlEffectCategorySortHelper()
234cdf0e10cSrcweir {
235cdf0e10cSrcweir 	uno::Reference<lang::XMultiServiceFactory> xFac( ::comphelper::getProcessServiceFactory() );
236cdf0e10cSrcweir 	if( xFac.is() )
237cdf0e10cSrcweir 	{
238cdf0e10cSrcweir 		mxCollator.set( xFac->createInstance( ::rtl::OUString::createFromAscii( "com.sun.star.i18n.Collator" ) ), uno::UNO_QUERY );
239cdf0e10cSrcweir 
240cdf0e10cSrcweir 		if( mxCollator.is() )
241cdf0e10cSrcweir 		{
242cdf0e10cSrcweir 			const lang::Locale& rLocale = Application::GetSettings().GetLocale();
243cdf0e10cSrcweir 			mxCollator->loadDefaultCollator(rLocale, 0);
244cdf0e10cSrcweir 		}
245cdf0e10cSrcweir 	}
246cdf0e10cSrcweir }
247cdf0e10cSrcweir 
operator ()(const CustomAnimationPresetPtr & p1,const CustomAnimationPresetPtr & p2)248cdf0e10cSrcweir bool ImplStlEffectCategorySortHelper::operator()( const CustomAnimationPresetPtr& p1, const CustomAnimationPresetPtr& p2 )
249cdf0e10cSrcweir {
250cdf0e10cSrcweir 	return mxCollator.is() ? mxCollator->compareString(p1->getLabel(), p2->getLabel()) == -1 : false;
251cdf0e10cSrcweir }
252cdf0e10cSrcweir 
CustomAnimationCreateTabPage(Window * pParent,CustomAnimationCreateDialog * pDialogParent,int nTabId,const PresetCategoryList & rCategoryList,bool bHasText)253cdf0e10cSrcweir CustomAnimationCreateTabPage::CustomAnimationCreateTabPage( Window* pParent, CustomAnimationCreateDialog* pDialogParent, int nTabId, const PresetCategoryList& rCategoryList, bool bHasText )
254cdf0e10cSrcweir : TabPage( pParent, SdResId( RID_TP_CUSTOMANIMATION_ENTRANCE ) )
255cdf0e10cSrcweir , mpParent( pDialogParent )
256cdf0e10cSrcweir , mnCurvePathPos( LISTBOX_ENTRY_NOTFOUND )
257cdf0e10cSrcweir , mnPolygonPathPos( LISTBOX_ENTRY_NOTFOUND )
258cdf0e10cSrcweir , mnFreeformPathPos( LISTBOX_ENTRY_NOTFOUND )
259cdf0e10cSrcweir {
260cdf0e10cSrcweir 	mpLBEffects = new CategoryListBox( this, SdResId( LB_EFFECTS ) );
261cdf0e10cSrcweir 	mpFTSpeed = new FixedText( this, SdResId( FT_SPEED ) );
262cdf0e10cSrcweir 	mpCBSpeed = new ComboBox( this, SdResId( CB_SPEED ) );
263cdf0e10cSrcweir 	mpCBXPReview = new CheckBox( this, SdResId( CBX_PREVIEW ) );
264cdf0e10cSrcweir 
265cdf0e10cSrcweir 	String sMotionPathLabel( SdResId( STR_USERPATH ) );
266cdf0e10cSrcweir 
267cdf0e10cSrcweir 	FreeResource();
268cdf0e10cSrcweir 
269cdf0e10cSrcweir 	sal_uInt16 nFirstEffect = LISTBOX_ENTRY_NOTFOUND;
270cdf0e10cSrcweir 
271cdf0e10cSrcweir 	if( nTabId == MOTIONPATH )
272cdf0e10cSrcweir 	{
273cdf0e10cSrcweir 		mpLBEffects->InsertCategory( sMotionPathLabel );
274cdf0e10cSrcweir 
275cdf0e10cSrcweir 		mnCurvePathPos = nFirstEffect = mpLBEffects->InsertEntry( sdr::GetResourceString(STR_ObjNameSingulCOMBLINE) );
276cdf0e10cSrcweir 		mnPolygonPathPos = mpLBEffects->InsertEntry( sdr::GetResourceString(STR_ObjNameSingulPOLY) );
277cdf0e10cSrcweir 		mnFreeformPathPos = mpLBEffects->InsertEntry( sdr::GetResourceString(STR_ObjNameSingulFREELINE) );
278cdf0e10cSrcweir 	};
279cdf0e10cSrcweir 
280cdf0e10cSrcweir 	PresetCategoryList::const_iterator aCategoryIter( rCategoryList.begin() );
281cdf0e10cSrcweir 	const PresetCategoryList::const_iterator aCategoryEnd( rCategoryList.end() );
282cdf0e10cSrcweir 	while( aCategoryIter != aCategoryEnd )
283cdf0e10cSrcweir 	{
284cdf0e10cSrcweir 		PresetCategoryPtr pCategory( *aCategoryIter++ );
285cdf0e10cSrcweir 		if( pCategory.get() )
286cdf0e10cSrcweir 		{
287cdf0e10cSrcweir 			mpLBEffects->InsertCategory( pCategory->maLabel );
288cdf0e10cSrcweir 
289cdf0e10cSrcweir 			std::vector< CustomAnimationPresetPtr > aSortedVector(pCategory->maEffects.size());
290cdf0e10cSrcweir 			std::copy( pCategory->maEffects.begin(), pCategory->maEffects.end(), aSortedVector.begin() );
291cdf0e10cSrcweir 			ImplStlEffectCategorySortHelper aSortHelper;
292cdf0e10cSrcweir 			std::sort( aSortedVector.begin(), aSortedVector.end(), aSortHelper );
293cdf0e10cSrcweir 
294cdf0e10cSrcweir 			std::vector< CustomAnimationPresetPtr >::const_iterator aIter( aSortedVector.begin() );
295cdf0e10cSrcweir 			const std::vector< CustomAnimationPresetPtr >::const_iterator aEnd( aSortedVector.end() );
296cdf0e10cSrcweir 			while( aIter != aEnd )
297cdf0e10cSrcweir 			{
298cdf0e10cSrcweir 				CustomAnimationPresetPtr pDescriptor = (*aIter++);
299cdf0e10cSrcweir 				if( pDescriptor.get() && (bHasText || !pDescriptor->isTextOnly() ) )
300cdf0e10cSrcweir 				{
301cdf0e10cSrcweir 					sal_uInt16 nPos = mpLBEffects->InsertEntry( pDescriptor->getLabel() );
302cdf0e10cSrcweir 					mpLBEffects->SetEntryData( nPos, static_cast<void*>( new CustomAnimationPresetPtr( pDescriptor ) ) );
303cdf0e10cSrcweir 
304cdf0e10cSrcweir 					if( nFirstEffect == LISTBOX_ENTRY_NOTFOUND )
305cdf0e10cSrcweir 						nFirstEffect = nPos;
306cdf0e10cSrcweir 				}
307cdf0e10cSrcweir 			}
308cdf0e10cSrcweir 		}
309cdf0e10cSrcweir 	}
310cdf0e10cSrcweir 
311cdf0e10cSrcweir 	mpLBEffects->SelectEntryPos( nFirstEffect );
312cdf0e10cSrcweir 
313cdf0e10cSrcweir 	fillDurationComboBox( mpCBSpeed );
314cdf0e10cSrcweir 
315cdf0e10cSrcweir 	if( nFirstEffect != LISTBOX_ENTRY_NOTFOUND )
316cdf0e10cSrcweir 		onSelectEffect();
317cdf0e10cSrcweir 
318cdf0e10cSrcweir 	mpLBEffects->SetSelectHdl( LINK( this, CustomAnimationCreateTabPage, implSelectHdl ) );
319cdf0e10cSrcweir 	mpLBEffects->SetDoubleClickLink( LINK( this, CustomAnimationCreateTabPage, implDoubleClickHdl ) );
320cdf0e10cSrcweir }
321cdf0e10cSrcweir 
~CustomAnimationCreateTabPage()322cdf0e10cSrcweir CustomAnimationCreateTabPage::~CustomAnimationCreateTabPage()
323cdf0e10cSrcweir {
324cdf0e10cSrcweir 	clearEffects();
325cdf0e10cSrcweir 
326cdf0e10cSrcweir 	delete mpLBEffects;
327cdf0e10cSrcweir 	delete mpFTSpeed;
328cdf0e10cSrcweir 	delete mpCBSpeed;
329cdf0e10cSrcweir 	delete mpCBXPReview;
330cdf0e10cSrcweir }
331cdf0e10cSrcweir 
IMPL_LINK(CustomAnimationCreateTabPage,implSelectHdl,Control *,pControl)332cdf0e10cSrcweir IMPL_LINK( CustomAnimationCreateTabPage, implSelectHdl, Control*, pControl )
333cdf0e10cSrcweir {
334cdf0e10cSrcweir 	if( pControl == mpLBEffects )
335cdf0e10cSrcweir 		onSelectEffect();
336cdf0e10cSrcweir 	return 0;
337cdf0e10cSrcweir }
338cdf0e10cSrcweir 
IMPL_LINK(CustomAnimationCreateTabPage,implDoubleClickHdl,Control *,pControl)339cdf0e10cSrcweir IMPL_LINK( CustomAnimationCreateTabPage, implDoubleClickHdl, Control*, pControl )
340cdf0e10cSrcweir {
341cdf0e10cSrcweir 	if( pControl == mpLBEffects )
342cdf0e10cSrcweir 	{
343cdf0e10cSrcweir 		if( mpLBEffects->GetSelectEntryCount() )
344cdf0e10cSrcweir 			mpParent->EndDialog( sal_True );
345cdf0e10cSrcweir 	}
346cdf0e10cSrcweir 	return 0;
347cdf0e10cSrcweir }
348cdf0e10cSrcweir 
onSelectEffect()349cdf0e10cSrcweir void CustomAnimationCreateTabPage::onSelectEffect()
350cdf0e10cSrcweir {
351cdf0e10cSrcweir 	CustomAnimationPresetPtr*p = static_cast< CustomAnimationPresetPtr* >( mpLBEffects->GetEntryData( mpLBEffects->GetSelectEntryPos() ) );
352cdf0e10cSrcweir 
353cdf0e10cSrcweir 	if( !p )
354cdf0e10cSrcweir 		return;
355cdf0e10cSrcweir 
356cdf0e10cSrcweir 	CustomAnimationPresetPtr pPreset( *p );
357cdf0e10cSrcweir 
358cdf0e10cSrcweir 	const double fDuration = pPreset->getDuration();
359cdf0e10cSrcweir 	sal_uInt16 nPos = 0xffff;
360cdf0e10cSrcweir 
361cdf0e10cSrcweir 	if( fDuration == 5.0 )
362cdf0e10cSrcweir 		nPos = 0;
363cdf0e10cSrcweir 	else if( fDuration == 3.0 )
364cdf0e10cSrcweir 		nPos = 1;
365cdf0e10cSrcweir 	else if( fDuration == 2.0 )
366cdf0e10cSrcweir 		nPos = 2;
367cdf0e10cSrcweir 	else if( fDuration == 1.0 )
368cdf0e10cSrcweir 		nPos = 3;
369cdf0e10cSrcweir 	else if( fDuration == 0.5 )
370cdf0e10cSrcweir 		nPos = 4;
371cdf0e10cSrcweir 
372cdf0e10cSrcweir 	mpCBSpeed->SelectEntryPos( nPos );
373cdf0e10cSrcweir 
374cdf0e10cSrcweir     bool bHasSpeed = pPreset->getDuration() > 0.001;
375cdf0e10cSrcweir     mpCBSpeed->Enable( bHasSpeed );
376cdf0e10cSrcweir     mpFTSpeed->Enable( bHasSpeed );
377cdf0e10cSrcweir 
378cdf0e10cSrcweir 	if( mpCBXPReview->IsChecked() )
379cdf0e10cSrcweir 	{
380cdf0e10cSrcweir 		mpParent->preview( pPreset );
381cdf0e10cSrcweir 	}
382cdf0e10cSrcweir }
383cdf0e10cSrcweir 
clearEffects()384cdf0e10cSrcweir void CustomAnimationCreateTabPage::clearEffects()
385cdf0e10cSrcweir {
386cdf0e10cSrcweir 	sal_uInt16 nPos = mpLBEffects->GetEntryCount();
387cdf0e10cSrcweir 	while( nPos-- )
388cdf0e10cSrcweir 		delete static_cast< CustomAnimationPresetPtr* >( mpLBEffects->GetEntryData( nPos ) );
389cdf0e10cSrcweir 
390cdf0e10cSrcweir 	mpLBEffects->Clear();
391cdf0e10cSrcweir }
392cdf0e10cSrcweir 
getSelectedPreset() const393cdf0e10cSrcweir CustomAnimationPresetPtr CustomAnimationCreateTabPage::getSelectedPreset() const
394cdf0e10cSrcweir {
395cdf0e10cSrcweir 	CustomAnimationPresetPtr pPreset;
396cdf0e10cSrcweir 
397cdf0e10cSrcweir 	if( mpLBEffects->GetSelectEntryCount() == 1 )
398cdf0e10cSrcweir 	{
399cdf0e10cSrcweir 		void* pEntryData = mpLBEffects->GetEntryData( mpLBEffects->GetSelectEntryPos() );
400cdf0e10cSrcweir 		if( pEntryData )
401cdf0e10cSrcweir 			pPreset = *static_cast< CustomAnimationPresetPtr* >( pEntryData );
402cdf0e10cSrcweir 	}
403cdf0e10cSrcweir 
404cdf0e10cSrcweir 	return pPreset;
405cdf0e10cSrcweir }
406cdf0e10cSrcweir 
getCreatePathKind() const407cdf0e10cSrcweir PathKind CustomAnimationCreateTabPage::getCreatePathKind() const
408cdf0e10cSrcweir {
409cdf0e10cSrcweir 	PathKind eKind = NONE;
410cdf0e10cSrcweir 
411cdf0e10cSrcweir 	if( mpLBEffects->GetSelectEntryCount() == 1 )
412cdf0e10cSrcweir 	{
413cdf0e10cSrcweir 		const sal_uInt16 nPos = mpLBEffects->GetSelectEntryPos();
414cdf0e10cSrcweir 		if( nPos == mnCurvePathPos )
415cdf0e10cSrcweir 		{
416cdf0e10cSrcweir 			eKind = CURVE;
417cdf0e10cSrcweir 		}
418cdf0e10cSrcweir 		else if( nPos == mnPolygonPathPos )
419cdf0e10cSrcweir 		{
420cdf0e10cSrcweir 			eKind = POLYGON;
421cdf0e10cSrcweir 		}
422cdf0e10cSrcweir 		else if( nPos == mnFreeformPathPos )
423cdf0e10cSrcweir 		{
424cdf0e10cSrcweir 			eKind = FREEFORM;
425cdf0e10cSrcweir 		}
426cdf0e10cSrcweir 	}
427cdf0e10cSrcweir 
428cdf0e10cSrcweir 	return eKind;
429cdf0e10cSrcweir }
430cdf0e10cSrcweir 
431cdf0e10cSrcweir 
432cdf0e10cSrcweir 
getDuration() const433cdf0e10cSrcweir double CustomAnimationCreateTabPage::getDuration() const
434cdf0e10cSrcweir {
435cdf0e10cSrcweir 	sal_uInt16 nPos = mpCBSpeed->GetSelectEntryPos();
436cdf0e10cSrcweir 	if( (nPos == 0xffff) || !mpCBSpeed->IsEnabled() )
437cdf0e10cSrcweir 	{
438cdf0e10cSrcweir 		CustomAnimationPresetPtr pPreset = getSelectedPreset();
439cdf0e10cSrcweir 		if( pPreset.get() )
440cdf0e10cSrcweir 			return pPreset->getDuration();
441cdf0e10cSrcweir 	}
442cdf0e10cSrcweir 
443cdf0e10cSrcweir 	switch( nPos )
444cdf0e10cSrcweir 	{
445cdf0e10cSrcweir 	case 0: return 5.0f;
446cdf0e10cSrcweir 	case 1: return 3.0f;
447cdf0e10cSrcweir 	case 2: return 2.0f;
448cdf0e10cSrcweir 	case 3: return 1.0f;
449cdf0e10cSrcweir 	case 4: return 0.5f;
450cdf0e10cSrcweir 	}
451cdf0e10cSrcweir 
452cdf0e10cSrcweir 	return 0.0f;
453cdf0e10cSrcweir }
454cdf0e10cSrcweir 
setDuration(double fDuration)455cdf0e10cSrcweir void CustomAnimationCreateTabPage::setDuration( double fDuration )
456cdf0e10cSrcweir {
457cdf0e10cSrcweir 	sal_uInt16 nPos = 0;
458cdf0e10cSrcweir 	if( fDuration < 2.0f )
459cdf0e10cSrcweir 	{
460cdf0e10cSrcweir 		if( fDuration < 1.0f )
461cdf0e10cSrcweir 		{
462cdf0e10cSrcweir 			nPos = 4;
463cdf0e10cSrcweir 		}
464cdf0e10cSrcweir 		else
465cdf0e10cSrcweir 		{
466cdf0e10cSrcweir 			nPos = 3;
467cdf0e10cSrcweir 		}
468cdf0e10cSrcweir 	}
469cdf0e10cSrcweir 	else if( fDuration < 5.0f )
470cdf0e10cSrcweir 	{
471cdf0e10cSrcweir 		if( fDuration < 3.0f )
472cdf0e10cSrcweir 		{
473cdf0e10cSrcweir 			nPos = 2;
474cdf0e10cSrcweir 		}
475cdf0e10cSrcweir 		else
476cdf0e10cSrcweir 		{
477cdf0e10cSrcweir 			nPos = 1;
478cdf0e10cSrcweir 		}
479cdf0e10cSrcweir 	}
480cdf0e10cSrcweir 
481cdf0e10cSrcweir 	mpCBSpeed->SelectEntryPos( nPos );
482cdf0e10cSrcweir }
483cdf0e10cSrcweir 
getIsPreview() const484cdf0e10cSrcweir bool CustomAnimationCreateTabPage::getIsPreview() const
485cdf0e10cSrcweir {
486cdf0e10cSrcweir 	return mpCBXPReview->IsChecked() ? true : false;
487cdf0e10cSrcweir }
488cdf0e10cSrcweir 
setIsPreview(bool bIsPreview)489cdf0e10cSrcweir void CustomAnimationCreateTabPage::setIsPreview( bool bIsPreview )
490cdf0e10cSrcweir {
491cdf0e10cSrcweir 	mpCBXPReview->Check( bIsPreview ? sal_True : sal_False );
492cdf0e10cSrcweir }
493cdf0e10cSrcweir 
select(const OUString & rsPresetId)494cdf0e10cSrcweir bool CustomAnimationCreateTabPage::select( const OUString& rsPresetId )
495cdf0e10cSrcweir {
496cdf0e10cSrcweir 	sal_uInt16 nPos = mpLBEffects->GetEntryCount();
497cdf0e10cSrcweir 	while( nPos-- )
498cdf0e10cSrcweir 	{
499cdf0e10cSrcweir 		void* pEntryData = mpLBEffects->GetEntryData( nPos );
500cdf0e10cSrcweir 		if( pEntryData )
501cdf0e10cSrcweir 		{
502cdf0e10cSrcweir 			CustomAnimationPresetPtr& pPtr = *static_cast< CustomAnimationPresetPtr* >(pEntryData);
503cdf0e10cSrcweir 			if( pPtr.get() && pPtr->getPresetId() == rsPresetId )
504cdf0e10cSrcweir 			{
505cdf0e10cSrcweir 				mpLBEffects->SelectEntryPos( nPos );
506cdf0e10cSrcweir 				return true;
507cdf0e10cSrcweir 			}
508cdf0e10cSrcweir 		}
509cdf0e10cSrcweir 	}
510cdf0e10cSrcweir 
511cdf0e10cSrcweir 	return false;
512cdf0e10cSrcweir }
513cdf0e10cSrcweir 
514cdf0e10cSrcweir // --------------------------------------------------------------------
515cdf0e10cSrcweir 
CustomAnimationCreateDialog(Window * pParent,CustomAnimationPane * pPane,const std::vector<::com::sun::star::uno::Any> & rTargets,bool bHasText,const::rtl::OUString & rsPresetId,double fDuration)516cdf0e10cSrcweir CustomAnimationCreateDialog::CustomAnimationCreateDialog( Window* pParent, CustomAnimationPane* pPane, const std::vector< ::com::sun::star::uno::Any >& rTargets, bool bHasText, const ::rtl::OUString& rsPresetId, double fDuration  )
517cdf0e10cSrcweir :	TabDialog( pParent, SdResId( DLG_CUSTOMANIMATION_CREATE ) )
518cdf0e10cSrcweir ,	mpPane( pPane )
519cdf0e10cSrcweir ,	mrTargets( rTargets )
520cdf0e10cSrcweir ,	mfDuration( fDuration )
521cdf0e10cSrcweir {
522cdf0e10cSrcweir 	mpTabControl = new TabControl( this, SdResId( 1 ) );
523cdf0e10cSrcweir 	mpOKButton = new OKButton(this, SdResId( 1 ) ) ;
524cdf0e10cSrcweir 	mpCancelButton = new CancelButton(this, SdResId( 1 ) );
525cdf0e10cSrcweir 	mpHelpButton = new HelpButton(this, SdResId( 1 ) );
526cdf0e10cSrcweir 
527cdf0e10cSrcweir 	FreeResource();
528cdf0e10cSrcweir 
529cdf0e10cSrcweir 	SdOptions* pOptions = SD_MOD()->GetSdOptions(DOCUMENT_TYPE_IMPRESS);
530cdf0e10cSrcweir 	mbIsPreview = pOptions->IsPreviewNewEffects();
531cdf0e10cSrcweir 
532cdf0e10cSrcweir 	const CustomAnimationPresets& rPresets = CustomAnimationPresets::getCustomAnimationPresets();
533cdf0e10cSrcweir 	mpTabPages[ENTRANCE] = new CustomAnimationCreateTabPage( mpTabControl, this, ENTRANCE, rPresets.getEntrancePresets(), bHasText );
534cdf0e10cSrcweir     mpTabPages[ENTRANCE]->SetHelpId( HID_SD_CUSTOMANIMATIONDIALOG_ENTRANCE );
535cdf0e10cSrcweir 	mpTabControl->SetTabPage( RID_TP_CUSTOMANIMATION_ENTRANCE, mpTabPages[ENTRANCE] );
536cdf0e10cSrcweir 	mpTabPages[EMPHASIS] = new CustomAnimationCreateTabPage( mpTabControl, this, EMPHASIS, rPresets.getEmphasisPresets(), bHasText );
537cdf0e10cSrcweir     mpTabPages[EMPHASIS]->SetHelpId( HID_SD_CUSTOMANIMATIONDIALOG_EMPHASIS );
538cdf0e10cSrcweir 	mpTabControl->SetTabPage( RID_TP_CUSTOMANIMATION_EMPHASIS, mpTabPages[EMPHASIS] );
539cdf0e10cSrcweir 	mpTabPages[EXIT] = new CustomAnimationCreateTabPage( mpTabControl, this, EXIT, rPresets.getExitPresets(), bHasText );
540cdf0e10cSrcweir     mpTabPages[EXIT]->SetHelpId( HID_SD_CUSTOMANIMATIONDIALOG_EXIT );
541cdf0e10cSrcweir 	mpTabControl->SetTabPage( RID_TP_CUSTOMANIMATION_EXIT, mpTabPages[EXIT] );
542cdf0e10cSrcweir 	mpTabPages[MOTIONPATH] = new CustomAnimationCreateTabPage( mpTabControl, this, MOTIONPATH, rPresets.getMotionPathsPresets(), bHasText );
543cdf0e10cSrcweir     mpTabPages[MOTIONPATH]->SetHelpId( HID_SD_CUSTOMANIMATIONDIALOG_MOTIONPATH );
544cdf0e10cSrcweir 	mpTabControl->SetTabPage( RID_TP_CUSTOMANIMATION_MOTIONPATH, mpTabPages[MOTIONPATH] );
545cdf0e10cSrcweir 	mpTabPages[MISCEFFECTS] = new CustomAnimationCreateTabPage( mpTabControl, this, MISCEFFECTS, rPresets.getMiscPresets(), bHasText );
546cdf0e10cSrcweir     mpTabPages[MISCEFFECTS]->SetHelpId( HID_SD_CUSTOMANIMATIONDIALOG_MISCEFFECTS );
547cdf0e10cSrcweir 	mpTabControl->SetTabPage( RID_TP_CUSTOMANIMATION_MISCEFFECTS, mpTabPages[MISCEFFECTS] );
548cdf0e10cSrcweir 
549cdf0e10cSrcweir 	getCurrentPage()->setDuration( mfDuration );
550cdf0e10cSrcweir 	getCurrentPage()->setIsPreview( mbIsPreview );
551cdf0e10cSrcweir 
552cdf0e10cSrcweir     mpTabControl->SetActivatePageHdl( LINK( this, CustomAnimationCreateDialog, implActivatePagekHdl ) );
553cdf0e10cSrcweir 	mpTabControl->SetDeactivatePageHdl( LINK( this, CustomAnimationCreateDialog, implDeactivatePagekHdl ) );
554cdf0e10cSrcweir 
555cdf0e10cSrcweir     setPosition();
556cdf0e10cSrcweir 
557cdf0e10cSrcweir 	// select current preset if available
558cdf0e10cSrcweir 	if( rsPresetId.getLength() != 0 )
559cdf0e10cSrcweir 	{
560cdf0e10cSrcweir 		for( sal_uInt16 i = ENTRANCE; i <= MOTIONPATH; i++ )
561cdf0e10cSrcweir 		{
562cdf0e10cSrcweir 			if( mpTabPages[i]->select( rsPresetId ) )
563cdf0e10cSrcweir 			{
564cdf0e10cSrcweir 				mpTabControl->SetCurPageId( RID_TP_CUSTOMANIMATION_ENTRANCE + i );
565cdf0e10cSrcweir 				break;
566cdf0e10cSrcweir 			}
567cdf0e10cSrcweir 		}
568cdf0e10cSrcweir 	}
569cdf0e10cSrcweir }
570cdf0e10cSrcweir 
~CustomAnimationCreateDialog()571cdf0e10cSrcweir CustomAnimationCreateDialog::~CustomAnimationCreateDialog()
572cdf0e10cSrcweir {
573cdf0e10cSrcweir     storePosition();
574cdf0e10cSrcweir 
575cdf0e10cSrcweir 	SdOptions* pOptions = SD_MOD()->GetSdOptions(DOCUMENT_TYPE_IMPRESS);
576cdf0e10cSrcweir 	pOptions->SetPreviewNewEffects( getCurrentPage()->getIsPreview() );
577cdf0e10cSrcweir 
578cdf0e10cSrcweir 	delete mpTabPages[ENTRANCE];
579cdf0e10cSrcweir 	delete mpTabPages[EMPHASIS];
580cdf0e10cSrcweir 	delete mpTabPages[EXIT];
581cdf0e10cSrcweir 	delete mpTabPages[MOTIONPATH];
582cdf0e10cSrcweir 	delete mpTabPages[MISCEFFECTS];
583cdf0e10cSrcweir 
584cdf0e10cSrcweir 	delete mpTabControl;
585cdf0e10cSrcweir 	delete mpOKButton;
586cdf0e10cSrcweir 	delete mpCancelButton;
587cdf0e10cSrcweir 	delete mpHelpButton;
588cdf0e10cSrcweir }
589cdf0e10cSrcweir 
getCurrentPage() const590cdf0e10cSrcweir CustomAnimationCreateTabPage* CustomAnimationCreateDialog::getCurrentPage() const
591cdf0e10cSrcweir {
592cdf0e10cSrcweir 	switch( mpTabControl->GetCurPageId() )
593cdf0e10cSrcweir 	{
594cdf0e10cSrcweir 	case RID_TP_CUSTOMANIMATION_ENTRANCE:	return mpTabPages[ENTRANCE];
595cdf0e10cSrcweir 	case RID_TP_CUSTOMANIMATION_EMPHASIS:	return mpTabPages[EMPHASIS];
596cdf0e10cSrcweir 	case RID_TP_CUSTOMANIMATION_EXIT:		return mpTabPages[EXIT];
597cdf0e10cSrcweir 	case RID_TP_CUSTOMANIMATION_MISCEFFECTS:return mpTabPages[MISCEFFECTS];
598cdf0e10cSrcweir 	//case RID_TP_CUSTOMANIMATION_MOTIONPATH:
599cdf0e10cSrcweir 	default:
600cdf0e10cSrcweir 											return mpTabPages[MOTIONPATH];
601cdf0e10cSrcweir 	}
602cdf0e10cSrcweir }
603cdf0e10cSrcweir 
getCreatePathKind() const604cdf0e10cSrcweir PathKind CustomAnimationCreateDialog::getCreatePathKind() const
605cdf0e10cSrcweir {
606cdf0e10cSrcweir 	return getCurrentPage()->getCreatePathKind();
607cdf0e10cSrcweir }
608cdf0e10cSrcweir 
getSelectedPreset() const609cdf0e10cSrcweir CustomAnimationPresetPtr CustomAnimationCreateDialog::getSelectedPreset() const
610cdf0e10cSrcweir {
611cdf0e10cSrcweir 	return getCurrentPage()->getSelectedPreset();
612cdf0e10cSrcweir }
613cdf0e10cSrcweir 
getSelectedDuration() const614cdf0e10cSrcweir double CustomAnimationCreateDialog::getSelectedDuration() const
615cdf0e10cSrcweir {
616cdf0e10cSrcweir 	return getCurrentPage()->getDuration();
617cdf0e10cSrcweir }
618cdf0e10cSrcweir 
IMPL_LINK(CustomAnimationCreateDialog,implActivatePagekHdl,Control *,EMPTYARG)619cdf0e10cSrcweir IMPL_LINK( CustomAnimationCreateDialog, implActivatePagekHdl, Control*, EMPTYARG )
620cdf0e10cSrcweir {
621cdf0e10cSrcweir 	getCurrentPage()->setDuration( mfDuration );
622cdf0e10cSrcweir 	getCurrentPage()->setIsPreview( mbIsPreview );
623cdf0e10cSrcweir 	return 1;
624cdf0e10cSrcweir }
625cdf0e10cSrcweir 
IMPL_LINK(CustomAnimationCreateDialog,implDeactivatePagekHdl,Control *,EMPTYARG)626cdf0e10cSrcweir IMPL_LINK( CustomAnimationCreateDialog, implDeactivatePagekHdl, Control*, EMPTYARG )
627cdf0e10cSrcweir {
628cdf0e10cSrcweir 	mfDuration = getCurrentPage()->getDuration();
629cdf0e10cSrcweir 	mbIsPreview = getCurrentPage()->getIsPreview();
630cdf0e10cSrcweir 	return 1;
631cdf0e10cSrcweir }
632cdf0e10cSrcweir 
preview(const CustomAnimationPresetPtr & pPreset) const633cdf0e10cSrcweir void CustomAnimationCreateDialog::preview( const CustomAnimationPresetPtr& pPreset ) const
634cdf0e10cSrcweir {
635cdf0e10cSrcweir 	MainSequencePtr pSequence( new MainSequence() );
636cdf0e10cSrcweir 
637cdf0e10cSrcweir 	std::vector< Any >::const_iterator aIter( mrTargets.begin() );
638cdf0e10cSrcweir 	const std::vector< Any >::const_iterator aEnd( mrTargets.end() );
639cdf0e10cSrcweir 
640cdf0e10cSrcweir 	const double fDuration = getSelectedDuration();
641cdf0e10cSrcweir 
642cdf0e10cSrcweir 	bool bFirst = true;
643cdf0e10cSrcweir 	while( aIter != aEnd )
644cdf0e10cSrcweir 	{
645cdf0e10cSrcweir 		CustomAnimationEffectPtr pNew(
646cdf0e10cSrcweir 			pSequence->append( pPreset, (*aIter++), fDuration ) );
647cdf0e10cSrcweir 
648cdf0e10cSrcweir 		if( bFirst )
649cdf0e10cSrcweir 			bFirst = false;
650cdf0e10cSrcweir 		else
651cdf0e10cSrcweir 			pNew->setNodeType( EffectNodeType::WITH_PREVIOUS );
652cdf0e10cSrcweir 	}
653cdf0e10cSrcweir 
654cdf0e10cSrcweir 	mpPane->preview( pSequence->getRootNode() );
655cdf0e10cSrcweir }
656cdf0e10cSrcweir 
657cdf0e10cSrcweir namespace
658cdf0e10cSrcweir {
lcl_GetTopmostParent(Window * pWindow)659cdf0e10cSrcweir Window * lcl_GetTopmostParent( Window * pWindow )
660cdf0e10cSrcweir {
661cdf0e10cSrcweir     Window * pResult = 0;
662cdf0e10cSrcweir     Window * pCurrent = pWindow ? pWindow->GetParent() : 0;
663cdf0e10cSrcweir     while( pCurrent )
664cdf0e10cSrcweir     {
665cdf0e10cSrcweir         pResult = pCurrent;
666cdf0e10cSrcweir         pCurrent = pCurrent->GetParent();
667cdf0e10cSrcweir     }
668cdf0e10cSrcweir     return pResult;
669cdf0e10cSrcweir }
670cdf0e10cSrcweir }
671cdf0e10cSrcweir 
setPosition()672cdf0e10cSrcweir void CustomAnimationCreateDialog::setPosition()
673cdf0e10cSrcweir {
674cdf0e10cSrcweir 	SvtViewOptions aDlgOpt(
675cdf0e10cSrcweir         E_TABDIALOG, String::CreateFromInt32( DLG_CUSTOMANIMATION_CREATE ) );
676cdf0e10cSrcweir 	if ( aDlgOpt.Exists() )
677cdf0e10cSrcweir 	{
678cdf0e10cSrcweir 		SetWindowState( ByteString( aDlgOpt.GetWindowState().getStr(),
679cdf0e10cSrcweir                                     RTL_TEXTENCODING_ASCII_US ) );
680cdf0e10cSrcweir     }
681cdf0e10cSrcweir     else
682cdf0e10cSrcweir     {
683cdf0e10cSrcweir         // default position: aligned with right edge of parent
684cdf0e10cSrcweir         Window * pParent = lcl_GetTopmostParent( this );
685cdf0e10cSrcweir         if( pParent )
686cdf0e10cSrcweir         {
687cdf0e10cSrcweir             Point aPos( GetPosPixel());
688cdf0e10cSrcweir             Size  aSize( GetSizePixel());
689cdf0e10cSrcweir             Point aParentPos( pParent->GetPosPixel());
690cdf0e10cSrcweir             Size  aParentSize( pParent->GetSizePixel());
691cdf0e10cSrcweir 
692cdf0e10cSrcweir             // right center
693cdf0e10cSrcweir             aPos.setX( aParentSize.getWidth() - aSize.getWidth() );
694cdf0e10cSrcweir             aPos.setY( (aParentSize.getHeight() - aSize.getHeight()) / 2 );
695cdf0e10cSrcweir             SetPosPixel( aPos );
696cdf0e10cSrcweir         }
697cdf0e10cSrcweir     }
698cdf0e10cSrcweir }
699cdf0e10cSrcweir 
storePosition()700cdf0e10cSrcweir void CustomAnimationCreateDialog::storePosition()
701cdf0e10cSrcweir {
702cdf0e10cSrcweir     // save settings (screen position and current page)
703cdf0e10cSrcweir 	SvtViewOptions aDlgOpt(
704cdf0e10cSrcweir         E_TABDIALOG, String::CreateFromInt32( DLG_CUSTOMANIMATION_CREATE ) );
705cdf0e10cSrcweir 	aDlgOpt.SetWindowState(
706cdf0e10cSrcweir         OUString::createFromAscii( GetWindowState( WINDOWSTATE_MASK_POS ).GetBuffer() ) );
707cdf0e10cSrcweir }
708cdf0e10cSrcweir 
709cdf0e10cSrcweir }
710