Changed SharedPtr to std:shared_ptr.
[framework/web/wrt-commons.git] / modules / popup / include / dpl / popup / 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 <dpl/popup/popup.h>
35
36 namespace DPL {
37 namespace Popup {
38
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   protected:
49     class Popup;
50     typedef std::shared_ptr<Popup> PopupPtr;
51
52     class Popup : public IPopup
53     {
54       public:
55         typedef std::map<int, std::string> ButtonMap;
56         virtual void SetTitle(const std::string &title)
57         {
58             LogDebug(title);
59             Assert(m_title.empty());
60             m_title = title;
61         }
62
63         virtual void Append(PopupObject::IPopupObject *object)
64         {
65             m_popupObjectList.push_back(object);
66         }
67
68         virtual void Show(IPopup::PopupCallbackType callback,
69                 void* data)
70         {
71             Assert(callback);
72             m_data = data;
73             m_callback = callback;
74             m_renderer->Render(std::static_pointer_cast<Popup>(shared_from_this()));
75         }
76
77         const std::string& GetTitle() const
78         {
79             return m_title;
80         }
81
82         PopupObject::PopupObjects& GetPopupObjects()
83         {
84             return m_popupObjectList;
85         }
86
87         virtual ~Popup()
88         {
89             FOREACH(it, m_popupObjectList) {
90                 delete *it;
91             }
92         }
93
94       private:
95         friend class PopupRenderer;
96         friend class std::shared_ptr<Popup>;
97         friend class PopupObjectTheme;
98
99         Popup(std::shared_ptr<PopupRenderer> renderer) : m_renderer(renderer)
100         {
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 DPL
126
127 #endif //WRT_SRC_POPUP_POPUP_RENDERER_H_