- more work on eap editor (currently broken)

- fix efm (some features currently broken)
- change scrollbar so completely (currently broken)


SVN revision: 18027
This commit is contained in:
codewarrior 2005-10-27 10:19:43 +00:00 committed by codewarrior
parent 2a3f77d8f6
commit b01c9dad89
13 changed files with 965 additions and 459 deletions

View File

@ -103,7 +103,9 @@ e_icon_layout.h \
e_int_border_locks.h \
e_thumb.h \
e_int_border_remember.h \
e_eap_editor.h
e_eap_editor.h \
e_widget_iconsel.h \
e_widget_fileman.h
enlightenment_src = \
e_user.c \
@ -188,6 +190,8 @@ e_int_border_locks.c \
e_thumb.c \
e_int_border_remember.c \
e_eap_editor.c \
e_widget_iconsel.c \
e_widget_fileman.c \
$(ENLIGHTENMENTHEADERS)
enlightenment_SOURCES = \

View File

@ -1,285 +1,370 @@
#include "e.h"
typedef struct _E_App_Edit E_App_Edit;
typedef struct _E_App_Edit_CFData E_App_Edit_CFData;
struct _E_App_Edit
{
E_App *eap;
Evas_Object *img;
Evas_Object *img_widget;
E_App_Edit_CFData *cfdata;
};
struct _E_App_Edit_CFData
{
/*- BASIC -*/
char *name;
char *exe;
/*- ADVANCED -*/
char *generic;
char *comment;
char *wname;
char *wclass;
char *wtitle;
char *wrole;
char *iclass;
char *path;
int startup_notify;
int wait_exit;
/*- common -*/
char *image;
E_App_Edit *editor;
};
/* local subsystem functions */
static void _e_eap_edit_save_cb(void *data, E_Dialog *dia);
static void _e_eap_edit_cancel_cb(void *data, E_Dialog *dia);
static void _e_eap_edit_browse_cb(void *data1, void *data2);
static void _e_eap_edit_free(E_App_Edit *app);
static void _e_eap_edit_selector_cb(E_Fileman *fileman, char *file, void *data);
static void _e_eap_edit_save_cb(void *data, E_Dialog *dia);
static void _e_eap_edit_cancel_cb(void *data, E_Dialog *dia);
static void _e_eap_edit_browse_cb(void *data1, void *data2);
static void _e_eap_edit_free(E_App_Edit *app);
static void _e_eap_edit_selector_cb(E_Fileman *fileman, char *file, void *data);
static void _e_eap_edit_fill_data(E_App_Edit_CFData *cdfata);
static void *_e_eap_edit_create_data(E_Config_Dialog *cfd);
static void _e_eap_edit_free_data(E_Config_Dialog *cfd, void *data);
static int _e_eap_edit_basic_apply_data(E_Config_Dialog *cfd, void *data);
static int _e_eap_edit_advanced_apply_data(E_Config_Dialog *cfd, void *data);
static Evas_Object *_e_eap_edit_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, void *data);
static Evas_Object *_e_eap_edit_advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, void *data);
#define IFDUP(src, dst) if(src) dst = strdup(src); else dst = NULL
/* externally accessible functions */
E_App_Edit *
void
e_eap_edit_show(E_Container *con, E_App *a)
{
E_Manager *man;
E_App_Edit *app;
E_Config_Dialog *cfd;
E_Config_Dialog_View v;
E_App_Edit *editor;
Evas_Object *o, *ol;
app = E_OBJECT_ALLOC(E_App_Edit, E_EAP_EDIT_TYPE, _e_eap_edit_free);
if (!app) return NULL;
app->dia = e_dialog_new(con);
if (!app->dia)
{
free(app);
return NULL;
}
app->con = con;
e_dialog_title_set(app->dia, _("Eap Editor"));
app->evas = e_win_evas_get(app->dia->win);
app->eap = a;
if(!con)
return;
ol = e_widget_list_add(app->evas, 0, 0);
o = e_widget_table_add(app->evas, _("Eap Info"), 0);
editor = E_NEW(E_App_Edit, 1);
if (!editor) return;
IFDUP(a->name, app->data.name);
IFDUP(a->generic, app->data.generic);
IFDUP(a->comment, app->data.comment);
IFDUP(a->exe, app->data.exe);
IFDUP(a->win_name, app->data.wname);
IFDUP(a->win_class, app->data.wclass);
IFDUP(a->win_title, app->data.wtitle);
IFDUP(a->win_role, app->data.wrole);
IFDUP(a->path, app->data.path);
editor->eap = a;
if(a->path)
{
app->img = edje_object_add(app->evas);
edje_object_file_set(app->img, a->path, "icon");
}
else
{
app->img = edje_object_add(app->evas);
e_theme_edje_object_set(app->img, "base/theme/icons/enlightenment/e", "icons/enlightenment/e");
}
app->img_widget = e_widget_image_add_from_object(app->evas, app->img, 48, 48);
e_widget_table_object_append(o, app->img_widget,
0, 0, 1, 1,
1, 1, 1, 1);
e_widget_table_object_append(o, e_widget_button_add(app->evas, "Set Icon",
NULL, _e_eap_edit_browse_cb,
app, NULL),
1, 0, 1, 1,
0, 0, 0, 0);
e_widget_table_object_append(o, e_widget_label_add(app->evas, "App name"),
0, 1, 1, 1,
1, 1, 1, 1);
{
Evas_Object *entry;
entry = e_widget_entry_add(app->evas, &(app->data.name));
e_widget_min_size_set(entry, 100, 1);
e_widget_table_object_append(o, entry,
1, 1, 1, 1,
1, 1, 1, 1);
}
e_widget_table_object_append(o, e_widget_label_add(app->evas, "Generic Info"),
0, 2, 1, 1,
1, 1, 1, 1);
e_widget_table_object_append(o, e_widget_entry_add(app->evas, &(app->data.generic)),
1, 2, 1, 1,
1, 1, 1, 1);
e_widget_table_object_append(o, e_widget_label_add(app->evas, "Comment"),
0, 3, 1, 1,
1, 1, 1, 1);
e_widget_table_object_append(o, e_widget_entry_add(app->evas, &(app->data.comment)),
1, 3, 1, 1,
1, 1, 1, 1);
e_widget_table_object_append(o, e_widget_label_add(app->evas, "Executable"),
0, 4, 1, 1,
1, 1, 1, 1);
e_widget_table_object_append(o, e_widget_entry_add(app->evas, &(app->data.exe)),
1, 4, 1, 1,
1, 1, 1, 1);
e_widget_table_object_append(o, e_widget_label_add(app->evas, "Window Name"),
0, 5, 1, 1,
1, 1, 1, 1);
e_widget_table_object_append(o, e_widget_entry_add(app->evas, &(app->data.wname)),
1, 5, 1, 1,
1, 1, 1, 1);
e_widget_table_object_append(o, e_widget_label_add(app->evas, "Window Class"),
0, 6, 1, 1,
1, 1, 1, 1);
e_widget_table_object_append(o, e_widget_entry_add(app->evas, &(app->data.wclass)),
1, 6, 1, 1,
1, 1, 1, 1);
e_widget_table_object_append(o, e_widget_label_add(app->evas, "Window Title"),
0, 7, 1, 1,
1, 1, 1, 1);
e_widget_table_object_append(o, e_widget_entry_add(app->evas, &(app->data.wtitle)),
1, 7, 1, 1,
1, 1, 1, 1);
e_widget_table_object_append(o, e_widget_label_add(app->evas, "Window Role"),
0, 8, 1, 1,
1, 1, 1, 1);
e_widget_table_object_append(o, e_widget_entry_add(app->evas, &(app->data.wrole)),
1, 8, 1, 1,
1, 1, 1, 1);
e_widget_table_object_append(o, e_widget_label_add(app->evas, "Icon Class"),
0, 9, 1, 1,
1, 1, 1, 1);
e_widget_table_object_append(o, e_widget_entry_add(app->evas, &(app->data.iclass)),
1, 9, 1, 1,
1, 1, 1, 1);
e_widget_table_object_append(o, e_widget_label_add(app->evas, "Path"),
0, 10, 1, 1,
1, 1, 1, 1);
e_widget_table_object_append(o, e_widget_entry_add(app->evas, &(app->data.path)),
1, 10, 1, 1,
1, 1, 1, 1);
e_widget_table_object_append(o, e_widget_label_add(app->evas, "Startup notify"),
0, 11, 1, 1,
1, 1, 1, 1);
e_widget_table_object_append(o, e_widget_check_add(app->evas, "", &(app->data.startup_notify)),
1, 11, 1, 1,
1, 1, 1, 1);
e_widget_table_object_append(o, e_widget_label_add(app->evas, "Wait exit"),
0, 12, 1, 1,
1, 1, 1, 1);
e_widget_table_object_append(o, e_widget_check_add(app->evas, "", &(app->data.wait_exit)),
1, 12, 1, 1,
1, 1, 1, 1);
e_widget_list_object_append(ol, o, 1, 1, 0.5);
{
Evas_Coord minw, minh;
e_widget_min_size_get(ol, &minw, &minh);
e_dialog_content_set(app->dia, ol, minw, minh);
}
e_dialog_button_add(app->dia, _("Cancel"), NULL, _e_eap_edit_cancel_cb, app);
e_dialog_button_add(app->dia, _("Save"), NULL, _e_eap_edit_save_cb, app);
e_dialog_show(app->dia);
/* methods */
v.create_cfdata = _e_eap_edit_create_data;
v.free_cfdata = _e_eap_edit_free_data;
v.basic.apply_cfdata = _e_eap_edit_basic_apply_data;
v.basic.create_widgets = _e_eap_edit_basic_create_widgets;
v.advanced.apply_cfdata = _e_eap_edit_advanced_apply_data;
v.advanced.create_widgets = _e_eap_edit_advanced_create_widgets;
/* create config diaolg for NULL object/data */
cfd = e_config_dialog_new(con, _("Eap Editor"), NULL, 0, &v, editor);
}
/* local subsystem functions */
static void
_e_eap_edit_save_cb(void *data, E_Dialog *dia)
_e_eap_edit_fill_data(E_App_Edit_CFData *cfdata)
{
/*- BASIC -*/
IFDUP(cfdata->editor->eap->name, cfdata->name);
IFDUP(cfdata->editor->eap->exe, cfdata->exe);
/*- ADVANCED -*/
IFDUP(cfdata->editor->eap->generic, cfdata->generic);
IFDUP(cfdata->editor->eap->comment, cfdata->comment);
IFDUP(cfdata->editor->eap->win_name, cfdata->wname);
IFDUP(cfdata->editor->eap->win_class, cfdata->wclass);
IFDUP(cfdata->editor->eap->win_title, cfdata->wtitle);
IFDUP(cfdata->editor->eap->win_role, cfdata->wrole);
IFDUP(cfdata->editor->eap->path, cfdata->path);
}
static void *
_e_eap_edit_create_data(E_Config_Dialog *cfd)
{
E_App_Edit_CFData *cfdata;
cfdata = E_NEW(E_App_Edit_CFData, 1);
if (!cfdata) return NULL;
cfdata->editor = cfd->data;
_e_eap_edit_fill_data(cfdata);
return cfdata;
}
static void
_e_eap_edit_free_data(E_Config_Dialog *cfd, void *data)
{
free(data);
}
static int
_e_eap_edit_basic_apply_data(E_Config_Dialog *cfd, void *data)
{
E_App_Edit *editor;
E_App *eap;
E_App_Edit_CFData *cfdata;
editor = data;
cfdata = data;
editor = cfdata->editor;
eap = editor->eap;
if(!(editor->data.path))
return;
printf("path : %s\n", editor->data.path);
if(!(cfdata->path))
return -1;
E_FREE(eap->name);
E_FREE(eap->exe);
E_FREE(eap->image);
IFDUP(cfdata->name, eap->name);
IFDUP(cfdata->exe, eap->exe);
IFDUP(cfdata->image, eap->image);
e_app_fields_save(eap);
return -1;
}
static int
_e_eap_edit_advanced_apply_data(E_Config_Dialog *cfd, void *data)
{
E_App_Edit *editor;
E_App *eap;
E_App_Edit_CFData *cfdata;
cfdata = data;
editor = cfdata->editor;
eap = editor->eap;
if(!(cfdata->path))
return -1;
E_FREE(eap->generic);
E_FREE(eap->comment);
E_FREE(eap->exe);
E_FREE(eap->win_name);
E_FREE(eap->win_class);
E_FREE(eap->win_title);
E_FREE(eap->win_role);
E_FREE(eap->icon_class);
E_FREE(eap->path);
E_FREE(eap->image);
if(editor->data.startup_notify)
eap->startup_notify = 1;
if(editor->data.wait_exit)
eap->wait_exit = 1;
IFDUP(editor->data.name, eap->name);
IFDUP(editor->data.generic, eap->generic);
IFDUP(editor->data.comment, eap->comment);
IFDUP(editor->data.exe, eap->exe);
IFDUP(editor->data.wname, eap->win_name);
IFDUP(editor->data.wclass, eap->win_class);
IFDUP(editor->data.wtitle, eap->win_title);
IFDUP(editor->data.wrole, eap->win_role);
IFDUP(editor->data.iclass, eap->icon_class);
IFDUP(editor->data.path, eap->path);
IFDUP(editor->data.image, eap->image);
printf("image is: %s\n", eap->image);
printf("eap path: %s\n", eap->path);
if(cfdata->startup_notify)
eap->startup_notify = 1;
if(cfdata->wait_exit)
eap->wait_exit = 1;
IFDUP(cfdata->generic, eap->generic);
IFDUP(cfdata->comment, eap->comment);
IFDUP(cfdata->wname, eap->win_name);
IFDUP(cfdata->wclass, eap->win_class);
IFDUP(cfdata->wtitle, eap->win_title);
IFDUP(cfdata->wrole, eap->win_role);
IFDUP(cfdata->iclass, eap->icon_class);
IFDUP(cfdata->path, eap->path);
e_app_fields_save(eap);
_e_eap_edit_free(editor);
return 1;
}
static void
_e_eap_edit_cancel_cb(void *data, E_Dialog *dia)
{
_e_eap_edit_free(data);
}
static void
_e_eap_edit_browse_cb(void *data1, void *data2)
static Evas_Object *
_e_eap_edit_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, void *data)
{
E_Fileman *fileman;
E_App_Edit_CFData *cfdata;
E_App_Edit *editor;
E_App *eap;
Evas_Object *ol, *o;
Evas_Object *entry;
editor = data1;
fileman = e_fileman_new (editor->dia->win->container);
e_fileman_selector_enable(fileman, _e_eap_edit_selector_cb, editor);
e_win_resize(fileman->win, 640, 300);
e_fileman_show (fileman);
}
/* need to make sure we can load the image */
static void
_e_eap_edit_selector_cb(E_Fileman *fileman, char *file, void *data)
{
E_App_Edit *editor;
char *ext;
Evas_Object *img;
cfdata = data;
editor = cfdata->editor;
eap = editor->eap;
ext = strrchr(file, '.');
if(!ext)
return;
if(strcasecmp(ext, ".png") && strcasecmp(ext, ".jpg") &&
strcasecmp(ext, ".jpeg"))
return;
ol = e_widget_list_add(evas, 0, 1);
o = e_widget_frametable_add(evas, _("Icon"), 0);
if(eap->path)
{
editor->img = e_icon_add(evas);
e_icon_file_key_set(editor->img, eap->path, "images/0");
e_icon_fill_inside_set(editor->img, 1);
}
else
{
editor->img = edje_object_add(evas);
e_theme_edje_object_set(editor->img, "base/theme/icons/enlightenment/e", "icons/enlightenment/e");
}
editor->img_widget = e_widget_iconsel_add(evas, editor->img,
48, 48, &cfdata->image);
editor = data;
E_FREE(editor->eap->image);
editor->data.image = strdup(file);
e_widget_sub_object_del(editor->img_widget, editor->img);
evas_object_del(editor->img);
editor->img = evas_object_image_add(editor->evas);
evas_object_image_file_set(editor->img, file, NULL);
evas_object_resize(editor->img, 48, 48);
evas_object_image_fill_set(editor->img, 0, 0, 48, 48);
evas_object_show(editor->img);
e_widget_resize_object_set(editor->img_widget, editor->img);
e_widget_sub_object_add(editor->img_widget, editor->img);
e_widget_min_size_set(editor->img_widget, 48, 48);
evas_object_resize(editor->img, 48, 48); //temp hack
e_widget_frametable_object_append(o, editor->img_widget,
0, 0, 1, 1,
1, 1, 1, 1);
e_widget_list_object_append(ol, o, 1, 1, 0.5);
o = e_widget_frametable_add(evas, _("Basic Info"), 0);
e_object_del(fileman);
e_widget_frametable_object_append(o, e_widget_label_add(evas, "App name"),
0, 0, 1, 1,
1, 1, 1, 1);
entry = e_widget_entry_add(evas, &(cfdata->name));
e_widget_min_size_set(entry, 100, 1);
e_widget_frametable_object_append(o, entry,
1, 0, 1, 1,
1, 1, 1, 1);
e_widget_frametable_object_append(o, e_widget_label_add(evas, "Executable"),
0, 1, 1, 1,
1, 1, 1, 1);
e_widget_frametable_object_append(o, e_widget_entry_add(evas, &(cfdata->exe)),
1, 1, 1, 1,
1, 1, 1, 1);
e_widget_list_object_append(ol, o, 1, 1, 0.5);
return ol;
}
static void _e_eap_edit_free(E_App_Edit *app)
static Evas_Object *
_e_eap_edit_advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, void *data)
{
e_object_del(E_OBJECT(app->eap));
e_object_del(E_OBJECT(app->dia));
E_FREE(app);
E_App_Edit_CFData *cfdata;
E_App_Edit *editor;
E_App *eap;
Evas_Object *ol, *o;
Evas_Object *entry;
cfdata = data;
editor = cfdata->editor;
eap = editor->eap;
ol = e_widget_table_add(evas, _("Advanced"), 0);
o = e_widget_frametable_add(evas, _("General"), 0);
/*- general info -*/
e_widget_frametable_object_append(o, e_widget_label_add(evas, "Generic Info"),
0, 0, 1, 1,
1, 1, 1, 1);
entry = e_widget_entry_add(evas, &(cfdata->generic));
e_widget_min_size_set(entry, 100, 1);
e_widget_frametable_object_append(o, entry,
1, 0, 1, 1,
1, 1, 1, 1);
e_widget_frametable_object_append(o, e_widget_label_add(evas, "Comment"),
0, 1, 1, 1,
1, 1, 1, 1);
e_widget_frametable_object_append(o, e_widget_entry_add(evas, &(cfdata->comment)),
1, 1, 1, 1,
1, 1, 1, 1);
e_widget_table_object_append(ol, o, 0, 0, 1, 1, 1 ,1, 1, 1);
/*- window info -*/
o = e_widget_frametable_add(evas, _("Window"), 0);
e_widget_frametable_object_append(o, e_widget_label_add(evas, "Window Name"),
0, 0, 1, 1,
1, 1, 1, 1);
entry = e_widget_entry_add(evas, &(cfdata->wname));
e_widget_min_size_set(entry, 100, 1);
e_widget_frametable_object_append(o, entry,
1, 0, 1, 1,
1, 1, 1, 1);
e_widget_frametable_object_append(o, e_widget_label_add(evas, "Window Class"),
0, 1, 1, 1,
1, 1, 1, 1);
e_widget_frametable_object_append(o, e_widget_entry_add(evas, &(cfdata->wclass)),
1, 1, 1, 1,
1, 1, 1, 1);
e_widget_frametable_object_append(o, e_widget_label_add(evas, "Window Title"),
0, 2, 1, 1,
1, 1, 1, 1);
e_widget_frametable_object_append(o, e_widget_entry_add(evas, &(cfdata->wtitle)),
1, 2, 1, 1,
1, 1, 1, 1);
e_widget_frametable_object_append(o, e_widget_label_add(evas, "Window Role"),
0, 3, 1, 1,
1, 1, 1, 1);
e_widget_frametable_object_append(o, e_widget_entry_add(evas, &(cfdata->wrole)),
1, 3, 1, 1,
1, 1, 1, 1);
e_widget_table_object_append(ol, o, 0, 1, 1, 1, 1 ,1, 1, 1);
/*- icon info -*/
o = e_widget_frametable_add(evas, _("Icon"), 0);
e_widget_frametable_object_append(o, e_widget_label_add(evas, "Icon Class"),
0, 0, 1, 1,
1, 1, 1, 1);
entry = e_widget_entry_add(evas, &(cfdata->iclass));
e_widget_min_size_set(entry, 100, 1);
e_widget_frametable_object_append(o, entry,
1, 0, 1, 1,
1, 1, 1, 1);
e_widget_frametable_object_append(o, e_widget_label_add(evas, "Path"),
0, 1, 1, 1,
1, 1, 1, 1);
e_widget_frametable_object_append(o, e_widget_entry_add(evas, &(cfdata->path)),
1, 1, 1, 1,
1, 1, 1, 1);
e_widget_table_object_append(ol, o, 1, 0, 1, 1, 1 ,1, 1, 1);
/*- misc info -*/
o = e_widget_frametable_add(evas, _("Misc"), 0);
e_widget_frametable_object_append(o, e_widget_label_add(evas, "Startup notify"),
0, 0, 1, 1,
1, 1, 1, 1);
e_widget_frametable_object_append(o, e_widget_check_add(evas, "", &(cfdata->startup_notify)),
1, 0, 1, 1,
1, 1, 1, 1);
e_widget_frametable_object_append(o, e_widget_label_add(evas, "Wait exit"),
0, 1, 1, 1,
1, 1, 1, 1);
e_widget_frametable_object_append(o, e_widget_check_add(evas, "", &(cfdata->wait_exit)),
1, 1, 1, 1,
1, 1, 1, 1);
e_widget_table_object_append(ol, o, 1, 1, 1, 1, 1 ,1, 1, 1);
return ol;
}

