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

SVN revision: 24626
This commit is contained in:
titan 2006-08-13 02:49:54 +00:00 committed by titan
parent 2c0daf0b4b
commit ef2878c058
2 changed files with 241 additions and 5 deletions

View File

@ -9,6 +9,15 @@ struct _E_Widget_Data
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 @@ struct _E_Widget_Data
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 @@ _e_wid_fsel_files_selection_change(void *data, Evas_Object *obj, void *event_inf
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 @@ _e_wid_fsel_files_selected(void *data, Evas_Object *obj, void *event_info)
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 @@ e_widget_fsel_add(Evas *evas, char *dev, char *path, char *selected, char *filte
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 @@ e_widget_fsel_add(Evas *evas, char *dev, char *path, char *selected, char *filte
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)
{
@ -313,6 +420,135 @@ e_widget_fsel_selection_path_get(Evas_Object *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
_e_wid_del_hook(Evas_Object *obj)
{

View File

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