#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)
{
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;
}
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
}
}
{
struct _priv *priv;
+ _INFO("[%s:%s:%d]", __FILE__, __FUNCTION__, __LINE__);
+
if (!data || !ev || !obj) {
_ERR("Invalid argument.");
return;
_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;
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)
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;
-}