490213df4fd26ca81ec7f7a31a07caacf7f082b6
[platform/core/uifw/dali-adaptor.git] / adaptors / widget / internal / widget-impl.h
1 #ifndef __DALI_INTERNAL_WIDGET_H__
2 #define __DALI_INTERNAL_WIDGET_H__
3
4 /*
5  * Copyright (c) 2017 Samsung Electronics Co., Ltd.
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  */
20
21 // EXTERNAL INCLUDES
22 #include <dali/public-api/object/base-object.h>
23 #include <appcore_multiwindow_base.h>
24 #include <utility>
25 #include <dali/public-api/common/vector-wrapper.h>
26
27 // INTERNAL INCLUDES
28 #include <widget.h>
29 #include <widget-data.h>
30 #include <window.h>
31
32 namespace Dali
33 {
34
35 namespace Internal
36 {
37
38 namespace Adaptor
39 {
40 class Widget;
41 typedef IntrusivePtr<Widget> WidgetPtr;
42
43 /**
44  * Implementation of the Application class.
45  */
46 class Widget : public BaseObject
47 {
48 public:
49   typedef Dali::Widget::WidgetInstanceCreateSignalType    WidgetInstanceCreateSignalType;
50   typedef Dali::Widget::WidgetInstanceTerminateSignalType WidgetInstanceTerminateSignalType;
51   typedef Dali::Widget::WidgetInstancePauseSignalType     WidgetInstancePauseSignalType;
52   typedef Dali::Widget::WidgetInstanceResumeSignalType    WidgetInstanceResumeSignalType;
53   typedef Dali::Widget::WidgetInstanceResizeSignalType    WidgetInstanceResizeSignalType;
54   typedef Dali::Widget::WidgetInstanceUpdateSignalType    WidgetInstanceUpdateSignalType;
55
56
57   typedef std::pair< const char*, Dali::WidgetData > IdWidgetDataPair;
58   typedef std::vector< IdWidgetDataPair > IdWidgetDataContainer;
59
60   /**
61    * Create a new Widget
62    * @param[in]  id         Id of widget instance
63    */
64   static Dali::Widget New( const std::string& id );
65
66 public:  // Signals
67
68   /**
69    * @copydoc Dali::Widget::InitSignal()
70    */
71   WidgetInstanceCreateSignalType& CreateSignal(){ return mCreateSignal; }
72
73   /**
74    * @copydoc Dali::Widget::TerminateSignal()
75    */
76   WidgetInstanceTerminateSignalType& TerminateSignal(){ return mTerminateSignal; }
77
78   /**
79    * @copydoc Dali::Widget::PauseSignal()
80    */
81   WidgetInstancePauseSignalType& PauseSignal(){ return mPauseSignal; }
82
83   /**
84    * @copydoc Dali::Widget::ResumeSignal()
85    */
86   WidgetInstanceResumeSignalType& ResumeSignal(){ return mResumeSignal; }
87
88   /**
89    * @copydoc Dali::Widget::ResizeSignal()
90    */
91   WidgetInstanceResizeSignalType& ResizeSignal(){ return mResizeSignal; }
92
93   /**
94    * @copydoc Dali::Widget::UpdateSignal()
95    */
96   WidgetInstanceUpdateSignalType& UpdateSignal(){ return mUpdateSignal; }
97
98 public:
99
100   /**
101    * Called when the widget is resized.
102    */
103   void OnResize(appcore_multiwindow_base_instance_h, Dali::Widget::WindowSize windowSize);
104
105   /**
106    * Called when the widget is updated.
107    */
108   void OnUpdate(appcore_multiwindow_base_instance_h, bundle* content, int force);
109
110   /**
111    * Called when Create Widget Instance.
112    */
113   void InsertWidgetData( const char* id, Dali::WidgetData widgetData );
114
115   /**
116    * Called when finding widget data by instance id.
117    */
118   Dali::WidgetData* FindWidgetData( const char* instanceId );
119
120   /**
121    * Called when deleting widget  data by instance id.
122    */
123   void DeleteWidgetData( const char* instanceId );
124
125 protected:
126
127   /**
128    * Private Constructor
129    * @param[in]  id         Id for widget instance
130    */
131   Widget( const std::string& id );
132
133   /**
134    * Destructor
135    */
136   virtual ~Widget();
137
138   // Undefined
139   Widget(const Widget&);
140   Widget& operator=(Widget&);
141
142 public:
143
144   WidgetInstanceCreateSignalType        mCreateSignal;
145   WidgetInstanceTerminateSignalType     mTerminateSignal;
146   WidgetInstancePauseSignalType         mPauseSignal;
147   WidgetInstanceResumeSignalType        mResumeSignal;
148   WidgetInstanceResizeSignalType        mResizeSignal;
149   WidgetInstanceUpdateSignalType        mUpdateSignal;
150   const std::string                     mClassId;
151
152 private:
153   SlotDelegate< Widget >                mSlotDelegate;
154   IdWidgetDataContainer                 mIdWidgetContainer;
155 };
156
157 inline Widget& GetImplementation(Dali::Widget& widget)
158 {
159   DALI_ASSERT_ALWAYS(widget && "widget handle is empty");
160
161   BaseObject& handle = widget.GetBaseObject();
162
163   return static_cast<Internal::Adaptor::Widget&>(handle);
164 }
165
166 inline const Widget& GetImplementation(const Dali::Widget& widget)
167 {
168   DALI_ASSERT_ALWAYS(widget && "widget handle is empty");
169
170   const BaseObject& handle = widget.GetBaseObject();
171
172   return static_cast<const Internal::Adaptor::Widget&>(handle);
173 }
174
175 } // namespace Adaptor
176
177 } // namespace Internal
178
179 } // namespace Dali
180 #endif // __DALI_INTERNAL_WIDGET_H__