Tizen 2.1 base
[framework/osp/uifw.git] / src / ui / FUi_DataBindingContextImpl.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  * @file        FUi_DataBindingContextImpl.cpp
19  * @brief       This is the implementation for the _DataBindingContextImpl class.
20  */
21 #include <FUiDataBindingContext.h>
22 #include "FUi_ControlImpl.h"
23 #include "FUi_ContainerImpl.h"
24 #include "FUi_DataBindingContextImpl.h"
25 #include "FUi_DataBindingContext.h"
26
27 using namespace Tizen::Base;
28
29 namespace Tizen { namespace Ui
30 {
31 _DataBindingContextImpl::_DataBindingContextImpl(const _ContainerImpl& controlImpl)
32         : __pContainerImpl(null)
33 {
34         __pContainerImpl = const_cast <_ContainerImpl*>(&controlImpl);
35         __controlHandle = __pContainerImpl->GetCore().GetHandle();
36         result r = E_SYSTEM;
37         if(!ControlCoreExists(__controlHandle))
38         {
39                 r = E_SYSTEM;
40         }
41         if(!__pContainerImpl->GetCore().GetDataBindingContext())
42         {
43                 r = E_SYSTEM;
44         }
45         else
46         {
47                 r = E_SUCCESS;
48         }
49         SetLastResult(r);
50 }
51
52 _DataBindingContextImpl::~_DataBindingContextImpl(void)
53 {
54 }
55
56 _ContainerImpl*
57 _DataBindingContextImpl::GetContextOwner(void) const
58 {
59         return __pContainerImpl;
60 }
61 DataBindingContext*
62 _DataBindingContextImpl::GetDataBindingContextN(const _ContainerImpl& controlImpl)
63 {
64         DataBindingContext* pContext = new (std::nothrow) DataBindingContext(controlImpl.GetPublic());
65         SysTryReturn(NID_UI, pContext, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation for _DataBinding is failed.");
66
67         SetLastResult(E_SUCCESS);
68         return pContext;
69 }
70 result
71 _DataBindingContextImpl::Bind(const String& bindingId, const String& controlName,
72                                                                         const String& propertyName
73                                                                    , Object& dataSource, DataBindingDataType sourceType, DataBindingFlow flow,
74                                                                         DataBindingTrigger trigger
75                                                                    , const IDataBindingListener* pListener, const IDataBindingDataValidator* pValidator,
76                                                                         const IDataBindingDataTransformer* pTransformer)
77 {
78         SysTryReturn(NID_UI, ControlCoreExists(__controlHandle) && __pContainerImpl, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System Error.");
79
80         _ControlImpl* pControlImpl = __pContainerImpl->SearchControlByName(controlName, true);
81         SysTryReturn(NID_UI, pControlImpl, E_OBJ_NOT_FOUND, E_OBJ_NOT_FOUND,
82                                 "[E_OBJ_NOT_FOUND] a control named as \"%s\" is not found.",
83                                 controlName.GetPointer());
84         _DataBindingContext* pContext = __pContainerImpl->GetCore().GetDataBindingContext();
85         SysTryReturn(NID_UI, pContext, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System Error.");
86
87         return pContext->Bind( pControlImpl->GetCore(), bindingId, controlName, propertyName,
88                                 dataSource, sourceType, flow, trigger, pListener, pValidator, pTransformer);
89 }
90 result
91 _DataBindingContextImpl::SetDataBindingEventListener(const String& bindingId, IDataBindingListener* pListener)
92 {
93
94         SysTryReturn(NID_UI, ControlCoreExists(__controlHandle), E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System Error.");
95
96         _DataBindingContext* pContext = __pContainerImpl->GetCore().GetDataBindingContext();
97         SysTryReturn(NID_UI, pContext, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System Error.");
98
99         return pContext->SetDataBindingEventListener(bindingId, pListener);
100 }
101 result
102 _DataBindingContextImpl::UnbindAll(void)
103 {
104         SysTryReturn(NID_UI, ControlCoreExists(__controlHandle), E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System Error.");
105
106         _DataBindingContext* pContext = __pContainerImpl->GetCore().GetDataBindingContext();
107         SysTryReturn(NID_UI, pContext, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System Error.");
108
109         return pContext->UnbindAll();
110 }
111
112 result
113 _DataBindingContextImpl::Unbind(const String& bindingId)
114 {
115         SysTryReturn(NID_UI, ControlCoreExists(__controlHandle), E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System Error.");
116
117         _DataBindingContext* pContext = __pContainerImpl->GetCore().GetDataBindingContext();
118         SysTryReturn(NID_UI, pContext, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System Error.");
119
120         return pContext->Unbind(bindingId);
121 }
122
123 result
124 _DataBindingContextImpl::UpdateAllBindings(DataBindingDestinationType destType)
125 {
126         SysTryReturn(NID_UI, ControlCoreExists(__controlHandle), E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System Error.");
127
128         _DataBindingContext* pContext = __pContainerImpl->GetCore().GetDataBindingContext();
129         SysTryReturn(NID_UI, pContext, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System Error.");
130
131         return pContext->UpdateAllBindings(destType);
132 }
133
134 result
135 _DataBindingContextImpl::UpdateBinding(const String& bindingId, DataBindingDestinationType destType)
136 {
137         SysTryReturn(NID_UI, ControlCoreExists(__controlHandle), E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System Error.");
138
139         _DataBindingContext* pContext = __pContainerImpl->GetCore().GetDataBindingContext();
140         SysTryReturn(NID_UI, pContext, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System Error.");
141
142         return pContext->UpdateBinding(bindingId, destType);
143 }
144 _DataBindingContextImpl*
145 _DataBindingContextImpl::GetDataBindingContextInstance(DataBindingContext* pDataBindingContext)
146 {
147         return pDataBindingContext ? pDataBindingContext->__pDataBindingContextImpl : null;
148 }
149 const _DataBindingContextImpl*
150 _DataBindingContextImpl::GetDataBindingContextInstance(const DataBindingContext* pDataBindingContext)
151 {
152         return pDataBindingContext ? pDataBindingContext->__pDataBindingContextImpl : null;
153 }
154 bool
155 _DataBindingContextImpl::ControlCoreExists(_ControlHandle controlHandle)
156 {
157         _Control* pControlCore = null; //review : coding idiom
158         _ControlManager* pManager = _ControlManager::GetInstance();
159         SysTryReturn(NID_UI, !(controlHandle.IsNull()), false, E_SYSTEM, "[E_SYSTEM] System Error.");
160         SysTryReturn(NID_UI, pManager, false, E_SYSTEM, "[E_SYSTEM] System Error.");
161
162         pControlCore = pManager->GetObject(controlHandle);
163         SysTryReturn(NID_UI,    pControlCore, false, E_SYSTEM, "[E_SYSTEM] System Error.");
164         return true;
165 }
166
167 } } //Tizen::Ui