forked from enlightenment/enlightenment
329 lines
7.6 KiB
C
329 lines
7.6 KiB
C
|
/*
|
||
|
* 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);
|
||
|
}
|