[Release] wrt-installer_0.0.73
[framework/web/wrt-installer.git] / src / jobs / widget_install / widget_install_popup.cpp
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    widget_install_popup.cpp
18  * @author  lke01.lee (lke01.lee@samsung.com)
19  * @version 1.0
20  * @brief   Implementation file for installer popup
21  */
22 #include <dpl/log/log.h>
23 #include <widget_install/job_widget_install.h>
24 #include <widget_install/widget_install_errors.h>
25 #include <widget_install/widget_install_context.h>
26 #include <widget_install_popup.h>
27
28 namespace {
29 const char * const EDJFILE ="/usr/share/edje/wrt/widget_install_popup.edj";
30 const char * const EDJGROUP = "widget_install_popup";
31 const char * const TITLE_TEXT  ="title,text";
32 const char * const name ="WidgetInstallPopup";
33 const char * const FEATURE_TITLE = "Widget Feature Info";
34 const char * const INFO_TITLE = "Widget Info";
35 const char * const INSTALLATION_FAILURE = "Installation failure";
36 const char * const INFO_LEFT_BUTTON ="OK";
37 const char * const INFO_RIGHT_BUTTON = "CANCEL ";
38 const char * const WARNING_TITLE = "Widget Warning";
39 const char * const WARNING_LEFT_BUTTON = "YES";
40 const char * const WARNING_RIGHT_BUTTON = "NO";
41 const char * const QUESTION ="Widget use Device API below. <br>Do you want to install?";
42 }
43
44 namespace Jobs {
45 namespace WidgetInstall {
46 WidgetInstallPopup::WidgetInstallPopup(InstallerContext &installContext) :
47     m_win(NULL),
48     m_popup(NULL),
49     m_installContext(installContext),
50     m_installCancel(WRT_POPUP_BUTTON)
51 {
52     LogDebug("InstallPopup");
53 }
54
55 WidgetInstallPopup::~WidgetInstallPopup()
56 {
57     LogDebug("~InstallPopup");
58 }
59
60 bool WidgetInstallPopup::addWin(const char *name)
61 {
62     int w, h;
63     m_win = elm_win_add(NULL, name, ELM_WIN_DIALOG_BASIC);
64     if(!m_win)
65     {
66         LogError("addWin failed");
67         return false;
68     }
69
70     elm_win_alpha_set(m_win, EINA_TRUE);
71     elm_win_title_set(m_win, name);
72     elm_win_borderless_set(m_win, EINA_TRUE);
73     elm_win_raise(m_win);
74
75     ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h);
76     evas_object_resize(m_win, w, h);
77     return true;
78 }
79
80 bool WidgetInstallPopup::addPopup()
81 {
82     m_popup = elm_popup_add(m_win);
83     if(!m_popup)
84         return false;
85
86     evas_object_size_hint_align_set(m_popup, EVAS_HINT_FILL, EVAS_HINT_FILL);
87     evas_object_size_hint_weight_set(m_popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
88     return true;
89 }
90
91 void WidgetInstallPopup::addTitle(PopupType type)
92 {
93     switch (type) {
94     case PopupType::WIDGET_FEATURE_INFO :
95         elm_object_part_text_set(m_popup, TITLE_TEXT, FEATURE_TITLE);
96     break;
97     case PopupType::WIDGET_AUTHOR_INFO :
98         elm_object_part_text_set(m_popup, TITLE_TEXT, INFO_TITLE);
99     break;
100     case PopupType::WIDGET_MIN_VERSION :
101     case PopupType::WIDGET_UNRECOGNIZED :
102         elm_object_part_text_set(m_popup, TITLE_TEXT, WARNING_TITLE);
103     break;
104     case PopupType::WIDGET_WRONG_FEATURE_INFO :
105         elm_object_part_text_set(m_popup, TITLE_TEXT, INSTALLATION_FAILURE);
106     break;
107     default :
108     break;
109 }
110 }
111
112 void WidgetInstallPopup::addScrollLabel(const std::string &str)
113 {
114     Evas_Object *ly = elm_layout_add(m_popup);
115     if (!ly)
116     {
117         LogError(" install popup layout add failed");
118         return;
119     }
120     elm_layout_file_set(ly, EDJFILE, "popup");
121     evas_object_size_hint_align_set(ly, EVAS_HINT_FILL, EVAS_HINT_FILL);
122     evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
123     evas_object_show(ly);
124     elm_object_content_set(m_popup, ly);
125
126     Evas_Object *question_label = elm_label_add(m_popup);
127     if(!question_label)
128         return;
129     evas_object_size_hint_align_set(question_label, EVAS_HINT_FILL, EVAS_HINT_FILL);
130     evas_object_size_hint_weight_set(question_label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
131     evas_object_show(question_label);
132     elm_object_text_set(question_label, QUESTION);
133     elm_object_part_content_set(ly, "elm.swallow.label", question_label);
134
135     Evas_Object *scroller = elm_scroller_add(m_popup);
136     if(!scroller)
137         return;
138     evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
139     evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
140     elm_scroller_bounce_set(scroller, EINA_TRUE, EINA_TRUE);
141     elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_AUTO, ELM_SCROLLER_POLICY_AUTO);
142
143     elm_object_part_content_set(ly, "elm.swallow.scroller", scroller);
144     evas_object_show(scroller);
145
146     Evas_Object *feature_label = elm_label_add(m_popup);
147     if(!feature_label)
148         return;
149     evas_object_size_hint_align_set(feature_label, EVAS_HINT_FILL, EVAS_HINT_FILL);
150     evas_object_size_hint_weight_set(feature_label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
151     evas_object_show(feature_label);
152     elm_object_text_set(feature_label, str.c_str());
153     elm_object_content_set(scroller, feature_label);
154 }
155
156 void WidgetInstallPopup::addContent(PopupType  type, const std::string &str)
157 {
158     switch (type) {
159     case PopupType::WIDGET_FEATURE_INFO :
160         addScrollLabel(str);
161     break;
162     default :
163         elm_object_part_text_set(m_popup, "default", str.c_str());
164     break;
165     }
166 }
167
168 void WidgetInstallPopup::addButton(PopupType  type)
169 {
170     Evas_Object *lbutton = elm_button_add(m_popup);
171     Evas_Object *rbutton = elm_button_add(m_popup);
172     if(!lbutton || !rbutton)
173         return;
174
175     switch (type) {
176         case PopupType::WIDGET_WRONG_FEATURE_INFO :
177             elm_object_text_set(lbutton, INFO_LEFT_BUTTON);
178             elm_object_part_content_set(m_popup, "button1", lbutton);
179             evas_object_smart_callback_add(lbutton,
180                     "clicked",
181                     userCancelCallback,
182                     this);
183             return;
184         case PopupType::WIDGET_FEATURE_INFO :
185             elm_object_text_set(lbutton, INFO_LEFT_BUTTON);
186             elm_object_text_set(rbutton, INFO_RIGHT_BUTTON);
187             break;
188         default :
189             elm_object_text_set(lbutton, WARNING_LEFT_BUTTON);
190             elm_object_text_set(rbutton, WARNING_RIGHT_BUTTON);
191             break;
192     }
193
194     elm_object_part_content_set(m_popup, "button1", lbutton);
195     evas_object_smart_callback_add(lbutton,
196             "clicked",
197             userPermitCallback,
198             this);
199     elm_object_part_content_set(m_popup, "button2", rbutton);
200     evas_object_smart_callback_add(rbutton,
201             "clicked",
202             userCancelCallback,
203             this);
204 }
205
206 bool WidgetInstallPopup::createPopup()
207 {
208     bool ret = addWin(name);
209     if(!ret)
210         return false;
211     evas_object_show(m_win);
212
213     ret = addPopup();
214     if(!ret)
215     {
216         evas_object_del(m_win);
217         m_win = NULL;
218         return false;
219     }
220
221     return true;
222 }
223
224 void WidgetInstallPopup::destroyPopup()
225 {
226     if(m_win) {
227             evas_object_del(m_win);
228             m_win = NULL;
229             m_popup = NULL;
230         }
231 }
232
233 void WidgetInstallPopup::loadPopup(PopupType type, const std::string &label)
234 {
235     addTitle(type);
236     addContent(type, label);
237     addButton(type);
238 }
239
240 void WidgetInstallPopup::showPopup()
241 {
242     evas_object_show(m_popup);
243 }
244
245 void WidgetInstallPopup::userPermitCallback(void * data,
246         Evas_Object */*obj*/,
247         void */*event_info*/)
248 {
249     WidgetInstallPopup *This = static_cast<WidgetInstallPopup *>(data);
250     This->m_installCancel = WRT_POPUP_BUTTON_OK;
251     This->m_installContext.job->Resume();
252 }
253
254 void WidgetInstallPopup::userCancelCallback(void *data,
255         Evas_Object */*obj*/,
256         void */*event_info*/)
257 {
258     WidgetInstallPopup *This = static_cast<WidgetInstallPopup *>(data);
259     This->m_installCancel = WRT_POPUP_BUTTON_CANCEL;
260     This->m_installContext.job->Resume();
261 }
262 }
263 }
264
265