Enlightenment CVS committal

Author  : raster
Project : e17
Module  : apps/e

Dir     : e17/apps/e/src/bin


Modified Files:
        e_fm.c e_fm.h 


Log Message:


and more efm work....

===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_fm.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -3 -r1.7 -r1.8
--- e_fm.c      16 Jul 2006 21:25:15 -0000      1.7
+++ e_fm.c      17 Jul 2006 10:31:49 -0000      1.8
@@ -14,16 +14,10 @@
    Evas_Coord        x, y, w, h;
    Evas_Object      *obj;
    Evas_Object      *clip;
-   char             *dev;
-   char             *path;
-   char             *realpath;
-   E_Fm2_View_Mode   view_mode;
-   struct {
-      int            w, h;
-      int            list_w, list_h;
-      unsigned char  fixed_w : 1;
-      unsigned char  fixed_h : 1;
-   } icon;
+   const char       *dev;
+   const char       *path;
+   const char       *realpath;
+   
    struct {
       Evas_Coord     w, h;
    } max;
@@ -34,6 +28,7 @@
       Evas_List     *list;
       int            member_max;
    } regions;
+   
    Evas_List        *icons;
    Evas_List        *queue;
    Ecore_Idler      *scan_idler;
@@ -41,15 +36,9 @@
    Ecore_Job        *scroll_job;
    Ecore_Job        *resize_job;
    DIR              *dir;
-   unsigned char     no_case_sort : 1;
    unsigned char     iconlist_changed : 1;
-   unsigned char     show_extension : 1;
-   unsigned char     dirs_first : 1;
-   unsigned char     dirs_last : 1;
-   unsigned char     single_select : 1;
-   unsigned char     windows_multi_select_modifiers : 1;
-   unsigned char     open_dirs_in_place : 1;
-   unsigned char     selector_mode : 1;
+
+   E_Fm2_Config     *config;
 };
 
 struct _E_Fm2_Region
@@ -68,8 +57,8 @@
    Evas_Object      *obj, *obj_icon;
    int               saved_x, saved_y;
    int               saved_rel;
-   char             *file;
-   char             *mime;
+   const char       *file;
+   const char       *mime;
    struct stat       st;
    unsigned char     realized : 1;
    unsigned char     selected : 1;
@@ -78,7 +67,7 @@
    unsigned char     odd : 1;
 };
 
-static char *_e_fm2_dev_path_map(char *dev, char *path);
+static const char *_e_fm2_dev_path_map(const char *dev, const char *path);
 static void _e_fm2_file_add(Evas_Object *obj, char *file);
 static void _e_fm2_file_del(Evas_Object *obj, char *file);
 static void _e_fm2_scan_start(Evas_Object *obj);
@@ -90,6 +79,7 @@
 static void _e_fm2_icons_place(Evas_Object *obj);
 static void _e_fm2_icons_free(Evas_Object *obj);
 static void _e_fm2_regions_eval(Evas_Object *obj);
+static void _e_fm2_config_free(E_Fm2_Config *cfg);
 
 static E_Fm2_Icon *_e_fm2_icon_new(E_Fm2_Smart_Data *sd, char *file);
 static void _e_fm2_icon_free(E_Fm2_Icon *ic);
@@ -189,40 +179,46 @@
    if (!evas_object_type_get(obj)) return; // safety
    if (strcmp(evas_object_type_get(obj), "e_fm")) return; // safety
 
-//   sd->view_mode = E_FM2_VIEW_MODE_ICONS;
-   sd->view_mode = E_FM2_VIEW_MODE_LIST;
+   /* internal config for now - don't see a pont making this configurable */
    sd->regions.member_max = 32;
