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