Enlightenment CVS committal Author : raster Project : e17 Module : apps/e
Dir : e17/apps/e/src/bin Modified Files: e_fm.c e_fm.h Log Message: and more efm work.... =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_fm.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -3 -r1.7 -r1.8 --- e_fm.c 16 Jul 2006 21:25:15 -0000 1.7 +++ e_fm.c 17 Jul 2006 10:31:49 -0000 1.8 @@ -14,16 +14,10 @@ Evas_Coord x, y, w, h; Evas_Object *obj; Evas_Object *clip; - char *dev; - char *path; - char *realpath; - E_Fm2_View_Mode view_mode; - struct { - int w, h; - int list_w, list_h; - unsigned char fixed_w : 1; - unsigned char fixed_h : 1; - } icon; + const char *dev; + const char *path; + const char *realpath; + struct { Evas_Coord w, h; } max; @@ -34,6 +28,7 @@ Evas_List *list; int member_max; } regions; + Evas_List *icons; Evas_List *queue; Ecore_Idler *scan_idler; @@ -41,15 +36,9 @@ Ecore_Job *scroll_job; Ecore_Job *resize_job; DIR *dir; - unsigned char no_case_sort : 1; unsigned char iconlist_changed : 1; - unsigned char show_extension : 1; - unsigned char dirs_first : 1; - unsigned char dirs_last : 1; - unsigned char single_select : 1; - unsigned char windows_multi_select_modifiers : 1; - unsigned char open_dirs_in_place : 1; - unsigned char selector_mode : 1; + + E_Fm2_Config *config; }; struct _E_Fm2_Region @@ -68,8 +57,8 @@ Evas_Object *obj, *obj_icon; int saved_x, saved_y; int saved_rel; - char *file; - char *mime; + const char *file; + const char *mime; struct stat st; unsigned char realized : 1; unsigned char selected : 1; @@ -78,7 +67,7 @@ unsigned char odd : 1; }; -static char *_e_fm2_dev_path_map(char *dev, char *path); +static const char *_e_fm2_dev_path_map(const char *dev, const char *path); static void _e_fm2_file_add(Evas_Object *obj, char *file); static void _e_fm2_file_del(Evas_Object *obj, char *file); static void _e_fm2_scan_start(Evas_Object *obj); @@ -90,6 +79,7 @@ static void _e_fm2_icons_place(Evas_Object *obj); static void _e_fm2_icons_free(Evas_Object *obj); static void _e_fm2_regions_eval(Evas_Object *obj); +static void _e_fm2_config_free(E_Fm2_Config *cfg); static E_Fm2_Icon *_e_fm2_icon_new(E_Fm2_Smart_Data *sd, char *file); static void _e_fm2_icon_free(E_Fm2_Icon *ic); @@ -189,40 +179,46 @@ if (!evas_object_type_get(obj)) return; // safety if (strcmp(evas_object_type_get(obj), "e_fm")) return; // safety -// sd->view_mode = E_FM2_VIEW_MODE_ICONS; - sd->view_mode = E_FM2_VIEW_MODE_LIST; + /* internal config for now - don't see a pont making this configurable */ sd->regions.member_max = 32; - sd->icon.w = 64; - sd->icon.h = 64; - sd->icon.list_w = 64; - sd->icon.list_h = 64; - sd->icon.fixed_w = 1; - sd->icon.fixed_h = 1; - sd->no_case_sort = 1; - sd->show_extension = 0; - sd->dirs_first = 1; - sd->dirs_last = 1; - sd->single_select = 0; - sd->windows_multi_select_modifiers = 0; - sd->open_dirs_in_place = 0; - sd->selector_mode = 0; + + if (sd->config) _e_fm2_config_free(sd->config); + sd->config = E_NEW(E_Fm2_Config, 1); + if (!sd->config) return; +// sd->config->view.mode = E_FM2_VIEW_MODE_ICONS; + sd->config->view.mode = E_FM2_VIEW_MODE_LIST; + sd->config->icon.icon.w = 64; + sd->config->icon.icon.h = 64; + sd->config->icon.list.w = 24; + sd->config->icon.list.h = 24; + sd->config->icon.fixed.w = 1; + sd->config->icon.fixed.h = 1; + sd->config->list.sort.no_case = 1; + sd->config->icon.extension.show = 0; + sd->config->list.sort.dirs.first = 1; + sd->config->list.sort.dirs.last = 1; + sd->config->selection.single = 0; + sd->config->selection.windows_modifiers = 0; + sd->config->view.open_dirs_in_place = 0; + sd->config->view.selector = 0; _e_fm2_scan_stop(obj); _e_fm2_queue_free(obj); _e_fm2_regions_free(obj); _e_fm2_icons_free(obj); - E_FREE(sd->dev); - E_FREE(sd->path); - E_FREE(sd->realpath); - if (dev) sd->dev = strdup(dev); - sd->path = strdup(path); + if (sd->dev) evas_stringshare_del(sd->dev); + if (sd->path) evas_stringshare_del(sd->path); + if (sd->realpath) evas_stringshare_del(sd->realpath); + sd->dev = sd->path = sd->realpath = NULL; + if (dev) sd->dev = evas_stringshare_add(dev); + sd->path = evas_stringshare_add(path); sd->realpath = _e_fm2_dev_path_map(sd->dev, sd->path); printf("FM: %s\n", sd->realpath); _e_fm2_scan_start(obj); } EAPI void -e_fm2_path_get(Evas_Object *obj, char **dev, char **path) +e_fm2_path_get(Evas_Object *obj, const char **dev, const char **path) { E_Fm2_Smart_Data *sd; @@ -237,74 +233,8 @@ } /* -EAPI char * -e_fm2_parent_get(Evas_Object *obj) -{ - 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 -} - -EAPI void -e_fm2_view_mode_set(Evas_Object *obj, E_Fm2_View_Mode view_mode) -{ - 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 -} - -EAPI void -e_fm2_icon_size_set(Evas_Object *obj, int w, int h, int fixed_w, int fixed_h) -{ - 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 -} - -EAPI void -e_fm2_list_size_set(Evas_Object *obj, int w, int h, int fixed_w, int fixed_h) -{ - 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 -} - -EAPI void -e_fm2_no_case_sort_set(Evas_Object *obj, int no_case_sort) -{ - 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 -} - -EAPI void -e_fm2_show_extension_set(Evas_Object *obj, int show_ext) -{ - 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 -} - -EAPI void -e_fm2_dirs_first_last_set(Evas_Object *obj, int dirs_first, int dirs_last) +EAPI int +e_fm2_parent_go(Evas_Object *obj) { E_Fm2_Smart_Data *sd; @@ -314,8 +244,8 @@ if (strcmp(evas_object_type_get(obj), "e_fm")) return; // safety } -EAPI void -e_fm2_multi_mode_set(Evas_Object *obj, int windows_multi_modifier) +EAPI int +e_fm2_has_parent_get(Evas_Object *obj) { E_Fm2_Smart_Data *sd; @@ -326,7 +256,7 @@ } EAPI void -e_fm2_open_dirs_in_place_set(Evas_Object *obj, int open_in_place) +e_fm2_config_set(Evas_Object *obj, E_Fm2_Config *cfg) { E_Fm2_Smart_Data *sd; @@ -336,8 +266,8 @@ if (strcmp(evas_object_type_get(obj), "e_fm")) return; // safety } -EAPI void -e_fm2_selector_mode_set(Evas_Object *obj, int selector_mode) +EAPI E_Fm2_Config * +e_fm2_config_get(Evas_Object *obj) { E_Fm2_Smart_Data *sd; @@ -417,14 +347,14 @@ /* local subsystem functions */ -static char * -_e_fm2_dev_path_map(char *dev, char *path) +static const char * +_e_fm2_dev_path_map(const char *dev, const char *path) { char buf[4096] = "", *s; int len; /* map a device name to a mount point/path on the os (and append path) */ - if (!dev) return strdup(path); + if (!dev) return evas_stringshare_add(path); /* FIXME: load mappings from config and use them first - maybe device * discovery should be done through config and not the below (except @@ -464,7 +394,7 @@ buf[len - 1] = 0; len--; } - return strdup(buf); + return evas_stringshare_add(buf); } static void @@ -798,7 +728,6 @@ { ic = l->data; - /* FIXME: place in vertical list */ ic->x = x; ic->y = y; if (sd->w > ic->min_w) @@ -827,7 +756,7 @@ /* take the icon list and find a location for them */ sd->max.w = 0; sd->max.h = 0; - switch (sd->view_mode) + switch (sd->config->view.mode) { case E_FM2_VIEW_MODE_ICONS: _e_fm2_icons_place_icons(sd); @@ -894,6 +823,15 @@ evas_event_thaw(evas_object_evas_get(obj)); } +static void +_e_fm2_config_free(E_Fm2_Config *cfg) +{ + if (cfg->theme.background) evas_stringshare_del(cfg->theme.background); + if (cfg->theme.frame) evas_stringshare_del(cfg->theme.frame); + if (cfg->theme.icons) evas_stringshare_del(cfg->theme.icons); + free(cfg); +} + /**************************/ static E_Fm2_Icon * @@ -913,9 +851,9 @@ return NULL; } ic->sd = sd; - ic->file = strdup(file); + ic->file = evas_stringshare_add(file); /* FIXME: have many icon size policies. fixed, max, auto-calc etc. */ - switch (sd->view_mode) + switch (sd->config->view.mode) { case E_FM2_VIEW_MODE_ICONS: case E_FM2_VIEW_MODE_GRID_ICONS: @@ -938,7 +876,7 @@ * fileman/scrollframe * */ - if ((!sd->icon.fixed_w) || (!sd->icon.fixed_h)) + if ((!sd->config->icon.fixed.w) || (!sd->config->icon.fixed.h)) { obj = edje_object_add(evas_object_evas_get(sd->obj)); e_theme_edje_object_set(obj, "base/theme/fileman", @@ -947,15 +885,15 @@ edje_object_size_min_calc(obj, &mw, &mh); evas_object_del(obj); } - if (sd->icon.fixed_w) ic->w = sd->icon.w; - if (sd->icon.fixed_h) ic->h = sd->icon.h; + if (sd->config->icon.fixed.w) ic->w = sd->config->icon.icon.w; + if (sd->config->icon.fixed.h) ic->h = sd->config->icon.icon.h; ic->min_w = mw; ic->min_h = mh; break; case E_FM2_VIEW_MODE_LIST: { obj = edje_object_add(evas_object_evas_get(sd->obj)); - if (sd->icon.fixed_w) + if (sd->config->icon.fixed.w) e_theme_edje_object_set(obj, "base/theme/fileman", "fileman/list/fixed"); else @@ -963,8 +901,8 @@ "fileman/list/variable"); _e_fm2_icon_label_set(ic, obj); obj2 = evas_object_rectangle_add(evas_object_evas_get(sd->obj)); - edje_extern_object_min_size_set(obj2, sd->icon.list_w, sd->icon.list_h); - edje_extern_object_max_size_set(obj2, sd->icon.list_w, sd->icon.list_h); + edje_extern_object_min_size_set(obj2, sd->config->icon.list.w, sd->config->icon.list.h); + edje_extern_object_max_size_set(obj2, sd->config->icon.list.w, sd->config->icon.list.h); edje_object_part_swallow(obj, "icon_swallow", obj2); edje_object_size_min_calc(obj, &mw, &mh); evas_object_del(obj2); @@ -987,7 +925,7 @@ { /* free icon, object data etc. etc. */ _e_fm2_icon_unrealize(ic); - E_FREE(ic->file); + if (ic->file) evas_stringshare_del(ic->file); free(ic); } @@ -1003,9 +941,9 @@ evas_object_smart_member_add(ic->obj, ic->sd->obj); /* FIXME: this is currently a hack just to get a display working - go back * and do proper icon stuff later */ - if (ic->sd->view_mode == E_FM2_VIEW_MODE_LIST) + if (ic->sd->config->view.mode == E_FM2_VIEW_MODE_LIST) { - if (ic->sd->icon.fixed_w) + if (ic->sd->config->icon.fixed.w) { if (ic->odd) e_theme_edje_object_set(ic->obj, "base/theme/widgets", @@ -1087,7 +1025,7 @@ char buf[4096], *p; int len; - if (ic->sd->show_extension) + if (ic->sd->config->icon.extension.show) edje_object_part_text_set(obj, "label", ic->file); else { @@ -1310,7 +1248,7 @@ } else if (ev->button == 1) { - if (ic->sd->windows_multi_select_modifiers) + if (ic->sd->config->selection.windows_modifiers) { if (evas_key_modifier_is_set(ev->modifiers, "Shift")) range_sel = 1; @@ -1324,7 +1262,7 @@ else if (evas_key_modifier_is_set(ev->modifiers, "Shift")) multi_sel = 1; } - if (ic->sd->single_select) + if (ic->sd->config->selection.single) { multi_sel = 0; range_sel = 0; @@ -1448,7 +1386,7 @@ sd->resize_job = NULL; evas_event_freeze(evas_object_evas_get(sd->obj)); edje_freeze(); - switch (sd->view_mode) + switch (sd->config->view.mode) { case E_FM2_VIEW_MODE_ICONS: _e_fm2_regions_free(sd->obj); @@ -1497,7 +1435,7 @@ ic1 = data1; ic2 = data2; - if (ic1->sd->dirs_last) + if (ic1->sd->config->list.sort.dirs.last) { if ((S_ISDIR(ic1->st.st_mode)) != (S_ISDIR(ic2->st.st_mode))) { @@ -1505,7 +1443,7 @@ else return 1; } } - else if (ic1->sd->dirs_first) + else if (ic1->sd->config->list.sort.dirs.first) { if ((S_ISDIR(ic1->st.st_mode)) != (S_ISDIR(ic2->st.st_mode))) { @@ -1513,7 +1451,7 @@ else return -1; } } - if (ic1->sd->no_case_sort) + if (ic1->sd->config->list.sort.no_case) { char buf1[4096], buf2[4096], *p; @@ -1655,9 +1593,11 @@ _e_fm2_icons_free(obj); if (sd->scroll_job) ecore_job_del(sd->scroll_job); if (sd->resize_job) ecore_job_del(sd->resize_job); - E_FREE(sd->dev); - E_FREE(sd->path); - E_FREE(sd->realpath); + if (sd->dev) evas_stringshare_del(sd->dev); + if (sd->path) evas_stringshare_del(sd->path); + if (sd->realpath) evas_stringshare_del(sd->realpath); + sd->dev = sd->path = sd->realpath = NULL; + if (sd->config) _e_fm2_config_free(sd->config); evas_object_del(sd->clip); free(sd); =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_fm.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- e_fm.h 15 Jul 2006 21:39:15 -0000 1.3 +++ e_fm.h 17 Jul 2006 10:31:50 -0000 1.4 @@ -15,15 +15,75 @@ E_FM2_VIEW_MODE_LIST /* vertical fileselector list */ } E_Fm2_View_Mode; +typedef struct _E_Fm2_Config E_Fm2_Config; + #else #ifndef E_FM_H #define E_FM_H +struct _E_Fm2_Config +{ + /* general view mode */ + struct { + E_Fm2_View_Mode mode; + unsigned char open_dirs_in_place; + unsigned char selector; + } view; + /* display of icons */ + struct { + struct { + int w, h; + } icon; + struct { + int w, h; + } list; + struct { + unsigned char w; + unsigned char h; + } fixed; + struct { + unsigned char show; + } extension; + } icon; + /* how to sort files */ + struct { + struct { + unsigned char no_case; + struct { + unsigned char first; + unsigned char last; + } dirs; + } sort; + } list; + /* control how you can select files */ + struct { + unsigned char single; + unsigned char windows_modifiers; + } selection; + /* the background - if any, and how to handle it */ + /* FIXME: not implemented yet */ + struct { + char *background; + char *frame; + char *icons; + unsigned char fixed; + } theme; + /* used internally only - used to save to disk only and laod from disk */ + /* FIXME: not implemented yet */ + struct { + int x, y, w, h; + struct { + int w, h; + } res; + int screen; + } geometry; +}; + 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); +EAPI void e_fm2_path_get(Evas_Object *obj, const char **dev, const char **path); EAPI void e_fm2_pan_set(Evas_Object *obj, Evas_Coord x, Evas_Coord y); EAPI void e_fm2_pan_get(Evas_Object *obj, Evas_Coord *x, Evas_Coord *y); ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs