Initialize Tizen 2.3
[framework/web/wrt-plugins-common.git] / src_mobile / wrt-popup / wrt / popup-bin / renderer / popup_renderer.h
1 /*
2  * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
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  * @file        popup_renderer.h
18  * @author      Lukasz Wrzosek (l.wrzosek@samsung.com)
19  * @version     1.0
20  * @brief       This is declaration file of PopupRenderer
21  */
22
23 #ifndef WRT_SRC_POPUP_POPUP_RENDERER_H_
24 #define WRT_SRC_POPUP_POPUP_RENDERER_H_
25
26 #include <map>
27 #include <string>
28 #include <memory>
29
30 #include <dpl/noncopyable.h>
31 #include <dpl/log/log.h>
32 #include <dpl/assert.h>
33 #include <dpl/foreach.h>
34 #include "popup.h"
35
36 namespace Wrt {
37 namespace Popup {
38 namespace Renderer {
39 class PopupRenderer : public std::enable_shared_from_this<PopupRenderer>
40 {
41   public:
42     PopupRenderer();
43     ~PopupRenderer();
44     void Initialize();
45     void Deinitialize();
46     IPopupPtr CreatePopup();
47     virtual void setExternalCanvas(void* externalCanvas);
48
49   protected:
50     class Popup;
51     typedef std::shared_ptr<Popup> PopupPtr;
52
53     class Popup : public IPopup
54     {
55       public:
56         typedef std::map<int, std::string> ButtonMap;
57         virtual void SetTitle(const std::string &title)
58         {
59             LogDebug(title);
60             Assert(m_title.empty());
61             m_title = title;
62         }
63
64         virtual void Append(PopupObject::IPopupObject *object)
65         {
66             m_popupObjectList.push_back(object);
67         }
68
69         virtual void Show(IPopup::PopupCallbackType callback,
70                           void* data)
71         {
72             Assert(callback);
73             m_data = data;
74             m_callback = callback;
75             m_renderer->Render(std::static_pointer_cast<Popup>(shared_from_this()));
76         }
77
78         const std::string& GetTitle() const
79         {
80             return m_title;
81         }
82
83         PopupObject::PopupObjects& GetPopupObjects()
84         {
85             return m_popupObjectList;
86         }
87
88         virtual ~Popup()
89         {
90             FOREACH(it, m_popupObjectList) {
91                 delete *it;
92             }
93         }
94
95       private:
96         friend class PopupRenderer;
97         friend class std::shared_ptr<Popup>;
98         friend class PopupObjectTheme;
99
100         Popup(std::shared_ptr<PopupRenderer> renderer) : m_renderer(renderer)
101         {}
102
103         void ForwardAnswer(const AnswerCallbackData & answer) const
104         {
105             m_callback(answer, m_data);
106         }
107
108         std::string m_title;
109         void* m_data;
110         IPopup::PopupCallbackType m_callback;
111         PopupObject::PopupObjects m_popupObjectList;
112         std::shared_ptr<PopupRenderer> m_renderer;
113     };
114
115   private:
116     void Render (PopupPtr popup);
117
118     class Impl;
119     Impl* m_impl;
120 };
121
122 typedef std::shared_ptr<PopupRenderer> PopupRendererPtr;
123 }
124 } // namespace Popup
125 } // namespace Wrt
126
127 #endif //WRT_SRC_POPUP_POPUP_RENDERER_H_