From 6532ab7362bdbd9688ea1afeaa35efcfac242e05 Mon Sep 17 00:00:00 2001 From: codewarrior Date: Mon, 10 Oct 2005 10:14:49 +0000 Subject: [PATCH] - Start working on selections. - Add ability to have different icon states when they are clicked or higlighted. SVN revision: 17381 --- data/themes/default_fileman.edc | 58 +++++++++-- .../e17_icon_fileman_folder_clicked.png | Bin 0 -> 3382 bytes src/bin/e_fileman_smart.c | 97 ++++++++++++++++-- 3 files changed, 135 insertions(+), 20 deletions(-) create mode 100644 data/themes/images/e17_icon_fileman_folder_clicked.png diff --git a/data/themes/default_fileman.edc b/data/themes/default_fileman.edc index 4263c2f1a..e963d08ec 100644 --- a/data/themes/default_fileman.edc +++ b/data/themes/default_fileman.edc @@ -41,11 +41,56 @@ group { \ } \ } \ } \ + +#define FILEMAN_ICON_CLICKABLE(TYPE) \ +group { \ + name: "fileman/icons/"TYPE; \ + max: 64 64; \ + parts { \ + part { \ + name: "icon"; \ + mouse_events: 0; \ + description { \ + state: "default" 0.0; \ + aspect: 1.0 1.0; \ + max: 64 64; \ + image { \ + normal: "e17_icon_fileman_"TYPE".png"; \ + } \ + } \ + description { \ + state: "clicked" 0.0; \ + aspect: 1.0 1.0; \ + max: 64 64; \ + image { \ + normal: "e17_icon_fileman_"TYPE"_clicked.png"; \ + } \ + } \ + } \ + } \ + programs { \ + program { \ + name: "clicked"; \ + signal: "clicked"; \ + source: ""; \ + action: STATE_SET "clicked" 0.0; \ + target: "icon"; \ + } \ + program { \ + name: "unclicked"; \ + signal: "unclicked"; \ + source: ""; \ + action: STATE_SET "default" 0.0; \ + target: "icon"; \ + } \ + } \ +} \ images { image: "e17_fileman_bg.png" COMP; image: "e17_icon_fileman_folder.png" COMP; + image: "e17_icon_fileman_folder_clicked.png" COMP; image: "e17_icon_fileman_file.png" COMP; image: "e17_icon_fileman_pdf.png" COMP; image: "e17_icon_fileman_c.png" COMP; @@ -219,10 +264,6 @@ group { name: "icon_swallow"; type: SWALLOW; mouse_events: 1; - dragable { - x: 1 1 0; - y: 1 1 0; - } description { min: 48 48; max: 128 128; @@ -238,7 +279,6 @@ group { color: 0 0 0 255; } } - part { name: "icon_title"; type: TEXT; @@ -307,10 +347,10 @@ group { program { name: "button_click"; signal: "mouse,down,1"; - source: "icon_event"; + source: ""; action: SIGNAL_EMIT "clicked" ""; - } - } + } + } } @@ -482,7 +522,7 @@ group { } -FILEMAN_ICON("folder"); +FILEMAN_ICON_CLICKABLE("folder"); FILEMAN_ICON("file"); FILEMAN_ICON("pdf"); FILEMAN_ICON("c"); diff --git a/data/themes/images/e17_icon_fileman_folder_clicked.png b/data/themes/images/e17_icon_fileman_folder_clicked.png new file mode 100644 index 0000000000000000000000000000000000000000..6f9fb0db8d8ab988ced66da64114626b41076243 GIT binary patch literal 3382 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 M07*qoM6N<$f_1J_O8@`> literal 0 HcmV?d00001 diff --git a/src/bin/e_fileman_smart.c b/src/bin/e_fileman_smart.c index 7e53083ad..e0d069abc 100644 --- a/src/bin/e_fileman_smart.c +++ b/src/bin/e_fileman_smart.c @@ -65,6 +65,11 @@ struct _E_Fileman_File Evas_Object *bg; Evas_List *objects; } prop; + + struct { + unsigned char clicked : 1; + unsigned char selected : 1; + } state; void *data; }; @@ -148,8 +153,12 @@ struct _E_Fileman_Smart_Data struct { int w; int h; - } max; + } max; + struct { + Evas_List *files; + E_Fileman_File *current_file; + } selection; }; static void _e_fm_smart_add(Evas_Object *object); @@ -181,6 +190,8 @@ static Evas_Object *_e_fm_file_icon_mime_get (E_Fileman_File *file); static Evas_Object *_e_fm_file_icon_get (E_Fileman_File *file); static void _e_fm_file_icon_mouse_down_cb (void *data, Evas *e, Evas_Object *obj, void *event_info); static void _e_fm_file_icon_mouse_up_cb (void *data, Evas *e, Evas_Object *obj, void *event_info); +static void _e_fm_file_icon_mouse_in_cb (void *data, Evas *e, Evas_Object *obj, void *event_info); +static void _e_fm_file_icon_mouse_out_cb (void *data, Evas *e, Evas_Object *obj, void *event_info); static void _e_fm_file_menu_open (void *data, E_Menu *m, E_Menu_Item *mi); static void _e_fm_file_menu_copy (void *data, E_Menu *m, E_Menu_Item *mi); static void _e_fm_file_menu_cut (void *data, E_Menu *m, E_Menu_Item *mi); @@ -487,7 +498,9 @@ _e_fm_redraw_update (E_Fileman_Smart_Data *sd) evas_object_event_callback_add (file->event, EVAS_CALLBACK_MOUSE_DOWN, _e_fm_file_icon_mouse_down_cb, file); evas_object_event_callback_add (file->event, EVAS_CALLBACK_MOUSE_UP, _e_fm_file_icon_mouse_up_cb, file); - evas_object_repeat_events_set(file->event, FALSE); + evas_object_event_callback_add (file->event, EVAS_CALLBACK_MOUSE_IN, _e_fm_file_icon_mouse_in_cb, file); + evas_object_event_callback_add (file->event, EVAS_CALLBACK_MOUSE_OUT, _e_fm_file_icon_mouse_out_cb, file); + evas_object_repeat_events_set(file->event, TRUE); sd->files = evas_list_append (sd->files, file); @@ -863,13 +876,14 @@ _e_fm_redraw_new (E_Fileman_Smart_Data *sd) evas_object_event_callback_add (file->event, EVAS_CALLBACK_MOUSE_DOWN, _e_fm_file_icon_mouse_down_cb, file); evas_object_event_callback_add (file->event, EVAS_CALLBACK_MOUSE_UP, _e_fm_file_icon_mouse_up_cb, file); + evas_object_event_callback_add (file->event, EVAS_CALLBACK_MOUSE_IN, _e_fm_file_icon_mouse_in_cb, file); + evas_object_event_callback_add (file->event, EVAS_CALLBACK_MOUSE_OUT, _e_fm_file_icon_mouse_out_cb, file); evas_object_repeat_events_set(file->event, FALSE); sd->files = evas_list_append (sd->files, file); sd->file_offset++; sd->visible_files++; - printf("visible files: %d\n", sd->visible_files); dirs = dirs->next; } } @@ -1010,7 +1024,10 @@ _e_fm_dir_set (E_Fileman_Smart_Data *sd, const char *dir) sd->dir = calloc (/*strlen(dir) + 1*/PATH_MAX, sizeof (char)); snprintf (sd->dir, PATH_MAX/*strlen(dir) + 1*/, "%s", dir); - + + if(sd->selection.current_file) + sd->selection.current_file = NULL; + _e_fm_redraw_new (sd); } @@ -1052,7 +1069,9 @@ _e_fm_files_free (E_Fileman_Smart_Data *sd) sd->files = NULL; sd->drag.file = NULL; - //sd = NULL; + + if(sd->selection.current_file) + sd->selection.current_file = NULL; } static void @@ -1868,17 +1887,30 @@ static void _e_fm_mouse_down_cb (void *data, Evas *e, Evas_Object *obj, void *event_info) { E_Fileman_Smart_Data *sd; - Evas_Event_Mouse_Down *ev; + Evas_Event_Mouse_Down *ev; + E_Menu *mn; + E_Menu_Item *mi; + int x, y, w, h; + ev = (Evas_Event_Mouse_Down *)event_info; sd = data; - if (ev->button == 3) + switch(ev->button) { - E_Menu *mn; - E_Menu_Item *mi; - int x, y, w, h; + case 1: + /* todo: multiple selections */ + if(sd->selection.current_file) + { + edje_object_signal_emit(sd->selection.current_file->icon, "unclicked", ""); + edje_object_signal_emit(sd->selection.current_file->icon_img, "unclicked", ""); + sd->selection.current_file->state.clicked = 0; + } + + break; + + case 3: if (!sd->win) return; mn = e_menu_new (); @@ -1968,6 +2000,7 @@ _e_fm_mouse_down_cb (void *data, Evas *e, Evas_Object *obj, void *event_info) ev->output.x + x, ev->output.y + y, 1, 1, E_MENU_POP_DIRECTION_DOWN,ev->timestamp); _e_fileman_fake_mouse_up_all_later (sd->win->evas); + break; } } @@ -2043,7 +2076,23 @@ _e_fm_file_icon_mouse_down_cb (void *data, Evas *e, Evas_Object *obj, void *even file->sd->drag.y = -1; file->sd->drag.x = -1; file->sd->drag.file = file; - printf("drag file: %s\n", file->dir_entry->d_name); + printf("drag file: %s\n", file->dir_entry->d_name); + + if(!file->state.clicked) + { + /* todo multiple selection with control or shift */ + if(file->sd->selection.current_file) + { + edje_object_signal_emit(file->sd->selection.current_file->icon, "unclicked", ""); + edje_object_signal_emit(file->sd->selection.current_file->icon_img, "unclicked", ""); + file->sd->selection.current_file->state.clicked = 0; + } + + edje_object_signal_emit(file->icon, "clicked", ""); + edje_object_signal_emit(file->icon_img, "clicked", ""); + file->sd->selection.current_file = file; + file->state.clicked = 1; + } } } @@ -2127,6 +2176,32 @@ _e_fm_file_icon_mouse_down_cb (void *data, Evas *e, Evas_Object *obj, void *even } } +static void +_e_fm_file_icon_mouse_in_cb (void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + E_Fileman_File *file; + Evas_Event_Mouse_Move *ev; + + ev = (Evas_Event_Mouse_Move *)event_info; + file = data; + + edje_object_signal_emit(file->icon, "hilight", ""); + edje_object_signal_emit(file->icon_img, "hilight", ""); +} + +static void +_e_fm_file_icon_mouse_out_cb (void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + E_Fileman_File *file; + Evas_Event_Mouse_Move *ev; + + ev = (Evas_Event_Mouse_Move *)event_info; + file = data; + + edje_object_signal_emit(file->icon, "default", ""); + edje_object_signal_emit(file->icon_img, "default", ""); +} + static void _e_fm_menu_arrange_cb (void *data, E_Menu *m, E_Menu_Item *mi) {