View File

@ -1,45 +1,9 @@
#ifdef E_TYPEDEFS
typedef struct _E_App_Edit E_App_Edit;
#else
#ifndef E_EAP_EDIT_H
#define E_EAP_EDIT_H
#define E_EAP_EDIT_TYPE 0xE0b01019
struct _E_App_Edit
{
E_Object e_obj_inherit;
E_Container *con;
E_Win *win;
Evas *evas;
E_Dialog *dia;
E_App *eap;
Evas_Object *img;
Evas_Object *img_widget;
struct {
char *image;
char *name;
char *generic;
char *comment;
char *exe;
char *wname;
char *wclass;
char *wtitle;
char *wrole;
char *iclass;
char *path;
int startup_notify;
int wait_exit;
} data;
};
E_App_Edit *e_eap_edit_show(E_Container *con, E_App *a);
EAPI void e_eap_edit_show(E_Container *con, E_App *a);
#endif
#endif

View File

@ -30,8 +30,6 @@ static void _e_fm_icon_smart_add (Evas_Object *obj);
static void _e_fm_icon_smart_del (Evas_Object *obj);
static void _e_fm_icon_smart_move (Evas_Object *obj, Evas_Coord x, Evas_Coord y);
static void _e_fm_icon_smart_resize (Evas_Object *obj, Evas_Coord w, Evas_Coord h);
static void _e_fm_icon_smart_show (Evas_Object *obj);
static void _e_fm_icon_smart_hide (Evas_Object *obj);
static void _e_fm_icon_smart_clip_set (Evas_Object *obj, Evas_Object *clip);
static void _e_fm_icon_smart_clip_unset (Evas_Object *obj);
@ -86,8 +84,8 @@ e_fm_icon_add(Evas *evas)
NULL, NULL, NULL, NULL, NULL,
_e_fm_icon_smart_move,
_e_fm_icon_smart_resize,
_e_fm_icon_smart_show,
_e_fm_icon_smart_hide,
NULL,
NULL,
NULL,
_e_fm_icon_smart_clip_set,
_e_fm_icon_smart_clip_unset,
@ -109,6 +107,39 @@ e_fm_icon_file_set(Evas_Object *obj, E_Fm_File *file)
e_object_ref(E_OBJECT(file));
sd->file = file;
file->icon_object = obj;
if (e_fm_file_can_preview(sd->file))
{
sd->thumb_path = e_thumb_file_get(sd->file->path);
if (e_thumb_exists(sd->file->path))
sd->image_object = e_thumb_evas_object_get(sd->file->path,
sd->evas,
sd->w,
sd->h);
else
{
thumb_files = evas_list_append(thumb_files, sd);
if (pid == -1) _e_fm_icon_thumb_generate();
_e_fm_icon_icon_mime_get(sd);
}
}
else
{
_e_fm_icon_icon_mime_get(sd);
}
if (sd->image_object)
{
edje_object_part_swallow(sd->icon_object, "icon_swallow", sd->image_object);
evas_object_smart_member_add(sd->image_object, obj);
evas_object_show(sd->image_object);
}
if(sd->saved_title)
edje_object_part_text_set(sd->icon_object, "icon_title", sd->saved_title);
else
edje_object_part_text_set(sd->icon_object, "icon_title", sd->file->name);
}
void
@ -178,8 +209,25 @@ _e_fm_icon_smart_add(Evas_Object *obj)
sd->event_object = evas_object_rectangle_add(sd->evas);
evas_object_color_set(sd->event_object, 0, 0, 0, 0);
evas_object_smart_member_add(sd->event_object, obj);
evas_object_show(sd->event_object);
evas_object_smart_data_set(obj, sd);
sd->visible = 1;
sd->icon_object = edje_object_add(sd->evas);
e_theme_edje_object_set(sd->icon_object, "base/theme/fileman",
"fileman/icon");
evas_object_smart_member_add(sd->icon_object, obj);
evas_object_show(sd->icon_object);
evas_object_show(sd->event_object);
{
Evas_Coord icon_w, icon_h;
edje_object_size_min_calc(sd->icon_object, &icon_w, &icon_h);
evas_object_resize(sd->icon_object, icon_w, icon_h);
evas_object_resize(sd->event_object, icon_w, icon_h);
evas_object_resize(sd->obj, icon_w, icon_h);
}
}
@ -245,90 +293,6 @@ _e_fm_icon_smart_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h)
//if (sd->image_object) evas_object_resize(sd->image_object, w, h);
}
static void
_e_fm_icon_smart_show(Evas_Object *obj)
{
E_Smart_Data *sd;
sd = evas_object_smart_data_get(obj);
if ((!sd) && (!sd->file)) return;
if (sd->visible) return;
evas_object_show(sd->event_object);
sd->visible = 1;
sd->icon_object = edje_object_add(sd->evas);
e_theme_edje_object_set(sd->icon_object, "base/theme/fileman",
"fileman/icon");
evas_object_smart_member_add(sd->icon_object, obj);
if (e_fm_file_can_preview(sd->file))
{
sd->thumb_path = e_thumb_file_get(sd->file->path);
if (e_thumb_exists(sd->file->path))
sd->image_object = e_thumb_evas_object_get(sd->file->path,
sd->evas,
sd->w,
sd->h);
else
{
thumb_files = evas_list_append(thumb_files, sd);
if (pid == -1) _e_fm_icon_thumb_generate();
_e_fm_icon_icon_mime_get(sd);
}
}
else
{
_e_fm_icon_icon_mime_get(sd);
}
if (sd->image_object)
{
edje_object_part_swallow(sd->icon_object, "icon_swallow", sd->image_object);
evas_object_smart_member_add(sd->image_object, obj);
}
if(sd->saved_title)
edje_object_part_text_set(sd->icon_object, "icon_title", sd->saved_title);
else
edje_object_part_text_set(sd->icon_object, "icon_title", sd->file->name);
evas_object_show(sd->icon_object);
{
Evas_Coord icon_w, icon_h;
edje_object_size_min_calc(sd->icon_object, &icon_w, &icon_h);
evas_object_resize(sd->icon_object, icon_w, icon_h);
evas_object_resize(sd->event_object, icon_w, icon_h);
evas_object_resize(sd->obj, icon_w, icon_h);
}
}
static void
_e_fm_icon_smart_hide(Evas_Object *obj)
{
E_Smart_Data *sd;
sd = evas_object_smart_data_get(obj);
if (!sd) return;
if (!sd->visible) return;
evas_object_hide(sd->event_object);
sd->visible = 0;
if (sd->icon_object)
{
evas_object_smart_member_del(sd->icon_object);
evas_object_del(sd->icon_object);
}
sd->icon_object = NULL;
if (sd->image_object)
{
evas_object_smart_member_del(sd->image_object);
evas_object_del(sd->image_object);
}
sd->image_object = NULL;
if (sd->thumb_path) free(sd->thumb_path);
sd->thumb_path = NULL;
}
static void
_e_fm_icon_smart_clip_set(Evas_Object *obj, Evas_Object *clip)
{
@ -338,6 +302,7 @@ _e_fm_icon_smart_clip_set(Evas_Object *obj, Evas_Object *clip)
if (!sd) return;
evas_object_clip_set(sd->event_object, clip);
evas_object_clip_set(sd->icon_object, clip);
}
static void
@ -359,7 +324,7 @@ _e_fm_icon_icon_mime_get(E_Smart_Data *sd)
if (sd->file->type == E_FM_FILE_TYPE_DIRECTORY)
{
e_theme_edje_object_set(sd->image_object, "base/theme/fileman",
"fileman/icons/folder");
"icons/fileman/folder");
}
else
{
@ -376,15 +341,15 @@ _e_fm_icon_icon_mime_get(E_Smart_Data *sd)
for (; *ext2; ext2++)
*ext2 = tolower(*ext2);
snprintf(part, PATH_MAX, "fileman/icons/%s", (ext + 1));
snprintf(part, PATH_MAX, "icons/fileman/%s", (ext + 1));
if (!e_theme_edje_object_set(sd->image_object, "base/theme/fileman", part))
e_theme_edje_object_set(sd->image_object, "base/theme/fileman", "fileman/icons/file");
e_theme_edje_object_set(sd->image_object, "base/theme/fileman", "icons/fileman/file");
free(ext);
}
else
e_theme_edje_object_set(sd->image_object, "base/theme/fileman", "fileman/icons/file");
e_theme_edje_object_set(sd->image_object, "base/theme/fileman", "icons/fileman/file");
}
}

