Here is an updated version of the patch. - Now the user selectable format string can be disabled via an checkbox and the default format string from the tclock.edj gets used. - The change of the resolution via the configuration menu doesn't need an restart of the module anymore. And i have also fixed a bug with this resolution changer. When you had set the Resolution to second and after that you had changed back the Resolution to minute then the clock continues to update the time in second steps and not in minute steps.
Note: You must delete the old configuration of the module (~/.e/e/config/default/module.tclock.cfg) Regards _FireFly_ (Stephan Wezel)
? tclock-timeformat-config-dialog.diff Index: e_mod_config.c =================================================================== RCS file: /var/cvs/e/e_modules/tclock/e_mod_config.c,v retrieving revision 1.12 diff -u -r1.12 e_mod_config.c --- e_mod_config.c 1 Apr 2006 19:35:59 -0000 1.12 +++ e_mod_config.c 4 Apr 2006 14:56:29 -0000 @@ -4,7 +4,9 @@ struct _E_Config_Dialog_Data { - int resolution; + unsigned int resolution; + char *format; + int userformat; }; /* Protos */ @@ -14,6 +16,7 @@ E_Config_Dialog_Data *cfdata); static int _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata); +static void onCheckChange(void *data, Evas_Object *obj); void _config_tclock_module(E_Container *con, TClock_Face * f) @@ -35,6 +38,9 @@ _fill_data(TClock_Face * f, E_Config_Dialog_Data *cfdata) { cfdata->resolution = f->conf->resolution; + if(f->conf->format) + cfdata->format = strdup(f->conf->format); + cfdata->userformat = f->conf->userformat; } static void * @@ -59,7 +65,7 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata) { - Evas_Object *o, *of, *ob; + Evas_Object *o, *of, *ob, *entry, *checked; E_Radio_Group *rg; o = e_widget_list_add(evas, 0, 0); @@ -70,6 +76,25 @@ ob = e_widget_radio_add(evas, D_("1 Second"), RESOLUTION_SECOND, rg); e_widget_framelist_object_append(of, ob); e_widget_list_object_append(o, of, 1, 1, 0.5); + + of = e_widget_frametable_add(evas, D_("Timeformat"), 0); + checked = e_widget_check_add(evas,D_("User format String"),&(cfdata->userformat)); + if(cfdata->userformat) + e_widget_check_checked_set(checked,1); + e_widget_frametable_object_append(of, checked,0,0,1,1,1,0,1,0); + ob = e_widget_label_add(evas, D_("For the format syntax please read the docu from strftime")); + e_widget_frametable_object_append(of, ob,0,2,1,1,1,0,1,0); + entry = e_widget_entry_add(evas,&(cfdata->format)); + e_widget_disabled_set(entry,!cfdata->userformat); + e_widget_min_size_set(entry,150,1); + e_widget_frametable_object_append(of, entry,0,1,1,1,1,0,1,0); + ob = e_widget_label_add(evas, D_("")); + e_widget_frametable_object_append(of, ob,0,1,1,1,1,0,1,0); + e_widget_list_object_append(o, of, 1, 1, 0.5); + e_widget_on_change_hook_set(checked,onCheckChange,entry); + + + return o; } @@ -80,8 +105,32 @@ f = cfd->data; e_border_button_bindings_ungrab_all(); + if(cfdata->resolution != f->conf->resolution) { + if (cfdata->resolution == RESOLUTION_MINUTE) + f->tclock->conf->poll_time = 60.0; + else + f->tclock->conf->poll_time = 1.0; + ecore_timer_interval_set(f->tclock->tclock_check_timer, + f->tclock->conf->poll_time); + } f->conf->resolution = cfdata->resolution; + f->conf->userformat = cfdata->userformat; + + /* update the format string with the format string given by the user + when the userformat is true and the string(typed by the user) isn't empty */ + if(strlen(cfdata->format)>0 && cfdata->userformat) { + if(f->conf->format) + evas_stringshare_del(f->conf->format); + f->conf->format = (char*)evas_stringshare_add(cfdata->format); + } + e_config_save_queue(); e_border_button_bindings_grab_all(); return 1; } + +static void onCheckChange(void *data, Evas_Object *obj) +{ + int checked = e_widget_check_checked_get(obj); + e_widget_disabled_set(data,!checked); +} Index: e_mod_main.c =================================================================== RCS file: /var/cvs/e/e_modules/tclock/e_mod_main.c,v retrieving revision 1.13 diff -u -r1.13 e_mod_main.c --- e_mod_main.c 1 Apr 2006 19:35:59 -0000 1.13 +++ e_mod_main.c 4 Apr 2006 14:56:30 -0000 @@ -143,6 +143,7 @@ E_CONFIG_VAL(D, T, enabled, UCHAR); E_CONFIG_VAL(D, T, resolution, UINT); E_CONFIG_VAL(D, T, format, STR); + E_CONFIG_VAL(D, T, userformat, UINT); conf_edd = E_CONFIG_DD_NEW("TClock_Config", Config); #undef T @@ -188,6 +189,14 @@ /* set instance config values */ face->conf->enabled = 1; face->conf->resolution = RESOLUTION_MINUTE; + face->conf->userformat = 0; + + const char *format; + format = + edje_object_part_state_get(face->tclock_object, "tclock_format", + NULL); + face->conf->format = (char*)evas_stringshare_add(format); + tclock->conf->faces = evas_list_append(tclock->conf->faces, face->conf); } @@ -207,11 +216,13 @@ } else { - E_CONFIG_LIMIT(tclock->conf->poll_time, 1.0, 60.0); + E_CONFIG_LIMIT(tclock->conf->poll_time, 60.0, 60.0); tclock->tclock_check_timer = ecore_timer_add(tclock->conf->poll_time, _tclock_cb_check, tclock); TCLOCK_DEBUG("RES_MIN"); + /* to avoid the long display of "Starting the clock..." */ + _tclock_cb_check(tclock); } /* Menu */ @@ -229,6 +240,7 @@ } } } + return tclock; } @@ -341,6 +353,8 @@ evas_object_del(face->event_object); e_object_del(E_OBJECT(face->menu)); + if(face->conf->format) + evas_stringshare_del(face->conf->format); free(face->conf); free(face); _tclock_count--; @@ -365,15 +379,18 @@ TClock_Face *face; face = l->data; + + const char *format; + /* Load the default format string from the module.edj-file + when the user defineable format string shouldn't be used + otherwise use the user defined format string*/ + if(!face->conf->userformat) { + format = edje_object_part_state_get(face->tclock_object, "tclock_format", + NULL); + } else + format = face->conf->format; - const char *format; - - format = - edje_object_part_state_get(face->tclock_object, "tclock_format", - NULL); - face->conf->format = format; - - strftime(buf, TIME_BUF, face->conf->format, local_time); + strftime(buf, TIME_BUF, format, local_time); TCLOCK_DEBUG(face->conf->format); edje_object_part_text_set(face->tclock_object, "tclock_text", buf); Index: e_mod_main.h =================================================================== RCS file: /var/cvs/e/e_modules/tclock/e_mod_main.h,v retrieving revision 1.6 diff -u -r1.6 e_mod_main.h --- e_mod_main.h 1 Apr 2006 19:35:59 -0000 1.6 +++ e_mod_main.h 4 Apr 2006 14:56:30 -0000 @@ -21,7 +21,8 @@ typedef struct _Config_Face { unsigned char enabled; unsigned int resolution; - const char *format; + char *format; + unsigned int userformat; } Config_Face; typedef struct _TClock {