2.0 alpha
[apps/core/preloaded/calendar.git] / src / view-main-month.c
index b10dd08..083369f 100755 (executable)
   */
 
 
-
-
-
-
 #include <vconf.h>
 
 #include "view.h"
@@ -59,7 +55,7 @@ typedef struct {
        focus_in_month_view_type calendar_focus_view;
 
        Evas_Object *genlist;
-       struct calsvc *csv;
+       Eina_List *event_list;
 
        int single_moved;
        int multi_touched;
@@ -80,24 +76,59 @@ typedef struct {
 
        int d;
 
+       Evas_Object *popup;
 
+       Evas_Coord x;
+       Evas_Coord y;
+       Elm_Object_Item *sweep_it;
 }cal_month_data;
-extern void cal_month_update_month_calendar(Evas_Object *ly, struct tm *t);
+
+extern void cal_month_calendar_update_view(Evas_Object *ly);
+
 static Evas_Object *__cal_month_get_genlist_item_icon(void *data, Evas_Object *obj, const char *part);
 static char* __cal_month_get_genlist_item_label(void *data, Evas_Object *obj, const char *part);
 static void __cal_month_mouse_move_event_callback(void *data, Evas *e, Evas_Object *ly, void *ei);
 static void __cal_month_update_genlist(cal_month_data *p);
 static void __cal_month_changed_callback(void *data, Evas_Object *obj, const char *e, const char *src);
+static char* __cal_month_share_genlist_item_label(void *data, Evas_Object *obj, const char *part);
 
 static Elm_Genlist_Item_Class itc = {
        .item_style = "3text.5icon",
        .func.content_get = __cal_month_get_genlist_item_icon,
        .func.text_get = __cal_month_get_genlist_item_label,
+       .decorate_item_style = "mode/slide3",
+};
+
+static Elm_Genlist_Item_Class itc_1text = {
+       .item_style = "1text",
+       .func.content_get = NULL,
+       .func.text_get = __cal_month_share_genlist_item_label,
 };
 
 static int is_hour24;
 static Calendar_color calendar_color;
 
+static inline void __cal_month_delete_popup(cal_month_data *p)
+{
+       c_retm_if(!p || !p->popup, "param is null");
+
+       evas_object_del(p->popup);
+       p->popup = NULL;
+}
+
+static char* __cal_month_share_genlist_item_label(void *data, Evas_Object *obj, const char *part)
+{
+       c_retvm_if(!data || !obj || !part, NULL, "data is null");
+
+       char *name = (char *)data;
+
+       if (!CAL_STRCMP(part, "elm.text")) {
+               return strdup(name);
+       }
+
+       return NULL;
+}
+
 static inline void __cal_month_stop_animation(cal_month_data *p)
 {
        if (p->ani)
@@ -115,13 +146,16 @@ static void __cal_month_delete_layout(void *data, Evas *e, Evas_Object *obj, voi
 
        cal_month_data *p = data;
 
-       CALENDAR_SVC_FREE_CS(&p->csv);
+       CALENDAR_SVC_FREE_CS_LIST(&p->event_list);
 
        __cal_month_stop_animation(p);
 
        if (p->idler)
                ecore_idler_del(p->idler);
 
+       if (p->popup)
+               evas_object_del(p->popup);
+
        free(p);
 }
 
@@ -132,74 +166,394 @@ static void __cal_month_resize_view(void *data, Evas *e, Evas_Object *ly, void *
        cal_util_get_geometry(&p->rect, p->month);
 }
 
-static void __cal_month_make_time_text(time_t t, struct tm *tm, char *buf, int sz)
+static void __cal_month_make_time_text(struct tm *tm, struct tm *base_tm, char *buf, int sz)
 {
-       struct tm ttm;
        const char* date;
        const char* time;
 
-       localtime_r(&t, &ttm);
-
        if(is_hour24)
                time = CAL_UTIL_TIME_FORMAT_6;
        else
                time = CAL_UTIL_TIME_FORMAT_1;
 
-       if (ttm.tm_year != tm->tm_year)
+       if (tm->tm_year != base_tm->tm_year)
                date = CAL_UTIL_DATE_FORMAT_11;
-       else if (ttm.tm_mon != tm->tm_mon)
+       else if (tm->tm_mon != base_tm->tm_mon)
                date = CAL_UTIL_DATE_FORMAT_10;
-       else if (ttm.tm_mday != tm->tm_mday)
+       else if (tm->tm_mday != base_tm->tm_mday)
                date = CAL_UTIL_DATE_FORMAT_9;
        else
                date = NULL;
 
-       cal_util_get_time_text(buf, sz, NULL, time, &ttm);
+       cal_util_get_time_text(buf, sz, NULL, time, tm);
 }
 
-static char* __cal_month_get_time_text(struct tmnode *tm, cal_month_data *p)
+static char* __cal_month_get_time_text(cal_struct *cs, cal_month_data *p)
 {
        char buf[512];
        char stime[512];
 
-       __cal_month_make_time_text(tm->st, &p->ad->base_tm, stime, sizeof(stime));
+       long long int lli_start = CALENDAR_SVC_STRUCT_GET_LLI(cs, CALS_VALUE_LLI_DTSTART_UTIME);
+       struct tm tm_start;
+       cal_util_convert_lli_to_tm(NULL, lli_start, &tm_start);
+
+       __cal_month_make_time_text(&tm_start, &p->ad->base_tm, stime, sizeof(stime));
 
        snprintf(buf, sizeof(buf), "%s", stime);
        return strdup(buf);
 }
 
-static Evas_Object *__cal_month_get_genlist_item_icon(void *data, Evas_Object *obj, const char *part)
+static void __cal_month_set_genlist_item_sweep_off(Elm_Object_Item *it)
 {
-       Evas_Object *icon = NULL;
-       struct tmnode *tm = (struct tmnode *)data;
-       int r;
+       c_retm_if(!it, "it is null");
+       elm_genlist_item_decorate_mode_set(it, "slide", EINA_FALSE);
+       elm_genlist_item_select_mode_set(it, ELM_OBJECT_SELECT_MODE_ALWAYS);
+}
+
+static void __cal_month_init_sweep_data(cal_struct *cs, cal_month_data *p)
+{
+       c_ret_if(!p);
+       c_ret_if(!cs);
+
+       cal_main_set_cs(p->ad, cs);
+}
+
+static void __cal_month_edit_popup_response_event_callback(void *data, Evas_Object *obj, void *event_info)
+{
+       CAL_FN_START;
+
+       c_retm_if(!data, "data is null");
+       c_retm_if(!obj, "obj is null");
+
+       Evas_Object *popup = data;
+       Evas_Object *button = obj;
+
+       cal_month_data* p = evas_object_data_get(popup, "data");
+       c_retm_if(!p, "p is null");
+
+       struct appdata* ad = p->ad;
+       c_retm_if(!ad, "ad is null");
+
+       if (!strcmp(elm_object_text_get(button), C_("IDS_CLD_BODY_ONLY_THIS_EVENT"))) {
+               ad->edit_special_one = EINA_TRUE;
+
+               cal_edit_create_view(ad, p->ly);
+               __cal_month_set_genlist_item_sweep_off(p->sweep_it);
+       }else if (!strcmp(elm_object_text_get(button), C_("IDS_CLD_POP_ALL_REPETITIVE_EVENTS"))) {
+               ad->edit_special_one = EINA_FALSE;
+
+               cal_edit_create_view(ad, p->ly);
+               __cal_month_set_genlist_item_sweep_off(p->sweep_it);
+       }
+
+       evas_object_del(popup);
+       p->popup = NULL;
+}
+
+static void __cal_month_delete_event(cal_month_data* p, Eina_Bool is_delete_all)
+{
+       c_ret_if(!p);
+
+       struct appdata* ad = p->ad;
+       c_ret_if(!ad);
+
+       if (!is_delete_all) {
+               long long int lli_time;
+               cal_util_convert_tm_to_lli(NULL, &ad->tm_start, &lli_time);
+
+               int r = calendar_svc_event_delete_normal_instance(ad->cid, lli_time);
+               if (r != CAL_SUCCESS)
+                       ERR("calendar_svc_event_delete_normal_instance() is failed(%d)", r);
+       }
+       else    {
+               int r = CALENDAR_SVC_DELETE(CAL_STRUCT_SCHEDULE, ad->cid);
+               if (r != CAL_SUCCESS)
+                       ERR("CALENDAR_SVC_DELETE is failed %d", r);
+       }
+}
+
+static void __cal_month_delete_popup_response_event_callback(void *data, Evas_Object *obj, void *event_info)
+{
+       CAL_FN_START;
+
+       c_retm_if(!data, "data is null");
+       c_retm_if(!obj, "obj is null");
+
+       Evas_Object *popup = data;
+       Evas_Object *button = obj;
+
+       cal_month_data* p = evas_object_data_get(popup, "data");
+       c_retm_if(!p, "p is null");
+
+       if (!strcmp(elm_object_text_get(button), C_("IDS_CLD_BODY_ONLY_THIS_EVENT")))
+               __cal_month_delete_event(p, EINA_FALSE);
+       else    if (!strcmp(elm_object_text_get(button), C_("IDS_CLD_POP_ALL_REPETITIVE_EVENTS")))
+               __cal_month_delete_event(p, EINA_TRUE);
+
+       evas_object_del(popup);
+       p->popup = NULL;
+}
+
+static void __cal_month_show_popup(cal_month_data *p, const char *tit, Eina_Bool is_edit)
+{
+       c_retm_if(!p, "p is NULL.");
+
+       void (*callback_func)(void *data, Evas_Object *obj, void *ei) = NULL;
+
+       if (is_edit)
+               callback_func = __cal_month_edit_popup_response_event_callback;
+       else
+               callback_func = __cal_month_delete_popup_response_event_callback;
+
+       p->popup = cal_util_add_popup(p->ad->win, "verticalbuttonstyle", NULL, tit, callback_func,
+               p, C_("IDS_CLD_BODY_ONLY_THIS_EVENT"),
+               C_("IDS_CLD_POP_ALL_REPETITIVE_EVENTS"),
+               S_("IDS_COM_SK_CANCEL"), NULL);
+       c_retm_if(!p->popup, "cal_util_add_popup(p->ad->win) returned null");
+
+       evas_object_data_set(p->popup, "priv", p);
+}
+
+static void __cal_month_edit_norepeat_popup_response_event_callback(void *data, Evas_Object *obj, void *event_info)
+{
+       c_retm_if(!data, "data is null");
+       c_retm_if(!obj, "obj is null");
+
+       Evas_Object *popup = data;
+       Evas_Object *button = obj;
+
+       cal_month_data* p = evas_object_data_get(popup, "data");
+       c_retm_if(!p, "p is null");
+
+       if (!strcmp(elm_object_text_get(button), S_("IDS_COM_SK_OK"))) {
+               cal_edit_create_view(p->ad, p->ly);
+               __cal_month_set_genlist_item_sweep_off(p->sweep_it);
+       }
+
+       evas_object_del(popup);
+       p->popup = NULL;
+}
+
+static void __cal_month_edit_button_callback(void *data, Evas_Object *obj, void *ei)
+{
+       cal_struct *cs = data;
+       c_retm_if(!cs, "cs is NULL.");
+
+       cal_month_data* p = CAL_UTIL_GET_PRIV_DATA(obj);
+       c_retm_if(!p, "p is NULL.");
+
+       __cal_month_init_sweep_data(cs, p);
+
+       if (CALENDAR_SVC_STRUCT_GET_INT(cs, CALS_VALUE_INT_RRULE_ID))
+               __cal_month_show_popup(p, C_("IDS_CLD_HEADER_EDIT_EVENT"), EINA_TRUE);
+       else {
+               p->popup = cal_util_add_popup(p->ad->win, NULL, NULL, C_("IDS_CLD_HEADER_EDIT_EVENT"), __cal_month_edit_norepeat_popup_response_event_callback, p,
+                       S_("IDS_COM_SK_OK"),S_("IDS_COM_SK_CANCEL"), NULL);
+       }
+}
+
+static void __cal_month_delete_norepeat_popup_response_event_callback(void *data, Evas_Object *obj, void *event_info)
+{
+       c_retm_if(!data, "data is null");
+       c_retm_if(!obj, "obj is null");
+
+       Evas_Object *popup = data;
+       Evas_Object *button = obj;
+
+       cal_month_data* p = evas_object_data_get(popup, "data");
+       c_retm_if(!p, "p is null");
+       c_retm_if(!p->ly, "p->ly is null");
+
+       if (!CAL_STRCMP(elm_object_text_get(button), S_("IDS_COM_SK_OK"))) {
+
+               int r = CALENDAR_SVC_DELETE(CAL_STRUCT_SCHEDULE, p->ad->cid);
+               c_retm_if(r != CAL_SUCCESS, "CALENDAR_SVC_DELETE(CAL_STRUCT_SCHEDULE, %d) is failed(%d)", p->ad->cid, r);
+
+               cal_struct *cs = evas_object_data_get(p->ly, "cs");
+
+               if (cs)
+                       CALENDAR_SVC_STRUCT_FREE(&cs);
+               else
+                       ERR("cs is null");
+       }
+
+       evas_object_del(p->popup);
+       p->popup = NULL;
+}
+
+static void __cal_month_delete_button_callback(void *data, Evas_Object *obj, void *ei)
+{
+       cal_struct *cs = data;
+       c_retm_if(!cs, "cs is NULL.");
+
+       cal_month_data* p = CAL_UTIL_GET_PRIV_DATA(obj);
+       c_retm_if(!p, "p is NULL.");
+
+       __cal_month_init_sweep_data(cs, p);
+
+       if (p->ad->cid) {
+
+               evas_object_data_set(p->ly, "cs", cs);
+
+               int r = CALENDAR_SVC_STRUCT_GET_INT(cs,CALS_VALUE_INT_RRULE_ID);
+
+               if (0 != r) {
+                       __cal_month_show_popup(p, C_("IDS_CLD_OPT_DELETE_EVENT"), EINA_FALSE);
+               } else {
+                       p->popup = cal_util_add_popup(p->ad->win, NULL, NULL, C_("IDS_CLD_OPT_DELETE_EVENT"), __cal_month_delete_norepeat_popup_response_event_callback, p,
+                               S_("IDS_COM_SK_OK"),S_("IDS_COM_SK_CANCEL"), NULL);
+               }
+       }
+}
+
+static void __cal_month_via_message_callback(void *data, Evas_Object *obj, void *ei)
+{
+       c_retm_if(!data, "data is null");
+       c_retm_if(!obj, "obj is null");
+
+       cal_month_data *p = data;
+       c_retm_if(!p->ad, "p->ad is null");
+
        cal_struct *cs = NULL;
-       cal_struct *calendar = NULL;
-       cal_month_data* p = NULL;
+       int r = CALENDAR_SVC_GET(CAL_STRUCT_SCHEDULE, p->ad->cid, NULL, &cs);
+       if (CAL_SUCCESS != r || NULL == cs) {
+               ERR("CALENDAR_SVC_GET failed: %d", r);
+               return;
+       }
 
-       if(!tm)
-       {
-               ERR("tm is null");
-               return NULL;
+       r = cal_util_create_vcs_file_from_cs(cs, MESSAGE_VCS);
+       if (CAL_SUCCESS != r) {
+               CALENDAR_SVC_STRUCT_FREE(&cs);
+               ERR("cal_util_create_vcs_file_from_cs: %d", r);
+               return;
        }
 
-       cs = tm->cs;
-       if(!cs)
-       {
-               ERR("cs is null");
-               return NULL;
+       CALENDAR_SVC_STRUCT_FREE(&cs);
+
+       cal_launch_ug_with_var(MESSAGE_COMPOSER_UG, NULL, "ATTACHFILE", MESSAGE_VCS, NULL);
+       __cal_month_set_genlist_item_sweep_off(p->sweep_it);
+
+       __cal_month_delete_popup(p);
+}
+
+static void __cal_month_via_email_callback(void *data, Evas_Object *obj, void *ei)
+{
+       c_retm_if(!data, "data is null");
+       c_retm_if(!obj, "obj is null");
+
+       cal_month_data *p = data;
+       c_retm_if(!p->ad, "p->ad is null");
+
+       cal_struct *cs = NULL;
+       int r = CALENDAR_SVC_GET(CAL_STRUCT_SCHEDULE, p->ad->cid, NULL, &cs);
+       if (CAL_SUCCESS != r || NULL == cs) {
+               ERR("CALENDAR_SVC_GET failed: %d", r);
+               return;
+       }
+
+       r = cal_util_create_vcs_file_from_cs(cs, EMAIL_VCS);
+       if (CAL_SUCCESS != r) {
+               CALENDAR_SVC_STRUCT_FREE(&cs);
+               ERR("cal_util_create_vcs_file_from_cs: %d", r);
+               return;
+       }
+
+       CALENDAR_SVC_STRUCT_FREE(&cs);
+
+       cal_launch_ug_with_var(EMAIL_COMPOSER_UG, NULL, "RUN_TYPE", "5", "ATTACHMENT", EMAIL_VCS, NULL);
+       __cal_month_set_genlist_item_sweep_off(p->sweep_it);
+
+       __cal_month_delete_popup(p);
+}
+
+static void __cal_month_via_bluetooth_callback(void *data, Evas_Object *obj, void *ei)
+{
+       c_retm_if(!data, "data is null");
+       c_retm_if(!obj, "obj is null");
+
+       cal_month_data *p = data;
+       c_retm_if(!p->ad, "p->ad is null");
+
+       cal_struct *cs = NULL;
+       int r = CALENDAR_SVC_GET(CAL_STRUCT_SCHEDULE, p->ad->cid, NULL, &cs);
+       if (CAL_SUCCESS != r || NULL == cs) {
+               ERR("CALENDAR_SVC_GET failed: %d", r);
+               return;
        }
 
-       p = CAL_UTIL_GET_PRIV_DATA(obj);
+       r = cal_util_create_vcs_file_from_cs(cs, BLUETOOTH_VCS);
+       if (CAL_SUCCESS != r) {
+               CALENDAR_SVC_STRUCT_FREE(&cs);
+               ERR("cal_util_create_vcs_file_from_cs: %d", r);
+               return;
+       }
+
+       CALENDAR_SVC_STRUCT_FREE(&cs);
+
+       cal_launch_ug_with_var(BLUETOOTH_UG, NULL, "launch-type", "send", "filecount", "1", "files", BLUETOOTH_VCS, NULL);
+       __cal_month_set_genlist_item_sweep_off(p->sweep_it);
+
+       __cal_month_delete_popup(p);
+}
+
+static void __cal_month_share_popup_response_callback(void *data, Evas_Object *obj, void *ei)
+{
+       c_retm_if(!data, "data is null");
+       c_retm_if(!obj, "obj is null");
+
+       Evas_Object *popup = data;
+
+       cal_month_data* p = evas_object_data_get(popup, "data");
+       c_retm_if(!p, "p is null");
+
+       evas_object_del(popup);
+       p->popup = NULL;
+
+}
+
+static void __cal_month_send_button_callback(void *data, Evas_Object *obj, void *ei)
+{
+       cal_struct *cs = data;
+       c_retm_if(!cs, "cs is NULL.");
+
+       cal_month_data* p = CAL_UTIL_GET_PRIV_DATA(obj);
+       c_retm_if(!p, "p is NULL.");
+
+       __cal_month_init_sweep_data(cs, p);
+
+       p->popup = cal_util_add_popup(p->ad->win, "menustyle", S_("IDS_COM_BUTTON_SHARE"), NULL,
+                               __cal_month_share_popup_response_callback, p,
+                               S_("IDS_COM_BODY_CLOSE"),  NULL);
+
+       c_retm_if(!p->popup, "cal_util_add_popup returned null");
+       evas_object_data_set(p->popup, "data", p);
+
+       Evas_Object *genlist = elm_genlist_add(p->popup);
+       c_retm_if(!genlist, "elm_genlist_add returned null");
+
+       elm_genlist_item_append(genlist, &itc_1text, S_("IDS_COM_BODY_EMAIL"), NULL, ELM_GENLIST_ITEM_NONE, __cal_month_via_email_callback, p);
+       elm_genlist_item_append(genlist, &itc_1text, S_("IDS_COM_BODY_MESSAGE"), NULL, ELM_GENLIST_ITEM_NONE, __cal_month_via_message_callback, p);
+       elm_genlist_item_append(genlist, &itc_1text, S_("IDS_COM_BODY_BLUETOOTH"), NULL, ELM_GENLIST_ITEM_NONE, __cal_month_via_bluetooth_callback, p);
+
+       elm_object_content_set(p->popup, genlist);
+       evas_object_show(p->popup);
+}
+
+static Evas_Object *__cal_month_get_genlist_item_icon(void *data, Evas_Object *obj, const char *part)
+{
+       c_retv_if(!data, NULL);
+
+       Evas_Object *icon = NULL;
+       Evas_Object *button = NULL;
+       int r;
+       cal_struct *cs = data;
+       cal_struct *calendar = NULL;
+       cal_month_data* p = CAL_UTIL_GET_PRIV_DATA(obj);
 
        if (!CAL_STRCMP(part, "elm.swallow.colorbar"))
        {
                r = CALENDAR_SVC_GET(CAL_STRUCT_CALENDAR, CALENDAR_SVC_STRUCT_GET_INT(cs,CAL_VALUE_INT_CALENDAR_ID), NULL, &calendar);
-               if (r != CAL_SUCCESS)
-               {
-                       ERR("CALENDAR_SVC_GET fail. %d", r);
-                       return NULL;
-               }
+               c_retvm_if(r != CAL_SUCCESS, NULL, "CALENDAR_SVC_GET is failed(%d)", r);
 
                icon = evas_object_rectangle_add(evas_object_evas_get(obj));
                evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
@@ -211,44 +565,73 @@ static Evas_Object *__cal_month_get_genlist_item_icon(void *data, Evas_Object *o
                CALENDAR_SVC_STRUCT_FREE(&calendar);
 
                return icon;
+       } else if (!CAL_STRCMP(part, "elm.slide.swallow.1")) {
+               button = elm_button_add(obj);
+               c_retvm_if(!button, NULL, "button is NULL");
+               elm_object_style_set(button, "text_only/sweep");
+               elm_object_text_set(button, S_("IDS_COM_SK_EDIT"));
+               evas_object_data_set(button, "priv", p);
+               evas_object_smart_callback_add(button, "clicked", __cal_month_edit_button_callback, cs);
+               return button;
+       } else if (!CAL_STRCMP(part, "elm.slide.swallow.2")) {
+               button = elm_button_add(obj);
+               c_retvm_if(!button, NULL, "button is NULL");
+               elm_object_style_set(button, "text_only/sweep");
+               elm_object_text_set(button, S_("IDS_COM_BODY_DELETE"));
+               evas_object_data_set(button, "priv", p);
+               evas_object_smart_callback_add(button, "clicked", __cal_month_delete_button_callback, cs);
+               return button;
+       } else if (!CAL_STRCMP(part, "elm.slide.swallow.3")) {
+               button = elm_button_add(obj);
+               c_retvm_if(!button, NULL, "button is NULL");
+               elm_object_style_set(button, "text_only/sweep");
+               elm_object_text_set(button, S_("IDS_COM_BUTTON_SHARE"));
+               evas_object_data_set(button, "priv", p);
+               evas_object_smart_callback_add(button, "clicked", __cal_month_send_button_callback, cs);
+               return button;
        }
-
        return NULL;
 }
 
 static char* __cal_month_get_genlist_item_label(void *data, Evas_Object *obj, const char *part)
 {
-       cal_month_data *p;
-       struct tmnode *tm = (struct tmnode *)data;
+       c_retv_if(!data, NULL);
+
+       cal_month_data *p = CAL_UTIL_GET_PRIV_DATA(obj);
+       cal_struct *cs = data;
        const char *str;
 
-       if (!tm || !tm->cs)
-               return NULL;
+       if (!CAL_STRCMP(part, "elm.text.1")) {
 
-       if (!CAL_STRCMP(part, "elm.text.1"))
-       {
-               str = CALENDAR_SVC_STRUCT_GET_STR(tm->cs, CAL_VALUE_TXT_SUMMARY);
+               str = CALENDAR_SVC_STRUCT_GET_STR(cs, CAL_VALUE_TXT_SUMMARY);
                if (str)
                        return strdup(str);
 
                return strdup(C_("IDS_CLD_BODY_NO_TITLE"));
-       }
-       else if (!CAL_STRCMP(part, "elm.text.2"))
-       {
-               str = CALENDAR_SVC_STRUCT_GET_STR(tm->cs, CAL_VALUE_TXT_LOCATION);
+
+       } else if (!CAL_STRCMP(part, "elm.text.2")) {
+
+               str = CALENDAR_SVC_STRUCT_GET_STR(cs, CAL_VALUE_TXT_LOCATION);
                if (str)
                        return strdup(str);
 
                return strdup(C_("IDS_CLD_BODY_NO_LOCATION_SELECTED"));
-       }
-       else if (!CAL_STRCMP(part, "elm.text.3"))
-       {
-               int allday = CALENDAR_SVC_STRUCT_GET_INT(tm->cs, CAL_VALUE_INT_ALL_DAY_EVENT);
-               if (allday)
+
+       } else if (!CAL_STRCMP(part, "elm.text.3")) {
+
+               if (CALENDAR_SVC_STRUCT_GET_INT(cs, CALS_VALUE_INT_DTSTART_TYPE) == CALS_TIME_LOCALTIME)
                        return strdup(C_("IDS_COM_BODY_ALL_DAY"));
 
                p = CAL_UTIL_GET_PRIV_DATA(obj);
-               return __cal_month_get_time_text(tm, p);
+               return __cal_month_get_time_text(cs, p);
+
+       } else if (!CAL_STRCMP(part, "elm.slide.text.1")) {
+
+               str = CALENDAR_SVC_STRUCT_GET_STR(cs, CAL_VALUE_TXT_SUMMARY);
+               if (str)
+                       return strdup(str);
+
+               return strdup(C_("IDS_CLD_BODY_NO_TITLE"));
        }
 
        return NULL;
@@ -256,86 +639,71 @@ static char* __cal_month_get_genlist_item_label(void *data, Evas_Object *obj, co
 
 static void __cal_month_genlist_item_select_callback(void *data, Evas_Object *obj, void *ei)
 {
-       struct tmnode* tm = data;
-       cal_struct *cs = tm->cs;
-       int idx;
-       Elm_Object_Item *it;
-       cal_month_data *p;
-       int repeat;
+       c_ret_if(!data);
 
-       it = elm_genlist_selected_item_get(obj);
+       cal_struct *cs = data;
+
+       Elm_Object_Item *it = elm_genlist_selected_item_get(obj);
        if (it)
                elm_genlist_item_selected_set(it, EINA_FALSE);
 
-       idx = CALENDAR_SVC_STRUCT_GET_INT(cs, CAL_VALUE_INT_INDEX);
-
-       p = CAL_UTIL_GET_PRIV_DATA(obj);
-       CAL_ASSERT(p);
+       cal_month_data *p = CAL_UTIL_GET_PRIV_DATA(obj);
+       c_ret_if(!p);
 
-       repeat = CALENDAR_SVC_STRUCT_GET_INT(cs, CAL_VALUE_INT_REPEAT_TERM);
-       if(repeat)
-       {
-               memcpy(p->ad->tm, tm, sizeof(struct tmnode));
-       }
-       p->ad->cid = idx;
+       cal_main_set_cs(p->ad, cs);
 
        cal_detail_create_view(p->ad, p->parent);
 }
 
 static void __cal_month_get_events(cal_month_data *p)
 {
-       time_t st, et;
+       struct tm tm_start = p->ad->base_tm;
+       tm_start.tm_hour = 0;
+       tm_start.tm_min = 0;
+       tm_start.tm_sec = 0;
 
-       cal_util_get_day_time_t(&p->ad->base_tm, &st, &et);
+       struct tm tm_end = tm_start;
+       tm_end.tm_hour = 23;
+       tm_end.tm_min = 59;
+       tm_end.tm_sec = 59;
 
-       p->csv = CALENDAR_SVC_GET_EVENT(p->ad->acct_id, st, et);
+       p->event_list = CALENDAR_SVC_GET_EVENT_LIST(&tm_start, &tm_end);
 }
 
-
-
-static Eina_Bool __cal_month_update_genlist_with_idler(void* data)
+static void __cal_month_gl_mode_right(void *data, Evas_Object *obj, void *event_info)
 {
-       CAL_FN_START;
-
-       c_retvm_if(!data, ECORE_CALLBACK_CANCEL, "data is null");
-
-       cal_month_data* p = data;
+       c_retm_if(!event_info, "event_info is null");
+       c_retm_if(!obj, "obj is null");
 
-       if (!p->genlist) {
-               ERR("p->genlist is null");
-               p->idler = NULL;
-               return ECORE_CALLBACK_CANCEL;
-       }
+       Elm_Object_Item *it = event_info;
 
-       if (!p->csv) {
-               ERR("p->csv is null");
-               p->idler = NULL;
-               return ECORE_CALLBACK_CANCEL;
-       }
+       elm_genlist_item_decorate_mode_set(it, "slide", EINA_TRUE);
 
-       Eina_List *event_list = eina_list_nth_list(p->csv->tmlist, p->event_offset);
+       cal_month_data* p = CAL_UTIL_GET_PRIV_DATA(obj);
+       c_retm_if(!p, "p is null");
 
-       Eina_List *l = NULL;
-       struct tmnode *tm = NULL;
-       int count = 0;
+       if (p->sweep_it && it != p->sweep_it)
+               elm_genlist_item_decorate_mode_set(p->sweep_it, "slide", EINA_FALSE);
 
-       EINA_LIST_FOREACH(event_list, l, tm) {
-               if (tm) {
-                       elm_genlist_item_append(p->genlist, &itc, tm, NULL, ELM_GENLIST_ITEM_NONE, __cal_month_genlist_item_select_callback, tm);
+       p->sweep_it = it;
+}
 
-                       count ++;
-                       p->event_offset++;
+static void __cal_month_gl_mode_left(void *data, Evas_Object *obj, void *event_info)
+{
+       c_retm_if(!event_info, "event_info is null");
+       Elm_Object_Item *it = event_info;
 
-                       if (count == IDLER_FETCH_SIZE && p->event_offset < eina_list_count(p->csv->tmlist))
-                               return ECORE_CALLBACK_RENEW;
-               }
-       }
+       elm_genlist_item_decorate_mode_set(it, "slide", EINA_FALSE);
+}
 
-       p->idler = NULL;
+static void __cal_month_gl_mode_cancel(void *data, Evas_Object *obj, void *event_info)
+{
+       c_retm_if(!obj, "obj is null");
 
-       CAL_FN_END;
+       Elm_Object_Item *it = (Elm_Object_Item *)elm_genlist_decorated_item_get(obj);
+       c_ret_if(!it);
 
-       return ECORE_CALLBACK_CANCEL;
+       elm_genlist_item_decorate_mode_set(it, "slide", EINA_FALSE);
 }
 
 static void __cal_month_update_genlist(cal_month_data *p)
@@ -346,11 +714,11 @@ static void __cal_month_update_genlist(cal_month_data *p)
 
        Evas_Object* genlist = p->genlist;
 
-       CALENDAR_SVC_FREE_CS(&p->csv);
+       CALENDAR_SVC_FREE_CS_LIST(&p->event_list);
 
        __cal_month_get_events(p);
 
-       if (!p->csv || !p->csv->tmlist || !eina_list_count(p->csv->tmlist)) {
+       if (!p->event_list) {
                if (genlist)
                        elm_genlist_clear(genlist);
 
@@ -367,6 +735,11 @@ static void __cal_month_update_genlist(cal_month_data *p)
 
                elm_object_part_content_set(p->ly, "list/sw", genlist);
                evas_object_data_set(genlist, "priv", p);
+
+               evas_object_smart_callback_add(genlist, "drag,start,right", __cal_month_gl_mode_right, NULL);
+               evas_object_smart_callback_add(genlist, "drag,start,left", __cal_month_gl_mode_left, NULL);
+               evas_object_smart_callback_add(genlist, "drag,start,up", __cal_month_gl_mode_cancel, NULL);
+               evas_object_smart_callback_add(genlist, "drag,start,down", __cal_month_gl_mode_cancel, NULL);
        }
        else
                elm_genlist_clear(genlist);
@@ -374,28 +747,11 @@ static void __cal_month_update_genlist(cal_month_data *p)
        p->event_offset = 0;
 
        Eina_List *l = NULL;
-       struct tmnode *tm = NULL;
-       int count = 0;
-
-       EINA_LIST_FOREACH(p->csv->tmlist, l, tm) {
-               if (tm) {
-                       elm_genlist_item_append(genlist, &itc, tm, NULL, ELM_GENLIST_ITEM_NONE, __cal_month_genlist_item_select_callback, tm);
-
-                       count ++;
-                       p->event_offset++;
-
-                       //First time, Just need to show 4 items. Another items will be add with idler
-                       if (count == INITIAL_FETCH_SIZE) {
-                               if (INITIAL_FETCH_SIZE < eina_list_count(p->csv->tmlist)) {
-                                       p->idler = ecore_idler_add(__cal_month_update_genlist_with_idler, p);
-                                       c_retm_if(!p->idler, "p->idler is null");
-                               }
-
-                               CAL_FN_END;
+       cal_struct *cs = NULL;
 
-                               return;
-                       }
-               }
+       EINA_LIST_FOREACH(p->event_list, l, cs) {
+               if (cs)
+                       elm_genlist_item_append(genlist, &itc, cs, NULL, ELM_GENLIST_ITEM_NONE, __cal_month_genlist_item_select_callback, cs);
        }
 
        CAL_FN_END;
@@ -403,16 +759,20 @@ static void __cal_month_update_genlist(cal_month_data *p)
 
 static Evas_Object* __cal_month_create_month_d(cal_month_data *p, int d)
 {
-       struct tm t;
+       c_retv_if(!p, NULL);
+
        struct appdata *ad = p->ad;
-       int r;
+       c_retv_if(!ad, NULL);
+
+       int r = cal_util_update_tm_month(&ad->base_tm, d);
+       c_retv_if(r < 0, NULL);
 
-       t = ad->base_tm;
+       Evas_Object *calendar = cal_month_calendar_create_view(ad, p->parent, EINA_TRUE);
 
-       r = cal_util_update_tm_month(&t, d);
-       c_retvm_if(r < 0, NULL,  "month cross the border ");
+       r = cal_util_update_tm_month(&ad->base_tm, -d);
+       c_retv_if(r < 0, NULL);
 
-       return cal_month_calendar_create_content(&t, ad, p->parent, EINA_TRUE);
+       return calendar;
 }
 
 static void __cal_month_move_month_calendar_to_left(cal_month_data *p, Evas_Coord x)
@@ -576,7 +936,9 @@ static inline int __cal_month_update_month_view(cal_month_data *p, int d)
        }
 
        cal_month_calendar_update_select(p->month);
-       cal_util_emit_signal(CAL_UTIL_GET_EDJ_DATA(p->ly), "go,line%d", cal_month_get_weekline(p->month));
+
+       if (!p->ad->is_weekly)
+               cal_util_emit_signal(CAL_UTIL_GET_EDJ_DATA(p->ly), "go,line%d", cal_month_calendar_get_weekline(p->month));
 
        elm_object_part_content_set(p->ly, "cal/sw", p->month);
        elm_object_part_content_set(p->ly, "cal/sw/left", p->month_left);
@@ -704,15 +1066,26 @@ static void __cal_month_mouse_down_event_callback(void *data, Evas *e, Evas_Obje
        p->down1.y = p->move1.y = ev->canvas.y;
 
        p->down_is_called = 1;
+       p->multi_touched = 0;
 
        cal_util_get_geometry(&p->oringinal_size,p->month);
 }
 
 static void __cal_month_mouse_move_event_callback(void *data, Evas *e, Evas_Object *ly, void *ei)
 {
+       c_retm_if(!data,  "data is null");
+       c_retm_if(!ei,  "ei is null");
+
        cal_month_data *p = data;
        Evas_Event_Mouse_Move *ev = ei;
 
+       if (5 < abs(ev->cur.canvas.x - p->move1.x)) {
+
+               struct appdata* ad = p->ad;
+               c_ret_if(!ad);
+
+       }
+
        if (0 == p->down_is_called)
                return;
 
@@ -728,6 +1101,23 @@ static void __cal_month_changed_callback(void *data, Evas_Object *obj, const cha
        __cal_month_update_genlist(data);
 }
 
+static void __cal_month_list_icon_clicked_callback(void *data, Evas_Object *obj, const char *e, const char *src)
+{
+       c_retm_if(!e, "e is null");
+       c_retm_if(!data, "data is null");
+
+       cal_month_data *p = data;
+
+       if (!CAL_STRCMP(e, "open")) {
+               p->ad->is_weekly = EINA_TRUE;
+       }
+
+       if (!CAL_STRCMP(e, "close")) {
+               p->ad->is_weekly = EINA_FALSE;
+       }
+       cal_main_update_view(p->ad);
+}
+
 Evas_Object* cal_month_create_view(struct appdata *ad, Evas_Object *main)
 {
        CAL_FN_START;
@@ -739,24 +1129,24 @@ Evas_Object* cal_month_create_view(struct appdata *ad, Evas_Object *main)
        Evas_Object *ly;
        Evas_Object *month;
        Evas_Object *list_bg;
+       int r;
 
        p = calloc(1, sizeof(cal_month_data));
        c_retvm_if(!p, NULL, "calloc(1, sizeof(cal_month_data)) is failed");
 
-       vconf_get_int(CAL_VCONFKEY_FOCUS_VIEW, (int*)&p->calendar_focus_view);
+       r = vconf_get_int(CAL_VCONFKEY_WEEK_NMUBER_ON_OFF, (int *)&ad->is_display_weeknumber);
+       c_retvm_if(r != 0, NULL, "vconf_get_int(CAL_VCONFKEY_WEEK_NMUBER_ON_OFF, (int *)&ad->is_display_weeknumber) is failed");
 
-       if (FOCUS_IN_DAILY == p->calendar_focus_view)
-       {
-               ad->is_weekly = FALSE;
-               p->name = _name = "main/month";
-       }
-       else if (FOCUS_IN_WEEKLY == p->calendar_focus_view)
-       {
-               ad->is_weekly = TRUE;
-               p->name = _name = "main/month/weekly";
+
+       if (ad ->is_landscape_mode) {
+               p->name = _name = "main/month/weekly/l";
+       } else {
+               if (ad->is_weekly) {
+                       p->name = _name = "main/month/weekly";
+               } else {
+                       p->name = _name = "main/month";
+               }
        }
-       else
-               return NULL;
 
        p->ad = ad;
 
@@ -767,6 +1157,8 @@ Evas_Object* cal_month_create_view(struct appdata *ad, Evas_Object *main)
        p->oringinal_size.y = -1;
        p->oringinal_size.w = -1;
        p->oringinal_size.h = -1;
+       p->popup = NULL;
+       p->sweep_it = NULL;
        ly = cal_util_add_layout(ad->nv, p->name);
        if (!ly) {
                free(p);
@@ -774,11 +1166,12 @@ Evas_Object* cal_month_create_view(struct appdata *ad, Evas_Object *main)
        }
        evas_object_data_set(ly, "priv", p);
        p->ly = ly;
+       edje_object_signal_callback_add(CAL_UTIL_GET_EDJ_DATA(ly), "*", "cal", __cal_month_list_icon_clicked_callback, p);
 
-       month = cal_month_calendar_create_content(&ad->base_tm, ad, main, EINA_FALSE);
+       month = cal_month_calendar_create_view(ad, main, EINA_FALSE);
        if (!month)
        {
-               ERR("cal_month_calendar_create_content(&ad->base_tm, ad, ly, EINA_FALSE) is failed");
+               ERR("cal_month_calendar_create_view(&ad->base_tm, ad, ly, EINA_FALSE) is failed");
                evas_object_del(ly);
                free(p);
                return NULL;
@@ -818,7 +1211,6 @@ void cal_month_update_view(Evas_Object *ly)
 
        cal_month_data *p;
        struct appdata *ad;
-       Evas *e;
 
        p = CAL_UTIL_GET_PRIV_DATA(ly);
        if (!p || CAL_STRCMP(p->name, _name)) {
@@ -829,17 +1221,16 @@ void cal_month_update_view(Evas_Object *ly)
        ad = p->ad;
        c_retm_if(!ad, "ad is null");
 
-       cal_month_update_month_calendar(p->month, &ad->base_tm);
-       cal_util_emit_signal(CAL_UTIL_GET_EDJ_DATA(p->ly), "go,line%d", cal_month_get_weekline(p->month));
+       cal_month_calendar_update_view(p->month);
+
+       if (!p->ad->is_weekly)
+               cal_util_emit_signal(CAL_UTIL_GET_EDJ_DATA(p->ly), "go,line%d", cal_month_calendar_get_weekline(p->month));
 
        __cal_month_update_genlist(p);
 
        cal_util_delete_evas_object(&p->month_left);
        cal_util_delete_evas_object(&p->month_right);
 
-       e = evas_object_evas_get(ly);
-       c_retm_if(!e, "evas_object_evas_get(ly) is failed");
-
        CAL_FN_END;
 }