Enlightenment CVS committal Author : morlenxus Project : e_modules Module : calendar
Dir : e_modules/calendar Modified Files: e_mod_main.c e_mod_main.h Log Message: Allow to set the first weekday (Su/Mo). =================================================================== RCS file: /cvs/e/e_modules/calendar/e_mod_main.c,v retrieving revision 1.16 retrieving revision 1.17 diff -u -3 -r1.16 -r1.17 --- e_mod_main.c 5 Dec 2007 01:30:55 -0000 1.16 +++ e_mod_main.c 8 Dec 2007 15:29:17 -0000 1.17 @@ -13,6 +13,7 @@ { E_Gadcon_Client *gcc; Calendar *calendar; + Config_Item *ci; E_Gadcon_Popup *popup; }; @@ -29,6 +30,7 @@ static char *_gc_label(void); static Evas_Object *_gc_icon(Evas *evas); static const char *_gc_id_new(void); +static Config_Item *_config_item_get(const char *id); static int _update_date(void *data); static int _update_calendar_sheet(Instance *inst); static void _calendar_popup_content_create(Instance *inst); @@ -39,6 +41,8 @@ static void _cb_mouse_out(void *data, Evas *e, Evas_Object *obj, void *event_info); static void _cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info); static void _menu_cb_post(void *data, E_Menu *m); +static void _calendar_firstweekday_su(void *data, E_Menu *m, E_Menu_Item *mi); +static void _calendar_firstweekday_mo(void *data, E_Menu *m, E_Menu_Item *mi); static int days_in_month[2][12] = { @@ -68,6 +72,7 @@ char buf[4096]; inst = E_NEW(Instance, 1); + inst->ci = _config_item_get(id); calendar = E_NEW(Calendar, 1); calendar->inst = inst; @@ -163,6 +168,47 @@ return id; } +static Config_Item * +_config_item_get(const char *id) +{ + Evas_List *l; + Config_Item *ci; + char buf[128]; + + if (!id) + { + int num = 0; + + /* Create id */ + if (calendar_conf->items) + { + const char *p; + ci = evas_list_last(calendar_conf->items)->data; + p = strrchr(ci->id, '.'); + if (p) num = atoi(p + 1) + 1; + } + snprintf(buf, sizeof(buf), "%s.%d", _gc_class.name, num); + id = buf; + } + else + { + for (l = calendar_conf->items; l; l = l->next) + { + ci = l->data; + if (!ci->id) continue; + if (!strcmp(ci->id, id)) + return ci; + } + } + + ci = E_NEW(Config_Item, 1); + ci->id = evas_stringshare_add(id); + ci->firstweekday = 0; + + calendar_conf->items = evas_list_append(calendar_conf->items, ci); + return ci; +} + static int _update_date(void *data) { @@ -249,7 +295,8 @@ start_time = current_time - ((today-1) * 86400); local_time2 = localtime (&start_time); strftime (buf, sizeof(buf), "%w", local_time2); - startwd = atoi (buf); + startwd = atoi (buf) - inst->ci->firstweekday; + if (startwd < 0) startwd = 6; evas = inst->popup->win->evas; o = e_widget_list_add(evas, 0, 0); @@ -257,9 +304,10 @@ of = e_widget_frametable_add(evas, buf, 0); /* column titles */ + day = inst->ci->firstweekday; for (col = 0; col <= 6; col++) { - switch (col) + switch (day) { case 0: ob = e_widget_label_add(evas, "Su"); break; case 1: ob = e_widget_label_add(evas, "Mo"); break; @@ -268,8 +316,9 @@ case 4: ob = e_widget_label_add(evas, "Th"); break; case 5: ob = e_widget_label_add(evas, "Fr"); break; case 6: ob = e_widget_label_add(evas, "Sa"); break; - } + } e_widget_frametable_object_append(of, ob, col, 0, 1, 1, 1, 0, 0, 0); + if (day++ >= 6) day = 0; } /* output days */ @@ -373,13 +422,35 @@ if ((ev->button == 3) && (!calendar_conf->menu)) { E_Menu *mn; + E_Menu_Item *mi; int cx, cy, cw, ch; mn = e_menu_new(); + calendar_conf->menu_firstweekday = mn; + + mi = e_menu_item_new(mn); + e_menu_item_label_set(mi, D_("Sunday")); + e_menu_item_radio_set(mi, 1); + e_menu_item_radio_group_set(mi, 1); + if (!inst->ci->firstweekday) e_menu_item_toggle_set(mi, 1); + e_menu_item_callback_set(mi, _calendar_firstweekday_su, inst); + + mi = e_menu_item_new(mn); + e_menu_item_label_set(mi, D_("Monday")); + e_menu_item_radio_set(mi, 1); + e_menu_item_radio_group_set(mi, 1); + if (inst->ci->firstweekday == 1) e_menu_item_toggle_set(mi, 1); + e_menu_item_callback_set(mi, _calendar_firstweekday_mo, inst); + + mn = e_menu_new(); calendar_conf->menu = mn; e_menu_post_deactivate_callback_set(mn, _menu_cb_post, inst); + mi = e_menu_item_new(mn); + e_menu_item_label_set(mi, D_("First Day of Week")); + e_menu_item_submenu_set(mi, calendar_conf->menu_firstweekday); + e_gadcon_client_util_menu_items_append(inst->gcc, mn, 0); e_gadcon_canvas_zone_geometry_get(inst->gcc->gadcon, &cx, &cy, &cw, &ch); e_menu_activate_mouse(mn, @@ -397,6 +468,35 @@ if (!calendar_conf->menu) return; e_object_del(E_OBJECT(calendar_conf->menu)); calendar_conf->menu = NULL; + if (calendar_conf->menu_firstweekday) + e_object_del(E_OBJECT(calendar_conf->menu_firstweekday)); + calendar_conf->menu_firstweekday = NULL; +} + +static void +_calendar_firstweekday_su(void *data, E_Menu *m, E_Menu_Item *mi) +{ + Instance *inst; + + inst = data; + + inst->ci->firstweekday = 0; + e_config_save_queue(); + + _update_calendar_sheet(inst); +} + +static void +_calendar_firstweekday_mo(void *data, E_Menu *m, E_Menu_Item *mi) +{ + Instance *inst; + + inst = data; + + inst->ci->firstweekday = 1; + e_config_save_queue(); + + _update_calendar_sheet(inst); } EAPI E_Module_Api e_modapi = @@ -415,6 +515,7 @@ #undef D #define D conf_item_edd E_CONFIG_VAL(D, T, id, STR); + E_CONFIG_VAL(D, T, firstweekday, INT); #undef T #define T Config @@ -430,6 +531,7 @@ calendar_conf = E_NEW(Config, 1); ci = E_NEW(Config_Item, 1); ci->id = evas_stringshare_add("0"); + ci->firstweekday = 0; calendar_conf->items = evas_list_append(calendar_conf->items, ci); } =================================================================== RCS file: /cvs/e/e_modules/calendar/e_mod_main.h,v retrieving revision 1.6 retrieving revision 1.7 diff -u -3 -r1.6 -r1.7 --- e_mod_main.h 5 Dec 2007 01:30:55 -0000 1.6 +++ e_mod_main.h 8 Dec 2007 15:29:17 -0000 1.7 @@ -10,7 +10,7 @@ { E_Module *module; E_Config_Dialog *config_dialog; - E_Menu *menu; + E_Menu *menu, *menu_firstweekday; Ecore_Timer *timer; Evas_List *instances; Evas_List *items; @@ -19,6 +19,7 @@ struct _Config_Item { const char *id; + int firstweekday; }; EAPI extern E_Module_Api e_modapi; ------------------------------------------------------------------------- SF.Net email is sponsored by: Check out the new SourceForge.net Marketplace. It's the best place to buy or sell services for just about anything Open Source. http://sourceforge.net/services/buy/index.php _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs