2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
5 // Licensed under the Apache License, Version 2.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://www.apache.org/licenses/LICENSE-2.0/
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_DataBinding.cpp
19 * @brief This is the implementation for the _DataBinding class and default transformer.
23 #include <FBaseInteger.h>
24 #include <FBaseString.h>
25 #include <FGrpColor.h>
26 #include <FGrpDimension.h>
27 #include <FGrpRectangle.h>
28 #include <FUiIDataBindingDataTransformer.h>
29 #include <FUiIDataBindingDataValidator.h>
30 #include <FUiIDataBindingListener.h>
31 #include "FUi_Control.h"
32 #include "FUi_IPropertyChangeEventListener.h"
33 #include "FUi_PropertyBase.h"
34 #include "FUi_DataBinding.h"
36 using namespace Tizen::Base;
37 using namespace Tizen::Graphics;
41 using namespace Tizen::Ui;
43 class _DefaultTransformer
45 , public IDataBindingDataTransformer
48 virtual ~_DefaultTransformer(void);
50 virtual bool TransformSourceToTarget(const Tizen::Base::String& bindingId, DataBindingDataType sourceType, const Tizen::Base::Object& sourceData, DataBindingDataType targetType, Tizen::Base::Object& targetData);
51 virtual bool TransformTargetToSource(const Tizen::Base::String& bindingId, DataBindingDataType targetType, const Tizen::Base::Object& targetData, DataBindingDataType sourceType, Tizen::Base::Object& sourceData);
52 virtual bool IsSourceToTargetTransformable(const Tizen::Base::String& bindingId, DataBindingDataType sourceType, DataBindingDataType targetType);
53 virtual bool IsTargetToSourceTransformable(const Tizen::Base::String& bindingId, DataBindingDataType targetType, DataBindingDataType sourceType);
55 bool Transform(DataBindingDataType sourceType, const Tizen::Base::Object& sourceData, DataBindingDataType targetType, Tizen::Base::Object& destinationData);
56 bool IsTransformable(DataBindingDataType destinationType, DataBindingDataType sourceType);
59 _DefaultTransformer::~_DefaultTransformer(void)
63 _DefaultTransformer::TransformSourceToTarget(const Tizen::Base::String& bindingId, DataBindingDataType sourceType, const Tizen::Base::Object& sourceData, DataBindingDataType targetType, Tizen::Base::Object& targetData)
65 return Transform(sourceType, sourceData, targetType, targetData);
68 _DefaultTransformer::TransformTargetToSource(const Tizen::Base::String& bindingId, DataBindingDataType targetType, const Tizen::Base::Object& targetData, DataBindingDataType sourceType, Tizen::Base::Object& sourceData)
70 return Transform(targetType, targetData, sourceType, sourceData);
73 _DefaultTransformer::IsSourceToTargetTransformable(const Tizen::Base::String& bindingId, DataBindingDataType sourceType, DataBindingDataType targetType)
75 return IsTransformable(sourceType, targetType);
78 _DefaultTransformer::IsTargetToSourceTransformable(const Tizen::Base::String& bindingId, DataBindingDataType targetType, DataBindingDataType sourceType)
80 return IsTransformable(targetType, sourceType);
84 _DefaultTransformer::Transform(DataBindingDataType sourceType, const Tizen::Base::Object& sourceData, DataBindingDataType destinationType, Tizen::Base::Object& destinationData)
88 switch (destinationType)
90 case DATA_BINDING_DATA_TYPE_INTEGER:
91 switch (sourceType) // INTEGER from BOOLEAN, DOUBLE, FLOAT, INTEGER, LONG, STRING
93 case DATA_BINDING_DATA_TYPE_BOOLEAN:
95 Tizen::Base::Integer* pTarget = dynamic_cast<Tizen::Base::Integer*>(&destinationData);
100 pTarget->value = static_cast<Boolean&>(const_cast<Object&>(sourceData)).ToBool()?1:0;
104 case DATA_BINDING_DATA_TYPE_FLOAT:
106 Tizen::Base::Integer* pTarget = dynamic_cast<Tizen::Base::Integer*>(&destinationData);
111 pTarget->value = static_cast<Float&>(const_cast<Object&>(sourceData)).ToInt();
115 case DATA_BINDING_DATA_TYPE_INTEGER:
117 Tizen::Base::Integer* pTarget = dynamic_cast<Tizen::Base::Integer*>(&destinationData);
122 pTarget->value = static_cast<Integer&>(const_cast<Object&>(sourceData)).ToInt();
126 case DATA_BINDING_DATA_TYPE_LONG:
128 Tizen::Base::Integer* pTarget = dynamic_cast<Tizen::Base::Integer*>(&destinationData);
133 pTarget->value = static_cast<Long&>(const_cast<Object&>(sourceData)).ToInt();
137 case DATA_BINDING_DATA_TYPE_COLOR:
139 Tizen::Base::Integer* pTarget = dynamic_cast<Tizen::Base::Integer*>(&destinationData);
144 pTarget->value = static_cast<Color&>(const_cast<Object&>(sourceData)).GetRGB32();
152 case DATA_BINDING_DATA_TYPE_FLOAT:
153 switch (sourceType) // FLOAT from DOUBLE, FLOAT, INTEGER, LONG, STRING
155 case DATA_BINDING_DATA_TYPE_BOOLEAN:
157 Tizen::Base::Float* pTarget = dynamic_cast<Tizen::Base::Float*>(&destinationData);
162 pTarget->value = static_cast<Boolean&>(const_cast<Object&>(sourceData)).ToBool() ? 1.0 : 0.0;
166 case DATA_BINDING_DATA_TYPE_FLOAT:
168 Tizen::Base::Float* pTarget = dynamic_cast<Tizen::Base::Float*>(&destinationData);
173 pTarget->value = static_cast<Float&>(const_cast<Object&>(sourceData)).ToFloat();
177 case DATA_BINDING_DATA_TYPE_INTEGER:
179 Tizen::Base::Float* pTarget = dynamic_cast<Tizen::Base::Float*>(&destinationData);
184 pTarget->value = static_cast<Integer&>(const_cast<Object&>(sourceData)).ToFloat();
188 case DATA_BINDING_DATA_TYPE_LONG:
190 Tizen::Base::Float* pTarget = dynamic_cast<Tizen::Base::Float*>(&destinationData);
195 pTarget->value = static_cast<Long&>(const_cast<Object&>(sourceData)).ToFloat();
203 case DATA_BINDING_DATA_TYPE_DOUBLE:
204 switch (sourceType) // DOUBLE from DOUBLE, FLOAT, INTEGER, LONG, STRING
206 case DATA_BINDING_DATA_TYPE_DOUBLE:
208 Tizen::Base::Double* pTarget = dynamic_cast<Tizen::Base::Double*>(&destinationData);
213 pTarget->value = static_cast<Double&>(const_cast<Object&>(sourceData)).ToDouble();
217 case DATA_BINDING_DATA_TYPE_FLOAT:
219 Tizen::Base::Double* pTarget = dynamic_cast<Tizen::Base::Double*>(&destinationData);
224 pTarget->value = static_cast<Float&>(const_cast<Object&>(sourceData)).ToDouble();
228 case DATA_BINDING_DATA_TYPE_INTEGER:
230 Tizen::Base::Double* pTarget = dynamic_cast<Tizen::Base::Double*>(&destinationData);
235 pTarget->value = static_cast<Integer&>(const_cast<Object&>(sourceData)).ToDouble();
239 case DATA_BINDING_DATA_TYPE_LONG:
241 Tizen::Base::Double* pTarget = dynamic_cast<Tizen::Base::Double*>(&destinationData);
246 pTarget->value = static_cast<Long&>(const_cast<Object&>(sourceData)).ToDouble();
250 case DATA_BINDING_DATA_TYPE_BOOLEAN:
252 Tizen::Base::Double* pTarget = dynamic_cast<Tizen::Base::Double*>(&destinationData);
257 pTarget->value = static_cast<Boolean&>(const_cast<Object&>(sourceData)).ToBool() ? 1.0 : 0.0;
265 case DATA_BINDING_DATA_TYPE_LONG:
266 switch (sourceType) // LONG from DOUBLE, FLOAT, INTEGER, LONG, STRING
268 case DATA_BINDING_DATA_TYPE_FLOAT:
270 Tizen::Base::Long* pTarget = dynamic_cast<Tizen::Base::Long*>(&destinationData);
275 pTarget->value = static_cast<Float&>(const_cast<Object&>(sourceData)).ToLong();
279 case DATA_BINDING_DATA_TYPE_INTEGER:
281 Tizen::Base::Long* pTarget = dynamic_cast<Tizen::Base::Long*>(&destinationData);
286 pTarget->value = static_cast<Integer&>(const_cast<Object&>(sourceData)).ToLong();
290 case DATA_BINDING_DATA_TYPE_LONG:
292 Tizen::Base::Long* pTarget = dynamic_cast<Tizen::Base::Long*>(&destinationData);
297 pTarget->value = static_cast<Long&>(const_cast<Object&>(sourceData)).ToLong();
301 case DATA_BINDING_DATA_TYPE_BOOLEAN:
303 Tizen::Base::Long* pTarget = dynamic_cast<Tizen::Base::Long*>(&destinationData);
308 pTarget->value = static_cast<Boolean&>(const_cast<Object&>(sourceData)).ToBool() ? 1 : 0;
316 case DATA_BINDING_DATA_TYPE_STRING:
317 switch (sourceType) // STRING from DOUBLE, FLOAT, INTEGER, LONG, STRING
319 case DATA_BINDING_DATA_TYPE_DOUBLE:
321 Tizen::Base::String* pTarget = dynamic_cast<Tizen::Base::String*>(&destinationData);
326 *pTarget = static_cast<Double&>(const_cast<Object&>(sourceData)).ToString();
330 case DATA_BINDING_DATA_TYPE_FLOAT:
332 Tizen::Base::String* pTarget = dynamic_cast<Tizen::Base::String*>(&destinationData);
337 *pTarget = static_cast<Float&>(const_cast<Object&>(sourceData)).ToString();
341 case DATA_BINDING_DATA_TYPE_INTEGER:
343 Tizen::Base::String* pTarget = dynamic_cast<Tizen::Base::String*>(&destinationData);
348 *pTarget = static_cast<Integer&>(const_cast<Object&>(sourceData)).ToString();
352 case DATA_BINDING_DATA_TYPE_LONG:
354 Tizen::Base::String* pTarget = dynamic_cast<Tizen::Base::String*>(&destinationData);
359 *pTarget = static_cast<Long&>(const_cast<Object&>(sourceData)).ToString();
363 case DATA_BINDING_DATA_TYPE_STRING:
365 Tizen::Base::String* pTarget = dynamic_cast<Tizen::Base::String*>(&destinationData);
370 *pTarget = static_cast<String&>(const_cast<Object&>(sourceData));
374 case DATA_BINDING_DATA_TYPE_BOOLEAN:
376 Tizen::Base::String* pTarget = dynamic_cast<Tizen::Base::String*>(&destinationData);
381 *pTarget = static_cast<Boolean&>(const_cast<Object&>(sourceData)).ToString();
385 case DATA_BINDING_DATA_TYPE_COLOR:
387 Tizen::Base::String* pTarget = dynamic_cast<Tizen::Base::String*>(&destinationData);
393 r= pTarget->Append(L"#");
398 wchar_t tempString[] = L"XXXXXXXX";
399 swprintf(tempString, (sizeof(tempString) / sizeof(wchar_t)), L"%X",static_cast<Color &>(const_cast<Object&>(sourceData)).GetRGB32());
400 r= pTarget->Append(tempString);
408 case DATA_BINDING_DATA_TYPE_DIMENSION:
410 Tizen::Base::String* pTarget = dynamic_cast<Tizen::Base::String*>(&destinationData);
417 String* pString = new (std::nothrow) String(L"");
418 SysTryReturn(NID_UI, pString, false, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed.");
420 Dimension* pDimension = &static_cast<Dimension&>(const_cast<Object&>(sourceData));
421 r = pString->Append(L"width:");
427 r = pString->Append(pDimension->width);
433 r = pString->Append(L", height:");
439 r = pString->Append(pDimension->height);
450 case DATA_BINDING_DATA_TYPE_POINT:
452 Tizen::Base::String* pTarget = dynamic_cast<Tizen::Base::String*>(&destinationData);
459 String* pString = new (std::nothrow) String(L"");
460 SysTryReturn(NID_UI, pString, false, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed.");
462 Point* pPoint = &static_cast<Point &>(const_cast<Object&>(sourceData));
463 r = pString->Append(L"x:");
469 r = pString->Append(pPoint->x);
475 r = pString->Append(L", y:");
481 r = pString->Append(pPoint->y);
492 case DATA_BINDING_DATA_TYPE_RECTANGLE:
494 Tizen::Base::String* pTarget = dynamic_cast<Tizen::Base::String*>(&destinationData);
501 String* pString = new (std::nothrow) String(L"");
502 SysTryReturn(NID_UI, pString, false, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed.");
504 Rectangle* pRectangle = &static_cast<Rectangle &>(const_cast<Object&>(sourceData));
505 r = pString->Append(L"x:");
511 r = pString->Append(pRectangle->x);
517 r = pString->Append(L", y:");
523 r = pString->Append(pRectangle->y);
530 r = pString->Append(L", width:");
536 r = pString->Append(pRectangle->width);
543 r = pString->Append(L", height:");
549 r = pString->Append(pRectangle->height);
563 case DATA_BINDING_DATA_TYPE_COLOR:
564 if (sourceType == DATA_BINDING_DATA_TYPE_COLOR)
566 Color* pTarget = dynamic_cast<Color*>(&destinationData);
571 *pTarget = static_cast<Color&>(const_cast<Object&>(sourceData));
574 else if (sourceType == DATA_BINDING_DATA_TYPE_INTEGER)
576 Color* pTarget = dynamic_cast<Color*>(&destinationData);
581 *pTarget = static_cast<Integer&>(const_cast<Object&>(sourceData)).ToInt();
589 case DATA_BINDING_DATA_TYPE_POINT:
592 case DATA_BINDING_DATA_TYPE_POINT:
594 Point* pTarget = dynamic_cast<Point*>(&destinationData);
599 pTarget->SetPosition(static_cast<Point&>(const_cast<Object&>(sourceData)).x, static_cast<Point&>(const_cast<Object&>(sourceData)).y);
603 case DATA_BINDING_DATA_TYPE_FLOAT_POINT:
605 Point* pTarget = dynamic_cast<Point*>(&destinationData);
610 pTarget->SetPosition(static_cast<FloatPoint&>(const_cast<Object&>(sourceData)).x, static_cast<FloatPoint&>(const_cast<Object&>(sourceData)).y);
614 case DATA_BINDING_DATA_TYPE_RECTANGLE:
616 Point* pTarget = dynamic_cast<Point*>(&destinationData);
621 pTarget->SetPosition(static_cast<Rectangle&>(const_cast<Object&>(sourceData)).x, static_cast<Rectangle&>(const_cast<Object&>(sourceData)).y);
625 case DATA_BINDING_DATA_TYPE_FLOAT_RECTANGLE:
627 Point* pTarget = dynamic_cast<Point*>(&destinationData);
632 pTarget->SetPosition(static_cast<FloatRectangle&>(const_cast<Object&>(sourceData)).x, static_cast<FloatRectangle&>(const_cast<Object&>(sourceData)).y);
640 case DATA_BINDING_DATA_TYPE_RECTANGLE:
641 if (sourceType == DATA_BINDING_DATA_TYPE_RECTANGLE)
643 Rectangle* pTarget = dynamic_cast<Rectangle*>(&destinationData);
648 pTarget->SetBounds(static_cast<Rectangle&>(const_cast<Object&>(sourceData)).x, static_cast<Rectangle&>(const_cast<Object&>(sourceData)).y, static_cast<Rectangle&>(const_cast<Object&>(sourceData)).width, static_cast<Rectangle&>(const_cast<Object&>(sourceData)).height);
651 else if (sourceType == DATA_BINDING_DATA_TYPE_FLOAT_RECTANGLE)
653 Rectangle* pTarget = dynamic_cast<Rectangle*>(&destinationData);
658 pTarget->SetBounds(static_cast<FloatRectangle&>(const_cast<Object&>(sourceData)).x, static_cast<FloatRectangle&>(const_cast<Object&>(sourceData)).y, static_cast<FloatRectangle&>(const_cast<Object&>(sourceData)).width, static_cast<FloatRectangle&>(const_cast<Object&>(sourceData)).height);
666 case DATA_BINDING_DATA_TYPE_DIMENSION:
669 case DATA_BINDING_DATA_TYPE_DIMENSION:
671 Dimension* pTarget = dynamic_cast<Dimension*>(&destinationData);
676 pTarget->SetSize(static_cast<Dimension&>(const_cast<Object&>(sourceData)).width, static_cast<Dimension&>(const_cast<Object&>(sourceData)).height);
680 case DATA_BINDING_DATA_TYPE_FLOAT_DIMENSION:
682 Dimension* pTarget = dynamic_cast<Dimension*>(&destinationData);
687 pTarget->SetSize(static_cast<FloatDimension&>(const_cast<Object&>(sourceData)).width, static_cast<FloatDimension&>(const_cast<Object&>(sourceData)).height);
691 case DATA_BINDING_DATA_TYPE_RECTANGLE:
693 Dimension* pTarget = dynamic_cast<Dimension*>(&destinationData);
698 pTarget->SetSize(static_cast<Rectangle&>(const_cast<Object&>(sourceData)).width, static_cast<Rectangle&>(const_cast<Object&>(sourceData)).height);
702 case DATA_BINDING_DATA_TYPE_FLOAT_RECTANGLE:
704 Point* pTarget = dynamic_cast<Point*>(&destinationData);
709 pTarget->SetPosition(static_cast<FloatRectangle&>(const_cast<Object&>(sourceData)).x, static_cast<FloatRectangle&>(const_cast<Object&>(sourceData)).y);
722 _DefaultTransformer::IsTransformable(DataBindingDataType sourceType, DataBindingDataType destinationType)
724 bool returnValue = false;
726 switch (destinationType)
728 case DATA_BINDING_DATA_TYPE_INTEGER:
729 switch (sourceType) // INTEGER from BOOLEAN, DOUBLE, FLOAT, INTEGER, LONG, STRING
731 case DATA_BINDING_DATA_TYPE_BOOLEAN:
733 case DATA_BINDING_DATA_TYPE_FLOAT:
735 case DATA_BINDING_DATA_TYPE_INTEGER:
737 case DATA_BINDING_DATA_TYPE_LONG:
739 case DATA_BINDING_DATA_TYPE_COLOR:
746 case DATA_BINDING_DATA_TYPE_FLOAT:
747 switch (sourceType) // FLOAT from DOUBLE, FLOAT, INTEGER, LONG, STRING
749 case DATA_BINDING_DATA_TYPE_BOOLEAN:
751 case DATA_BINDING_DATA_TYPE_FLOAT:
753 case DATA_BINDING_DATA_TYPE_INTEGER:
755 case DATA_BINDING_DATA_TYPE_LONG:
763 case DATA_BINDING_DATA_TYPE_DOUBLE:
764 switch (sourceType) // DOUBLE from DOUBLE, FLOAT, INTEGER, LONG, STRING
766 case DATA_BINDING_DATA_TYPE_DOUBLE:
768 case DATA_BINDING_DATA_TYPE_FLOAT:
770 case DATA_BINDING_DATA_TYPE_INTEGER:
772 case DATA_BINDING_DATA_TYPE_LONG:
774 case DATA_BINDING_DATA_TYPE_BOOLEAN:
782 case DATA_BINDING_DATA_TYPE_LONG:
783 switch (sourceType) // LONG from DOUBLE, FLOAT, INTEGER, LONG, STRING
785 case DATA_BINDING_DATA_TYPE_BOOLEAN:
787 case DATA_BINDING_DATA_TYPE_FLOAT:
789 case DATA_BINDING_DATA_TYPE_INTEGER:
791 case DATA_BINDING_DATA_TYPE_LONG:
799 case DATA_BINDING_DATA_TYPE_STRING:
800 switch (sourceType) // STRING from all type
802 case DATA_BINDING_DATA_TYPE_BOOLEAN:
804 case DATA_BINDING_DATA_TYPE_COLOR:
806 case DATA_BINDING_DATA_TYPE_DIMENSION:
808 case DATA_BINDING_DATA_TYPE_DOUBLE:
810 case DATA_BINDING_DATA_TYPE_FLOAT:
812 case DATA_BINDING_DATA_TYPE_INTEGER:
814 case DATA_BINDING_DATA_TYPE_LONG:
816 case DATA_BINDING_DATA_TYPE_POINT:
818 case DATA_BINDING_DATA_TYPE_RECTANGLE:
820 case DATA_BINDING_DATA_TYPE_STRING:
828 case DATA_BINDING_DATA_TYPE_COLOR:
829 switch (sourceType) // COLOR from INTEGER, COLOR
831 case DATA_BINDING_DATA_TYPE_COLOR:
833 case DATA_BINDING_DATA_TYPE_INTEGER:
841 case DATA_BINDING_DATA_TYPE_POINT:
842 switch (sourceType) // POINT from POINT, RECTANGLE
844 case DATA_BINDING_DATA_TYPE_FLOAT_RECTANGLE:
846 case DATA_BINDING_DATA_TYPE_FLOAT_POINT:
848 case DATA_BINDING_DATA_TYPE_POINT:
850 case DATA_BINDING_DATA_TYPE_RECTANGLE:
858 case DATA_BINDING_DATA_TYPE_RECTANGLE:
859 switch (sourceType) // RECTANGLE from FLOATRECTANGLE, RECTANGLE
861 case DATA_BINDING_DATA_TYPE_FLOAT_RECTANGLE:
863 case DATA_BINDING_DATA_TYPE_RECTANGLE:
871 case DATA_BINDING_DATA_TYPE_DIMENSION:
872 switch (sourceType) // POINT from POINT, RECTANGLE
874 case DATA_BINDING_DATA_TYPE_FLOAT_RECTANGLE:
876 case DATA_BINDING_DATA_TYPE_FLOAT_DIMENSION:
878 case DATA_BINDING_DATA_TYPE_DIMENSION:
880 case DATA_BINDING_DATA_TYPE_RECTANGLE:
887 case DATA_BINDING_DATA_TYPE_FLOAT_POINT:
888 switch (sourceType) // POINT from POINT, RECTANGLE
890 case DATA_BINDING_DATA_TYPE_FLOAT_RECTANGLE:
892 case DATA_BINDING_DATA_TYPE_FLOAT_POINT:
894 case DATA_BINDING_DATA_TYPE_POINT:
896 case DATA_BINDING_DATA_TYPE_RECTANGLE:
903 case DATA_BINDING_DATA_TYPE_FLOAT_RECTANGLE:
904 switch (sourceType) // RECTANGLE from FLOATRECTANGLE, RECTANGLE
906 case DATA_BINDING_DATA_TYPE_FLOAT_RECTANGLE:
908 case DATA_BINDING_DATA_TYPE_RECTANGLE:
916 case DATA_BINDING_DATA_TYPE_FLOAT_DIMENSION:
917 switch (sourceType) // POINT from POINT, RECTANGLE
919 case DATA_BINDING_DATA_TYPE_FLOAT_RECTANGLE:
921 case DATA_BINDING_DATA_TYPE_FLOAT_DIMENSION:
923 case DATA_BINDING_DATA_TYPE_DIMENSION:
925 case DATA_BINDING_DATA_TYPE_RECTANGLE:
939 IsTypeSupported(VariantType variantType)
941 bool returnValue = false;
945 case VARIANT_TYPE_INT:
947 case VARIANT_TYPE_BOOL:
949 case VARIANT_TYPE_FLOAT:
951 case VARIANT_TYPE_DOUBLE:
953 case VARIANT_TYPE_LONG:
955 case VARIANT_TYPE_STRING:
957 case VARIANT_TYPE_COLOR:
959 case VARIANT_TYPE_POINT:
961 case VARIANT_TYPE_RECTANGLE:
963 case VARIANT_TYPE_FLOAT_DIMENSION:
965 case VARIANT_TYPE_FLOAT_POINT:
967 case VARIANT_TYPE_FLOAT_RECTANGLE:
969 case VARIANT_TYPE_DIMENSION:
978 ConvertVariantTypeToDataBindingDataType(VariantType variantType)
980 DataBindingDataType dataType = DATA_BINDING_DATA_TYPE_BOOLEAN;
984 case VARIANT_TYPE_INT:
985 dataType = DATA_BINDING_DATA_TYPE_INTEGER;
988 case VARIANT_TYPE_BOOL:
989 dataType = DATA_BINDING_DATA_TYPE_BOOLEAN;
992 case VARIANT_TYPE_FLOAT:
993 dataType = DATA_BINDING_DATA_TYPE_FLOAT;
996 case VARIANT_TYPE_DOUBLE:
997 dataType = DATA_BINDING_DATA_TYPE_DOUBLE;
1000 case VARIANT_TYPE_LONG:
1001 dataType = DATA_BINDING_DATA_TYPE_LONG;
1004 case VARIANT_TYPE_STRING:
1005 dataType = DATA_BINDING_DATA_TYPE_STRING;
1008 case VARIANT_TYPE_COLOR:
1009 dataType = DATA_BINDING_DATA_TYPE_COLOR;
1012 case VARIANT_TYPE_POINT:
1013 dataType = DATA_BINDING_DATA_TYPE_POINT;
1016 case VARIANT_TYPE_RECTANGLE:
1017 dataType = DATA_BINDING_DATA_TYPE_RECTANGLE;
1020 case VARIANT_TYPE_DIMENSION:
1021 dataType = DATA_BINDING_DATA_TYPE_DIMENSION;
1024 case VARIANT_TYPE_FLOAT_DIMENSION:
1025 dataType = DATA_BINDING_DATA_TYPE_FLOAT_DIMENSION;
1028 case VARIANT_TYPE_FLOAT_POINT:
1029 dataType = DATA_BINDING_DATA_TYPE_FLOAT_POINT;
1032 case VARIANT_TYPE_FLOAT_RECTANGLE:
1033 dataType = DATA_BINDING_DATA_TYPE_FLOAT_RECTANGLE;
1037 SysAssertf(0, "Not Support Type");
1044 ConvertDataBindingDataTypeToVariantType(DataBindingDataType dataType)
1046 VariantType variantType = VARIANT_TYPE_NONE;
1049 case DATA_BINDING_DATA_TYPE_BOOLEAN:
1050 variantType = VARIANT_TYPE_BOOL;
1053 case DATA_BINDING_DATA_TYPE_COLOR:
1054 variantType = VARIANT_TYPE_COLOR;
1057 case DATA_BINDING_DATA_TYPE_DIMENSION:
1058 variantType = VARIANT_TYPE_DIMENSION;
1061 case DATA_BINDING_DATA_TYPE_DOUBLE:
1062 variantType = VARIANT_TYPE_DOUBLE;
1065 case DATA_BINDING_DATA_TYPE_FLOAT:
1066 variantType = VARIANT_TYPE_FLOAT;
1069 case DATA_BINDING_DATA_TYPE_INTEGER:
1070 variantType = VARIANT_TYPE_INT;
1073 case DATA_BINDING_DATA_TYPE_LONG:
1074 variantType = VARIANT_TYPE_LONG;
1077 case DATA_BINDING_DATA_TYPE_POINT:
1078 variantType = VARIANT_TYPE_POINT;
1081 case DATA_BINDING_DATA_TYPE_RECTANGLE:
1082 variantType = VARIANT_TYPE_RECTANGLE;
1085 case DATA_BINDING_DATA_TYPE_STRING:
1086 variantType = VARIANT_TYPE_STRING;
1089 case DATA_BINDING_DATA_TYPE_FLOAT_DIMENSION:
1090 variantType = VARIANT_TYPE_FLOAT_DIMENSION;
1093 case DATA_BINDING_DATA_TYPE_FLOAT_POINT:
1094 variantType = VARIANT_TYPE_FLOAT_POINT;
1097 case DATA_BINDING_DATA_TYPE_FLOAT_RECTANGLE:
1098 variantType = VARIANT_TYPE_FLOAT_RECTANGLE;
1108 class _DataBindingPropertyChangeEventListner
1109 : public _IPropertyChangeEventListener
1110 , virtual public Tizen::Base::Runtime::IEventListener
1113 _DataBindingPropertyChangeEventListner(const _DataBinding& dataBinding)
1115 __pDataBinding = &const_cast<_DataBinding&>(dataBinding);
1117 virtual ~_DataBindingPropertyChangeEventListner(void){};
1118 virtual void OnPropertyChanging(_PropertyBase& source, const String& name, const Variant& oldValue, const Variant& newValue){};
1119 virtual void OnPropertyChanged(_PropertyBase& source, const String& name, const Variant& oldValue, const Variant& newValue)
1121 const Variant variant = source.GetProperty(name);
1122 if (variant.IsEmpty() || oldValue == newValue)
1126 if (name == __pDataBinding->GetPropertyName())
1128 __pDataBinding->Update(DATA_BINDING_DESTINATION_TYPE_SOURCE);
1132 _DataBinding* __pDataBinding;
1133 }; //class _DataBindingPropertyChangeEventListner
1135 _DefaultTransformer defaultTransformer;
1137 namespace Tizen { namespace Ui
1139 _DataBinding::_DataBinding(void)
1142 , __propertyName(L"")
1143 , __pDataSource(null)
1144 , __sourceType(DATA_BINDING_DATA_TYPE_BOOLEAN)
1145 , __targetType(DATA_BINDING_DATA_TYPE_BOOLEAN)
1146 , __flow(DATA_BINDING_FLOW_ONE_WAY)
1147 , __trigger(DATA_BINDING_TRIGGER_EXPLICIT)
1149 , __pValidator(null)
1150 , __pTransformer(null)
1151 , __pPropertyChangeEventListener(null)
1154 _DataBinding::~_DataBinding(void)
1156 if (__pPropertyChangeEventListener)
1158 _Control* pControl = _ControlManager::GetInstance()->GetObject(__controlHandle);
1161 pControl->RemovePropertyChangeEventListener(*__pPropertyChangeEventListener);
1163 delete __pPropertyChangeEventListener;
1164 __pPropertyChangeEventListener = null;
1169 _DataBinding::Construct(const _Control& control, const String& bindingId, const String& propertyName
1170 , Object& dataSource, DataBindingDataType sourceType, DataBindingFlow flow, DataBindingTrigger trigger
1171 , const IDataBindingListener* pListener, const IDataBindingDataValidator* pValidator, const IDataBindingDataTransformer* pTransformer)
1173 __controlHandle = control.GetHandle();
1174 _Control* pControl = _ControlManager::GetInstance()->GetObject(__controlHandle);
1175 SysTryReturn(NID_UI, pControl, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] The control that was binded is gone.");
1176 __propertyName = propertyName;
1177 __pDataSource = &dataSource;
1178 __sourceType = sourceType;
1180 __trigger = trigger;
1181 __pListener = const_cast<IDataBindingListener*>(pListener);
1182 __pValidator = const_cast<IDataBindingDataValidator*>(pValidator);
1184 if (pTransformer != null)
1185 __pTransformer = const_cast<IDataBindingDataTransformer*>(pTransformer);
1187 __pTransformer = &::defaultTransformer;
1189 Variant variant = pControl->GetProperty(propertyName);
1191 SysTryReturn(NID_UI, GetLastResult() != E_KEY_NOT_FOUND, E_OBJ_NOT_FOUND, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] Property is not found.");
1193 SysTryReturn(NID_UI, ::IsTypeSupported(variant.GetType()), E_UNSUPPORTED_FORMAT, E_UNSUPPORTED_FORMAT
1194 , "[E_UNSUPPORTED_FORMAT] Property type is unsupported type.");
1196 __targetType = ::ConvertVariantTypeToDataBindingDataType(variant.GetType());
1200 case DATA_BINDING_FLOW_ONE_WAY:
1201 SysTryReturn(NID_UI, __pTransformer->IsSourceToTargetTransformable(bindingId, __sourceType, __targetType)
1202 , E_UNSUPPORTED_FORMAT, E_UNSUPPORTED_FORMAT, "[E_UNSUPPORTED_FORMAT] transformer can not transform source type to target type.");
1204 case DATA_BINDING_FLOW_ONE_WAY_TO_SOURCE:
1205 SysTryReturn(NID_UI, __pTransformer->IsTargetToSourceTransformable(bindingId, __targetType, __sourceType)
1206 , E_UNSUPPORTED_FORMAT, E_UNSUPPORTED_FORMAT, "[E_UNSUPPORTED_FORMAT] transformer can not transform target type to source type.");
1208 case DATA_BINDING_FLOW_TWO_WAY:
1209 SysTryReturn(NID_UI, __pTransformer->IsSourceToTargetTransformable(bindingId, __sourceType, __targetType)
1210 && __pTransformer->IsTargetToSourceTransformable(bindingId, __targetType, __sourceType)
1211 , E_UNSUPPORTED_FORMAT, E_UNSUPPORTED_FORMAT, "[E_UNSUPPORTED_FORMAT] transformer can not transform both target type and source type.");
1217 if (trigger == DATA_BINDING_TRIGGER_IMMEDIATE)
1219 __pPropertyChangeEventListener = new (std::nothrow) ::_DataBindingPropertyChangeEventListner(*this);
1220 SysTryReturn(NID_UI, __pPropertyChangeEventListener, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed.");
1221 pControl->AddPropertyChangeEventListener(*__pPropertyChangeEventListener);
1227 _DataBinding::Update(DataBindingDestinationType destinationType)
1230 Object* pTransformedObject = null;
1231 result r = E_SYSTEM;
1232 Object* pOriginObject = null;
1233 _Control* pControl = _ControlManager::GetInstance()->GetObject(__controlHandle);
1234 SysTryCatch(NID_UI, pControl, , E_SYSTEM, "[E_SYSTEM] The control that was binded is gone.");
1236 if (destinationType == DATA_BINDING_DESTINATION_TYPE_SOURCE)
1238 DataBindingDataType originType = __targetType;
1239 Variant variant = pControl->GetProperty(__propertyName);
1240 DataBindingDataType transformedType = __sourceType;
1242 switch (variant.GetType())
1244 case VARIANT_TYPE_INT:
1245 pOriginObject = new (std::nothrow) Integer(variant.ToInt());
1246 SysTryReturn(NID_UI, pOriginObject, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed.");
1249 case VARIANT_TYPE_BOOL:
1250 pOriginObject = new (std::nothrow) Boolean(variant.ToBool());
1251 SysTryReturn(NID_UI, pOriginObject, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed.");
1254 case VARIANT_TYPE_FLOAT:
1255 pOriginObject = new (std::nothrow) Float(variant.ToFloat());
1256 SysTryReturn(NID_UI, pOriginObject, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed.");
1259 case VARIANT_TYPE_DOUBLE:
1260 pOriginObject = new (std::nothrow) Double(variant.ToDouble());
1261 SysTryReturn(NID_UI, pOriginObject, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed.");
1264 case VARIANT_TYPE_LONG:
1265 pOriginObject = new (std::nothrow) Long(variant.ToLong());
1266 SysTryReturn(NID_UI, pOriginObject, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed.");
1269 case VARIANT_TYPE_STRING:
1270 pOriginObject = new (std::nothrow) String(variant.ToString());
1271 SysTryReturn(NID_UI, pOriginObject, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed.");
1274 case VARIANT_TYPE_COLOR:
1275 pOriginObject = new (std::nothrow) Color(variant.ToColor());
1276 SysTryReturn(NID_UI, pOriginObject, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed.");
1279 case VARIANT_TYPE_POINT:
1280 pOriginObject = new (std::nothrow) Point(variant.ToPoint().x, variant.ToPoint().y);
1281 SysTryReturn(NID_UI, pOriginObject, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed.");
1284 case VARIANT_TYPE_RECTANGLE:
1285 pOriginObject = new (std::nothrow) Rectangle(variant.ToRectangle().x, variant.ToRectangle().y, variant.ToRectangle().width, variant.ToRectangle().height);
1286 SysTryReturn(NID_UI, pOriginObject, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed.");
1289 case VARIANT_TYPE_DIMENSION:
1290 pOriginObject = new (std::nothrow) Dimension(variant.ToDimension().width, variant.ToDimension().height);
1291 SysTryReturn(NID_UI, pOriginObject, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed.");
1293 case VARIANT_TYPE_FLOAT_POINT:
1294 pOriginObject = new (std::nothrow) FloatPoint(variant.ToFloatPoint());
1295 SysTryReturn(NID_UI, pOriginObject, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed.");
1297 case VARIANT_TYPE_FLOAT_RECTANGLE:
1298 pOriginObject = new (std::nothrow) FloatRectangle(variant.ToFloatRectangle());
1299 SysTryReturn(NID_UI, pOriginObject, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed.");
1301 case VARIANT_TYPE_FLOAT_DIMENSION:
1302 pOriginObject = new (std::nothrow) FloatDimension(variant.ToFloatDimension());
1303 SysTryReturn(NID_UI, pOriginObject, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed.");
1309 SysTryCatch(NID_UI, pControl, , E_SYSTEM, "[E_SYSTEM] The control that was binded is gone.");
1312 switch(__sourceType)
1314 case DATA_BINDING_DATA_TYPE_BOOLEAN:
1316 pTransformedObject = new (std::nothrow) Boolean(false);
1317 SysTryReturn(NID_UI, pTransformedObject, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed.");
1320 case DATA_BINDING_DATA_TYPE_COLOR:
1322 pTransformedObject = new (std::nothrow) Color;
1323 SysTryReturn(NID_UI, pTransformedObject, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed.");
1326 case DATA_BINDING_DATA_TYPE_DIMENSION:
1328 pTransformedObject = new (std::nothrow) Dimension;
1329 SysTryReturn(NID_UI, pTransformedObject, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed.");
1332 case DATA_BINDING_DATA_TYPE_DOUBLE:
1334 pTransformedObject = new (std::nothrow) Double;
1335 SysTryReturn(NID_UI, pTransformedObject, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed.");
1338 case DATA_BINDING_DATA_TYPE_FLOAT:
1340 pTransformedObject = new (std::nothrow) Float;
1341 SysTryReturn(NID_UI, pTransformedObject, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed.");
1344 case DATA_BINDING_DATA_TYPE_INTEGER:
1346 pTransformedObject = new (std::nothrow) Integer;
1347 SysTryReturn(NID_UI, pTransformedObject, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed.");
1350 case DATA_BINDING_DATA_TYPE_LONG:
1352 pTransformedObject = new (std::nothrow) Long;
1353 SysTryReturn(NID_UI, pTransformedObject, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed.");
1356 case DATA_BINDING_DATA_TYPE_POINT:
1358 pTransformedObject = new (std::nothrow) Point;
1359 SysTryReturn(NID_UI, pTransformedObject, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed.");
1362 case DATA_BINDING_DATA_TYPE_RECTANGLE:
1364 pTransformedObject = new (std::nothrow) Rectangle;
1365 SysTryReturn(NID_UI, pTransformedObject, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed.");
1368 case DATA_BINDING_DATA_TYPE_STRING:
1370 pTransformedObject = new (std::nothrow) String;
1371 SysTryReturn(NID_UI, pTransformedObject, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed.");
1374 case DATA_BINDING_DATA_TYPE_FLOAT_POINT:
1376 pTransformedObject = new (std::nothrow) FloatPoint;
1377 SysTryReturn(NID_UI, pTransformedObject, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed.");
1380 case DATA_BINDING_DATA_TYPE_FLOAT_RECTANGLE:
1382 pTransformedObject = new (std::nothrow) FloatRectangle;
1383 SysTryReturn(NID_UI, pTransformedObject, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed.");
1386 case DATA_BINDING_DATA_TYPE_FLOAT_DIMENSION:
1388 pTransformedObject = new (std::nothrow) FloatDimension;
1389 SysTryReturn(NID_UI, pTransformedObject, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed.");
1393 SysTryCatch(NID_UI, false, , E_SYSTEM, "[E_SYSTEM] System Error");
1395 SysTryCatch(NID_UI, pTransformedObject, , E_SYSTEM, "[E_SYSTEM] data transfer is failed by memory shortage.");
1396 SysTryCatch(NID_UI, __pTransformer->TransformTargetToSource(__bindingId, originType, *pOriginObject, transformedType, *pTransformedObject) == true, , E_SYSTEM, "[E_SYSTEM] data transfer is failed by transformer.");
1398 if (__pValidator != null)
1400 valid = __pValidator->ValidateDataToSource(__bindingId, *pTransformedObject);
1404 if (__pListener != null)
1406 __pListener->OnDataBindingValidationFailed(__bindingId, pControl->GetName(), __propertyName, destinationType);
1408 SysTryCatch(NID_UI, 0, , E_SYSTEM, "[E_SYSTEM] data transfer is failed by validator.");
1411 switch (variant.GetType())
1414 case VARIANT_TYPE_INT:
1415 static_cast<Integer&>(*__pDataSource) = static_cast<Integer*>(pTransformedObject)->ToInt();
1418 case VARIANT_TYPE_BOOL:
1419 static_cast<Boolean&>(*__pDataSource) = static_cast<Boolean*>(pTransformedObject)->ToBool();
1422 case VARIANT_TYPE_FLOAT:
1423 static_cast<Float&>(*__pDataSource) = static_cast<Float*>(pTransformedObject)->ToFloat();
1426 case VARIANT_TYPE_DOUBLE:
1427 static_cast<Double&>(*__pDataSource) = static_cast<Double*>(pTransformedObject)->ToDouble();
1430 case VARIANT_TYPE_LONG:
1431 static_cast<Long&>(*__pDataSource) = static_cast<Long*>(pTransformedObject)->ToLong();
1434 case VARIANT_TYPE_STRING:
1435 static_cast<String&>(*__pDataSource) = static_cast<String&>(*pTransformedObject);
1438 case VARIANT_TYPE_COLOR:
1439 static_cast<Color&>(*__pDataSource) = static_cast<Color&>(*pTransformedObject);
1442 case VARIANT_TYPE_POINT:
1443 static_cast<Point*>(__pDataSource)->SetPosition(static_cast<Point&>(*pTransformedObject));
1446 case VARIANT_TYPE_RECTANGLE:
1447 static_cast<Rectangle*>(__pDataSource)->SetBounds(static_cast<Rectangle&>(*pTransformedObject).x, static_cast<Rectangle&>(*pTransformedObject).y, static_cast<Rectangle&>(*pTransformedObject).width, static_cast<Rectangle&>(*pTransformedObject).height);
1450 case VARIANT_TYPE_DIMENSION:
1451 static_cast<Dimension*>(__pDataSource)->SetSize(static_cast<Dimension&>(*pTransformedObject).width, static_cast<Dimension&>(*pTransformedObject).height);
1454 case VARIANT_TYPE_FLOAT_POINT:
1455 static_cast<FloatPoint*>(__pDataSource)->SetPosition(static_cast<FloatPoint&>(*pTransformedObject).x, static_cast<FloatPoint&>(*pTransformedObject).y);
1458 case VARIANT_TYPE_FLOAT_RECTANGLE:
1459 static_cast<FloatRectangle*>(__pDataSource)->SetBounds(static_cast<FloatRectangle&>(*pTransformedObject).x, static_cast<FloatRectangle&>(*pTransformedObject).y, static_cast<FloatRectangle&>(*pTransformedObject).width, static_cast<FloatRectangle&>(*pTransformedObject).height);
1462 case VARIANT_TYPE_FLOAT_DIMENSION:
1463 static_cast<FloatDimension*>(__pDataSource)->SetSize(static_cast<FloatDimension&>(*pTransformedObject).width, static_cast<FloatDimension&>(*pTransformedObject).height);
1469 if (__pListener != null)
1471 __pListener->OnDataBindingSourceUpdated(__bindingId, pControl->GetName(), __propertyName);
1475 else // DATA_BINDING_DESTINATION_TYPE_TARGET
1477 DataBindingDataType originType = __sourceType;
1478 Object* pOriginObject = __pDataSource;
1479 DataBindingDataType transformedType = __targetType;
1481 switch(__targetType)
1483 case DATA_BINDING_DATA_TYPE_BOOLEAN:
1485 pTransformedObject = new (std::nothrow) Boolean(false);
1486 SysTryReturn(NID_UI, pTransformedObject, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed.");
1489 case DATA_BINDING_DATA_TYPE_COLOR:
1491 pTransformedObject = new (std::nothrow) Color;
1492 SysTryReturn(NID_UI, pTransformedObject, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed.");
1495 case DATA_BINDING_DATA_TYPE_DIMENSION:
1497 pTransformedObject = new (std::nothrow) Dimension;
1498 SysTryReturn(NID_UI, pTransformedObject, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed.");
1501 case DATA_BINDING_DATA_TYPE_DOUBLE:
1503 pTransformedObject = new (std::nothrow) Double;
1504 SysTryReturn(NID_UI, pTransformedObject, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed.");
1507 case DATA_BINDING_DATA_TYPE_FLOAT:
1509 pTransformedObject = new (std::nothrow) Float;
1510 SysTryReturn(NID_UI, pTransformedObject, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed.");
1513 case DATA_BINDING_DATA_TYPE_INTEGER:
1515 pTransformedObject = new (std::nothrow) Integer;
1516 SysTryReturn(NID_UI, pTransformedObject, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed.");
1519 case DATA_BINDING_DATA_TYPE_LONG:
1521 pTransformedObject = new (std::nothrow) Long;
1522 SysTryReturn(NID_UI, pTransformedObject, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed.");
1525 case DATA_BINDING_DATA_TYPE_POINT:
1527 pTransformedObject = new (std::nothrow) Point;
1528 SysTryReturn(NID_UI, pTransformedObject, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed.");
1531 case DATA_BINDING_DATA_TYPE_RECTANGLE:
1533 pTransformedObject = new (std::nothrow) Rectangle;
1534 SysTryReturn(NID_UI, pTransformedObject, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed.");
1537 case DATA_BINDING_DATA_TYPE_STRING:
1539 pTransformedObject = new (std::nothrow) String;
1540 SysTryReturn(NID_UI, pTransformedObject, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed.");
1543 case DATA_BINDING_DATA_TYPE_FLOAT_POINT:
1545 pTransformedObject = new (std::nothrow) FloatPoint;
1546 SysTryReturn(NID_UI, pTransformedObject, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed.");
1549 case DATA_BINDING_DATA_TYPE_FLOAT_RECTANGLE:
1551 pTransformedObject = new (std::nothrow) FloatRectangle;
1552 SysTryReturn(NID_UI, pTransformedObject, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed.");
1555 case DATA_BINDING_DATA_TYPE_FLOAT_DIMENSION:
1557 pTransformedObject = new (std::nothrow) FloatDimension;
1558 SysTryReturn(NID_UI, pTransformedObject, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed.");
1562 SysTryCatch(NID_UI, false, , E_SYSTEM, "[E_SYSTEM] System Error");
1564 SysTryCatch(NID_UI, pTransformedObject, , E_SYSTEM, "[E_SYSTEM] data transfer is failed by memory shortage.");
1565 SysTryCatch(NID_UI, __pTransformer->TransformSourceToTarget(__bindingId, originType, *pOriginObject, transformedType, *pTransformedObject) == true, , E_SYSTEM, "[E_SYSTEM] data transfer is failed by transformer.");
1567 if (__pValidator != null)
1569 valid = __pValidator->ValidateDataToTarget(__bindingId, *pTransformedObject);
1573 if (__pListener != null)
1575 __pListener->OnDataBindingValidationFailed(__bindingId, pControl->GetName(), __propertyName, destinationType);
1577 SysTryCatch(NID_UI, 0, , E_SYSTEM, "[E_SYSTEM] data transfer is failed by validator.");
1582 switch (transformedType)
1584 case DATA_BINDING_DATA_TYPE_BOOLEAN:
1585 variant = static_cast<Boolean*>(pTransformedObject)->ToBool();
1588 case DATA_BINDING_DATA_TYPE_COLOR:
1589 variant = *static_cast<Color*>(pTransformedObject);
1592 case DATA_BINDING_DATA_TYPE_DIMENSION:
1593 variant = *static_cast<Dimension*>(pTransformedObject);
1596 case DATA_BINDING_DATA_TYPE_DOUBLE:
1597 variant = static_cast<Double*>( pTransformedObject)->ToDouble();
1600 case DATA_BINDING_DATA_TYPE_FLOAT:
1601 variant = static_cast<Float*>(pTransformedObject)->ToFloat();
1604 case DATA_BINDING_DATA_TYPE_INTEGER:
1605 variant = static_cast<Integer*>(pTransformedObject)->ToInt();
1608 case DATA_BINDING_DATA_TYPE_LONG:
1609 variant = static_cast<Long*>(pTransformedObject)->ToLong();
1612 case DATA_BINDING_DATA_TYPE_POINT:
1613 variant = *static_cast<Point*>(pTransformedObject);
1616 case DATA_BINDING_DATA_TYPE_RECTANGLE:
1617 variant = *static_cast<Rectangle*>(pTransformedObject);
1620 case DATA_BINDING_DATA_TYPE_STRING:
1621 variant = *static_cast<String*>(pTransformedObject);
1624 case DATA_BINDING_DATA_TYPE_FLOAT_POINT:
1625 variant = *static_cast<FloatPoint*>(pTransformedObject);
1628 case DATA_BINDING_DATA_TYPE_FLOAT_RECTANGLE:
1629 variant = *static_cast<FloatRectangle*>(pTransformedObject);
1632 case DATA_BINDING_DATA_TYPE_FLOAT_DIMENSION:
1633 variant = *static_cast<FloatDimension*>(pTransformedObject);
1638 pControl->SetProperty(__propertyName, variant);
1639 if (__pListener != null)
1641 __pListener->OnDataBindingTargetUpdated(__bindingId, pControl->GetName(), __propertyName);
1647 delete pOriginObject;
1648 delete pTransformedObject;
1652 _DataBinding::SetDataBindingListener(const IDataBindingListener* pListener)
1654 __pListener = const_cast<IDataBindingListener*>(pListener);
1658 _DataBinding::Get_ControlHandle(void) const
1660 return __controlHandle;
1663 _DataBinding::GetPropertyName(void) const
1665 return __propertyName;
1668 _DataBinding::GetSourceDataType(void) const
1670 return __sourceType;
1673 _DataBinding::GetTargetDataType(void) const
1675 return __targetType;
1678 _DataBinding::GetDataFlow(void) const
1683 _DataBinding::GetTrigger(void) const