[UI] Displaying all available views in the channel panel 86/60486/5
authorMichal Skorupinski <m.skorupinsk@samsung.com>
Thu, 25 Feb 2016 15:45:43 +0000 (16:45 +0100)
committerMichal Skorupinski <m.skorupinsk@samsung.com>
Mon, 29 Feb 2016 15:38:50 +0000 (16:38 +0100)
TODO:
* Text formatting
* Views layouts

Change-Id: Iab844e90be82d00e3b7f9968ec097dab334b94ab
Signed-off-by: Michal Skorupinski <m.skorupinsk@samsung.com>
src/layout/layout_channel.c

index 7cc15c7..a83aa68 100644 (file)
 #include "common/utils.h"
 #include "view/view_base.h"
 
+#define STOP_BTN_TXT "Stop"
+#define CANCEL_BTN_TXT "Cancel"
+
 enum scan_state {
        STATE_INIT,
        STATE_SCANNING,
        STATE_FINISH,
 };
 
+enum popup_btn_e {
+       POPUP_BTN_STOP = 1,
+       POPUP_BTN_CANCEL,
+};
+
 struct _priv {
        Evas_Object *base;
        Evas_Object *ly;
        Evas_Object *btn;
        Evas_Object *pb;
+       Evas_Object *popup;
        enum scan_state cur_state;
-       layoutmgr *lmgr;
        TvServiceScan scan;
        long total_cnt;
        long scanned_cnt;
        long found_cnt;
 };
 
+static bool _create(layoutmgr *lmgr, void *data);
+static void _show(void *layout_data);
+static void _hide(void *layout_data);
+static void _destroy(void *layout_data);
+static void _mouse_move_cb(int id, void *data, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev);
+static void _popup_clicked_cb(int id, void *data, Evas_Object *obj);
+static void _key_down_cb(int id, void *data, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev);
+static void _mouse_down_cb(int id, void *data, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Down *ev);
+static void _stop_popup_show(struct _priv *priv);
+static void _stop_popup_create(struct _priv *priv);
+
+static layout_class _lclass = {
+       .layout_id = LAYOUT_ID_CHANNEL,
+       .create = _create,
+       .show = _show,
+       .hide = _hide,
+       .destroy = _destroy,
+};
+
+static input_handler _input_handler = {
+       .mouse_move = _mouse_move_cb,
+       .key_down = _key_down_cb,
+       .mouse_down = _mouse_down_cb,
+};
+
+static input_handler _popup_input_handler = {
+       .clicked = _popup_clicked_cb,
+       .mouse_move = _mouse_move_cb,
+};
+
+layout_class *layout_channel_get_lclass(void)
+{
+       return &_lclass;
+}
+
 static void _mouse_move_cb(int id, void *data, Evas *e, Evas_Object *obj,
                Evas_Event_Mouse_Move *ev)
 {
@@ -184,21 +227,22 @@ static void _channel_scan_start(struct _priv *priv)
 
        err = tv_service_scan_create(&scan, TVS_SCAN_AIR_ANALOG_DIGITAL);
        if (err != TVS_ERROR_OK) {
-               _ERR("Scan create failed.");
+               _channel_scan_started(priv, 0);  //Test only. Used to display all pages in the channel module
+               _ERR("Scan create failed. %s", get_error_message(err));
                return;
        }
 
        err = tv_service_scan_register_callback(scan,
                        _channel_scan_event_cb, priv);
        if (err != TVS_ERROR_OK) {
-               _ERR("Scan register callback failed.");
+               _ERR("Scan register callback failed. %s", get_error_message(err));
                tv_service_scan_destroy(scan);
                return;
        }
 
        err = tv_service_scan_start(scan);
        if (err != TVS_ERROR_OK) {
-               _ERR("Scan start failed.");
+               _ERR("Scan start failed. %s", get_error_message(err));
                tv_service_scan_destroy(scan);
                return;
        }
@@ -206,15 +250,62 @@ static void _channel_scan_start(struct _priv *priv)
        priv->scan = scan;
 }
 