View File

@ -183,8 +183,6 @@ static void _e_fm_smart_add(Evas_Object *object);
static void _e_fm_smart_del(Evas_Object *object);
static void _e_fm_smart_move(Evas_Object *object, Evas_Coord x, Evas_Coord y);
static void _e_fm_smart_resize(Evas_Object *object, Evas_Coord w, Evas_Coord h);
static void _e_fm_smart_show(Evas_Object *object);
static void _e_fm_smart_hide(Evas_Object *object);
static void _e_fm_redraw(E_Fm_Smart_Data *sd);
@ -254,8 +252,8 @@ e_fm_init(void)
NULL, NULL, NULL, NULL, NULL,
_e_fm_smart_move, /* move */
_e_fm_smart_resize, /* resize */
_e_fm_smart_show, /* show */
_e_fm_smart_hide, /* hide */
NULL,/* show */
NULL,/* hide */
NULL, /* color_set */
NULL, /* clip_set */
NULL, /* clip_unset */
@ -432,6 +430,17 @@ e_fm_selector_enable(Evas_Object *object, void (*func)(Evas_Object *object, char
sd->selector_data = data;
}
void
e_fm_background_set(Evas_Object *object, Evas_Object *bg)
{
E_Fm_Smart_Data *sd;
if ((!object) || !(sd = evas_object_smart_data_get(object)))
return;
sd->bg = bg;
}
/* local subsystem functions */
static void
@ -452,25 +461,29 @@ _e_fm_smart_add(Evas_Object *object)
sd->evas = evas_object_evas_get(object);
sd->frozen = 0;
sd->is_selector = 0;
sd->bg = evas_object_rectangle_add(sd->evas); // this should become an edje
evas_object_color_set(sd->bg, 0, 0, 0, 0);
evas_object_show(sd->bg);
sd->bg = edje_object_add(sd->evas);
evas_object_smart_member_add(sd->bg, object);
evas_object_show(sd->bg);
e_theme_edje_object_set(sd->selection.band.obj,
"base/theme/fileman/background",
"fileman/background");
evas_object_event_callback_add(sd->bg, EVAS_CALLBACK_MOUSE_DOWN,
_e_fm_mouse_down_cb, sd);
evas_object_event_callback_add(sd->bg, EVAS_CALLBACK_MOUSE_UP,
_e_fm_mouse_up_cb, sd);
evas_object_event_callback_add(sd->bg, EVAS_CALLBACK_MOUSE_MOVE,
_e_fm_mouse_move_cb, sd);
evas_object_smart_member_add(sd->bg, object);
sd->layout = e_icon_layout_add(sd->evas);
evas_object_smart_member_add(sd->layout, object);
e_icon_layout_spacing_set(sd->layout, sd->icon_info.x_space, sd->icon_info.y_space);
evas_object_stack_above(sd->layout, sd->bg);
evas_object_show(sd->layout);
sd->clip = evas_object_rectangle_add(sd->evas);
evas_object_smart_member_add(sd->clip, object);
evas_object_show(sd->clip);
evas_object_move(sd->clip, -100000, -100000);
evas_object_resize(sd->clip, 200000, 200000);
evas_object_color_set(sd->clip, 255, 255, 255, 255);
@ -479,6 +492,7 @@ _e_fm_smart_add(Evas_Object *object)
evas_object_clip_set(sd->layout, sd->clip);
sd->selection.band.obj = edje_object_add(sd->evas);
evas_object_smart_member_add(sd->selection.band.obj, object);
e_theme_edje_object_set(sd->selection.band.obj,
"base/theme/fileman/rubberband",
"fileman/rubberband");
@ -629,28 +643,6 @@ _e_fm_smart_resize(Evas_Object *object, Evas_Coord w, Evas_Coord h)
}
}
static void
_e_fm_smart_show(Evas_Object *object)
{
E_Fm_Smart_Data *sd;
sd = evas_object_smart_data_get(object);
if (!sd) return;
evas_object_show(sd->clip);
}
static void
_e_fm_smart_hide(Evas_Object *object)
{
E_Fm_Smart_Data *sd;
sd = evas_object_smart_data_get(object);
if (!sd) return;
evas_object_hide(sd->clip);
}
static void
_e_fm_redraw(E_Fm_Smart_Data *sd)
{

View File

@ -38,6 +38,7 @@ EAPI void e_fm_reconfigure_callback_add(Evas_Object *object, vo
EAPI int e_fm_freeze(Evas_Object *freeze);
EAPI int e_fm_thaw(Evas_Object *freeze);
EAPI void e_fm_selector_enable(Evas_Object *object, void (*func)(Evas_Object *object, char *file, void *data), void *data);
EAPI void e_fm_background_set(Evas_Object *object, Evas_Object *bg);
extern int E_EVENT_FM_RECONFIGURE;
extern int E_EVENT_FM_DIRECTORY_CHANGE;

View File

@ -19,7 +19,7 @@ struct _E_Smart_Data
int clip_frozen;
int fixed;
unsigned char changed : 1;
Evas_List *items;
Evas_List *items;
};
struct _E_Icon_Layout_Item
@ -42,8 +42,6 @@ static void _e_icon_layout_smart_add(Evas_Object *obj);
static void _e_icon_layout_smart_del(Evas_Object *obj);
static void _e_icon_layout_smart_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y);
static void _e_icon_layout_smart_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h);
static void _e_icon_layout_smart_show(Evas_Object *obj);
static void _e_icon_layout_smart_hide(Evas_Object *obj);
static void _e_icon_layout_smart_color_set(Evas_Object *obj, int r, int g, int b, int a);
static void _e_icon_layout_smart_clip_set(Evas_Object *obj, Evas_Object *clip);
static void _e_icon_layout_smart_clip_unset(Evas_Object *obj);
@ -270,6 +268,7 @@ _e_icon_layout_smart_adopt(E_Smart_Data *sd, Evas_Object *obj)
li->h = 0;
evas_object_clip_set(obj, sd->clip);
evas_object_smart_member_add(obj, li->sd->obj);
evas_object_show(obj);
evas_object_data_set(obj, "e_icon_layout_data", li);
evas_object_event_callback_add(obj, EVAS_CALLBACK_FREE,
_e_icon_layout_smart_item_del_hook, NULL);
@ -397,8 +396,8 @@ _e_icon_layout_smart_init(void)
NULL, NULL, NULL, NULL, NULL,
_e_icon_layout_smart_move,
_e_icon_layout_smart_resize,
_e_icon_layout_smart_show,
_e_icon_layout_smart_hide,
NULL,
NULL,
_e_icon_layout_smart_color_set,
_e_icon_layout_smart_clip_set,
_e_icon_layout_smart_clip_unset,
@ -425,11 +424,12 @@ _e_icon_layout_smart_add(Evas_Object *obj)
sd->yc = 0;
sd->fixed = 0;
sd->clip = evas_object_rectangle_add(evas_object_evas_get(obj));
evas_object_smart_member_add(sd->clip, obj);
evas_object_move(sd->clip, 0, 0);
evas_object_resize(sd->clip, 0, 0);
evas_object_color_set(sd->clip, 255, 255, 255, 255);
evas_object_smart_data_set(obj, sd);
evas_object_smart_member_add(sd->clip, obj);
evas_object_show(sd->clip);
}
static void
@ -493,29 +493,9 @@ _e_icon_layout_smart_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h)
sd->w = w;
sd->h = h;
sd->changed = 1;
_e_icon_layout_smart_reconfigure(sd);
_e_icon_layout_smart_reconfigure(sd);
}
static void
_e_icon_layout_smart_show(Evas_Object *obj)
{
E_Smart_Data *sd;
sd = evas_object_smart_data_get(obj);
if (!sd) return;
if (sd->items) evas_object_show(sd->clip);
}
static void
_e_icon_layout_smart_hide(Evas_Object *obj)
{
E_Smart_Data *sd;
sd = evas_object_smart_data_get(obj);
if (!sd) return;
evas_object_hide(sd->clip);
}
static void
_e_icon_layout_smart_color_set(Evas_Object *obj, int r, int g, int b, int a)
{

View File

@ -614,11 +614,10 @@ static void
_e_int_menus_eapedit_item_cb(void *data, E_Menu *m, E_Menu_Item *mi)
{
/* This is temporarily put here so we can test the eap editor */
E_App_Edit *eap_edit;
E_App *a;
a = e_app_empty_new(NULL);
eap_edit = e_eap_edit_show(m->zone->container, a);
e_eap_edit_show(m->zone->container, a);
}
static void

View File

@ -13,8 +13,19 @@ typedef struct _E_Scrollbar_Smart_Data E_Scrollbar_Smart_Data;
struct _E_Scrollbar_Smart_Data
{
Evas_Object *edje_object;
struct {
Evas_Object *object;
Evas_Coord x, y, w, h;
} edje, drag;
struct {
Evas_Coord x, y, w, h;
} confine;
int is_dragging;
Evas_Coord mx, my;
struct {
double min;
double max;
@ -33,7 +44,11 @@ static void _e_scrollbar_smart_resize(Evas_Object *object, Evas_Coord w, Evas_Co
static void _e_scrollbar_smart_show(Evas_Object *object);
static void _e_scrollbar_smart_hide(Evas_Object *object);
static void _e_scrollbar_drag_cb(void *data, Evas_Object *object, const char *emission, const char *source);
static void _e_scrollbar_drag_mouse_move_cb(void *data, Evas *evas, Evas_Object *object, void *event_info);
static void _e_scrollbar_drag_mouse_up_cb(void *data, Evas *evas, Evas_Object *object, void *event_info);
static void _e_scrollbar_drag_mouse_down_cb(void *data, Evas *evas, Evas_Object *object, void *event_info);
static Evas_Smart *e_scrollbar_smart = NULL;
Evas_Object *
@ -71,16 +86,22 @@ e_scrollbar_direction_set(Evas_Object *object, E_Scrollbar_Direction dir)
switch (dir)
{
case E_SCROLLBAR_HORIZONTAL:
e_theme_edje_object_set(sd->edje_object,
e_theme_edje_object_set(sd->edje.object,
"base/theme/widgets/hscrollbar",
"widgets/hscrollbar");
e_theme_edje_object_set(sd->drag.object,
"base/theme/widgets/vscrollbar",
"widgets/hscrollbar_drag");
sd->direction = dir;
break;
case E_SCROLLBAR_VERTICAL:
e_theme_edje_object_set(sd->edje_object,
e_theme_edje_object_set(sd->edje.object,
"base/theme/widgets/vscrollbar",
"widgets/vscrollbar");
e_theme_edje_object_set(sd->drag.object,
"base/theme/widgets/vscrollbar",
"widgets/vscrollbar_drag");
sd->direction = dir;
break;
}
@ -125,9 +146,9 @@ e_scrollbar_value_set(Evas_Object *object, double value)
sd->value.current = value;
if (sd->direction == E_SCROLLBAR_HORIZONTAL)
edje_object_part_drag_value_set(sd->edje_object, "drag", value, 0);
edje_object_part_drag_value_set(sd->edje.object, "drag", value, 0);
else
edje_object_part_drag_value_set(sd->edje_object, "drag", 0, value);
edje_object_part_drag_value_set(sd->edje.object, "drag", 0, value);
}
double
@ -139,7 +160,7 @@ e_scrollbar_value_get(Evas_Object *object)
if ((!object) || !(sd = evas_object_smart_data_get(object)))
return 0.0;
edje_object_part_drag_value_get(sd->edje_object, "drag", &dx, &dy);
edje_object_part_drag_value_get(sd->edje.object, "drag", &dx, &dy);
if (sd->direction == E_SCROLLBAR_HORIZONTAL)
sd->value.current = dx;
@ -159,13 +180,13 @@ e_scrollbar_increments_set(Evas_Object *object, double step, double page)
if (sd->direction == E_SCROLLBAR_HORIZONTAL)
{
edje_object_part_drag_step_set(sd->edje_object, "drag", step, 0);
edje_object_part_drag_page_set(sd->edje_object, "drag", page, 0);
edje_object_part_drag_step_set(sd->edje.object, "drag", step, 0);
edje_object_part_drag_page_set(sd->edje.object, "drag", page, 0);
}
else
{
edje_object_part_drag_step_set(sd->edje_object, "drag", 0, step);
edje_object_part_drag_page_set(sd->edje_object, "drag", 0, page);
edje_object_part_drag_step_set(sd->edje.object, "drag", 0, step);
edje_object_part_drag_page_set(sd->edje.object, "drag", 0, page);
}
}
@ -179,8 +200,8 @@ e_scrollbar_increments_get(Evas_Object *object, double *step, double *page)
if ((!object) || !(sd = evas_object_smart_data_get(object)))
return;
edje_object_part_drag_step_get(sd->edje_object, "drag", &stepx, &stepy);
edje_object_part_drag_page_get(sd->edje_object, "drag", &pagex, &pagey);
edje_object_part_drag_step_get(sd->edje.object, "drag", &stepx, &stepy);
edje_object_part_drag_page_get(sd->edje.object, "drag", &pagex, &pagey);
if (sd->direction == E_SCROLLBAR_HORIZONTAL)
{
@ -210,19 +231,45 @@ _e_scrollbar_smart_add(Evas_Object *object)
sd = calloc(1, sizeof(E_Scrollbar_Smart_Data));
if (!sd) return;
sd->is_dragging = 0;
sd->value.min = 0.0;
sd->value.max = 1.0;
sd->callbacks = NULL;
sd->direction = E_SCROLLBAR_HORIZONTAL;
sd->edje_object = edje_object_add(evas);
e_theme_edje_object_set(sd->edje_object,
sd->direction = E_SCROLLBAR_HORIZONTAL;
sd->edje.object = edje_object_add(evas);
sd->edje.x = 0;
sd->edje.y = 0;
sd->edje.w = 0;
sd->edje.h = 0;
e_theme_edje_object_set(sd->edje.object, "base/theme/widgets/hscrollbar",
"widgets/hscrollbar");
sd->drag.object = edje_object_add(evas);
sd->drag.x = 0;
sd->drag.y = 0;
sd->drag.w = 0;
sd->drag.h = 0;
e_theme_edje_object_set(sd->drag.object,
"base/theme/widgets/hscrollbar",
"widgets/hscrollbar");
edje_object_signal_callback_add(sd->edje_object, "drag", "*", _e_scrollbar_drag_cb, sd);
evas_object_data_set(sd->edje_object, "smart", object);
evas_object_smart_member_add(sd->edje_object, object);
"widgets/hscrollbar_drag");
edje_object_part_geometry_get(sd->drag.object, "confine",
&sd->confine.x, &sd->confine.y,
&sd->confine.w, sd->confine.h);
evas_object_event_callback_add(sd->drag.object, EVAS_CALLBACK_MOUSE_MOVE, _e_scrollbar_drag_mouse_move_cb, sd);
evas_object_event_callback_add(sd->drag.object, EVAS_CALLBACK_MOUSE_UP, _e_scrollbar_drag_mouse_up_cb, sd);
evas_object_event_callback_add(sd->drag.object, EVAS_CALLBACK_MOUSE_DOWN, _e_scrollbar_drag_mouse_down_cb, sd);
evas_object_data_set(sd->edje.object, "smart", object);
evas_object_smart_member_add(sd->edje.object, object);
evas_object_smart_member_add(sd->drag.object, object);
evas_object_smart_data_set(object, sd);
evas_object_show(sd->edje.object);
evas_object_show(sd->drag.object);
}
static void
@ -233,8 +280,8 @@ _e_scrollbar_smart_del(Evas_Object *object)
if ((!object) || !(sd = evas_object_smart_data_get(object)))
return;
evas_object_del(sd->edje_object);
evas_object_del(sd->edje.object);
evas_object_del(sd->drag.object);
free(sd);
}
@ -242,12 +289,28 @@ _e_scrollbar_smart_del(Evas_Object *object)
static void
_e_scrollbar_smart_move(Evas_Object *object, Evas_Coord x, Evas_Coord y)
{
E_Scrollbar_Smart_Data *sd;
E_Scrollbar_Smart_Data *sd;
Evas_Coord we, ye, yd, wd;
Evas_Coord cx, cy, cw, ch;
if ((!object) || !(sd = evas_object_smart_data_get(object)))
return;
evas_object_move(sd->edje_object, x, y);
evas_object_geometry_get(sd->edje.object, NULL, &ye, &we, NULL);
evas_object_geometry_get(sd->drag.object, NULL, &yd, &wd, NULL);
evas_object_move(sd->edje.object, x, y);
edje_object_part_geometry_get(sd->edje.object, "confine", &cx, &cy, &cw, &ch);
evas_object_move(sd->drag.object, x + cx + abs(wd - cw)/2, y + cy);
sd->edje.x = x;
sd->edje.y = y;
sd->confine.x = x + cx;
sd->confine.y = y + cy;
sd->drag.x = x + cx + abs(cw - wd)/2;
sd->drag.y = y + cy ;
}
/* Called when the object is resized */
@ -255,11 +318,18 @@ static void
_e_scrollbar_smart_resize(Evas_Object *object, Evas_Coord w, Evas_Coord h)
{
E_Scrollbar_Smart_Data *sd;
if ((!object) || !(sd = evas_object_smart_data_get(object)))
return;
evas_object_resize(sd->edje_object, w, h);
return;
evas_object_resize(sd->edje.object, w, h);
sd->edje.w = w;
sd->edje.h = h;
edje_object_part_geometry_get(sd->edje.object, "confine", NULL, NULL,
&sd->confine.w, &sd->confine.h);
evas_object_resize(sd->drag.object, sd->confine.w, 20);
sd->drag.w = sd->confine.w;
sd->drag.h = 20;
}
static void
@ -270,7 +340,9 @@ _e_scrollbar_smart_show(Evas_Object *object)
if ((!object) || !(sd = evas_object_smart_data_get(object)))
return;
evas_object_show(sd->edje_object);
evas_object_show(sd->edje.object);
evas_object_show(sd->drag.object);
}
static void
@ -281,7 +353,8 @@ _e_scrollbar_smart_hide(Evas_Object *object)
if ((!object) || !(sd = evas_object_smart_data_get(object)))
return;
evas_object_hide(sd->edje_object);
evas_object_hide(sd->edje.object);
evas_object_hide(sd->drag.object);
}
static void
@ -308,3 +381,65 @@ _e_scrollbar_drag_cb(void *data, Evas_Object *object, const char *emission, cons
handler->cb.drag(smart_object, sd->value.current, handler->data);
}
}
static void
_e_scrollbar_drag_mouse_down_cb(void *data, Evas *evas, Evas_Object *object, void *event_info)
{
E_Scrollbar_Smart_Data *sd;
Evas_Event_Mouse_Down *ev;
ev = event_info;
sd = data;
sd->mx = ev->canvas.x - sd->drag.x;
sd->my = ev->canvas.y - sd->drag.y;
sd->is_dragging = 1;
}
static void
_e_scrollbar_drag_mouse_up_cb(void *data, Evas *evas, Evas_Object *object, void *event_info)
{
E_Scrollbar_Smart_Data *sd;
sd = data;
sd->is_dragging = 0;
}
static void
_e_scrollbar_drag_mouse_move_cb(void *data, Evas *evas, Evas_Object *object, void *event_info)
{
E_Scrollbar_Smart_Data *sd;
Evas_Event_Mouse_Move *ev = event_info;
Evas_Coord x, y, w, h;
Evas_Coord cx, cy, cw, ch;
sd = data;
if(!sd->is_dragging) return;
if(sd->direction = E_SCROLLBAR_VERTICAL)
{
if (sd->drag.y < sd->confine.y)
{
evas_object_move(sd->drag.object, sd->drag.x, sd->confine.y);
sd->drag.y = sd->confine.y;
return;
}
if (sd->drag.y == sd->confine.y && ev->cur.canvas.y - sd->my < sd->confine.y)
return;
if (sd->drag.y + sd->drag.h > sd->confine.y + sd->confine.h)
{
evas_object_move(sd->drag.object, sd->drag.x, sd->confine.y + sd->confine.h - sd->drag.h);
sd->drag.y = sd->confine.y + sd->confine.h - sd->drag.h;
return;
}
if (sd->drag.y + sd->drag.h == sd->confine.y + sd->confine.h &&
ev->cur.canvas.y + sd->my > sd->confine.y + sd->confine.h)
return;
evas_object_move(sd->drag.object, sd->drag.x, ev->cur.canvas.y - sd->my);
sd->drag.y = ev->cur.canvas.y - sd->my;
}
}

