Hopefully this is the last time I'll have to submit this.
Index: data/themes/default_battery.edc
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/data/themes/default_battery.edc,v
retrieving revision 1.2
diff -u -r1.2 default_battery.edc
--- data/themes/default_battery.edc	10 Jan 2005 22:33:53 -0000	1.2
+++ data/themes/default_battery.edc	11 Jan 2005 06:34:06 -0000
@@ -28,6 +28,7 @@
       part {
 	 name: "battery";
 	 clip_to: "fade_clip";
+	 clip_to: "pulse_clip";
 	 description {
 	    state: "default" 0.0;
 	    aspect: 0.669291339 0.669291339;
@@ -206,6 +207,23 @@
 	    color: 255 255 255 128;
 	 }
       }
+      part {
+ 	 name:           "pulse_clip";
+ 	 type:           RECT;
+  	 mouse_events:   0;
+ 	 description {
+ 	    state: "default" 0.0;
+ 	    color: 255 255 255 255;
+ 	 }
+ 	 description {
+ 	    state: "faded" 1.0;
+ 	    color: 255 255 255 255;
+ 	 }
+ 	 description {
+ 	    state: "faded" 0.0;
+ 	    color: 255 255 255 0;
+ 	 }
+ 	}
    }
    programs {
       program {
@@ -243,6 +261,30 @@
 	 action: STATE_SET "faded" 0.0;
 	 target: "fade_clip";
       }
+      program {
+ 	    name: "pulse";
+ 	    signal: "pulse";
+ 	    source: "";
+ 	    action: STATE_SET "faded" 0.0;
+ 	    transition: ACCELERATE 0.3;
+ 	    after: "pulse2";
+ 	    target: "pulse_clip";
+ 	 }
+ 	 program {
+ 	 	name: "pulse2";
+ 	 	signal: "pulse2";
+ 	 	source: "";
+ 	 	action: STATE_SET "faded" 1.0;
+ 	 	transition: ACCELERATE 0.1;
+ 	 	target: "pulse_clip";
+ 	 }
+ 	 program {
+ 	 	name: "pulsestop";
+ 	 	signal: "pulsestop";
+ 	 	source: "";
+ 	 	action: STATE_SET "default" 0.0;
+ 	 	target: "pulse_clip";
+ 	 }
    }
 }
 
Index: src/modules/battery/e_mod_main.c
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/modules/battery/e_mod_main.c,v
retrieving revision 1.8
diff -u -r1.8 e_mod_main.c
--- src/modules/battery/e_mod_main.c	4 Jan 2005 14:09:56 -0000	1.8
+++ src/modules/battery/e_mod_main.c	11 Jan 2005 06:34:08 -0000
@@ -58,6 +58,8 @@
      {
 	if (m->config_menu)
 	  {
+          _battery_config_menu_del(e, e->config_menu_alarm);
+          _battery_config_menu_del(e, e->config_menu_poll);
 	     _battery_config_menu_del(e, m->config_menu);
 	     m->config_menu = NULL;
 	  }
@@ -117,20 +119,23 @@
    E_CONFIG_VAL(D, T, x, DOUBLE);
    E_CONFIG_VAL(D, T, y, DOUBLE);
    E_CONFIG_VAL(D, T, poll_time, DOUBLE);
+   E_CONFIG_VAL(D, T, alarm, INT);
    
    e->conf = e_config_domain_load("module.battery", e->conf_edd);
    if (!e->conf)
      {
-	e->conf = E_NEW(Config, 1);
-	e->conf->width = 64;
-	e->conf->x = 1.0;
-	e->conf->y = 1.0;
-        e->conf->poll_time = 30.0;
+       e->conf = E_NEW(Config, 1);
+       e->conf->width = 64;
+       e->conf->x = 1.0;
+       e->conf->y = 1.0;
+       e->conf->poll_time = 30.0;
+       e->conf->alarm = 30;
      }
    E_CONFIG_LIMIT(e->conf->width, 2, 256);
    E_CONFIG_LIMIT(e->conf->x, 0.0, 1.0);
    E_CONFIG_LIMIT(e->conf->y, 0.0, 1.0);
    E_CONFIG_LIMIT(e->conf->poll_time, 0.5, 1000.0);
+   E_CONFIG_LIMIT(e->conf->alarm, 0, 60);
    
    managers = e_manager_list();
    for (l = managers; l; l = l->next)
@@ -169,6 +174,69 @@
 }
 
 static void
