[4.0] Create Widget Application
[platform/core/uifw/dali-adaptor.git] / adaptors / common / 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 <utility>
24 #include <dali/public-api/common/vector-wrapper.h>
25 #include <widget_base.h>
26
27 // INTERNAL INCLUDES
28 #include <widget.h>
29 #include <widget-application.h>
30 #include <widget-application-impl.h>
31 #include <window.h>
32
33 namespace Dali
34 {
35
36 namespace Internal
37 {
38
39 namespace Adaptor
40 {
41 class Widget;
42 typedef IntrusivePtr<Widget> WidgetPtr;
43
44 /**
45  * Implementation of the Application class.
46  */
47 class Widget : public BaseObject
48 {
49 public:
50   typedef Dali::Widget::WidgetCreateSignalType    WidgetCreateSignalType;
51   typedef Dali::Widget::WidgetTerminateSignalType WidgetTerminateSignalType;
52   typedef Dali::Widget::WidgetPauseSignalType     WidgetPauseSignalType;
53   typedef Dali::Widget::WidgetResumeSignalType    WidgetResumeSignalType;
54   typedef Dali::Widget::WidgetResizeSignalType    WidgetResizeSignalType;
55   typedef Dali::Widget::WidgetUpdateSignalType    WidgetUpdateSignalType;
56
57   /**
58    * Create a new Widget
59    * @param[in]  application  WidgetApplication for managing widget instance
60    * @param[in]  id           Id for widget class
61    */
62   static Dali::Widget New( const std::string& id );
63
64 public:  // Signals
65
66   /**
67    * @copydoc Dali::Widget::InitSignal()
68    */
69   WidgetCreateSignalType& CreateSignal(){ return mCreateSignal; }
70
71   /**
72    * @copydoc Dali::Widget::TerminateSignal()
73    */
74   WidgetTerminateSignalType& TerminateSignal(){ return mTerminateSignal; }
75
76   /**
77    * @copydoc Dali::Widget::PauseSignal()
78    */
79   WidgetPauseSignalType& PauseSignal(){ return mPauseSignal; }
80
81   /**
82    * @copydoc Dali::Widget::ResumeSignal()
83    */
84   WidgetResumeSignalType& ResumeSignal(){ return mResumeSignal; }
85
86   /**
87    * @copydoc Dali::Widget::ResizeSignal()
88    */
89   WidgetResizeSignalType& ResizeSignal(){ return mResizeSignal; }
90
91   /**
92    * @copydoc Dali::Widget::UpdateSignal()
93    */
94   WidgetUpdateSignalType& UpdateSignal(){ return mUpdateSignal; }
95
96 protected:
97
98   /**
99    * Private Constructor
100    * @param[in]  id           Id for widget class
101    */
102   Widget( const std::string& id );
103
104   /**
105    * Destructor
106    */
107   virtual ~Widget();
108
109   // Undefined
110   Widget(const Widget&);
111   Widget& operator=(Widget&);
112
113 public:
114
115   WidgetCreateSignalType        mCreateSignal;
116   WidgetTerminateSignalType     mTerminateSignal;
117   WidgetPauseSignalType         mPauseSignal;
118   WidgetResumeSignalType        mResumeSignal;
119   WidgetResizeSignalType        mResizeSignal;
120   WidgetUpdateSignalType        mUpdateSignal;
121   const std::string             mClassId;
122
123 private:
124   SlotDelegate< Widget >                mSlotDelegate;
125 };
126
127 inline Widget& GetImplementation(Dali::Widget& widget)
128 {
129   DALI_ASSERT_ALWAYS(widget && "widget handle is empty");
130
131   BaseObject& handle = widget.GetBaseObject();
132
133   return static_cast<Internal::Adaptor::Widget&>(handle);
134 }
135
136 inline const Widget& GetImplementation(const Dali::Widget& widget)
137 {
138   DALI_ASSERT_ALWAYS(widget && "widget handle is empty");
139
140   const BaseObject& handle = widget.GetBaseObject();
141
142   return static_cast<const Internal::Adaptor::Widget&>(handle);
143 }
144
145 } // namespace Adaptor
146
147 } // namespace Internal
148
149 } // namespace Dali
150 #endif // __DALI_INTERNAL_WIDGET_H__