103
src/bin/e_widget_fileman.c Normal file
View File

@ -0,0 +1,103 @@
/*
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
*/
#include "e.h"
typedef struct _E_Widget_Data E_Widget_Data;
struct _E_Widget_Data
{
Evas_Object *o_fm;
char **valptr;
Ecore_Event_Handler *change_handler;
};
static void _e_wid_del_hook(Evas_Object *obj);
static void _e_wid_focus_steal(void *data, Evas *e, Evas_Object *obj, void *event_info);
static int _e_wid_text_change(void *data, Evas_Object *entry, char *key);
/* local subsystem functions */
static void
_e_wid_del_hook(Evas_Object *obj)
{
E_Widget_Data *wd;
wd = e_widget_data_get(obj);
free(wd);
}
static void
_e_wid_focus_steal(void *data, Evas *e, Evas_Object *obj, void *event_info)
{
e_widget_focus_steal(data);
}
static int
_e_wid_text_change(void *data, Evas_Object *entry, char *key)
{
#if 0
E_Widget_Data *wd;
int size;
wd = data;
if(*(wd->valptr) == NULL)
{
size = (strlen(key) + 1) * sizeof(char);
*(wd->valptr) = realloc(*(wd->valptr), size);
snprintf(*(wd->valptr), size, "%s", key);
}
else
{
char *tmp;
size = (strlen(*(wd->valptr)) + strlen(key) + 1) * sizeof(char);
tmp = E_NEW(char *, strlen(*(wd->valptr)) + 1);
snprintf(tmp, strlen(*(wd->valptr)) + 1, "%s", *(wd->valptr));
*(wd->valptr) = realloc(*(wd->valptr), size);
snprintf(*(wd->valptr), size, "%s%s\0", tmp, key);
E_FREE(tmp);
}
#endif
}
/* externally accessible functions */
Evas_Object *
e_widget_fileman_add(Evas *evas, char **val)
{
Evas_Object *obj, *o, *bg, *scrollbar;
E_Widget_Data *wd;
Evas_Coord mw, mh;
obj = e_widget_add(evas);
e_widget_del_hook_set(obj, _e_wid_del_hook);
wd = calloc(1, sizeof(E_Widget_Data));
wd->valptr = val;
e_widget_data_set(obj, wd);
bg = edje_object_add(evas);
e_theme_edje_object_set(bg, "base/theme/widgets/fileselector",
"widgets/fileselector/main");
evas_object_show(bg);
o = e_fm_add(evas);
wd->o_fm = o;
scrollbar = e_scrollbar_add(evas);
e_scrollbar_direction_set(scrollbar, E_SCROLLBAR_VERTICAL);
edje_object_part_swallow(bg, "items", wd->o_fm);
edje_object_part_swallow(bg, "vscrollbar", scrollbar);
evas_object_show(bg);
evas_object_resize(bg, 300, 200);
e_widget_min_size_set(obj, 300, 200);
e_widget_sub_object_add(obj, bg);
evas_object_event_callback_add(bg, EVAS_CALLBACK_MOUSE_DOWN, _e_wid_focus_steal, obj);
e_widget_resize_object_set(obj, bg);
return obj;
}