+_battery_menu_alarm_10(void *data, E_Menu *m, E_Menu_Item *mi)
+{
+   Battery *e;
+   
+   e = data;
+   e->conf->alarm = 10;
+}
+
+static void
+_battery_menu_alarm_20(void *data, E_Menu *m, E_Menu_Item *mi)
+{
+   Battery *e;
+   
+   e = data;
+   e->conf->alarm = 20;
+}
+
+static void
+_battery_menu_alarm_30(void *data, E_Menu *m, E_Menu_Item *mi)
+{
+   Battery *e;
+   
+   e = data;
+   e->conf->alarm = 30;
+}
+
+static void
+_battery_menu_alarm_40(void *data, E_Menu *m, E_Menu_Item *mi)
+{
+   Battery *e;
+   
+   e = data;
+   e->conf->alarm = 40;
+}
+
+static void
+_battery_menu_alarm_50(void *data, E_Menu *m, E_Menu_Item *mi)
+{
+   Battery *e;
+   
+   e = data;
+   e->conf->alarm = 50;
+}
+
+static void
+_battery_menu_alarm_60(void *data, E_Menu *m, E_Menu_Item *mi)
+{
+   Battery *e;
+   
+   e = data;
+   e->conf->alarm = 60;
+}
+
+static void
+_battery_menu_alarm_disable(void *data, E_Menu *m, E_Menu_Item *mi)
+{
+   Battery *e;
+   
+   e = data;
+   e->conf->alarm = 0;
+}
+
+static void
 _battery_menu_fast(void *data, E_Menu *m, E_Menu_Item *mi)
 {
    Battery *e;
@@ -237,6 +305,59 @@
    mn = e_menu_new();
    
    mi = e_menu_item_new(mn);
+   e_menu_item_label_set(mi, "Disable");
+   e_menu_item_radio_set(mi, 1);
+   e_menu_item_radio_group_set(mi, 1);
+   if (e->conf->alarm == 0) e_menu_item_toggle_set(mi, 1);
+   e_menu_item_callback_set(mi, _battery_menu_alarm_disable, e);
+   
+   mi = e_menu_item_new(mn);
+   e_menu_item_label_set(mi, "10 mins");
+   e_menu_item_radio_set(mi, 1);
+   e_menu_item_radio_group_set(mi, 1);
+   if (e->conf->alarm == 10) e_menu_item_toggle_set(mi, 1);
+   e_menu_item_callback_set(mi, _battery_menu_alarm_10, e);
+   
+   mi = e_menu_item_new(mn);
+   e_menu_item_label_set(mi, "20 mins");
+   e_menu_item_radio_set(mi, 1);
+   e_menu_item_radio_group_set(mi, 1);
+   if (e->conf->alarm == 20) e_menu_item_toggle_set(mi, 1);
+   e_menu_item_callback_set(mi, _battery_menu_alarm_20, e);
+   
+   mi = e_menu_item_new(mn);
+   e_menu_item_label_set(mi, "30 mins");
+   e_menu_item_radio_set(mi, 1);
+   e_menu_item_radio_group_set(mi, 1);
+   if (e->conf->alarm == 30) e_menu_item_toggle_set(mi, 1);
+   e_menu_item_callback_set(mi, _battery_menu_alarm_30, e);
+   
+   mi = e_menu_item_new(mn);
+   e_menu_item_label_set(mi, "40 mins");
+   e_menu_item_radio_set(mi, 1);
+   e_menu_item_radio_group_set(mi, 1);
+   if (e->conf->alarm == 40) e_menu_item_toggle_set(mi, 1);
+   e_menu_item_callback_set(mi, _battery_menu_alarm_40, e);
+   
+   mi = e_menu_item_new(mn);
+   e_menu_item_label_set(mi, "50 mins");
+   e_menu_item_radio_set(mi, 1);
+   e_menu_item_radio_group_set(mi, 1);
+   if (e->conf->alarm == 50) e_menu_item_toggle_set(mi, 1);
+   e_menu_item_callback_set(mi, _battery_menu_alarm_50, e);
+   
+   mi = e_menu_item_new(mn);
+   e_menu_item_label_set(mi, "1 hour");
+   e_menu_item_radio_set(mi, 1);
+   e_menu_item_radio_group_set(mi, 1);
+   if (e->conf->alarm == 60) e_menu_item_toggle_set(mi, 1);
+   e_menu_item_callback_set(mi, _battery_menu_alarm_60, e);
+   
+   e->config_menu_alarm = mn;
+   
+   mn = e_menu_new();
+   
+   mi = e_menu_item_new(mn);
    e_menu_item_label_set(mi, "Check Fast (1 sec)");
    e_menu_item_radio_set(mi, 1);
    e_menu_item_radio_group_set(mi, 1);
@@ -271,6 +392,18 @@
    if (e->conf->poll_time == 60.0) e_menu_item_toggle_set(mi, 1);
    e_menu_item_callback_set(mi, _battery_menu_very_slow, e);
 
+   e->config_menu_poll = mn;
+   
+   mn = e_menu_new();
+   
+   mi = e_menu_item_new(mn);
+   e_menu_item_label_set(mi, "Set Poll Time");
+   e_menu_item_submenu_set(mi, e->config_menu_poll);
+   
+   mi = e_menu_item_new(mn);
+   e_menu_item_label_set(mi, "Set Alarm");
+   e_menu_item_submenu_set(mi, e->config_menu_alarm);
+   
    e->config_menu = mn;
    
    return mn;
@@ -443,7 +576,7 @@
 	if (ef->fy + ef->fw > sh) ef->fw = sh - ef->fy;
 	evas_object_resize(ef->bat_object, ef->fw, ef->fw);
 	evas_object_resize(ef->event_object, ef->fw, ef->fw);
-   }
+     }
    ef->xx = ev->cur.canvas.x;
    ef->yy = ev->cur.canvas.y;
 }  
