forked from enlightenment/enlightenment
278 lines
6.6 KiB
C
278 lines
6.6 KiB
C
/*
|
|
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
|
|
*/
|
|
#include "e.h"
|
|
|
|
/* FIXME: this code is destined for death - replaced by e_fm.c that already can
|
|
* do this stuff */
|
|
|
|
/*- DESCRIPTION -*/
|
|
/* This is a list of files in a scrollbable container. When a file is selected
|
|
* this object will return the file name.
|
|
*/
|
|
|
|
#define SMART_NAME "e_fileselector"
|
|
#define API_ENTRY E_Smart_Data *sd; sd = evas_object_smart_data_get(obj); if ((!obj) || (!sd) || (evas_object_type_get(obj) && strcmp(evas_object_type_get(obj), SMART_NAME)))
|
|
#define INTERNAL_ENTRY E_Smart_Data *sd; sd = evas_object_smart_data_get(obj); if (!sd) return;
|
|
|
|
typedef struct _E_Smart_Data E_Smart_Data;
|
|
|
|
struct _E_Smart_Data
|
|
{
|
|
Evas_Object *parent;
|
|
Evas_Object *frame; /* scrollframe object */
|
|
Evas_Object *files; /* file view object */
|
|
|
|
int view; /* view type, icons, list */
|
|
|
|
Evas_Coord x, y, w, h; /* coords */
|
|
|
|
void (*func) (Evas_Object *obj, char *file, void *data); /* selection cb */
|
|
void (*func_hilite) (Evas_Object *obj, char *file, void *data); /* selection cb */
|
|
void *func_data; /* selection cb data */
|
|
};
|
|
|
|
/* local subsystem functions */
|
|
static void _e_smart_add(Evas_Object *obj);
|
|
static void _e_smart_del(Evas_Object *obj);
|
|
static void _e_smart_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y);
|
|
static void _e_smart_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h);
|
|
static void _e_smart_show(Evas_Object *obj);
|
|
static void _e_smart_hide(Evas_Object *obj);
|
|
static void _e_smart_color_set(Evas_Object *obj, int r, int g, int b, int a);
|
|
static void _e_smart_clip_set(Evas_Object *obj, Evas_Object * clip);
|
|
static void _e_smart_clip_unset(Evas_Object *obj);
|
|
static void _e_smart_init(void);
|
|
static void _e_file_selector_selected_cb(Evas_Object *obj, char *file, void *data);
|
|
static void _e_file_selector_hilited_cb(Evas_Object *obj, char *file, void *data);
|
|
static void _e_file_selector_scroll_set(Evas_Object *obj, Evas_Coord x, Evas_Coord y);
|
|
static void _e_file_selector_scroll_get(Evas_Object *obj, Evas_Coord *x, Evas_Coord *y);
|
|
static void _e_file_selector_scroll_max_get(Evas_Object *obj, Evas_Coord *x, Evas_Coord *y);
|
|
static void _e_file_selector_scroll_child_size_get(Evas_Object *obj, Evas_Coord *x, Evas_Coord *y);
|
|
|
|
|
|
/* local subsystem globals */
|
|
static Evas_Smart *_e_smart = NULL;
|
|
|
|
/* externally accessible functions */
|
|
EAPI Evas_Object *
|
|
e_file_selector_add(Evas *evas)
|
|
{
|
|
_e_smart_init();
|
|
return evas_object_smart_add(evas, _e_smart);
|
|
}
|
|
|
|
EAPI void
|
|
e_file_selector_view_set(Evas_Object *obj, int type)
|
|
{
|
|
API_ENTRY return;
|
|
|
|
switch(type)
|
|
{
|
|
case E_FILE_SELECTOR_ICONVIEW:
|
|
break;
|
|
|
|
case E_FILE_SELECTOR_LISTVIEW:
|
|
break;
|
|
}
|
|
}
|
|
|
|
EAPI int
|
|
e_file_selector_view_get(Evas_Object *obj)
|
|
{
|
|
API_ENTRY return 0;
|
|
return sd->view;
|
|
}
|
|
|
|
EAPI void
|
|
e_file_selector_callback_add(Evas_Object *obj, void (*func) (Evas_Object *obj, char *file, void *data), void (*func_hilite) (Evas_Object *obj, char *file, void *data), void *data)
|
|
{
|
|
API_ENTRY return;
|
|
sd->func = func;
|
|
sd->func_hilite = func_hilite;
|
|
sd->func_data = data;
|
|
}
|
|
|
|
EAPI void
|
|
e_file_selector_dir_set(Evas_Object *obj, const char *dir)
|
|
{
|
|
API_ENTRY return;
|
|
|
|
e_fm_dir_set(sd->files, dir);
|
|
}
|
|
|
|
static void
|
|
_e_file_selector_scroll_set(Evas_Object *obj, Evas_Coord x, Evas_Coord y)
|
|
{
|
|
e_fm_scroll_set(obj, x, y);
|
|
}
|
|
|
|
static void
|
|
_e_file_selector_scroll_get(Evas_Object *obj, Evas_Coord *x, Evas_Coord *y)
|
|
{
|
|
e_fm_scroll_get(obj, x, y);
|
|
}
|
|
|
|
static void
|
|
_e_file_selector_scroll_max_get(Evas_Object *obj, Evas_Coord *x, Evas_Coord *y)
|
|
{
|
|
e_fm_scroll_max_get(obj, x, y);
|
|
}
|
|
|
|
static void
|
|
_e_file_selector_scroll_child_size_get(Evas_Object *obj, Evas_Coord *x, Evas_Coord *y)
|
|
{
|
|
e_fm_geometry_virtual_get(obj, x, y);
|
|
}
|
|
|
|
|
|
/* local subsystem functions */
|
|
static void
|
|
_e_smart_add(Evas_Object *obj)
|
|
{
|
|
E_Smart_Data *sd;
|
|
Evas *evas;
|
|
char *home;
|
|
|
|
sd = calloc(1, sizeof(E_Smart_Data));
|
|
if (!sd) return;
|
|
sd->x = 0;
|
|
sd->y = 0;
|
|
sd->w = 0;
|
|
sd->h = 0;
|
|
sd->parent = obj;
|
|
sd->func = NULL;
|
|
sd->func_hilite = NULL;
|
|
sd->func_data = NULL;
|
|
sd->view = E_FILE_SELECTOR_ICONVIEW;
|
|
|
|
evas = evas_object_evas_get(obj);
|
|
|
|
sd->frame = e_scrollframe_add(evas);
|
|
evas_object_smart_member_add(sd->frame, obj);
|
|
|
|
sd->files = e_fm_add(evas);
|
|
|
|
/* temp fix until this is handled properly */
|
|
home = e_user_homedir_get();
|
|
e_fm_dir_set(sd->files, home);
|
|
E_FREE(home);
|
|
|
|
e_fm_selector_enable(sd->files, _e_file_selector_selected_cb, _e_file_selector_hilited_cb, sd);
|
|
evas_object_smart_member_add(sd->files, obj);
|
|
|
|
e_scrollframe_extern_pan_set(sd->frame, sd->files,
|
|
_e_file_selector_scroll_set,
|
|
_e_file_selector_scroll_get,
|
|
_e_file_selector_scroll_max_get,
|
|
_e_file_selector_scroll_child_size_get);
|
|
|
|
evas_object_smart_data_set(obj, sd);
|
|
|
|
evas_object_show(sd->frame);
|
|
}
|
|
|
|
static void
|
|
_e_smart_del(Evas_Object *obj)
|
|
{
|
|
INTERNAL_ENTRY;
|
|
|
|
evas_object_del(sd->frame);
|
|
evas_object_del(sd->files);
|
|
|
|
free(sd);
|
|
}
|
|
|
|
static void
|
|
_e_smart_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y)
|
|
{
|
|
INTERNAL_ENTRY;
|
|
sd->x = x;
|
|
sd->y = y;
|
|
evas_object_move(sd->frame, x, y);
|
|
}
|
|
|
|
static void
|
|
_e_smart_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h)
|
|
{
|
|
INTERNAL_ENTRY;
|
|
sd->w = w;
|
|
sd->h = h;
|
|
evas_object_resize(sd->frame, w, h);
|
|
}
|
|
|
|
static void
|
|
_e_smart_show(Evas_Object *obj)
|
|
{
|
|
INTERNAL_ENTRY;
|
|
evas_object_show(sd->frame);
|
|
}
|
|
|
|
static void
|
|
_e_smart_hide(Evas_Object *obj)
|
|
{
|
|
INTERNAL_ENTRY;
|
|
evas_object_hide(sd->frame);
|
|
}
|
|
|
|
static void
|
|
_e_smart_color_set(Evas_Object *obj, int r, int g, int b, int a)
|
|
{
|
|
INTERNAL_ENTRY;
|
|
evas_object_color_set(sd->frame, r, g, b, a);
|
|
}
|
|
|
|
static void
|
|
_e_smart_clip_set(Evas_Object *obj, Evas_Object *clip)
|
|
{
|
|
INTERNAL_ENTRY;
|
|
evas_object_clip_set(sd->frame, clip);
|
|
}
|
|
|
|
static void
|
|
_e_smart_clip_unset(Evas_Object *obj)
|
|
{
|
|
INTERNAL_ENTRY;
|
|
evas_object_clip_unset(sd->frame);
|
|
}
|
|
|
|
static void
|
|
_e_file_selector_selected_cb(Evas_Object *obj, char *file, void *data)
|
|
{
|
|
E_Smart_Data *sd;
|
|
|
|
sd = data;
|
|
if(sd->func)
|
|
sd->func(sd->parent, file, sd->func_data);
|
|
}
|
|
|
|
static void
|
|
_e_file_selector_hilited_cb(Evas_Object *obj, char *file, void *data)
|
|
{
|
|
E_Smart_Data *sd;
|
|
|
|
sd = data;
|
|
if(sd->func_hilite)
|
|
sd->func_hilite(sd->parent, file, sd->func_data);
|
|
}
|
|
|
|
/* never need to touch this */
|
|
|
|
static void
|
|
_e_smart_init(void)
|
|
{
|
|
if (_e_smart) return;
|
|
_e_smart = evas_smart_new(SMART_NAME,
|
|
_e_smart_add,
|
|
_e_smart_del,
|
|
NULL, NULL, NULL, NULL, NULL,
|
|
_e_smart_move,
|
|
_e_smart_resize,
|
|
_e_smart_show,
|
|
_e_smart_hide,
|
|
_e_smart_color_set,
|
|
_e_smart_clip_set,
|
|
_e_smart_clip_unset,
|
|
NULL);
|
|
}
|