-   sd->icon.w = 64;
-   sd->icon.h = 64;
-   sd->icon.list_w = 64;
-   sd->icon.list_h = 64;
-   sd->icon.fixed_w = 1;
-   sd->icon.fixed_h = 1;
-   sd->no_case_sort = 1;
-   sd->show_extension = 0;
-   sd->dirs_first = 1;
-   sd->dirs_last = 1;
-   sd->single_select = 0;
-   sd->windows_multi_select_modifiers = 0;
-   sd->open_dirs_in_place = 0;
-   sd->selector_mode = 0;
+
+   if (sd->config) _e_fm2_config_free(sd->config);
+   sd->config = E_NEW(E_Fm2_Config, 1);
+   if (!sd->config) return;
+//   sd->config->view.mode = E_FM2_VIEW_MODE_ICONS;
+   sd->config->view.mode = E_FM2_VIEW_MODE_LIST;
+   sd->config->icon.icon.w = 64;
+   sd->config->icon.icon.h = 64;
+   sd->config->icon.list.w = 24;
+   sd->config->icon.list.h = 24;
+   sd->config->icon.fixed.w = 1;
+   sd->config->icon.fixed.h = 1;
+   sd->config->list.sort.no_case = 1;
+   sd->config->icon.extension.show = 0;
+   sd->config->list.sort.dirs.first = 1;
+   sd->config->list.sort.dirs.last = 1;
+   sd->config->selection.single = 0;
+   sd->config->selection.windows_modifiers = 0;
+   sd->config->view.open_dirs_in_place = 0;
+   sd->config->view.selector = 0;
    
    _e_fm2_scan_stop(obj);
    _e_fm2_queue_free(obj);
    _e_fm2_regions_free(obj);
    _e_fm2_icons_free(obj);
-   E_FREE(sd->dev);
-   E_FREE(sd->path);
-   E_FREE(sd->realpath);
-   if (dev) sd->dev = strdup(dev);
-   sd->path = strdup(path);
+   if (sd->dev) evas_stringshare_del(sd->dev);
+   if (sd->path) evas_stringshare_del(sd->path);
+   if (sd->realpath) evas_stringshare_del(sd->realpath);
+   sd->dev = sd->path = sd->realpath = NULL;
+   if (dev) sd->dev = evas_stringshare_add(dev);
+   sd->path = evas_stringshare_add(path);
    sd->realpath = _e_fm2_dev_path_map(sd->dev, sd->path);
    printf("FM: %s\n", sd->realpath);
    _e_fm2_scan_start(obj);
 }
 
 EAPI void
-e_fm2_path_get(Evas_Object *obj, char **dev, char **path)
+e_fm2_path_get(Evas_Object *obj, const char **dev, const char **path)
 {
    E_Fm2_Smart_Data *sd;
 
@@ -237,74 +233,8 @@
 }
 
 /*
-EAPI char *
-e_fm2_parent_get(Evas_Object *obj)
-{
-   E_Fm2_Smart_Data *sd;
-
-   sd = evas_object_smart_data_get(obj);
-   if (!sd) return; // safety
-   if (!evas_object_type_get(obj)) return; // safety
-   if (strcmp(evas_object_type_get(obj), "e_fm")) return; // safety
-}
-
-EAPI void
-e_fm2_view_mode_set(Evas_Object *obj, E_Fm2_View_Mode view_mode)
-{
-   E_Fm2_Smart_Data *sd;
-
-   sd = evas_object_smart_data_get(obj);
-   if (!sd) return; // safety
-   if (!evas_object_type_get(obj)) return; // safety
-   if (strcmp(evas_object_type_get(obj), "e_fm")) return; // safety
-}
-
-EAPI void
-e_fm2_icon_size_set(Evas_Object *obj, int w, int h, int fixed_w, int fixed_h)
-{
-   E_Fm2_Smart_Data *sd;
-
-   sd = evas_object_smart_data_get(obj);
-   if (!sd) return; // safety
-   if (!evas_object_type_get(obj)) return; // safety
-   if (strcmp(evas_object_type_get(obj), "e_fm")) return; // safety
-}
-
-EAPI void
-e_fm2_list_size_set(Evas_Object *obj, int w, int h, int fixed_w, int fixed_h)
-{
-   E_Fm2_Smart_Data *sd;
-
-   sd = evas_object_smart_data_get(obj);
-   if (!sd) return; // safety
-   if (!evas_object_type_get(obj)) return; // safety
-   if (strcmp(evas_object_type_get(obj), "e_fm")) return; // safety
-}
-
-EAPI void
-e_fm2_no_case_sort_set(Evas_Object *obj, int no_case_sort)
-{
-   E_Fm2_Smart_Data *sd;
-
-   sd = evas_object_smart_data_get(obj);
-   if (!sd) return; // safety
-   if (!evas_object_type_get(obj)) return; // safety
-   if (strcmp(evas_object_type_get(obj), "e_fm")) return; // safety
-}
-
-EAPI void
-e_fm2_show_extension_set(Evas_Object *obj, int show_ext)
-{
-   E_Fm2_Smart_Data *sd;
-
-   sd = evas_object_smart_data_get(obj);
-   if (!sd) return; // safety
-   if (!evas_object_type_get(obj)) return; // safety
-   if (strcmp(evas_object_type_get(obj), "e_fm")) return; // safety
-}
-
-EAPI void
-e_fm2_dirs_first_last_set(Evas_Object *obj, int dirs_first, int dirs_last)
+EAPI int
+e_fm2_parent_go(Evas_Object *obj)
 {
    E_Fm2_Smart_Data *sd;
 
@@ -314,8 +244,8 @@
    if (strcmp(evas_object_type_get(obj), "e_fm")) return; // safety
 }
 
-EAPI void
-e_fm2_multi_mode_set(Evas_Object *obj, int windows_multi_modifier)
+EAPI int
+e_fm2_has_parent_get(Evas_Object *obj)
 {
    E_Fm2_Smart_Data *sd;
 
@@ -326,7 +256,7 @@
 }
 
 EAPI void
-e_fm2_open_dirs_in_place_set(Evas_Object *obj, int open_in_place)
+e_fm2_config_set(Evas_Object *obj, E_Fm2_Config *cfg)
 {
    E_Fm2_Smart_Data *sd;
 
@@ -336,8 +266,8 @@
    if (strcmp(evas_object_type_get(obj), "e_fm")) return; // safety
 }
 
-EAPI void
-e_fm2_selector_mode_set(Evas_Object *obj, int selector_mode)
+EAPI E_Fm2_Config *
+e_fm2_config_get(Evas_Object *obj)
 {
    E_Fm2_Smart_Data *sd;
 
@@ -417,14 +347,14 @@
 
 
 /* local subsystem functions */
