From: Michal Skorupinski Date: Thu, 25 Feb 2016 15:45:43 +0000 (+0100) Subject: [UI] Displaying all available views in the channel panel X-Git-Tag: accepted/tizen/tv/20160308.101500~21 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F86%2F60486%2F5;p=profile%2Ftv%2Fapps%2Fnative%2Fair_settings.git [UI] Displaying all available views in the channel panel TODO: * Text formatting * Views layouts Change-Id: Iab844e90be82d00e3b7f9968ec097dab334b94ab Signed-off-by: Michal Skorupinski --- diff --git a/src/layout/layout_channel.c b/src/layout/layout_channel.c index 7cc15c7..a83aa68 100644 --- a/src/layout/layout_channel.c +++ b/src/layout/layout_channel.c @@ -26,25 +26,68 @@ #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?
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; -}