From f5f86a9faec043877dda3137eea8567d3922d96c Mon Sep 17 00:00:00 2001 From: Christopher Michael Date: Fri, 3 Nov 2006 00:36:40 +0000 Subject: [PATCH] Added start of a mime config dialog. Still working on it... SVN revision: 26908 --- src/bin/Makefile.am | 2 + src/bin/e_configure.c | 1 + src/bin/e_includes.h | 1 + src/bin/e_int_config_mime.c | 177 ++++++++++++++++++++++++++++++++++++ src/bin/e_int_config_mime.h | 9 ++ 5 files changed, 190 insertions(+) create mode 100644 src/bin/e_int_config_mime.c create mode 100644 src/bin/e_int_config_mime.h diff --git a/src/bin/Makefile.am b/src/bin/Makefile.am index c9eb7b6da..5e7f6302c 100644 --- a/src/bin/Makefile.am +++ b/src/bin/Makefile.am @@ -133,6 +133,7 @@ e_int_config_exebuf.h \ e_int_config_apps.h \ e_int_config_cfgdialogs.h \ e_int_config_color_classes.h \ +e_int_config_mime.h \ e_deskpreview.h \ e_exebuf.h \ e_desklock.h \ @@ -284,6 +285,7 @@ e_int_config_apps.c \ e_int_config_cfgdialogs.c \ e_int_config_intl.c \ e_int_config_color_classes.c \ +e_int_config_mime.c \ e_deskpreview.c \ e_exebuf.c \ e_desklock.c \ diff --git a/src/bin/e_configure.c b/src/bin/e_configure.c index 9ccbca578..87fcd2760 100644 --- a/src/bin/e_configure.c +++ b/src/bin/e_configure.c @@ -123,6 +123,7 @@ e_configure_show(E_Container *con) e_configure_standard_item_add(eco, "enlightenment/window_manipulation", _("Window Manipulation"), e_int_config_window_manipulation); e_configure_standard_item_add(eco, "enlightenment/run", _("Run Command"), e_int_config_exebuf); e_configure_standard_item_add(eco, "enlightenment/directories", _("Search Directories"), e_int_config_paths); + //e_configure_standard_item_add(eco, "enlightenment/e", _("Mime Types"), e_int_config_mime); e_configure_header_item_add(eco, "enlightenment/extensions", _("Extensions")); e_configure_standard_item_add(eco, "enlightenment/modules", _("Modules"), e_int_config_modules); diff --git a/src/bin/e_includes.h b/src/bin/e_includes.h index 53d43bdfe..6b98edd81 100644 --- a/src/bin/e_includes.h +++ b/src/bin/e_includes.h @@ -106,6 +106,7 @@ #include "e_int_config_cfgdialogs.h" #include "e_int_config_intl.h" #include "e_int_config_color_classes.h" +#include "e_int_config_mime.h" #include "e_deskpreview.h" #include "e_exebuf.h" #include "e_desklock.h" diff --git a/src/bin/e_int_config_mime.c b/src/bin/e_int_config_mime.c new file mode 100644 index 000000000..b61a8f4ce --- /dev/null +++ b/src/bin/e_int_config_mime.c @@ -0,0 +1,177 @@ +#include "e.h" + +static void *_create_data (E_Config_Dialog *cfd); +static void _free_data (E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata); +static int _basic_apply (E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata); +static Evas_Object *_basic_create (E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata); +static void _fill_list (E_Config_Dialog_Data *cfdata); +static void _cb_add (void *data, void *data2); +static void _cb_del (void *data, void *data2); +static void _cb_config (void *data, void *data2); +static void _list_cb_sel (void *data); + +struct _E_Config_Dialog_Data +{ + Evas_List *mimes; + struct + { + Evas_Object *list; + Evas_Object *add, *del, *config; + } gui; +}; + +EAPI E_Config_Dialog * +e_int_config_mime(E_Container *con) +{ + E_Config_Dialog *cfd; + E_Config_Dialog_View *v; + + if (e_config_dialog_find("E", "_config_mime_dialog")) return NULL; + + v = E_NEW(E_Config_Dialog_View, 1); + v->create_cfdata = _create_data; + v->free_cfdata = _free_data; + v->basic.apply_cfdata = _basic_apply; + v->basic.create_widgets = _basic_create; + + cfd = e_config_dialog_new(con, _("Mime Types"), "E", "_config_mime_dialog", + "enlightenment/e", 0, v, NULL); + return cfd; +} + +static void +_fill_data(E_Config_Dialog_Data *cfdata) +{ + Evas_List *l; + + for (l = e_config->mime_icons; l; l = l->next) + { + E_Config_Mime_Icon *mi, *mi2; + + mi = l->data; + if (!mi) continue; + mi2 = E_NEW(E_Config_Mime_Icon, 1); + mi2->mime = evas_stringshare_add(mi->mime); + mi2->icon = evas_stringshare_add(mi->icon); + cfdata->mimes = evas_list_append(cfdata->mimes, mi2); + } +} + +static void * +_create_data(E_Config_Dialog *cfd) +{ + E_Config_Dialog_Data *cfdata; + + cfdata = E_NEW(E_Config_Dialog_Data, 1); + _fill_data(cfdata); + return cfdata; +} + +static void +_free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) +{ + while (cfdata->mimes) + { + E_Config_Mime_Icon *mi; + + mi = cfdata->mimes->data; + if (!mi) continue; + if (mi->mime) + evas_stringshare_del(mi->mime); + if (mi->icon) + evas_stringshare_del(mi->icon); + E_FREE(mi); + + cfdata->mimes = evas_list_remove_list(cfdata->mimes, cfdata->mimes); + } + + E_FREE(cfdata); +} + +static int +_basic_apply(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) +{ + return 1; +} + +static Evas_Object * +_basic_create(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata) +{ + Evas_Object *o, *of, *ol; + Evas_Object *ot, *ob; + + o = e_widget_list_add(evas, 0, 1); + of = e_widget_framelist_add(evas, _("Mime Types"), 0); + ol = e_widget_ilist_add(evas, 16, 16, NULL); + cfdata->gui.list = ol; + _fill_list(cfdata); + e_widget_framelist_object_append(of, ol); + e_widget_list_object_append(o, of, 1, 1, 0.5); + + ot = e_widget_table_add(evas, 0); + ob = e_widget_button_add(evas, _("Add"), "widget/add", _cb_add, cfdata, NULL); + cfdata->gui.add = ob; + e_widget_table_object_append(ot, ob, 0, 0, 1, 1, 1, 1, 1, 0); + ob = e_widget_button_add(evas, _("Delete"), "widget/del", _cb_del, cfdata, NULL); + cfdata->gui.del = ob; + e_widget_table_object_append(ot, ob, 0, 1, 1, 1, 1, 1, 1, 0); + ob = e_widget_button_add(evas, _("Configure"), "widget/config", _cb_config, cfdata, NULL); + cfdata->gui.config = ob; + e_widget_table_object_append(ot, ob, 0, 2, 1, 1, 1, 1, 1, 0); + + e_widget_disabled_set(cfdata->gui.del, 1); + e_widget_disabled_set(cfdata->gui.config, 1); + + e_widget_list_object_append(o, ot, 1, 1, 0.0); + return o; +} + +static void +_fill_list(E_Config_Dialog_Data *cfdata) +{ + Evas_List *l; + Evas_Coord w, h; + + e_widget_ilist_clear(cfdata->gui.list); + for (l = cfdata->mimes; l; l = l->next) + { + E_Config_Mime_Icon *mi; + + mi = l->data; + if (!mi) continue; + e_widget_ilist_append(cfdata->gui.list, NULL, mi->mime, _list_cb_sel, cfdata, NULL); + } + e_widget_ilist_go(cfdata->gui.list); + e_widget_min_size_get(cfdata->gui.list, &w, &h); + e_widget_min_size_set(cfdata->gui.list, w, 250); +} + +static void +_cb_add(void *data, void *data2) +{ + +} + +static void +_cb_del(void *data, void *data2) +{ + +} + +static void +_cb_config(void *data, void *data2) +{ + +} + +static void +_list_cb_sel(void *data) +{ + E_Config_Dialog_Data *cfdata; + + cfdata = data; + if (!cfdata) return; + + e_widget_disabled_set(cfdata->gui.del, 0); + e_widget_disabled_set(cfdata->gui.config, 0); +} diff --git a/src/bin/e_int_config_mime.h b/src/bin/e_int_config_mime.h new file mode 100644 index 000000000..718b9adb9 --- /dev/null +++ b/src/bin/e_int_config_mime.h @@ -0,0 +1,9 @@ +#ifdef E_TYPEDEFS +#else +#ifndef E_INT_CONFIG_MIME_H +#define E_INT_CONFIG_MIME_H + +EAPI E_Config_Dialog *e_int_config_mime(E_Container *con); + +#endif +#endif