2005-10-20 06:08:51 -07:00
|
|
|
/*
|
|
|
|
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
|
|
|
|
*/
|
|
|
|
#include "e.h"
|
|
|
|
|
|
|
|
typedef struct _E_Smart_Data E_Smart_Data;
|
|
|
|
|
|
|
|
struct _E_Smart_Data
|
|
|
|
{
|
2005-11-01 17:37:11 -08:00
|
|
|
Evas_Coord x, y, w, h, iw, ih;
|
2005-10-20 06:08:51 -07:00
|
|
|
|
|
|
|
Evas *evas;
|
|
|
|
Evas_Object *obj;
|
|
|
|
|
|
|
|
char *thumb_path;
|
2005-10-25 18:05:56 -07:00
|
|
|
char *saved_title;
|
2005-10-20 06:08:51 -07:00
|
|
|
|
|
|
|
Evas_Object *event_object;
|
|
|
|
Evas_Object *icon_object;
|
|
|
|
Evas_Object *image_object;
|
|
|
|
Evas_Object *entry_object;
|
2005-11-03 07:26:46 -08:00
|
|
|
Evas_Object *thumb_object;
|
2005-10-20 06:08:51 -07:00
|
|
|
|
|
|
|
E_Fm_File *file;
|
2005-10-25 18:05:56 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
unsigned char visible : 1;
|
2005-10-29 04:48:18 -07:00
|
|
|
|
|
|
|
int type;
|
2005-10-20 06:08:51 -07:00
|
|
|
};
|
|
|
|
|
|
|
|
/* local subsystem functions */
|
|
|
|
static void _e_fm_icon_smart_add (Evas_Object *obj);
|
|
|
|
static void _e_fm_icon_smart_del (Evas_Object *obj);
|
|
|
|
static void _e_fm_icon_smart_move (Evas_Object *obj, Evas_Coord x, Evas_Coord y);
|
|
|
|
static void _e_fm_icon_smart_resize (Evas_Object *obj, Evas_Coord w, Evas_Coord h);
|
2005-11-04 09:02:42 -08:00
|
|
|
static void _e_fm_icon_smart_show (Evas_Object *obj);
|
|
|
|
static void _e_fm_icon_smart_hide (Evas_Object *obj);
|
2005-10-20 06:08:51 -07:00
|
|
|
static void _e_fm_icon_smart_clip_set (Evas_Object *obj, Evas_Object *clip);
|
|
|
|
static void _e_fm_icon_smart_clip_unset (Evas_Object *obj);
|
|
|
|
|
|
|
|
/* Create icons */
|
|
|
|
static void _e_fm_icon_icon_mime_get(E_Smart_Data *sd);
|
|
|
|
|
2005-10-20 08:07:45 -07:00
|
|
|
static void _e_fm_icon_thumb_generate(void);
|
2005-10-20 06:08:51 -07:00
|
|
|
static int _e_fm_icon_thumb_cb_exe_exit(void *data, int type, void *event);
|
|
|
|
|
2005-10-29 04:48:18 -07:00
|
|
|
static void _e_fm_icon_type_set(E_Smart_Data *sd);
|
|
|
|
|
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
/* local subsystem globals */
|
|
|
|
static Evas_Smart *e_smart = NULL;
|
|
|
|
|
|
|
|
static pid_t pid = -1;
|
|
|
|
static Evas_List *thumb_files = NULL;
|
|
|
|
|
|
|
|
static Evas_List *event_handlers = NULL;
|
|
|
|
|
|
|
|
/* externally accessible functions */
|
|
|
|
int
|
|
|
|
e_fm_icon_init(void)
|
|
|
|
{
|
|
|
|
event_handlers = evas_list_append(event_handlers,
|
|
|
|
ecore_event_handler_add(ECORE_EVENT_EXE_EXIT,
|
|
|
|
_e_fm_icon_thumb_cb_exe_exit,
|
|
|
|
NULL));
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
int
|
|
|
|
e_fm_icon_shutdown(void)
|
|
|
|
{
|
|
|
|
while (event_handlers)
|
|
|
|
{
|
|
|
|
ecore_event_handler_del(event_handlers->data);
|
|
|
|
event_handlers = evas_list_remove_list(event_handlers, event_handlers);
|
|
|
|
}
|
|
|
|
evas_list_free(thumb_files);
|
|
|
|
evas_smart_free(e_smart);
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
Evas_Object *
|
|
|
|
e_fm_icon_add(Evas *evas)
|
|
|
|
{
|
|
|
|
Evas_Object *e_fm_icon_smart;
|
|
|
|
|
|
|
|
if (!e_smart)
|
|
|
|
{
|
|
|
|
e_smart = evas_smart_new("e_fm_icon_smart",
|
|
|
|
_e_fm_icon_smart_add,
|
|
|
|
_e_fm_icon_smart_del,
|
2005-10-26 19:44:36 -07:00
|
|
|
NULL, NULL, NULL, NULL, NULL,
|
2005-10-20 06:08:51 -07:00
|
|
|
_e_fm_icon_smart_move,
|
|
|
|
_e_fm_icon_smart_resize,
|
2005-11-04 09:02:42 -08:00
|
|
|
_e_fm_icon_smart_show,
|
|
|
|
_e_fm_icon_smart_hide,
|
2005-10-20 06:08:51 -07:00
|
|
|
NULL,
|
|
|
|
_e_fm_icon_smart_clip_set,
|
|
|
|
_e_fm_icon_smart_clip_unset,
|
|
|
|
NULL);
|
|
|
|
}
|
|
|
|
|
|
|
|
e_fm_icon_smart = evas_object_smart_add(evas, e_smart);
|
|
|
|
|
|
|
|
return e_fm_icon_smart;
|
|
|
|
}
|
|
|
|
|
2005-10-29 04:48:18 -07:00
|
|
|
void
|
|
|
|
e_fm_icon_type_set(Evas_Object *obj, int type)
|
|
|
|
{
|
|
|
|
E_Smart_Data *sd;
|
|
|
|
|
|
|
|
if(sd->type == type)
|
|
|
|
return;
|
|
|
|
|
|
|
|
sd->type = type;
|
|
|
|
_e_fm_icon_type_set(sd);
|
|
|
|
}
|
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
void
|
|
|
|
e_fm_icon_file_set(Evas_Object *obj, E_Fm_File *file)
|
|
|
|
{
|
|
|
|
E_Smart_Data *sd;
|
2005-10-29 04:48:18 -07:00
|
|
|
Evas_Coord icon_w, icon_h;
|
2005-10-20 06:08:51 -07:00
|
|
|
|
|
|
|
sd = evas_object_smart_data_get(obj);
|
|
|
|
if (!sd) return;
|
|
|
|
e_object_ref(E_OBJECT(file));
|
|
|
|
sd->file = file;
|
|
|
|
file->icon_object = obj;
|
2005-10-29 04:48:18 -07:00
|
|
|
|
2005-10-27 03:19:43 -07:00
|
|
|
if (e_fm_file_can_preview(sd->file))
|
|
|
|
{
|
|
|
|
sd->thumb_path = e_thumb_file_get(sd->file->path);
|
|
|
|
if (e_thumb_exists(sd->file->path))
|
2005-11-03 07:26:46 -08:00
|
|
|
{
|
|
|
|
sd->thumb_object = e_thumb_evas_object_get(sd->file->path,
|
|
|
|
sd->evas,
|
|
|
|
sd->iw,
|
2005-11-03 19:33:23 -08:00
|
|
|
sd->ih,
|
|
|
|
1);
|
2005-11-04 09:02:42 -08:00
|
|
|
// evas_object_geometry_get(sd->thumb_object, NULL, NULL, &icon_w, &icon_h);
|
|
|
|
// sd->iw = icon_w;
|
|
|
|
// sd->ih = icon_h;
|
2005-11-03 07:26:46 -08:00
|
|
|
sd->image_object = edje_object_add(sd->evas);
|
|
|
|
e_theme_edje_object_set(sd->image_object, "base/theme/fileman",
|
|
|
|
"fileman/icon_thumb");
|
2005-11-04 09:02:42 -08:00
|
|
|
edje_extern_object_min_size_set(sd->thumb_object, sd->iw, sd->ih);
|
|
|
|
edje_extern_object_max_size_set(sd->thumb_object, sd->iw, sd->ih);
|
2005-11-03 07:26:46 -08:00
|
|
|
edje_object_part_swallow(sd->image_object, "icon_swallow",
|
|
|
|
sd->thumb_object);
|
2005-11-04 09:02:42 -08:00
|
|
|
edje_object_size_min_calc(sd->image_object, &icon_w, &icon_h);
|
|
|
|
sd->iw = icon_w;
|
|
|
|
sd->ih = icon_h;
|
|
|
|
edje_extern_object_min_size_set(sd->image_object, icon_w, icon_h);
|
|
|
|
edje_extern_object_max_size_set(sd->image_object, icon_w, icon_h);
|
|
|
|
edje_object_part_swallow(sd->icon_object, "icon_swallow",
|
|
|
|
sd->image_object);
|
2005-11-03 07:26:46 -08:00
|
|
|
}
|
2005-10-27 03:19:43 -07:00
|
|
|
else
|
|
|
|
{
|
|
|
|
thumb_files = evas_list_append(thumb_files, sd);
|
|
|
|
if (pid == -1) _e_fm_icon_thumb_generate();
|
|
|
|
_e_fm_icon_icon_mime_get(sd);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
_e_fm_icon_icon_mime_get(sd);
|
|
|
|
}
|
2005-10-29 04:48:18 -07:00
|
|
|
_e_fm_icon_type_set(sd);
|
2005-11-04 09:02:42 -08:00
|
|
|
edje_object_size_min_calc(sd->icon_object, &icon_w, &icon_h);
|
|
|
|
evas_object_resize(sd->obj, 0, 0); // because it still thinks its the same size
|
2005-11-04 09:11:02 -08:00
|
|
|
// 96 is an aritary width - should be user configurable
|
|
|
|
evas_object_resize(sd->obj, 80, icon_h);
|
2005-10-20 06:08:51 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
e_fm_icon_title_set(Evas_Object *obj, const char *title)
|
|
|
|
{
|
2005-11-01 17:37:11 -08:00
|
|
|
E_Smart_Data *sd;
|
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
sd = evas_object_smart_data_get(obj);
|
|
|
|
if (!sd) return;
|
2005-10-25 18:05:56 -07:00
|
|
|
E_FREE(sd->saved_title);
|
2005-10-31 01:31:05 -08:00
|
|
|
sd->saved_title = E_NEW(char, strlen(title) + 1);
|
2005-10-25 18:05:56 -07:00
|
|
|
snprintf(sd->saved_title, strlen(title) + 1, "%s", title);
|
2005-11-01 17:37:11 -08:00
|
|
|
//if (sd->icon_object) edje_object_part_text_set(sd->icon_object, "icon_title", title);
|
|
|
|
if(sd->icon_object)
|
|
|
|
{
|
2005-11-03 19:33:23 -08:00
|
|
|
#if 0
|
2005-11-01 17:37:11 -08:00
|
|
|
Evas_Textblock_Style *e_editable_text_style;
|
|
|
|
Evas_Coord fw, fh, il, ir, it, ib;
|
|
|
|
|
|
|
|
e_editable_text_style = evas_textblock_style_new();
|
|
|
|
evas_textblock_style_set(e_editable_text_style, "DEFAULT='font=Vera font_size=10 style=shadow shadow_color=#ffffff80 align=center color=#000000 wrap=char'");
|
|
|
|
|
|
|
|
|
|
|
|
evas_object_textblock_style_set(sd->title_object, e_editable_text_style);
|
2005-11-03 19:33:23 -08:00
|
|
|
evas_object_textblock_text_markup_set(sd->title_object, title);
|
2005-11-01 17:37:11 -08:00
|
|
|
|
|
|
|
evas_object_resize(sd->title_object, sd->w, 1);
|
|
|
|
evas_object_textblock_size_formatted_get(sd->title_object, &fw, &fh);
|
|
|
|
evas_object_textblock_style_insets_get(sd->title_object, &il, &ir, &it, &ib);
|
|
|
|
|
|
|
|
sd->h = sd->ih + fh + it + ib;
|
|
|
|
|
|
|
|
evas_object_resize(sd->title_object, sd->w, fh + it + ib);
|
|
|
|
edje_extern_object_min_size_set(sd->title_object, sd->w, fh + it + ib);
|
|
|
|
evas_object_resize(sd->icon_object, sd->w, sd->h);
|
|
|
|
evas_object_resize(sd->obj, sd->w, sd->h);
|
|
|
|
edje_object_part_swallow(sd->icon_object, "icon_title", sd->title_object);
|
2005-11-03 19:33:23 -08:00
|
|
|
#endif
|
|
|
|
edje_object_part_text_set(sd->icon_object, "icon_title", title);
|
2005-11-01 17:37:11 -08:00
|
|
|
}
|
2005-10-20 06:08:51 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
e_fm_icon_edit_entry_set(Evas_Object *obj, Evas_Object *entry)
|
|
|
|
{
|
|
|
|
E_Smart_Data *sd;
|
|
|
|
|
|
|
|
sd = evas_object_smart_data_get(obj);
|
|
|
|
if (!sd) return;
|
|
|
|
if (entry)
|
|
|
|
{
|
|
|
|
sd->entry_object = entry;
|
|
|
|
edje_object_part_swallow(sd->icon_object, "icon_title_edit_swallow", sd->entry_object);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
edje_object_part_unswallow(sd->icon_object, sd->entry_object);
|
|
|
|
sd->entry_object = NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
e_fm_icon_signal_emit(Evas_Object *obj, const char *source, const char *emission)
|
|
|
|
{
|
|
|
|
E_Smart_Data *sd;
|
|
|
|
|
|
|
|
sd = evas_object_smart_data_get(obj);
|
|
|
|
if (!sd) return;
|
|
|
|
if (sd->icon_object) edje_object_signal_emit(sd->icon_object, source, emission);
|
|
|
|
if (sd->image_object) edje_object_signal_emit(sd->image_object, source, emission);
|
|
|
|
}
|
|
|
|
|
|
|
|
int
|
|
|
|
e_fm_icon_assoc_set(Evas_Object *obj, const char *assoc)
|
|
|
|
{
|
|
|
|
/* TODO
|
|
|
|
* Store the associated exe in a cfg
|
|
|
|
*/
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* local subsystem functions */
|
|
|
|
static void
|
|
|
|
_e_fm_icon_smart_add(Evas_Object *obj)
|
|
|
|
{
|
|
|
|
E_Smart_Data *sd;
|
|
|
|
|
|
|
|
sd = E_NEW(E_Smart_Data, 1);
|
|
|
|
if (!sd) return;
|
|
|
|
|
|
|
|
sd->evas = evas_object_evas_get(obj);
|
|
|
|
sd->obj = obj;
|
2005-10-25 18:05:56 -07:00
|
|
|
sd->saved_title = NULL;
|
2005-10-29 04:48:18 -07:00
|
|
|
sd->type = E_FM_ICON_NORMAL;
|
2005-11-01 17:37:11 -08:00
|
|
|
sd->w = 64;
|
|
|
|
sd->h = 64;
|
|
|
|
sd->iw = 48;
|
|
|
|
sd->ih = 48;
|
2005-11-04 09:02:42 -08:00
|
|
|
|
|
|
|
sd->icon_object = edje_object_add(sd->evas);
|
|
|
|
evas_object_smart_member_add(sd->icon_object, obj);
|
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
sd->event_object = evas_object_rectangle_add(sd->evas);
|
|
|
|
evas_object_color_set(sd->event_object, 0, 0, 0, 0);
|
|
|
|
evas_object_smart_member_add(sd->event_object, obj);
|
|
|
|
evas_object_smart_data_set(obj, sd);
|
2005-11-01 17:37:11 -08:00
|
|
|
|
2005-10-27 03:19:43 -07:00
|
|
|
sd->visible = 1;
|
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_e_fm_icon_smart_del(Evas_Object *obj)
|
|
|
|
{
|
|
|
|
E_Smart_Data *sd;
|
|
|
|
|
|
|
|
sd = evas_object_smart_data_get(obj);
|
|
|
|
if (!sd) return;
|
2005-11-04 09:02:42 -08:00
|
|
|
if (sd->event_object) evas_object_del(sd->event_object);
|
|
|
|
if (sd->icon_object) evas_object_del(sd->icon_object);
|
|
|
|
if (sd->image_object) evas_object_del(sd->image_object);
|
|
|
|
if (sd->thumb_object) evas_object_del(sd->thumb_object);
|
2005-10-25 18:05:56 -07:00
|
|
|
E_FREE(sd->saved_title);
|
2005-10-20 06:08:51 -07:00
|
|
|
if (sd->file) e_object_unref(E_OBJECT(sd->file));
|
|
|
|
free(sd);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_e_fm_icon_smart_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y)
|
|
|
|
{
|
|
|
|
E_Smart_Data *sd;
|
|
|
|
|
|
|
|
sd = evas_object_smart_data_get(obj);
|
|
|
|
if (!sd) return;
|
2005-11-04 09:02:42 -08:00
|
|
|
if ((sd->x == x) && (sd->y == y)) return;
|
2005-10-20 06:08:51 -07:00
|
|
|
sd->x = x;
|
|
|
|
sd->y = y;
|
2005-11-04 09:02:42 -08:00
|
|
|
evas_object_move(sd->event_object, x, y);
|
|
|
|
evas_object_move(sd->icon_object, x, y);
|
2005-10-20 06:08:51 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_e_fm_icon_smart_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h)
|
|
|
|
{
|
|
|
|
E_Smart_Data *sd;
|
|
|
|
|
|
|
|
sd = evas_object_smart_data_get(obj);
|
|
|
|
if (!sd) return;
|
2005-11-04 09:02:42 -08:00
|
|
|
if ((sd->w == w) && (sd->h == h)) return;
|
2005-10-20 06:08:51 -07:00
|
|
|
sd->w = w;
|
2005-11-04 09:02:42 -08:00
|
|
|
sd->h = h;
|
2005-11-01 17:37:11 -08:00
|
|
|
evas_object_resize(sd->event_object, sd->w, sd->h);
|
2005-11-04 09:02:42 -08:00
|
|
|
evas_object_resize(sd->icon_object, sd->w, sd->h);
|
2005-10-20 06:08:51 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2005-11-04 09:02:42 -08:00
|
|
|
_e_fm_icon_smart_show(Evas_Object *obj)
|
|
|
|
{
|
|
|
|
E_Smart_Data *sd;
|
|
|
|
|
|
|
|
sd = evas_object_smart_data_get(obj);
|
|
|
|
if (!sd) return;
|
|
|
|
evas_object_show(sd->icon_object);
|
|
|
|
evas_object_show(sd->event_object);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_e_fm_icon_smart_hide(Evas_Object *obj)
|
2005-10-20 06:08:51 -07:00
|
|
|
{
|
|
|
|
E_Smart_Data *sd;
|
|
|
|
|
|
|
|
sd = evas_object_smart_data_get(obj);
|
|
|
|
if (!sd) return;
|
2005-11-04 09:02:42 -08:00
|
|
|
evas_object_hide(sd->icon_object);
|
|
|
|
evas_object_hide(sd->event_object);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_e_fm_icon_smart_clip_set(Evas_Object *obj, Evas_Object *clip)
|
|
|
|
{
|
|
|
|
E_Smart_Data *sd;
|
2005-10-20 06:08:51 -07:00
|
|
|
|
2005-11-04 09:02:42 -08:00
|
|
|
sd = evas_object_smart_data_get(obj);
|
|
|
|
if (!sd) return;
|
2005-10-20 06:08:51 -07:00
|
|
|
evas_object_clip_set(sd->event_object, clip);
|
2005-10-27 03:19:43 -07:00
|
|
|
evas_object_clip_set(sd->icon_object, clip);
|
2005-10-20 06:08:51 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_e_fm_icon_smart_clip_unset(Evas_Object *obj)
|
|
|
|
{
|
|
|
|
E_Smart_Data *sd;
|
|
|
|
|
|
|
|
sd = evas_object_smart_data_get(obj);
|
|
|
|
if (!sd) return;
|
|
|
|
evas_object_clip_unset(sd->event_object);
|
2005-11-04 09:02:42 -08:00
|
|
|
evas_object_clip_unset(sd->icon_object);
|
2005-10-20 06:08:51 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_e_fm_icon_icon_mime_get(E_Smart_Data *sd)
|
|
|
|
{
|
2005-11-04 09:02:42 -08:00
|
|
|
sd->image_object = edje_object_add(sd->evas);
|
2005-10-20 06:08:51 -07:00
|
|
|
if (sd->file->type == E_FM_FILE_TYPE_DIRECTORY)
|
2005-11-04 09:02:42 -08:00
|
|
|
e_theme_edje_object_set(sd->image_object, "base/theme/fileman",
|
|
|
|
"icons/fileman/folder");
|
2005-10-20 06:08:51 -07:00
|
|
|
else
|
|
|
|
{
|
|
|
|
char *ext;
|
|
|
|
|
|
|
|
ext = strrchr(sd->file->name, '.');
|
|
|
|
if (ext)
|
|
|
|
{
|
|
|
|
char part[PATH_MAX];
|
|
|
|
char *ext2;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
ext = strdup(ext);
|
|
|
|
ext2 = ext;
|
2005-11-04 09:02:42 -08:00
|
|
|
for (; *ext2; ext2++) *ext2 = tolower(*ext2);
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-27 03:19:43 -07:00
|
|
|
snprintf(part, PATH_MAX, "icons/fileman/%s", (ext + 1));
|
2005-10-23 08:18:47 -07:00
|
|
|
if (!e_theme_edje_object_set(sd->image_object, "base/theme/fileman", part))
|
2005-10-27 03:19:43 -07:00
|
|
|
e_theme_edje_object_set(sd->image_object, "base/theme/fileman", "icons/fileman/file");
|
2005-10-20 06:08:51 -07:00
|
|
|
free(ext);
|
|
|
|
}
|
|
|
|
else
|
2005-10-27 03:19:43 -07:00
|
|
|
e_theme_edje_object_set(sd->image_object, "base/theme/fileman", "icons/fileman/file");
|
2005-10-20 06:08:51 -07:00
|
|
|
}
|
2005-11-04 09:02:42 -08:00
|
|
|
evas_object_show(sd->image_object);
|
2005-11-03 19:33:23 -08:00
|
|
|
edje_extern_object_min_size_set(sd->image_object, sd->iw, sd->ih);
|
2005-11-04 06:58:03 -08:00
|
|
|
edje_extern_object_max_size_set(sd->image_object, sd->iw, sd->ih);
|
2005-11-04 09:02:42 -08:00
|
|
|
edje_object_part_swallow(sd->icon_object, "icon_swallow",
|
|
|
|
sd->image_object);
|
2005-10-20 06:08:51 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2005-10-20 08:07:45 -07:00
|
|
|
_e_fm_icon_thumb_generate(void)
|
2005-10-20 06:08:51 -07:00
|
|
|
{
|
2005-10-20 08:07:45 -07:00
|
|
|
E_Smart_Data *sd;
|
|
|
|
|
|
|
|
if ((!thumb_files) || (pid != -1)) return;
|
2005-10-20 06:08:51 -07:00
|
|
|
|
|
|
|
pid = fork();
|
|
|
|
if (pid == 0)
|
2005-10-20 08:07:45 -07:00
|
|
|
{
|
2005-10-20 20:00:08 -07:00
|
|
|
/* reset signal handlers for the child */
|
|
|
|
signal(SIGSEGV, SIG_DFL);
|
|
|
|
signal(SIGILL, SIG_DFL);
|
|
|
|
signal(SIGFPE, SIG_DFL);
|
|
|
|
signal(SIGBUS, SIG_DFL);
|
|
|
|
|
2005-10-20 08:07:45 -07:00
|
|
|
sd = thumb_files->data;
|
|
|
|
if (!e_thumb_exists(sd->file->path))
|
|
|
|
e_thumb_create(sd->file->path, 48, 48); // thumbnail size
|
2005-10-20 06:08:51 -07:00
|
|
|
exit(0);
|
2005-10-20 08:07:45 -07:00
|
|
|
}
|
2005-10-20 06:08:51 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static int
|
|
|
|
_e_fm_icon_thumb_cb_exe_exit(void *data, int type, void *event)
|
|
|
|
{
|
|
|
|
Ecore_Event_Exe_Exit *ev;
|
2005-10-20 08:07:45 -07:00
|
|
|
E_Smart_Data *sd;
|
2005-10-21 02:52:46 -07:00
|
|
|
char *ext;
|
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
ev = event;
|
|
|
|
if (ev->pid != pid) return 1;
|
2005-10-20 08:07:45 -07:00
|
|
|
if (!thumb_files) return 1;
|
|
|
|
|
|
|
|
sd = thumb_files->data;
|
|
|
|
thumb_files = evas_list_remove_list(thumb_files, thumb_files);
|
|
|
|
|
2005-10-23 08:18:47 -07:00
|
|
|
ext = strrchr(sd->file->name, '.');
|
|
|
|
if ((ext) && (strcasecmp(ext, ".eap")))
|
|
|
|
ext = NULL;
|
2005-10-21 02:52:46 -07:00
|
|
|
|
2005-10-23 08:18:47 -07:00
|
|
|
if ((ext) || (ecore_file_exists(sd->thumb_path)))
|
2005-10-20 06:08:51 -07:00
|
|
|
{
|
2005-11-04 09:02:42 -08:00
|
|
|
Evas_Coord icon_w, icon_h;
|
|
|
|
|
2005-10-20 08:07:45 -07:00
|
|
|
if (sd->image_object) evas_object_del(sd->image_object);
|
2005-11-03 07:26:46 -08:00
|
|
|
|
|
|
|
sd->thumb_object = e_thumb_evas_object_get(sd->file->path,
|
2005-10-20 08:07:45 -07:00
|
|
|
sd->evas,
|
2005-11-03 07:26:46 -08:00
|
|
|
sd->iw,
|
2005-11-03 19:33:23 -08:00
|
|
|
sd->ih,
|
|
|
|
1);
|
2005-11-04 09:02:42 -08:00
|
|
|
// evas_object_geometry_get(sd->thumb_object, NULL, NULL, &icon_w, &icon_h);
|
|
|
|
// sd->iw = icon_w;
|
|
|
|
// sd->ih = icon_h;
|
2005-11-03 07:26:46 -08:00
|
|
|
sd->image_object = edje_object_add(sd->evas);
|
|
|
|
e_theme_edje_object_set(sd->image_object, "base/theme/fileman",
|
|
|
|
"fileman/icon_thumb");
|
2005-11-04 09:02:42 -08:00
|
|
|
evas_object_show(sd->image_object);
|
|
|
|
evas_object_show(sd->thumb_object);
|
|
|
|
edje_extern_object_min_size_set(sd->thumb_object, sd->iw, sd->ih);
|
|
|
|
edje_extern_object_max_size_set(sd->thumb_object, sd->iw, sd->ih);
|
2005-11-03 07:26:46 -08:00
|
|
|
edje_object_part_swallow(sd->image_object, "icon_swallow",
|
|
|
|
sd->thumb_object);
|
2005-11-04 09:02:42 -08:00
|
|
|
edje_object_size_min_calc(sd->image_object, &icon_w, &icon_h);
|
|
|
|
sd->iw = icon_w;
|
|
|
|
sd->ih = icon_h;
|
|
|
|
edje_extern_object_min_size_set(sd->image_object, icon_w, icon_h);
|
|
|
|
edje_extern_object_max_size_set(sd->image_object, icon_w, icon_h);
|
2005-10-20 08:07:45 -07:00
|
|
|
edje_object_part_swallow(sd->icon_object, "icon_swallow",
|
|
|
|
sd->image_object);
|
2005-10-20 06:08:51 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
pid = -1;
|
2005-10-20 08:07:45 -07:00
|
|
|
_e_fm_icon_thumb_generate();
|
2005-10-20 06:08:51 -07:00
|
|
|
return 1;
|
|
|
|
}
|
2005-10-29 04:48:18 -07:00
|
|
|
|
|
|
|
static void
|
|
|
|
_e_fm_icon_type_set(E_Smart_Data *sd)
|
|
|
|
{
|
2005-11-04 09:02:42 -08:00
|
|
|
switch (sd->type)
|
2005-10-29 04:48:18 -07:00
|
|
|
{
|
|
|
|
case E_FM_ICON_NORMAL:
|
|
|
|
e_theme_edje_object_set(sd->icon_object, "base/theme/fileman",
|
|
|
|
"fileman/icon_normal");
|
|
|
|
break;
|
|
|
|
|
|
|
|
case E_FM_ICON_LIST:
|
|
|
|
e_theme_edje_object_set(sd->icon_object, "base/theme/fileman",
|
|
|
|
"fileman/icon_list");
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
e_theme_edje_object_set(sd->icon_object, "base/theme/fileman",
|
|
|
|
"fileman/icon_normal");
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (sd->image_object)
|
|
|
|
{
|
2005-11-03 19:33:23 -08:00
|
|
|
edje_extern_object_min_size_set(sd->image_object, sd->iw, sd->ih);
|
2005-11-04 09:02:42 -08:00
|
|
|
edje_extern_object_max_size_set(sd->image_object, sd->iw, sd->ih);
|
|
|
|
edje_object_part_swallow(sd->icon_object, "icon_swallow",
|
|
|
|
sd->image_object);
|
2005-10-29 04:48:18 -07:00
|
|
|
evas_object_show(sd->image_object);
|
|
|
|
}
|
|
|
|
|
2005-11-04 09:02:42 -08:00
|
|
|
if (sd->saved_title)
|
2005-11-01 17:37:11 -08:00
|
|
|
{
|
2005-11-03 19:33:23 -08:00
|
|
|
#if 0
|
2005-11-01 17:37:11 -08:00
|
|
|
Evas_Textblock_Style *e_editable_text_style;
|
|
|
|
Evas_Coord fw, fh, il, ir, it, ib;
|
|
|
|
|
|
|
|
e_editable_text_style = evas_textblock_style_new();
|
2005-11-02 01:17:44 -08:00
|
|
|
evas_textblock_style_set(e_editable_text_style, "DEFAULT='font=Vera font_size=10 style=shadow shadow_color=#ffffff80 align=center color=#000000 wrap=char'");
|
2005-11-01 17:37:11 -08:00
|
|
|
|
|
|
|
|
|
|
|
evas_object_textblock_style_set(sd->title_object, e_editable_text_style);
|
2005-11-03 19:33:23 -08:00
|
|
|
evas_object_textblock_text_markup_set(sd->title_object, sd->saved_title);
|
2005-11-01 17:37:11 -08:00
|
|
|
|
|
|
|
evas_object_resize(sd->title_object, sd->w, 1);
|
|
|
|
evas_object_textblock_size_formatted_get(sd->title_object, &fw, &fh);
|
|
|
|
evas_object_textblock_style_insets_get(sd->title_object, &il, &ir, &it, &ib);
|
|
|
|
|
|
|
|
sd->h = sd->ih + fh + it + ib;
|
|
|
|
|
|
|
|
evas_object_resize(sd->title_object, sd->w, fh + it + ib);
|
|
|
|
edje_extern_object_min_size_set(sd->title_object, sd->w, fh + it + ib);
|
|
|
|
evas_object_resize(sd->icon_object, sd->w, sd->h);
|
|
|
|
evas_object_resize(sd->obj, sd->w, sd->h);
|
|
|
|
edje_object_part_swallow(sd->icon_object, "icon_title", sd->title_object);
|
2005-11-03 19:33:23 -08:00
|
|
|
#endif
|
|
|
|
edje_object_part_text_set(sd->icon_object, "icon_title", sd->saved_title);
|
2005-11-01 17:37:11 -08:00
|
|
|
}
|
2005-10-29 04:48:18 -07:00
|
|
|
else
|
2005-11-01 17:37:11 -08:00
|
|
|
{
|
2005-11-03 19:33:23 -08:00
|
|
|
#if 0
|
2005-11-01 17:37:11 -08:00
|
|
|
Evas_Textblock_Style *e_editable_text_style;
|
|
|
|
Evas_Coord fw, fh, il, ir, it, ib;
|
|
|
|
|
|
|
|
e_editable_text_style = evas_textblock_style_new();
|
2005-11-02 01:17:44 -08:00
|
|
|
evas_textblock_style_set(e_editable_text_style, "DEFAULT='font=Vera font_size=10 style=shadow shadow_color=#ffffff80 align=center color=#000000 wrap=char'");
|
2005-11-01 17:37:11 -08:00
|
|
|
|
|
|
|
|
|
|
|
evas_object_textblock_style_set(sd->title_object, e_editable_text_style);
|
|
|
|
evas_object_textblock_text_markup_set(sd->title_object, sd->file->name);
|
|
|
|
|
|
|
|
evas_object_resize(sd->title_object, sd->w, 1);
|
|
|
|
evas_object_textblock_size_formatted_get(sd->title_object, &fw, &fh);
|
|
|
|
evas_object_textblock_style_insets_get(sd->title_object, &il, &ir, &it, &ib);
|
|
|
|
|
|
|
|
sd->h = sd->ih + fh + it + ib;
|
|
|
|
|
|
|
|
evas_object_resize(sd->title_object, sd->w, fh + it + ib);
|
|
|
|
edje_extern_object_min_size_set(sd->title_object, sd->w, fh + it + ib);
|
|
|
|
evas_object_resize(sd->icon_object, sd->w, sd->h);
|
|
|
|
evas_object_resize(sd->obj, sd->w, sd->h);
|
|
|
|
edje_object_part_swallow(sd->icon_object, "icon_title", sd->title_object);
|
2005-11-03 19:33:23 -08:00
|
|
|
#endif
|
|
|
|
edje_object_part_text_set(sd->icon_object, "icon_title", sd->file->name);
|
2005-11-01 17:37:11 -08:00
|
|
|
}
|
2005-10-29 04:48:18 -07:00
|
|
|
}
|