From f7cece5c47a98b917164d1a70cd0556c8617dcaa Mon Sep 17 00:00:00 2001 From: sebastid Date: Thu, 10 Feb 2005 12:00:39 +0000 Subject: [PATCH] - Menu for each face. - Save config. SVN revision: 13283 --- src/modules/battery/e_mod_main.c | 191 +++++++++++++++++++++++++------ src/modules/battery/e_mod_main.h | 16 +-- 2 files changed, 163 insertions(+), 44 deletions(-) diff --git a/src/modules/battery/e_mod_main.c b/src/modules/battery/e_mod_main.c index f6da4cec0..0c61083b7 100644 --- a/src/modules/battery/e_mod_main.c +++ b/src/modules/battery/e_mod_main.c @@ -6,28 +6,32 @@ /* TODO List: * - * fix menu pr. face - * separate face from battery - * + * which options should be in main menu, and which in face menu? */ /* module private routines */ -static Battery *_battery_init(E_Module *m); -static void _battery_shutdown(Battery *e); -static void _battery_config_menu_new(Battery *e); -static int _battery_cb_check(void *data); -static Status *_battery_linux_acpi_check(Battery *ef); -static Status *_battery_linux_apm_check(Battery *ef); +static Battery *_battery_new(); +static void _battery_shutdown(Battery *e); +static void _battery_config_menu_new(Battery *e); +static int _battery_cb_check(void *data); +static Status *_battery_linux_acpi_check(Battery *ef); +static Status *_battery_linux_apm_check(Battery *ef); -static void _battery_face_init(Battery_Face *ef); -static void _battery_face_free(Battery_Face *ef); -static void _battery_face_cb_gmc_change(void *data, E_Gadman_Client *gmc, E_Gadman_Change change); -static void _battery_face_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info); -static void _battery_face_level_set(Battery_Face *ef, double level); +static Battery_Face *_battery_face_new(E_Container *con); +static void _battery_face_free(Battery_Face *ef); +static void _battery_face_menu_new(Battery_Face *face); +static void _battery_face_enable(Battery_Face *face); +static void _battery_face_disable(Battery_Face *face); +static void _battery_face_cb_gmc_change(void *data, E_Gadman_Client *gmc, E_Gadman_Change change); +static void _battery_face_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info); +static void _battery_face_level_set(Battery_Face *ef, double level); +static void _battery_face_cb_menu_enabled(void *data, E_Menu *m, E_Menu_Item *mi); static E_Config_DD *conf_edd; static E_Config_DD *conf_face_edd; +static int battery_count; + /* public module routines. all modules must have these */ void * init(E_Module *m) @@ -47,7 +51,7 @@ init(E_Module *m) return NULL; } /* actually init battery */ - e = _battery_init(m); + e = _battery_new(); m->config_menu = e->config_menu; return e; } @@ -100,11 +104,14 @@ about(E_Module *m) /* module private routines */ static Battery * -_battery_init(E_Module *m) +_battery_new() { Battery *e; Evas_List *managers, *l, *l2, *cl; + E_Menu_Item *mi; + + battery_count = 0; e = E_NEW(Battery, 1); if (!e) return NULL; @@ -143,6 +150,7 @@ _battery_init(E_Module *m) e->battery_check_timer = ecore_timer_add(e->conf->poll_time, _battery_cb_check, e); managers = e_manager_list(); + cl = e->conf->faces; for (l = managers; l; l = l->next) { E_Manager *man; @@ -154,14 +162,46 @@ _battery_init(E_Module *m) Battery_Face *ef; con = l2->data; - ef = E_NEW(Battery_Face, 1); + ef = _battery_face_new(con); if (ef) { - ef->bat = e; - ef->con = con; - ef->evas = con->bg_evas; - _battery_face_init(ef); e->faces = evas_list_append(e->faces, ef); + + /* Config */ + if (!cl) + { + ef->conf = E_NEW(Config_Face, 1); + ef->conf->enabled = 1; + e->conf->faces = evas_list_append(e->conf->faces, ef->conf); + } + else + { + ef->conf = cl->data; + cl = cl->next; + } + + /* Menu */ + /* This menu must be initialized after conf */ + _battery_face_menu_new(ef); + + /* Add main menu to face menu */ + /* + for (ml = e->menus; ml; ml = ml->next) + { + mn = ml->data; + mi = e_menu_item_new(ef->menu); + e_menu_item_label_set(mi, "????"); + e_menu_item_submenu_set(mi, mn); + } + */ + + mi = e_menu_item_new(e->config_menu); + e_menu_item_label_set(mi, con->name); + e_menu_item_submenu_set(mi, ef->menu); + + /* Setup */ + if (!ef->conf->enabled) + _battery_face_disable(ef); } } } @@ -176,7 +216,6 @@ _battery_shutdown(Battery *e) { Evas_List *l; - free(e->conf); E_CONFIG_DD_FREE(conf_edd); E_CONFIG_DD_FREE(conf_face_edd); @@ -184,8 +223,14 @@ _battery_shutdown(Battery *e) _battery_face_free(l->data); evas_list_free(e->faces); - ecore_timer_del(e->battery_check_timer); + for (l = e->menus; l; l = l->next) + e_object_del(E_OBJECT(l->data)); + evas_list_free(e->menus); e_object_del(E_OBJECT(e->config_menu)); + + ecore_timer_del(e->battery_check_timer); + + free(e->conf); free(e); } @@ -196,6 +241,7 @@ _battery_menu_alarm_10(void *data, E_Menu *m, E_Menu_Item *mi) e = data; e->conf->alarm = 10; + e_config_save_queue(); } static void @@ -205,6 +251,7 @@ _battery_menu_alarm_20(void *data, E_Menu *m, E_Menu_Item *mi) e = data; e->conf->alarm = 20; + e_config_save_queue(); } static void @@ -214,6 +261,7 @@ _battery_menu_alarm_30(void *data, E_Menu *m, E_Menu_Item *mi) e = data; e->conf->alarm = 30; + e_config_save_queue(); } static void @@ -223,6 +271,7 @@ _battery_menu_alarm_40(void *data, E_Menu *m, E_Menu_Item *mi) e = data; e->conf->alarm = 40; + e_config_save_queue(); } static void @@ -232,6 +281,7 @@ _battery_menu_alarm_50(void *data, E_Menu *m, E_Menu_Item *mi) e = data; e->conf->alarm = 50; + e_config_save_queue(); } static void @@ -241,6 +291,7 @@ _battery_menu_alarm_60(void *data, E_Menu *m, E_Menu_Item *mi) e = data; e->conf->alarm = 60; + e_config_save_queue(); } static void @@ -250,6 +301,7 @@ _battery_menu_alarm_disable(void *data, E_Menu *m, E_Menu_Item *mi) e = data; e->conf->alarm = 0; + e_config_save_queue(); } static void @@ -318,6 +370,7 @@ _battery_config_menu_new(Battery *e) E_Menu *mn, *config_menu_alarm, *config_menu_poll; E_Menu_Item *mi; + /* Alarm */ mn = e_menu_new(); mi = e_menu_item_new(mn); @@ -371,6 +424,7 @@ _battery_config_menu_new(Battery *e) config_menu_alarm = mn; + /* Check interval */ mn = e_menu_new(); mi = e_menu_item_new(mn); @@ -421,15 +475,24 @@ _battery_config_menu_new(Battery *e) e_menu_item_submenu_set(mi, config_menu_alarm); e->config_menu = mn; + e->menus = evas_list_append(e->menus, config_menu_poll); + e->menus = evas_list_append(e->menus, config_menu_alarm); } -static void -_battery_face_init(Battery_Face *ef) +static Battery_Face * +_battery_face_new(E_Container *con) { Evas_Object *o; + Battery_Face *ef; - evas_event_freeze(ef->evas); - o = edje_object_add(ef->evas); + ef = E_NEW(Battery_Face, 1); + if (!ef) return NULL; + + ef->con = con; + e_object_ref(E_OBJECT(con)); + + evas_event_freeze(con->bg_evas); + o = edje_object_add(con->bg_evas); ef->bat_object = o; edje_object_file_set(o, @@ -438,7 +501,7 @@ _battery_face_init(Battery_Face *ef) "modules/battery/main"); evas_object_show(o); - o = evas_object_rectangle_add(ef->evas); + o = evas_object_rectangle_add(con->bg_evas); ef->event_object = o; evas_object_layer_set(o, 2); evas_object_repeat_events_set(o, 1); @@ -446,8 +509,8 @@ _battery_face_init(Battery_Face *ef) evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN, _battery_face_cb_mouse_down, ef); evas_object_show(o); - ef->gmc = e_gadman_client_new(ef->con->gadman); - e_gadman_client_domain_set(ef->gmc, "module.battery", 0); + ef->gmc = e_gadman_client_new(con->gadman); + e_gadman_client_domain_set(ef->gmc, "module.battery", battery_count++); e_gadman_client_policy_set(ef->gmc, E_GADMAN_POLICY_ANYWHERE | E_GADMAN_POLICY_HMOVE | @@ -461,16 +524,58 @@ _battery_face_init(Battery_Face *ef) e_gadman_client_resize(ef->gmc, 64, 64); e_gadman_client_change_func_set(ef->gmc, _battery_face_cb_gmc_change, ef); e_gadman_client_load(ef->gmc); - evas_event_thaw(ef->evas); + evas_event_thaw(con->bg_evas); + + return ef; } static void _battery_face_free(Battery_Face *ef) { + e_object_unref(E_OBJECT(ef->con)); e_object_del(E_OBJECT(ef->gmc)); + e_object_del(E_OBJECT(ef->menu)); evas_object_del(ef->bat_object); evas_object_del(ef->event_object); + + free(ef->conf); free(ef); + battery_count--; +} + +static void +_battery_face_menu_new(Battery_Face *face) +{ + E_Menu *mn; + E_Menu_Item *mi; + + mn = e_menu_new(); + face->menu = mn; + + /* Enabled */ + mi = e_menu_item_new(mn); + e_menu_item_label_set(mi, "Enabled"); + e_menu_item_check_set(mi, 1); + if (face->conf->enabled) e_menu_item_toggle_set(mi, 1); + e_menu_item_callback_set(mi, _battery_face_cb_menu_enabled, face); +} + +static void +_battery_face_enable(Battery_Face *face) +{ + face->conf->enabled = 1; + evas_object_show(face->bat_object); + evas_object_show(face->event_object); + e_config_save_queue(); +} + +static void +_battery_face_disable(Battery_Face *face) +{ + face->conf->enabled = 0; + evas_object_hide(face->bat_object); + evas_object_hide(face->event_object); + e_config_save_queue(); } static void @@ -505,7 +610,7 @@ _battery_face_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_i ef = data; if (ev->button == 3) { - e_menu_activate_mouse(ef->bat->config_menu, e_zone_current_get(ef->con), + e_menu_activate_mouse(ef->menu, e_zone_current_get(ef->con), ev->output.x, ev->output.y, 1, 1, E_MENU_POP_DIRECTION_DOWN); e_util_container_fake_mouse_up_all_later(ef->con); @@ -654,7 +759,6 @@ _battery_linux_acpi_check(Battery *ef) int bat_val = 0; - char current_status[256]; int discharging = 0; int charging = 0; int battery = 0; @@ -878,7 +982,7 @@ _battery_linux_apm_check(Battery *ef) stat->level = 0.25; break; case 3: - stat->reading = strdup("Charge"); + stat->reading = strdup("Charging"); stat->level = 1.0; break; } @@ -916,3 +1020,22 @@ _battery_face_level_set(Battery_Face *ef, double level) msg.val = level; edje_object_message_send(ef->bat_object, EDJE_MESSAGE_FLOAT, 1, &msg); } + +static void +_battery_face_cb_menu_enabled(void *data, E_Menu *m, E_Menu_Item *mi) +{ + Battery_Face *face; + unsigned char enabled; + + face = data; + enabled = e_menu_item_toggle_get(mi); + if ((face->conf->enabled) && (!enabled)) + { + _battery_face_disable(face); + } + else if ((!face->conf->enabled) && (enabled)) + { + _battery_face_enable(face); + } + e_menu_item_toggle_set(mi, face->conf->enabled); +} diff --git a/src/modules/battery/e_mod_main.h b/src/modules/battery/e_mod_main.h index 157a95908..d401f4bb4 100644 --- a/src/modules/battery/e_mod_main.h +++ b/src/modules/battery/e_mod_main.h @@ -29,8 +29,9 @@ struct _Config_Face struct _Battery { - E_Menu *config_menu; - Evas_List *faces; + E_Menu *config_menu; + Evas_List *menus; + Evas_List *faces; Config *conf; int alarm_triggered; @@ -44,9 +45,10 @@ struct _Battery struct _Battery_Face { - Battery *bat; E_Container *con; - Evas *evas; + + E_Menu *menu; + Config_Face *conf; Evas_Object *bat_object; Evas_Object *event_object; @@ -73,12 +75,6 @@ struct _Status char *reading; /* time == time left to empty / full */ char *time; - /* Signals */ - /* charge == (ac == on), (fade_clip == default) */ - /* pulsestop == (pulse_clip == default) */ - /* discharge == (ac == off), (fade_clip == default) */ - /* pulse == (pulse_clip == faded), .... */ - /* unknown == (fade_clip == faded) */ }; EAPI void *init (E_Module *m);