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_name.png" COMP;
|
||||
image: "e17_button_detail_view.png" COMP;
|
||||
image: "e17_fileman_rubberband.png" COMP;
|
||||
|
||||
image: "e17_menu_bg_border.png" COMP;
|
||||
image: "e17_button2.png" COMP;
|
||||
|
@ -171,7 +172,8 @@ group {
|
|||
offset: 0 0;
|
||||
}
|
||||
image {
|
||||
normal: "e17_fileman_bg.png";
|
||||
//normal: "e17_fileman_bg.png";
|
||||
normal: "e17_brushed.png";
|
||||
}
|
||||
fill {
|
||||
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("file");
|
||||
|
|
Binary file not shown.
|
@ -160,6 +160,13 @@ struct _E_Fileman_Smart_Data
|
|||
struct {
|
||||
Evas_List *files;
|
||||
E_Fileman_File *current_file;
|
||||
|
||||
struct {
|
||||
unsigned char enabled : 1;
|
||||
Evas_Coord x, y;
|
||||
Evas_Object *obj;
|
||||
} band;
|
||||
|
||||
} 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 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 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 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);
|
||||
|
@ -536,6 +545,10 @@ _e_fm_smart_add(Evas_Object *object)
|
|||
|
||||
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->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.h = 48;
|
||||
sd->icon_info.x_space = 10;
|
||||
sd->icon_info.y_space = 10;
|
||||
sd->icon_info.x_space = 15;
|
||||
sd->icon_info.y_space = 15;
|
||||
|
||||
homedir = e_user_homedir_get();
|
||||
thumb_path = E_NEW(char, PATH_MAX);
|
||||
|
@ -570,6 +583,11 @@ _e_fm_smart_add(Evas_Object *object)
|
|||
|
||||
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,
|
||||
ecore_event_handler_add(ECORE_X_EVENT_XDND_ENTER,
|
||||
_e_fm_drop_enter_cb,
|
||||
|
@ -596,7 +614,7 @@ _e_fm_smart_add(Evas_Object *object)
|
|||
sd));
|
||||
sd->event_handlers = evas_list_append (sd->event_handlers,
|
||||
ecore_event_handler_add(ECORE_X_EVENT_MOUSE_MOVE,
|
||||
_e_fm_mouse_move_cb,
|
||||
_e_fm_win_mouse_move_cb,
|
||||
sd));
|
||||
evas_object_smart_data_set(object, sd);
|
||||
|
||||
|
@ -627,7 +645,9 @@ _e_fm_smart_del(Evas_Object *object)
|
|||
evas_list_free(sd->event_handlers);
|
||||
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);
|
||||
|
@ -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);
|
||||
dirs = sd->files_raw;
|
||||
|
||||
if (sd->monitor)
|
||||
ecore_file_monitor_del (sd->monitor);
|
||||
sd->monitor = ecore_file_monitor_add (sd->dir, _e_fm_dir_monitor_cb, sd);
|
||||
//if (sd->monitor)
|
||||
// ecore_file_monitor_del (sd->monitor);
|
||||
//sd->monitor = ecore_file_monitor_add (sd->dir, _e_fm_dir_monitor_cb, sd);
|
||||
|
||||
dir_entry = calloc (1, sizeof (struct dirent));
|
||||
dir_entry->d_type = 4;
|
||||
|
@ -1119,8 +1139,8 @@ _e_fm_files_free (E_Fileman_Smart_Data *sd)
|
|||
evas_list_free (sd->files);
|
||||
|
||||
// this is segfaulting E
|
||||
if (sd->monitor)
|
||||
ecore_file_monitor_del (sd->monitor);
|
||||
//if (sd->monitor)
|
||||
// ecore_file_monitor_del (sd->monitor);
|
||||
sd->monitor = NULL;
|
||||
|
||||
sd->files = NULL;
|
||||
|
@ -1936,6 +1956,91 @@ _e_fm_dir_files_sort_modtime_cb (void *d1, void *d2)
|
|||
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
|
||||
_e_fm_mouse_down_cb (void *data, Evas *e, Evas_Object *obj, void *event_info)
|
||||
{
|
||||
|
@ -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;
|
||||
sd = data;
|
||||
|
||||
printf("mouse down!!\n");
|
||||
|
||||
switch(ev->button)
|
||||
{
|
||||
case 1:
|
||||
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;
|
||||
|
||||
case 3:
|
||||
|
@ -2125,10 +2245,6 @@ _e_fm_file_icon_mouse_down_cb (void *data, Evas *e, Evas_Object *obj, void *even
|
|||
|
||||
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"))
|
||||
file->sd->selection.files = evas_list_append(file->sd->selection.files,
|
||||
file);
|
||||
|
@ -2139,10 +2255,6 @@ _e_fm_file_icon_mouse_down_cb (void *data, Evas *e, Evas_Object *obj, void *even
|
|||
}
|
||||
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
|
||||
|
@ -2237,9 +2349,9 @@ 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;
|
||||
Evas_Event_Mouse_In *ev;
|
||||
|
||||
ev = (Evas_Event_Mouse_Move *)event_info;
|
||||
ev = (Evas_Event_Mouse_In *)event_info;
|
||||
file = data;
|
||||
|
||||
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_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;
|
||||
|
||||
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
|
||||
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_File *file;
|
||||
|
|
Loading…
Reference in New Issue