Enlightenment CVS committal

Author  : titan
Project : e17
Module  : apps/e

Dir     : e17/apps/e/src/bin


Modified Files:
        e_widget_fsel.c e_widget_fsel.h 


Log Message:
Get preview code into cvs. You will not see it yet.

===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_widget_fsel.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -3 -r1.6 -r1.7
--- e_widget_fsel.c     12 Aug 2006 12:49:52 -0000      1.6
+++ e_widget_fsel.c     13 Aug 2006 02:49:54 -0000      1.7
@@ -9,6 +9,15 @@
    Evas_Object *obj;
    Evas_Object *o_table;
    Evas_Object *o_table2;
+   Evas_Object *o_preview_table;
+   Evas_Object *o_preview_scroll;
+   Evas_Object *o_preview_name;
+   Evas_Object *o_preview_size;
+   Evas_Object *o_preview_owner;
+   Evas_Object *o_preview_group;
+   Evas_Object *o_preview_perms;
+   Evas_Object *o_preview_time;
+   Evas_Object *o_preview_preview;
    Evas_Object *o_up_button;
    Evas_Object *o_favorites_frame;
    Evas_Object *o_favorites_fm;
@@ -23,6 +32,12 @@
    void *chg_data;
 };
 
+static void _e_wid_fsel_preview_file(E_Widget_Data *wd);
+static char *_e_wid_file_size_get(off_t st_size);
+static char *_e_wid_file_user_get(uid_t st_uid);
+static char *_e_wid_file_group_get(gid_t st_gid);
+static char *_e_wid_file_perms_get(mode_t st_mode, uid_t st_uid);
+static char *_e_wid_file_time_get(time_t st_modtime);
 static void _e_wid_del_hook(Evas_Object *obj);
 
 /* local subsystem functions */
@@ -148,6 +163,7 @@
                 realpath, ici->file);
      }
    wd->path = strdup(buf);
+   _e_wid_fsel_preview_file(wd);
    e_widget_entry_text_set(wd->o_entry, ici->file);
    evas_list_free(selected);
    if (wd->chg_func) wd->chg_func(wd->chg_data, wd->obj);
@@ -172,7 +188,7 @@
 EAPI Evas_Object *
 e_widget_fsel_add(Evas *evas, char *dev, char *path, char *selected, char 
*filter, 
                  void (*sel_func) (void *data, Evas_Object *obj), void 
*sel_data,
-                 void (*chg_func) (void *data, Evas_Object *obj), void 
*chg_data)
+                 void (*chg_func) (void *data, Evas_Object *obj), void 
*chg_data, int preview)
 {
    Evas_Object *obj, *o;
    E_Widget_Data *wd;
@@ -284,11 +300,66 @@
    wd->o_entry = o;
    e_widget_sub_object_add(obj, o);
    
+   if (preview)
+     {
+        o = e_widget_table_add(evas, 0);
+        wd->o_preview_table = o;
+        e_widget_sub_object_add(obj, o);
+        e_widget_min_size_set(o, 128, 128);
+        e_widget_resize_object_set(obj, o);
+
+        o = e_widget_preview_add(evas, 64, 64);
+        wd->o_preview_preview = o;
+        e_widget_sub_object_add(obj, o);
+        e_widget_resize_object_set(obj, o);
+        e_widget_table_object_append(wd->o_preview_table, 
+                                    wd->o_preview_preview,
+                                    0, 0, 1, 1, 1, 1, 1, 1);
+       o = e_widget_label_add(evas, "Name:");
+        wd->o_preview_name = o;
+        e_widget_sub_object_add(obj, o);
+        e_widget_resize_object_set(obj, o);
+        e_widget_table_object_append(wd->o_preview_table, wd->o_preview_name,
+                                     0, 1, 1, 1, 1, 1, 1, 1);
+        o = e_widget_label_add(evas, "Size:");
+        wd->o_preview_size = o;
+        e_widget_sub_object_add(obj, o);
+        e_widget_resize_object_set(obj, o);
+        e_widget_table_object_append(wd->o_preview_table, wd->o_preview_size,
+                                     0, 2, 1, 1, 1, 1, 1, 1);
+        o = e_widget_label_add(evas, "Owner:");
+        wd->o_preview_owner = o;
+        e_widget_sub_object_add(obj, o);
+        e_widget_resize_object_set(obj, o);
+        e_widget_table_object_append(wd->o_preview_table, wd->o_preview_owner,
+                                     0, 3, 1, 1, 1, 1, 1, 1);
+        o = e_widget_label_add(evas, "Group:");
+        wd->o_preview_group = o;
+        e_widget_sub_object_add(obj, o);
+        e_widget_resize_object_set(obj, o);
+        e_widget_table_object_append(wd->o_preview_table, wd->o_preview_group,
+                                     0, 4, 1, 1, 1, 1, 1, 1);
+        o = e_widget_label_add(evas, "Permissions:");
+        wd->o_preview_perms = o;
+        e_widget_sub_object_add(obj, o);
+        e_widget_resize_object_set(obj, o);
+        e_widget_table_object_append(wd->o_preview_table, wd->o_preview_perms,
+                                     0, 5, 1, 1, 1, 1, 1, 1);
+        o = e_widget_label_add(evas, "Last Modification:");
+        wd->o_preview_time = o;
+        e_widget_sub_object_add(obj, o);
+        e_widget_resize_object_set(obj, o);
+        e_widget_table_object_append(wd->o_preview_table, wd->o_preview_time,
+                                     0, 6, 1, 1, 1, 1, 1, 1);
+
+        e_widget_table_object_append(wd->o_table2, wd->o_preview_table,
+                                     2, 1, 1, 1, 1, 1, 1, 1);
+     }
    e_widget_table_object_append(wd->o_table, wd->o_table2,
-                               0, 0, 1, 1, 1, 1, 1, 1);
+                                0, 0, 1, 1, 1, 1, 1, 1);
    e_widget_table_object_append(wd->o_table, wd->o_entry,
-                               0, 1, 1, 1, 1, 0, 1, 0);
-   
+                                0, 1, 1, 1, 1, 0, 1, 0);
+
    e_widget_min_size_get(wd->o_table, &mw, &mh);
    e_widget_min_size_set(obj, mw, mh);
    
