Illume-Home gets a config dialog.

SVN revision: 43765
This commit is contained in:
Christopher Michael 2009-11-18 03:04:15 +00:00
parent ac8807406c
commit 8cd9b983d1
5 changed files with 318 additions and 48 deletions

View File

@ -21,7 +21,9 @@ pkg_LTLIBRARIES = module.la
module_la_SOURCES = e_mod_main.c \
e_mod_main.h \
e_busycover.c \
e_busycover.h
e_busycover.h \
e_mod_config.c \
e_mod_config.h
module_la_LIBADD = @e_libs@ @dlopen_libs@
module_la_LDFLAGS = -module -avoid-version

View File

@ -0,0 +1,201 @@
#include "e.h"
#include "e_mod_main.h"
#include "e_mod_config.h"
/* local function prototypes */
static void *_il_home_config_create(E_Config_Dialog *cfd);
static void _il_home_config_fill(E_Config_Dialog_Data *cfdata);
static void _il_home_config_free(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
static Evas_Object *_il_home_config_ui(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata);
static void _il_home_config_changed(void *data, Evas_Object *obj, void *event);
static void _il_home_config_click_changed(void *data, Evas_Object *obj, void *event);
static int _il_home_config_change_timeout(void *data);
EAPI Il_Home_Config *il_home_cfg = NULL;
static E_Config_DD *conf_edd = NULL;
Ecore_Timer *_il_home_config_change_timer = NULL;
Evas_Object *delay_label, *delay_slider;
/* public functions */
EAPI int
il_home_config_init(E_Module *m)
{
conf_edd = E_CONFIG_DD_NEW("Illume-Home_Cfg", Il_Home_Config);
#undef T
#undef D
#define T Il_Home_Config
#define D conf_edd
E_CONFIG_VAL(D, T, version, INT);
E_CONFIG_VAL(D, T, icon_size, INT);
E_CONFIG_VAL(D, T, single_click, INT);
E_CONFIG_VAL(D, T, single_click_delay, INT);
il_home_cfg = e_config_domain_load("module.illume-home", conf_edd);
if ((il_home_cfg) &&
((il_home_cfg->version >> 16) < IL_CONFIG_MAJ))
{
E_FREE(il_home_cfg);
il_home_cfg = NULL;
}
if (!il_home_cfg)
{
il_home_cfg = E_NEW(Il_Home_Config, 1);
il_home_cfg->version = 0;
il_home_cfg->icon_size = 120;
il_home_cfg->single_click = 1;
il_home_cfg->single_click_delay = 150;
}
if (il_home_cfg)
{
/* Add new config variables here */
/* if ((il_home_cfg->version & 0xffff) < 1) */
il_home_cfg->version = (IL_CONFIG_MAJ << 16) | IL_CONFIG_MIN;
}
il_home_cfg->mod_dir = eina_stringshare_add(m->dir);
e_configure_registry_category_add("illume", 0, _("Illume"), NULL,
"enlightenment/display");
e_configure_registry_generic_item_add("illume/home", 0, _("Home"),
NULL, "enlightenment/launcher",
il_home_config_show);
return 1;
}
EAPI int
il_home_config_shutdown(void)
{
il_home_cfg->cfd = NULL;
e_configure_registry_item_del("illume/home");
e_configure_registry_category_del("illume");
if (il_home_cfg->mod_dir) eina_stringshare_del(il_home_cfg->mod_dir);
E_FREE(il_home_cfg);
il_home_cfg = NULL;
E_CONFIG_DD_FREE(conf_edd);
return 1;
}
EAPI int
il_home_config_save(void)
{
e_config_domain_save("module.illume-home", conf_edd, il_home_cfg);
return 1;
}
EAPI void
il_home_config_show(E_Container *con, const char *params)
{
E_Config_Dialog *cfd;
E_Config_Dialog_View *v = NULL;
if (e_config_dialog_find("E", "_config_illume_home_settings")) return;
v = E_NEW(E_Config_Dialog_View, 1);
v->create_cfdata = _il_home_config_create;
v->free_cfdata = _il_home_config_free;
v->basic.create_widgets = _il_home_config_ui;
v->basic_only = 1;
v->normal_win = 1;
v->scroll = 1;
cfd = e_config_dialog_new(con, "Home Settings", "E",
"_config_illume_home_settings",
"enlightenment/launcher_settings", 0, v, NULL);
e_dialog_resizable_set(cfd->dia, 1);
il_home_cfg->cfd = cfd;
}
/* local function prototypes */
static void *
_il_home_config_create(E_Config_Dialog *cfd)
{
return NULL;
}
static void
_il_home_config_free(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
{
il_home_cfg->cfd = NULL;
/* win cfg update */
}
static Evas_Object *
_il_home_config_ui(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata)
{
Evas_Object *list, *of, *o;
E_Radio_Group *rg;
list = e_widget_list_add(evas, 0, 0);
of = e_widget_framelist_add(evas, _("Icon Size"), 0);
rg = e_widget_radio_group_new(&(il_home_cfg->icon_size));
o = e_widget_radio_add(evas, _("Small"), 60, rg);
e_widget_framelist_object_append(of, o);
evas_object_smart_callback_add(o, "changed", _il_home_config_changed, NULL);
o = e_widget_radio_add(evas, _("Medium"), 80, rg);
e_widget_framelist_object_append(of, o);
evas_object_smart_callback_add(o, "changed", _il_home_config_changed, NULL);
o = e_widget_radio_add(evas, _("Large"), 120, rg);
e_widget_framelist_object_append(of, o);
evas_object_smart_callback_add(o, "changed", _il_home_config_changed, NULL);
o = e_widget_radio_add(evas, _("Very Large"), 160, rg);
e_widget_framelist_object_append(of, o);
evas_object_smart_callback_add(o, "changed", _il_home_config_changed, NULL);
o = e_widget_radio_add(evas, _("Massive"), 240, rg);
e_widget_framelist_object_append(of, o);
evas_object_smart_callback_add(o, "changed", _il_home_config_changed, NULL);
e_widget_list_object_append(list, of, 1, 0, 0.0);
of = e_widget_framelist_add(evas, _("Launch Action"), 0);
o = e_widget_check_add(evas, _("Single press"),
&(il_home_cfg->single_click));
e_widget_framelist_object_append(of, o);
evas_object_smart_callback_add(o, "changed",
_il_home_config_click_changed, NULL);
o = e_widget_label_add(evas, _("Press Delay"));
delay_label = o;
e_widget_disabled_set(o, !(il_home_cfg->single_click));
e_widget_framelist_object_append(of, o);
o = e_widget_slider_add(evas, 1, 0, "%1.0f ms", 0, 350, 1, 0, NULL,
&(il_home_cfg->single_click_delay), 150);
delay_slider = o;
/* Slider does not emit a changed signal */
// evas_object_smart_callback_add(o, "changed",
// _il_home_config_changed, NULL);
e_widget_disabled_set(o, !(il_home_cfg->single_click));
e_widget_framelist_object_append(of, o);
e_widget_list_object_append(list, of, 1, 0, 0.0);
return list;
}
static void
_il_home_config_changed(void *data, Evas_Object *obj, void *event)
{
printf("Il Home Config Changed\n");
if (_il_home_config_change_timer)
ecore_timer_del(_il_home_config_change_timer);
_il_home_config_change_timer =
ecore_timer_add(0.5, _il_home_config_change_timeout, data);
}
static void
_il_home_config_click_changed(void *data, Evas_Object *obj, void *event)
{
e_widget_disabled_set(delay_label, !il_home_cfg->single_click);
e_widget_disabled_set(delay_slider, !il_home_cfg->single_click);
/* launcher change */
}
static int
_il_home_config_change_timeout(void *data)
{
/* win cfg update */
e_config_save_queue();
_il_home_config_change_timer = NULL;
return 0;
}

View File

@ -0,0 +1,27 @@
#ifndef E_MOD_CONFIG_H
#define E_MOD_CONFIG_H
#define IL_CONFIG_MIN 0
#define IL_CONFIG_MAJ 0
typedef struct _Il_Home_Config Il_Home_Config;
struct _Il_Home_Config
{
int version;
int mode, icon_size;
int single_click, single_click_delay;
// Not User Configurable. Placeholders
const char *mod_dir;
E_Config_Dialog *cfd;
};
EAPI int il_home_config_init(E_Module *m);
EAPI int il_home_config_shutdown(void);
EAPI int il_home_config_save(void);
EAPI void il_home_config_show(E_Container *con, const char *params);
extern EAPI Il_Home_Config *il_home_cfg;
#endif

View File

@ -1,9 +1,13 @@
#include "e.h"
#include "e_mod_main.h"
#include "e_mod_config.h"
#include "e_busycover.h"
#define IL_HOME_WIN_TYPE 0xE0b0102f
/* local structures */
typedef struct _Instance Instance;
typedef struct _Il_Home_Win Il_Home_Win;
struct _Instance
{
@ -12,6 +16,13 @@ struct _Instance
E_Menu *menu;
Il_Home_Win *hwin;
};
struct _Il_Home_Win
{
E_Object e_obj_inherit;
E_Win *win;
Evas_Object *o_bg, *o_sf, *o_fm;
};
/* local function prototypes */
static E_Gadcon_Client *_gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style);
@ -23,7 +34,7 @@ static const char *_gc_id_new(E_Gadcon_Client_Class *cc);
static void _il_home_btn_cb_click(void *data, void *data2);
static void _il_home_btn_cb_mouse_down(void *data, Evas *evas, Evas_Object *obj, void *event);
static void _il_home_menu_cb_post(void *data, E_Menu *mn);
static void _il_home_win_new(Il_Home_Win *hwin);
static void _il_home_win_new(Instance *inst);
static void _il_home_win_cb_free(Il_Home_Win *hwin);
static void _il_home_win_cb_delete(E_Win *win);
static void _il_home_win_cb_resize(E_Win *win);
@ -33,10 +44,11 @@ static void _il_home_pan_max_get(Evas_Object *obj, Evas_Coord *x, Evas_Coord *y)
static void _il_home_pan_child_size_get(Evas_Object *obj, Evas_Coord *w, Evas_Coord *h);
static void _il_home_cb_selected(void *data, Evas_Object *obj, void *event);
static void _il_home_desktop_run(Efreet_Desktop *desktop);
static void _il_home_apps_populate(Il_Home_Win *hwin);
static void _il_home_apps_unpopulate(Il_Home_Win *hwin);
/* local variables */
static Eina_List *instances = NULL;
static E_Module *mod = NULL;
static E_Busycover *busycover = NULL;
static const E_Gadcon_Client_Class _gc_class =
@ -55,12 +67,13 @@ e_modapi_init(E_Module *m)
{
E_Zone *zone;
if (!il_home_config_init(m)) return NULL;
zone = e_util_container_zone_number_get(0, 0);
e_busycover_init();
busycover = e_busycover_new(zone, m->dir);
mod = m;
e_gadcon_provider_register(&_gc_class);
return m;
}
@ -68,21 +81,23 @@ e_modapi_init(E_Module *m)
EAPI int
e_modapi_shutdown(E_Module *m)
{
e_gadcon_provider_unregister(&_gc_class);
mod = NULL;
if (busycover)
{
e_object_del(E_OBJECT(busycover));
busycover = NULL;
}
e_busycover_shutdown();
e_gadcon_provider_unregister(&_gc_class);
il_home_config_shutdown();
return 1;
}
EAPI int
e_modapi_save(E_Module *m)
{
return 1;
return il_home_config_save();
}
/* local functions */
@ -93,7 +108,8 @@ _gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style)
Evas_Object *icon;
char buff[PATH_MAX];
snprintf(buff, sizeof(buff), "%s/e-module-illume-home.edj", mod->dir);
snprintf(buff, sizeof(buff), "%s/e-module-illume-home.edj",
il_home_cfg->mod_dir);
inst = E_NEW(Instance, 1);
inst->o_btn = e_widget_button_add(gc->evas, NULL, NULL,
_il_home_btn_cb_click, inst, NULL);
@ -153,7 +169,8 @@ _gc_icon(E_Gadcon_Client_Class *cc, Evas *evas)
Evas_Object *o;
char buff[PATH_MAX];
snprintf(buff, sizeof(buff), "%s/e-module-illume-home.edj", mod->dir);
snprintf(buff, sizeof(buff), "%s/e-module-illume-home.edj",
il_home_cfg->mod_dir);
o = edje_object_add(evas);
edje_object_file_set(o, buff, "icon");
return o;
@ -175,13 +192,7 @@ _il_home_btn_cb_click(void *data, void *data2)
Instance *inst;
if (!(inst = data)) return;
if (!inst->hwin)
{
inst->hwin = E_OBJECT_ALLOC(Il_Home_Win, IL_HOME_WIN_TYPE,
_il_home_win_cb_free);
}
if (!inst->hwin) return;
_il_home_win_new(inst->hwin);
_il_home_win_new(inst);
}
static void
@ -223,32 +234,48 @@ _il_home_menu_cb_post(void *data, E_Menu *mn)
}
static void
_il_home_win_new(Il_Home_Win *hwin)
_il_home_win_new(Instance *inst)
{
Il_Home_Win *hwin;
E_Container *con;
E_Fm2_Config fmc;
char buff[PATH_MAX];
if (!hwin) return;
if (hwin->win)
if ((inst->hwin) && (inst->hwin->win))
{
e_win_show(hwin->win);
e_border_uniconify(inst->hwin->win->border);
e_border_focus_set(inst->hwin->win->border, 1, 1);
return;
}
snprintf(buff, sizeof(buff), "%s/e-module-illume-home.edj", mod->dir);
if (!inst->hwin)
{
inst->hwin = E_OBJECT_ALLOC(Il_Home_Win, IL_HOME_WIN_TYPE,
_il_home_win_cb_free);
}
hwin = inst->hwin;
if (!hwin) return;
con = e_container_current_get(e_manager_current_get());
hwin->win = e_win_new(con);
if (!hwin->win) return;
if (!hwin->win)
{
e_object_del(E_OBJECT(hwin));
inst->hwin = NULL;
return;
}
e_win_delete_callback_set(hwin->win, _il_home_win_cb_delete);
e_win_resize_callback_set(hwin->win, _il_home_win_cb_resize);
hwin->win->data = hwin;
hwin->win->data = inst;
snprintf(buff, sizeof(buff), "%s/e-module-illume-home.edj",
il_home_cfg->mod_dir);
hwin->o_bg = edje_object_add(e_win_evas_get(hwin->win));
if (!e_theme_edje_object_set(hwin->o_bg, "base/theme/modules/illume-home",
"modules/illume-home/window"))
if (!e_theme_edje_object_set(hwin->o_bg,
"base/theme/modules/illume-home",
"modules/illume-home/window"))
edje_object_file_set(hwin->o_bg, buff, "modules/illume-home/window");
evas_object_move(hwin->o_bg, 0, 0);
evas_object_resize(hwin->o_bg, hwin->win->w, hwin->win->h);
@ -267,18 +294,18 @@ _il_home_win_new(Il_Home_Win *hwin)
fmc.view.mode = E_FM2_VIEW_MODE_GRID_ICONS;
fmc.view.open_dirs_in_place = 1;
fmc.view.selector = 0;
// fmc.view.single_click = illume_cfg->launcher.single_click;
// fmc.view.single_click_delay = illume_cfg->launcher.single_click_delay;
fmc.view.single_click = il_home_cfg->single_click;
fmc.view.single_click_delay = il_home_cfg->single_click_delay;
fmc.view.no_subdir_jump = 1;
fmc.icon.extension.show = 0;
fmc.icon.icon.w = 48;
fmc.icon.icon.h = 48;
fmc.icon.fixed.w = 48;
fmc.icon.fixed.h = 48;
// fmc.icon.icon.w = illume_cfg->launcher.icon_size * e_scale / 2.0;
// fmc.icon.icon.h = illume_cfg->launcher.icon_size * e_scale / 2.0;
// fmc.icon.fixed.w = illume_cfg->launcher.icon_size * e_scale / 2.0;
// fmc.icon.fixed.h = illume_cfg->launcher.icon_size * e_scale / 2.0;
fmc.icon.icon.w = il_home_cfg->icon_size * e_scale / 2.0;
fmc.icon.icon.h = il_home_cfg->icon_size * e_scale / 2.0;
fmc.icon.fixed.w = il_home_cfg->icon_size * e_scale / 2.0;
fmc.icon.fixed.h = il_home_cfg->icon_size * e_scale / 2.0;
fmc.list.sort.no_case = 0;
fmc.list.sort.dirs.first = 1;
fmc.list.sort.dirs.last = 0;
@ -298,6 +325,9 @@ _il_home_win_new(Il_Home_Win *hwin)
evas_object_smart_callback_add(hwin->o_fm, "selected",
_il_home_cb_selected, NULL);
_il_home_apps_unpopulate(hwin);
_il_home_apps_populate(hwin);
e_win_title_set(hwin->win, _("Illume Home"));
e_win_name_class_set(hwin->win, "Illume-Home", "Home");
e_win_size_min_set(hwin->win, 24, 24);
@ -309,25 +339,35 @@ _il_home_win_new(Il_Home_Win *hwin)
static void
_il_home_win_cb_free(Il_Home_Win *hwin)
{
if (hwin->o_bg) evas_object_del(hwin->o_bg);
hwin->o_bg = NULL;
if (hwin->o_sf) evas_object_del(hwin->o_sf);
hwin->o_sf = NULL;
if (hwin->o_fm) evas_object_del(hwin->o_fm);
hwin->o_fm = NULL;
if (hwin->win) e_object_del(E_OBJECT(hwin->win));
e_object_del(E_OBJECT(hwin));
hwin->win = NULL;
}
static void
_il_home_win_cb_delete(E_Win *win)
{
Il_Home_Win *hwin;
Instance *inst;
hwin = win->data;
e_object_del(E_OBJECT(hwin));
if (!(inst = win->data)) return;
_il_home_apps_unpopulate(inst->hwin);
e_object_del(E_OBJECT(inst->hwin));
inst->hwin = NULL;
}
static void
_il_home_win_cb_resize(E_Win *win)
{
Instance *inst;
Il_Home_Win *hwin;
hwin = win->data;
if (!(inst = win->data)) return;
if (!(hwin = inst->hwin)) return;
if (hwin->o_bg)
{
if (hwin->win)
@ -456,3 +496,15 @@ _il_home_desktop_run(Efreet_Desktop *desktop)
e_busycover_push(busycover, buff, NULL);
}
}
static void
_il_home_apps_populate(Il_Home_Win *hwin)
{
}
static void
_il_home_apps_unpopulate(Il_Home_Win *hwin)
{
}

View File

@ -1,18 +1,6 @@
#ifndef E_MOD_MAIN_H
#define E_MOD_MAIN_H
typedef struct _Il_Home_Win Il_Home_Win;
#define IL_HOME_WIN_TYPE 0xE0b0102f
struct _Il_Home_Win
{
E_Object e_obj_inherit;
E_Win *win;
Evas_Object *o_bg, *o_sf, *o_fm;
};
EAPI extern E_Module_Api e_modapi;
EAPI void *e_modapi_init(E_Module *m);