Tizen 2.1 base
[framework/osp/uifw.git] / src / ui / animations / FUiAnim_VisualElementAnimationGroupImpl.cpp
1 //
2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
4 //
5 // Licensed under the Flora License, Version 1.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 //     http://floralicense.org/license/
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an AS IS BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 //
17
18 /**
19  * @file        FUiAnim_VisualElementAnimationGroupImpl.cpp
20  * @brief       This file contains implementation of _VisualElementAnimationGroupImpl class
21  *
22  * This file contains implementation _VisualElementAnimationGroupImpl class.
23  */
24
25 #include <FBaseSysLog.h>
26
27 #include <FUiAnimVisualElementAnimationGroup.h>
28 #include <FUiAnimIVisualElementAnimationTimingFunction.h>
29
30 #include "FUiAnim_VisualElementAnimationGroupImpl.h"
31
32 namespace Tizen { namespace Ui { namespace Animations
33 {
34
35
36 _VisualElementAnimationGroupImpl::_VisualElementAnimationGroupImpl(void)
37 {
38         result r = __animationList.Construct();
39
40         SysTryReturnVoidResult(NID_UI_ANIM, r == E_SUCCESS, r, "[%s] Failed to construct the animation list.", GetErrorMessage(r));
41 }
42
43 _VisualElementAnimationGroupImpl::_VisualElementAnimationGroupImpl(const _VisualElementAnimationGroupImpl& animationGroupImpl)
44 {
45         __animationList.Construct();
46
47         result r = CopyAnimationValue(animationGroupImpl);
48
49         SysTryReturnVoidResult(NID_UI_ANIM, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
50 }
51
52 _VisualElementAnimationGroupImpl::~_VisualElementAnimationGroupImpl(void)
53 {
54         __animationList.RemoveAll(true);
55 }
56
57 bool
58 _VisualElementAnimationGroupImpl::Equals(const Tizen::Base::Object& obj) const
59 {
60         if (this == &obj)
61         {
62                 return true;
63         }
64
65         if (_VisualElementAnimationImpl::Equals(obj) == false)
66         {
67                 return false;
68         }
69
70         const _VisualElementAnimationGroupImpl* pAnimationGroupImpl = dynamic_cast< const _VisualElementAnimationGroupImpl* >(&obj);
71
72         if (pAnimationGroupImpl == null || GetAnimationCount() != pAnimationGroupImpl->GetAnimationCount())
73         {
74                 return false;
75         }
76
77         for (int index = 0; index < GetAnimationCount(); index++)
78         {
79                 if ((__animationList.GetAt(index))->Equals(*(pAnimationGroupImpl->__animationList.GetAt(index))) == false)
80                 {
81                         return false;
82                 }
83         }
84
85         return true;
86 }
87
88 int
89 _VisualElementAnimationGroupImpl::GetHashCode(void) const
90 {
91         return (_VisualElementAnimationImpl::GetHashCode() + __animationList.GetHashCode());
92 }
93
94 result
95 _VisualElementAnimationGroupImpl::CopyAnimationValue(const _VisualElementAnimationGroupImpl& animationGroupImpl)
96 {
97         result r = E_SUCCESS;
98
99         r = _VisualElementAnimationImpl::CopyAnimationValue(animationGroupImpl);
100         SysTryReturnResult(NID_UI_ANIM, (r == E_SUCCESS), r, "Propagating.");
101
102         const VisualElementAnimation* pAnimation = null;
103         VisualElementAnimation* pCloned = null;
104
105         for (int index = 0; index < animationGroupImpl.GetAnimationCount(); index++)
106         {
107                 pAnimation = dynamic_cast< const VisualElementAnimation* >(animationGroupImpl.__animationList.GetAt(index));
108
109                 if (pAnimation != null)
110                 {
111                         pCloned = const_cast< VisualElementAnimation* >(pAnimation)->CloneN();
112
113                         if (pCloned == null)
114                         {
115                                 __animationList.RemoveAll(true);
116
117                                 SysLogException(NID_UI_ANIM, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
118                                 return E_OUT_OF_MEMORY;
119                         }
120
121                         __animationList.Add(*pCloned);
122                 }
123         }
124
125         return E_SUCCESS;
126 }
127
128 int
129 _VisualElementAnimationGroupImpl::GetAnimationCount(void) const
130 {
131         return __animationList.GetCount();
132 }
133
134 result
135 _VisualElementAnimationGroupImpl::AddAnimation(const VisualElementAnimation& animation)
136 {
137         VisualElementAnimation* pCloned = const_cast< VisualElementAnimation& >(animation).CloneN();
138         SysTryReturnResult(NID_UI_ANIM, pCloned != null, E_OUT_OF_MEMORY, "Memory allocation failed.");
139
140         result r = __animationList.Add(*pCloned);
141
142         if (r != E_SUCCESS)
143         {
144                 delete pCloned;
145         }
146
147         return r;
148 }
149
150 result
151 _VisualElementAnimationGroupImpl::RemoveAnimationAt(int index)
152 {
153         return __animationList.RemoveAt(index);
154 }
155
156 void
157 _VisualElementAnimationGroupImpl::RemoveAllAnimations(void)
158 {
159         __animationList.RemoveAll(true);
160 }
161
162 VisualElementAnimation*
163 _VisualElementAnimationGroupImpl::GetAnimationAtN(int index) const
164 {
165         const VisualElementAnimation* pAnimation = dynamic_cast< const VisualElementAnimation* >(__animationList.GetAt(index));
166
167         if (pAnimation)
168         {
169                 SetLastResult(E_SUCCESS);
170                 return const_cast< VisualElementAnimation* >(pAnimation)->CloneN();
171         }
172
173         SetLastResult(E_OBJ_NOT_FOUND);
174         return null;
175 }
176
177 VisualElementAnimation*
178 _VisualElementAnimationGroupImpl::GetAnimation(int index) const
179 {
180         return dynamic_cast< VisualElementAnimation* >(const_cast< Tizen::Base::Object* >(__animationList.GetAt(index)));
181 }
182
183 _VisualElementAnimationGroupImpl*
184 _VisualElementAnimationGroupImpl::GetInstance(VisualElementAnimationGroup& animation)
185 {
186         return dynamic_cast<_VisualElementAnimationGroupImpl*>(animation._pAnimationImpl);
187 }
188
189 const _VisualElementAnimationGroupImpl*
190 _VisualElementAnimationGroupImpl::GetInstance(const VisualElementAnimationGroup& animation)
191 {
192         return dynamic_cast<const _VisualElementAnimationGroupImpl*>(animation._pAnimationImpl);
193 }
194
195 }}}   // Tizen::Ui::Animations
196