Enlightenment CVS committal

Author  : sebastid
Project : e17
Module  : apps/e_modules

Dir     : e17/apps/e_modules/src/modules/weather


Modified Files:
        e_mod_main.c e_mod_main.h 


Log Message:
Create the face on the container the menu was activated on.
Create the faces menu in dynamically.

===================================================================
RCS file: 
/cvsroot/enlightenment/e17/apps/e_modules/src/modules/weather/e_mod_main.c,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -3 -r1.18 -r1.19
--- e_mod_main.c        25 Aug 2005 12:37:22 -0000      1.18
+++ e_mod_main.c        29 Aug 2005 17:27:19 -0000      1.19
@@ -15,6 +15,7 @@
 static Weather *_weather_new();
 static void _weather_free(Weather *weather);
 static void _weather_config_menu_new(Weather *weather);
+static void _weather_menu_cb_faces(void *data, E_Menu *m);
 
 static Weather_Face *_weather_face_new(Weather *weather, E_Container *con);
 static void _weather_face_free(Weather_Face *face);
@@ -211,11 +212,6 @@
             mi = e_menu_item_new(face->menu);
             e_menu_item_label_set(mi, _("Set Update Time"));
             e_menu_item_submenu_set(mi, weather->config_menu_poll);
-
-            mi = e_menu_item_new(weather->config_menu);
-            e_menu_item_label_set(mi, con->name);
-
-            e_menu_item_submenu_set(mi, face->menu);
          }
      }
    else
@@ -250,11 +246,6 @@
             mi = e_menu_item_new(face->menu);
             e_menu_item_label_set(mi, _("Set Update Time"));
             e_menu_item_submenu_set(mi, weather->config_menu_poll);
-
-            mi = e_menu_item_new(weather->config_menu);
-            e_menu_item_label_set(mi, con->name);
-
-            e_menu_item_submenu_set(mi, face->menu);
          }
      }
    _weather_connect(weather);
@@ -279,6 +270,7 @@
    evas_list_free(weather->faces);
 
    e_object_del(E_OBJECT(weather->config_menu));
+   e_object_del(E_OBJECT(weather->config_menu_faces));
    e_object_del(E_OBJECT(weather->config_menu_poll));
    e_object_del(E_OBJECT(weather->config_menu_display));
    e_object_del(E_OBJECT(weather->config_menu_degrees));
@@ -297,13 +289,10 @@
    E_Menu *mn;
    E_Menu_Item *mi;
 
+   /* Poll menu */
    mn = e_menu_new();
 
    mi = e_menu_item_new(mn);
-   e_menu_item_label_set(mi, _("Add Face"));
-   e_menu_item_callback_set(mi, _weather_menu_add_face, weather);
-
-   mi = e_menu_item_new(mn);
    e_menu_item_label_set(mi, _("15 minutes"));
    e_menu_item_radio_set(mi, 1);
    e_menu_item_radio_group_set(mi, 1);
@@ -326,6 +315,7 @@
 
    weather->config_menu_poll = mn;
 
+   /* Display menu */
    mn = e_menu_new();
 
    mi = e_menu_item_new(mn);
@@ -344,6 +334,7 @@
 
    weather->config_menu_display = mn;
 
+   /* Degrees menu */
    mn = e_menu_new();
 
    mi = e_menu_item_new(mn);
@@ -362,6 +353,13 @@
 
    weather->config_menu_degrees = mn;
 
+   /* Faces menu */
+   mn = e_menu_new();
+   e_menu_pre_activate_callback_set(mn, _weather_menu_cb_faces, weather);
+   weather->update_menu_faces = 1;
+   weather->config_menu_faces = mn;
+
+   /* Main menu */
    mn = e_menu_new();
 
    mi = e_menu_item_new(mn);
@@ -376,9 +374,56 @@
    e_menu_item_label_set(mi, _("Set Update Time"));
    e_menu_item_submenu_set(mi, weather->config_menu_poll);
 
+   mi = e_menu_item_new(mn);
+   e_menu_item_label_set(mi, _("Faces"));
+   e_menu_item_submenu_set(mi, weather->config_menu_faces);
+
    weather->config_menu = mn;
 }
 