@@ -614,49 +747,66 @@
    
    if ((charging) || (discharging))
      {
-	ef->battery_prev_battery = 1;
-	if ((charging ) && (ef->battery_prev_ac != 1))
-	  {
-	     edje_object_signal_emit(ef->bat_object, "charge", "");
-	     ef->battery_prev_ac = 1;
-	  }
-	else if ((discharging) && (ef->battery_prev_ac != 0))
-	  {
-	     edje_object_signal_emit(ef->bat_object, "discharge", "");
-	     ef->battery_prev_ac = 0;
-	  }
-	if (level_unknown)
-	  {
-	     edje_object_part_text_set(ef->bat_object, "reading", "BAD DIRVER");
-	     edje_object_part_text_set(ef->bat_object, "time", "--:--");
-	     _battery_level_set(ef, 0.0);
-	  }
-	else if (rate_unknown)
-	  {
-	     snprintf(buf, sizeof(buf), "%i%%", bat_val);
-	     edje_object_part_text_set(ef->bat_object, "reading", buf);
-	     edje_object_part_text_set(ef->bat_object, "time", "--:--");
-	     _battery_level_set(ef, (double)bat_val / 100.0);
-	  }
-	else
-	  {
-	     snprintf(buf, sizeof(buf), "%i%%", bat_val);
-	     edje_object_part_text_set(ef->bat_object, "reading", buf);
-	     snprintf(buf, sizeof(buf), "%i:%02i", hours, minutes);
-	     edje_object_part_text_set(ef->bat_object, "time", buf);
-	     _battery_level_set(ef, (double)bat_val / 100.0);
-	  }
-     }
-   else if (!battery)
-     {
-	if (ef->battery_prev_battery != 0)
-	  {
-	     edje_object_signal_emit(ef->bat_object, "unknown", "");
-	     ef->battery_prev_battery = 0;
-	  }
-	edje_object_part_text_set(ef->bat_object, "reading", "NO BAT");
-	edje_object_part_text_set(ef->bat_object, "time", "--:--");
-	_battery_level_set(ef, 1.0);
+        ef->battery_prev_battery = 1;
+        if ((charging ) && (ef->battery_prev_ac != 1))
+          {
+             edje_object_signal_emit(ef->bat_object, "charge", "")
+             ef->battery_prev_ac = 1;
+	     
+	        edje_object_signal_emit(ef->bat_object, "pulsestop", "");
+	        ef->bat->alarm_triggered = 0;
+          }
+	  else if (discharging)
+          {
+             if(ef->battery_prev_ac != 0)
+                {
+                   edje_object_signal_emit(ef->bat_object, "discharge", "");
+                   ef->battery_prev_ac = 0;
+                }
+            if((hours*60+minutes) <= ef->bat->conf->alarm)
+              {
+                 if( !(ef->bat->alarm_triggered))
+                   {
+                      e_error_dialog_show("Battery Running Low",
+                          "Your battery is running low.\n"
+                          "You may wish to switch to an AC source.");
+                   }
+                 edje_object_signal_emit(ef->bat_object, "pulse", "");
+                 ef->bat->alarm_triggered = 1;
+              }
+          }
+       if (level_unknown)
+          {
+             edje_object_part_text_set(ef->bat_object, "reading", "BAD DIRVER");
+             edje_object_part_text_set(ef->bat_object, "time", "--:--");
+             _battery_level_set(ef, 0.0);
+          }
+       else if (rate_unknown)
+          {
+             snprintf(buf, sizeof(buf), "%i%%", bat_val);
+             edje_object_part_text_set(ef->bat_object, "reading", buf);
+             edje_object_part_text_set(ef->bat_object, "time", "--:--");
+             _battery_level_set(ef, (double)bat_val / 100.0);
+          }
+       else
+          {
+             snprintf(buf, sizeof(buf), "%i%%", bat_val);
+             edje_object_part_text_set(ef->bat_object, "reading", buf);
+             snprintf(buf, sizeof(buf), "%i:%02i", hours, minutes);
+             edje_object_part_text_set(ef->bat_object, "time", buf);
+             _battery_level_set(ef, (double)bat_val / 100.0);
+          }	  
+     }
+  else if (!battery)
+     {
+       if (ef->battery_prev_battery != 0)
+         {
+            edje_object_signal_emit(ef->bat_object, "unknown", "");
+            ef->battery_prev_battery = 0;
+         }
+       edje_object_part_text_set(ef->bat_object, "reading", "NO BAT");
+       edje_object_part_text_set(ef->bat_object, "time", "--:--");
+       _battery_level_set(ef, 1.0);
      }
    else
      {
@@ -703,14 +853,14 @@
    
    if ((bat_flags != 0xff) && (bat_flags & 0x80))
      {
-	if (ef->battery_prev_battery != 0)
-	  {
-	     edje_object_signal_emit(ef->bat_object, "unknown", "");
-	     ef->battery_prev_battery = 0;
-	  }
-	edje_object_part_text_set(ef->bat_object, "reading", "NO BAT");
-	edje_object_part_text_set(ef->bat_object, "time", "--:--");
-	_battery_level_set(ef, 1.0);
+	  if (ef->battery_prev_battery != 0)
+	    {
+            edje_object_signal_emit(ef->bat_object, "unknown", "");
+	       ef->battery_prev_battery = 0;
+	    }
+	  edje_object_part_text_set(ef->bat_object, "reading", "NO BAT");
+	  edje_object_part_text_set(ef->bat_object, "time", "--:--");
+	  _battery_level_set(ef, 1.0);
      }
    else
      {
@@ -747,25 +897,42 @@
    
    if (ac_stat == 1)
      {
-	if ((ac_stat == 1) && (ef->battery_prev_ac == 0))
-	  {
-	     edje_object_signal_emit(ef->bat_object, "charge", "");
-	     ef->battery_prev_ac = 1;
-	  }
-	else if ((ac_stat == 0) && (ef->battery_prev_ac == 1))
-	  {
-	     edje_object_signal_emit(ef->bat_object, "discharge", "");
-	     ef->battery_prev_ac = 0;
-	  }
-	edje_object_part_text_set(ef->bat_object, "time", "--:--");
+        if ((ac_stat == 1) && (ef->battery_prev_ac == 0))  
+          {
+              edje_object_signal_emit(ef->bat_object, "charge", "");
+              ef->battery_prev_ac = 1;
+          }
+        else if ((ac_stat == 0) && (ef->battery_prev_ac == 1)) 
+          {
+              edje_object_signal_emit(ef->bat_object, "discharge", "");
+              ef->battery_prev_ac = 0;
+          }
+        edje_object_part_text_set(ef->bat_object, "time", "--:--");
      }
    else
      {
-	hours = time_val / 3600;
-	minutes = (time_val / 60) % 60;
-	snprintf(buf, sizeof(buf), "%i:%02i", hours, minutes);
-	edje_object_part_text_set(ef->bat_object, "time", buf);
-     }
+        hours = time_val / 3600;
+        minutes = (time_val / 60) % 60;
+        snprintf(buf, sizeof(buf), "%i:%02i", hours, minutes);
+        edje_object_part_text_set(ef->bat_object, "time", buf);
+	
+        if( (hours*60+minutes) <= ef->bat->conf->alarm)
+          {
+            if( !(ef->bat->alarm_triggered))
+              {
+                  e_error_dialog_show("Battery Running Low",
+                      "Your battery is running low.\n"
+                      "You may wish to switch to an AC source.");
+              }
+            edje_object_signal_emit(ef->bat_object, "pulse", "");
+            ef->bat->alarm_triggered = 1;
+          }
+        else
+          {
+            edje_object_signal_emit(ef->bat_object, "pulsestop", "");
+            ef->bat->alarm_triggered = 0;	  	
+          }
+     }    
    return 1;
 }
 
Index: src/modules/battery/e_mod_main.h
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/modules/battery/e_mod_main.h,v
retrieving revision 1.3
diff -u -r1.3 e_mod_main.h
--- src/modules/battery/e_mod_main.h	2 Jan 2005 02:39:44 -0000	1.3
+++ src/modules/battery/e_mod_main.h	11 Jan 2005 06:34:08 -0000
@@ -14,15 +14,19 @@
    int width;
    double x, y;
    double poll_time;
+   int alarm;
 };
 
 struct _Battery
 {
-   E_Menu       *config_menu;
+   E_Menu       *config_menu; 
+   E_Menu       *config_menu_alarm;
+   E_Menu       *config_menu_poll;
    Battery_Face *face;
    
    E_Config_DD *conf_edd;
    Config      *conf;
+   int alarm_triggered;
 };
 
 struct _Battery_Face

Reply via email to