parent
d5f66a22f7
commit
6061e12844
7 changed files with 365 additions and 7 deletions
@ -0,0 +1,328 @@ |
||||
/*
|
||||
* 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); |
||||
} |
@ -0,0 +1,25 @@ |
||||
/*
|
||||
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2 |
||||
*/ |
||||
#ifdef E_TYPEDEFS |
||||
|
||||
/* IGNORE this code for now! */ |
||||
|
||||
typedef enum _E_Fm2_View_Mode |
||||
{ |
||||
E_FM_VIEW_MODE_ICONS, |
||||
E_FM_VIEW_MODE_LIST |
||||
} E_Fm2_View_Mode; |
||||
|
||||
#else |
||||
#ifndef E_FM_H |
||||
#define E_FM_H |
||||
|
||||
EAPI int e_fm2_init(void); |
||||
EAPI int e_fm2_shutdown(void); |
||||
EAPI Evas_Object *e_fm2_add(Evas *evas); |
||||
EAPI void e_fm2_path_set(Evas_Object *obj, char *dev, char *path); |
||||
EAPI void e_fm2_path_get(Evas_Object *obj, char **dev, char **path); |
||||
|
||||
#endif |
||||
#endif |
Loading…
Reference in new issue