-static char *
-_e_fm2_dev_path_map(char *dev, char *path)
+static const char *
+_e_fm2_dev_path_map(const char *dev, const char *path)
 {
    char buf[4096] = "", *s;
    int len;
    
    /* map a device name to a mount point/path on the os (and append path) */
-   if (!dev) return strdup(path);
+   if (!dev) return evas_stringshare_add(path);
 
    /* FIXME: load mappings from config and use them first - maybe device
     * discovery should be done through config and not the below (except
@@ -464,7 +394,7 @@
        buf[len - 1] = 0;
        len--;
      }
-   return strdup(buf);
+   return evas_stringshare_add(buf);
 }
 
 static void
@@ -798,7 +728,6 @@
      {
        ic = l->data;
        
-       /* FIXME: place in vertical list */
        ic->x = x;
        ic->y = y;
        if (sd->w > ic->min_w)
@@ -827,7 +756,7 @@
    /* take the icon list and find a location for them */
    sd->max.w = 0;
    sd->max.h = 0;
-   switch (sd->view_mode)
+   switch (sd->config->view.mode)
      {
       case E_FM2_VIEW_MODE_ICONS:
        _e_fm2_icons_place_icons(sd);
@@ -894,6 +823,15 @@
    evas_event_thaw(evas_object_evas_get(obj));
 }
 
+static void
+_e_fm2_config_free(E_Fm2_Config *cfg)
+{
+   if (cfg->theme.background) evas_stringshare_del(cfg->theme.background);
+   if (cfg->theme.frame) evas_stringshare_del(cfg->theme.frame);
+   if (cfg->theme.icons) evas_stringshare_del(cfg->theme.icons);
+   free(cfg);
+}
+
 /**************************/
 
 static E_Fm2_Icon *
@@ -913,9 +851,9 @@
        return NULL;
      }
    ic->sd = sd;
-   ic->file = strdup(file);
+   ic->file = evas_stringshare_add(file);
    /* FIXME: have many icon size policies. fixed, max, auto-calc etc. */
