forked from enlightenment/enlightenment
Added rubber band for multiselect. It draws, but doesnt select yet.
SVN revision: 17385
This commit is contained in:
parent
2842e54568
commit
9a6d41e4bd
|
@ -113,6 +113,7 @@ images
|
||||||
image: "e17_button_detail_view_details.png" COMP;
|
image: "e17_button_detail_view_details.png" COMP;
|
||||||
image: "e17_button_detail_view_name.png" COMP;
|
image: "e17_button_detail_view_name.png" COMP;
|
||||||
image: "e17_button_detail_view.png" COMP;
|
image: "e17_button_detail_view.png" COMP;
|
||||||
|
image: "e17_fileman_rubberband.png" COMP;
|
||||||
|
|
||||||
image: "e17_menu_bg_border.png" COMP;
|
image: "e17_menu_bg_border.png" COMP;
|
||||||
image: "e17_button2.png" COMP;
|
image: "e17_button2.png" COMP;
|
||||||
|
@ -171,7 +172,8 @@ group {
|
||||||
offset: 0 0;
|
offset: 0 0;
|
||||||
}
|
}
|
||||||
image {
|
image {
|
||||||
normal: "e17_fileman_bg.png";
|
//normal: "e17_fileman_bg.png";
|
||||||
|
normal: "e17_brushed.png";
|
||||||
}
|
}
|
||||||
fill {
|
fill {
|
||||||
smooth: 0;
|
smooth: 0;
|
||||||
|
@ -522,6 +524,32 @@ group {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
group {
|
||||||
|
name: "fileman/rubberband";
|
||||||
|
parts {
|
||||||
|
part {
|
||||||
|
name: "base";
|
||||||
|
mouse_events: 0;
|
||||||
|
description {
|
||||||
|
state: "default" 0.0;
|
||||||
|
rel1 {
|
||||||
|
relative: 0.0 0.0;
|
||||||
|
offset: 1 1;
|
||||||
|
}
|
||||||
|
rel2 {
|
||||||
|
relative: 1.0 1.0;
|
||||||
|
offset: -1 -1;
|
||||||
|
}
|
||||||
|
image {
|
||||||
|
normal: "e17_fileman_rubberband.png";
|
||||||
|
border: 2 2 2 2;
|
||||||
|
}
|
||||||
|
color: 255 255 255 128;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
FILEMAN_ICON_CLICKABLE("folder");
|
FILEMAN_ICON_CLICKABLE("folder");
|
||||||
FILEMAN_ICON_CLICKABLE("file");
|
FILEMAN_ICON_CLICKABLE("file");
|
||||||
|
|
Binary file not shown.
|
@ -160,6 +160,13 @@ struct _E_Fileman_Smart_Data
|
||||||
struct {
|
struct {
|
||||||
Evas_List *files;
|
Evas_List *files;
|
||||||
E_Fileman_File *current_file;
|
E_Fileman_File *current_file;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
unsigned char enabled : 1;
|
||||||
|
Evas_Coord x, y;
|
||||||
|
Evas_Object *obj;
|
||||||
|
} band;
|
||||||
|
|
||||||
} selection;
|
} selection;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -221,7 +228,9 @@ static void _e_fm_dir_monitor_cb (void *data, Ecore_File_Monitor
|
||||||
static Evas_List *_e_fm_dir_files_get (char *dirname, E_Fileman_File_Type type);
|
static Evas_List *_e_fm_dir_files_get (char *dirname, E_Fileman_File_Type type);
|
||||||
static char *_e_fm_dir_pop(const char *path);
|
static char *_e_fm_dir_pop(const char *path);
|
||||||
static void _e_fm_mouse_down_cb (void *data, Evas *e, Evas_Object *obj, void *event_info);
|
static void _e_fm_mouse_down_cb (void *data, Evas *e, Evas_Object *obj, void *event_info);
|
||||||
static int _e_fm_mouse_move_cb (void *data, int type, void *event);
|
static void _e_fm_mouse_up_cb (void *data, Evas *e, Evas_Object *obj, void *event_info);
|
||||||
|
static void _e_fm_mouse_move_cb (void *data, Evas *e, Evas_Object *obj, void *event_info);
|
||||||
|
static int _e_fm_win_mouse_move_cb (void *data, int type, void *event);
|
||||||
static int _e_fm_grabbed_mouse_up_cb (void *data, int type, void *event);
|
static int _e_fm_grabbed_mouse_up_cb (void *data, int type, void *event);
|
||||||
static void _e_fm_menu_arrange_cb (void *data, E_Menu *m, E_Menu_Item *mi);
|
static void _e_fm_menu_arrange_cb (void *data, E_Menu *m, E_Menu_Item *mi);
|
||||||
static void _e_fm_menu_refresh_cb (void *data, E_Menu *m, E_Menu_Item *mi);
|
static void _e_fm_menu_refresh_cb (void *data, E_Menu *m, E_Menu_Item *mi);
|
||||||
|
@ -536,6 +545,10 @@ _e_fm_smart_add(Evas_Object *object)
|
||||||
|
|
||||||
evas_object_event_callback_add (sd->bg, EVAS_CALLBACK_MOUSE_DOWN,
|
evas_object_event_callback_add (sd->bg, EVAS_CALLBACK_MOUSE_DOWN,
|
||||||
_e_fm_mouse_down_cb, sd);
|
_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);
|
evas_object_smart_member_add(sd->bg, object);
|
||||||
|
|
||||||
sd->clip = evas_object_rectangle_add(evas);
|
sd->clip = evas_object_rectangle_add(evas);
|
||||||
|
@ -548,8 +561,8 @@ _e_fm_smart_add(Evas_Object *object)
|
||||||
|
|
||||||
sd->icon_info.w = 48;
|
sd->icon_info.w = 48;
|
||||||
sd->icon_info.h = 48;
|
sd->icon_info.h = 48;
|
||||||
sd->icon_info.x_space = 10;
|
sd->icon_info.x_space = 15;
|
||||||
sd->icon_info.y_space = 10;
|
sd->icon_info.y_space = 15;
|
||||||
|
|
||||||
homedir = e_user_homedir_get();
|
homedir = e_user_homedir_get();
|
||||||
thumb_path = E_NEW(char, PATH_MAX);
|
thumb_path = E_NEW(char, PATH_MAX);
|
||||||
|
@ -570,6 +583,11 @@ _e_fm_smart_add(Evas_Object *object)
|
||||||
|
|
||||||
sd->event_handlers = NULL;
|
sd->event_handlers = NULL;
|
||||||
|
|
||||||
|
sd->selection.band.obj = edje_object_add(sd->evas);
|
||||||
|
e_theme_edje_object_set(sd->selection.band.obj,
|
||||||
|
"base/theme/fileman/rubberband",
|
||||||
|
"fileman/rubberband");
|
||||||
|
|
||||||
sd->event_handlers = evas_list_append (sd->event_handlers,
|
sd->event_handlers = evas_list_append (sd->event_handlers,
|
||||||
ecore_event_handler_add(ECORE_X_EVENT_XDND_ENTER,
|
ecore_event_handler_add(ECORE_X_EVENT_XDND_ENTER,
|
||||||
_e_fm_drop_enter_cb,
|
_e_fm_drop_enter_cb,
|
||||||
|
@ -596,7 +614,7 @@ _e_fm_smart_add(Evas_Object *object)
|
||||||
sd));
|
sd));
|
||||||
sd->event_handlers = evas_list_append (sd->event_handlers,
|
sd->event_handlers = evas_list_append (sd->event_handlers,
|
||||||
ecore_event_handler_add(ECORE_X_EVENT_MOUSE_MOVE,
|
ecore_event_handler_add(ECORE_X_EVENT_MOUSE_MOVE,
|
||||||
_e_fm_mouse_move_cb,
|
_e_fm_win_mouse_move_cb,
|
||||||
sd));
|
sd));
|
||||||
evas_object_smart_data_set(object, sd);
|
evas_object_smart_data_set(object, sd);
|
||||||
|
|
||||||
|
@ -626,8 +644,10 @@ _e_fm_smart_del(Evas_Object *object)
|
||||||
|
|
||||||
evas_list_free(sd->event_handlers);
|
evas_list_free(sd->event_handlers);
|
||||||
sd->event_handlers = NULL;
|
sd->event_handlers = NULL;
|
||||||
|
|
||||||
evas_object_del (sd->bg);
|
|
||||||
|
evas_object_del(sd->selection.band.obj);
|
||||||
|
evas_object_del(sd->bg);
|
||||||
|
|
||||||
free (sd->dir);
|
free (sd->dir);
|
||||||
free(sd);
|
free(sd);
|
||||||
|
@ -787,9 +807,9 @@ _e_fm_redraw_new (E_Fileman_Smart_Data *sd)
|
||||||
sd->files_raw = _e_fm_dir_files_get (sd->dir, E_FILEMAN_FILETYPE_NORMAL);
|
sd->files_raw = _e_fm_dir_files_get (sd->dir, E_FILEMAN_FILETYPE_NORMAL);
|
||||||
dirs = sd->files_raw;
|
dirs = sd->files_raw;
|
||||||
|
|
||||||
if (sd->monitor)
|
//if (sd->monitor)
|
||||||
ecore_file_monitor_del (sd->monitor);
|
// ecore_file_monitor_del (sd->monitor);
|
||||||
sd->monitor = ecore_file_monitor_add (sd->dir, _e_fm_dir_monitor_cb, sd);
|
//sd->monitor = ecore_file_monitor_add (sd->dir, _e_fm_dir_monitor_cb, sd);
|
||||||
|
|
||||||
dir_entry = calloc (1, sizeof (struct dirent));
|
dir_entry = calloc (1, sizeof (struct dirent));
|
||||||
dir_entry->d_type = 4;
|
dir_entry->d_type = 4;
|
||||||
|
@ -1119,8 +1139,8 @@ _e_fm_files_free (E_Fileman_Smart_Data *sd)
|
||||||
evas_list_free (sd->files);
|
evas_list_free (sd->files);
|
||||||
|
|
||||||
// this is segfaulting E
|
// this is segfaulting E
|
||||||
if (sd->monitor)
|
//if (sd->monitor)
|
||||||
ecore_file_monitor_del (sd->monitor);
|
// ecore_file_monitor_del (sd->monitor);
|
||||||
sd->monitor = NULL;
|
sd->monitor = NULL;
|
||||||
|
|
||||||
sd->files = NULL;
|
sd->files = NULL;
|
||||||
|
@ -1936,11 +1956,96 @@ _e_fm_dir_files_sort_modtime_cb (void *d1, void *d2)
|
||||||
return (strcmp (de1->d_name, de2->d_name));
|
return (strcmp (de1->d_name, de2->d_name));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_e_fm_mouse_up_cb (void *data, Evas *e, Evas_Object *obj, void *event_info)
|
||||||
|
{
|
||||||
|
E_Fileman_Smart_Data *sd;
|
||||||
|
Evas_Event_Mouse_Up *ev;
|
||||||
|
|
||||||
|
sd = data;
|
||||||
|
ev = event_info;
|
||||||
|
|
||||||
|
if(sd->selection.band.enabled)
|
||||||
|
{
|
||||||
|
if(!sd->selection.band.obj)
|
||||||
|
return;
|
||||||
|
|
||||||
|
sd->selection.band.enabled = 0;
|
||||||
|
evas_object_resize(sd->selection.band.obj, 1, 1);
|
||||||
|
evas_object_hide(sd->selection.band.obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_e_fm_mouse_move_cb (void *data, Evas *e, Evas_Object *obj, void *event_info)
|
||||||
|
{
|
||||||
|
E_Fileman_Smart_Data *sd;
|
||||||
|
Evas_Event_Mouse_Move *ev;
|
||||||
|
|
||||||
|
ev = event_info;
|
||||||
|
sd = data;
|
||||||
|
|
||||||
|
if(sd->selection.band.enabled)
|
||||||
|
{
|
||||||
|
Evas_Coord x, y, w, h;
|
||||||
|
|
||||||
|
printf("enabled!!\n");
|
||||||
|
|
||||||
|
if(!sd->selection.band.obj)
|
||||||
|
return;
|
||||||
|
|
||||||
|
evas_object_geometry_get(sd->selection.band.obj, &x, &y, &w, &h);
|
||||||
|
|
||||||
|
if(ev->cur.canvas.x > sd->selection.band.x &&
|
||||||
|
ev->cur.canvas.y < sd->selection.band.y)
|
||||||
|
{
|
||||||
|
/* growing towards top right */
|
||||||
|
evas_object_move(sd->selection.band.obj,
|
||||||
|
sd->selection.band.x,
|
||||||
|
ev->cur.canvas.y);
|
||||||
|
evas_object_resize(sd->selection.band.obj,
|
||||||
|
ev->cur.canvas.x - sd->selection.band.x,
|
||||||
|
sd->selection.band.y - ev->cur.canvas.y);
|
||||||
|
}
|
||||||
|
else if(ev->cur.canvas.x > sd->selection.band.x &&
|
||||||
|
ev->cur.canvas.y > sd->selection.band.y)
|
||||||
|
{
|
||||||
|
/* growing towards bottom right */
|
||||||
|
w = ev->cur.canvas.x - sd->selection.band.x;
|
||||||
|
h = ev->cur.canvas.y - sd->selection.band.y;
|
||||||
|
|
||||||
|
evas_object_resize(sd->selection.band.obj, w, h);
|
||||||
|
}
|
||||||
|
else if(ev->cur.canvas.x < sd->selection.band.x &&
|
||||||
|
ev->cur.canvas.y < sd->selection.band.y)
|
||||||
|
{
|
||||||
|
/* growing towards top left */
|
||||||
|
evas_object_move(sd->selection.band.obj,
|
||||||
|
ev->cur.canvas.x,
|
||||||
|
ev->cur.canvas.y);
|
||||||
|
evas_object_resize(sd->selection.band.obj,
|
||||||
|
sd->selection.band.x - ev->cur.canvas.x,
|
||||||
|
sd->selection.band.y - ev->cur.canvas.y);
|
||||||
|
}
|
||||||
|
else if(ev->cur.canvas.x < sd->selection.band.x &&
|
||||||
|
ev->cur.canvas.y > sd->selection.band.y)
|
||||||
|
{
|
||||||
|
/* growing towards button left */
|
||||||
|
evas_object_move(sd->selection.band.obj,
|
||||||
|
ev->cur.canvas.x,
|
||||||
|
sd->selection.band.y);
|
||||||
|
evas_object_resize(sd->selection.band.obj,
|
||||||
|
sd->selection.band.x - ev->cur.canvas.x,
|
||||||
|
ev->cur.canvas.y - sd->selection.band.y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_e_fm_mouse_down_cb (void *data, Evas *e, Evas_Object *obj, void *event_info)
|
_e_fm_mouse_down_cb (void *data, Evas *e, Evas_Object *obj, void *event_info)
|
||||||
{
|
{
|
||||||
E_Fileman_Smart_Data *sd;
|
E_Fileman_Smart_Data *sd;
|
||||||
Evas_Event_Mouse_Down *ev;
|
Evas_Event_Mouse_Down *ev;
|
||||||
E_Menu *mn;
|
E_Menu *mn;
|
||||||
E_Menu_Item *mi;
|
E_Menu_Item *mi;
|
||||||
int x, y, w, h;
|
int x, y, w, h;
|
||||||
|
@ -1949,10 +2054,25 @@ _e_fm_mouse_down_cb (void *data, Evas *e, Evas_Object *obj, void *event_info)
|
||||||
ev = (Evas_Event_Mouse_Down *)event_info;
|
ev = (Evas_Event_Mouse_Down *)event_info;
|
||||||
sd = data;
|
sd = data;
|
||||||
|
|
||||||
|
printf("mouse down!!\n");
|
||||||
|
|
||||||
switch(ev->button)
|
switch(ev->button)
|
||||||
{
|
{
|
||||||
case 1:
|
case 1:
|
||||||
_e_fm_selections_clear(sd);
|
if(evas_key_modifier_is_set(evas_key_modifier_get(sd->evas), "Control"))
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_e_fm_selections_clear(sd);
|
||||||
|
sd->selection.band.enabled = 1;
|
||||||
|
evas_object_move(sd->selection.band.obj, ev->canvas.x, ev->canvas.y);
|
||||||
|
evas_object_resize(sd->selection.band.obj, 1, 1);
|
||||||
|
evas_object_show(sd->selection.band.obj);
|
||||||
|
sd->selection.band.x = ev->canvas.x;
|
||||||
|
sd->selection.band.y = ev->canvas.y;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
|
@ -2124,11 +2244,7 @@ _e_fm_file_icon_mouse_down_cb (void *data, Evas *e, Evas_Object *obj, void *even
|
||||||
printf("drag file: %s\n", file->dir_entry->d_name);
|
printf("drag file: %s\n", file->dir_entry->d_name);
|
||||||
|
|
||||||
if(!file->state.clicked)
|
if(!file->state.clicked)
|
||||||
{
|
{
|
||||||
//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"))
|
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->sd->selection.files = evas_list_append(file->sd->selection.files,
|
||||||
file);
|
file);
|
||||||
|
@ -2139,10 +2255,6 @@ _e_fm_file_icon_mouse_down_cb (void *data, Evas *e, Evas_Object *obj, void *even
|
||||||
}
|
}
|
||||||
else
|
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"))
|
if(evas_key_modifier_is_set(evas_key_modifier_get(file->sd->evas), "Control"))
|
||||||
_e_fm_selections_del(file);
|
_e_fm_selections_del(file);
|
||||||
else
|
else
|
||||||
|
@ -2237,9 +2349,9 @@ static void
|
||||||
_e_fm_file_icon_mouse_in_cb (void *data, Evas *e, Evas_Object *obj, void *event_info)
|
_e_fm_file_icon_mouse_in_cb (void *data, Evas *e, Evas_Object *obj, void *event_info)
|
||||||
{
|
{
|
||||||
E_Fileman_File *file;
|
E_Fileman_File *file;
|
||||||
Evas_Event_Mouse_Move *ev;
|
Evas_Event_Mouse_In *ev;
|
||||||
|
|
||||||
ev = (Evas_Event_Mouse_Move *)event_info;
|
ev = (Evas_Event_Mouse_In *)event_info;
|
||||||
file = data;
|
file = data;
|
||||||
|
|
||||||
edje_object_signal_emit(file->icon, "hilight", "");
|
edje_object_signal_emit(file->icon, "hilight", "");
|
||||||
|
@ -2250,9 +2362,9 @@ static void
|
||||||
_e_fm_file_icon_mouse_out_cb (void *data, Evas *e, Evas_Object *obj, void *event_info)
|
_e_fm_file_icon_mouse_out_cb (void *data, Evas *e, Evas_Object *obj, void *event_info)
|
||||||
{
|
{
|
||||||
E_Fileman_File *file;
|
E_Fileman_File *file;
|
||||||
Evas_Event_Mouse_Move *ev;
|
Evas_Event_Mouse_Out *ev;
|
||||||
|
|
||||||
ev = (Evas_Event_Mouse_Move *)event_info;
|
ev = (Evas_Event_Mouse_Out *)event_info;
|
||||||
file = data;
|
file = data;
|
||||||
|
|
||||||
edje_object_signal_emit(file->icon, "default", "");
|
edje_object_signal_emit(file->icon, "default", "");
|
||||||
|
@ -2293,7 +2405,7 @@ static void
|
||||||
|
|
||||||
// TODO: add images for icons with image thumb and not edje part
|
// TODO: add images for icons with image thumb and not edje part
|
||||||
static int
|
static int
|
||||||
_e_fm_mouse_move_cb (void *data, int type, void *event)
|
_e_fm_win_mouse_move_cb (void *data, int type, void *event)
|
||||||
{
|
{
|
||||||
E_Fileman_Smart_Data *sd;
|
E_Fileman_Smart_Data *sd;
|
||||||
E_Fileman_File *file;
|
E_Fileman_File *file;
|
||||||
|
@ -2372,9 +2484,9 @@ _e_fm_mouse_move_cb (void *data, int type, void *event)
|
||||||
sd->drag.start = 0;
|
sd->drag.start = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
|
Loading…
Reference in New Issue