Enlightenment CVS committal

Author  : raster
Project : e17
Module  : apps/e

Dir     : e17/apps/e/src/bin


Modified Files:
        e_config.c e_config.h e_main.c e_shelf.c e_shelf.h 


Log Message:


working on shelf config

===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_config.c,v
retrieving revision 1.144
retrieving revision 1.145
diff -u -3 -r1.144 -r1.145
--- e_config.c  16 Feb 2006 05:08:17 -0000      1.144
+++ e_config.c  16 Feb 2006 06:32:54 -0000      1.145
@@ -37,6 +37,8 @@
 static E_Config_DD *_e_config_color_class_edd = NULL;
 static E_Config_DD *_e_config_gadcon_edd = NULL;
 static E_Config_DD *_e_config_gadcon_client_edd = NULL;
+static E_Config_DD *_e_config_shelf_edd = NULL;
+static E_Config_DD *_e_config_shelf_config_edd = NULL;
 
 
 /* externally accessible functions */
@@ -98,6 +100,32 @@
    E_CONFIG_VAL(D, T, id, STR);
    E_CONFIG_LIST(D, T, clients, _e_config_gadcon_client_edd);
    
+   _e_config_shelf_config_edd = E_CONFIG_DD_NEW("E_Config_Shelf_Config", 
E_Config_Shelf_Config);
+#undef T
+#undef D
+#define T E_Config_Shelf_Config
+#define D _e_config_shelf_config_edd
+   E_CONFIG_VAL(D, T, res.w, INT);
+   E_CONFIG_VAL(D, T, res.h, INT);
+   E_CONFIG_VAL(D, T, x, INT);
+   E_CONFIG_VAL(D, T, y, INT);
+   E_CONFIG_VAL(D, T, w, INT);
+   E_CONFIG_VAL(D, T, h, INT);
+   E_CONFIG_VAL(D, T, orient, INT);
+   E_CONFIG_VAL(D, T, style, STR);
+   
+   _e_config_shelf_edd = E_CONFIG_DD_NEW("E_Config_Shelf", E_Config_Shelf);
+#undef T
+#undef D
+#define T E_Config_Shelf
+#define D _e_config_shelf_edd
+   E_CONFIG_VAL(D, T, name, STR);
+   E_CONFIG_VAL(D, T, container, INT);
+   E_CONFIG_VAL(D, T, zone, INT);
+   E_CONFIG_VAL(D, T, layer, INT);
+   E_CONFIG_VAL(D, T, popup, UCHAR);
+   E_CONFIG_LIST(D, T, configs, _e_config_shelf_config_edd);
+   
    _e_config_desktop_bg_edd = E_CONFIG_DD_NEW("E_Config_Desktop_Background", 
E_Config_Desktop_Background);
 #undef T
 #undef D
@@ -428,6 +456,7 @@
    E_CONFIG_VAL(D, T, cfgdlg_auto_apply, INT); /**/
    E_CONFIG_VAL(D, T, cfgdlg_default_mode, INT); /**/
    E_CONFIG_LIST(D, T, gadcons, _e_config_gadcon_edd);
+   E_CONFIG_LIST(D, T, shelves, _e_config_shelf_edd);
 
    e_config = e_config_domain_load("e", _e_config_edd);
    if (e_config)
@@ -582,6 +611,30 @@
        
        /* FIXME: fill up default gadcons! */
          {
+            E_Config_Shelf *cf_es;
+            E_Config_Shelf_Config *cf_escf;
+            
+            cf_es = E_NEW(E_Config_Shelf, 1);
+            cf_es->name = evas_stringshare_add("shelf");
+            cf_es->container = 0;
+            cf_es->zone = 0;
+            cf_es->popup = 1;
+            cf_es->layer = 200;
+            e_config->shelves = evas_list_append(e_config->shelves, cf_es);
+            
+            cf_escf = E_NEW(E_Config_Shelf_Config, 1);
+            cf_escf->res.w = 800;
+            cf_escf->res.h = 600;
+            cf_escf->x = 0;
+            cf_escf->y = 0;
+            cf_escf->w = 800;
+            cf_escf->h = 32;
+            cf_escf->orient = E_GADCON_ORIENT_TOP;
+            cf_escf->style = evas_stringshare_add("default");
+            cf_es->configs = evas_list_append(cf_es->configs, cf_escf);
+         }
+       
+         {
             E_Config_Gadcon *cf_gc;
             E_Config_Gadcon_Client *cf_gcc;
             
@@ -1628,6 +1681,8 @@
    E_CONFIG_DD_FREE(_e_config_remember_edd);
    E_CONFIG_DD_FREE(_e_config_gadcon_edd);
    E_CONFIG_DD_FREE(_e_config_gadcon_client_edd);
+   E_CONFIG_DD_FREE(_e_config_shelf_edd);
+   E_CONFIG_DD_FREE(_e_config_shelf_config_edd);
    return 1;
 }
 
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_config.h,v
retrieving revision 1.81
retrieving revision 1.82
diff -u -3 -r1.81 -r1.82
--- e_config.h  16 Feb 2006 05:08:16 -0000      1.81
+++ e_config.h  16 Feb 2006 06:32:54 -0000      1.82
@@ -35,6 +35,8 @@
 typedef struct _E_Config_Desktop_Name       E_Config_Desktop_Name;
 typedef struct _E_Config_Gadcon             E_Config_Gadcon;
 typedef struct _E_Config_Gadcon_Client      E_Config_Gadcon_Client;
