ELEMENT_TYPE_INFO
} Element_Type_E;
+typedef struct {
+ SmartMgrData *smd;
+ Evas_Object *popup;
+ Evas_Object *group;
+ char *text;
+ int radio_value;
+ bool is_first;
+} Radio_List_Item_T;
+
typedef struct _Element Element;
struct _Element {
return true;
}
+static Elm_Widget_Item *_append_item_to_radio_list(SmartMgrData *smd, Evas_Object *popup, Evas_Object *genlist, Elm_Gen_Item_Class *itc,
+ const char *text, int radio_value, bool is_first,
+ Evas_Smart_Cb select_cb)
+{
+ SETTING_TRACE_BEGIN;
+
+ Radio_List_Item_T *item_data = calloc(1, sizeof(Radio_List_Item_T));
+ if (!item_data) {
+ SETTING_TRACE_ERROR("item_data == NULL");
+ return NULL;
+ }
+
+ item_data->radio_value = radio_value;
+ item_data->text = strdup(text);
+ item_data->smd = smd;
+ item_data->popup = popup;
+
+ Elm_Widget_Item *item = elm_genlist_item_append(genlist, itc, item_data, NULL, ELM_GENLIST_ITEM_NONE, select_cb, item_data);
+ if (!item) {
+ SETTING_TRACE_ERROR("item == NULL");
+ free(item_data->text);
+ free(item_data);
+ return NULL;
+ }
+
+ SETTING_TRACE_END;
+ return item;
+}
+
+static void _radio_selected_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ SETTING_TRACE_BEGIN;
+
+ Radio_List_Item_T *item_data = (Radio_List_Item_T *)data;
+ evas_object_del(item_data->popup);
+
+ SETTING_TRACE_END;
+}
+
+static Evas_Object *_genlist_radio_content_get(void *data, Evas_Object *obj, const char *part)
+{
+ SETTING_TRACE_BEGIN;
+
+ int len = strlen("elm.swallow.end");
+ Evas_Object *radio = NULL;
+ Radio_List_Item_T *item_data = (Radio_List_Item_T *)data;
+
+ if (len != strlen(part) || strncmp("elm.swallow.end", part, len))
+ return NULL;
+
+ radio = elm_radio_add(obj);
+ if (!radio) {
+ SETTING_TRACE_ERROR("radio == NULL");
+ return NULL;
+ }
+
+ if (item_data->is_first)
+ item_data->group = radio;
+ else
+ elm_radio_group_add(radio, item_data->group);
+
+ elm_radio_state_value_set(radio, item_data->radio_value);
+ evas_object_smart_callback_add(radio, "changed", _radio_selected_cb, data);
+
+ SETTING_TRACE_END;
+ return radio;
+}
+
+static char *_genlist_radio_text_get(void *data, Evas_Object *obj, const char *part)
+{
+ SETTING_TRACE_BEGIN;
+
+ int len = strlen("elm.text");
+ Radio_List_Item_T *item_data = (Radio_List_Item_T *)data;
+
+ if (len != strlen(part) || strncmp("elm.text", part, len))
+ return NULL;
+
+ SETTING_TRACE_END;
+ return strdup(item_data->text);
+}
+
+static void _genlist_radio_del(void *data, Evas_Object *obj)
+{
+ SETTING_TRACE_BEGIN;
+
+ Radio_List_Item_T *item_data = (Radio_List_Item_T *)data;
+ free(item_data->text);
+ free(item_data);
+
+ SETTING_TRACE_END;
+}
+
+static Elm_Gen_Item_Class *_create_genlist_1_line_class(void)
+{
+ SETTING_TRACE_BEGIN;
+
+ Elm_Gen_Item_Class *itc = elm_genlist_item_class_new();
+ if (!itc) {
+ SETTING_TRACE_ERROR("itc == NULL");
+ return NULL;
+ }
+
+ itc->item_style = "type1";
+ itc->func.content_get = _genlist_radio_content_get;
+ itc->func.text_get = _genlist_radio_text_get;
+ itc->func.del = _genlist_radio_del;
+
+ SETTING_TRACE_END;
+ return itc;
+}
+
+void _radio_list_item_selected_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ SETTING_TRACE_BEGIN;
+
+ Radio_List_Item_T *item_data = (Radio_List_Item_T *)data;
+ evas_object_del(item_data->popup);
+
+ SETTING_TRACE_END;
+}
+
+static void _create_list_popup(SmartMgrData *smd, char *title)
+{
+ SETTING_TRACE_BEGIN;
+
+ char *item_texts[] = { "Monthly", "Weekly", "Daily", "Custom"};
+ int i;
+ Evas_Object *genlist = NULL;
+ Elm_Gen_Item_Class *itc = NULL;
+ Evas_Object *popup = setting_create_popup_with_list(&genlist, NULL, smd->md.naviframe, "Select data usage cycle", NULL, 0, EINA_TRUE, EINA_FALSE, 0);
+
+ if (!popup) {
+ SETTING_TRACE_ERROR("popup == NULL");
+ return;
+ }
+
+ if (!genlist) {
+ SETTING_TRACE_ERROR("genlist == NULL");
+ return;
+ }
+
+ itc = _create_genlist_1_line_class();
+
+ for (i = CYCLE_MODE_MONTHLY; i <= CYCLE_MODE_CUSTOM; ++i)
+ _append_item_to_radio_list(smd, popup, genlist, itc, item_texts[i - 1],
+ i, i == CYCLE_MODE_MONTHLY, _radio_list_item_selected_cb);
+
+ elm_genlist_item_class_free(itc);
+
+ SETTING_TRACE_END;
+}
+
static int _create(void *data)
{
SETTING_TRACE_BEGIN;
SmartMgrData *smd = (SmartMgrData*)data;
Evas_Object *back_btn = NULL;
Elm_Object_Item *nf_it = NULL;
- int i;
back_btn = elm_button_add(smd->md.naviframe);
elm_object_style_set(back_btn, NAVI_BACK_ARROW_BUTTON_STYLE);
_create_limit_popup(element->smd, "Set data usage limit", ELEMENT_TYPE_LIMIT);
break;
case ELEMENT_TYPE_CYCLE:
+ _create_list_popup(element->smd, "Select data usage cycle");
break;
case ELEMENT_TYPE_START_DATE:
break;