2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
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
9 // http://floralicense.org/license/
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.
18 * @file FUi_DataBindingContextImpl.cpp
19 * @brief This is the implementation for the _DataBindingContextImpl class.
21 #include <FUiDataBindingContext.h>
22 #include "FUi_ControlImpl.h"
23 #include "FUi_ContainerImpl.h"
24 #include "FUi_DataBindingContextImpl.h"
25 #include "FUi_DataBindingContext.h"
27 using namespace Tizen::Base;
29 namespace Tizen { namespace Ui
31 _DataBindingContextImpl::_DataBindingContextImpl(const _ContainerImpl& controlImpl)
32 : __pContainerImpl(null)
34 __pContainerImpl = const_cast <_ContainerImpl*>(&controlImpl);
35 __controlHandle = __pContainerImpl->GetCore().GetHandle();
37 if(!ControlCoreExists(__controlHandle))
41 if(!__pContainerImpl->GetCore().GetDataBindingContext())
52 _DataBindingContextImpl::~_DataBindingContextImpl(void)
57 _DataBindingContextImpl::GetContextOwner(void) const
59 return __pContainerImpl;
62 _DataBindingContextImpl::GetDataBindingContextN(const _ContainerImpl& controlImpl)
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.");
67 SetLastResult(E_SUCCESS);
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)
78 SysTryReturn(NID_UI, ControlCoreExists(__controlHandle) && __pContainerImpl, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System Error.");
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.");
87 return pContext->Bind( pControlImpl->GetCore(), bindingId, controlName, propertyName,
88 dataSource, sourceType, flow, trigger, pListener, pValidator, pTransformer);
91 _DataBindingContextImpl::SetDataBindingEventListener(const String& bindingId, IDataBindingListener* pListener)
94 SysTryReturn(NID_UI, ControlCoreExists(__controlHandle), E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System Error.");
96 _DataBindingContext* pContext = __pContainerImpl->GetCore().GetDataBindingContext();
97 SysTryReturn(NID_UI, pContext, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System Error.");
99 return pContext->SetDataBindingEventListener(bindingId, pListener);
102 _DataBindingContextImpl::UnbindAll(void)
104 SysTryReturn(NID_UI, ControlCoreExists(__controlHandle), E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System Error.");
106 _DataBindingContext* pContext = __pContainerImpl->GetCore().GetDataBindingContext();
107 SysTryReturn(NID_UI, pContext, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System Error.");
109 return pContext->UnbindAll();
113 _DataBindingContextImpl::Unbind(const String& bindingId)
115 SysTryReturn(NID_UI, ControlCoreExists(__controlHandle), E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System Error.");
117 _DataBindingContext* pContext = __pContainerImpl->GetCore().GetDataBindingContext();
118 SysTryReturn(NID_UI, pContext, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System Error.");
120 return pContext->Unbind(bindingId);
124 _DataBindingContextImpl::UpdateAllBindings(DataBindingDestinationType destType)
126 SysTryReturn(NID_UI, ControlCoreExists(__controlHandle), E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System Error.");
128 _DataBindingContext* pContext = __pContainerImpl->GetCore().GetDataBindingContext();
129 SysTryReturn(NID_UI, pContext, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System Error.");
131 return pContext->UpdateAllBindings(destType);
135 _DataBindingContextImpl::UpdateBinding(const String& bindingId, DataBindingDestinationType destType)
137 SysTryReturn(NID_UI, ControlCoreExists(__controlHandle), E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System Error.");
139 _DataBindingContext* pContext = __pContainerImpl->GetCore().GetDataBindingContext();
140 SysTryReturn(NID_UI, pContext, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System Error.");
142 return pContext->UpdateBinding(bindingId, destType);
144 _DataBindingContextImpl*
145 _DataBindingContextImpl::GetDataBindingContextInstance(DataBindingContext* pDataBindingContext)
147 return pDataBindingContext ? pDataBindingContext->__pDataBindingContextImpl : null;
149 const _DataBindingContextImpl*
150 _DataBindingContextImpl::GetDataBindingContextInstance(const DataBindingContext* pDataBindingContext)
152 return pDataBindingContext ? pDataBindingContext->__pDataBindingContextImpl : null;
155 _DataBindingContextImpl::ControlCoreExists(_ControlHandle controlHandle)
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.");
162 pControlCore = pManager->GetObject(controlHandle);
163 SysTryReturn(NID_UI, pControlCore, false, E_SYSTEM, "[E_SYSTEM] System Error.");