+typedef struct _E_Config_Shelf              E_Config_Shelf;
+typedef struct _E_Config_Shelf_Config       E_Config_Shelf_Config;
 
 typedef Eet_Data_Descriptor                 E_Config_DD;
 
@@ -47,7 +49,7 @@
  * versioning feature. the value of this is really irrelevant - just as
  * long as it increases every time we change something
  */
-#define E_CONFIG_FILE_VERSION 137
+#define E_CONFIG_FILE_VERSION 138
 
 #define E_EVAS_ENGINE_DEFAULT      0
 #define E_EVAS_ENGINE_SOFTWARE_X11 1
@@ -207,6 +209,7 @@
    int         cfgdlg_auto_apply; // GUI
    int         cfgdlg_default_mode; // GUI   
    Evas_List  *gadcons;
+   Evas_List  *shelves;
 };
 
 struct _E_Config_Module
@@ -295,6 +298,25 @@
    } geom;
 };
 
+struct _E_Config_Shelf
+{
+   char *name;
+   int container, zone;
+   int layer;
+   unsigned char popup;
+   Evas_List *configs;
+};
+
+struct _E_Config_Shelf_Config
+{
+   struct {
+      int w, h;
+   } res;
+   int x, y, w, h;
+   int orient;
+   char *style;
+};
+
 EAPI int        e_config_init(void);
 EAPI int        e_config_shutdown(void);
 
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_main.c,v
retrieving revision 1.153
retrieving revision 1.154
diff -u -3 -r1.153 -r1.154
--- e_main.c    15 Feb 2006 03:11:36 -0000      1.153
+++ e_main.c    16 Feb 2006 06:32:54 -0000      1.154
@@ -663,33 +663,8 @@
    e_test();
 
    /* FIXME: for testing only */
-   if (0)
-     {
-       Evas_List *l, *l2, *l3, *managers;
-       
-       for (l = e_manager_list(); l; l = l->next)
-         {
-            E_Manager *man;
-            
-            man = l->data;
-            for (l2 = man->containers; l2; l2 = l2->next)
-              {
-                 E_Container *con;
-                 
-                 con = l2->data;
-                 for (l3 = con->zones; l3; l3 = l3->next)
-                   {
-                      E_Zone *zone;
-                      E_Shelf *es;
-                      
-                      zone = l3->data;
-                      es = e_shelf_zone_new(zone, "shelf", 0, 200);
-                      e_shelf_populate(es);
-                   }
-              }
-         }
-     }
-
+//   e_shelf_config_init();
+   
    /* no longer starting up */
    starting = 0;
    /* start our main loop */
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_shelf.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- e_shelf.c   14 Feb 2006 13:09:01 -0000      1.4
+++ e_shelf.c   16 Feb 2006 06:32:54 -0000      1.5
@@ -4,6 +4,7 @@
 #include "e.h"
 
 static void _e_shelf_free(E_Shelf *es);
+static void _e_shelf_config_port(E_Config_Shelf_Config *cf1, 
E_Config_Shelf_Config *cf2);
 
 static Evas_List *shelves = NULL;
 static int shelf_id = 0;
@@ -21,8 +22,82 @@
    return 1;
 }
 
