Size negotiation patch 3: Scope size negotiation enums
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / controls / scrollable / scroll-connector-impl.cpp
1 /*
2  * Copyright (c) 2014 Samsung Electronics Co., Ltd.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  */
17
18 // CLASS HEADER
19 #include <dali-toolkit/internal/controls/scrollable/scroll-connector-impl.h>
20
21 // EXTERNAL INCLUDES
22 #include <dali/public-api/object/property-index-ranges.h>
23 #include <dali/public-api/object/type-registry.h>
24 #include <dali/public-api/object/type-registry-helper.h>
25 #include <dali/integration-api/debug.h>
26
27 namespace Dali
28 {
29
30 namespace Toolkit
31 {
32
33 namespace Internal
34 {
35
36 namespace
37 {
38
39 // Setup properties, signals and actions using the type-registry.
40 DALI_TYPE_REGISTRATION_BEGIN( Toolkit::ScrollConnector, Dali::BaseHandle, NULL )
41
42 DALI_SIGNAL_REGISTRATION( ScrollConnector, "domain-changed",          DOMAIN_CHANGED_SIGNAL_NAME          )
43 DALI_SIGNAL_REGISTRATION( ScrollConnector, "scroll-position-changed", SCROLL_POSITION_CHANGED_SIGNAL_NAME )
44
45 DALI_TYPE_REGISTRATION_END()
46
47 }
48
49 const Property::Index ScrollConnector::SCROLL_POSITION = Dali::PROPERTY_CUSTOM_START_INDEX;
50 const Property::Index ScrollConnector::OVERSHOOT       = Dali::PROPERTY_CUSTOM_START_INDEX + 1;
51
52 ScrollConnector* ScrollConnector::New()
53 {
54   return new ScrollConnector();
55 }
56
57 void ScrollConnector::SetScrollDomain( float min, float max, float length )
58 {
59   mMinLimit = min;
60   mMaxLimit = max;
61   mContentLength = length;
62
63   mDomainChangedSignal.Emit( mMinLimit, mMaxLimit, mContentLength );
64 }
65
66 void ScrollConnector::SetScrollPosition( float position )
67 {
68   mScrollPositionObject.SetProperty( Toolkit::ScrollConnector::SCROLL_POSITION, position );
69   mScrollPositionChangedSignal.Emit( position );
70 }
71
72 bool ScrollConnector::DoConnectSignal( BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor )
73 {
74   Dali::BaseHandle handle( object );
75
76   bool connected( true );
77   Toolkit::ScrollConnector scrollConnector = Toolkit::ScrollConnector::DownCast( handle );
78
79   if( 0 == strcmp( signalName.c_str(), DOMAIN_CHANGED_SIGNAL_NAME ) )
80   {
81     scrollConnector.DomainChangedSignal().Connect( tracker, functor );
82   }
83   else if( 0 == strcmp( signalName.c_str(), SCROLL_POSITION_CHANGED_SIGNAL_NAME ) )
84   {
85     scrollConnector.ScrollPositionChangedSignal().Connect( tracker, functor );
86   }
87   else
88   {
89     // signalName does not match any signal
90     connected = false;
91   }
92
93   return connected;
94 }
95
96 ScrollConnector::ScrollConnector()
97 : mMinLimit( 0.0f ),
98   mMaxLimit( 0.0f ),
99   mContentLength( 0.0f )
100 {
101   mScrollPositionObject = Handle::New();
102
103   mScrollPositionObject.RegisterProperty( Toolkit::ScrollConnector::SCROLL_POSITION_PROPERTY_NAME, 0.0f );
104   mScrollPositionObject.RegisterProperty( Toolkit::ScrollConnector::OVERSHOOT_PROPERTY_NAME, 0.0f );
105 }
106
107 ScrollConnector::~ScrollConnector()
108 {
109 }
110
111 } // namespace Internal
112
113 } // namespace Toolkit
114
115 } // namespace Dali