xref: /AOO41X/main/sd/source/ui/animations/CustomAnimationPane.hxx (revision 03c97e340010506c11d4ffaab7f577e5f7050fe6)
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     void addUndo();
97 
98     void updatePathFromMotionPathTag( const rtl::Reference< MotionPathTag >& xTag );
99 
100 private:
101     void addListener();
102     void removeListener();
103     void updateLayout();
104     void updateControls();
105     void updateMotionPathTags();
106     void markShapesFromSelectedEffects();
107 
108     void showOptions( sal_uInt16 nPage = 0 );
109     void moveSelection( bool bUp );
110     void onPreview( bool bForcePreview );
111 
112     void createPath( PathKind eKind, std::vector< ::com::sun::star::uno::Any >& rTargets, double fDuration );
113 
114     STLPropertySet* createSelectionSet();
115     void changeSelection( STLPropertySet* pResultSet, STLPropertySet* pOldSet );
116 
117     ::com::sun::star::uno::Any getProperty1Value( sal_Int32 nType, CustomAnimationEffectPtr pEffect );
118     bool setProperty1Value( sal_Int32 nType, CustomAnimationEffectPtr pEffect, const ::com::sun::star::uno::Any& rValue );
119 
120     DECL_LINK( implControlHdl, Control* );
121     DECL_LINK( implPropertyHdl, Control* );
122     DECL_LINK(EventMultiplexerListener, tools::EventMultiplexerEvent*);
123     DECL_LINK(lateInitCallback, Timer*);
124 
125 private:
126     ViewShellBase& mrBase;
127 
128     const CustomAnimationPresets* mpCustomAnimationPresets;
129 
130     FixedLine*  mpFLModify;
131     PushButton* mpPBAddEffect;
132     PushButton* mpPBChangeEffect;
133     PushButton* mpPBRemoveEffect;
134     FixedLine*  mpFLEffect;
135     FixedText*  mpFTStart;
136     ListBox*    mpLBStart;
137     FixedText*  mpFTProperty;
138     PropertyControl*    mpLBProperty;
139     PushButton* mpPBPropertyMore;
140     FixedText*  mpFTSpeed;
141     ComboBox*   mpCBSpeed;
142     CustomAnimationList*    mpCustomAnimationList;
143     FixedText*  mpFTChangeOrder;
144     PushButton* mpPBMoveUp;
145     PushButton* mpPBMoveDown;
146     FixedLine*  mpFLSeperator1;
147     PushButton* mpPBPlay;
148     PushButton* mpPBSlideShow;
149     FixedLine*  mpFLSeperator2;
150     CheckBox*   mpCBAutoPreview;
151 
152     String      maStrModify;
153     String      maStrProperty;
154 
155     sal_Int32   mnPropertyType;
156 
157     Size        maMinSize;
158 
159     EffectSequence maListSelection;
160     ::com::sun::star::uno::Any maViewSelection;
161 
162     MainSequencePtr mpMainSequence;
163 
164     ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XDrawPage > mxCurrentPage;
165     ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XDrawView > mxView;
166     ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel > mxModel;
167 
168     /** The mpCustomAnimationPresets is initialized either on demand or
169         after a short time after the construction of a new object of this
170         class.  This timer is responsible for the later.
171     */
172     Timer maLateInitTimer;
173 
174     /** This method initializes the mpCustomAnimationPresets on demand and
175         returns a reference to the list.
176     */
177     const CustomAnimationPresets& getPresets (void);
178 
179     MotionPathTagVector maMotionPathTags;
180 
181     ScopeLock maSelectionLock;
182 };
183 
184 }
185 
186 #endif // _SD_CUSTOMANIMATIONPANE_HXX
187