+EAPI void
+e_shelf_config_init(void)
+{
+   Evas_List *l, *l2;
+   
+   for (l = e_config->shelves; l; l = l->next)
+     {
+       E_Config_Shelf *cf_es;
+       E_Config_Shelf_Config *cf_escf, *cf_escf2;
+       E_Zone *zone;
+       int closeness;
+       
+       cf_es = l->data;
+       zone = e_util_container_zone_number_get(cf_es->container, cf_es->zone);
+       if (zone)
+         {
+            cf_escf2 = NULL;
+            closeness = 0x7fffffff;
+            for (l2 = cf_es->configs; l2; l2 = l2->next)
+              {
+                 cf_escf = l2->data;
+                 if ((cf_escf->res.w == zone->w) &&
+                     (cf_escf->res.h == zone->h))
+                   {
+                      cf_escf2 = cf_escf;
+                      closeness = 0;
+                      break;
+                   }
+                 else
+                   {
+                      int difx, dify;
+                      
+                      difx = cf_escf->res.w - zone->w;
+                      if (difx < 0) difx = -difx;
+                      dify = cf_escf->res.h - zone->h;
+                      if (dify < 0) dify = -dify;
+                      difx = difx * dify;
+                      if (difx < closeness)
+                        {
+                           closeness = difx;
+                           cf_escf2 = cf_escf;
+                        }
+                   }
+              }
+            if ((closeness != 0) && (cf_escf2))
+              {
+                 cf_escf = E_NEW(E_Config_Shelf_Config, 1);
+                 cf_escf->res.w = zone->w;
+                 cf_escf->res.h = zone->h;
+                 cf_escf->orient = cf_escf2->orient;
+                 cf_escf->style = evas_stringshare_add(cf_escf2->style);
+                 _e_shelf_config_port(cf_escf2, cf_escf);
+                 cf_escf2 = cf_escf;
+                 e_config_save_queue();
+              }
+            if (cf_escf2)
+              {
+                 E_Shelf *es;
+                 
+                 es = e_shelf_zone_new(zone, cf_es->name, cf_escf2->style,
+                                       cf_es->popup, cf_es->layer);
+                 if (es)
+                   {
+                      e_shelf_move_resize(es, cf_escf2->x, cf_escf2->y,
+                                          cf_escf2->w, cf_escf2->h);
+                      e_shelf_orient(es, cf_escf2->orient);
+                      e_shelf_populate(es);
+                      e_shelf_show(es);
+                   }
+              }
+         }
+     }
+}
+
 EAPI E_Shelf *
-e_shelf_zone_new(E_Zone *zone, char *name, int popup, int layer)
+e_shelf_zone_new(E_Zone *zone, char *name, char *style, int popup, int layer)
 {
    E_Shelf *es;
    char buf[1024];
@@ -30,11 +105,9 @@
    es = E_OBJECT_ALLOC(E_Shelf, E_SHELF_TYPE, _e_shelf_free);
    if (!es) return NULL;
 
-   /* FIXME: geometry, layer and style shoudl be loaded from config for this
-    named shelf */
    es->x = 0;
    es->y = 0;
-   es->w = zone->w;
+   es->w = 32;
    es->h = 32;
    if (popup)
      {
@@ -50,25 +123,24 @@
      }
    es->layer = layer;
    es->zone = zone;
-   es->style = strdup("default");
+   es->style = evas_stringshare_add(style);
    
    es->o_base = edje_object_add(es->evas);
-   es->name = strdup(name);
+   es->name = evas_stringshare_add(name);
    snprintf(buf, sizeof(buf), "shelf/%s/base", es->style);
    evas_object_resize(es->o_base, es->w, es->h);
    if (!e_theme_edje_object_set(es->o_base, "base/theme/shelf", buf))
      e_theme_edje_object_set(es->o_base, "base/theme/shelf", 
"shelf/default/base");
    if (es->popup)
      {
+       evas_object_show(es->o_base);
        e_popup_edje_bg_object_set(es->popup, es->o_base);
-       e_popup_show(es->popup);
      }
    else
      {
        evas_object_move(es->o_base, es->zone->x + es->x, es->zone->y + es->y);
        evas_object_layer_set(es->o_base, layer);
      }
-   evas_object_show(es->o_base);
    
    snprintf(buf, sizeof(buf), "%i", shelf_id);
    shelf_id++;
@@ -90,6 +162,28 @@
 }
 
 EAPI void
+e_shelf_show(E_Shelf *es)
+{
+   E_OBJECT_CHECK(es);
+   E_OBJECT_TYPE_CHECK(es, E_GADMAN_SHELF_TYPE);
+   if (es->popup)
+     e_popup_show(es->popup);
+   else
+     evas_object_show(es->o_base);
+}
+
+EAPI void
+e_shelf_hide(E_Shelf *es)
+{
+   E_OBJECT_CHECK(es);
+   E_OBJECT_TYPE_CHECK(es, E_GADMAN_SHELF_TYPE);
+   if (es->popup)
+     e_popup_hide(es->popup);
+   else
+     evas_object_hide(es->o_base);
+}
+
+EAPI void
 e_shelf_move(E_Shelf *es, int x, int y)
 {
    E_OBJECT_CHECK(es);
@@ -110,7 +204,10 @@
    es->w = w;
    es->h = h;
    if (es->popup)
-     e_popup_resize(es->popup, es->w, es->h);
+     {
+       e_popup_resize(es->popup, es->w, es->h);
+       evas_object_resize(es->o_base, es->w, es->h);
+     }
    else
      evas_object_resize(es->o_base, es->w, es->h);
 }
