enlightenment/src/bin/e_fm.c

329 lines
7.6 KiB
C
Raw Normal View History

2006-07-09 11:35:57 -07:00
/*
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
*/
#include "e.h"
/* IGNORE this code for now! */
typedef struct _E_Fm2_Smart_Data E_Fm2_Smart_Data;
typedef struct _E_Fm2_Region E_Fm2_Region;
typedef struct _E_Fm2_Icon E_Fm2_Icon;
struct _E_Fm2_Smart_Data
{
Evas_Coord x, y, w, h;
Evas_Object *obj;
Evas_Object *clip;
char *dev;
char *path;
E_Fm2_View_Mode view_mode;
struct {
Evas_Coord w, h;
} max;
struct {
Evas_Coord x, y;
} pos;
struct {
Evas_List *list;
int member_max;
} regions;
Evas_List *icons;
Evas_List *unsorted;
// unsigned char no_dnd : 1;
// unsigned char single_select : 1;
// unsigned char single_click : 1;
// unsigned char show_ext : 1;
};
struct _E_Fm2_Region
{
E_Fm2_Smart_Data *smart;
Evas_Coord x, y, w, h;
Evas_List *list;
unsigned char realized : 1;
};
struct _E_Fm2_Icon
{
E_Fm2_Smart_Data *smart;
E_Fm2_Region *region;
Evas_Coord x, y, w, h;
Evas_Object *obj;
char *file;
char *mime;
unsigned char realized : 1;
unsigned char selected : 1;
unsigned char thumb : 1;
// unsigned char single_click : 1;
};
static void _e_fm2_smart_add(Evas_Object *object);
static void _e_fm2_smart_del(Evas_Object *object);
static void _e_fm2_smart_move(Evas_Object *object, Evas_Coord x, Evas_Coord y);
static void _e_fm2_smart_resize(Evas_Object *object, Evas_Coord w, Evas_Coord h);
static void _e_fm2_smart_show(Evas_Object *object);
static void _e_fm2_smart_hide(Evas_Object *object);
static void _e_fm2_smart_color_set(Evas_Object *obj, int r, int g, int b, int a);
static void _e_fm2_smart_clip_set(Evas_Object *obj, Evas_Object * clip);
static void _e_fm2_smart_clip_unset(Evas_Object *obj);
static char *_meta_path = NULL;
static Evas_Smart *_e_fm2_smart = NULL;
/* externally accessible functions */
EAPI int
e_fm2_init(void)
{
char *homedir;
char path[PATH_MAX];
homedir = e_user_homedir_get();
if (homedir)
{
snprintf(path, sizeof(path), "%s/.e/e/fileman/metadata", homedir);
ecore_file_mkpath(path);
_meta_path = strdup(path);
free(homedir);
}
else return 0;
_e_fm2_smart = evas_smart_new("e_fm",
_e_fm2_smart_add, /* add */
_e_fm2_smart_del, /* del */
NULL, NULL, NULL, NULL, NULL,
_e_fm2_smart_move, /* move */
_e_fm2_smart_resize, /* resize */
_e_fm2_smart_show,/* show */
_e_fm2_smart_hide,/* hide */
_e_fm2_smart_color_set, /* color_set */
_e_fm2_smart_clip_set, /* clip_set */
_e_fm2_smart_clip_unset, /* clip_unset */
NULL); /* data*/
return 1;
}
EAPI int
e_fm2_shutdown(void)
{
evas_smart_free(_e_fm2_smart);
_e_fm2_smart = NULL;
E_FREE(_meta_path);
return 1;
}
EAPI Evas_Object *
e_fm2_add(Evas *evas)
{
return evas_object_smart_add(evas, _e_fm2_smart);
}
EAPI void
e_fm2_path_set(Evas_Object *obj, char *dev, char *path)
{
E_Fm2_Smart_Data *sd;
sd = evas_object_smart_data_get(obj);
if (!sd) return; // safety
if (!evas_object_type_get(obj)) return; // safety
if (strcmp(evas_object_type_get(obj), "e_fm")) return; // safety
if (sd->dev) free(sd->dev);
if (sd->path) free(sd->path);
// FIXME: nuke regions, icons etc. etc.
// dev == some system device or virtual filesystem eg: /dev/sda1
// or /dev/hdc or /dev/dvd, /dev/cdrom etc.
// if it is NULL root fs is assumed. vfs's could be specified with
// music: for example or photos: etc. and soem vfs definition specifies
// how to map that vfs id to a list of files and subdirs
if (dev) sd->dev = strdup(dev);
sd->path = strdup(path);
// FIXME: begin dir scan/build
}
EAPI void
e_fm2_path_get(Evas_Object *obj, char **dev, char **path)
{
E_Fm2_Smart_Data *sd;
if (dev) *dev = NULL;
if (path) *path = NULL;
sd = evas_object_smart_data_get(obj);
if (!sd) return; // safety
if (!evas_object_type_get(obj)) return; // safety
if (strcmp(evas_object_type_get(obj), "e_fm")) return; // safety
if (dev) *dev = sd->dev;
if (path) *path = sd->path;
}
/* local subsystem functions */
static void
_e_fm2_file_add(Evas_Object *obj, char *file)
{
E_Fm2_Smart_Data *sd;
sd = evas_object_smart_data_get(obj);
if (!sd) return;
/* create icon obj and append to unsorted list */
}
static void
_e_fm2_file_del(Evas_Object *obj, char *file)
{
E_Fm2_Smart_Data *sd;
sd = evas_object_smart_data_get(obj);
if (!sd) return;
/* find icon of file and remove from unsorted or main list */
}
static void
_e_fm2_queue_process(Evas_Object *obj)
{
E_Fm2_Smart_Data *sd;
sd = evas_object_smart_data_get(obj);
if (!sd) return;
/* take unsorted and insert into the regions */
}
static void
_e_fm2_regions_free(Evas_Object *obj)
{
E_Fm2_Smart_Data *sd;
sd = evas_object_smart_data_get(obj);
if (!sd) return;
/* free up all regions */
}
static void
_e_fm2_regions_populate(Evas_Object *obj)
{
E_Fm2_Smart_Data *sd;
sd = evas_object_smart_data_get(obj);
if (!sd) return;
/* take the icon list and split into regions */
}
static void
_e_fm2_icons_free(Evas_Object *obj)
{
E_Fm2_Smart_Data *sd;
sd = evas_object_smart_data_get(obj);
if (!sd) return;
/* free all icons */
}
static void
_e_fm2_smart_add(Evas_Object *obj)
{
E_Fm2_Smart_Data *sd;
sd = E_NEW(E_Fm2_Smart_Data, 1);
if (!sd) return;
sd->obj = obj;
sd->clip = evas_object_rectangle_add(evas_object_evas_get(obj));
evas_object_smart_member_add(sd->clip, obj);
evas_object_move(sd->clip, sd->x, sd->y);
evas_object_resize(sd->clip, sd->w, sd->h);
evas_object_color_set(sd->clip, 255, 255, 255, 255);
evas_object_smart_data_set(obj, sd);
evas_object_move(obj, 0, 0);
evas_object_resize(obj, 0, 0);
}
static void
_e_fm2_smart_del(Evas_Object *obj)
{
E_Fm2_Smart_Data *sd;
sd = evas_object_smart_data_get(obj);
if (!sd) return;
evas_object_del(sd->clip);
free(sd);
}
static void
_e_fm2_smart_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y)
{
E_Fm2_Smart_Data *sd;
sd = evas_object_smart_data_get(obj);
if (!sd) return;
if ((sd->x == x) || (sd->y == y)) return;
sd->x = x;
sd->y = y;
evas_object_move(sd->clip, x, y);
}
static void
_e_fm2_smart_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h)
{
E_Fm2_Smart_Data *sd;
sd = evas_object_smart_data_get(obj);
if (!sd) return;
if ((sd->w == w) || (sd->h == h)) return;
sd->w = w;
sd->h = h;
evas_object_resize(sd->clip, w, h);
}
static void
_e_fm2_smart_show(Evas_Object *obj)
{
E_Fm2_Smart_Data *sd;
sd = evas_object_smart_data_get(obj);
if (!sd) return;
evas_object_show(sd->clip);
}
static void
_e_fm2_smart_hide(Evas_Object *obj)
{
E_Fm2_Smart_Data *sd;
sd = evas_object_smart_data_get(obj);
if (!sd) return;
evas_object_hide(sd->clip);
}
static void
_e_fm2_smart_color_set(Evas_Object *obj, int r, int g, int b, int a)
{
E_Fm2_Smart_Data *sd;
sd = evas_object_smart_data_get(obj);
if (!sd) return;
evas_object_color_set(sd->clip, r, g, b, a);
}
static void
_e_fm2_smart_clip_set(Evas_Object *obj, Evas_Object *clip)
{
E_Fm2_Smart_Data *sd;
sd = evas_object_smart_data_get(obj);
if (!sd) return;
evas_object_clip_set(sd->clip, clip);
}
static void
_e_fm2_smart_clip_unset(Evas_Object *obj)
{
E_Fm2_Smart_Data *sd;
sd = evas_object_smart_data_get(obj);
if (!sd) return;
evas_object_clip_unset(sd->clip);
}