+static void _popup_clicked_cb(int id, void *data, Evas_Object *obj)
+{
+       struct _priv *priv = data;
+
+       switch(id)
+       {
+       case POPUP_BTN_STOP:
+               _channel_scan_finished(priv, TVS_SCAN_SEARCH_FINISH_STOPPED);
+               break;
+       case POPUP_BTN_CANCEL:
+               _INFO("[%s:%s:%d]", __FILE__, __FUNCTION__, __LINE__, "Popup btn cancel clicked");
+               break;
+       }
+
+       evas_object_hide(priv->popup);
+}
+
+static void _stop_popup_show(struct _priv *priv)
+{
+       Evas_Object *btn = NULL;
+       evas_object_show(priv->popup);
+
+       btn = elm_layout_content_get(priv->popup, "button1");
+       if (!btn) {
+               _ERR("btn == NULL", __FILE__, __LINE__);
+               return;
+       }
+
+       elm_object_focus_set(btn, EINA_TRUE);
+}
+
+static void _stop_popup_create(struct _priv *priv)
+{
+       Evas_Object *btn = NULL;
+
+       priv->popup = utils_add_popup(priv->base, NULL,
+                       "Channel search stop",
+                       "Are you sure to stop channel search?<br>Searched 0 Channels are saved.");
+
+       btn = utils_add_button(priv->popup, "button1", NULL, CANCEL_BTN_TXT);
+       inputmgr_add_callback(btn, POPUP_BTN_CANCEL, &_popup_input_handler, priv);
+
+       btn= utils_add_button(priv->popup, "button2", NULL, STOP_BTN_TXT);
+       inputmgr_add_callback(btn, POPUP_BTN_STOP,   &_popup_input_handler, priv);
+}
+
 static void _channel_scan_stop(struct _priv *priv)
 {
        TvServiceError err;
 
        err = tv_service_scan_stop(priv->scan);
        if (err != TVS_ERROR_OK) {
-               _ERR("Scan stop failed.");
+               _ERR("Scan stop failed. %s", get_error_message(err));
                tv_service_scan_destroy(priv->scan);
                priv->scan = NULL;
+               _stop_popup_show(priv); //Test only. This popup should be displayed when the scan is realy stopped
        }
 }
 
