Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 : #include <com/sun/star/presentation/EffectNodeType.hpp>
21 : #include <com/sun/star/animations/Timing.hpp>
22 : #include <com/sun/star/animations/Event.hpp>
23 : #include <com/sun/star/animations/EventTrigger.hpp>
24 : #include <com/sun/star/animations/AnimationFill.hpp>
25 : #include <com/sun/star/presentation/TextAnimationType.hpp>
26 : #include <com/sun/star/animations/ValuePair.hpp>
27 : #include <com/sun/star/awt/FontSlant.hpp>
28 : #include <com/sun/star/awt/FontWeight.hpp>
29 : #include <com/sun/star/awt/FontUnderline.hpp>
30 : #include <com/sun/star/drawing/XDrawPage.hpp>
31 : #include <com/sun/star/beans/XPropertySet.hpp>
32 : #include <com/sun/star/media/XManager.hpp>
33 : #include <com/sun/star/media/XPlayer.hpp>
34 :
35 : #include <boost/shared_ptr.hpp>
36 :
37 : #include <comphelper/processfactory.hxx>
38 : #include <i18nutil/unicode.hxx>
39 : #include <unotools/pathoptions.hxx>
40 : #include <vcl/tabctrl.hxx>
41 : #include <vcl/tabpage.hxx>
42 : #include <vcl/menubtn.hxx>
43 : #include <vcl/svapp.hxx>
44 : #include <vcl/fixed.hxx>
45 : #include <vcl/lstbox.hxx>
46 : #include <vcl/layout.hxx>
47 : #include <vcl/field.hxx>
48 : #include <vcl/msgbox.hxx>
49 : #include <vcl/decoview.hxx>
50 : #include <vcl/combobox.hxx>
51 : #include <vcl/menu.hxx>
52 : #include <vcl/settings.hxx>
53 :
54 : #include <svtools/ctrlbox.hxx>
55 : #include <svtools/ctrltool.hxx>
56 : #include <sfx2/objsh.hxx>
57 :
58 : #include <svx/svxids.hrc>
59 : #include <svx/dialmgr.hxx>
60 : #include <editeng/flstitem.hxx>
61 : #include <svx/drawitem.hxx>
62 :
63 : #include <svx/xtable.hxx>
64 : #include <svx/gallery.hxx>
65 :
66 : #include <svx/dialogs.hrc>
67 : #include "sdresid.hxx"
68 :
69 : #include "glob.hrc"
70 : #include "CustomAnimationDialog.hxx"
71 : #include "CustomAnimationPane.hxx"
72 : #include "CustomAnimation.hrc"
73 : #include "STLPropertySet.hxx"
74 :
75 : #include <avmedia/mediawindow.hxx>
76 :
77 : #include "filedlg.hxx"
78 : #include "strings.hrc"
79 : #include "helpids.h"
80 :
81 : using namespace ::com::sun::star;
82 : using namespace ::com::sun::star::animations;
83 : using namespace ::com::sun::star::presentation;
84 :
85 : using ::com::sun::star::uno::UNO_QUERY;
86 : using ::com::sun::star::uno::UNO_QUERY_THROW;
87 : using ::com::sun::star::uno::Any;
88 : using ::com::sun::star::uno::makeAny;
89 : using ::com::sun::star::uno::Sequence;
90 : using ::com::sun::star::uno::Reference;
91 : using ::com::sun::star::uno::Exception;
92 : using ::com::sun::star::drawing::XShape;
93 : using ::com::sun::star::drawing::XDrawPage;
94 : using ::com::sun::star::beans::XPropertySet;
95 :
96 : namespace sd {
97 :
98 : class PresetPropertyBox : public PropertySubControl
99 : {
100 : public:
101 : PresetPropertyBox( sal_Int32 nControlType, vcl::Window* pParent, const Any& rValue, const OUString& aPresetId, const Link& rModifyHdl );
102 : virtual ~PresetPropertyBox();
103 :
104 : virtual Any getValue() SAL_OVERRIDE;
105 : virtual void setValue( const Any& rValue, const OUString& rPresetId ) SAL_OVERRIDE;
106 : virtual Control* getControl() SAL_OVERRIDE;
107 :
108 : private:
109 : std::map< sal_uInt16, OUString > maPropertyValues;
110 : ListBox* mpControl;
111 : };
112 :
113 0 : PresetPropertyBox::PresetPropertyBox( sal_Int32 nControlType, vcl::Window* pParent, const Any& rValue, const OUString& aPresetId, const Link& rModifyHdl )
114 0 : : PropertySubControl( nControlType )
115 : {
116 0 : mpControl = new ListBox( pParent, WB_BORDER|WB_TABSTOP|WB_DROPDOWN );
117 0 : mpControl->SetDropDownLineCount( 10 );
118 0 : mpControl->SetSelectHdl( rModifyHdl );
119 0 : mpControl->SetHelpId( HID_SD_CUSTOMANIMATIONPANE_PRESETPROPERTYBOX );
120 :
121 0 : setValue( rValue, aPresetId );
122 :
123 0 : }
124 :
125 0 : void PresetPropertyBox::setValue( const Any& rValue, const OUString& rPresetId )
126 : {
127 0 : if( mpControl )
128 : {
129 0 : mpControl->Clear();
130 :
131 0 : const CustomAnimationPresets& rPresets = CustomAnimationPresets::getCustomAnimationPresets();
132 0 : CustomAnimationPresetPtr pDescriptor = rPresets.getEffectDescriptor( rPresetId );
133 0 : if( pDescriptor.get() )
134 : {
135 :
136 0 : OUString aPropertyValue;
137 0 : rValue >>= aPropertyValue;
138 :
139 0 : UStringList aSubTypes( pDescriptor->getSubTypes() );
140 0 : UStringList::iterator aIter( aSubTypes.begin() );
141 0 : const UStringList::iterator aEnd( aSubTypes.end() );
142 :
143 0 : mpControl->Enable( aIter != aEnd );
144 :
145 0 : while( aIter != aEnd )
146 : {
147 0 : sal_Int32 nPos = mpControl->InsertEntry( rPresets.getUINameForProperty( (*aIter) ) );
148 0 : if( (*aIter) == aPropertyValue )
149 0 : mpControl->SelectEntryPos( nPos );
150 0 : maPropertyValues[nPos] = (*aIter++);
151 0 : }
152 : }
153 : else
154 : {
155 0 : mpControl->Enable( false );
156 0 : }
157 : }
158 0 : }
159 :
160 0 : PresetPropertyBox::~PresetPropertyBox()
161 : {
162 0 : delete mpControl;
163 0 : }
164 :
165 0 : Any PresetPropertyBox::getValue()
166 : {
167 0 : return makeAny( maPropertyValues[mpControl->GetSelectEntryPos()] );
168 : }
169 :
170 0 : Control* PresetPropertyBox::getControl()
171 : {
172 0 : return mpControl;
173 : }
174 :
175 : class ColorPropertyBox : public PropertySubControl
176 : {
177 : public:
178 : ColorPropertyBox( sal_Int32 nControlType, vcl::Window* pParent, const Any& rValue, const Link& rModifyHdl );
179 : virtual ~ColorPropertyBox();
180 :
181 : virtual Any getValue() SAL_OVERRIDE;
182 : virtual void setValue( const Any& rValue, const OUString& rPresetId ) SAL_OVERRIDE;
183 : virtual Control* getControl() SAL_OVERRIDE;
184 :
185 : private:
186 : ColorListBox* mpControl;
187 : };
188 :
189 0 : ColorPropertyBox::ColorPropertyBox( sal_Int32 nControlType, vcl::Window* pParent, const Any& rValue, const Link& rModifyHdl )
190 0 : : PropertySubControl( nControlType )
191 : {
192 0 : mpControl = new ColorListBox( pParent, WB_BORDER|WB_TABSTOP|WB_DROPDOWN );
193 0 : mpControl->SetDropDownLineCount( 10 );
194 0 : mpControl->SetSelectHdl( rModifyHdl );
195 0 : mpControl->SetHelpId( HID_SD_CUSTOMANIMATIONPANE_COLORPROPERTYBOX );
196 :
197 0 : SfxObjectShell* pDocSh = SfxObjectShell::Current();
198 : DBG_ASSERT( pDocSh, "DocShell not found!" );
199 0 : XColorListRef pColorList;
200 0 : const SfxPoolItem* pItem = NULL;
201 :
202 0 : if ( pDocSh && ( ( pItem = pDocSh->GetItem( SID_COLOR_TABLE ) ) != 0) )
203 0 : pColorList = ( (SvxColorListItem*)pItem )->GetColorList();
204 :
205 0 : if ( !pColorList.is() )
206 0 : pColorList = XColorList::CreateStdColorList();
207 :
208 0 : sal_Int32 nColor = 0;
209 0 : rValue >>= nColor;
210 :
211 0 : for ( long i = 0; i < pColorList->Count(); i++ )
212 : {
213 0 : XColorEntry* pEntry = pColorList->GetColor(i);
214 0 : sal_Int32 nPos = mpControl->InsertEntry( pEntry->GetColor(), pEntry->GetName() );
215 0 : if( pEntry->GetColor().GetRGBColor() == (sal_uInt32)nColor )
216 0 : mpControl->SelectEntryPos( nPos );
217 0 : }
218 0 : }
219 :
220 0 : ColorPropertyBox::~ColorPropertyBox()
221 : {
222 0 : delete mpControl;
223 0 : }
224 :
225 0 : void ColorPropertyBox::setValue( const Any& rValue, const OUString& )
226 : {
227 0 : if( mpControl )
228 : {
229 0 : sal_Int32 nColor = 0;
230 0 : rValue >>= nColor;
231 :
232 0 : mpControl->SetNoSelection();
233 0 : mpControl->SelectEntryPos( mpControl->GetEntryPos( (Color)nColor ) );
234 : }
235 0 : }
236 :
237 0 : Any ColorPropertyBox::getValue()
238 : {
239 0 : return makeAny( (sal_Int32)mpControl->GetSelectEntryColor().GetRGBColor() );
240 : }
241 :
242 0 : Control* ColorPropertyBox::getControl()
243 : {
244 0 : return mpControl;
245 : }
246 :
247 : class FontPropertyBox : public PropertySubControl
248 : {
249 : public:
250 : FontPropertyBox( sal_Int32 nControlType, vcl::Window* pParent, const Any& rValue, const Link& rModifyHdl );
251 : virtual ~FontPropertyBox();
252 :
253 : virtual Any getValue() SAL_OVERRIDE;
254 : virtual void setValue( const Any& rValue, const OUString& rPresetId ) SAL_OVERRIDE;
255 :
256 : virtual Control* getControl() SAL_OVERRIDE;
257 :
258 : private:
259 : FontNameBox* mpControl;
260 : };
261 :
262 0 : FontPropertyBox::FontPropertyBox( sal_Int32 nControlType, vcl::Window* pParent, const Any& rValue, const Link& rModifyHdl )
263 0 : : PropertySubControl( nControlType )
264 : {
265 0 : mpControl = new FontNameBox( pParent, WB_BORDER|WB_TABSTOP|WB_DROPDOWN );
266 0 : mpControl->SetDropDownLineCount( 10 );
267 0 : mpControl->SetSelectHdl( rModifyHdl );
268 0 : mpControl->SetHelpId( HID_SD_CUSTOMANIMATIONPANE_FONTPROPERTYBOX );
269 :
270 0 : SfxObjectShell* pDocSh = SfxObjectShell::Current();
271 : const SfxPoolItem* pItem;
272 :
273 0 : const FontList* pFontList = 0;
274 0 : bool bMustDelete = false;
275 :
276 0 : if ( pDocSh && ( (pItem = pDocSh->GetItem( SID_ATTR_CHAR_FONTLIST ) ) != 0) )
277 0 : pFontList = ( (SvxFontListItem*)pItem )->GetFontList();
278 :
279 0 : if(!pFontList)
280 : {
281 0 : pFontList = new FontList( Application::GetDefaultDevice(), NULL, false );
282 0 : bMustDelete = true;
283 : }
284 :
285 0 : mpControl->Fill( pFontList );
286 :
287 0 : if( bMustDelete )
288 0 : delete pFontList;
289 :
290 0 : OUString aPresetId;
291 0 : setValue( rValue, aPresetId );
292 0 : }
293 :
294 0 : void FontPropertyBox::setValue( const Any& rValue, const OUString& )
295 : {
296 0 : if( mpControl )
297 : {
298 0 : OUString aFontName;
299 0 : rValue >>= aFontName;
300 0 : mpControl->SetText( aFontName );
301 : }
302 0 : }
303 :
304 0 : FontPropertyBox::~FontPropertyBox()
305 : {
306 0 : delete mpControl;
307 0 : }
308 :
309 0 : Any FontPropertyBox::getValue()
310 : {
311 0 : OUString aFontName( mpControl->GetText() );
312 0 : return makeAny( aFontName );
313 : }
314 :
315 0 : Control* FontPropertyBox::getControl()
316 : {
317 0 : return mpControl;
318 : }
319 :
320 : class DropdownMenuBox : public Edit
321 : {
322 : public:
323 : DropdownMenuBox( vcl::Window* pParent, Edit* pSubControl, PopupMenu* pMenu );
324 : virtual ~DropdownMenuBox();
325 :
326 : void Resize() SAL_OVERRIDE;
327 : bool PreNotify( NotifyEvent& rNEvt ) SAL_OVERRIDE;
328 :
329 0 : void SetMenuSelectHdl( const Link& rLink ) { mpDropdownButton->SetSelectHdl( rLink ); }
330 :
331 : private:
332 : Edit* mpSubControl;
333 : MenuButton* mpDropdownButton;
334 : PopupMenu* mpMenu;
335 : };
336 :
337 0 : DropdownMenuBox::DropdownMenuBox( vcl::Window* pParent, Edit* pSubControl, PopupMenu* pMenu )
338 : : Edit( pParent, WB_BORDER|WB_TABSTOP| WB_DIALOGCONTROL ),
339 0 : mpSubControl(pSubControl),mpDropdownButton(0),mpMenu(pMenu)
340 : {
341 0 : mpDropdownButton = new MenuButton( this, WB_NOLIGHTBORDER | WB_RECTSTYLE | WB_NOTABSTOP);
342 0 : mpDropdownButton->SetSymbol(SymbolType::SPIN_DOWN);
343 0 : mpDropdownButton->Show();
344 0 : mpDropdownButton->SetPopupMenu( pMenu );
345 :
346 0 : SetSubEdit( mpSubControl );
347 0 : mpSubControl->SetParent( this );
348 0 : mpSubControl->Show();
349 0 : }
350 :
351 0 : DropdownMenuBox::~DropdownMenuBox()
352 : {
353 0 : SetSubEdit( 0 );
354 0 : delete mpSubControl;
355 0 : delete mpDropdownButton;
356 0 : delete mpMenu;
357 0 : }
358 :
359 0 : void DropdownMenuBox::Resize()
360 : {
361 0 : Size aOutSz = GetOutputSizePixel();
362 :
363 0 : long nSBWidth = GetSettings().GetStyleSettings().GetScrollBarSize();
364 0 : nSBWidth = CalcZoom( nSBWidth );
365 0 : mpSubControl->setPosSizePixel( 0, 1, aOutSz.Width() - nSBWidth, aOutSz.Height()-2 );
366 0 : mpDropdownButton->setPosSizePixel( aOutSz.Width() - nSBWidth, 0, nSBWidth, aOutSz.Height() );
367 0 : }
368 :
369 0 : bool DropdownMenuBox::PreNotify( NotifyEvent& rNEvt )
370 : {
371 0 : bool nResult = true;
372 :
373 0 : sal_uInt16 nSwitch=rNEvt.GetType();
374 0 : if (nSwitch==EVENT_KEYINPUT)
375 : {
376 0 : const vcl::KeyCode& aKeyCode=rNEvt.GetKeyEvent()->GetKeyCode();
377 0 : sal_uInt16 nKey=aKeyCode.GetCode();
378 :
379 0 : if (nKey==KEY_DOWN && aKeyCode.IsMod2())
380 : {
381 0 : mpDropdownButton->KeyInput( *rNEvt.GetKeyEvent() );
382 : }
383 : else
384 : {
385 0 : nResult=Edit::PreNotify(rNEvt);
386 : }
387 : }
388 : else
389 0 : nResult=Edit::PreNotify(rNEvt);
390 :
391 0 : return nResult;
392 : }
393 :
394 : class CharHeightPropertyBox : public PropertySubControl
395 : {
396 : public:
397 : CharHeightPropertyBox( sal_Int32 nControlType, vcl::Window* pParent, const Any& rValue, const Link& rModifyHdl );
398 : virtual ~CharHeightPropertyBox();
399 :
400 : virtual Any getValue() SAL_OVERRIDE;
401 : virtual void setValue( const Any& rValue, const OUString& ) SAL_OVERRIDE;
402 :
403 : virtual Control* getControl() SAL_OVERRIDE;
404 :
405 : DECL_LINK( implMenuSelectHdl, MenuButton* );
406 :
407 : private:
408 : DropdownMenuBox* mpControl;
409 : PopupMenu* mpMenu;
410 : MetricField* mpMetric;
411 : };
412 :
413 0 : CharHeightPropertyBox::CharHeightPropertyBox( sal_Int32 nControlType, vcl::Window* pParent, const Any& rValue, const Link& rModifyHdl )
414 0 : : PropertySubControl( nControlType )
415 : {
416 0 : mpMetric = new MetricField( pParent, WB_TABSTOP|WB_IGNORETAB| WB_NOBORDER);
417 0 : mpMetric->SetUnit( FUNIT_PERCENT );
418 0 : mpMetric->SetMin( 0 );
419 0 : mpMetric->SetMax( 1000 );
420 :
421 0 : mpMenu = new PopupMenu(SdResId( RID_CUSTOMANIMATION_FONTSIZE_POPUP ) );
422 0 : mpControl = new DropdownMenuBox( pParent, mpMetric, mpMenu );
423 0 : mpControl->SetMenuSelectHdl( LINK( this, CharHeightPropertyBox, implMenuSelectHdl ));
424 0 : mpControl->SetModifyHdl( rModifyHdl );
425 0 : mpControl->SetHelpId( HID_SD_CUSTOMANIMATIONPANE_CHARHEIGHTPROPERTYBOX );
426 :
427 0 : OUString aPresetId;
428 0 : setValue( rValue, aPresetId );
429 0 : }
430 :
431 0 : CharHeightPropertyBox::~CharHeightPropertyBox()
432 : {
433 0 : delete mpControl;
434 0 : }
435 :
436 0 : IMPL_LINK( CharHeightPropertyBox, implMenuSelectHdl, MenuButton*, pPb )
437 : {
438 0 : long nValue = 100;
439 0 : switch( pPb->GetCurItemId() )
440 : {
441 0 : case CM_SIZE_25: nValue = 25; break;
442 0 : case CM_SIZE_50: nValue = 50; break;
443 0 : case CM_SIZE_150: nValue = 150; break;
444 0 : case CM_SIZE_400: nValue = 400; break;
445 : }
446 0 : mpMetric->SetValue( nValue );
447 0 : mpMetric->Modify();
448 0 : return 0;
449 : }
450 :
451 0 : void CharHeightPropertyBox::setValue( const Any& rValue, const OUString& )
452 : {
453 0 : if( mpMetric )
454 : {
455 0 : double fValue = 0.0;
456 0 : rValue >>= fValue;
457 0 : mpMetric->SetValue( (long)(fValue * 100.0) );
458 : }
459 0 : }
460 :
461 0 : Any CharHeightPropertyBox::getValue()
462 : {
463 0 : return makeAny( (double)((double)mpMetric->GetValue() / 100.0) );
464 : }
465 :
466 0 : Control* CharHeightPropertyBox::getControl()
467 : {
468 0 : return mpControl;
469 : }
470 :
471 : class TransparencyPropertyBox : public PropertySubControl
472 : {
473 : public:
474 : TransparencyPropertyBox( sal_Int32 nControlType, vcl::Window* pParent, const Any& rValue, const Link& rModifyHdl );
475 : virtual ~TransparencyPropertyBox();
476 :
477 : virtual Any getValue() SAL_OVERRIDE;
478 : virtual void setValue( const Any& rValue, const OUString& rPresetId ) SAL_OVERRIDE;
479 :
480 : virtual Control* getControl() SAL_OVERRIDE;
481 :
482 : DECL_LINK( implMenuSelectHdl, MenuButton* );
483 : DECL_LINK(implModifyHdl, void *);
484 :
485 : void updateMenu();
486 :
487 : private:
488 : DropdownMenuBox* mpControl;
489 : PopupMenu* mpMenu;
490 : MetricField* mpMetric;
491 : Link maModifyHdl;
492 : };
493 :
494 0 : TransparencyPropertyBox::TransparencyPropertyBox( sal_Int32 nControlType, vcl::Window* pParent, const Any& rValue, const Link& rModifyHdl )
495 : : PropertySubControl( nControlType )
496 0 : , maModifyHdl( rModifyHdl )
497 : {
498 0 : mpMetric = new MetricField( pParent ,WB_TABSTOP|WB_IGNORETAB| WB_NOBORDER);
499 0 : mpMetric->SetUnit( FUNIT_PERCENT );
500 0 : mpMetric->SetMin( 0 );
501 0 : mpMetric->SetMax( 100 );
502 :
503 0 : mpMenu = new PopupMenu();
504 0 : for( sal_Int32 i = 25; i < 101; i += 25 )
505 : {
506 : OUString aStr(unicode::formatPercent(i,
507 0 : Application::GetSettings().GetUILanguageTag()));
508 0 : mpMenu->InsertItem( i, aStr );
509 0 : }
510 :
511 0 : mpControl = new DropdownMenuBox( pParent, mpMetric, mpMenu );
512 0 : mpControl->SetMenuSelectHdl( LINK( this, TransparencyPropertyBox, implMenuSelectHdl ));
513 0 : mpControl->SetHelpId( HID_SD_CUSTOMANIMATIONPANE_TRANSPARENCYPROPERTYBOX );
514 :
515 0 : Link aLink( LINK( this, TransparencyPropertyBox, implModifyHdl ) );
516 0 : mpControl->SetModifyHdl( aLink );
517 :
518 0 : OUString aPresetId;
519 0 : setValue( rValue, aPresetId );
520 0 : }
521 :
522 0 : TransparencyPropertyBox::~TransparencyPropertyBox()
523 : {
524 0 : delete mpControl;
525 0 : }
526 :
527 0 : void TransparencyPropertyBox::updateMenu()
528 : {
529 0 : sal_Int64 nValue = mpMetric->GetValue();
530 0 : for( sal_uInt16 i = 25; i < 101; i += 25 )
531 0 : mpMenu->CheckItem( i, nValue == i );
532 0 : }
533 :
534 0 : IMPL_LINK_NOARG(TransparencyPropertyBox, implModifyHdl)
535 : {
536 0 : updateMenu();
537 0 : maModifyHdl.Call(mpMetric);
538 :
539 0 : return 0;
540 : }
541 :
542 0 : IMPL_LINK( TransparencyPropertyBox, implMenuSelectHdl, MenuButton*, pPb )
543 : {
544 0 : if( pPb->GetCurItemId() != mpMetric->GetValue() )
545 : {
546 0 : mpMetric->SetValue( pPb->GetCurItemId() );
547 0 : mpMetric->Modify();
548 : }
549 :
550 0 : return 0;
551 : }
552 :
553 0 : void TransparencyPropertyBox::setValue( const Any& rValue, const OUString& )
554 : {
555 0 : if( mpMetric )
556 : {
557 0 : double fValue = 0.0;
558 0 : rValue >>= fValue;
559 0 : long nValue = (long)(fValue * 100);
560 0 : mpMetric->SetValue( nValue );
561 0 : updateMenu();
562 : }
563 0 : }
564 :
565 0 : Any TransparencyPropertyBox::getValue()
566 : {
567 0 : return makeAny( (double)((double)mpMetric->GetValue()) / 100.0 );
568 : }
569 :
570 0 : Control* TransparencyPropertyBox::getControl()
571 : {
572 0 : return mpControl;
573 : }
574 :
575 : class RotationPropertyBox : public PropertySubControl
576 : {
577 : public:
578 : RotationPropertyBox( sal_Int32 nControlType, vcl::Window* pParent, const Any& rValue, const Link& rModifyHdl );
579 : virtual ~RotationPropertyBox();
580 :
581 : virtual Any getValue() SAL_OVERRIDE;
582 : virtual void setValue( const Any& rValue, const OUString& ) SAL_OVERRIDE;
583 :
584 : virtual Control* getControl() SAL_OVERRIDE;
585 :
586 : DECL_LINK( implMenuSelectHdl, MenuButton* );
587 : DECL_LINK(implModifyHdl, void *);
588 :
589 : void updateMenu();
590 :
591 : private:
592 : DropdownMenuBox* mpControl;
593 : PopupMenu* mpMenu;
594 : MetricField* mpMetric;
595 : Link maModifyHdl;
596 : };
597 :
598 0 : RotationPropertyBox::RotationPropertyBox( sal_Int32 nControlType, vcl::Window* pParent, const Any& rValue, const Link& rModifyHdl )
599 : : PropertySubControl( nControlType )
600 0 : , maModifyHdl( rModifyHdl )
601 : {
602 0 : mpMetric = new MetricField( pParent ,WB_TABSTOP|WB_IGNORETAB| WB_NOBORDER);
603 0 : mpMetric->SetUnit( FUNIT_CUSTOM );
604 0 : mpMetric->SetCustomUnitText( OUString( sal_Unicode(0xb0)) ); // degree sign
605 0 : mpMetric->SetMin( -10000 );
606 0 : mpMetric->SetMax( 10000 );
607 :
608 0 : mpMenu = new PopupMenu(SdResId( RID_CUSTOMANIMATION_ROTATION_POPUP ) );
609 0 : mpControl = new DropdownMenuBox( pParent, mpMetric, mpMenu );
610 0 : mpControl->SetMenuSelectHdl( LINK( this, RotationPropertyBox, implMenuSelectHdl ));
611 0 : mpControl->SetHelpId( HID_SD_CUSTOMANIMATIONPANE_ROTATIONPROPERTYBOX );
612 :
613 0 : Link aLink( LINK( this, RotationPropertyBox, implModifyHdl ) );
614 0 : mpControl->SetModifyHdl( aLink );
615 :
616 0 : OUString aPresetId;
617 0 : setValue( rValue, aPresetId );
618 0 : }
619 :
620 0 : RotationPropertyBox::~RotationPropertyBox()
621 : {
622 0 : delete mpControl;
623 0 : }
624 :
625 0 : void RotationPropertyBox::updateMenu()
626 : {
627 0 : sal_Int64 nValue = mpMetric->GetValue();
628 0 : bool bDirection = nValue >= 0;
629 0 : nValue = (nValue < 0 ? -nValue : nValue);
630 :
631 0 : mpMenu->CheckItem( CM_QUARTER_SPIN, nValue == 90 );
632 0 : mpMenu->CheckItem( CM_HALF_SPIN, nValue == 180 );
633 0 : mpMenu->CheckItem( CM_FULL_SPIN, nValue == 360 );
634 0 : mpMenu->CheckItem( CM_TWO_SPINS, nValue == 720 );
635 :
636 0 : mpMenu->CheckItem( CM_CLOCKWISE, bDirection );
637 0 : mpMenu->CheckItem( CM_COUNTERCLOCKWISE, !bDirection );
638 0 : }
639 :
640 0 : IMPL_LINK_NOARG(RotationPropertyBox, implModifyHdl)
641 : {
642 0 : updateMenu();
643 0 : maModifyHdl.Call(mpMetric);
644 :
645 0 : return 0;
646 : }
647 :
648 0 : IMPL_LINK( RotationPropertyBox, implMenuSelectHdl, MenuButton*, pPb )
649 : {
650 0 : sal_Int64 nValue = mpMetric->GetValue();
651 0 : bool bDirection = nValue >= 0;
652 0 : nValue = (nValue < 0 ? -nValue : nValue);
653 :
654 0 : switch( pPb->GetCurItemId() )
655 : {
656 0 : case CM_QUARTER_SPIN: nValue = 90; break;
657 0 : case CM_HALF_SPIN: nValue = 180; break;
658 0 : case CM_FULL_SPIN: nValue = 360; break;
659 0 : case CM_TWO_SPINS: nValue = 720; break;
660 :
661 0 : case CM_CLOCKWISE: bDirection = true; break;
662 0 : case CM_COUNTERCLOCKWISE: bDirection = false; break;
663 :
664 : }
665 :
666 0 : if( !bDirection )
667 0 : nValue = -nValue;
668 :
669 0 : if( nValue != mpMetric->GetValue() )
670 : {
671 0 : mpMetric->SetValue( nValue );
672 0 : mpMetric->Modify();
673 : }
674 :
675 0 : return 0;
676 : }
677 :
678 0 : void RotationPropertyBox::setValue( const Any& rValue, const OUString& )
679 : {
680 0 : if( mpMetric )
681 : {
682 0 : double fValue = 0.0;
683 0 : rValue >>= fValue;
684 0 : long nValue = (long)(fValue);
685 0 : mpMetric->SetValue( nValue );
686 0 : updateMenu();
687 : }
688 0 : }
689 :
690 0 : Any RotationPropertyBox::getValue()
691 : {
692 0 : return makeAny( (double)((double)mpMetric->GetValue()) );
693 : }
694 :
695 0 : Control* RotationPropertyBox::getControl()
696 : {
697 0 : return mpControl;
698 : }
699 :
700 : class ScalePropertyBox : public PropertySubControl
701 : {
702 : public:
703 : ScalePropertyBox( sal_Int32 nControlType, vcl::Window* pParent, const Any& rValue, const Link& rModifyHdl );
704 : virtual ~ScalePropertyBox();
705 :
706 : virtual Any getValue() SAL_OVERRIDE;
707 : virtual void setValue( const Any& rValue, const OUString& ) SAL_OVERRIDE;
708 :
709 : virtual Control* getControl() SAL_OVERRIDE;
710 :
711 : DECL_LINK( implMenuSelectHdl, MenuButton* );
712 : DECL_LINK(implModifyHdl, void *);
713 :
714 : void updateMenu();
715 :
716 : private:
717 : DropdownMenuBox* mpControl;
718 : PopupMenu* mpMenu;
719 : MetricField* mpMetric;
720 : Link maModifyHdl;
721 : int mnDirection;
722 : };
723 :
724 0 : ScalePropertyBox::ScalePropertyBox( sal_Int32 nControlType, vcl::Window* pParent, const Any& rValue, const Link& rModifyHdl )
725 : : PropertySubControl( nControlType )
726 0 : , maModifyHdl( rModifyHdl )
727 : {
728 0 : mpMetric = new MetricField( pParent ,WB_TABSTOP|WB_IGNORETAB| WB_NOBORDER);
729 0 : mpMetric->SetUnit( FUNIT_PERCENT );
730 0 : mpMetric->SetMin( 0 );
731 0 : mpMetric->SetMax( 10000 );
732 :
733 0 : mpMenu = new PopupMenu(SdResId( RID_CUSTOMANIMATION_SCALE_POPUP ) );
734 0 : mpControl = new DropdownMenuBox( pParent, mpMetric, mpMenu );
735 0 : mpControl->SetMenuSelectHdl( LINK( this, ScalePropertyBox, implMenuSelectHdl ));
736 0 : mpControl->SetHelpId( HID_SD_CUSTOMANIMATIONPANE_SCALEPROPERTYBOX );
737 :
738 0 : Link aLink( LINK( this, ScalePropertyBox, implModifyHdl ) );
739 0 : mpControl->SetModifyHdl( aLink );
740 :
741 0 : OUString aPresetId;
742 0 : setValue( rValue, aPresetId );
743 0 : }
744 :
745 0 : ScalePropertyBox::~ScalePropertyBox()
746 : {
747 0 : delete mpControl;
748 0 : }
749 :
750 0 : void ScalePropertyBox::updateMenu()
751 : {
752 0 : sal_Int64 nValue = mpMetric->GetValue();
753 :
754 0 : mpMenu->CheckItem( 25, nValue == 25 );
755 0 : mpMenu->CheckItem( 50, nValue == 50 );
756 0 : mpMenu->CheckItem( 150, nValue == 150 );
757 0 : mpMenu->CheckItem( 400, nValue == 400 );
758 :
759 0 : mpMenu->CheckItem( CM_HORIZONTAL, mnDirection == 1 );
760 0 : mpMenu->CheckItem( CM_VERTICAL, mnDirection == 2 );
761 0 : mpMenu->CheckItem( CM_BOTH, mnDirection == 3 );
762 0 : }
763 :
764 0 : IMPL_LINK_NOARG(ScalePropertyBox, implModifyHdl)
765 : {
766 0 : updateMenu();
767 0 : maModifyHdl.Call(mpMetric);
768 :
769 0 : return 0;
770 : }
771 :
772 0 : IMPL_LINK( ScalePropertyBox, implMenuSelectHdl, MenuButton*, pPb )
773 : {
774 0 : sal_Int64 nValue = mpMetric->GetValue();
775 :
776 0 : int nDirection = mnDirection;
777 :
778 0 : switch( pPb->GetCurItemId() )
779 : {
780 0 : case CM_HORIZONTAL: nDirection = 1; break;
781 0 : case CM_VERTICAL: nDirection = 2; break;
782 0 : case CM_BOTH: nDirection = 3; break;
783 :
784 : default:
785 0 : nValue = pPb->GetCurItemId();
786 : }
787 :
788 0 : bool bModified = false;
789 :
790 0 : if( nDirection != mnDirection )
791 : {
792 0 : mnDirection = nDirection;
793 0 : bModified = true;
794 : }
795 :
796 0 : if( nValue != mpMetric->GetValue() )
797 : {
798 0 : mpMetric->SetValue( nValue );
799 0 : bModified = true;
800 : }
801 :
802 0 : if( bModified )
803 : {
804 0 : mpMetric->Modify();
805 0 : updateMenu();
806 : }
807 :
808 0 : return 0;
809 : }
810 :
811 0 : void ScalePropertyBox::setValue( const Any& rValue, const OUString& )
812 : {
813 0 : if( mpMetric )
814 : {
815 0 : ValuePair aValues;
816 0 : rValue >>= aValues;
817 :
818 0 : double fValue1 = 0.0;
819 0 : double fValue2 = 0.0;
820 :
821 0 : aValues.First >>= fValue1;
822 0 : aValues.Second >>= fValue2;
823 :
824 0 : if( fValue2 == 0.0 )
825 0 : mnDirection = 1;
826 0 : else if( fValue1 == 0.0 )
827 0 : mnDirection = 2;
828 : else
829 0 : mnDirection = 3;
830 :
831 : long nValue;
832 0 : if( fValue1 )
833 0 : nValue = (long)(fValue1 * 100.0);
834 : else
835 0 : nValue = (long)(fValue2 * 100.0);
836 0 : mpMetric->SetValue( nValue );
837 0 : updateMenu();
838 : }
839 0 : }
840 :
841 0 : Any ScalePropertyBox::getValue()
842 : {
843 0 : double fValue1 = (double)((double)mpMetric->GetValue() / 100.0);
844 0 : double fValue2 = fValue1;
845 :
846 0 : if( mnDirection == 1 )
847 0 : fValue2 = 0.0;
848 0 : else if( mnDirection == 2 )
849 0 : fValue1 = 0.0;
850 :
851 0 : ValuePair aValues;
852 0 : aValues.First <<= fValue1;
853 0 : aValues.Second <<= fValue2;
854 :
855 0 : return makeAny( aValues );
856 : }
857 :
858 0 : Control* ScalePropertyBox::getControl()
859 : {
860 0 : return mpControl;
861 : }
862 :
863 : class FontStylePropertyBox : public PropertySubControl
864 : {
865 : public:
866 : FontStylePropertyBox( sal_Int32 nControlType, vcl::Window* pParent, const Any& rValue, const Link& rModifyHdl );
867 : virtual ~FontStylePropertyBox();
868 :
869 : virtual Any getValue() SAL_OVERRIDE;
870 : virtual void setValue( const Any& rValue, const OUString& ) SAL_OVERRIDE;
871 :
872 : virtual Control* getControl() SAL_OVERRIDE;
873 :
874 : DECL_LINK( implMenuSelectHdl, MenuButton* );
875 :
876 : void update();
877 :
878 : private:
879 : DropdownMenuBox* mpControl;
880 : PopupMenu* mpMenu;
881 : Edit* mpEdit;
882 : Link maModifyHdl;
883 :
884 : float mfFontWeight;
885 : awt::FontSlant meFontSlant;
886 : sal_Int16 mnFontUnderline;
887 : };
888 :
889 0 : FontStylePropertyBox::FontStylePropertyBox( sal_Int32 nControlType, vcl::Window* pParent, const Any& rValue, const Link& rModifyHdl )
890 : : PropertySubControl( nControlType )
891 0 : , maModifyHdl( rModifyHdl )
892 : {
893 0 : mpEdit = new Edit( pParent, WB_TABSTOP|WB_IGNORETAB|WB_NOBORDER|WB_READONLY);
894 0 : mpEdit->SetText( SD_RESSTR(STR_CUSTOMANIMATION_SAMPLE) );
895 :
896 0 : mpMenu = new PopupMenu(SdResId( RID_CUSTOMANIMATION_FONTSTYLE_POPUP ) );
897 0 : mpControl = new DropdownMenuBox( pParent, mpEdit, mpMenu );
898 0 : mpControl->SetMenuSelectHdl( LINK( this, FontStylePropertyBox, implMenuSelectHdl ));
899 0 : mpControl->SetHelpId( HID_SD_CUSTOMANIMATIONPANE_FONTSTYLEPROPERTYBOX );
900 :
901 0 : OUString aPresetId;
902 0 : setValue( rValue, aPresetId );
903 0 : }
904 :
905 0 : FontStylePropertyBox::~FontStylePropertyBox()
906 : {
907 0 : delete mpControl;
908 0 : }
909 :
910 0 : void FontStylePropertyBox::update()
911 : {
912 : // update menu
913 0 : mpMenu->CheckItem( CM_BOLD, mfFontWeight == awt::FontWeight::BOLD );
914 0 : mpMenu->CheckItem( CM_ITALIC, meFontSlant == awt::FontSlant_ITALIC);
915 0 : mpMenu->CheckItem( CM_UNDERLINED, mnFontUnderline != awt::FontUnderline::NONE );
916 :
917 : // update sample edit
918 0 : vcl::Font aFont( mpEdit->GetFont() );
919 0 : aFont.SetWeight( mfFontWeight == awt::FontWeight::BOLD ? WEIGHT_BOLD : WEIGHT_NORMAL );
920 0 : aFont.SetItalic( meFontSlant == awt::FontSlant_ITALIC ? ITALIC_NORMAL : ITALIC_NONE );
921 0 : aFont.SetUnderline( mnFontUnderline == awt::FontUnderline::NONE ? UNDERLINE_NONE : UNDERLINE_SINGLE );
922 0 : mpEdit->SetFont( aFont );
923 0 : mpEdit->Invalidate();
924 0 : }
925 :
926 0 : IMPL_LINK( FontStylePropertyBox, implMenuSelectHdl, MenuButton*, pPb )
927 : {
928 0 : switch( pPb->GetCurItemId() )
929 : {
930 : case CM_BOLD:
931 0 : if( mfFontWeight == awt::FontWeight::BOLD )
932 0 : mfFontWeight = awt::FontWeight::NORMAL;
933 : else
934 0 : mfFontWeight = awt::FontWeight::BOLD;
935 0 : break;
936 : case CM_ITALIC:
937 0 : if( meFontSlant == awt::FontSlant_ITALIC )
938 0 : meFontSlant = awt::FontSlant_NONE;
939 : else
940 0 : meFontSlant = awt::FontSlant_ITALIC;
941 0 : break;
942 : case CM_UNDERLINED:
943 0 : if( mnFontUnderline == awt::FontUnderline::SINGLE )
944 0 : mnFontUnderline = awt::FontUnderline::NONE;
945 : else
946 0 : mnFontUnderline = awt::FontUnderline::SINGLE;
947 0 : break;
948 : default:
949 0 : return 0;
950 : }
951 :
952 0 : update();
953 0 : maModifyHdl.Call(mpEdit);
954 :
955 0 : return 0;
956 : }
957 :
958 0 : void FontStylePropertyBox::setValue( const Any& rValue, const OUString& )
959 : {
960 0 : Sequence<Any> aValues;
961 0 : rValue >>= aValues;
962 :
963 0 : aValues[0] >>= mfFontWeight;
964 0 : aValues[1] >>= meFontSlant;
965 0 : aValues[2] >>= mnFontUnderline;
966 :
967 0 : update();
968 0 : }
969 :
970 0 : Any FontStylePropertyBox::getValue()
971 : {
972 0 : Sequence<Any> aValues(3);
973 0 : aValues[0] <<= mfFontWeight;
974 0 : aValues[1] <<= meFontSlant;
975 0 : aValues[2] <<= mnFontUnderline;
976 0 : return makeAny( aValues );
977 : }
978 :
979 0 : Control* FontStylePropertyBox::getControl()
980 : {
981 0 : return mpControl;
982 : }
983 :
984 : class CustomAnimationEffectTabPage : public TabPage
985 : {
986 : public:
987 : CustomAnimationEffectTabPage( vcl::Window* pParent, const STLPropertySet* pSet );
988 : virtual ~CustomAnimationEffectTabPage();
989 :
990 : void update( STLPropertySet* pSet );
991 : DECL_LINK( implSelectHdl, Control* );
992 :
993 : private:
994 : void updateControlStates();
995 : void fillSoundListBox();
996 : void clearSoundListBox();
997 : sal_Int32 getSoundObject( const OUString& rStr );
998 : void openSoundFileDialog();
999 : void onSoundPreview();
1000 :
1001 : private:
1002 : ::std::vector< OUString > maSoundList;
1003 : bool mbHasText;
1004 : const STLPropertySet* mpSet;
1005 :
1006 : VclFrame* mpSettings;
1007 : FixedText* mpFTProperty1;
1008 : PropertyControl* mpLBProperty1;
1009 : VclHBox* mpPlaceholderBox;
1010 : CheckBox* mpCBSmoothStart;
1011 : CheckBox* mpCBSmoothEnd;
1012 :
1013 : FixedText* mpFTSound;
1014 : ListBox* mpLBSound;
1015 : PushButton* mpPBSoundPreview;
1016 : FixedText* mpFTAfterEffect;
1017 : ListBox* mpLBAfterEffect;
1018 : FixedText* mpFTDimColor;
1019 : ColorListBox* mpCLBDimColor;
1020 : FixedText* mpFTTextAnim;
1021 : ListBox* mpLBTextAnim;
1022 : MetricField* mpMFTextDelay;
1023 : FixedText* mpFTTextDelay;
1024 :
1025 : ::com::sun::star::uno::Reference< ::com::sun::star::media::XPlayer > mxPlayer;
1026 : };
1027 :
1028 0 : CustomAnimationEffectTabPage::CustomAnimationEffectTabPage( vcl::Window* pParent, const STLPropertySet* pSet )
1029 0 : : TabPage( pParent, "EffectTab", "modules/simpress/ui/customanimationeffecttab.ui" ), mbHasText( false ), mpSet(pSet )
1030 : {
1031 0 : get(mpSettings, "settings" );
1032 0 : get(mpFTProperty1, "prop_label1" );
1033 0 : get(mpLBProperty1, "prop_list1" );
1034 0 : get(mpPlaceholderBox, "placeholder" );
1035 0 : get(mpCBSmoothStart, "smooth_start" );
1036 0 : get(mpCBSmoothEnd, "smooth_end" );
1037 0 : get(mpFTSound, "sound_label");
1038 0 : get(mpLBSound, "sound_list" );
1039 0 : get(mpPBSoundPreview, "sound_preview" );
1040 0 : get(mpFTAfterEffect, "aeffect_label" );
1041 0 : get(mpLBAfterEffect, "aeffect_list" );
1042 0 : get(mpFTDimColor, "dim_color_label" );
1043 0 : get(mpCLBDimColor, "dim_color_list" );
1044 0 : get(mpFTTextAnim, "text_animation_label" );
1045 0 : get(mpLBTextAnim, "text_animation_list" );
1046 0 : get(mpMFTextDelay,"text_delay" );
1047 0 : get(mpFTTextDelay,"text_delay_label" );
1048 :
1049 : // fill the soundbox
1050 0 : fillSoundListBox();
1051 :
1052 0 : mpLBSound->SetSelectHdl( LINK( this, CustomAnimationEffectTabPage, implSelectHdl ) );
1053 :
1054 0 : mpPBSoundPreview->SetClickHdl( LINK( this, CustomAnimationEffectTabPage, implSelectHdl ) );
1055 :
1056 : // fill the color box
1057 0 : SfxObjectShell* pDocSh = SfxObjectShell::Current();
1058 : DBG_ASSERT( pDocSh, "DocShell not found!" );
1059 0 : XColorListRef pColorList;
1060 0 : const SfxPoolItem* pItem = NULL;
1061 :
1062 0 : if ( pDocSh && ( (pItem = pDocSh->GetItem( SID_COLOR_TABLE ) ) != 0 ) )
1063 0 : pColorList = ( (SvxColorListItem*)pItem )->GetColorList();
1064 :
1065 0 : if ( !pColorList.is() )
1066 0 : pColorList = XColorList::CreateStdColorList();
1067 :
1068 0 : mpCLBDimColor->SetUpdateMode( false );
1069 :
1070 0 : for ( long i = 0; i < pColorList->Count(); i++ )
1071 : {
1072 0 : XColorEntry* pEntry = pColorList->GetColor(i);
1073 0 : mpCLBDimColor->InsertEntry( pEntry->GetColor(), pEntry->GetName() );
1074 : }
1075 :
1076 0 : mpCLBDimColor->SetUpdateMode( true );
1077 :
1078 : // only show settings if all selected effects have the same preset-id
1079 0 : if( pSet->getPropertyState( nHandlePresetId ) != STLPropertyState_AMBIGUOUS )
1080 : {
1081 0 : OUString aPresetId;
1082 0 : pSet->getPropertyValue( nHandlePresetId ) >>= aPresetId;
1083 :
1084 : // property 1
1085 :
1086 0 : if( pSet->getPropertyState( nHandleProperty1Type ) != STLPropertyState_AMBIGUOUS )
1087 : {
1088 0 : sal_Int32 nType = 0;
1089 0 : pSet->getPropertyValue( nHandleProperty1Type ) >>= nType;
1090 :
1091 0 : if( nType != nPropertyTypeNone )
1092 : {
1093 : // set ui name for property at fixed text
1094 0 : OUString aPropertyName( getPropertyName( nType ) );
1095 :
1096 0 : if( !aPropertyName.isEmpty() )
1097 : {
1098 0 : mpSettings->Show();
1099 0 : mpFTProperty1->SetText( aPropertyName );
1100 : }
1101 :
1102 : // get property value
1103 0 : const Any aValue( pSet->getPropertyValue( nHandleProperty1Value ) );
1104 :
1105 0 : Link aModifyLink;
1106 : // create property sub control
1107 0 : mpLBProperty1->setSubControl( PropertySubControl::create( nType, mpPlaceholderBox, aValue, aPresetId, aModifyLink ));
1108 : }
1109 : }
1110 :
1111 0 : mpFTProperty1->Enable( mpLBProperty1->IsEnabled() );
1112 :
1113 : // accelerate & deccelerate
1114 :
1115 0 : if( pSet->getPropertyState( nHandleAccelerate ) == STLPropertyState_DIRECT )
1116 : {
1117 0 : mpCBSmoothStart->Show();
1118 0 : mpCBSmoothEnd->Show();
1119 :
1120 0 : double fTemp = 0.0;
1121 0 : pSet->getPropertyValue( nHandleAccelerate ) >>= fTemp;
1122 0 : mpCBSmoothStart->Check( fTemp > 0.0 );
1123 :
1124 0 : pSet->getPropertyValue( nHandleDecelerate ) >>= fTemp;
1125 0 : mpCBSmoothEnd->Check( fTemp > 0.0 );
1126 0 : }
1127 : }
1128 :
1129 : // init after effect controls
1130 :
1131 0 : mpLBAfterEffect->SetSelectHdl( LINK( this, CustomAnimationEffectTabPage, implSelectHdl ) );
1132 0 : mpLBTextAnim->SetSelectHdl( LINK( this, CustomAnimationEffectTabPage, implSelectHdl ) );
1133 :
1134 0 : if( (pSet->getPropertyState( nHandleHasAfterEffect ) != STLPropertyState_AMBIGUOUS) &&
1135 0 : (pSet->getPropertyState( nHandleAfterEffectOnNextEffect ) != STLPropertyState_AMBIGUOUS) &&
1136 0 : (pSet->getPropertyState( nHandleDimColor ) != STLPropertyState_AMBIGUOUS))
1137 : {
1138 0 : bool bHasAfterEffect = false;
1139 0 : pSet->getPropertyValue( nHandleHasAfterEffect ) >>= bHasAfterEffect;
1140 :
1141 0 : sal_Int32 nPos = 0;
1142 0 : if( bHasAfterEffect )
1143 : {
1144 0 : nPos++;
1145 :
1146 0 : bool bAfterEffectOnNextClick = false;
1147 0 : pSet->getPropertyValue( nHandleAfterEffectOnNextEffect ) >>= bAfterEffectOnNextClick;
1148 0 : Any aDimColor( pSet->getPropertyValue( nHandleDimColor ) );
1149 :
1150 0 : if( aDimColor.hasValue() )
1151 : {
1152 0 : sal_Int32 nColor = 0;
1153 0 : aDimColor >>= nColor;
1154 0 : Color aColor( nColor );
1155 0 : sal_Int32 nColorPos = mpCLBDimColor->GetEntryPos( aColor );
1156 0 : if ( LISTBOX_ENTRY_NOTFOUND != nColorPos )
1157 0 : mpCLBDimColor->SelectEntryPos( nColorPos );
1158 : else
1159 : mpCLBDimColor->SelectEntryPos(
1160 0 : mpCLBDimColor->InsertEntry( aColor, SVX_RESSTR(RID_SVXSTR_COLOR_USER) ) );
1161 : }
1162 : else
1163 : {
1164 0 : nPos++;
1165 0 : if( bAfterEffectOnNextClick )
1166 0 : nPos++;
1167 0 : }
1168 : }
1169 :
1170 0 : mpLBAfterEffect->SelectEntryPos( nPos );
1171 : }
1172 :
1173 0 : if( pSet->getPropertyState( nHandleHasText ) != STLPropertyState_AMBIGUOUS )
1174 0 : pSet->getPropertyValue( nHandleHasText ) >>= mbHasText;
1175 :
1176 0 : if( mbHasText )
1177 : {
1178 0 : if( pSet->getPropertyState( nHandleIterateType ) != STLPropertyState_AMBIGUOUS)
1179 : {
1180 0 : sal_Int32 nPos = LISTBOX_ENTRY_NOTFOUND;
1181 :
1182 0 : sal_Int32 nIterateType = 0;
1183 0 : pSet->getPropertyValue( nHandleIterateType ) >>= nIterateType;
1184 0 : switch( nIterateType )
1185 : {
1186 0 : case TextAnimationType::BY_PARAGRAPH: nPos = 0; break;
1187 0 : case TextAnimationType::BY_WORD: nPos = 1; break;
1188 0 : case TextAnimationType::BY_LETTER: nPos = 2; break;
1189 : }
1190 :
1191 0 : mpLBTextAnim->SelectEntryPos( nPos );
1192 : }
1193 :
1194 0 : if( pSet->getPropertyState( nHandleIterateInterval ) )
1195 : {
1196 0 : double fIterateInterval = 0.0;
1197 0 : pSet->getPropertyValue( nHandleIterateInterval ) >>= fIterateInterval;
1198 0 : mpMFTextDelay->SetValue( (long)(fIterateInterval*10) );
1199 : }
1200 : }
1201 : else
1202 : {
1203 0 : mpFTTextAnim->Enable( false );
1204 0 : mpLBTextAnim->Enable( false );
1205 0 : mpMFTextDelay->Enable( false );
1206 0 : mpFTTextDelay->Enable( false );
1207 :
1208 : }
1209 :
1210 0 : if( pSet->getPropertyState( nHandleSoundURL ) != STLPropertyState_AMBIGUOUS )
1211 : {
1212 0 : sal_Int32 nPos = 0;
1213 :
1214 0 : const Any aValue( pSet->getPropertyValue( nHandleSoundURL ) );
1215 :
1216 0 : if( aValue.getValueType() == ::cppu::UnoType<sal_Bool>::get() )
1217 : {
1218 0 : nPos = 1;
1219 : }
1220 : else
1221 : {
1222 0 : OUString aSoundURL;
1223 0 : aValue >>= aSoundURL;
1224 :
1225 0 : if( !aSoundURL.isEmpty() )
1226 : {
1227 : sal_uLong i;
1228 0 : for( i = 0; i < maSoundList.size(); i++ )
1229 : {
1230 0 : OUString aString = maSoundList[ i ];
1231 0 : if( aString == aSoundURL )
1232 : {
1233 0 : nPos = (sal_Int32)i+2;
1234 0 : break;
1235 : }
1236 0 : }
1237 :
1238 0 : if( nPos == 0 )
1239 : {
1240 0 : nPos = (sal_Int32)maSoundList.size()+2;
1241 0 : maSoundList.push_back( aSoundURL );
1242 0 : INetURLObject aURL( aSoundURL );
1243 0 : nPos = mpLBSound->InsertEntry( aURL.GetBase(), nPos );
1244 : }
1245 0 : }
1246 : }
1247 :
1248 0 : if( nPos != LISTBOX_ENTRY_NOTFOUND )
1249 0 : mpLBSound->SelectEntryPos( nPos );
1250 : }
1251 :
1252 0 : updateControlStates();
1253 :
1254 0 : }
1255 :
1256 0 : CustomAnimationEffectTabPage::~CustomAnimationEffectTabPage()
1257 : {
1258 0 : clearSoundListBox();
1259 0 : }
1260 :
1261 0 : void CustomAnimationEffectTabPage::updateControlStates()
1262 : {
1263 0 : sal_Int32 nPos = mpLBAfterEffect->GetSelectEntryPos();
1264 0 : mpCLBDimColor->Enable( nPos == 1 );
1265 0 : mpFTDimColor->Enable( nPos == 1 );
1266 :
1267 0 : if( mbHasText )
1268 : {
1269 0 : nPos = mpLBTextAnim->GetSelectEntryPos();
1270 0 : mpMFTextDelay->Enable( nPos != 0 );
1271 0 : mpFTTextDelay->Enable( nPos != 0 );
1272 : }
1273 :
1274 0 : nPos = mpLBSound->GetSelectEntryPos();
1275 0 : mpPBSoundPreview->Enable( nPos >= 2 );
1276 0 : }
1277 :
1278 0 : IMPL_LINK( CustomAnimationEffectTabPage, implSelectHdl, Control*, pControl )
1279 : {
1280 0 : if( pControl == mpLBAfterEffect )
1281 : {
1282 0 : sal_Int32 nPos = static_cast<ListBox*>( mpLBAfterEffect )->GetSelectEntryPos();
1283 0 : if( nPos == 1 )
1284 : {
1285 0 : if( mpCLBDimColor->GetSelectEntryPos() == LISTBOX_ENTRY_NOTFOUND )
1286 0 : mpCLBDimColor->SelectEntryPos(0);
1287 : }
1288 : }
1289 0 : else if( pControl == mpLBTextAnim )
1290 : {
1291 0 : if( mpMFTextDelay->GetValue() == 0 )
1292 0 : mpMFTextDelay->SetValue( 100 );
1293 : }
1294 0 : else if( pControl == mpLBSound )
1295 : {
1296 0 : sal_Int32 nPos = mpLBSound->GetSelectEntryPos();
1297 0 : if( nPos == (mpLBSound->GetEntryCount() - 1) )
1298 : {
1299 0 : openSoundFileDialog();
1300 : }
1301 : }
1302 0 : else if( pControl == mpPBSoundPreview )
1303 : {
1304 0 : onSoundPreview();
1305 : }
1306 :
1307 0 : updateControlStates();
1308 0 : return 0;
1309 : }
1310 :
1311 0 : void CustomAnimationEffectTabPage::update( STLPropertySet* pSet )
1312 : {
1313 0 : if( mpLBProperty1->getSubControl() )
1314 : {
1315 0 : Any aNewValue( mpLBProperty1->getSubControl()->getValue() );
1316 0 : Any aOldValue;
1317 0 : if( mpSet->getPropertyState( nHandleProperty1Value ) != STLPropertyState_AMBIGUOUS)
1318 0 : aOldValue = mpSet->getPropertyValue( nHandleProperty1Value );
1319 :
1320 0 : if( aOldValue != aNewValue )
1321 0 : pSet->setPropertyValue( nHandleProperty1Value, aNewValue );
1322 : }
1323 :
1324 0 : if( mpCBSmoothStart->IsVisible() )
1325 : {
1326 : // set selected value for accelerate if different then in original set
1327 :
1328 0 : double fTemp = mpCBSmoothStart->IsChecked() ? 0.5 : 0.0;
1329 :
1330 0 : double fOldTemp = 0.0;
1331 0 : if(mpSet->getPropertyState( nHandleAccelerate ) != STLPropertyState_AMBIGUOUS)
1332 0 : mpSet->getPropertyValue( nHandleAccelerate ) >>= fOldTemp;
1333 : else
1334 0 : fOldTemp = -2.0;
1335 :
1336 0 : if( fOldTemp != fTemp )
1337 0 : pSet->setPropertyValue( nHandleAccelerate, makeAny( fTemp ) );
1338 :
1339 : // set selected value for decelerate if different then in original set
1340 0 : fTemp = mpCBSmoothEnd->IsChecked() ? 0.5 : 0.0;
1341 :
1342 0 : if(mpSet->getPropertyState( nHandleDecelerate ) != STLPropertyState_AMBIGUOUS)
1343 0 : mpSet->getPropertyValue( nHandleDecelerate ) >>= fOldTemp;
1344 : else
1345 0 : fOldTemp = -2.0;
1346 :
1347 0 : if( fOldTemp != fTemp )
1348 0 : pSet->setPropertyValue( nHandleDecelerate, makeAny( fTemp ) );
1349 : }
1350 :
1351 0 : sal_Int32 nPos = mpLBAfterEffect->GetSelectEntryPos();
1352 0 : if( nPos != LISTBOX_ENTRY_NOTFOUND )
1353 : {
1354 0 : bool bAfterEffect = nPos != 0;
1355 :
1356 0 : bool bOldAfterEffect = false;
1357 :
1358 0 : if(mpSet->getPropertyState( nHandleHasAfterEffect ) != STLPropertyState_AMBIGUOUS)
1359 0 : mpSet->getPropertyValue( nHandleHasAfterEffect ) >>= bOldAfterEffect;
1360 : else
1361 0 : bOldAfterEffect = !bAfterEffect;
1362 :
1363 0 : if( bOldAfterEffect != bAfterEffect )
1364 0 : pSet->setPropertyValue( nHandleHasAfterEffect, makeAny( bAfterEffect ) );
1365 :
1366 0 : Any aDimColor;
1367 0 : if( nPos == 1 )
1368 : {
1369 0 : Color aSelectedColor;
1370 0 : if ( mpCLBDimColor->GetSelectEntryPos() != LISTBOX_ENTRY_NOTFOUND )
1371 0 : aSelectedColor = mpCLBDimColor->GetSelectEntryColor();
1372 :
1373 0 : aDimColor = makeAny( makeAny( (sal_Int32)aSelectedColor.GetRGBColor() ) );
1374 : }
1375 :
1376 0 : if( (mpSet->getPropertyState( nHandleDimColor ) == STLPropertyState_AMBIGUOUS) ||
1377 0 : (mpSet->getPropertyValue( nHandleDimColor ) != aDimColor) )
1378 0 : pSet->setPropertyValue( nHandleDimColor, makeAny( aDimColor ) );
1379 :
1380 0 : bool bAfterEffectOnNextEffect = nPos != 2 ? sal_True : sal_False;
1381 0 : bool bOldAfterEffectOnNextEffect = !bAfterEffectOnNextEffect;
1382 :
1383 0 : if( mpSet->getPropertyState( nHandleAfterEffectOnNextEffect ) != STLPropertyState_AMBIGUOUS)
1384 0 : mpSet->getPropertyValue( nHandleAfterEffectOnNextEffect ) >>= bOldAfterEffectOnNextEffect;
1385 :
1386 0 : if( bAfterEffectOnNextEffect != bOldAfterEffectOnNextEffect )
1387 0 : pSet->setPropertyValue( nHandleAfterEffectOnNextEffect, makeAny( bAfterEffectOnNextEffect ) );
1388 : }
1389 :
1390 0 : nPos = mpLBTextAnim->GetSelectEntryPos();
1391 0 : if( nPos != LISTBOX_ENTRY_NOTFOUND )
1392 : {
1393 : sal_Int16 nIterateType;
1394 :
1395 0 : switch( nPos )
1396 : {
1397 0 : case 1: nIterateType = TextAnimationType::BY_WORD; break;
1398 0 : case 2: nIterateType = TextAnimationType::BY_LETTER; break;
1399 : default:
1400 0 : nIterateType = TextAnimationType::BY_PARAGRAPH;
1401 : }
1402 :
1403 0 : sal_Int16 nOldIterateType = nIterateType-1;
1404 :
1405 0 : if(mpSet->getPropertyState( nHandleIterateType ) != STLPropertyState_AMBIGUOUS)
1406 0 : mpSet->getPropertyValue( nHandleIterateType ) >>= nOldIterateType;
1407 :
1408 0 : if( nIterateType != nOldIterateType )
1409 0 : pSet->setPropertyValue( nHandleIterateType, makeAny( nIterateType ) );
1410 : }
1411 :
1412 : {
1413 0 : double fIterateInterval = static_cast< double >( mpMFTextDelay->GetValue() ) / 10;
1414 0 : double fOldIterateInterval = -1.0;
1415 :
1416 0 : if( mpSet->getPropertyState( nHandleIterateInterval ) != STLPropertyState_AMBIGUOUS )
1417 0 : mpSet->getPropertyValue( nHandleIterateInterval ) >>= fOldIterateInterval;
1418 :
1419 0 : if( fIterateInterval != fOldIterateInterval )
1420 0 : pSet->setPropertyValue( nHandleIterateInterval, makeAny( fIterateInterval ) );
1421 : }
1422 :
1423 0 : nPos = mpLBSound->GetSelectEntryPos();
1424 0 : if( nPos != LISTBOX_ENTRY_NOTFOUND )
1425 : {
1426 0 : Any aNewSoundURL, aOldSoundURL( makeAny( (sal_Int32) 0 ) );
1427 :
1428 0 : if( nPos == 0 )
1429 : {
1430 : // 0 means no sound, so leave any empty
1431 : }
1432 0 : else if( nPos == 1 )
1433 : {
1434 : // this means stop sound
1435 0 : aNewSoundURL = makeAny( true );
1436 : }
1437 : else
1438 : {
1439 0 : OUString aSoundURL( maSoundList[ nPos-2 ] );
1440 0 : aNewSoundURL = makeAny( aSoundURL );
1441 : }
1442 :
1443 0 : if( mpSet->getPropertyState( nHandleSoundURL ) != STLPropertyState_AMBIGUOUS )
1444 0 : mpSet->getPropertyValue( nHandleSoundURL ) >>= aOldSoundURL;
1445 :
1446 0 : if( aNewSoundURL != aOldSoundURL )
1447 0 : pSet->setPropertyValue( nHandleSoundURL, aNewSoundURL );
1448 : }
1449 0 : }
1450 :
1451 0 : void CustomAnimationEffectTabPage::fillSoundListBox()
1452 : {
1453 0 : GalleryExplorer::FillObjList( GALLERY_THEME_SOUNDS, maSoundList );
1454 0 : GalleryExplorer::FillObjList( GALLERY_THEME_USERSOUNDS, maSoundList );
1455 :
1456 0 : mpLBSound->InsertEntry( SD_RESSTR(STR_CUSTOMANIMATION_NO_SOUND) );
1457 0 : mpLBSound->InsertEntry( SD_RESSTR(STR_CUSTOMANIMATION_STOP_PREVIOUS_SOUND) );
1458 0 : for( size_t i = 0; i < maSoundList.size(); i++ )
1459 : {
1460 0 : OUString aString = maSoundList[ i ];
1461 0 : INetURLObject aURL( aString );
1462 0 : mpLBSound->InsertEntry( aURL.GetBase() );
1463 0 : }
1464 0 : mpLBSound->InsertEntry( SD_RESSTR(STR_CUSTOMANIMATION_BROWSE_SOUND) );
1465 0 : }
1466 :
1467 0 : void CustomAnimationEffectTabPage::clearSoundListBox()
1468 : {
1469 0 : maSoundList.clear();
1470 0 : mpLBSound->Clear();
1471 0 : }
1472 :
1473 0 : sal_Int32 CustomAnimationEffectTabPage::getSoundObject( const OUString& rStr )
1474 : {
1475 : size_t i;
1476 0 : const size_t nCount = maSoundList.size();
1477 0 : for( i = 0; i < nCount; i++ )
1478 : {
1479 0 : if( maSoundList[ i ].equalsIgnoreAsciiCase(rStr) )
1480 0 : return i+2;
1481 : }
1482 :
1483 0 : return -1;
1484 : }
1485 :
1486 0 : void CustomAnimationEffectTabPage::openSoundFileDialog()
1487 : {
1488 0 : SdOpenSoundFileDialog aFileDialog;
1489 :
1490 0 : OUString aFile( SvtPathOptions().GetGraphicPath() );
1491 0 : aFileDialog.SetPath( aFile );
1492 :
1493 0 : bool bValidSoundFile = false;
1494 0 : bool bQuitLoop = false;
1495 0 : long nPos = 0;
1496 :
1497 0 : while( !bQuitLoop && (aFileDialog.Execute() == ERRCODE_NONE) )
1498 : {
1499 0 : aFile = aFileDialog.GetPath();
1500 0 : nPos = getSoundObject( aFile );
1501 :
1502 0 : if( nPos < 0 ) // not in Soundliste
1503 : {
1504 : // try to insert in Gallery
1505 0 : if( GalleryExplorer::InsertURL( GALLERY_THEME_USERSOUNDS, aFile ) )
1506 : {
1507 0 : clearSoundListBox();
1508 0 : fillSoundListBox();
1509 :
1510 0 : nPos = getSoundObject( aFile );
1511 : DBG_ASSERT( nPos >= 0, "sd::CustomAnimationEffectTabPage::openSoundFileDialog(), Recently inserted sound not in list!" );
1512 :
1513 0 : bValidSoundFile=true;
1514 0 : bQuitLoop=true;
1515 : }
1516 : else
1517 : {
1518 0 : OUString aStrWarning(SD_RESSTR(STR_WARNING_NOSOUNDFILE));
1519 0 : aStrWarning = aStrWarning.replaceFirst("%", aFile);
1520 0 : WarningBox aWarningBox( NULL, WB_3DLOOK | WB_RETRY_CANCEL, aStrWarning );
1521 0 : aWarningBox.SetModalInputMode (true);
1522 0 : bQuitLoop = aWarningBox.Execute()==RET_RETRY ? sal_False : sal_True;
1523 :
1524 0 : bValidSoundFile=false;
1525 : }
1526 : }
1527 : else
1528 : {
1529 0 : bValidSoundFile=true;
1530 0 : bQuitLoop=true;
1531 : }
1532 : }
1533 :
1534 0 : if( !bValidSoundFile )
1535 0 : nPos = 0;
1536 :
1537 0 : mpLBSound->SelectEntryPos( nPos );
1538 0 : }
1539 :
1540 0 : void CustomAnimationEffectTabPage::onSoundPreview()
1541 : {
1542 0 : const sal_Int32 nPos = mpLBSound->GetSelectEntryPos();
1543 :
1544 0 : if( nPos >= 2 ) try
1545 : {
1546 0 : const OUString aSoundURL( maSoundList[ nPos-2 ] );
1547 0 : mxPlayer.set( avmedia::MediaWindow::createPlayer( aSoundURL, "" ), uno::UNO_QUERY_THROW );
1548 0 : mxPlayer->start();
1549 : }
1550 0 : catch( uno::Exception& )
1551 : {
1552 : OSL_FAIL("CustomAnimationEffectTabPage::onSoundPreview(), exception caught!" );
1553 : }
1554 0 : }
1555 :
1556 : class CustomAnimationDurationTabPage : public TabPage
1557 : {
1558 : public:
1559 : CustomAnimationDurationTabPage( vcl::Window* pParent, const STLPropertySet* pSet );
1560 : virtual ~CustomAnimationDurationTabPage();
1561 :
1562 : void update( STLPropertySet* pSet );
1563 :
1564 : DECL_LINK( implControlHdl, Control* );
1565 :
1566 : private:
1567 : const STLPropertySet* mpSet;
1568 :
1569 : FixedText* mpFTStart;
1570 : ListBox* mpLBStart;
1571 : FixedText* mpFTStartDelay;
1572 : MetricField* mpMFStartDelay;
1573 : FixedText* mpFTDuration;
1574 : ListBox* mpCBDuration;
1575 : FixedText* mpFTRepeat;
1576 : ListBox* mpCBRepeat;
1577 : CheckBox* mpCBXRewind;
1578 : RadioButton* mpRBClickSequence;
1579 : RadioButton* mpRBInteractive;
1580 : ListBox* mpLBTrigger;
1581 : };
1582 :
1583 0 : CustomAnimationDurationTabPage::CustomAnimationDurationTabPage(vcl::Window* pParent, const STLPropertySet* pSet)
1584 0 : : TabPage( pParent, "TimingTab", "modules/simpress/ui/customanimationtimingtab.ui" ), mpSet( pSet )
1585 : {
1586 0 : get(mpFTStart,"start_label" );
1587 0 : get(mpLBStart, "start_list" );
1588 0 : get(mpFTStartDelay, "delay_label" );
1589 0 : get(mpMFStartDelay, "delay_value" );
1590 0 : get(mpFTDuration, "duration_label" );
1591 0 : get(mpCBDuration, "duration_list" );
1592 0 : get(mpFTRepeat, "repeat_label" );
1593 0 : get(mpCBRepeat, "repeat_list" );
1594 0 : get(mpCBXRewind, "rewind" );
1595 0 : get(mpRBClickSequence, "rb_click_sequence" );
1596 0 : get(mpRBInteractive, "rb_interactive" );
1597 0 : get(mpLBTrigger, "trigger_list");
1598 :
1599 0 : fillRepeatComboBox( mpCBRepeat );
1600 0 : fillDurationComboBox( mpCBDuration );
1601 :
1602 0 : mpRBClickSequence->SetClickHdl( LINK( this, CustomAnimationDurationTabPage, implControlHdl ) );
1603 0 : mpLBTrigger->SetSelectHdl( LINK( this, CustomAnimationDurationTabPage, implControlHdl ) );
1604 :
1605 0 : if( pSet->getPropertyState( nHandleStart ) != STLPropertyState_AMBIGUOUS )
1606 : {
1607 0 : sal_Int16 nStart = 0;
1608 0 : pSet->getPropertyValue( nHandleStart ) >>= nStart;
1609 0 : sal_Int32 nPos = 0;
1610 0 : switch( nStart )
1611 : {
1612 0 : case EffectNodeType::WITH_PREVIOUS: nPos = 1; break;
1613 0 : case EffectNodeType::AFTER_PREVIOUS: nPos = 2; break;
1614 : }
1615 0 : mpLBStart->SelectEntryPos( nPos );
1616 : }
1617 :
1618 0 : if( pSet->getPropertyState( nHandleBegin ) != STLPropertyState_AMBIGUOUS )
1619 : {
1620 0 : double fBegin = 0.0;
1621 0 : pSet->getPropertyValue( nHandleBegin ) >>= fBegin;
1622 0 : mpMFStartDelay->SetValue( (long)(fBegin*10) );
1623 : }
1624 :
1625 0 : if( pSet->getPropertyState( nHandleDuration ) != STLPropertyState_AMBIGUOUS )
1626 : {
1627 0 : double fDuration = 0.0;
1628 0 : pSet->getPropertyValue( nHandleDuration ) >>= fDuration;
1629 :
1630 0 : if( fDuration == 0.001 )
1631 : {
1632 0 : mpFTDuration->Disable();
1633 0 : mpCBDuration->Disable();
1634 0 : mpFTRepeat->Disable();
1635 0 : mpCBRepeat->Disable();
1636 0 : mpCBXRewind->Disable();
1637 : }
1638 : else
1639 : {
1640 0 : sal_Int32 nPos = LISTBOX_ENTRY_NOTFOUND;
1641 :
1642 0 : if( fDuration == 5.0 )
1643 0 : nPos = 0;
1644 0 : else if( fDuration == 3.0 )
1645 0 : nPos = 1;
1646 0 : else if( fDuration == 2.0 )
1647 0 : nPos = 2;
1648 0 : else if( fDuration == 1.0 )
1649 0 : nPos = 3;
1650 0 : else if( fDuration == 0.5 )
1651 0 : nPos = 4;
1652 :
1653 0 : if( nPos != LISTBOX_ENTRY_NOTFOUND )
1654 0 : mpCBDuration->SelectEntryPos( nPos );
1655 : else
1656 0 : mpCBDuration->SetText(OUString::number(fDuration));
1657 : }
1658 : }
1659 :
1660 0 : if( pSet->getPropertyState( nHandleRepeat ) != STLPropertyState_AMBIGUOUS )
1661 : {
1662 0 : Any aRepeatCount( pSet->getPropertyValue( nHandleRepeat ) );
1663 0 : if( (aRepeatCount.getValueType() == ::cppu::UnoType<double>::get()) || !aRepeatCount.hasValue() )
1664 : {
1665 0 : double fRepeat = 0.0;
1666 0 : if( aRepeatCount.hasValue() )
1667 0 : aRepeatCount >>= fRepeat;
1668 :
1669 0 : sal_Int32 nPos = LISTBOX_ENTRY_NOTFOUND;
1670 :
1671 0 : if( fRepeat == 0 )
1672 0 : nPos = 0;
1673 0 : else if( fRepeat == 2.0 )
1674 0 : nPos = 1;
1675 0 : else if( fRepeat == 3.0 )
1676 0 : nPos = 2;
1677 0 : else if( fRepeat == 4.0 )
1678 0 : nPos = 3;
1679 0 : else if( fRepeat == 5.0 )
1680 0 : nPos = 4;
1681 0 : else if( fRepeat == 10.0 )
1682 0 : nPos = 5;
1683 :
1684 0 : if( nPos != LISTBOX_ENTRY_NOTFOUND )
1685 0 : mpCBRepeat->SelectEntryPos( nPos );
1686 : else
1687 0 : mpCBRepeat->SetText(OUString::number(fRepeat));
1688 : }
1689 0 : else if( aRepeatCount.getValueType() == ::cppu::UnoType<Timing>::get() )
1690 : {
1691 0 : Any aEnd;
1692 0 : if( pSet->getPropertyState( nHandleEnd ) != STLPropertyState_AMBIGUOUS )
1693 0 : aEnd = pSet->getPropertyValue( nHandleEnd );
1694 :
1695 0 : mpCBRepeat->SelectEntryPos( aEnd.hasValue() ? 6 : 7 );
1696 0 : }
1697 : }
1698 :
1699 0 : if( pSet->getPropertyState( nHandleRewind ) != STLPropertyState_AMBIGUOUS )
1700 : {
1701 0 : sal_Int16 nFill = 0;
1702 0 : if( pSet->getPropertyValue( nHandleRewind ) >>= nFill )
1703 : {
1704 0 : mpCBXRewind->Check( (nFill == AnimationFill::REMOVE) ? sal_True : sal_False );
1705 : }
1706 : else
1707 : {
1708 0 : mpCBXRewind->SetState( TRISTATE_INDET );
1709 : }
1710 : }
1711 :
1712 0 : Reference< XShape > xTrigger;
1713 :
1714 0 : if( pSet->getPropertyState( nHandleTrigger ) != STLPropertyState_AMBIGUOUS )
1715 : {
1716 0 : pSet->getPropertyValue( nHandleTrigger ) >>= xTrigger;
1717 :
1718 0 : mpRBInteractive->Check( xTrigger.is() );
1719 0 : mpRBClickSequence->Check( !xTrigger.is() );
1720 : }
1721 :
1722 0 : Reference< XDrawPage > xCurrentPage;
1723 0 : pSet->getPropertyValue( nHandleCurrentPage ) >>= xCurrentPage;
1724 0 : if( xCurrentPage.is() )
1725 : {
1726 0 : const OUString aStrIsEmptyPresObj( "IsEmptyPresentationObject" );
1727 :
1728 0 : sal_Int32 nShape, nCount = xCurrentPage->getCount();
1729 0 : for( nShape = 0; nShape < nCount; nShape++ )
1730 : {
1731 0 : Reference< XShape > xShape( xCurrentPage->getByIndex( nShape ), UNO_QUERY );
1732 :
1733 0 : if( !xShape.is() )
1734 0 : continue;
1735 :
1736 0 : Reference< XPropertySet > xSet( xShape, UNO_QUERY );
1737 0 : if( xSet.is() && xSet->getPropertySetInfo()->hasPropertyByName( aStrIsEmptyPresObj ) )
1738 : {
1739 0 : bool bIsEmpty = false;
1740 0 : xSet->getPropertyValue( aStrIsEmptyPresObj ) >>= bIsEmpty;
1741 0 : if( bIsEmpty )
1742 0 : continue;
1743 : }
1744 :
1745 0 : OUString aDescription( getShapeDescription( xShape, true ) );
1746 0 : sal_Int32 nPos = mpLBTrigger->InsertEntry( aDescription );
1747 :
1748 0 : mpLBTrigger->SetEntryData( nPos, (void*)(sal_IntPtr)nShape );
1749 0 : if( xShape == xTrigger )
1750 0 : mpLBTrigger->SelectEntryPos( nPos );
1751 0 : }
1752 0 : }
1753 0 : }
1754 :
1755 0 : CustomAnimationDurationTabPage::~CustomAnimationDurationTabPage()
1756 : {
1757 0 : }
1758 :
1759 0 : IMPL_LINK( CustomAnimationDurationTabPage, implControlHdl, Control*, pControl )
1760 : {
1761 0 : if( pControl == mpLBTrigger )
1762 : {
1763 0 : mpRBClickSequence->Check( false );
1764 0 : mpRBInteractive->Check( true );
1765 : }
1766 :
1767 0 : return 0;
1768 : }
1769 :
1770 0 : void CustomAnimationDurationTabPage::update( STLPropertySet* pSet )
1771 : {
1772 0 : sal_Int32 nPos = mpLBStart->GetSelectEntryPos();
1773 0 : if( nPos != LISTBOX_ENTRY_NOTFOUND )
1774 : {
1775 : sal_Int16 nStart;
1776 0 : sal_Int16 nOldStart = -1;
1777 :
1778 0 : switch( nPos )
1779 : {
1780 0 : case 1: nStart = EffectNodeType::WITH_PREVIOUS; break;
1781 0 : case 2: nStart = EffectNodeType::AFTER_PREVIOUS; break;
1782 : default:
1783 0 : nStart = EffectNodeType::ON_CLICK; break;
1784 : }
1785 :
1786 0 : if(mpSet->getPropertyState( nHandleStart ) != STLPropertyState_AMBIGUOUS)
1787 0 : mpSet->getPropertyValue( nHandleStart ) >>= nOldStart;
1788 :
1789 0 : if( nStart != nOldStart )
1790 0 : pSet->setPropertyValue( nHandleStart, makeAny( nStart ) );
1791 : }
1792 :
1793 : {
1794 0 : double fBegin = static_cast<double>( mpMFStartDelay->GetValue()) / 10.0;
1795 0 : double fOldBegin = -1.0;
1796 :
1797 0 : if( mpSet->getPropertyState( nHandleBegin ) != STLPropertyState_AMBIGUOUS )
1798 0 : mpSet->getPropertyValue( nHandleBegin ) >>= fOldBegin;
1799 :
1800 0 : if( fBegin != fOldBegin )
1801 0 : pSet->setPropertyValue( nHandleBegin, makeAny( fBegin ) );
1802 : }
1803 :
1804 0 : nPos = mpCBRepeat->GetSelectEntryPos();
1805 0 : if( (nPos != LISTBOX_ENTRY_NOTFOUND) || (!mpCBRepeat->GetText().isEmpty()) )
1806 : {
1807 0 : Any aRepeatCount;
1808 0 : Any aEnd;
1809 :
1810 0 : switch( nPos )
1811 : {
1812 : case 0:
1813 0 : break;
1814 : case 6:
1815 : {
1816 0 : Event aEvent;
1817 0 : aEvent.Trigger = EventTrigger::ON_NEXT;
1818 0 : aEvent.Repeat = 0;
1819 0 : aEnd <<= aEvent;
1820 : }
1821 : // ATTENTION: FALL THROUGH INTENDED!
1822 : case 7:
1823 0 : aRepeatCount <<= Timing_INDEFINITE;
1824 0 : break;
1825 : default:
1826 : {
1827 0 : OUString aText( mpCBRepeat->GetText() );
1828 0 : if( !aText.isEmpty() )
1829 0 : aRepeatCount <<= aText.toDouble();
1830 : }
1831 : }
1832 :
1833 0 : Any aOldRepeatCount( aRepeatCount );
1834 0 : if( mpSet->getPropertyState( nHandleRepeat ) != STLPropertyState_AMBIGUOUS )
1835 0 : aOldRepeatCount = mpSet->getPropertyValue( nHandleRepeat );
1836 :
1837 0 : if( aRepeatCount != aOldRepeatCount )
1838 0 : pSet->setPropertyValue( nHandleRepeat, aRepeatCount );
1839 :
1840 0 : Any aOldEnd( aEnd );
1841 0 : if( mpSet->getPropertyState( nHandleEnd ) != STLPropertyState_AMBIGUOUS )
1842 0 : aOldEnd = mpSet->getPropertyValue( nHandleEnd );
1843 :
1844 0 : if( aEnd != aOldEnd )
1845 0 : pSet->setPropertyValue( nHandleEnd, aEnd );
1846 : }
1847 :
1848 0 : double fDuration = -1.0;
1849 0 : nPos = mpCBDuration->GetSelectEntryPos();
1850 0 : if( nPos != LISTBOX_ENTRY_NOTFOUND )
1851 : {
1852 0 : fDuration = *static_cast< const double * >( mpCBDuration->GetEntryData(nPos) );
1853 : }
1854 : else
1855 : {
1856 0 : OUString aText( mpCBDuration->GetText() );
1857 0 : if( !aText.isEmpty() )
1858 : {
1859 0 : fDuration = aText.toDouble();
1860 0 : }
1861 : }
1862 :
1863 0 : if( fDuration != -1.0 )
1864 : {
1865 0 : double fOldDuration = -1;
1866 :
1867 0 : if( mpSet->getPropertyState( nHandleDuration ) != STLPropertyState_AMBIGUOUS )
1868 0 : mpSet->getPropertyValue( nHandleDuration ) >>= fOldDuration;
1869 :
1870 0 : if( fDuration != fOldDuration )
1871 0 : pSet->setPropertyValue( nHandleDuration, makeAny( fDuration ) );
1872 : }
1873 :
1874 0 : if( mpCBXRewind->GetState() != TRISTATE_INDET )
1875 : {
1876 0 : sal_Int16 nFill = mpCBXRewind->IsChecked() ? AnimationFill::REMOVE : AnimationFill::HOLD;
1877 :
1878 0 : bool bSet = true;
1879 :
1880 0 : if( mpSet->getPropertyState( nHandleRewind ) != STLPropertyState_AMBIGUOUS )
1881 : {
1882 0 : sal_Int16 nOldFill = 0;
1883 0 : mpSet->getPropertyValue( nHandleRewind ) >>= nOldFill;
1884 0 : bSet = nFill != nOldFill;
1885 : }
1886 :
1887 0 : if( bSet )
1888 0 : pSet->setPropertyValue( nHandleRewind, makeAny( nFill ) );
1889 : }
1890 :
1891 0 : Reference< XShape > xTrigger;
1892 :
1893 0 : if( mpRBInteractive->IsChecked() )
1894 : {
1895 0 : nPos = mpLBTrigger->GetSelectEntryPos();
1896 0 : if( nPos != LISTBOX_ENTRY_NOTFOUND )
1897 : {
1898 0 : sal_Int32 nShape = (sal_Int32)(sal_IntPtr)mpLBTrigger->GetEntryData( nPos );
1899 :
1900 0 : Reference< XDrawPage > xCurrentPage;
1901 0 : mpSet->getPropertyValue( nHandleCurrentPage ) >>= xCurrentPage;
1902 :
1903 0 : if( xCurrentPage.is() && (nShape >= 0) && (nShape < xCurrentPage->getCount()) )
1904 0 : xCurrentPage->getByIndex( nShape ) >>= xTrigger;
1905 : }
1906 : }
1907 :
1908 0 : if( xTrigger.is() || mpRBClickSequence->IsChecked() )
1909 : {
1910 0 : Any aNewValue( makeAny( xTrigger ) );
1911 0 : Any aOldValue;
1912 :
1913 0 : if( mpSet->getPropertyState( nHandleTrigger ) != STLPropertyState_AMBIGUOUS )
1914 0 : aOldValue = mpSet->getPropertyValue( nHandleTrigger );
1915 :
1916 0 : if( aNewValue != aOldValue )
1917 0 : pSet->setPropertyValue( nHandleTrigger, aNewValue );
1918 0 : }
1919 0 : }
1920 :
1921 0 : class CustomAnimationTextAnimTabPage : public TabPage
1922 : {
1923 : public:
1924 : CustomAnimationTextAnimTabPage( vcl::Window* pParent, const STLPropertySet* pSet );
1925 :
1926 : void update( STLPropertySet* pSet );
1927 :
1928 : void updateControlStates();
1929 : DECL_LINK(implSelectHdl, void *);
1930 :
1931 : private:
1932 : FixedText* maFTGroupText;
1933 : ListBox* maLBGroupText;
1934 : CheckBox* maCBXGroupAuto;
1935 : MetricField* maMFGroupAuto;
1936 : CheckBox* maCBXAnimateForm;
1937 : CheckBox* maCBXReverse;
1938 :
1939 : const STLPropertySet* mpSet;
1940 :
1941 : bool mbHasVisibleShapes;
1942 : };
1943 :
1944 0 : CustomAnimationTextAnimTabPage::CustomAnimationTextAnimTabPage(vcl::Window* pParent, const STLPropertySet* pSet)
1945 : : TabPage( pParent, "TextAnimationTab", "modules/simpress/ui/customanimationtexttab.ui" ),
1946 : mpSet( pSet ),
1947 0 : mbHasVisibleShapes(true)
1948 : {
1949 0 : get( maFTGroupText, "group_text_label" );
1950 0 : get( maLBGroupText, "group_text_list" );
1951 0 : get( maCBXGroupAuto, "auto_after" );
1952 0 : get( maMFGroupAuto, "auto_after_value" );
1953 0 : get( maCBXAnimateForm, "animate_shape" );
1954 0 : get( maCBXReverse, "reverse_order" );
1955 :
1956 0 : maLBGroupText->SetSelectHdl( LINK( this, CustomAnimationTextAnimTabPage, implSelectHdl ) );
1957 :
1958 0 : if( pSet->getPropertyState( nHandleTextGrouping ) != STLPropertyState_AMBIGUOUS )
1959 : {
1960 0 : sal_Int32 nTextGrouping = 0;
1961 0 : if( pSet->getPropertyValue( nHandleTextGrouping ) >>= nTextGrouping )
1962 0 : maLBGroupText->SelectEntryPos( nTextGrouping + 1 );
1963 : }
1964 :
1965 0 : if( pSet->getPropertyState( nHandleHasVisibleShape ) != STLPropertyState_AMBIGUOUS )
1966 0 : pSet->getPropertyValue( nHandleHasVisibleShape ) >>= mbHasVisibleShapes;
1967 :
1968 0 : if( pSet->getPropertyState( nHandleTextGroupingAuto ) != STLPropertyState_AMBIGUOUS )
1969 : {
1970 0 : double fTextGroupingAuto = 0.0;
1971 0 : if( pSet->getPropertyValue( nHandleTextGroupingAuto ) >>= fTextGroupingAuto )
1972 : {
1973 0 : maCBXGroupAuto->Check( fTextGroupingAuto >= 0.0 );
1974 0 : if( fTextGroupingAuto >= 0.0 )
1975 0 : maMFGroupAuto->SetValue( (long)(fTextGroupingAuto*10) );
1976 : }
1977 : }
1978 : else
1979 : {
1980 0 : maCBXGroupAuto->SetState( TRISTATE_INDET );
1981 : }
1982 :
1983 0 : maCBXAnimateForm->SetState( TRISTATE_INDET );
1984 0 : if( pSet->getPropertyState( nHandleAnimateForm ) != STLPropertyState_AMBIGUOUS )
1985 : {
1986 0 : bool bAnimateForm = false;
1987 0 : if( pSet->getPropertyValue( nHandleAnimateForm ) >>= bAnimateForm )
1988 : {
1989 0 : maCBXAnimateForm->Check( bAnimateForm );
1990 : }
1991 : }
1992 : else
1993 : {
1994 0 : maCBXAnimateForm->Enable( false );
1995 : }
1996 :
1997 0 : maCBXReverse->SetState( TRISTATE_INDET );
1998 0 : if( pSet->getPropertyState( nHandleTextReverse ) != STLPropertyState_AMBIGUOUS )
1999 : {
2000 0 : bool bTextReverse = false;
2001 0 : if( pSet->getPropertyValue( nHandleTextReverse ) >>= bTextReverse )
2002 : {
2003 0 : maCBXReverse->Check( bTextReverse );
2004 : }
2005 : }
2006 :
2007 0 : if( pSet->getPropertyState( nHandleMaxParaDepth ) == STLPropertyState_DIRECT )
2008 : {
2009 0 : sal_Int32 nMaxParaDepth = 0;
2010 0 : pSet->getPropertyValue( nHandleMaxParaDepth ) >>= nMaxParaDepth;
2011 0 : nMaxParaDepth += 1;
2012 :
2013 0 : sal_Int32 nPos = 6;
2014 0 : while( (nPos > 2) && (nPos > nMaxParaDepth) )
2015 : {
2016 0 : maLBGroupText->RemoveEntry( nPos );
2017 0 : nPos--;
2018 : }
2019 : }
2020 :
2021 0 : updateControlStates();
2022 0 : }
2023 :
2024 0 : void CustomAnimationTextAnimTabPage::update( STLPropertySet* pSet )
2025 : {
2026 0 : sal_Int32 nPos = maLBGroupText->GetSelectEntryPos();
2027 0 : if( nPos != LISTBOX_ENTRY_NOTFOUND )
2028 : {
2029 0 : sal_Int32 nTextGrouping = nPos - 1;
2030 0 : sal_Int32 nOldGrouping = -2;
2031 :
2032 0 : if(mpSet->getPropertyState( nHandleTextGrouping ) != STLPropertyState_AMBIGUOUS)
2033 0 : mpSet->getPropertyValue( nHandleTextGrouping ) >>= nOldGrouping;
2034 :
2035 0 : if( nTextGrouping != nOldGrouping )
2036 0 : pSet->setPropertyValue( nHandleTextGrouping, makeAny( nTextGrouping ) );
2037 : }
2038 :
2039 0 : if( nPos > 0 )
2040 : {
2041 0 : bool bTextReverse = maCBXReverse->IsChecked();
2042 0 : bool bOldTextReverse = !bTextReverse;
2043 :
2044 0 : if(mpSet->getPropertyState( nHandleTextReverse ) != STLPropertyState_AMBIGUOUS)
2045 0 : mpSet->getPropertyValue( nHandleTextReverse ) >>= bOldTextReverse;
2046 :
2047 0 : if( bTextReverse != bOldTextReverse )
2048 0 : pSet->setPropertyValue( nHandleTextReverse, makeAny( bTextReverse ) );
2049 :
2050 0 : if( nPos > 1 )
2051 : {
2052 0 : double fTextGroupingAuto = maCBXGroupAuto->IsChecked() ? maMFGroupAuto->GetValue() / 10.0 : -1.0;
2053 0 : double fOldTextGroupingAuto = -2.0;
2054 :
2055 0 : if(mpSet->getPropertyState( nHandleTextGroupingAuto ) != STLPropertyState_AMBIGUOUS)
2056 0 : mpSet->getPropertyValue( nHandleTextGroupingAuto ) >>= fOldTextGroupingAuto;
2057 :
2058 0 : if( fTextGroupingAuto != fOldTextGroupingAuto )
2059 0 : pSet->setPropertyValue( nHandleTextGroupingAuto, makeAny( fTextGroupingAuto ) );
2060 : }
2061 : }
2062 : //#i120049# impress crashes when modifying the "Random effects" animation
2063 : //effect's trigger condition to "Start effect on click of".
2064 : //If this control is disabled, we should ignore its value
2065 0 : if (maCBXAnimateForm->IsEnabled())
2066 : {
2067 0 : bool bAnimateForm = maCBXAnimateForm->IsChecked();
2068 0 : bool bOldAnimateForm = !bAnimateForm;
2069 :
2070 0 : if(mpSet->getPropertyState( nHandleAnimateForm ) != STLPropertyState_AMBIGUOUS)
2071 0 : mpSet->getPropertyValue( nHandleAnimateForm ) >>= bOldAnimateForm;
2072 :
2073 0 : if( bAnimateForm != bOldAnimateForm )
2074 0 : pSet->setPropertyValue( nHandleAnimateForm, makeAny( bAnimateForm ) );
2075 : }
2076 0 : }
2077 :
2078 0 : void CustomAnimationTextAnimTabPage::updateControlStates()
2079 : {
2080 0 : sal_Int32 nPos = maLBGroupText->GetSelectEntryPos();
2081 :
2082 0 : maCBXGroupAuto->Enable( nPos > 1 );
2083 0 : maMFGroupAuto->Enable( nPos > 1 );
2084 0 : maCBXReverse->Enable( nPos > 0 );
2085 :
2086 0 : if( !mbHasVisibleShapes && nPos > 0 )
2087 : {
2088 0 : maCBXAnimateForm->Check(false);
2089 0 : maCBXAnimateForm->Enable(false);
2090 : }
2091 : else
2092 : {
2093 0 : maCBXAnimateForm->Enable(true);
2094 : }
2095 0 : }
2096 :
2097 0 : IMPL_LINK_NOARG(CustomAnimationTextAnimTabPage, implSelectHdl)
2098 : {
2099 0 : updateControlStates();
2100 0 : return 0;
2101 : }
2102 :
2103 0 : CustomAnimationDialog::CustomAnimationDialog(vcl::Window* pParent, STLPropertySet* pSet, const OString& sPage)
2104 : : TabDialog( pParent, "CustomAnimationProperties", "modules/simpress/ui/customanimationproperties.ui")
2105 : , mpSet( pSet )
2106 0 : , mpResultSet( 0 )
2107 : {
2108 0 : get(mpTabControl, "tabs");
2109 :
2110 0 : sal_uInt16 mnEffectId = mpTabControl->GetPageId("effect");
2111 0 : sal_uInt16 mnTimingId = mpTabControl->GetPageId("timing");
2112 0 : sal_uInt16 mnTextAnimId = mpTabControl->GetPageId("textanim");
2113 :
2114 0 : mpEffectTabPage = new CustomAnimationEffectTabPage( mpTabControl, mpSet );
2115 0 : mpTabControl->SetTabPage( mnEffectId, mpEffectTabPage );
2116 0 : mpDurationTabPage = new CustomAnimationDurationTabPage( mpTabControl, mpSet );
2117 0 : mpTabControl->SetTabPage( mnTimingId, mpDurationTabPage );
2118 :
2119 0 : bool bHasText = false;
2120 0 : if( pSet->getPropertyState( nHandleHasText ) != STLPropertyState_AMBIGUOUS )
2121 0 : pSet->getPropertyValue( nHandleHasText ) >>= bHasText;
2122 :
2123 0 : if( bHasText )
2124 : {
2125 0 : mpTextAnimTabPage = new CustomAnimationTextAnimTabPage( mpTabControl, mpSet );
2126 0 : mpTabControl->SetTabPage( mnTextAnimId, mpTextAnimTabPage );
2127 : }
2128 : else
2129 : {
2130 0 : mpTextAnimTabPage = 0;
2131 0 : mpTabControl->RemovePage( mnTextAnimId );
2132 : }
2133 :
2134 0 : if (!sPage.isEmpty())
2135 0 : mpTabControl->SelectTabPage(mpTabControl->GetPageId(sPage));
2136 0 : }
2137 :
2138 0 : CustomAnimationDialog::~CustomAnimationDialog()
2139 : {
2140 0 : delete mpEffectTabPage;
2141 0 : delete mpDurationTabPage;
2142 0 : delete mpTextAnimTabPage;
2143 :
2144 0 : delete mpSet;
2145 0 : delete mpResultSet;
2146 0 : }
2147 :
2148 0 : STLPropertySet* CustomAnimationDialog::getResultSet()
2149 : {
2150 0 : if( mpResultSet )
2151 0 : delete mpResultSet;
2152 :
2153 0 : mpResultSet = createDefaultSet();
2154 :
2155 0 : mpEffectTabPage->update( mpResultSet );
2156 0 : mpDurationTabPage->update( mpResultSet );
2157 0 : if( mpTextAnimTabPage )
2158 0 : mpTextAnimTabPage->update( mpResultSet );
2159 :
2160 0 : return mpResultSet;
2161 : }
2162 :
2163 0 : STLPropertySet* CustomAnimationDialog::createDefaultSet()
2164 : {
2165 0 : Any aEmpty;
2166 :
2167 0 : STLPropertySet* pSet = new STLPropertySet();
2168 0 : pSet->setPropertyDefaultValue( nHandleMaxParaDepth, makeAny( (sal_Int32)-1 ) );
2169 :
2170 0 : pSet->setPropertyDefaultValue( nHandleHasAfterEffect, makeAny( false ) );
2171 0 : pSet->setPropertyDefaultValue( nHandleAfterEffectOnNextEffect, makeAny( false ) );
2172 0 : pSet->setPropertyDefaultValue( nHandleDimColor, aEmpty );
2173 0 : pSet->setPropertyDefaultValue( nHandleIterateType, makeAny( (sal_Int16)0 ) );
2174 0 : pSet->setPropertyDefaultValue( nHandleIterateInterval, makeAny( (double)0.0 ) );
2175 :
2176 0 : pSet->setPropertyDefaultValue( nHandleStart, makeAny( (sal_Int16)EffectNodeType::ON_CLICK ) );
2177 0 : pSet->setPropertyDefaultValue( nHandleBegin, makeAny( (double)0.0 ) );
2178 0 : pSet->setPropertyDefaultValue( nHandleDuration, makeAny( (double)2.0 ) );
2179 0 : pSet->setPropertyDefaultValue( nHandleRepeat, aEmpty );
2180 0 : pSet->setPropertyDefaultValue( nHandleRewind, makeAny( AnimationFill::HOLD ) );
2181 :
2182 0 : pSet->setPropertyDefaultValue( nHandleEnd, aEmpty );
2183 :
2184 0 : pSet->setPropertyDefaultValue( nHandlePresetId, aEmpty );
2185 0 : pSet->setPropertyDefaultValue( nHandleProperty1Type, makeAny( nPropertyTypeNone ) );
2186 0 : pSet->setPropertyDefaultValue( nHandleProperty1Value, aEmpty );
2187 0 : pSet->setPropertyDefaultValue( nHandleProperty2Type, makeAny( nPropertyTypeNone ) );
2188 0 : pSet->setPropertyDefaultValue( nHandleProperty2Value, aEmpty );
2189 0 : pSet->setPropertyDefaultValue( nHandleAccelerate, aEmpty );
2190 0 : pSet->setPropertyDefaultValue( nHandleDecelerate, aEmpty );
2191 0 : pSet->setPropertyDefaultValue( nHandleAutoReverse, aEmpty );
2192 0 : pSet->setPropertyDefaultValue( nHandleTrigger, aEmpty );
2193 :
2194 0 : pSet->setPropertyDefaultValue( nHandleHasText, makeAny( sal_False ) );
2195 0 : pSet->setPropertyDefaultValue( nHandleHasVisibleShape, makeAny( sal_False ) );
2196 0 : pSet->setPropertyDefaultValue( nHandleTextGrouping, makeAny( (sal_Int32)-1 ) );
2197 0 : pSet->setPropertyDefaultValue( nHandleAnimateForm, makeAny( sal_True ) );
2198 0 : pSet->setPropertyDefaultValue( nHandleTextGroupingAuto, makeAny( (double)-1.0 ) );
2199 0 : pSet->setPropertyDefaultValue( nHandleTextReverse, makeAny( sal_False ) );
2200 :
2201 0 : pSet->setPropertyDefaultValue( nHandleCurrentPage, aEmpty );
2202 :
2203 0 : pSet->setPropertyDefaultValue( nHandleSoundURL, aEmpty );
2204 0 : pSet->setPropertyDefaultValue( nHandleSoundVolumne, makeAny( (double)1.0) );
2205 0 : pSet->setPropertyDefaultValue( nHandleSoundEndAfterSlide, makeAny( (sal_Int32)0 ) );
2206 :
2207 0 : pSet->setPropertyDefaultValue( nHandleCommand, makeAny( (sal_Int16)0 ) );
2208 0 : return pSet;
2209 : }
2210 :
2211 0 : PropertyControl::PropertyControl( vcl::Window* pParent )
2212 0 : : ListBox( pParent, WB_TABSTOP | WB_BORDER | WB_DROPDOWN ), mpSubControl(0)
2213 : {
2214 0 : }
2215 :
2216 0 : extern "C" SAL_DLLPUBLIC_EXPORT vcl::Window* SAL_CALL makePropertyControl( vcl::Window *pParent )
2217 : {
2218 0 : return new PropertyControl( pParent );
2219 : }
2220 :
2221 0 : PropertyControl::~PropertyControl()
2222 : {
2223 0 : if( mpSubControl )
2224 0 : delete mpSubControl;
2225 0 : }
2226 :
2227 0 : void PropertyControl::setSubControl( PropertySubControl* pSubControl )
2228 : {
2229 0 : if( mpSubControl && mpSubControl != pSubControl )
2230 0 : delete mpSubControl;
2231 :
2232 0 : mpSubControl = pSubControl;
2233 :
2234 0 : Control* pControl = pSubControl ? pSubControl->getControl() : 0;
2235 :
2236 0 : if( pControl )
2237 : {
2238 0 : pControl->SetPosSizePixel( GetPosPixel(), GetSizePixel() );
2239 0 : pControl->SetZOrder( this, WINDOW_ZORDER_BEFOR );
2240 0 : pControl->Show();
2241 0 : Hide();
2242 : }
2243 : else
2244 : {
2245 0 : Show();
2246 : }
2247 0 : }
2248 :
2249 0 : void PropertyControl::Resize()
2250 : {
2251 0 : Control* pControl = mpSubControl ? mpSubControl->getControl() : 0;
2252 0 : if( pControl )
2253 0 : pControl->SetPosSizePixel( GetPosPixel(), GetSizePixel() );
2254 0 : ListBox::Resize();
2255 0 : }
2256 :
2257 0 : PropertySubControl::~PropertySubControl()
2258 : {
2259 0 : }
2260 :
2261 0 : PropertySubControl* PropertySubControl::create( sal_Int32 nType, vcl::Window* pParent, const Any& rValue, const OUString& rPresetId, const Link& rModifyHdl )
2262 : {
2263 0 : PropertySubControl* pSubControl = NULL;
2264 0 : switch( nType )
2265 : {
2266 : case nPropertyTypeDirection:
2267 : case nPropertyTypeSpokes:
2268 : case nPropertyTypeZoom:
2269 0 : pSubControl = new PresetPropertyBox( nType, pParent, rValue, rPresetId, rModifyHdl );
2270 0 : break;
2271 :
2272 : case nPropertyTypeColor:
2273 : case nPropertyTypeFillColor:
2274 : case nPropertyTypeFirstColor:
2275 : case nPropertyTypeCharColor:
2276 : case nPropertyTypeLineColor:
2277 0 : pSubControl = new ColorPropertyBox( nType, pParent, rValue, rModifyHdl );
2278 0 : break;
2279 :
2280 : case nPropertyTypeFont:
2281 0 : pSubControl = new FontPropertyBox( nType, pParent, rValue, rModifyHdl );
2282 0 : break;
2283 :
2284 : case nPropertyTypeCharHeight:
2285 0 : pSubControl = new CharHeightPropertyBox( nType, pParent, rValue, rModifyHdl );
2286 0 : break;
2287 :
2288 : case nPropertyTypeRotate:
2289 0 : pSubControl = new RotationPropertyBox( nType, pParent, rValue, rModifyHdl );
2290 0 : break;
2291 :
2292 : case nPropertyTypeTransparency:
2293 0 : pSubControl = new TransparencyPropertyBox( nType, pParent, rValue, rModifyHdl );
2294 0 : break;
2295 :
2296 : case nPropertyTypeScale:
2297 0 : pSubControl = new ScalePropertyBox( nType, pParent, rValue, rModifyHdl );
2298 0 : break;
2299 :
2300 : case nPropertyTypeCharDecoration:
2301 0 : pSubControl = new FontStylePropertyBox( nType, pParent, rValue, rModifyHdl );
2302 0 : break;
2303 : }
2304 :
2305 0 : return pSubControl;
2306 : }
2307 :
2308 114 : }
2309 :
2310 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|