1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef _SD_CUSTOMANIMATIONPANE_HXX
25 #define _SD_CUSTOMANIMATIONPANE_HXX
26 
27 #include <com/sun/star/drawing/XDrawView.hpp>
28 #include <com/sun/star/frame/XModel.hpp>
29 #include <vcl/dialog.hxx>
30 #include "CustomAnimationPreset.hxx"
31 #include "CustomAnimationList.hxx"
32 #include "CustomAnimationCreateDialog.hxx"
33 
34 #include "motionpathtag.hxx"
35 #include "misc/scopelock.hxx"
36 
37 #include <vector>
38 
39 class PushButton;
40 class FixedLine;
41 class FixedText;
42 class ListBox;
43 class ComboBox;
44 class CheckBox;
45 class SdDrawDocument;
46 
47 namespace com { namespace sun { namespace star { namespace animations {
48 	class XAnimationNode;
49 } } } }
50 
51 namespace sd { namespace tools {
52 class EventMultiplexerEvent;
53 } }
54 
55 namespace sd {
56 
57 class PropertyControl;
58 class STLPropertySet;
59 class ViewShellBase;
60 
61 typedef std::vector< rtl::Reference< MotionPathTag > > MotionPathTagVector;
62 
63 // --------------------------------------------------------------------
64 
65 class CustomAnimationPane : public Control, public ICustomAnimationListController
66 {
67 	friend class MotionPathTag;
68 public:
69 	CustomAnimationPane( ::Window* pParent, ViewShellBase& rBase, const Size& rMinSize );
70 	virtual ~CustomAnimationPane();
71 
72 	// callbacks
73 	void onSelectionChanged();
74 	void onChangeCurrentPage();
75 	void onChange( bool bCreate );
76 	void onRemove();
77 	void onChangeStart();
78 	void onChangeStart( sal_Int16 nNodeType );
79 	void onChangeProperty();
80 	void onChangeSpeed();
81 
82 	// methods
83 	void preview( const ::com::sun::star::uno::Reference< ::com::sun::star::animations::XAnimationNode >& xAnimationNode );
84 	void remove( CustomAnimationEffectPtr& pEffect );
85 
86 	// Control
87 	virtual void Resize();
88 	virtual void StateChanged( StateChangedType nStateChange );
89 	virtual void KeyInput( const KeyEvent& rKEvt );
90 
91 	// ICustomAnimationListController
92 	virtual void onSelect();
93 	virtual void onDoubleClick();
94 	virtual void onContextMenu( sal_uInt16 nSelectedPopupEntry );
95 
96     // Window
97     virtual void DataChanged (const DataChangedEvent& rEvent);
98 
99 	void addUndo();
100 
101 	void updatePathFromMotionPathTag( const rtl::Reference< MotionPathTag >& xTag );
102 
103 private:
104 	void addListener();
105 	void removeListener();
106 	void updateLayout();
107 	void updateControls();
108 	void updateMotionPathTags();
109 	void markShapesFromSelectedEffects();
110 
111 	void showOptions( sal_uInt16 nPage = 0 );
112 	void moveSelection( bool bUp );
113 	void onPreview( bool bForcePreview );
114 
115 	void createPath( PathKind eKind, std::vector< ::com::sun::star::uno::Any >& rTargets, double fDuration );
116 
117 	STLPropertySet* createSelectionSet();
118 	void changeSelection( STLPropertySet* pResultSet, STLPropertySet* pOldSet );
119 
120 	::com::sun::star::uno::Any getProperty1Value( sal_Int32 nType, CustomAnimationEffectPtr pEffect );
121 	bool setProperty1Value( sal_Int32 nType, CustomAnimationEffectPtr pEffect, const ::com::sun::star::uno::Any& rValue );
122     void UpdateLook (void);
123 
124 	DECL_LINK( implControlHdl, Control* );
125 	DECL_LINK( implPropertyHdl, Control* );
126     DECL_LINK(EventMultiplexerListener, tools::EventMultiplexerEvent*);
127     DECL_LINK(lateInitCallback, Timer*);
128 
129 private:
130 	ViewShellBase& mrBase;
131 
132 	const CustomAnimationPresets* mpCustomAnimationPresets;
133 
134 	FixedLine*	mpFLModify;
135 	PushButton*	mpPBAddEffect;
136 	PushButton* mpPBChangeEffect;
137 	PushButton*	mpPBRemoveEffect;
138 	FixedLine*	mpFLEffect;
139 	FixedText*	mpFTStart;
140 	ListBox*	mpLBStart;
141 	FixedText*	mpFTProperty;
142 	PropertyControl*	mpLBProperty;
143 	PushButton*	mpPBPropertyMore;
144 	FixedText*	mpFTSpeed;
145 	ComboBox*	mpCBSpeed;
146 	CustomAnimationList*	mpCustomAnimationList;
147 	FixedText*	mpFTChangeOrder;
148 	PushButton*	mpPBMoveUp;
149 	PushButton* mpPBMoveDown;
150 	FixedLine*	mpFLSeperator1;
151 	PushButton*	mpPBPlay;
152 	PushButton* mpPBSlideShow;
153 	FixedLine*	mpFLSeperator2;
154 	CheckBox*	mpCBAutoPreview;
155 
156 	String		maStrModify;
157 	String		maStrProperty;
158 
159 	sal_Int32	mnPropertyType;
160 
161 	Size		maMinSize;
162 
163 	EffectSequence maListSelection;
164 	::com::sun::star::uno::Any maViewSelection;
165 
166 	MainSequencePtr	mpMainSequence;
167 
168 	::com::sun::star::uno::Reference< ::com::sun::star::drawing::XDrawPage > mxCurrentPage;
169 	::com::sun::star::uno::Reference< ::com::sun::star::drawing::XDrawView > mxView;
170 	::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel > mxModel;
171 
172     /** The mpCustomAnimationPresets is initialized either on demand or
173         after a short time after the construction of a new object of this
174         class.  This timer is responsible for the later.
175     */
176     Timer maLateInitTimer;
177 
178     /** This method initializes the mpCustomAnimationPresets on demand and
179         returns a reference to the list.
180     */
181     const CustomAnimationPresets& getPresets (void);
182 
183 	MotionPathTagVector maMotionPathTags;
184 
185 	ScopeLock maSelectionLock;
186 };
187 
188 }
189 
190 #endif // _SD_CUSTOMANIMATIONPANE_HXX
191