-   switch (sd->view_mode)
+   switch (sd->config->view.mode)
      {
       case E_FM2_VIEW_MODE_ICONS:
       case E_FM2_VIEW_MODE_GRID_ICONS:
@@ -938,7 +876,7 @@
         * fileman/scrollframe
         *
         */
-       if ((!sd->icon.fixed_w) || (!sd->icon.fixed_h))
+       if ((!sd->config->icon.fixed.w) || (!sd->config->icon.fixed.h))
          {
             obj = edje_object_add(evas_object_evas_get(sd->obj));
             e_theme_edje_object_set(obj, "base/theme/fileman",
@@ -947,15 +885,15 @@
             edje_object_size_min_calc(obj, &mw, &mh);
             evas_object_del(obj);
          }
-       if (sd->icon.fixed_w) ic->w = sd->icon.w;
-       if (sd->icon.fixed_h) ic->h = sd->icon.h;
+       if (sd->config->icon.fixed.w) ic->w = sd->config->icon.icon.w;
+       if (sd->config->icon.fixed.h) ic->h = sd->config->icon.icon.h;
        ic->min_w = mw;
        ic->min_h = mh;
        break;
       case E_FM2_VIEW_MODE_LIST:
          {
              obj = edje_object_add(evas_object_evas_get(sd->obj));
-            if (sd->icon.fixed_w)
+            if (sd->config->icon.fixed.w)
               e_theme_edje_object_set(obj, "base/theme/fileman",
                                       "fileman/list/fixed");
             else
@@ -963,8 +901,8 @@
                                       "fileman/list/variable");
             _e_fm2_icon_label_set(ic, obj);
             obj2 = evas_object_rectangle_add(evas_object_evas_get(sd->obj));
-            edje_extern_object_min_size_set(obj2, sd->icon.list_w, 
sd->icon.list_h);
-            edje_extern_object_max_size_set(obj2, sd->icon.list_w, 
sd->icon.list_h);
+            edje_extern_object_min_size_set(obj2, sd->config->icon.list.w, 
sd->config->icon.list.h);
+            edje_extern_object_max_size_set(obj2, sd->config->icon.list.w, 
sd->config->icon.list.h);
             edje_object_part_swallow(obj, "icon_swallow", obj2);
             edje_object_size_min_calc(obj, &mw, &mh);
             evas_object_del(obj2);
@@ -987,7 +925,7 @@
 {
    /* free icon, object data etc. etc. */
    _e_fm2_icon_unrealize(ic);
-   E_FREE(ic->file);
+   if (ic->file) evas_stringshare_del(ic->file);
    free(ic);
 }
 
@@ -1003,9 +941,9 @@
    evas_object_smart_member_add(ic->obj, ic->sd->obj);
    /* FIXME: this is currently a hack just to get a display working - go back
     * and do proper icon stuff later */
-   if (ic->sd->view_mode == E_FM2_VIEW_MODE_LIST)
+   if (ic->sd->config->view.mode == E_FM2_VIEW_MODE_LIST)
      {
-        if (ic->sd->icon.fixed_w)
+        if (ic->sd->config->icon.fixed.w)
          {
             if (ic->odd)
               e_theme_edje_object_set(ic->obj, "base/theme/widgets",
@@ -1087,7 +1025,7 @@
    char buf[4096], *p;
    int len;
    
-   if (ic->sd->show_extension)
+   if (ic->sd->config->icon.extension.show)
      edje_object_part_text_set(obj, "label", ic->file);
    else
      {
@@ -1310,7 +1248,7 @@
      }
    else if (ev->button == 1)
      {
-       if (ic->sd->windows_multi_select_modifiers)
+       if (ic->sd->config->selection.windows_modifiers)
          {
             if (evas_key_modifier_is_set(ev->modifiers, "Shift"))
               range_sel = 1;
@@ -1324,7 +1262,7 @@
             else if (evas_key_modifier_is_set(ev->modifiers, "Shift"))
               multi_sel = 1;
          }
-       if (ic->sd->single_select)
+       if (ic->sd->config->selection.single)
          {
             multi_sel = 0;
             range_sel = 0;
@@ -1448,7 +1386,7 @@
    sd->resize_job = NULL;
    evas_event_freeze(evas_object_evas_get(sd->obj));
    edje_freeze();
-   switch (sd->view_mode)
+   switch (sd->config->view.mode)
      {
       case E_FM2_VIEW_MODE_ICONS:
        _e_fm2_regions_free(sd->obj);
@@ -1497,7 +1435,7 @@
    
    ic1 = data1;
    ic2 = data2;
-   if (ic1->sd->dirs_last)
+   if (ic1->sd->config->list.sort.dirs.last)
      {
        if ((S_ISDIR(ic1->st.st_mode)) != (S_ISDIR(ic2->st.st_mode)))
          {
@@ -1505,7 +1443,7 @@
             else return 1;
          }
      }
-   else if (ic1->sd->dirs_first)
+   else if (ic1->sd->config->list.sort.dirs.first)
      {
        if ((S_ISDIR(ic1->st.st_mode)) != (S_ISDIR(ic2->st.st_mode)))
          {
@@ -1513,7 +1451,7 @@
             else return -1;
          }
      }
-   if (ic1->sd->no_case_sort)
+   if (ic1->sd->config->list.sort.no_case)
      {
        char buf1[4096], buf2[4096], *p;
        
@@ -1655,9 +1593,11 @@
    _e_fm2_icons_free(obj);
    if (sd->scroll_job) ecore_job_del(sd->scroll_job);
    if (sd->resize_job) ecore_job_del(sd->resize_job);
-   E_FREE(sd->dev);
-   E_FREE(sd->path);
-   E_FREE(sd->realpath);
+   if (sd->dev) evas_stringshare_del(sd->dev);
+   if (sd->path) evas_stringshare_del(sd->path);
+   if (sd->realpath) evas_stringshare_del(sd->realpath);
+   sd->dev = sd->path = sd->realpath = NULL;
+   if (sd->config) _e_fm2_config_free(sd->config);
    
    evas_object_del(sd->clip);
    free(sd);
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_fm.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- e_fm.h      15 Jul 2006 21:39:15 -0000      1.3
+++ e_fm.h      17 Jul 2006 10:31:50 -0000      1.4
@@ -15,15 +15,75 @@
    E_FM2_VIEW_MODE_LIST /* vertical fileselector list */
 } E_Fm2_View_Mode;
 
+typedef struct _E_Fm2_Config E_Fm2_Config;
+
 #else
 #ifndef E_FM_H
 #define E_FM_H
 
+struct _E_Fm2_Config
+{
+   /* general view mode */
+   struct {
+      E_Fm2_View_Mode mode;
+      unsigned char   open_dirs_in_place;
+      unsigned char   selector;
+   } view;
+   /* display of icons */
+   struct {
+      struct {
+        int           w, h;
+      } icon;
+      struct {
+        int           w, h;
+      } list;
+      struct {
+        unsigned char w;
+        unsigned char h;
+      } fixed;
+      struct {
+        unsigned char show;
+      } extension;
+   } icon;
+   /* how to sort files */
+   struct {
+      struct {
+        unsigned char    no_case;
+        struct {
+           unsigned char first;
+           unsigned char last;
+        } dirs;
+      } sort;
+   } list;
+   /* control how you can select files */
+   struct {
+      unsigned char    single;
+      unsigned char    windows_modifiers;
+   } selection;
+   /* the background - if any, and how to handle it */
+   /* FIXME: not implemented yet */
+   struct {
+      char            *background;
+      char            *frame;
+      char            *icons;
+      unsigned char    fixed;
+   } theme;
+   /* used internally only - used to save to disk only and laod from disk */
+   /* FIXME: not implemented yet */
+   struct {
+      int              x, y, w, h;
+      struct {
+        int           w, h;
+      } res;
+      int              screen;
+   } geometry;
+};
+
 EAPI int                   e_fm2_init(void);
 EAPI int                   e_fm2_shutdown(void);
 EAPI Evas_Object          *e_fm2_add(Evas *evas);
 EAPI void                  e_fm2_path_set(Evas_Object *obj, char *dev, char 
*path);
-EAPI void                  e_fm2_path_get(Evas_Object *obj, char **dev, char 
**path);
+EAPI void                  e_fm2_path_get(Evas_Object *obj, const char **dev, 
const char **path);
 
 EAPI void                  e_fm2_pan_set(Evas_Object *obj, Evas_Coord x, 
Evas_Coord y);
 EAPI void                  e_fm2_pan_get(Evas_Object *obj, Evas_Coord *x, 
Evas_Coord *y);




-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to