name: "popupWithCheck";
parts {
part {
- name: "bg";
- type: RECT;
- scale : 1;
+ name: "pad_t";
+ type: SPACER;
+ scale: 1;
description {
state: "default" 0.0;
+ align: 0.5 0.0;
+ min: 0 32;
+ fixed: 0 1;
+ rel1 { relative: 1.0 0.0;to_x: "pad_l"; }
+ rel2 { relative: 0.0 0.0;to_x: "pad_r"; }
+ }
+ }
+ part {
+ name: "pad_l";
+ type: SPACER;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: 26 0;
+ max: 26 0;
+ fixed: 1 0;
+ rel1 { relative: 0.0 0.0; }
+ rel2 { relative: 0.0 1.0; }
align: 0.0 0.0;
- min: 0 230;
- visible: 0;
+ }
+ }
+ part {
+ name: "pad_r";
+ type: SPACER;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: 26 0;
+ max: 26 0;
+ fixed: 1 0;
+ rel1 { relative: 1.0 0.0; }
+ rel2 { relative: 1.0 1.0; }
+ align: 1.0 0.0;
+ }
+ }
+ part {
+ name:"elm.swallow.label";
+ type: SWALLOW;
+ scale : 1;
+ description {
+ state: "default" 0.0;
+ fixed: 1 0;
rel1 {
- relative: 0.0 0.0;
+ relative: 1.0 1.0;
+ to_x: "pad_l";
+ to_y: "pad_t";
}
rel2 {
- relative: 1.0 1.0;
+ relative: 0.0 0.0;
+ to_x: "pad_r";
+ to_y: "pad_b";
}
}
}
- part{
- name:"elm.swallow.label";
- type: SWALLOW;
- scale : 1;
+ part {
+ name: "bottom_pad";
+ type: SPACER;
+ scale: 1;
description {
state: "default" 0.0;
- align: 0.0 0.0;
- fixed: 1 1;
- rel1 { relative: 0.05 0.05; to: "bg"; }
- rel2 { relative: 0.95 0.8; to: "bg"; }
+ align: 0.0 1.0;
+ min: 0 32;
+ fixed: 0 1;
+ rel1 { relative: 1.0 1.0; to_x: "pad_l"; }
+ rel2 { relative: 0.0 1.0; to_x: "pad_r"; }
}
}
- part{
- name:"elm.swallow.checkbox";
+ part {
+ name: "pad_b";
+ type: SPACER;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ align: 0.0 1.0;
+ min: 0 84;
+ fixed: 0 1;
+ rel1 { relative: 0.0 0.0; to: "bottom_pad"; }
+ rel2 { relative: 1.0 0.0; to: "bottom_pad"; }
+ }
+ }
+ part {
+ name: "end_field";
+ type: SPACER;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ align: 0.0 1.0;
+ min: 0 63;
+ fixed: 0 1;
+ rel1 { relative: 0.0 1.0; to: "pad_b"; }
+ rel2 { relative: 0.0 1.0; to: "pad_b"; }
+ }
+ }
+ part {
+ name: "elm.swallow.checkbox";
type: SWALLOW;
- scale : 1;
+ scale: 1;
description {
state: "default" 0.0;
- visible: 1;
- align: 0.0 0.0;
fixed: 1 1;
- rel1 { relative: 0.1 0.8; to: "bg"; }
- rel2 { relative: 0.1 0.8; to: "bg"; }
+ align: 0.0 0.5;
+ rel1.to: "end_field";
+ rel2.to: "end_field";
}
}
} //end of parts
#include <Evas.h>
#include <Elementary.h>
#include <dpl/log/log.h>
+#include <dpl/log/secure_log.h>
+#include <dpl/unused.h>
#include <dpl/assert.h>
#include <dpl/wrt-dao-ro/common_dao_types.h>
#include <wrt-commons/certificate-dao/certificate_dao.h>
#include <common/view_logic_get_parent_window_util.h>
namespace ViewModule {
+namespace {
+const double MAX_POPUP_HEIGHT = 0.80;
+const double MAX_SCROLLER_HEIGHT = 0.5;
+
+struct CallbackData {
+ Evas_Smart_Cb eaKeyCallback;
+};
+
+static void deleteCallback(void* data, Evas* e, Evas_Object* obj, void* eventInfo);
+static void resizeCallback(void* data, Evas* e, Evas_Object* obj, void* eventInfo);
+
+static void deleteCallback(void* data, Evas* e, Evas_Object* obj, void* eventInfo)
+{
+ _D("called");
+
+ DPL_UNUSED_PARAM(data);
+ DPL_UNUSED_PARAM(e);
+ DPL_UNUSED_PARAM(eventInfo);
+
+ Assert(obj);
+ evas_object_event_callback_del(obj, EVAS_CALLBACK_RESIZE, resizeCallback);
+}
+static void resizeCallback(void* data, Evas* e, Evas_Object* obj, void* eventInfo)
+{
+ _D("called");
+
+ DPL_UNUSED_PARAM(data);
+ DPL_UNUSED_PARAM(e);
+ DPL_UNUSED_PARAM(eventInfo);
+
+ Assert(obj);
+ Evas_Object* popup = obj;
+ int popupH;
+ evas_object_geometry_get(popup, 0, 0, 0, &popupH);
+
+ Evas_Object* parent = PopupUtil::getParentWindow(popup);
+ int parentW, parentH;
+ evas_object_geometry_get(parent, 0, 0, &parentW, &parentH);
+
+ // compare current popup height with screen height.
+ // To avoid popup is filled full screen, used magic number to be filled 80% of screen height.
+ // TODO: Automatically add scroller feature should implement in the elementary
+ double threshold = parentH * MAX_POPUP_HEIGHT;
+ double currentH = popupH;
+ if (threshold < currentH) {
+ _D("text is overflow popup height. add scroller");
+ Evas_Object* layout = elm_object_content_get(obj);
+ Evas_Object* label = elm_object_part_content_get(layout, "elm.swallow.label");
+
+ Evas_Object* scroller = elm_scroller_add(layout);
+ elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_ON, ELM_SCROLLER_POLICY_AUTO);
+ evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ elm_scroller_content_min_limit(scroller, EINA_TRUE, EINA_TRUE);
+ int scrollerHeight = parentW > parentH ? parentH : parentW;
+ evas_object_size_hint_max_set(scroller, -1, scrollerHeight * MAX_SCROLLER_HEIGHT);
+
+ elm_object_part_content_unset(layout, "elm.swallow.label");
+ elm_object_content_set(scroller, label);
+ elm_object_part_content_set(layout, "elm.swallow.label", scroller);
+ evas_object_show(layout);
+ }
+}
+}
class CertificateSupportImplementation
{
Evas_Object* parentWindow = PopupUtil::getParentWindow(window);
Evas_Object* popup = elm_popup_add(parentWindow);
+
+ evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL, deleteCallback, NULL);
+ evas_object_event_callback_add(popup, EVAS_CALLBACK_RESIZE, resizeCallback, NULL);
+
elm_object_style_set(popup, "popup/default");
- evas_object_size_hint_weight_set(popup,
- EVAS_HINT_EXPAND,
- EVAS_HINT_EXPAND);
+ evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(popup, EVAS_HINT_FILL, EVAS_HINT_FILL);
Evas_Object* layout = elm_layout_add(popup);
elm_layout_file_set(layout, WRT_EDJ_PATH, "popupWithCheck");
- evas_object_size_hint_weight_set(layout,
- EVAS_HINT_EXPAND,
- EVAS_HINT_EXPAND);
-
- Evas_Object* scroller = elm_scroller_add(layout);
- elm_scroller_policy_set(scroller,
- ELM_SCROLLER_POLICY_OFF,
- ELM_SCROLLER_POLICY_AUTO);
+ evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
- Evas_Object* label = elm_label_add(scroller);
+ Evas_Object* label = elm_label_add(popup);
elm_label_line_wrap_set(label, ELM_WRAP_WORD);
elm_object_text_set(label, bodyText);
+ evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL);
- Evas_Object* check = elm_check_add(scroller);
+ Evas_Object* check = elm_check_add(layout);
elm_object_text_set(check, checkText);
- evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- elm_object_part_content_set(layout, "elm.swallow.checkbox", check);
- elm_object_content_set(scroller, label);
- elm_object_part_content_set(layout, "elm.swallow.label", scroller);
+ elm_object_part_content_set(layout, "elm.swallow.label", label);
+ elm_object_part_content_set(layout, "elm.swallow.checkbox", check);
elm_object_content_set(popup, layout);
Evas_Object* btn1 = elm_button_add(popup);
namespace ViewModule {
namespace {
+const double MAX_POPUP_HEIGHT = 0.80;
+const double MAX_SCROLLER_HEIGHT = 0.5;
+
struct CallbackData {
Evas_Smart_Cb eaKeyCallback;
};
static void deleteCallback(void* data, Evas* e, Evas_Object* obj, void* eventInfo);
+static void resizeCallback(void* data, Evas* e, Evas_Object* obj, void* eventInfo);
+
static void deleteCallback(void* data, Evas* e, Evas_Object* obj, void* eventInfo)
{
+ _D("called");
+
DPL_UNUSED_PARAM(e);
DPL_UNUSED_PARAM(eventInfo);
- Assert(data);
CallbackData* callbackData = static_cast<CallbackData*>(data);
Assert(obj);
- ea_object_event_callback_del(obj, EA_CALLBACK_BACK, callbackData->eaKeyCallback);
- delete callbackData;
+ if (callbackData) {
+ ea_object_event_callback_del(obj, EA_CALLBACK_BACK, callbackData->eaKeyCallback);
+ delete callbackData;
+ }
+ evas_object_event_callback_del(obj, EVAS_CALLBACK_RESIZE, resizeCallback);
+}
+static void resizeCallback(void* data, Evas* e, Evas_Object* obj, void* eventInfo)
+{
+ _D("called");
+
+ DPL_UNUSED_PARAM(data);
+ DPL_UNUSED_PARAM(e);
+ DPL_UNUSED_PARAM(eventInfo);
+
+ Assert(obj);
+ Evas_Object* popup = obj;
+ int popupH;
+ evas_object_geometry_get(popup, 0, 0, 0, &popupH);
+
+ Evas_Object* parent = PopupUtil::getParentWindow(popup);
+ int parentW, parentH;
+ evas_object_geometry_get(parent, 0, 0, &parentW, &parentH);
+
+ // compare current popup height with screen height.
+ // To avoid popup is filled full screen, used magic number to be filled 80% of screen height.
+ // TODO: Automatically add scroller feature should implement in the elementary
+ double threshold = parentH * MAX_POPUP_HEIGHT;
+ double currentH = popupH;
+ if (threshold < currentH) {
+ _D("text is overflow popup height. add scroller");
+ Evas_Object* layout = elm_object_content_get(obj);
+ Evas_Object* label = elm_object_part_content_get(layout, "elm.swallow.label");
+
+ Evas_Object* scroller = elm_scroller_add(layout);
+ elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_ON, ELM_SCROLLER_POLICY_AUTO);
+ evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ elm_scroller_content_min_limit(scroller, EINA_TRUE, EINA_TRUE);
+ int scrollerHeight = parentW > parentH ? parentH : parentW;
+ evas_object_size_hint_max_set(scroller, -1, scrollerHeight * MAX_SCROLLER_HEIGHT);
+
+ elm_object_part_content_unset(layout, "elm.swallow.label");
+ elm_object_content_set(scroller, label);
+ elm_object_part_content_set(layout, "elm.swallow.label", scroller);
+ evas_object_show(layout);
+ }
}
}
Evas_Object* parentWindow = PopupUtil::getParentWindow(window);
Evas_Object* popup = elm_popup_add(parentWindow);
+ CallbackData* callbackData = NULL;
if (keyCallback) {
CallbackData* callbackData = new CallbackData;
callbackData->eaKeyCallback = keyCallback;
-
ea_object_event_callback_add(popup, EA_CALLBACK_BACK, keyCallback, data);
- evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL, deleteCallback, static_cast<void*>(callbackData));
}
+ evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL, deleteCallback, static_cast<void*>(callbackData));
+ evas_object_event_callback_add(popup, EVAS_CALLBACK_RESIZE, resizeCallback, NULL);
elm_object_style_set(popup, "popup/default");
- evas_object_size_hint_weight_set(popup,
- EVAS_HINT_EXPAND,
- EVAS_HINT_EXPAND);
+ evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(popup, EVAS_HINT_FILL, EVAS_HINT_FILL);
Evas_Object* layout = elm_layout_add(popup);
elm_layout_file_set(layout, WRT_EDJ_PATH, "popupWithCheck");
- evas_object_size_hint_weight_set(layout,
- EVAS_HINT_EXPAND,
- EVAS_HINT_EXPAND);
-
- Evas_Object* scroller = elm_scroller_add(layout);
- elm_scroller_policy_set(scroller,
- ELM_SCROLLER_POLICY_OFF,
- ELM_SCROLLER_POLICY_AUTO);
+ evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
- Evas_Object* label = elm_label_add(scroller);
+ Evas_Object* label = elm_label_add(popup);
elm_label_line_wrap_set(label, ELM_WRAP_WORD);
elm_object_text_set(label, bodyText);
+ evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL);
- Evas_Object* check = elm_check_add(scroller);
+ Evas_Object* check = elm_check_add(layout);
elm_object_text_set(check, checkText);
- evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- elm_object_part_content_set(layout, "elm.swallow.checkbox", check);
- elm_object_content_set(scroller, label);
- elm_object_part_content_set(layout, "elm.swallow.label", scroller);
+ elm_object_part_content_set(layout, "elm.swallow.label", label);
+ elm_object_part_content_set(layout, "elm.swallow.checkbox", check);
elm_object_content_set(popup, layout);
Evas_Object* btn1 = elm_button_add(popup);