@@ -298,11 +369,47 @@
    evas_object_show(wd->o_files_frame);
    evas_object_show(wd->o_files_fm);
    evas_object_show(wd->o_entry);
+   if (preview)
+     {
+        evas_object_show(wd->o_preview_preview);
+        evas_object_show(wd->o_preview_name);
+        evas_object_show(wd->o_preview_size);
+        evas_object_show(wd->o_preview_owner);
+        evas_object_show(wd->o_preview_group);
+        evas_object_show(wd->o_preview_perms);
+        evas_object_show(wd->o_preview_time);
+        evas_object_show(wd->o_preview_table);
+     }
    evas_object_show(wd->o_table2);
    evas_object_show(wd->o_table);
    return obj;
 }
 
+static void
+_e_wid_fsel_preview_file(E_Widget_Data *wd)
+{
+   char *name, size[PATH_MAX], owner[PATH_MAX], group[PATH_MAX];
+   char perms[PATH_MAX], time[PATH_MAX];
+   struct stat st;
+ 
+   stat(wd->path, &st);
+   name = strrchr(wd->path, '/')+1;
+   snprintf(size, PATH_MAX, "Size: %s", _e_wid_file_size_get(st.st_size));
+   snprintf(owner, PATH_MAX, "Owner: %s", _e_wid_file_user_get(st.st_uid));
+   snprintf(group, PATH_MAX, "Group: %s", _e_wid_file_group_get(st.st_gid));
+   snprintf(perms, PATH_MAX, "Permissions: %s", 
+                               _e_wid_file_perms_get(st.st_mode, st.st_uid));
+   snprintf(time, PATH_MAX, "Last Modification: %s", 
+                                _e_wid_file_time_get(st.st_mtime));
+
+   e_widget_label_text_set(wd->o_preview_name, name);
+   e_widget_label_text_set(wd->o_preview_size, size);
+   e_widget_label_text_set(wd->o_preview_owner, owner);
+   e_widget_label_text_set(wd->o_preview_group, group);
+   e_widget_label_text_set(wd->o_preview_perms, perms);
+   e_widget_label_text_set(wd->o_preview_time, time);
+}
+
 EAPI const char *
 e_widget_fsel_selection_path_get(Evas_Object *obj)
 {
@@ -311,6 +418,135 @@
    if (!obj) return NULL;
    wd = e_widget_data_get(obj);
    return wd->path;
+}
+
+static char *
+_e_wid_file_size_get(off_t st_size)
+{
+   double dsize;
+   char size[1024];
+
+   dsize = (double)st_size;
+   if (dsize < 1024) snprintf(size, 1024, "%'.0f B", dsize);
+   else
+     {
+       dsize /= 1024.0;
+       if (dsize < 1024) snprintf(size, 1024, "%'.0f KB", dsize);
+       else
+         {
+           dsize /= 1024.0;
+           if (dsize < 1024) snprintf(size, 1024, "%'.0f MB", dsize);
+           else
+             {
+               dsize /= 1024.0;
+               snprintf(size, 1024, "%'.1f gb", dsize);
+             }
+         }
+     }
+   return strdup(size); 
+}
+
+static char * 
+_e_wid_file_user_get(uid_t st_uid)
+{
+   char name[PATH_MAX];
+   struct passwd *pwd;
+
+   if (getuid() == st_uid) snprintf(name, PATH_MAX, "You");
+   else
+     {
+       pwd = getpwuid(st_uid);
+       if (pwd) snprintf(name, PATH_MAX, "%s", pwd->pw_name);
+       else snprintf(name, PATH_MAX, "%-8d", (int)st_uid);
+     }
+   return strdup(name);
+}
+
+static char *
+_e_wid_file_group_get(gid_t st_gid)
+{
+   char name[PATH_MAX];
+   struct group *grp;
+
+   grp = getgrgid(st_gid);
+   if (grp) snprintf(name, PATH_MAX, "%s", grp->gr_name);
+   else snprintf(name, PATH_MAX, "%-8d", (int)st_gid);
+
+   return strdup(name);
+}
+
+static char *
+_e_wid_file_perms_get(mode_t st_mode, uid_t st_uid)
+{
+   char *perm;
+   char perms[PATH_MAX];
+   int owner = 0;
+   int read = 0;
+   int write = 0;
+   int execute = 0;
+   int i;
+
+   if (getuid() == st_uid) owner = 1;
+
+   if (owner)
+     {
+       perm = (char *)malloc(sizeof(char) * 10);
+      for (i = 0; i < 9; i++) perm[i] = '-';
+      perm[9] = '\0';
+
+      if ((S_IRUSR & st_mode) == S_IRUSR) 
+        {
+           perm[0] = 'r';
+           read = 1;
+        }
+      if ((S_IWUSR & st_mode) == S_IWUSR) 
+        {
+           perm[1] = 'w';
+           write = 1;
+        }
+      if ((S_IXUSR & st_mode) == S_IXUSR) 
+        {
+           perm[2] = 'x';
+           execute = 1;
+        }
+      if ((S_IRGRP & st_mode) == S_IRGRP) perm[3] = 'r';
+      if ((S_IWGRP & st_mode) == S_IWGRP) perm[4] = 'w';
+      if ((S_IXGRP & st_mode) == S_IXGRP) perm[5] = 'x';
+
+      if ((S_IROTH & st_mode) == S_IROTH) perm[6] = 'r';
+      if ((S_IWOTH & st_mode) == S_IWOTH) perm[7] = 'w';
+      if ((S_IXOTH & st_mode) == S_IXOTH) perm[8] = 'x';
+
+      if (read && write && execute) snprintf(perms, PATH_MAX, 
+                                       "You have full access");
+      else if (!read && !write && !execute) snprintf(perms, PATH_MAX,
+                                       "You do not have access");
+      else if (read && !write && !execute) snprintf(perms, PATH_MAX,
+                                       "You can read");
+      else if (!read && write && !execute) snprintf(perms, PATH_MAX,
+                                       "You can write");
+      else if (!read && !write && execute) snprintf(perms, PATH_MAX,
+                                       "You can execute");
+      else if (read && write && !execute) snprintf(perms, PATH_MAX,
+                                       "You can read and write");
+      else if (read && !write && execute) snprintf(perms, PATH_MAX,
+                                       "You can read and execute");
+      else if (!read && write && execute) snprintf(perms, PATH_MAX,
+                                       "You can write and execute");
+     }
+   else snprintf(perms, PATH_MAX, "You are not the owner");
+
+   return strdup(perms);
+}
+
+static char * 
+_e_wid_file_time_get(time_t st_modtime)
+{
+   char *time;
+   time = ctime(&st_modtime);
+   if (time) time = strdup(time);
+   else time = strdup("unknown");
+   return time;
 }
 
 static void
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_widget_fsel.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- e_widget_fsel.h     23 Jul 2006 11:22:13 -0000      1.2
+++ e_widget_fsel.h     13 Aug 2006 02:49:54 -0000      1.3
@@ -8,7 +8,7 @@
 
 EAPI Evas_Object *e_widget_fsel_add(Evas *evas, char *dev, char *path, char 
*selected, char *filter,
                                    void (*sel_func) (void *data, Evas_Object 
*obj), void *sel_data,
-                                   void (*chg_func) (void *data, Evas_Object 
*obj), void *chg_data);
+                                   void (*chg_func) (void *data, Evas_Object 
*obj), void *chg_data, int preview);
 EAPI const char *e_widget_fsel_selection_path_get(Evas_Object *obj);
     
 #endif



-------------------------------------------------------------------------
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