Status bar information popup in cpp style 03/197703/12
authorOskar Chodowicz <o.chodowicz@samsung.com>
Tue, 15 Jan 2019 15:32:18 +0000 (16:32 +0100)
committerOskar Chodowicz <o.chodowicz@samsung.com>
Mon, 11 Feb 2019 11:04:57 +0000 (12:04 +0100)
This patch edit status bar information and its components
(without genlist's items) to cpp style

Change-Id: Iebc1548f86719eb11010be59d23a662c7c638303

src/Box.cpp
src/Box.hpp
src/Genlist.cpp
src/Genlist.hpp
src/ScreenReaderSettingsPage.cpp
src/ScreenReaderSettingsPage.hpp
src/Scroller.hpp
src/Widget.cpp
src/Widget.hpp

index bfe6204..f5fc620 100644 (file)
@@ -5,3 +5,8 @@ Box::Box(Widget *parent)
 {
        uniqueObj_.reset(elm_box_add(parent->getObject()));
 }
+
+void Box::packEnd(Widget * widget)
+{
+       elm_box_pack_end(uniqueObj_.get(), widget->getObject());
+}
index 637206e..4d096e9 100644 (file)
@@ -3,10 +3,11 @@
 
 #include "Widget.hpp"
 
-class Box : public Widget, public std::enable_shared_from_this<Box>
+class Box : public Widget
 {
 public:
        Box(Widget *parent);
+       void packEnd(Widget * widget);
 };
 
 #endif
index 28bfb2f..c4392e7 100644 (file)
@@ -1,9 +1,10 @@
 #include "Genlist.hpp"
 
 Genlist::Genlist(Widget *parent)
-       : Widget(parent)
+       : Scroller()
 {
        uniqueObj_.reset(elm_genlist_add(parent->getObject()));
+       parent_ = parent;
 }
 
 void Genlist::setMode(Elm_List_Mode mode)
index b63bbeb..86e1a39 100644 (file)
@@ -1,9 +1,9 @@
 #ifndef GENLIST_HPP
 #define GENLIST_HPP
 
-#include "Widget.hpp"
+#include "Scroller.hpp"
 
-class Genlist : public Widget, public std::enable_shared_from_this<Genlist>
+class Genlist : public Scroller
 {
 public:
        Genlist(Widget *parent);
index 5b1b533..62a78ff 100644 (file)
@@ -22,6 +22,8 @@
 #include "Slider.hpp"
 #include "Layout.hpp"
 #include "Button.hpp"
+#include "Box.hpp"
+#include "Genlist.hpp"
 
 #include <vconf.h>
 #include <vconf-internal-keys.h>
@@ -37,7 +39,7 @@ namespace
                Eina_Bool status = EINA_FALSE;
        };
 
-       VConfCheckData vConfCheckData[] = {
+       std::vector<VConfCheckData> vConfCheckData = {
                { "IDS_ST_HEADER_TIME", VCONFKEY_SETAPPL_ACCESSIBILITY_TTS_INDICATOR_INFORMATION_TIME },
                { "IDS_ST_BODY_DATE", VCONFKEY_SETAPPL_ACCESSIBILITY_TTS_INDICATOR_INFORMATION_DATE },
                { "IDS_ST_BODY_BATTERY", VCONFKEY_SETAPPL_ACCESSIBILITY_TTS_INDICATOR_INFORMATION_BATTERY },
@@ -229,40 +231,32 @@ void ScreenReaderSettingsPage::mouseUpGendialListCb(void *data, Evas_Object *obj
        Elm_Object_Item *item = (Elm_Object_Item *)event_info;
        auto self = static_cast<ScreenReaderSettingsPage *>(data);
 
-       Evas_Object *box;
-       Evas_Object *genlist;
-       GenGroupItemData *screenreader_checkbox = NULL;
-       int i;
-       int size = utils::lenOf(vConfCheckData);
-
        elm_genlist_item_selected_set(item, EINA_FALSE);
 
-       self->popup_ = Widget::make<Popup>(self->context_->md.getWindow());
-       self->popup_->setAlignment(ELM_NOTIFY_ALIGN_FILL, 1.0);
-
-       /* eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK,
-        *  eext_popup_back_cb, NULL); */
+       auto window = self->context_->md.getWindow();
 
+       self->popup_ = Widget::make<Popup>(window);
+       self->popup_->setAlignment(ELM_NOTIFY_ALIGN_FILL, 1.0);
        self->popup_->setPartText("title,text", "IDS_ACCS_TMBODY_STATUS_BAR_INFORMATION");
        self->popup_->setWeightHint(EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
 
-       /* box */
-       box = elm_box_add(self->popup_->getObject());
-       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND,
-                                                                        EVAS_HINT_EXPAND);
+       auto removeCb = [p = self->popup_, window]() {
+               window->removeChild(p);
+       };
+       self->popup_->setEextEventCallback(EEXT_CALLBACK_BACK, removeCb);
+
+       auto box = Widget::make<Box>(self->popup_);
+       box->setWeightHint(EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
 
-       /* genlist */
-       genlist = elm_genlist_add(box);
-       evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND,
-                                                                        EVAS_HINT_EXPAND);
-       evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL,
-                                                                       EVAS_HINT_FILL);
+       auto genlist = Widget::make<Genlist>(box);
+       genlist->setWeightHint(EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       genlist->setAlignHint(EVAS_HINT_FILL, EVAS_HINT_FILL);
 
-       for (i = 0; i < size; ++i) {
+       for (auto i = 0u; i < vConfCheckData.size(); ++i) {
                auto status = vconfValueGet(vConfCheckData[i].vconf_key.c_str());
 
-               screenreader_checkbox = createGendialGroupItem(
-                                                                       genlist, &itc_1text_1icon,
+               auto screenreader_checkbox = createGendialGroupItem(
+                                                                       genlist->getObject(), &itc_1text_1icon,
                                                                        onListItemClicked, self->context_,
                                                                        SwallowType::ICON_RADIO, status,
                                                                        vConfCheckData[i].label,
@@ -272,34 +266,39 @@ void ScreenReaderSettingsPage::mouseUpGendialListCb(void *data, Evas_Object *obj
                items.push_back(screenreader_checkbox);
        }
 
-       elm_scroller_movement_block_set(genlist,
-                                                                       Elm_Scroller_Movement_Block(ELM_SCROLLER_MOVEMENT_BLOCK_VERTICAL | ELM_SCROLLER_MOVEMENT_BLOCK_HORIZONTAL));
-       elm_scroller_policy_set(genlist, ELM_SCROLLER_POLICY_OFF,
-                                                       ELM_SCROLLER_POLICY_OFF);
-
-       evas_object_show(genlist);
-       elm_box_pack_end(box, genlist);
-       evas_object_size_hint_min_set(box, -1,
-                                                                 ELM_SCALE_SIZE(POPUP_CONTENT_BASE_SIZE) * size);
-       evas_object_size_hint_max_set(box, -1,
-                                                                 ELM_SCALE_SIZE(POPUP_CONTENT_BASE_SIZE) * size);
-       elm_object_content_set(self->popup_->getObject(), box);
-
-       Evas_Object *btnCancel = WidgetFactory::createButton(self->popup_->getObject(), "IDS_MSG_ACBUTTON_CANCEL_ABB", {}, onCancelButtonClicked, self);
-       elm_object_style_set(btnCancel, "popup");
-       elm_object_part_content_set(self->popup_->getObject(), _("button1"), btnCancel);
-       evas_object_data_set(self->popup_->getObject(), "button1", "IDS_MSG_ACBUTTON_CANCEL_ABB");
-
-       Evas_Object *btnDone = WidgetFactory::createButton(self->popup_->getObject(), "IDS_MSG_ACBUTTON_DONE_ABB", {}, onDoneButtonClicked, self);
-       elm_object_style_set(btnDone, "popup");
-       elm_object_part_content_set(self->popup_->getObject(), _("button2"), btnDone);
-       evas_object_data_set(self->popup_->getObject(), "button2", "IDS_MSG_ACBUTTON_DONE_ABB");
-
-       auto removeCb = [p = self->popup_, window = self->context_->md.getWindow()]() {
-               window->removeChild(p);
+       genlist->blockScrolling(Elm_Scroller_Movement_Block(ELM_SCROLLER_MOVEMENT_BLOCK_VERTICAL | ELM_SCROLLER_MOVEMENT_BLOCK_HORIZONTAL));
+       genlist->setScrollbarsVisibility(ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
+       genlist->show();
+
+       box->packEnd(genlist);
+
+       box->setMinSizeHint(-1, ELM_SCALE_SIZE(POPUP_CONTENT_BASE_SIZE) * vConfCheckData.size());
+       box->setMaxSizeHint(-1, ELM_SCALE_SIZE(POPUP_CONTENT_BASE_SIZE) * vConfCheckData.size());
+       self->popup_->setContent(box);
+
+       auto btnCancel = Widget::make<Button>(self->popup_);
+       btnCancel->setStyle("popup");
+       btnCancel->setText("IDS_MSG_ACBUTTON_CANCEL_ABB");
+       btnCancel->setEvasSmartCallback("clicked", removeCb);
+       self->popup_->setPartContent("button1", btnCancel);
+
+       auto onDone = [removeCb]() {
+               removeCb();
+
+               for (auto vConfData : vConfCheckData) {
+                       auto status = vConfData.status;
+                       auto key = vConfData.vconf_key;
+                       if (int ret = vconf_set_bool(key.c_str(), status))
+                               LOGE("Failed to set vconf key %s. Error: %d", key.c_str(), ret);
+               }
        };
 
-       self->popup_->setEextEventCallback(EEXT_CALLBACK_BACK, removeCb);
+       auto btnDone = Widget::make<Button>(self->popup_);
+       btnDone->setStyle("popup");
+       btnDone->setText("IDS_MSG_ACBUTTON_DONE_ABB");
+       btnDone->setEvasSmartCallback("clicked", onDone);
+       self->popup_->setPartContent("button2", btnDone);
+
        self->popup_->show();
 }
 
@@ -539,42 +538,6 @@ void ScreenReaderSettingsPage::onCheckStateChanged(void *data, Evas_Object *obj,
        LOGE("Check changed: %s; status: %d, %p", item_data->keyStr.c_str(), item_data->chk_status, &item_data->chk_status);
 }
 
-void ScreenReaderSettingsPage::onDoneButtonClicked(void *data, Evas_Object *obj, void *event_info)
-{
-       auto self = static_cast<ScreenReaderSettingsPage *>(data);
-       auto p = self->popup_->getParent();
-       p->removeChild(self->popup_);
-
-       foreachVconfKeyCheckSet();
-}
-
-void ScreenReaderSettingsPage::onCancelButtonClicked(void *data, Evas_Object *obj, void *event_info)
-{
-       auto self = static_cast<ScreenReaderSettingsPage *>(data);
-       auto p = self->popup_->getParent();
-       p->removeChild(self->popup_);
-}
-
-void ScreenReaderSettingsPage::foreachVconfKeyCheckSet()
-{
-       for (auto i = 0u; i < utils::lenOf(vConfCheckData); ++i) {
-               auto status = vConfCheckData[i].status;
-               vconfKeyValueSet(vConfCheckData[i].vconf_key.c_str(), status);
-       }
-}
-
-void ScreenReaderSettingsPage::vconfKeyValueSet(const char *key, int value)
-{
-       retm_if(!key, "key == NULL");
-
-       int ret = vconf_set_bool(key, value);
-
-       if (ret != 0) {
-               LOGE("Failed to set vconf key %s. Error: %d", key, ret);
-               return;
-       }
-}
-
 Eina_Bool ScreenReaderSettingsPage::vconfValueGet(const char *key)
 {
        retvm_if(!key, EINA_FALSE, "Key is NULL");
index 5e806d3..f0e82e8 100644 (file)
@@ -59,10 +59,6 @@ private:
        static void onPopupDel(void *data, Evas *e, Evas_Object *obj, void *event_info);
        static void onListItemClicked(void *data, Evas_Object *obj, void *event_info);
        static void onCheckStateChanged(void *data, Evas_Object *obj, void *event_info);
-       static void onDoneButtonClicked(void *data, Evas_Object *obj, void *event_info);
-       static void onCancelButtonClicked(void *data, Evas_Object *obj, void *event_info);
-       static void foreachVconfKeyCheckSet();
-       static void vconfKeyValueSet(const char *key, int value);
        static Eina_Bool vconfValueGet(const char *key);
        static Eina_Bool hidePage(void *data, Elm_Object_Item *it);
 
index fab66d1..b08d027 100644 (file)
@@ -14,6 +14,8 @@ public:
        void setRelativeSize(double w, double h);
        void setPageScrollLimit(int h, int v);
 
+protected:
+       Scroller() = default;
 };
 
 #endif
index 382189c..f338e81 100644 (file)
@@ -26,6 +26,16 @@ void Widget::setAlignHint(double x, double y)
        evas_object_size_hint_align_set(uniqueObj_.get(), x, y);
 }
 
+void Widget::setMinSizeHint(Evas_Coord v, Evas_Coord h)
+{
+       evas_object_size_hint_min_set(uniqueObj_.get(), v, h);
+}
+
+void Widget::setMaxSizeHint(Evas_Coord v, Evas_Coord h)
+{
+       evas_object_size_hint_max_set(uniqueObj_.get(), v, h);
+}
+
 void Widget::setEvasSmartCallback(const std::string &eventName, std::function<void()> callback)
 {
        auto cbData = std::make_unique<WidgetCallback::Data<std::string>>(this, eventName);
index 692704d..7ecea72 100644 (file)
@@ -37,6 +37,8 @@ public:
        void setPartText(const std::string &partName, const TranslatedString &text);
        void setWeightHint(double x, double y);
        void setAlignHint(double x, double y);
+       void setMinSizeHint(Evas_Coord v, Evas_Coord h);
+       void setMaxSizeHint(Evas_Coord v, Evas_Coord h);
        void setEvasSmartCallback(const std::string &eventName, std::function<void()> callback);
        void setEextEventCallback(const Eext_Callback_Type type, std::function<void()> callback);
        void setStyle(const std::string &style);