From ba1b494b409f37723f006654246e046d16b44b1e Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Sun, 5 Jun 2011 07:42:10 +0000 Subject: [PATCH] more clock work. cfg dialog now, config file and settings, not al work... yet. digital clock, seconds on/off and 24h vs 12h still to go. SVN revision: 59962 --- data/themes/default.edc | 2 +- src/modules/clock/Makefile.am | 3 +- src/modules/clock/e_mod_config.c | 165 +++++++++++++++++++++++++++++++ src/modules/clock/e_mod_main.c | 135 ++++++++++++++++++++----- src/modules/clock/e_mod_main.h | 22 +++++ 5 files changed, 298 insertions(+), 29 deletions(-) create mode 100644 src/modules/clock/e_mod_config.c diff --git a/data/themes/default.edc b/data/themes/default.edc index 108645396..d81859ae3 100644 --- a/data/themes/default.edc +++ b/data/themes/default.edc @@ -12241,7 +12241,7 @@ collections { } description { state: "today" 0.0; inherit: "default" 0.0; - color: 0 0 0 128; + color: 0 0 0 200; } } part { name: "e.text.label"; diff --git a/src/modules/clock/Makefile.am b/src/modules/clock/Makefile.am index 7945f1f76..927de8526 100644 --- a/src/modules/clock/Makefile.am +++ b/src/modules/clock/Makefile.am @@ -19,7 +19,8 @@ INCLUDES = -I. \ pkgdir = $(libdir)/enlightenment/modules/$(MODULE)/$(MODULE_ARCH) pkg_LTLIBRARIES = module.la module_la_SOURCES = e_mod_main.c \ - e_mod_main.h + e_mod_main.h \ + e_mod_config.c module_la_LIBADD = @e_libs@ @dlopen_libs@ module_la_LDFLAGS = -module -avoid-version module_la_DEPENDENCIES = $(top_builddir)/config.h diff --git a/src/modules/clock/e_mod_config.c b/src/modules/clock/e_mod_config.c new file mode 100644 index 000000000..4ad2ab425 --- /dev/null +++ b/src/modules/clock/e_mod_config.c @@ -0,0 +1,165 @@ +#include "e.h" +#include "e_mod_main.h" + +struct _E_Config_Dialog_Data +{ + Config cfg; +}; + +/* Protos */ +static void *_create_data(E_Config_Dialog *cfd); +static void _free_data(E_Config_Dialog *cfd, + E_Config_Dialog_Data *cfdata); +static Evas_Object *_basic_create_widgets(E_Config_Dialog *cfd, + Evas *evas, + E_Config_Dialog_Data *cfdata); +static int _basic_apply_data(E_Config_Dialog *cfd, + E_Config_Dialog_Data *cfdata); + +E_Config_Dialog * +e_int_config_clock_module(E_Container *con, + const char *params __UNUSED__) +{ + E_Config_Dialog *cfd; + E_Config_Dialog_View *v; + char buf[4096]; + + if (e_config_dialog_find("E", "utils/clock")) return NULL; + v = E_NEW(E_Config_Dialog_View, 1); + + v->create_cfdata = _create_data; + v->free_cfdata = _free_data; + v->basic.apply_cfdata = _basic_apply_data; + v->basic.create_widgets = _basic_create_widgets; + + snprintf(buf, sizeof(buf), "%s/e-module-clock.edj", + e_module_dir_get(clock_module)); + cfd = e_config_dialog_new(con, _("Composite Settings"), + "E", "utils/clock", buf, 0, v, clock_module); + clock_config = cfd; + return cfd; +} + +static void * +_create_data(E_Config_Dialog *cfd __UNUSED__) +{ + E_Config_Dialog_Data *cfdata; + + cfdata = E_NEW(E_Config_Dialog_Data, 1); + + memcpy(&(cfdata->cfg), clock_cfg, sizeof(Config)); + + return cfdata; +} + +static void +_free_data(E_Config_Dialog *cfd __UNUSED__, + E_Config_Dialog_Data *cfdata) +{ + clock_config = NULL; + free(cfdata); +} + +static Evas_Object * +_basic_create_widgets(E_Config_Dialog *cfd __UNUSED__, + Evas *evas, + E_Config_Dialog_Data *cfdata) +{ + Evas_Object *ob, *tab, *of; + E_Radio_Group *rg; + + tab = e_widget_table_add(evas, 0); + + of = e_widget_frametable_add(evas, _("Clock"), 0); + + rg = e_widget_radio_group_new(&(cfdata->cfg.digital_clock)); + ob = e_widget_radio_add(evas, _("Analogue"), 0, rg); + e_widget_frametable_object_append(of, ob, 0, 0, 1, 1, 1, 1, 0, 0); + ob = e_widget_radio_add(evas, _("Digital"), 1, rg); + e_widget_frametable_object_append(of, ob, 0, 1, 1, 1, 1, 1, 0, 0); + ob = e_widget_label_add(evas, ""); + e_widget_frametable_object_append(of, ob, 0, 2, 1, 1, 0, 1, 0, 0); + rg = e_widget_radio_group_new(&(cfdata->cfg.digital_24h)); + ob = e_widget_radio_add(evas, _("12HR"), 0, rg); + e_widget_frametable_object_append(of, ob, 0, 3, 1, 1, 1, 1, 0, 0); + ob = e_widget_radio_add(evas, _("24HR"), 1, rg); + e_widget_frametable_object_append(of, ob, 0, 4, 1, 1, 1, 1, 0, 0); + + e_widget_table_object_append(tab, of, 0, 0, 1, 1, 1, 1, 1, 1); + + of = e_widget_frametable_add(evas, _("Weekend"), 0); + + of = e_widget_frametable_add(evas, _("Week"), 0); + + ob = e_widget_label_add(evas, _("Start")); + e_widget_frametable_object_append(of, ob, 0, 0, 1, 1, 0, 1, 0, 0); + rg = e_widget_radio_group_new(&(cfdata->cfg.week.start)); + ob = e_widget_radio_add(evas, _("Sun"), 0, rg); + e_widget_frametable_object_append(of, ob, 0, 1, 1, 1, 1, 1, 0, 0); + ob = e_widget_radio_add(evas, _("Mon"), 1, rg); + e_widget_frametable_object_append(of, ob, 0, 2, 1, 1, 1, 1, 0, 0); + ob = e_widget_radio_add(evas, _("Tue"), 2, rg); + e_widget_frametable_object_append(of, ob, 0, 3, 1, 1, 1, 1, 0, 0); + ob = e_widget_radio_add(evas, _("Wed"), 3, rg); + e_widget_frametable_object_append(of, ob, 0, 4, 1, 1, 1, 1, 0, 0); + ob = e_widget_radio_add(evas, _("Thu"), 4, rg); + e_widget_frametable_object_append(of, ob, 0, 5, 1, 1, 1, 1, 0, 0); + ob = e_widget_radio_add(evas, _("Fri"), 5, rg); + e_widget_frametable_object_append(of, ob, 0, 6, 1, 1, 1, 1, 0, 0); + ob = e_widget_radio_add(evas, _("Sat"), 6, rg); + e_widget_frametable_object_append(of, ob, 0, 7, 1, 1, 1, 1, 0, 0); + + e_widget_table_object_append(tab, of, 1, 0, 1, 1, 1, 1, 1, 1); + + of = e_widget_frametable_add(evas, _("Weekend"), 0); + + ob = e_widget_label_add(evas, _("Start")); + e_widget_frametable_object_append(of, ob, 0, 0, 1, 1, 0, 1, 0, 0); + rg = e_widget_radio_group_new(&(cfdata->cfg.weekend.start)); + ob = e_widget_radio_add(evas, _("Sun"), 0, rg); + e_widget_frametable_object_append(of, ob, 0, 1, 1, 1, 1, 1, 0, 0); + ob = e_widget_radio_add(evas, _("Mon"), 1, rg); + e_widget_frametable_object_append(of, ob, 0, 2, 1, 1, 1, 1, 0, 0); + ob = e_widget_radio_add(evas, _("Tue"), 2, rg); + e_widget_frametable_object_append(of, ob, 0, 3, 1, 1, 1, 1, 0, 0); + ob = e_widget_radio_add(evas, _("Wed"), 3, rg); + e_widget_frametable_object_append(of, ob, 0, 4, 1, 1, 1, 1, 0, 0); + ob = e_widget_radio_add(evas, _("Thu"), 4, rg); + e_widget_frametable_object_append(of, ob, 0, 5, 1, 1, 1, 1, 0, 0); + ob = e_widget_radio_add(evas, _("Fri"), 5, rg); + e_widget_frametable_object_append(of, ob, 0, 6, 1, 1, 1, 1, 0, 0); + ob = e_widget_radio_add(evas, _("Sat"), 6, rg); + e_widget_frametable_object_append(of, ob, 0, 7, 1, 1, 1, 1, 0, 0); + + ob = e_widget_label_add(evas, _("Days")); + e_widget_frametable_object_append(of, ob, 1, 0, 1, 1, 0, 1, 0, 0); + rg = e_widget_radio_group_new(&(cfdata->cfg.weekend.len)); + ob = e_widget_radio_add(evas, _("None"), 0, rg); + e_widget_frametable_object_append(of, ob, 1, 1, 1, 1, 1, 1, 0, 0); + ob = e_widget_radio_add(evas, "1", 1, rg); + e_widget_frametable_object_append(of, ob, 1, 2, 1, 1, 1, 1, 0, 0); + ob = e_widget_radio_add(evas, "2", 2, rg); + e_widget_frametable_object_append(of, ob, 1, 3, 1, 1, 1, 1, 0, 0); + ob = e_widget_radio_add(evas, "3", 3, rg); + e_widget_frametable_object_append(of, ob, 1, 4, 1, 1, 1, 1, 0, 0); + ob = e_widget_radio_add(evas, "4", 4, rg); + e_widget_frametable_object_append(of, ob, 1, 5, 1, 1, 1, 1, 0, 0); + ob = e_widget_radio_add(evas, "5", 5, rg); + e_widget_frametable_object_append(of, ob, 1, 6, 1, 1, 1, 1, 0, 0); + ob = e_widget_radio_add(evas, "6", 6, rg); + e_widget_frametable_object_append(of, ob, 1, 7, 1, 1, 1, 1, 0, 0); + + e_widget_table_object_append(tab, of, 2, 0, 1, 1, 1, 1, 1, 1); + return tab; +} + +static int +_basic_apply_data(E_Config_Dialog *cfd __UNUSED__, + E_Config_Dialog_Data *cfdata) +{ + memcpy(clock_cfg, &(cfdata->cfg), sizeof(Config)); + e_int_clock_instances_redo(); + e_config_save_queue(); + return 1; +} + diff --git a/src/modules/clock/e_mod_main.c b/src/modules/clock/e_mod_main.c index aa35e029a..0ebb8a9ac 100644 --- a/src/modules/clock/e_mod_main.c +++ b/src/modules/clock/e_mod_main.c @@ -31,12 +31,6 @@ struct _Instance E_Gadcon_Client *gcc; Evas_Object *o_clock, *o_table, *o_popclock, *o_cal; E_Gadcon_Popup *popup; - struct { - int start, len; // 0->6 0 == sun, 6 == sat, number of days - } weekend; - struct { - int start; // 0->6 0 == sun, 6 == sat - } week; int madj; @@ -49,7 +43,12 @@ struct _Instance Eina_Bool daytoday[7][6]; }; -static E_Module *clock_module = NULL; +E_Module *clock_module = NULL; +E_Config_Dialog *clock_config = NULL; +Config *clock_cfg = NULL; + +static E_Config_DD *clock_cfg_edd = NULL; +static Eina_List *clock_instances = NULL; static void _clear_timestrs(Instance *inst) @@ -110,7 +109,7 @@ _time_eval(Instance *inst) memcpy(&tmm, tm, sizeof(struct tm)); if (!started) { - if (tm->tm_wday == inst->week.start) started = 1; + if (tm->tm_wday == clock_cfg->week.start) started = 1; } if (started) { @@ -131,8 +130,8 @@ _time_eval(Instance *inst) inst->daytoday[x][y] = 1; inst->dayweekends[x][y] = 0; - for (i = inst->weekend.start; - i < (inst->weekend.start + inst->weekend.len); + for (i = clock_cfg->weekend.start; + i < (clock_cfg->weekend.start + clock_cfg->weekend.len); i++) { if (tmm.tm_wday == (i % 7)) @@ -231,6 +230,15 @@ _clock_month_next_cb(void *data, Evas_Object *obj __UNUSED__, const char *emissi _clock_moth_update(inst); } +static void +_clock_settings_cb(void *d1, void *d2 __UNUSED__) +{ + Instance *inst = d1; + e_int_config_clock_module(inst->popup->win->zone->container, NULL); + e_object_del(E_OBJECT(inst->popup)); + inst->popup = NULL; +} + static void _clock_popup_new(Instance *inst) { @@ -239,6 +247,8 @@ _clock_popup_new(Instance *inst) Evas_Coord mw = 128, mh = 128; if (inst->popup) return; + + inst->madj = 0; _time_eval(inst); @@ -255,6 +265,11 @@ _clock_popup_new(Instance *inst) evas_object_show(oi); e_widget_table_object_align_append(inst->o_table, o, 0, 0, 1, 1, 0, 0, 0, 0, 0.5, 0.5); + + o = e_widget_button_add(evas, _("Settings"), "preferences-system", + _clock_settings_cb, inst, NULL); + e_widget_table_object_align_append(inst->o_table, o, + 0, 1, 1, 1, 0, 0, 0, 0, 0.5, 1.0); oi = edje_object_add(evas); inst->o_cal = oi; @@ -266,27 +281,45 @@ _clock_popup_new(Instance *inst) _clock_month_prev_cb, inst); edje_object_signal_callback_add(oi, "e,action,next", "*", _clock_month_next_cb, inst); - // FIXME: add set time/date/timezone button - // FIXME: add button for settings panel bringup - // FIXME: add settings panel that can change: - // digital vs analogue - // weekend start and # of days - // week start day - // if digital 24h or 12h - // app to run when date clicked - // app to run to set time+date+timezone evas_object_resize(oi, 500, 500); edje_object_size_min_restricted_calc(oi, &mw, &mh, 128, 128); o = e_widget_image_add_from_object(evas, oi, mw, mh); evas_object_show(oi); e_widget_table_object_align_append(inst->o_table, o, - 1, 0, 1, 1, 0, 0, 0, 0, 0.5, 0.5); + 1, 0, 1, 2, 0, 0, 0, 0, 0.5, 0.5); e_gadcon_popup_content_set(inst->popup, inst->o_table); e_gadcon_popup_show(inst->popup); } +void +e_int_clock_instances_redo(void) +{ + Eina_List *l; + Instance *inst; + + EINA_LIST_FOREACH(clock_instances, l, inst) + { + Evas_Object *o = inst->o_clock; + + if (clock_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 (clock_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 (clock_cfg->show_seconds) + edje_object_signal_emit(o, "e,state,seconds,on", "e"); + else + edje_object_signal_emit(o, "e,state,seconds,off", "e"); + } +} + static void _clock_popup_free(Instance *inst) { @@ -316,8 +349,20 @@ _gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style) inst = E_NEW(Instance, 1); o = edje_object_add(gc->evas); - e_theme_edje_object_set(o, "base/theme/modules/clock", - "e/modules/clock/main"); + if (clock_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 (clock_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 (clock_cfg->show_seconds) + edje_object_signal_emit(o, "e,state,seconds,on", "e"); + else + edje_object_signal_emit(o, "e,state,seconds,off", "e"); evas_object_show(o); gcc = e_gadcon_client_new(gc, name, id, style, o); @@ -326,17 +371,14 @@ _gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style) inst->gcc = gcc; inst->o_clock = o; - inst->weekend.start = 6; // start weekend on sat - inst->weekend.len = 2; // 2 days of weeked - inst->week.start = 1; // start mon - evas_object_event_callback_add(inst->o_clock, EVAS_CALLBACK_MOUSE_DOWN, _clock_cb_mouse_down, inst); e_gadcon_client_util_menu_attach(gcc); - + + clock_instances = eina_list_append(clock_instances, inst); return gcc; } @@ -346,6 +388,7 @@ _gc_shutdown(E_Gadcon_Client *gcc) Instance *inst; inst = gcc->data; + clock_instances = eina_list_remove(clock_instances, inst); evas_object_del(inst->o_clock); _clock_popup_free(inst); _clear_timestrs(inst); @@ -404,6 +447,31 @@ EAPI E_Module_Api e_modapi = EAPI void * e_modapi_init(E_Module *m) { + clock_cfg_edd = E_CONFIG_DD_NEW("Config", Config); +#undef T +#undef D +#define T Config +#define D clock_cfg_edd + E_CONFIG_VAL(D, T, weekend.start, INT); + E_CONFIG_VAL(D, T, weekend.len, INT); + E_CONFIG_VAL(D, T, week.start, INT); + E_CONFIG_VAL(D, T, digital_clock, INT); + E_CONFIG_VAL(D, T, digital_24h, INT); + E_CONFIG_VAL(D, T, show_seconds, INT); + + clock_cfg = e_config_domain_load("module.clock", clock_cfg_edd); + if (!clock_cfg) + { + clock_cfg = E_NEW(Config, 1); + clock_cfg->weekend.start = 6; + clock_cfg->weekend.len = 2; + clock_cfg->week.start = 1; + clock_cfg->digital_clock = 0; + clock_cfg->digital_24h = 0; + clock_cfg->show_seconds = 1; + e_config_save_queue(); + } + clock_module = m; e_gadcon_provider_register(&_gadcon_class); return m; @@ -412,6 +480,18 @@ e_modapi_init(E_Module *m) EAPI int e_modapi_shutdown(E_Module *m __UNUSED__) { + if (clock_config) + { + e_object_del(E_OBJECT(clock_config)); + clock_config = NULL; + } + if (clock_cfg) + { + free(clock_cfg); + clock_cfg = NULL; + } + E_CONFIG_DD_FREE(clock_cfg_edd); + clock_cfg_edd = NULL; clock_module = NULL; e_gadcon_provider_unregister(&_gadcon_class); return 1; @@ -420,5 +500,6 @@ e_modapi_shutdown(E_Module *m __UNUSED__) EAPI int e_modapi_save(E_Module *m __UNUSED__) { + e_config_domain_save("module.clock", clock_cfg_edd, clock_cfg); return 1; } diff --git a/src/modules/clock/e_mod_main.h b/src/modules/clock/e_mod_main.h index 4adf2f1fb..bcaa936d7 100644 --- a/src/modules/clock/e_mod_main.h +++ b/src/modules/clock/e_mod_main.h @@ -7,4 +7,26 @@ EAPI void *e_modapi_init (E_Module *m); EAPI int e_modapi_shutdown (E_Module *m); EAPI int e_modapi_save (E_Module *m); +typedef struct _Config Config; + +struct _Config +{ + struct { + int start, len; // 0->6 0 == sun, 6 == sat, number of days + } weekend; + struct { + int start; // 0->6 0 == sun, 6 == sat + } week; + int digital_clock; + int digital_24h; + int show_seconds; +}; + +extern E_Module *clock_module; +extern E_Config_Dialog *clock_config; +extern Config *clock_cfg; + +E_Config_Dialog *e_int_config_clock_module(E_Container *con, const char *params); +void e_int_clock_instances_redo(void); + #endif