@@ -125,7 +222,10 @@
    es->w = w;
    es->h = h;
    if (es->popup)
-     e_popup_move_resize(es->popup, es->x, es->y, es->w, es->h);
+     {
+       e_popup_move_resize(es->popup, es->x, es->y, es->w, es->h);
+       evas_object_resize(es->o_base, es->w, es->h);
+     }
    else
      {
        evas_object_move(es->o_base, es->zone->x + es->x, es->zone->y + es->y);
@@ -156,6 +256,16 @@
 }
 
 EAPI void
+e_shelf_unsave(E_Shelf *es)
+{
+   E_OBJECT_CHECK(es);
+   E_OBJECT_TYPE_CHECK(es, E_GADMAN_SHELF_TYPE);
+   /* FIXME: find or create saved shelf node and then delete and queue a
+    * save
+    */
+}
+
+EAPI void
 e_shelf_orient(E_Shelf *es, E_Gadcon_Orient orient)
 {
    E_OBJECT_CHECK(es);
@@ -169,9 +279,49 @@
 {
    shelves = evas_list_remove(shelves, es);
    e_object_del(E_OBJECT(es->gadcon));
-   E_FREE(es->name);
-   E_FREE(es->style);
+   evas_stringshare_del(es->name);
+   evas_stringshare_del(es->style);
    evas_object_del(es->o_base);
    if (es->popup) e_object_del(E_OBJECT(es->popup));
    free(es);
 }
+
+static void
+_e_shelf_config_port(E_Config_Shelf_Config *cf1, E_Config_Shelf_Config *cf2)
+{
+   int px[4], py[4];
+   int i;
+   
+   /* 
+    * We have 4 corners. figure out what gravity zone (3x3 grid) they are in
+    * then lock them in relative to the edge or middle of that zone and re
+    * calculate it all then.
+    */
+   px[0] = cf1->x;
+   px[1] = cf1->x + cf1->w - 1;
+   px[2] = cf1->x;
+   px[3] = cf1->x + cf1->w - 1;
+   py[0] = cf1->y;
+   py[1] = cf1->y;
+   py[2] = cf1->y + cf1->h - 1;
+   py[3] = cf1->y + cf1->h - 1;
+   for (i = 0; i < 4; i++)
+     {
+       if (px[i] < (cf1->res.w / 3))
+         px[i] = px[i];
+       else if (px[i] > ((2 * cf1->res.w) / 3))
+         px[i] = (cf2->res.w) + (px[i] - cf1->res.w);
+       else
+         px[i] = (cf2->res.w / 2) + (px[i] - (cf1->res.w / 2));
+       if (py[i] < (cf1->res.h / 3))
+         py[i] = py[i];
+       else if (py[i] > ((2 * cf1->res.h) / 3))
+         py[i] = (cf2->res.h) + (py[i] - cf1->res.h);
+       else
+         py[i] = (cf2->res.h / 2) + (py[i] - (cf1->res.h / 2));
+     }
+   cf2->x = px[0];
+   cf2->y = py[0];
+   cf2->w = px[3] - px[0] + 1;
+   cf2->h = py[3] = py[0] + 1;
+}
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_shelf.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- e_shelf.h   14 Feb 2006 13:09:01 -0000      1.3
+++ e_shelf.h   16 Feb 2006 06:32:54 -0000      1.4
@@ -31,13 +31,17 @@
 
 EAPI int              e_shelf_init(void);
 EAPI int              e_shelf_shutdown(void);
-EAPI E_Shelf         *e_shelf_zone_new(E_Zone *zone, char *name, int popup, 
int layer);
+EAPI void             e_shelf_config_init(void);
+EAPI E_Shelf         *e_shelf_zone_new(E_Zone *zone, char *name, char *style, 
int popup, int layer);
 EAPI void             e_shelf_populate(E_Shelf *es);
+EAPI void             e_shelf_show(E_Shelf *es);
+EAPI void             e_shelf_hide(E_Shelf *es);
 EAPI void             e_shelf_move(E_Shelf *es, int x, int y);
 EAPI void             e_shelf_resize(E_Shelf *es, int w, int h);
 EAPI void             e_shelf_move_resize(E_Shelf *es, int x, int y, int w, 
int h);
 EAPI void             e_shelf_layer_set(E_Shelf *es, int layer);
 EAPI void             e_shelf_save(E_Shelf *es);
+EAPI void             e_shelf_unsave(E_Shelf *es);
 EAPI void             e_shelf_orient(E_Shelf *es, E_Gadcon_Orient orient);
     
 #endif




-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
for problems?  Stop!  Download the new AJAX search engine that makes
searching your log files as easy as surfing the  web.  DOWNLOAD SPLUNK!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=103432&bid=230486&dat=121642
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to