View File

@ -0,0 +1,12 @@
/*
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
*/
#ifdef E_TYPEDEFS
#else
#ifndef E_WIDGET_FM_H
#define E_WIDGET_FM_H
EAPI Evas_Object *e_widget_fileman_add(Evas *evas, char **val);
#endif
#endif

253
src/bin/e_widget_iconsel.c Normal file
View File

@ -0,0 +1,253 @@
/*
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
*/
#include "e.h"
typedef struct _E_Widget_Data E_Widget_Data;
struct _E_Widget_Data
{
E_Container *con;
Evas_Object *o_button;
Evas_Object *o_icon;
char **valptr;
};
static void _e_wid_del_hook(Evas_Object *obj);
static void _e_wid_focus_hook(Evas_Object *obj);
static void _e_wid_activate_hook(Evas_Object *obj);
static void _e_wid_active_hook_cb(E_Fileman *fileman, char *file, void *data);
static void _e_wid_disable_hook(Evas_Object *obj);
static void _e_wid_signal_cb1(void *data, Evas_Object *obj, const char *emission, const char *source);
static void _e_wid_focus_steal(void *data, Evas *e, Evas_Object *obj, void *event_info);
/* local subsystem functions */
/* externally accessible functions */
Evas_Object *
e_widget_iconsel_add(Evas *evas, Evas_Object *icon, Evas_Coord minw, Evas_Coord minh, char **file)
{
Evas_Object *obj, *o;
E_Widget_Data *wd;
Evas_Coord mw, mh;
E_Manager *man;
obj = e_widget_add(evas);
e_widget_del_hook_set(obj, _e_wid_del_hook);
e_widget_focus_hook_set(obj, _e_wid_focus_hook);
e_widget_activate_hook_set(obj, _e_wid_activate_hook);
e_widget_disable_hook_set(obj, _e_wid_disable_hook);
wd = calloc(1, sizeof(E_Widget_Data));
wd->valptr = file;
e_widget_data_set(obj, wd);
man = e_manager_current_get();
if (!man) return NULL;
wd->con = e_container_current_get(man);
if (!wd->con) wd->con = e_container_number_get(man, 0);
if (!wd->con) return NULL;
o = edje_object_add(evas);
wd->o_button = o;
e_theme_edje_object_set(o, "base/theme/widgets",
"widgets/button");
edje_object_signal_callback_add(o, "click", "", _e_wid_signal_cb1, obj);
edje_object_part_text_set(o, "label", "");
evas_object_show(o);
e_widget_sub_object_add(obj, o);
evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN, _e_wid_focus_steal, obj);
e_widget_resize_object_set(obj, o);
if (icon)
{
wd->o_icon = icon;
edje_extern_object_min_size_set(icon, minw, minh);
evas_object_pass_events_set(icon, 1);
edje_object_part_swallow(wd->o_button, "icon_swallow", wd->o_icon);
edje_object_signal_emit(wd->o_button, "icon_visible", "");
edje_object_message_signal_process(wd->o_button);
evas_object_show(wd->o_icon);
e_widget_sub_object_add(obj, wd->o_icon);
}
edje_object_size_min_calc(wd->o_button, &mw, &mh);
e_widget_min_size_set(obj, mw, mh);
return obj;
}
Evas_Object *
e_widget_iconsel_add_from_file(Evas *evas, char *icon, Evas_Coord minw, Evas_Coord minh, char **file)
{
Evas_Object *obj, *o;
E_Widget_Data *wd;
Evas_Coord mw, mh;
obj = e_widget_add(evas);
e_widget_del_hook_set(obj, _e_wid_del_hook);
e_widget_focus_hook_set(obj, _e_wid_focus_hook);
e_widget_activate_hook_set(obj, _e_wid_activate_hook);
e_widget_disable_hook_set(obj, _e_wid_disable_hook);
wd = calloc(1, sizeof(E_Widget_Data));
wd->valptr = file;
e_widget_data_set(obj, wd);
o = edje_object_add(evas);
wd->o_button = o;
e_theme_edje_object_set(o, "base/theme/widgets",
"widgets/button");
edje_object_signal_callback_add(o, "click", "", _e_wid_signal_cb1, obj);
edje_object_part_text_set(o, "label", "");
evas_object_show(o);
e_widget_sub_object_add(obj, o);
evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN, _e_wid_focus_steal, obj);
e_widget_resize_object_set(obj, o);
if (icon)
{
o = edje_object_add(evas);
wd->o_icon = o;
e_util_edje_icon_set(o, icon);
evas_object_pass_events_set(icon, 1);
edje_object_part_swallow(wd->o_button, "icon_swallow", o);
edje_object_signal_emit(wd->o_button, "icon_visible", "");
edje_object_message_signal_process(wd->o_button);
evas_object_show(o);
e_widget_sub_object_add(obj, o);
}
edje_object_size_min_calc(wd->o_button, &mw, &mh);
e_widget_min_size_set(obj, mw, mh);
return obj;
}
static void
_e_wid_del_hook(Evas_Object *obj)
{
E_Widget_Data *wd;
wd = e_widget_data_get(obj);
free(wd);
}
static void
_e_wid_focus_hook(Evas_Object *obj)
{
E_Widget_Data *wd;
wd = e_widget_data_get(obj);
if (e_widget_focus_get(obj))
{
edje_object_signal_emit(wd->o_button, "focus_in", "");
evas_object_focus_set(wd->o_button, 1);
}
else
{
edje_object_signal_emit(wd->o_button, "focus_out", "");
evas_object_focus_set(wd->o_button, 0);
}
}
static void
_e_wid_activate_hook(Evas_Object *obj)
{
E_Widget_Data *wd;
E_Fileman *fileman;
E_Popup *popup;
E_Zone *zone;
E_Dialog *dia;
Evas_Object *table;
Evas_Object *button;
Evas *evas;
Evas_Object *ol;
Evas_Coord w, h;
wd = e_widget_data_get(obj);
dia = e_dialog_new(wd->con);
evas = dia->win->evas;
ol = e_widget_list_add(evas, 0, 1);
table = e_widget_frametable_add(evas, "Places", 0);
e_widget_frametable_object_append(table, e_widget_button_add(evas, "Home", "fileman/home", NULL,
NULL, NULL),
0, 0, 1, 1, 1, 0, 1, 0);
e_widget_frametable_object_append(table, e_widget_button_add(evas, " Desktop", "fileman/desktop", NULL,
NULL, NULL),
0, 1, 1, 1, 1, 0, 1, 0);
e_widget_frametable_object_append(table, e_widget_button_add(evas, " Icons", "fileman/folder", NULL,
NULL, NULL),
0, 2, 1, 1, 1, 0, 1, 0);
e_widget_list_object_append(ol, table, 1, 1, 0.0);
table = e_widget_frametable_add(evas, "Select File", 0);
e_widget_frametable_object_append(table, e_widget_fileman_add(evas, NULL),
0, 0, 4, 4, 1, 1, 1, 1);
e_widget_list_object_append(ol, table, 1, 1, 0.0);
e_widget_min_size_get(ol, &w, &h);
e_dialog_content_set(dia, ol, w, h);
e_dialog_title_set(dia, "Select File");
e_dialog_show(dia);
}
static void
_e_wid_active_hook_cb(E_Fileman *fileman, char *file, void *data)
{
char *ext;
Evas *evas;
E_Widget_Data *wd;
wd = e_widget_data_get(data);
ext = strrchr(file, '.');
if(!ext)
return;
if(strcasecmp(ext, ".png") && strcasecmp(ext, ".jpg") &&
strcasecmp(ext, ".jpeg"))
return;
e_icon_file_set(wd->o_icon, file);
E_FREE(*(wd->valptr));
*(wd->valptr) = strdup(file);
e_object_del(fileman);
}
static void
_e_wid_disable_hook(Evas_Object *obj)
{
E_Widget_Data *wd;
wd = e_widget_data_get(obj);
if (e_widget_disabled_get(obj))
edje_object_signal_emit(wd->o_button, "disabled", "");
else
edje_object_signal_emit(wd->o_button, "enabled", "");
}
static void
_e_wid_signal_cb1(void *data, Evas_Object *obj, const char *emission, const char *source)
{
e_widget_focus_steal(data);
_e_wid_activate_hook(data);
e_widget_change(data);
}
static void
_e_wid_focus_steal(void *data, Evas *e, Evas_Object *obj, void *event_info)
{
e_widget_focus_steal(data);
}

View File

@ -0,0 +1,13 @@
/*
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
*/
#ifdef E_TYPEDEFS
#else
#ifndef E_WIDGET_BUTTON_H
#define E_WIDGET_BUTTON_H
EAPI Evas_Object *e_widget_iconsel_add(Evas *evas, Evas_Object *icon, Evas_Coord minw, Evas_Coord minh, void (*func) (void *data, void *data2), void *data, void *data2);
EAPI Evas_Object *e_widget_iconsel_add_from_file(Evas *evas, char *icon, Evas_Coord minw, Evas_Coord minh, void (*func) (void *data, void *data2), void *data, void *data2);
#endif
#endif