2.0 alpha
[apps/core/preloaded/calendar.git] / src / edit-alarm.c
index bcc3dd2..a556229 100755 (executable)
   */
 
 
-
-
-
-
 #include <calendar-svc-provider.h>
 
 #include "edit-alarm.h"
-
-#define _HOUR (60)
-#define _DAY (60 * 24)
-#define _WEEK (60 * 24 * 7)
+#include "radio-group.h"
+#include "reminder.h"
 
 #define _OFF -1
 #define _CUSTOM -2
@@ -42,8 +36,7 @@ typedef struct {
        Evas_Object *sc; // scroller
        Evas_Object *bx; // box
 
-       Evas_Object *r_grp; // radio
-       Evas_Object *r_grp_member[8];
+       Cal_Radio_Group* radio_group;
 
        Evas_Object *e_custom;
        Evas_Object *b_custom;
@@ -51,8 +44,6 @@ typedef struct {
 
        Evas_Object *rect; // for scrolling
 
-       int selected;
-
        Elm_Object_Item *pre_selected_it;
 
        int min;
@@ -156,15 +147,13 @@ static void __cal_edit_alarm_clicked_callback(void *data, Evas *e, Evas_Object *
 
        p = CAL_UTIL_GET_PRIV_DATA(obj);
 
-
-       elm_radio_value_set(p->r_grp, val);
+       cal_radio_group_select_radio(p->radio_group, val);
        evas_object_size_hint_min_set(p->rect, 0, 0);
-       p->selected = val;
 }
 
 static void __cal_edit_alarm_set_custom(cal_edit_alarm_data *p)
 {
-       elm_radio_value_set(p->r_grp, _GTYPE_CUSTOMIZE);
+       cal_radio_group_select_radio(p->radio_group, _GTYPE_CUSTOMIZE);
 
        elm_object_focus_set(p->e_custom, EINA_TRUE);
        elm_entry_cursor_end_set(p->e_custom);
@@ -245,7 +234,7 @@ static void __cal_edit_alarm_custom_ctx_selected_callback(void *data, Evas_Objec
        __cal_edit_alarm_set_button_label(p);
 
        __cal_edit_alarm_set_custom(p);
-       p->selected = _GTYPE_CUSTOMIZE;
+       cal_radio_group_select_radio(p->radio_group, _GTYPE_CUSTOMIZE);
        __cal_edit_alarm_custom_popup_hide_callback(p,p->ctx,ei);
 }
 
@@ -264,123 +253,6 @@ static Evas_Object* __cal_edit_alarm_add_button(Evas_Object *parent, cal_edit_al
        return bt;
 }
 
-static inline void __cal_edit_alarm_get_week_str(int week, char *buf, int sz)
-{
-       snprintf(buf, sz, "%d %s %s", week,C_("IDS_COM_POP_WEEK_LC"), C_("IDS_CLD_BODY_BEFORE_LC"));
-}
-
-static inline void __cal_edit_alarm_get_day_str(int day, char *buf, int sz)
-{
-       snprintf(buf, sz, "%d %s %s", day, C_("IDS_COM_POP_DAY_LC"), C_("IDS_CLD_BODY_BEFORE_LC"));
-}
-
-static inline void __cal_edit_alarm_get_hour_str(int hour, char *buf, int sz)
-{
-       snprintf(buf, sz, "%d %s %s", hour, S_("IDS_COM_POP_HOUR_LC"), C_("IDS_CLD_BODY_BEFORE_LC"));
-}
-
-static inline void __cal_edit_alarm_get_min_str(int min, char *buf, int sz)
-{
-       snprintf(buf, sz, "%d %s %s", min, S_("IDS_COM_BODY_MINUTE_LC"), C_("IDS_CLD_BODY_BEFORE_LC"));
-}
-
-static inline void __cal_edit_alarm_get_str(int min, char *buf, int sz)
-{
-       if ((min % _WEEK) == 0) {
-               __cal_edit_alarm_get_week_str(min / _WEEK, buf, sz);
-               return;
-       }
-
-       if ((min % _DAY) == 0) {
-               __cal_edit_alarm_get_day_str(min / _DAY, buf, sz);
-               return;
-       }
-
-       if ((min % _HOUR) == 0) {
-               __cal_edit_alarm_get_hour_str(min / _HOUR, buf, sz);
-               return;
-       }
-
-       __cal_edit_alarm_get_min_str(min, buf, sz);
-}
-
-void cal_edit_alarm_get_alarm_str(int min, char *buf, int sz)
-{
-       if (!buf || sz < 0)
-               return;
-
-       if (min < 0) {
-               g_snprintf(buf,sz,"%s",S_("IDS_COM_BODY_OFF"));
-               return;
-       }
-
-       if (min == 0) {
-               g_snprintf(buf,sz,"%s", C_("IDS_CLD_BODY_ON_TIME"));
-               return;
-       }
-
-       __cal_edit_alarm_get_str(min, buf, sz);
-}
-
-int cal_edit_alarm_get_min(int tick, cal_sch_remind_tick_unit_t unit)
-{
-       int min;
-
-       min = tick;
-
-       switch (unit) {
-       case CAL_SCH_TIME_UNIT_MONTH:
-               min = min * _DAY * 30; // TODO: BUG!! not used!!
-               break;
-       case CAL_SCH_TIME_UNIT_WEEK:
-               min = min * _WEEK;
-               break;
-       case CAL_SCH_TIME_UNIT_DAY:
-               min = min * _DAY;
-               break;
-       case CAL_SCH_TIME_UNIT_HOUR:
-               min = min * _HOUR;
-               break;
-       default:  // CAL_SCH_TIME_UNIT_MIN
-               break;
-       }
-
-       return min;
-}
-
-void cal_edit_alarm_get_tick(int min, int *tick, cal_sch_remind_tick_unit_t *unit)
-{
-       if (!tick || !unit)
-               return;
-
-       if (min == -1) {
-               *tick = -1;
-               *unit = CAL_SCH_TIME_UNIT_MIN;
-               return;
-       }
-
-       if ((min % _WEEK) == 0) {
-               *tick = min / _WEEK;
-               *unit = CAL_SCH_TIME_UNIT_WEEK;
-               return;
-       }
-
-       if ((min % _DAY) == 0) {
-               *tick = min / _DAY;
-               *unit = CAL_SCH_TIME_UNIT_DAY;
-               return;
-       }
-
-       if ((min % _HOUR) == 0) {
-               *tick = min / _HOUR;
-               *unit = CAL_SCH_TIME_UNIT_HOUR;
-               return;
-       }
-
-       *tick = min;
-       *unit = CAL_SCH_TIME_UNIT_MIN;
-}
-
 static char *__cal_edit_alarm_get_genlist_item_label(void *data, Evas_Object *obj, const char *part)
 {
        cal_edit_alarm_item_data *item_data = (cal_edit_alarm_item_data*)data;
@@ -401,7 +273,6 @@ static char *__cal_edit_alarm_get_genlist_item_label(void *data, Evas_Object *ob
                        cal_edit_alarm_get_alarm_str(item_data->data, buf, sizeof(buf));
                        break;
                case _GTYPE_CUSTOMIZE:
-                       //return strdup(C_("IDS_CLD_BODY_CUSTOMIZE_ATNT"));
                        break;
                default:
                        break;
@@ -427,9 +298,6 @@ static void __cal_edit_alarm_genlist_item_delete_callback(void *data, Evas_Objec
        CAL_ASSERT(item_data->p);
        cal_edit_alarm_data* p = item_data->p;
 
-       CAL_ASSERT(p->r_grp_member);
-       p->r_grp_member[item_data->type] = NULL;
-
        free(item_data);
 }
 
@@ -438,24 +306,6 @@ static Eina_Bool __cal_edit_alarm_get_genlist_item_state(void *data, Evas_Object
        return EINA_FALSE;
 }
 
-static void  __cal_edit_alarm_set_radio_group(cal_edit_alarm_data *p, Evas_Object *rd, int val)
-{
-       if(!val)
-       {
-               p->r_grp = rd;
-               elm_radio_group_add(p->r_grp_member[1], p->r_grp);
-               elm_radio_group_add(p->r_grp_member[2], p->r_grp);
-               elm_radio_group_add(p->r_grp_member[3], p->r_grp);
-               elm_radio_group_add(p->r_grp_member[4], p->r_grp);
-               elm_radio_group_add(p->r_grp_member[5], p->r_grp);
-               elm_radio_group_add(p->r_grp_member[6], p->r_grp);
-               elm_radio_group_add(p->r_grp_member[7], p->r_grp);
-       }
-
-       elm_radio_group_add(rd, p->r_grp);
-
-}
-
 static Evas_Object* __cal_edit_alarm_add_radio(Evas_Object *dg, int val, cal_edit_alarm_data *p, cal_edit_alarm_item_data *item_data)
 {
        Evas_Object *rd;
@@ -466,9 +316,7 @@ static Evas_Object* __cal_edit_alarm_add_radio(Evas_Object *dg, int val, cal_edi
        elm_radio_state_value_set(rd, val);
        elm_object_part_content_set(rd, "content", rd);
        item_data->item_radio = rd;
-       *(p->r_grp_member + val) = rd;
-
-       __cal_edit_alarm_set_radio_group(p, rd, val);
+       cal_radio_group_set_radio_object(p->radio_group, val, rd);
 
        evas_object_show(rd);
        evas_object_data_set(rd, "priv", p);
@@ -567,33 +415,28 @@ static Evas_Object* __cal_edit_alarm_add_custom_text_object(cal_edit_alarm_data
        return entry;
 }
 
-static Evas_Object* __cal_edit_alarm_add_custom_layout(Evas_Object *dg, const char *text, int val, cal_edit_alarm_data *p, cal_edit_alarm_item_data *item_data)
+static Evas_Object* __cal_edit_alarm_add_custom_layout(Evas_Object *dg, int val, cal_edit_alarm_data *p, cal_edit_alarm_item_data *item_data)
 {
+       c_retvm_if(!dg, NULL, "dg is null");
+       c_retvm_if(!p, NULL, "p is null");
+       c_retvm_if(!item_data, NULL, "item_data is null");
+
        Evas_Object *ly;
        Evas_Object *rd;
        Evas_Object *entry;
        Evas_Object *bt;
-       Evas_Object *entry_custom;
        Evas_Object *entry_before;
 
        ly = cal_util_add_layout(dg, "dialoguegroup/alarm/custom2");
        if (!ly)
                return NULL;
 
-       entry_custom = __cal_edit_alarm_add_custom_text_object(p, dg, text);
-       if (!entry_custom)
-       {
-               evas_object_del(ly);
-               return NULL;
-       }
-       elm_object_part_content_set(ly, "text", entry_custom);
-
        entry_before = __cal_edit_alarm_add_custom_text_object(p, dg, C_("IDS_CLD_BODY_BEFORE_LC"));
-       if (!entry_before)
-       {
+       if (!entry_before) {
                evas_object_del(ly);
                return NULL;
        }
+
        elm_object_part_content_set(ly, "text2", entry_before);
 
        evas_object_show(ly);
@@ -601,8 +444,7 @@ static Evas_Object* __cal_edit_alarm_add_custom_layout(Evas_Object *dg, const ch
        evas_object_event_callback_add(ly, EVAS_CALLBACK_MOUSE_UP, __cal_edit_alarm_custom_clicked_callback, p);
 
        rd = elm_radio_add(dg);
-       if (!rd)
-       {
+       if (!rd) {
                evas_object_del(ly);
                return NULL;
        }
@@ -610,13 +452,10 @@ static Evas_Object* __cal_edit_alarm_add_custom_layout(Evas_Object *dg, const ch
        elm_radio_state_value_set(rd, val);
        elm_object_part_content_set(ly, "content", rd);
        item_data->item_radio = rd;
-       *(p->r_grp_member + val) = rd;
-
-       __cal_edit_alarm_set_radio_group(p, rd, val);
+       cal_radio_group_set_radio_object(p->radio_group, val, rd);
 
        bt = __cal_edit_alarm_add_button(ly, p);
-       if (!bt)
-       {
+       if (!bt) {
                evas_object_del(ly);
                return NULL;
        }
@@ -627,11 +466,11 @@ static Evas_Object* __cal_edit_alarm_add_custom_layout(Evas_Object *dg, const ch
        __cal_edit_alarm_set_button_label(p);
 
        entry = __cal_edit_alarm_add_entry(ly, p, item_data);
-       if (!entry)
-       {
+       if (!entry) {
                evas_object_del(ly);
                return NULL;
        }
+
        elm_object_part_content_set(ly, "input_sw", entry);
        evas_object_smart_callback_add(entry, "changed", __cal_edit_alarm_entry_changed_callback, item_data);
        p->e_custom = entry;
@@ -639,24 +478,18 @@ static Evas_Object* __cal_edit_alarm_add_custom_layout(Evas_Object *dg, const ch
        return ly;
 }
 
-
-static void __cal_edit_alarm_set_selected_state(cal_edit_alarm_item_data *item_data)
-{
-       cal_edit_alarm_data *p = item_data->p;
-       elm_radio_value_set(p->r_grp, p->selected);
-}
-
 static Evas_Object *__cal_edit_alarm_get_genlist_item_icon(void *data, Evas_Object *obj, const char *part)
 {
+       c_retvm_if(!data, NULL, "data is null");
+       c_retvm_if(!obj, NULL, "obj is null");
+
        Evas_Object *e_obj = NULL;
        char buf[16];
        cal_edit_alarm_item_data *item_data = (cal_edit_alarm_item_data*)data;
        cal_edit_alarm_data *p = item_data->p;
 
-       if (!CAL_STRCMP(part, "elm.icon"))
-       {
-               switch ( item_data->type )
-               {
+       if (!CAL_STRCMP(part, "elm.icon")) {
+               switch ( item_data->type ) {
                case _GTYPE_OFF:
                case _GTYPE_ON_TIME:
                case _GTYPE_5_MIN:
@@ -665,11 +498,9 @@ static Evas_Object *__cal_edit_alarm_get_genlist_item_icon(void *data, Evas_Obje
                case _GTYPE_1_DAY:
                case _GTYPE_1_WEEK:
                        e_obj = __cal_edit_alarm_add_radio(obj, item_data->type, p, item_data);
-                       __cal_edit_alarm_set_selected_state(item_data);
                        break;
                case _GTYPE_CUSTOMIZE:
-                       e_obj =__cal_edit_alarm_add_custom_layout(obj, C_("IDS_COM_BODY_CUSTOMISE"), item_data->type, p, item_data);
-                       __cal_edit_alarm_set_selected_state(item_data);
+                       e_obj =__cal_edit_alarm_add_custom_layout(obj, item_data->type, p, item_data);
                        __cal_edit_alarm_set_button_label(p);
                        snprintf(buf, sizeof(buf), "%d", p->min);
                        elm_entry_entry_set(p->e_custom, buf);
@@ -678,6 +509,7 @@ static Evas_Object *__cal_edit_alarm_get_genlist_item_icon(void *data, Evas_Obje
                        break;
                }
        }
+
        return e_obj;
 }
 
@@ -706,8 +538,7 @@ static void __cal_edit_alarm_genlist_item_select_callback(void *data, Evas_Objec
        case _GTYPE_CUSTOMIZE:
                if(_GTYPE_CUSTOMIZE != type)
                        elm_object_focus_set(p->e_custom, EINA_FALSE);
-               elm_radio_value_set(p->r_grp, type);
-               p->selected = type;
+               cal_radio_group_select_radio(p->radio_group, type);
                break;
        default:
                break;
@@ -731,7 +562,7 @@ static void __cal_edit_alarm_append_genlist_item(Evas_Object *genlist, cal_edit_
                if(_GTYPE_SPEA == item_data->type)
                {
                        item_data->it = elm_genlist_item_append(genlist, &itc_seperator, (void*)item_data, NULL, ELM_GENLIST_ITEM_NONE, __cal_edit_alarm_genlist_item_select_callback, NULL);
-                       elm_genlist_item_select_mode_set(item_data->it, ELM_OBJECT_SELECT_MODE_NONE);
+                       elm_genlist_item_select_mode_set(item_data->it, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
                }
                else
                {
@@ -769,7 +600,7 @@ static int __cal_edit_alarm_add_alarm_content(cal_edit_alarm_data *p)
        itc_1text_1icon.func.content_get = __cal_edit_alarm_get_genlist_item_icon;
        itc_1text_1icon.func.text_get = __cal_edit_alarm_get_genlist_item_label;
 
-       itc_1icon.item_style = "dialogue/1icon";
+       itc_1icon.item_style = "dialogue/1icon.custom";
        itc_1icon.func.del = __cal_edit_alarm_genlist_item_delete_callback;
        itc_1icon.func.content_get = __cal_edit_alarm_get_genlist_item_icon;
        itc_1icon.func.text_get = __cal_edit_alarm_get_genlist_item_label;
@@ -800,28 +631,28 @@ static void __cal_edit_alarm_set_radio(cal_edit_alarm_data *p, int min)
        switch(min)
        {
        case _OFF:
-               p->selected = cal_edit_alarm_item_datas[1].type;
+               cal_radio_group_select_radio(p->radio_group, cal_edit_alarm_item_datas[1].type);
                return;
        case 0:
-               p->selected = cal_edit_alarm_item_datas[2].type;
+               cal_radio_group_select_radio(p->radio_group, cal_edit_alarm_item_datas[2].type);
                return;
        case 5:
-               p->selected = cal_edit_alarm_item_datas[3].type;
+               cal_radio_group_select_radio(p->radio_group, cal_edit_alarm_item_datas[3].type);
                return;
        case 15:
-               p->selected = cal_edit_alarm_item_datas[4].type;
+               cal_radio_group_select_radio(p->radio_group, cal_edit_alarm_item_datas[4].type);
                return;
        case _HOUR:
-               p->selected = cal_edit_alarm_item_datas[5].type;
+               cal_radio_group_select_radio(p->radio_group, cal_edit_alarm_item_datas[5].type);
                return;
        case _DAY:
-               p->selected = cal_edit_alarm_item_datas[6].type;
+               cal_radio_group_select_radio(p->radio_group, cal_edit_alarm_item_datas[6].type);
                return;
        case _WEEK:
-               p->selected = cal_edit_alarm_item_datas[7].type;
+               cal_radio_group_select_radio(p->radio_group, cal_edit_alarm_item_datas[7].type);
                return;
        default:
-               p->selected = cal_edit_alarm_item_datas[8].type;
+               cal_radio_group_select_radio(p->radio_group, cal_edit_alarm_item_datas[8].type);
                break;
        }
 
@@ -860,37 +691,40 @@ int cal_edit_alarm_get_alarm(Evas_Object *ly)
                return -1;
        }
 
-       if (p->selected == _GTYPE_CUSTOMIZE )
+       int selected = cal_radio_group_get_selected_radio(p->radio_group);
+
+       if (selected == _GTYPE_CUSTOMIZE )
        {
                const char *s = elm_entry_entry_get(p->e_custom);
                r = atoi(s);
                r = r * cal_edit_alarm_button[p->bt_idx].unit;
        }
        else
-               r = cal_edit_alarm_item_datas[p->selected+1].data;
+               r = cal_edit_alarm_item_datas[selected + 1].data;
 
        return r;
 }
 
 Evas_Object *cal_edit_alarm_create_view(Evas_Object *parent, int min, struct appdata* ad)
 {
+       c_retvm_if(!parent, NULL, "parent is null");
+       c_retvm_if(!ad, NULL, "ad is null");
+
        cal_edit_alarm_data *p;
        Evas_Object *ly;
        int r;
 
-       CAL_ASSERT(parent);
-
-       CAL_CALLOC(p, 1, cal_edit_alarm_data);
+       p = calloc(1, sizeof(cal_edit_alarm_data));
+       c_retvm_if(!p, NULL, "p is null");
 
        p->name = _name;
        p->parent = parent;
        p->ad = ad;
-       p->r_grp = NULL;
+       p->radio_group = cal_radio_group_create(8);
        p->theme = ad->theme;
 
        ly = cal_util_add_layout(parent, "edit");
-       if (!ly)
-       {
+       if (!ly) {
                free(p);
                return NULL;
        }
@@ -898,21 +732,21 @@ Evas_Object *cal_edit_alarm_create_view(Evas_Object *parent, int min, struct app
 
        evas_object_data_set(ly, "priv", p);
 
-       cal_edit_alarm_button[0].label = S_("IDS_COM_BODY_MINUTE_LC");
-       cal_edit_alarm_button[1].label = S_("IDS_COM_POP_HOUR_LC");
-       cal_edit_alarm_button[2].label = C_("IDS_COM_POP_DAY_LC");
-       cal_edit_alarm_button[3].label = C_("IDS_COM_POP_WEEK_LC");
+       cal_edit_alarm_button[0].label = S_("IDS_COM_BODY_UNIT_MIN_ABB");
+       cal_edit_alarm_button[1].label = C_("IDS_COM_POP_SMALL_HOURS");
+       cal_edit_alarm_button[2].label = C_("IDS_COM_POP_SMALL_DAYS");
+       cal_edit_alarm_button[3].label = C_("IDS_COM_POP_WEEKS_LC");
 
        __cal_edit_alarm_set_radio(p, min);
 
        r = __cal_edit_alarm_add_alarm_content(p);
-       if (r)
-       {
+       if (r) {
                evas_object_del(ly);
                free(p);
                return NULL;
        }
 
        evas_object_event_callback_add(ly, EVAS_CALLBACK_DEL, __cal_edit_alarm_delete_layout, p);
+
        return ly;
 }