- Start working on selections.

- Add ability to have different icon states when they are clicked or higlighted.


SVN revision: 17381
This commit is contained in:
codewarrior 2005-10-10 10:14:49 +00:00 committed by codewarrior
parent 8c07c1f5d3
commit 6532ab7362
3 changed files with 135 additions and 20 deletions

View File

@ -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");

Binary file not shown.

View File

@ -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)
{