@@ -251,6 +342,8 @@ static void _key_down_cb(int id, void *data, Evas *e, Evas_Object *obj,
 {
        struct _priv *priv;
 
+       _INFO("[%s:%s:%d]", __FILE__, __FUNCTION__, __LINE__);
+
        if (!data || !ev || !obj) {
                _ERR("Invalid argument.");
                return;
@@ -264,63 +357,64 @@ static void _key_down_cb(int id, void *data, Evas *e, Evas_Object *obj,
                _button_selected(priv);
 }
 
-static input_handler _input_handler = {
-       .mouse_move = _mouse_move_cb,
-       .key_down = _key_down_cb,
-};
+static void _mouse_down_cb(int id, void *data, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Down *ev)
+{
+       struct _priv *priv = data;
+       _button_selected(priv);
+}
 
 static bool _create(layoutmgr *lmgr, void *data)
 {
-       struct _priv *priv;
-       Evas_Object *base, *ly, *btn, *pb;
+       struct _priv *priv = NULL;
+
+       _INFO("[%s:%s:%d]", __FILE__, __FUNCTION__, __LINE__);
 
        if (!lmgr) {
                _ERR("Invalid argument.");
                return false;
        }
 
-       base = layoutmgr_get_base(lmgr);
-       if (!base) {
+       priv = calloc(1, sizeof(*priv));
+       if (!priv) {
+               _ERR("Calloc failed.");
+               return false;
+       }
+
+       priv->base = layoutmgr_get_base(lmgr);
+       if (!priv->base) {
                _ERR("Get base layout failed.");
+               free(priv);
                return false;
        }
 
-       ly = utils_add_layout(base, GRP_LAYOUT_CHANNEL, EINA_FALSE);
-       if (!ly) {
+       priv->ly = utils_add_layout(priv->base, GRP_LAYOUT_CHANNEL, EINA_FALSE);
+       if (!priv->ly) {
                _ERR("Add layout failed.");
+               free(priv);
                return false;
        }
 
-       elm_object_part_text_set(ly, PART_TITLE, STR_CHANNEL_TITLE);
+       elm_object_part_text_set(priv->ly, PART_TITLE, STR_CHANNEL_TITLE);
 
-       btn = utils_add_button(ly, PART_BUTTON, STYLE_BASE_BTN, NULL);
-       if (!btn) {
+       priv->btn = utils_add_button(priv->ly, PART_BUTTON, STYLE_BASE_BTN, NULL);
+       if (!priv->btn) {
                _ERR("Add button failed.");
-               evas_object_del(ly);
+               evas_object_del(priv->ly);
+               free(priv);
                return false;
        }
 
-       pb = utils_add_progressbar(ly, PART_PROGRESSBAR, STYLE_CHANNEL_SCAN_PB);
-       if (!pb) {
+       priv->pb = utils_add_progressbar(priv->ly, PART_PROGRESSBAR, STYLE_CHANNEL_SCAN_PB);
+       if (!priv->pb) {
                _ERR("Addprogress bar failed.");
-               evas_object_del(ly);
+               evas_object_del(priv->ly);
+               free(priv);
                return false;
        }
 
-       priv = calloc(1, sizeof(*priv));
-       if (!priv) {
-               _ERR("Calloc failed.");
-               evas_object_del(ly);
-               return false;
-       }
+       _stop_popup_create(priv);
 
-       priv->lmgr = lmgr;
-       priv->base = base;
-       priv->ly = ly;
-       priv->btn = btn;
-       priv->pb = pb;
-
-       inputmgr_add_callback(btn, 0, &_input_handler, priv);
+       inputmgr_add_callback(priv->btn, 0, &_input_handler, priv);
        layoutmgr_set_layout_data(lmgr, LAYOUT_ID_CHANNEL, priv);
 
        return true;
@@ -328,51 +422,42 @@ static bool _create(layoutmgr *lmgr, void *data)
 
 static void _show(void *layout_data)
 {
-       struct _priv *priv;
+       struct _priv *priv = layout_data;
 
        if (!layout_data) {
                _ERR("Invalid argument.");
                return;
        }
 
-       priv = layout_data;
+       _channel_scan_init(priv);
 
-       if (priv->ly) {
-               _channel_scan_init(priv);
+       evas_object_show(priv->ly);
+       elm_object_part_content_set(priv->base, PART_CONTENT, priv->ly);
 
-               evas_object_show(priv->ly);
-               elm_object_part_content_set(priv->base, PART_CONTENT, priv->ly);
-       }
 }
 
 static void _hide(void *layout_data)
 {
-       struct _priv *priv;
+       struct _priv *priv = layout_data;
 
        if (!layout_data) {
                _ERR("Invalid argument.");
                return;
        }
 
-       priv = layout_data;
-
-       if (priv->ly) {
-               evas_object_hide(priv->ly);
-               elm_object_part_content_unset(priv->base, PART_CONTENT);
-       }
+       evas_object_hide(priv->ly);
+       elm_object_part_content_unset(priv->base, PART_CONTENT);
 }
 
 static void _destroy(void *layout_data)
 {
-       struct _priv *priv;
+       struct _priv *priv = layout_data;
 
        if (!layout_data) {
                _ERR("Invalid argument.");
                return;
        }
 
-       priv = layout_data;
-
        inputmgr_remove_callback(priv->btn, &_input_handler);
 
        if (priv->scan)
@@ -382,16 +467,3 @@ static void _destroy(void *layout_data)
 
        free(priv);
 }
-
-static layout_class _lclass = {
-       .layout_id = LAYOUT_ID_CHANNEL,
-       .create = _create,
-       .show = _show,
-       .hide = _hide,
-       .destroy = _destroy,
-};
-
-layout_class *layout_channel_get_lclass(void)
-{
-       return &_lclass;
-}