+static void
+_weather_menu_cb_faces(void *data, E_Menu *m)
+{
+   Weather *weather;
+   E_Menu_Item *mi;
+   Evas_List *l;
+
+   weather = data;
+   if (!weather->update_menu_faces) return;
+
+   /* Delete old items */
+   for (l = m->items; l;)
+     {
+       E_Object *obj;
+       obj = l->data;
+       l = l->next;
+       e_object_del(obj);
+     }
+   evas_list_free(m->items);
+   m->items = NULL;
+
+   /* New face */
+   mi = e_menu_item_new(m);
+   e_menu_item_label_set(mi, _("Add Face"));
+   e_menu_item_callback_set(mi, _weather_menu_add_face, weather);
+
+   /* Add faces to the config menu */
+   for (l = weather->faces; l; l = l->next)
+     {
+       Weather_Face *face;
+       char buf[1024];
+
+       face = l->data;
+       snprintf(buf, sizeof(buf), "%s (%d)", face->conf->location, 
face->conf->container);
+       mi = e_menu_item_new(m);
+       e_menu_item_label_set(mi, buf);
+
+       e_menu_item_submenu_set(mi, face->menu);
+     }
+
+   weather->update_menu_faces = 0;
+}
+
 static Weather_Face *
 _weather_face_new(Weather *weather, E_Container *con)
 {
@@ -473,10 +518,12 @@
    e_menu_item_label_set(mi, _("Edit Mode"));
    e_menu_item_callback_set(mi, _weather_face_cb_menu_edit, face);
 
+   /* New face */
    mi = e_menu_item_new(mn);
    e_menu_item_label_set(mi, _("Add Face"));
    e_menu_item_callback_set(mi, _weather_menu_add_face, face->weather);
 
+   /* Remove face */
    mi = e_menu_item_new(mn);
    e_menu_item_label_set(mi, _("Remove Face"));
    e_menu_item_callback_set(mi, _weather_menu_remove_face, face);
@@ -1000,22 +1047,21 @@
 static void
 _weather_menu_add_face(void *data, E_Menu *m, E_Menu_Item *mi)
 {
-   E_Manager *man;
-   E_Container *con;
+   E_Menu *root;
    Weather *weather;
    Weather_Face *face;
 
-   man = e_manager_current_get();
-   con = e_container_current_get(man);
+   root = e_menu_root_get(m);
+   if (!root->zone) return;
 
    weather = data;
-   face = _weather_face_new(weather, con);
+   face = _weather_face_new(weather, root->zone->container);
    if (face)
      {
        weather->faces = evas_list_append(weather->faces, face);
 
        face->conf = E_NEW(Config_Face, 1);
-       face->conf->container = con->num;
+       face->conf->container = root->zone->container->num;
        face->conf->enabled = 1;
        face->conf->location = strdup("Kirkenes Lufthavn");
        face->conf->url = strdup("/icao/ENKR/rss.php");
@@ -1038,10 +1084,7 @@
        e_menu_item_label_set(mi, _("Set Update Time"));
        e_menu_item_submenu_set(mi, weather->config_menu_poll);
 
-       mi = e_menu_item_new(weather->config_menu);
-       e_menu_item_label_set(mi, con->name);
-
-       e_menu_item_submenu_set(mi, face->menu);
+       weather->update_menu_faces = 1;
      }
    _weather_cb_check(weather);
 }
@@ -1054,6 +1097,9 @@
    face = data;
    face->weather->faces = evas_list_remove(face->weather->faces, face);
    face->weather->conf->faces = evas_list_remove(face->weather->conf->faces, 
face->conf);
+
+   face->weather->update_menu_faces = 1;
+
    _weather_face_free(face);
 }
 
===================================================================
RCS file: 
/cvsroot/enlightenment/e17/apps/e_modules/src/modules/weather/e_mod_main.h,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -3 -r1.6 -r1.7
--- e_mod_main.h        25 Aug 2005 11:11:44 -0000      1.6
+++ e_mod_main.h        29 Aug 2005 17:27:19 -0000      1.7
@@ -43,7 +43,9 @@
    E_Menu *config_menu_poll;
    E_Menu *config_menu_degrees;
    E_Menu *config_menu_display;
-   E_Menu *config_menu_URL;
+
+   int     update_menu_faces;
+   E_Menu *config_menu_faces;
 
    Ecore_Event_Handler *add_handler;
    Ecore_Event_Handler *del_handler;




-------------------------------------------------------
SF.Net email is Sponsored by the Better Software Conference & EXPO
September 19-22, 2005 * San Francisco, CA * Development Lifecycle Practices
Agile & Plan-Driven Development * Managing Projects & Teams * Testing & QA
Security * Process Improvement & Measurement * http://www.sqe.com/bsce5sf
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to