Enlightenment CVS committal Author : raster Project : e17 Module : apps/e
Dir : e17/apps/e/src/bin Modified Files: e_fwin.c Log Message: working on fwin open. =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_fwin.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -3 -r1.6 -r1.7 --- e_fwin.c 23 Oct 2006 13:49:06 -0000 1.6 +++ e_fwin.c 23 Oct 2006 15:40:43 -0000 1.7 @@ -19,6 +19,8 @@ static void _e_fwin_parent(void *data, E_Menu *m, E_Menu_Item *mi); static void _e_fwin_file_open(E_Fwin *fwin, const char *file, const char *mime); static void _e_fwin_file_open_app(E_Fwin *fwin, E_App *a, const char *file); + +static void _e_fwin_cb_ilist_change(void *data, Evas_Object *obj); static void _e_fwin_file_open_dialog(E_Fwin *fwin, Evas_List *files); /* local subsystem globals */ @@ -190,35 +192,12 @@ _e_fwin_selected(void *data, Evas_Object *obj, void *event_info) { E_Fwin *fwin; - Evas_List *selected, *l; - E_Fm2_Icon_Info *ici; - char buf[4096]; + Evas_List *selected; fwin = data; selected = e_fm2_selected_list_get(fwin->fm_obj); if (!selected) return; - for (l = selected; l; l = l->next) - { - ici = l->data; - if ((ici->link) && (ici->mount)) - e_fwin_new(fwin->win->container, ici->link, "/"); - else if (ici->link) - { - if (S_ISDIR(ici->statinfo.st_mode)) - e_fwin_new(fwin->win->container, NULL, ici->link); - else - _e_fwin_file_open(fwin, ici->link, e_fm_mime_filename_get(ici->link)); - } - else - { - snprintf(buf, sizeof(buf), "%s/%s", - e_fm2_real_path_get(fwin->fm_obj), ici->file); - if (S_ISDIR(ici->statinfo.st_mode)) - e_fwin_new(fwin->win->container, NULL, buf); - else - _e_fwin_file_open(fwin, buf, ici->mime); - } - } + _e_fwin_file_open_dialog(fwin, selected); evas_list_free(selected); } @@ -251,11 +230,6 @@ } static void -_e_fwin_cb_ilist_change(void *data, Evas_Object *obj) -{ -} - -static void _e_fwin_file_open(E_Fwin *fwin, const char *file, const char *mime) { Evas_List *apps, *l; @@ -358,23 +332,132 @@ e_zone_exec(fwin->win->border->zone, buf); } +typedef struct _E_Fwin_Apps_Dialog E_Fwin_Apps_Dialog; + +struct _E_Fwin_Apps_Dialog +{ + E_Dialog *dia; + E_Fwin *fwin; + char *app1, *app2; + Evas_Object *o_ilist, *o_fm; +}; + +static void +_e_fwin_cb_ilist_change(void *data, Evas_Object *obj) +{ +} + +static Evas_Bool +_e_fwin_cb_hash_foreach(Evas_Hash *hash, const char *key, void *data, void *fdata) +{ + Evas_List **mlist; + + mlist = fdata; + *mlist = evas_list_append(*mlist, key); + return 1; +} + static void _e_fwin_file_open_dialog(E_Fwin *fwin, Evas_List *files) { E_Dialog *dia; Evas_Coord mw, mh; - Evas_Object *o, *ocon, *of, *oi; + Evas_Object *o, *ocon, *of, *oi, *mt; Evas *evas; Evas_List *l, *ll; - Evas_List *apps; + Evas_List *apps, *al; E_App *a; + E_Fwin_Apps_Dialog *fad; + E_Fm2_Config fmc; + E_Fm2_Icon_Info *ici; + char buf[4096]; + int need_dia = 0; + Evas_Hash *mimes = NULL; + Evas_List *mlist = NULL; + + for (l = files; l; l = l->next) + { + ici = l->data; + if ((ici->link) && (ici->mount)) + e_fwin_new(fwin->win->container, ici->link, "/"); + else if (ici->link) + { + if (S_ISDIR(ici->statinfo.st_mode)) + e_fwin_new(fwin->win->container, NULL, ici->link); + else + need_dia = 1; +// _e_fwin_file_open(fwin, ici->link, e_fm_mime_filename_get(ici->link)); + } + else + { + snprintf(buf, sizeof(buf), "%s/%s", + e_fm2_real_path_get(fwin->fm_obj), ici->file); + if (S_ISDIR(ici->statinfo.st_mode)) + e_fwin_new(fwin->win->container, NULL, buf); + else + need_dia = 1; +// _e_fwin_file_open(fwin, buf, ici->mime); + } + } + if (!need_dia) return; + /* FIXME: display dialog. left side is all apps that say they handle + * the mime type(s) of the file(s) in the list. and the right side + * should have an fm2 view of ALL apps + */ + /* 1. build hash of mimetypes */ + for (l = files; l; l = l->next) + { + ici = l->data; + if (!((ici->link) && (ici->mount))) + { + if (ici->link) + { + if (!S_ISDIR(ici->statinfo.st_mode)) + mimes = evas_hash_direct_add(mimes, e_fm_mime_filename_get(ici->link), (void *)1); + } + else + { + snprintf(buf, sizeof(buf), "%s/%s", + e_fm2_real_path_get(fwin->fm_obj), ici->file); + if (!S_ISDIR(ici->statinfo.st_mode)) + mimes = evas_hash_direct_add(mimes, ici->mime, (void *)1); + } + } + } + /* 2. for each mimetype list apps that handle it */ + evas_hash_foreach(mimes, _e_fwin_cb_hash_foreach, &mlist); + evas_hash_free(mimes); + /* 3. add apps to a list so its a unique app list */ + apps = NULL; + if (mlist) + { + for (l = mlist; l; l = l->next) + { + al = e_app_mime_list(l->data); + if (al) + { + for (ll = al; ll; ll = ll->next) + apps = evas_list_append(apps, ll->data); + evas_list_free(al); + } + } + evas_list_free(mlist); + } + + fad = E_NEW(E_Fwin_Apps_Dialog, 1); + /* FIXME: add delete callback to dia obj to cleanup */ dia = e_dialog_new(fwin->win->border->zone->container, "E", "_fwin_open_apps"); e_dialog_title_set(dia, _("Open with...")); e_dialog_border_icon_set(dia, "enlightenment/applications"); + /* FIXME: add real callbacks */ e_dialog_button_add(dia, _("Open"), "enlightenment/open", NULL, NULL); e_dialog_button_add(dia, _("Close"), "enlightenment/close", NULL, NULL); + + fad->dia = fad; + fad->fwin = fwin; + dia->data = fad; evas = e_win_evas_get(dia->win); @@ -382,10 +465,8 @@ ocon = o; of = e_widget_framelist_add(evas, _("Specific Applications"), 0); - /* FIXME: dialog needs data attched to store what u select */ o = e_widget_ilist_add(evas, 24, 24, NULL); -// apps = e_app_mime_list(e_fm_mime_filename_get(file)); - apps = NULL; + fad->o_ilist = o; if (apps) { for (l = apps; l; l = l->next) @@ -393,7 +474,7 @@ a = l->data; oi = e_app_icon_add(evas, a); e_widget_ilist_append(o, oi, a->name, - _e_fwin_cb_ilist_change, NULL, + _e_fwin_cb_ilist_change, fad, ecore_file_get_file(a->path)); } evas_list_free(apps); @@ -404,17 +485,46 @@ e_widget_list_object_append(ocon, of, 1, 1, 0.5); of = e_widget_framelist_add(evas, _("All Applications"), 0); - /* FIXME: fm2 view etc. etc. */ - o = e_widget_ilist_add(evas, 24, 24, NULL); - e_widget_ilist_go(o); + mt = e_fm2_add(evas); + fad->o_fm = mt; + memset(&fmc, 0, sizeof(E_Fm2_Config)); + fmc.view.mode = E_FM2_VIEW_MODE_LIST; + fmc.view.open_dirs_in_place = 0; + fmc.view.selector = 1; + fmc.view.single_click = 0; + fmc.view.no_subdir_jump = 1; + fmc.view.extra_file_source = NULL; + fmc.icon.list.w = 24; + fmc.icon.list.h = 24; + fmc.icon.fixed.w = 1; + fmc.icon.fixed.h = 1; + fmc.icon.extension.show = 1; + fmc.icon.key_hint = NULL; + fmc.list.sort.no_case = 1; + fmc.list.sort.dirs.first = 1; + fmc.list.sort.dirs.last = 0; + fmc.selection.single = 1; + fmc.selection.windows_modifiers = 0; + e_fm2_config_set(mt, &fmc); + /* FIXME: add real callbacks */ +// evas_object_smart_callback_add(mt, "selection_change", +// _cb_files_selection_change, fad); +// evas_object_smart_callback_add(mt, "changed", +// _cb_files_changed, fad); + snprintf(buf, sizeof(buf), "%s/.e/e/applications/all", e_user_homedir_get()); + e_fm2_path_set(mt, buf, "/"); + o = e_widget_scrollframe_pan_add(evas, mt, + e_fm2_pan_set, + e_fm2_pan_get, + e_fm2_pan_max_get, + e_fm2_pan_child_size_get); e_widget_min_size_set(o, 160, 240); e_widget_framelist_object_append(of, o); e_widget_list_object_append(ocon, of, 1, 1, 0.5); - /* FIXME: add rest of widgets */ - e_widget_min_size_get(ocon, &mw, &mh); e_dialog_content_set(dia, ocon, mw, mh); + /* FIXME: store fad in fwin (on fwin delete close fad. on fad close, delete from fwin) */ e_dialog_show(dia); } ------------------------------------------------------------------------- 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