forked from enlightenment/enlightenment
Show progress from the slave process in every efm windows.
All the graphics need to be done! For now just a red rectangle, 5 labels and a really simple progress bar. ... (toma: ping) You can change the position of the info box from e_fwin.c line 329. A configuration will come soon.... The configuration will also let you choose on witch window you want to see the info box (every window, just on the source of copy operation, just on the dest or both) SVN revision: 39416
This commit is contained in:
parent
4d1fea4705
commit
ea90154e61
|
@ -11260,6 +11260,154 @@ collections { /* begin the collection of edje groups that are in this file */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
group { name: "e/fileman/default/progress";
|
||||||
|
min: 200 70;
|
||||||
|
parts {
|
||||||
|
part { name: "bg";
|
||||||
|
type: RECT;
|
||||||
|
mouse_events: 0;
|
||||||
|
description { state: "default" 0.0;
|
||||||
|
rel1.offset: 3 3;
|
||||||
|
rel2.offset: -4 -4;
|
||||||
|
color: 255 0 0 200;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
part { name: "gauge_bg";
|
||||||
|
type: RECT;
|
||||||
|
mouse_events: 0;
|
||||||
|
description { state: "default" 0.0;
|
||||||
|
rel1.to: "bg";
|
||||||
|
rel1.offset: 5 5;
|
||||||
|
rel2.to: "bg";
|
||||||
|
rel2.relative: 0.0 1.0;
|
||||||
|
rel2.offset: 15 -7;
|
||||||
|
color: 155 155 155 200;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
part { name: "e.gauge.bar";
|
||||||
|
mouse_events: 0;
|
||||||
|
type: RECT;
|
||||||
|
description { state: "default" 0.0;
|
||||||
|
min: 10 0;
|
||||||
|
max: 10 110;
|
||||||
|
color: 255 255 255 255;
|
||||||
|
rel1 {
|
||||||
|
to: "gauge_bg";
|
||||||
|
offset: 2 2;
|
||||||
|
}
|
||||||
|
rel2 {
|
||||||
|
to: "gauge_bg";
|
||||||
|
offset: -3 -3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dragable {
|
||||||
|
x: 0 0 0;
|
||||||
|
y: -1 1 0;
|
||||||
|
confine:"gauge_bg";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
part { name: "e.text.label1";
|
||||||
|
type: TEXT;
|
||||||
|
mouse_events: 0;
|
||||||
|
scale: 1;
|
||||||
|
description { state: "default" 0.0;
|
||||||
|
align: 0.5 0.0;
|
||||||
|
rel1.to: "gauge_bg";
|
||||||
|
rel1.relative: 1.0 0.0;
|
||||||
|
rel1.offset: 5 0;
|
||||||
|
rel2.to: "bg";
|
||||||
|
color: 0 0 0 255;
|
||||||
|
text {
|
||||||
|
font: "Sans";
|
||||||
|
size: 10;
|
||||||
|
min: 1 0;
|
||||||
|
align: 0.0 0.0;
|
||||||
|
text_class: "fileman_icon";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
part { name: "e.text.label2";
|
||||||
|
type: TEXT;
|
||||||
|
mouse_events: 0;
|
||||||
|
scale: 1;
|
||||||
|
description { state: "default" 0.0;
|
||||||
|
align: 0.5 0.0;
|
||||||
|
rel1.to: "gauge_bg";
|
||||||
|
rel1.relative: 1.0 0.2;
|
||||||
|
rel1.offset: 5 0;
|
||||||
|
rel2.to: "bg";
|
||||||
|
color: 0 0 0 255;
|
||||||
|
text {
|
||||||
|
font: "Sans";
|
||||||
|
size: 10;
|
||||||
|
min: 1 0;
|
||||||
|
align: 0.0 0.0;
|
||||||
|
text_class: "fileman_icon";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
part { name: "e.text.label3";
|
||||||
|
type: TEXT;
|
||||||
|
mouse_events: 0;
|
||||||
|
scale: 1;
|
||||||
|
description { state: "default" 0.0;
|
||||||
|
align: 0.5 0.0;
|
||||||
|
rel1.to: "gauge_bg";
|
||||||
|
rel1.relative: 1.0 0.4;
|
||||||
|
rel1.offset: 5 0;
|
||||||
|
rel2.to: "bg";
|
||||||
|
color: 0 0 0 255;
|
||||||
|
text {
|
||||||
|
font: "Sans";
|
||||||
|
size: 10;
|
||||||
|
min: 1 0;
|
||||||
|
align: 0.0 0.0;
|
||||||
|
text_class: "fileman_icon";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
part { name: "e.text.label4";
|
||||||
|
type: TEXT;
|
||||||
|
mouse_events: 0;
|
||||||
|
scale: 1;
|
||||||
|
description { state: "default" 0.0;
|
||||||
|
align: 0.5 0.0;
|
||||||
|
rel1.to: "gauge_bg";
|
||||||
|
rel1.relative: 1.0 0.6;
|
||||||
|
rel1.offset: 5 0;
|
||||||
|
rel2.to: "bg";
|
||||||
|
color: 0 0 0 255;
|
||||||
|
text {
|
||||||
|
font: "Sans";
|
||||||
|
size: 10;
|
||||||
|
min: 1 0;
|
||||||
|
align: 0.0 0.0;
|
||||||
|
text_class: "fileman_icon";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
part { name: "e.text.label5";
|
||||||
|
type: TEXT;
|
||||||
|
mouse_events: 0;
|
||||||
|
scale: 1;
|
||||||
|
description { state: "default" 0.0;
|
||||||
|
align: 0.5 0.0;
|
||||||
|
rel1.to: "gauge_bg";
|
||||||
|
rel1.relative: 1.0 0.8;
|
||||||
|
rel1.offset: 5 0;
|
||||||
|
rel2.to: "bg";
|
||||||
|
color: 0 0 0 255;
|
||||||
|
text {
|
||||||
|
font: "Sans";
|
||||||
|
size: 10;
|
||||||
|
min: 1 0;
|
||||||
|
align: 0.0 0.0;
|
||||||
|
text_class: "fileman_icon";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
group { name: "e/fileman/default/scrollframe";
|
group { name: "e/fileman/default/scrollframe";
|
||||||
images {
|
images {
|
||||||
image: "inset_sunk.png" COMP;
|
image: "inset_sunk.png" COMP;
|
||||||
|
|
|
@ -15,7 +15,7 @@ INCLUDES = -I. \
|
||||||
-I$(top_srcdir)/src/bin \
|
-I$(top_srcdir)/src/bin \
|
||||||
-I$(top_srcdir)/src/lib \
|
-I$(top_srcdir)/src/lib \
|
||||||
-I$(top_srcdir)/src/modules \
|
-I$(top_srcdir)/src/modules \
|
||||||
@e_cflags@
|
@e_cflags@ -Wall
|
||||||
pkgdir = $(libdir)/enlightenment/modules/$(MODULE)/$(MODULE_ARCH)
|
pkgdir = $(libdir)/enlightenment/modules/$(MODULE)/$(MODULE_ARCH)
|
||||||
pkg_LTLIBRARIES = module.la
|
pkg_LTLIBRARIES = module.la
|
||||||
module_la_SOURCES = e_mod_main.c \
|
module_la_SOURCES = e_mod_main.c \
|
||||||
|
|
|
@ -28,6 +28,7 @@ struct _E_Fwin
|
||||||
Evas_Object *scrollframe_obj;
|
Evas_Object *scrollframe_obj;
|
||||||
Evas_Object *fm_obj;
|
Evas_Object *fm_obj;
|
||||||
Evas_Object *bg_obj;
|
Evas_Object *bg_obj;
|
||||||
|
Evas_Object *box_obj;
|
||||||
E_Fwin_Apps_Dialog *fad;
|
E_Fwin_Apps_Dialog *fad;
|
||||||
|
|
||||||
Evas_Object *under_obj;
|
Evas_Object *under_obj;
|
||||||
|
@ -75,6 +76,8 @@ static void _e_fwin_cb_delete(E_Win *win);
|
||||||
static void _e_fwin_cb_move(E_Win *win);
|
static void _e_fwin_cb_move(E_Win *win);
|
||||||
static void _e_fwin_cb_resize(E_Win *win);
|
static void _e_fwin_cb_resize(E_Win *win);
|
||||||
static void _e_fwin_deleted(void *data, Evas_Object *obj, void *event_info);
|
static void _e_fwin_deleted(void *data, Evas_Object *obj, void *event_info);
|
||||||
|
static int _e_fwin_ipc_progress_data(void *data __UNUSED__, int type __UNUSED__, void *event);
|
||||||
|
static void _e_fwin_progress_update(E_Fwin *fwin, int slave_id, int percent, int seconds, size_t done, size_t total, char *src, char *dst);
|
||||||
static const char *_e_fwin_custom_file_path_eval(E_Fwin *fwin, Efreet_Desktop *ef, const char *prev_path, const char *key);
|
static const char *_e_fwin_custom_file_path_eval(E_Fwin *fwin, Efreet_Desktop *ef, const char *prev_path, const char *key);
|
||||||
static void _e_fwin_changed(void *data, Evas_Object *obj, void *event_info);
|
static void _e_fwin_changed(void *data, Evas_Object *obj, void *event_info);
|
||||||
static void _e_fwin_selected(void *data, Evas_Object *obj, void *event_info);
|
static void _e_fwin_selected(void *data, Evas_Object *obj, void *event_info);
|
||||||
|
@ -112,6 +115,7 @@ static int _e_fwin_dlg_cb_desk_list_sort(const void *data1, const void *data2);
|
||||||
|
|
||||||
/* local subsystem globals */
|
/* local subsystem globals */
|
||||||
static Eina_List *fwins = NULL;
|
static Eina_List *fwins = NULL;
|
||||||
|
static Ecore_Event_Handler *ipc = NULL;
|
||||||
|
|
||||||
/* externally accessible functions */
|
/* externally accessible functions */
|
||||||
EAPI int
|
EAPI int
|
||||||
|
@ -127,6 +131,7 @@ e_fwin_shutdown(void)
|
||||||
{
|
{
|
||||||
E_Fwin *fwin;
|
E_Fwin *fwin;
|
||||||
|
|
||||||
|
if (ipc) ecore_event_handler_del(ipc); //FIXME this is never called
|
||||||
EINA_LIST_FREE(fwins, fwin)
|
EINA_LIST_FREE(fwins, fwin)
|
||||||
e_object_del(E_OBJECT(fwin));
|
e_object_del(E_OBJECT(fwin));
|
||||||
|
|
||||||
|
@ -311,6 +316,18 @@ e_fwin_zone_find(E_Zone *zone)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EAPI void
|
||||||
|
e_fwin_progress_update_all(int slave_id, int percent, int seconds, size_t done, size_t total, char *src, char *dst)
|
||||||
|
{
|
||||||
|
Eina_List *l;
|
||||||
|
E_Fwin *fwin;
|
||||||
|
|
||||||
|
EINA_LIST_FOREACH(fwins, l, fwin)
|
||||||
|
_e_fwin_progress_update(fwin, slave_id, percent, seconds, done, total, src, dst);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define CONF_ALIGN_X 1.0
|
||||||
|
#define CONF_ALIGN_Y 1.0
|
||||||
/* local subsystem functions */
|
/* local subsystem functions */
|
||||||
static E_Fwin *
|
static E_Fwin *
|
||||||
_e_fwin_new(E_Container *con, const char *dev, const char *path)
|
_e_fwin_new(E_Container *con, const char *dev, const char *path)
|
||||||
|
@ -338,6 +355,12 @@ _e_fwin_new(E_Container *con, const char *dev, const char *path)
|
||||||
evas_object_show(o);
|
evas_object_show(o);
|
||||||
fwin->bg_obj = o;
|
fwin->bg_obj = o;
|
||||||
|
|
||||||
|
o = evas_object_box_add(e_win_evas_get(fwin->win));
|
||||||
|
evas_object_box_layout_set(o, evas_object_box_layout_vertical, NULL, NULL);
|
||||||
|
evas_object_box_align_set(o, CONF_ALIGN_X, CONF_ALIGN_Y);
|
||||||
|
evas_object_show(o);
|
||||||
|
fwin->box_obj = o;
|
||||||
|
|
||||||
o = e_fm2_add(e_win_evas_get(fwin->win));
|
o = e_fm2_add(e_win_evas_get(fwin->win));
|
||||||
fwin->fm_obj = o;
|
fwin->fm_obj = o;
|
||||||
_e_fwin_config_set(fwin);
|
_e_fwin_config_set(fwin);
|
||||||
|
@ -424,6 +447,9 @@ _e_fwin_new(E_Container *con, const char *dev, const char *path)
|
||||||
eina_stringshare_add("system-file-manager");
|
eina_stringshare_add("system-file-manager");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!ipc)
|
||||||
|
ipc = ecore_event_handler_add(ECORE_IPC_EVENT_CLIENT_DATA,
|
||||||
|
_e_fwin_ipc_progress_data, NULL);
|
||||||
return fwin;
|
return fwin;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -523,6 +549,8 @@ _e_fwin_cb_resize(E_Win *win)
|
||||||
_e_fwin_toolbar_resize(fwin);
|
_e_fwin_toolbar_resize(fwin);
|
||||||
else
|
else
|
||||||
evas_object_resize(fwin->scrollframe_obj, fwin->win->w, fwin->win->h);
|
evas_object_resize(fwin->scrollframe_obj, fwin->win->w, fwin->win->h);
|
||||||
|
if (fwin->box_obj)
|
||||||
|
evas_object_resize(fwin->box_obj, fwin->win->w, fwin->win->h);
|
||||||
}
|
}
|
||||||
else if (fwin->zone)
|
else if (fwin->zone)
|
||||||
evas_object_resize(fwin->scrollframe_obj, fwin->zone->w, fwin->zone->h);
|
evas_object_resize(fwin->scrollframe_obj, fwin->zone->w, fwin->zone->h);
|
||||||
|
@ -538,6 +566,101 @@ _e_fwin_deleted(void *data, Evas_Object *obj, void *event_info)
|
||||||
e_object_del(E_OBJECT(fwin));
|
e_object_del(E_OBJECT(fwin));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
_e_fwin_ipc_progress_data(void *data __UNUSED__, int type __UNUSED__, void *event)
|
||||||
|
{
|
||||||
|
Ecore_Ipc_Event_Client_Data *e = event;
|
||||||
|
int percent, seconds;
|
||||||
|
size_t done, total;
|
||||||
|
char *src = NULL;
|
||||||
|
char *dst = NULL;
|
||||||
|
void *p;
|
||||||
|
|
||||||
|
if (!(e->major == E_IPC_DOMAIN_FM && e->minor == E_FM_OP_PROGRESS))
|
||||||
|
return 0;
|
||||||
|
if (!e->data) return 0;
|
||||||
|
|
||||||
|
p = e->data;
|
||||||
|
#define UP(value, type) (value) = *(type *)p; p += sizeof(type)
|
||||||
|
UP(percent, int);
|
||||||
|
UP(seconds, int);
|
||||||
|
UP(done, size_t);
|
||||||
|
UP(total, size_t);
|
||||||
|
#undef UP
|
||||||
|
src = p;
|
||||||
|
dst = p + strlen(src) + 1;
|
||||||
|
//printf("%s:%s(%d) Progress from slave #%d:\n\t%d%% done,\n\t%d seconds left,\n\t%d done,\n\t%d total,\n\tsrc = %s,\n\tdst = %s.\n", __FILE__, __FUNCTION__, __LINE__, e->ref, percent, seconds, done, total, src, dst);
|
||||||
|
e_fwin_progress_update_all(e->ref, percent, seconds, done, total, src, dst);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_e_fwin_progress_update(E_Fwin *fwin, int slave_id, int percent, int seconds, size_t done, size_t total, char *src, char *dst)
|
||||||
|
{
|
||||||
|
Evas_Object *o = NULL;
|
||||||
|
Eina_List *l;
|
||||||
|
char buf[PATH_MAX];
|
||||||
|
char *dir;
|
||||||
|
int mw, mh, id;
|
||||||
|
|
||||||
|
if (!fwin || !fwin->box_obj) return;
|
||||||
|
|
||||||
|
// Search for existing progress object
|
||||||
|
EINA_LIST_FOREACH(evas_object_box_children_get(fwin->box_obj), l, o)
|
||||||
|
{
|
||||||
|
id = (int)evas_object_data_get(o, "e_fm_prog_id");
|
||||||
|
if (id == slave_id)
|
||||||
|
break;
|
||||||
|
else
|
||||||
|
o = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Not found. Create a new one
|
||||||
|
if (!o)
|
||||||
|
{
|
||||||
|
o = edje_object_add(e_win_evas_get(fwin->win));
|
||||||
|
e_theme_edje_object_set(o, "base/theme/fileman",
|
||||||
|
"e/fileman/default/progress");
|
||||||
|
evas_object_data_set(o, "e_fm_prog_id", (void*)slave_id);
|
||||||
|
edje_object_size_min_get(o, &mw, &mh);
|
||||||
|
evas_object_resize(o, mw * e_scale, mh * e_scale);
|
||||||
|
//evas_object_event_callback_add(o, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
|
||||||
|
// _size_hint_changed_cb, NULL);
|
||||||
|
evas_object_show(o);
|
||||||
|
|
||||||
|
// Append the element to the box
|
||||||
|
evas_object_box_append(fwin->box_obj, o);
|
||||||
|
evas_object_size_hint_align_set(o, CONF_ALIGN_X, CONF_ALIGN_Y);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update element
|
||||||
|
edje_object_part_drag_size_set(o, "e.gauge.bar", 0.0, ((double)(percent)) / 100);
|
||||||
|
|
||||||
|
snprintf(buf, PATH_MAX, "Progress from slave #%d", slave_id);
|
||||||
|
edje_object_part_text_set(o, "e.text.label1", buf);
|
||||||
|
snprintf(buf, PATH_MAX, _("Done %ld / %ld byte"), done, total);
|
||||||
|
edje_object_part_text_set(o, "e.text.label2", buf);
|
||||||
|
if (percent < 100)
|
||||||
|
snprintf(buf, PATH_MAX, _("Done %d%% - left %d sec"), percent, seconds);
|
||||||
|
else
|
||||||
|
snprintf(buf, PATH_MAX, _("Complete"));
|
||||||
|
edje_object_part_text_set(o, "e.text.label3", buf);
|
||||||
|
edje_object_part_text_set(o, "e.text.label4", ecore_file_file_get(src));
|
||||||
|
dir = ecore_file_dir_get(dst);
|
||||||
|
edje_object_part_text_set(o, "e.text.label5", dir);
|
||||||
|
E_FREE(dir);
|
||||||
|
|
||||||
|
evas_object_raise(fwin->box_obj); //TODO use layer??
|
||||||
|
|
||||||
|
if (percent == 100) //TODO delay hide by some seconds
|
||||||
|
{
|
||||||
|
// Delete the element
|
||||||
|
evas_object_box_remove(fwin->box_obj, o);
|
||||||
|
evas_object_del(o);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static const char *
|
static const char *
|
||||||
_e_fwin_custom_file_path_eval(E_Fwin *fwin, Efreet_Desktop *ef, const char *prev_path, const char *key)
|
_e_fwin_custom_file_path_eval(E_Fwin *fwin, Efreet_Desktop *ef, const char *prev_path, const char *key)
|
||||||
{
|
{
|
||||||
|
|
|
@ -15,6 +15,7 @@ EAPI void e_fwin_zone_shutdown (E_Zone *zone);
|
||||||
EAPI void e_fwin_all_unsel (void *data);
|
EAPI void e_fwin_all_unsel (void *data);
|
||||||
EAPI void e_fwin_reload_all (void);
|
EAPI void e_fwin_reload_all (void);
|
||||||
EAPI int e_fwin_zone_find (E_Zone *zone);
|
EAPI int e_fwin_zone_find (E_Zone *zone);
|
||||||
|
EAPI void e_fwin_progress_update_all(int slave_id, int percent, int seconds, size_t done, size_t total, char *src, char *dst);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -100,7 +100,6 @@ e_modapi_init(E_Module *m)
|
||||||
|
|
||||||
/* FIXME: add system event for new zone creation, and on creation, add an fwin to the zone */
|
/* FIXME: add system event for new zone creation, and on creation, add an fwin to the zone */
|
||||||
|
|
||||||
|
|
||||||
e_fileman_dbus_init();
|
e_fileman_dbus_init();
|
||||||
|
|
||||||
return m;
|
return m;
|
||||||
|
@ -315,7 +314,6 @@ _e_mod_menu_generate(void *data, E_Menu *m)
|
||||||
E_Menu_Item *mi;
|
E_Menu_Item *mi;
|
||||||
E_Volume *vol;
|
E_Volume *vol;
|
||||||
const Eina_List *l;
|
const Eina_List *l;
|
||||||
char buf[PATH_MAX];
|
|
||||||
|
|
||||||
/* Home */
|
/* Home */
|
||||||
mi = e_menu_item_new(m);
|
mi = e_menu_item_new(m);
|
||||||
|
|
Loading…
Reference in New Issue