From 2842e5456801e3c4ee21604b4dfd552ff4a09899 Mon Sep 17 00:00:00 2001 From: codewarrior Date: Mon, 10 Oct 2005 12:22:29 +0000 Subject: [PATCH] Add multiple selections using control+click. SVN revision: 17384 --- data/themes/default_fileman.edc | 3 +- .../images/e17_icon_fileman_file_clicked.png | Bin 0 -> 2112 bytes src/bin/e_fileman_smart.c | 115 +++++++++++++----- 3 files changed, 88 insertions(+), 30 deletions(-) create mode 100644 data/themes/images/e17_icon_fileman_file_clicked.png diff --git a/data/themes/default_fileman.edc b/data/themes/default_fileman.edc index e963d08ec..14b94f3dd 100644 --- a/data/themes/default_fileman.edc +++ b/data/themes/default_fileman.edc @@ -92,6 +92,7 @@ images 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_file_clicked.png" COMP; image: "e17_icon_fileman_pdf.png" COMP; image: "e17_icon_fileman_c.png" COMP; image: "e17_icon_fileman_h.png" COMP; @@ -523,7 +524,7 @@ group { FILEMAN_ICON_CLICKABLE("folder"); -FILEMAN_ICON("file"); +FILEMAN_ICON_CLICKABLE("file"); FILEMAN_ICON("pdf"); FILEMAN_ICON("c"); FILEMAN_ICON("h"); diff --git a/data/themes/images/e17_icon_fileman_file_clicked.png b/data/themes/images/e17_icon_fileman_file_clicked.png new file mode 100644 index 0000000000000000000000000000000000000000..975bc745e813ca1666cfd409752b931b87ce3226 GIT binary patch literal 2112 zcmV-G2*3AX_KO~ zSV}8})+j}bP|CtqSeC2RXriFe)DUfK{bKx3wODB^-P_DLv$vT!=ghqC>xVgWc3F12 z3%jEjd6Sdu&h9+>|2@zDdER&4h3o73`u|>{3Ndw+<5vnm1AKnL*Qu$k#T@GAcjl3* zgUnT6eb>$3ptiP#hQ=rW`CI`rZIUj$!|Q`Ts~SXbF2uLp@+b>#PBEMwCOecR6bg|W zE|8p`AZEu1iZHKcPwQ$x%r>C@@&`84nrOyMXX!ED=J(bK|A!CV^BvqbVPtreH!uFB zDwQy1UBY01L2HN$={G9kMdkUyk2Yhbvoy?$60ciWl^&Qiz(A&-i=%Jxr@^03mR)h` z{IfW=Lrc7c+hcc5oKpYw9uU9H9MaR-(RGW|*40oKXt?$&FwQdXxe7U(@IvF71ekV0 zMH?by(iwj9=dNq7iKiW}HzgSz$zc_HuFWQ%O8lx@x3OsP`>^v4|LXncR84+O0_at@ zZsUVX-cKQKbKxIvbI$Cp+D=@R3bZDg$c+>@|HfPVD!sp|XQ8L`*E&S9GQmGWF`ALG|5a_Zd$97OsQE-|oa!Q(N{~#Y2-k#ATBDRF8tsd(01Rda z5kg=U-}O&QLI}d4FgMFepE_uXC|d+5iAK5Y zBTI=yqhn&VLP~jw*OeXvsARRWmMy+x%Iy0L%IhBwqF5}F&*$m6*h7DBKTmAhI%5zq z@h+$PfCzAw10pIgVE2NTR)|n*Z%NF0kr(0IxssgWOPfux~3WP@c5U%Uux-O%` zqofDYSQ(S8GXU|M_{=M3u}q5G_&u>KFk4=t(&$^+3bD=&b)FKA<7xbq)k?~eHDPt<1dj& z#%WE)35{=NF1L@?nvZ>W832F$>uYGO5#qg%LP7|XQj|(1T*t+6obqPqO*+SRFf%4r z#^lM(PhM7$Nt?K-xf!J-8PjCV@_PU{cCP<_bgu~&>CQ@Z1(^{8pG7drr;fo(X0F*3Oz;PU0*QHb};kqueByn9AD`Szh zEVggiK3?l>KyD(yEkHdG0sc_2P^>wI)|#xDW&MhEmw?2RaYCW8e=B8IS|Jcv#^Iu4E}zEmnvC=|%_XUJqS?0kF&0AE?VoJcf6=ktdEJ_|S#0UCi? zAnH9n$f0AM#F}FW1eRs7{_Zl!fukM76Ror+;{*Z$N~Kb{)%BQ_gb)Zr5HJD=L!g!R zg-avMfVS0bL>i*y7y*Nh-5mg50Hm1YXb}KvfVxRR zj(5`3+yoj-)8yV2>j8M-@P1n3t+d2jFbw08kqeh*U!#5TvLum8V&`oJ`Ul7ir2S@X zTir%|v>vU?r`!{r$16I&BhN`;v*d0@@`0PNcL9I@s`8e=hxfPs_}trX>13btdDwX$S0mY?zVb?wwe>OpJr zxx!=_uLv&yqd;EF@W3}M$bqg78su zWrx`D_|tyI>!bA;hCx1;=U7Mgbiyl-eI*~bX9Tjhb1%_o10`7^lg_Yt<2M1=y7LL@ z>gpI79_E>C&y=Uin&m_rq8I^#{Aix;j-xXbUhrNoUCoWbj6inp|31-Z1SutE#^PI# zZ1DrMuWhG38bJsskf1U-m(KoVF4ECoJMxpvw9-R&CCtL|H^E3W}x1nvYr2Yd$jr1!o>UYvPe z+~8FAOJa^erme`hjB79B&TKMXja##+KpMO!0)&7fkOM}%=c=p{sM3X*s_c}N3da+S qC*JVHT7U@*0{IDN{p;(0V*MKtw73)k3L!!O0000 /* TODO: + * - checking wether events belong to us (ecore events) + * * - scrolling * * - we need a redraw function that will just re-arrange and not do @@ -178,6 +180,9 @@ static void _e_fm_redraw_new (E_Fileman_Smart_Data *sd); static void _e_fm_redraw_update (E_Fileman_Smart_Data *sd); static void _e_fm_size_calc (E_Fileman_Smart_Data *sd); static void _e_fm_redraw (E_Fileman_Smart_Data *sd); +static void _e_fm_selections_clear(E_Fileman_Smart_Data *sd); +static void _e_fm_selections_add(E_Fileman_File *file); +static void _e_fm_selections_del(E_Fileman_File *file); static void _e_fm_files_free (E_Fileman_Smart_Data *sd); static char *_e_fm_file_stripext(char *path); static Evas_Bool _e_fm_file_can_preview (E_Fileman_File *file); @@ -592,7 +597,7 @@ _e_fm_smart_add(Evas_Object *object) sd->event_handlers = evas_list_append (sd->event_handlers, ecore_event_handler_add(ECORE_X_EVENT_MOUSE_MOVE, _e_fm_mouse_move_cb, - sd)); + sd)); evas_object_smart_data_set(object, sd); dir = get_current_dir_name(); @@ -1008,6 +1013,58 @@ _e_fm_redraw (E_Fileman_Smart_Data *sd) } } +static void +_e_fm_selections_clear(E_Fileman_Smart_Data *sd) +{ + Evas_List *l; + + for (l = sd->selection.files; l; l = l->next) + { + E_Fileman_File *file; + + file = l->data; + if(!file) continue; + edje_object_signal_emit(file->icon, "unclicked", ""); + edje_object_signal_emit(file->icon_img, "unclicked", ""); + file->state.clicked = 0; + file->state.selected = 0; + } + + sd->selection.files = evas_list_free(sd->selection.files); + + if(sd->selection.current_file) + { + sd->selection.files = NULL; + sd->selection.current_file = NULL; + } +} + +static void +_e_fm_selections_add(E_Fileman_File *file) +{ + if(!file) + return; + + 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; + file->sd->selection.files = evas_list_append(file->sd->selection.files, file); +} + +static void +_e_fm_selections_del(E_Fileman_File *file) +{ + if(!file) + return; + + edje_object_signal_emit(file->icon, "unclicked", ""); + edje_object_signal_emit(file->icon_img, "unclicked", ""); + file->state.clicked = 0; + file->sd->selection.files = evas_list_remove(file->sd->selection.files, file); + file->sd->selection.current_file = evas_list_nth(file->sd->selection.files, 0); +} + static void _e_fm_dir_set (E_Fileman_Smart_Data *sd, const char *dir) { @@ -1025,8 +1082,7 @@ _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_selections_clear(sd); _e_fm_redraw_new (sd); } @@ -1070,8 +1126,7 @@ _e_fm_files_free (E_Fileman_Smart_Data *sd) sd->files = NULL; sd->drag.file = NULL; - if(sd->selection.current_file) - sd->selection.current_file = NULL; + _e_fm_selections_clear(sd); } static void @@ -1080,8 +1135,6 @@ _e_fm_dir_monitor_cb (void *data, Ecore_File_Monitor *ecore_file_monitor, Ecore E_Fileman_Smart_Data *sd; sd = data; - - printf("MONITOR!!!!\n"); if (event == ECORE_FILE_EVENT_DELETED_SELF) { @@ -1899,15 +1952,7 @@ _e_fm_mouse_down_cb (void *data, Evas *e, Evas_Object *obj, void *event_info) switch(ev->button) { 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; - } - + _e_fm_selections_clear(sd); break; case 3: @@ -2077,24 +2122,36 @@ _e_fm_file_icon_mouse_down_cb (void *data, Evas *e, Evas_Object *obj, void *even file->sd->drag.x = -1; file->sd->drag.file = file; 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; - } + //Evas_Modifier_Mask mask; - 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; + //mask = evas_key_modifier_mask_get(file->sd->evas, "Control"); + + if(evas_key_modifier_is_set(evas_key_modifier_get(file->sd->evas), "Control")) + file->sd->selection.files = evas_list_append(file->sd->selection.files, + file); + else + _e_fm_selections_clear(file->sd); + + _e_fm_selections_add(file); } - } + else + { + //Evas_Modifier_Mask mask; + + //mask = evas_key_modifier_mask_get(file->sd->evas, "Control"); + if(evas_key_modifier_is_set(evas_key_modifier_get(file->sd->evas), "Control")) + _e_fm_selections_del(file); + else + { + _e_fm_selections_clear(file->sd); + _e_fm_selections_add(file); + } + } + } } else if (ev->button == 3) { {