clock will feed current locale date (abbrev. weekday + date) to themes.

SVN revision: 62543
This commit is contained in:
Gustavo Sverzut Barbieri 2011-08-17 20:13:23 +00:00
parent 2759530d5b
commit 4aed42e8e4
1 changed files with 96 additions and 0 deletions

View File

@ -54,6 +54,7 @@ static E_Config_DD *conf_item_edd = NULL;
static Eina_List *clock_instances = NULL;
static E_Action *act = NULL;
static int uuid = 0;
static Ecore_Timer *update_today = NULL;
static void
_clear_timestrs(Instance *inst)
@ -250,6 +251,13 @@ _clock_popup_new(Instance *inst)
Evas *evas;
Evas_Object *o, *oi;
Evas_Coord mw = 128, mh = 128;
char todaystr[32];
time_t t;
struct tm *tm;
t = time(NULL);
tm = localtime(&t);
strftime(todaystr, sizeof(todaystr) - 1, "%a, %x", tm);
if (inst->popup) return;
@ -278,6 +286,9 @@ _clock_popup_new(Instance *inst)
edje_object_signal_emit(oi, "e,state,seconds,on", "e");
else
edje_object_signal_emit(oi, "e,state,seconds,off", "e");
edje_object_part_text_set(oi, "e.text.today", todaystr);
o = e_widget_image_add_from_object(evas, oi, 128, 128);
evas_object_show(oi);
e_widget_table_object_align_append(inst->o_table, o,
@ -315,12 +326,20 @@ e_int_clock_instances_redo(void)
{
Eina_List *l;
Instance *inst;
char todaystr[32];
time_t t;
struct tm *tm;
t = time(NULL);
tm = localtime(&t);
strftime(todaystr, sizeof(todaystr) - 1, "%a, %x", tm);
EINA_LIST_FOREACH(clock_instances, l, inst)
{
Evas_Object *o = inst->o_clock;
Evas_Coord mw, mh;
if (inst->cfg->digital_clock)
e_theme_edje_object_set(o, "base/theme/modules/clock",
"e/modules/clock/digital");
@ -335,6 +354,8 @@ e_int_clock_instances_redo(void)
edje_object_signal_emit(o, "e,state,seconds,on", "e");
else
edje_object_signal_emit(o, "e,state,seconds,off", "e");
edje_object_part_text_set(o, "e.text.today", todaystr);
edje_object_message_signal_process(o);
mw = 0, mh = 0;
edje_object_size_min_get(o, &mw, &mh);
@ -344,15 +365,65 @@ e_int_clock_instances_redo(void)
if (mh < 4) mh = 4;
e_gadcon_client_aspect_set(inst->gcc, mw, mh);
e_gadcon_client_min_size_set(inst->gcc, mw, mh);
if (inst->o_popclock)
{
o = inst->o_popclock;
if (inst->cfg->digital_clock)
e_theme_edje_object_set(o, "base/theme/modules/clock",
"e/modules/clock/digital");
else
e_theme_edje_object_set(o, "base/theme/modules/clock",
"e/modules/clock/main");
if (inst->cfg->digital_24h)
edje_object_signal_emit(o, "e,state,24h,on", "e");
else
edje_object_signal_emit(o, "e,state,24h,off", "e");
if (inst->cfg->show_seconds)
edje_object_signal_emit(o, "e,state,seconds,on", "e");
else
edje_object_signal_emit(o, "e,state,seconds,off", "e");
edje_object_part_text_set(o, "e.text.today", todaystr);
edje_object_message_signal_process(o);
}
}
}
static Eina_Bool
_update_today_timer(void *data __UNUSED__)
{
time_t t, t_tomorrow;
const struct tm *now;
struct tm today;
e_int_clock_instances_redo();
if (!clock_instances)
{
update_today = NULL;
return EINA_FALSE;
}
t = time(NULL);
now = localtime(&t);
memcpy(&today, now, sizeof(today));
today.tm_sec = 1;
today.tm_min = 0;
today.tm_hour = 0;
t_tomorrow = mktime(&today) + 24 * 60 * 60;
update_today = ecore_timer_add(t_tomorrow - t, _update_today_timer, NULL);
return EINA_FALSE;
}
static void
_clock_popup_free(Instance *inst)
{
if (!inst->popup) return;
if (inst->popup) e_object_del(E_OBJECT(inst->popup));
inst->popup = NULL;
inst->o_popclock = NULL;
}
static void
@ -443,6 +514,13 @@ _gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style)
Evas_Object *o;
E_Gadcon_Client *gcc;
Instance *inst;
char todaystr[32];
time_t t;
struct tm *tm;
t = time(NULL);
tm = localtime(&t);
strftime(todaystr, sizeof(todaystr) - 1, "%a, %x", tm);
inst = E_NEW(Instance, 1);
inst->cfg = _conf_item_get(id);
@ -464,6 +542,8 @@ _gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style)
edje_object_signal_emit(o, "e,state,seconds,on", "e");
else
edje_object_signal_emit(o, "e,state,seconds,off", "e");
edje_object_part_text_set(o, "e.text.today", todaystr);
evas_object_show(o);
gcc = e_gadcon_client_new(gc, name, id, style, o);
@ -478,6 +558,9 @@ _gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style)
inst);
clock_instances = eina_list_append(clock_instances, inst);
if (!update_today) _update_today_timer(NULL);
return gcc;
}
@ -498,6 +581,12 @@ _gc_shutdown(E_Gadcon_Client *gcc)
_clock_popup_free(inst);
_clear_timestrs(inst);
free(inst);
if ((!clock_instances) && (update_today))
{
ecore_timer_del(update_today);
update_today = NULL;
}
}
static void
@ -702,6 +791,13 @@ e_modapi_shutdown(E_Module *m __UNUSED__)
conf_edd = NULL;
e_gadcon_provider_unregister(&_gadcon_class);
if (update_today)
{
ecore_timer_del(update_today);
update_today = NULL;
}
return 1;
}