- e_file_selector (smart)

- e_file_dialog (e_object)
- fix stuff to use them


SVN revision: 18063
This commit is contained in:
codewarrior 2005-10-28 13:44:41 +00:00 committed by codewarrior
parent 30269e8ea8
commit c62ac6ddc2
9 changed files with 409 additions and 89 deletions

View File

@ -105,7 +105,9 @@ e_thumb.h \
e_int_border_remember.h \
e_eap_editor.h \
e_widget_iconsel.h \
e_widget_fileman.h
e_widget_fileman.h \
e_file_selector.h \
e_file_dialog.h
enlightenment_src = \
e_user.c \
@ -192,6 +194,8 @@ e_int_border_remember.c \
e_eap_editor.c \
e_widget_iconsel.c \
e_widget_fileman.c \
e_file_selector.c \
e_file_dialog.c \
$(ENLIGHTENMENTHEADERS)
enlightenment_SOURCES = \

View File

@ -215,8 +215,8 @@ _e_eap_edit_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, void *data)
e_theme_edje_object_set(editor->img, "base/theme/icons/enlightenment/e", "icons/enlightenment/e");
}
editor->img_widget = e_widget_iconsel_add(evas, editor->img,
48, 48, &cfdata->image);
editor->img_widget = e_widget_iconsel_add(evas, editor->img, 48, 48,
&cfdata->image);
e_widget_frametable_object_append(o, editor->img_widget,
0, 0, 1, 1,

110
src/bin/e_file_dialog.c Normal file
View File

@ -0,0 +1,110 @@
#include "e.h"
/*- DESCRIPTION -*/
/* An E_Object that brings up a file dialog window with a list of files, some
* buttons, and a "Places" frame where the user can add his favorite places.
* When the user selects a file, it will trigger a callback.
*/
static void _e_file_dialog_button1_click(void *data, E_Dialog *dia);
static void _e_file_dialog_button2_click(void *data, E_Dialog *dia);
static void _e_file_dialog_free(E_File_Dialog *dia);
E_File_Dialog *
e_file_dialog_new(E_Container *con)
{
E_File_Dialog *dia;
Evas_Coord w, h, ew, eh;
E_Manager *man;
Evas *evas;
Evas_Object *table, *ol;
if (!con)
{
man = e_manager_current_get();
if (!man) return NULL;
con = e_container_current_get(man);
if (!con) con = e_container_number_get(man, 0);
if (!con) return NULL;
}
dia = E_OBJECT_ALLOC(E_File_Dialog, E_FILE_DIALOG_TYPE, _e_file_dialog_free);
if(!dia) return NULL;
dia->dia = e_dialog_new(con);
if(!dia->dia)
{
free(dia);
return NULL;
}
dia->con = con;
dia->file = NULL;
evas = dia->dia->win->evas;
ol = e_widget_list_add(evas, 0, 1);
table = e_widget_frametable_add(evas, "Places", 0);
e_widget_frametable_object_append(table, e_widget_button_add(evas, "Home", "fileman/home", NULL,
NULL, NULL),
0, 0, 1, 1, 1, 0, 1, 0);
e_widget_frametable_object_append(table, e_widget_button_add(evas, " Desktop", "fileman/desktop", NULL,
NULL, NULL),
0, 1, 1, 1, 1, 0, 1, 0);
e_widget_frametable_object_append(table, e_widget_button_add(evas, " Icons", "fileman/folder", NULL,
NULL, NULL),
0, 2, 1, 1, 1, 0, 1, 0);
e_widget_list_object_append(ol, table, 1, 1, 0.0);
table = e_widget_frametable_add(evas, "Select File", 0);
e_widget_frametable_object_append(table, e_widget_fileman_add(evas, dia->file),
0, 0, 4, 4, 1, 1, 1, 1);
e_widget_list_object_append(ol, table, 1, 1, 0.0);
e_widget_min_size_get(ol, &w, &h);
e_dialog_content_set(dia->dia, ol, w, h);
e_dialog_button_add(dia->dia, "Ok", NULL, _e_file_dialog_button1_click, dia);
e_dialog_button_add(dia->dia, "Cancel", NULL, _e_file_dialog_button2_click, dia);
return dia;
}
void
e_file_dialog_show(E_File_Dialog *dia)
{
e_dialog_show(dia->dia);
}
void
e_file_dialog_title_set(E_File_Dialog *dia, const char *title)
{
e_dialog_title_set(dia->dia, title);
}
/* local subsystem functions */
static void
_e_file_dialog_button1_click(void *data, E_Dialog *dia)
{
// TODO: Save or Ok ... clicked. Call user cb.
}
static void
_e_file_dialog_button2_click(void *data, E_Dialog *dia)
{
_e_file_dialog_free(data);
}
static void
_e_file_dialog_free(E_File_Dialog *dia)
{
e_object_del(E_OBJECT(dia->dia));
free(dia);
}

29
src/bin/e_file_dialog.h Normal file
View File

@ -0,0 +1,29 @@
/*
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
*/
#ifdef E_TYPEDEFS
typedef struct _E_File_Dialog E_File_Dialog;
#else
#ifndef E_FILE_DIALOG_H
#define E_FILE_DIALOG_H
#define E_FILE_DIALOG_TYPE 0xE0b01020
struct _E_File_Dialog
{
E_Object e_obj_inherit;
E_Container *con;
E_Dialog *dia;
char *file;
};
EAPI E_File_Dialog *e_file_dialog_new (E_Container *con);
EAPI void e_file_dialog_show (E_File_Dialog *dia);
EAPI void e_file_dialog_title_set (E_File_Dialog *dia, const char *title);
#endif
#endif

212
src/bin/e_file_selector.c Normal file
View File

@ -0,0 +1,212 @@
/*
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
*/
#include "e.h"
/*- DESCRIPTION -*/
/* This is a list of files in a scrollbable container. When a file is selected
* this object will return the file name.
*/
#define SMART_NAME "e_fileselector"
#define API_ENTRY E_Smart_Data *sd; sd = evas_object_smart_data_get(obj); if ((!obj) || (!sd) || (evas_object_type_get(obj) && strcmp(evas_object_type_get(obj), SMART_NAME)))
#define INTERNAL_ENTRY E_Smart_Data *sd; sd = evas_object_smart_data_get(obj); if (!sd) return;
#define THEME_SET(OBJ, GROUP) e_theme_edje_object_set(OBJ, "base/theme/widgets/fileselector", "widgets/fileselector/"GROUP)
typedef struct _E_Smart_Data E_Smart_Data;
struct _E_Smart_Data
{
Evas_Object *parent;
Evas_Object *theme; /* theme object */
Evas_Object *files; /* file view object */
int view; /* view type, icons, list */
Evas_Coord x, y, w, h; /* coords */
void (*func) (Evas_Object *obj, char *file, void *data); /* selection cb */
void *func_data; /* selection cb data */
};
/* local subsystem functions */
static void _e_smart_add(Evas_Object *obj);
static void _e_smart_del(Evas_Object *obj);
static void _e_smart_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y);
static void _e_smart_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h);
static void _e_smart_show(Evas_Object *obj);
static void _e_smart_hide(Evas_Object *obj);
static void _e_smart_color_set(Evas_Object *obj, int r, int g, int b, int a);
static void _e_smart_clip_set(Evas_Object *obj, Evas_Object * clip);
static void _e_smart_clip_unset(Evas_Object *obj);
static void _e_smart_init(void);
static void _e_file_selector_selected_cb(Evas_Object *obj, char *file, void *data);
/* local subsystem globals */
static Evas_Smart *_e_smart = NULL;
/* externally accessible functions */
Evas_Object *
e_file_selector_add(Evas *evas)
{
_e_smart_init();
return evas_object_smart_add(evas, _e_smart);
}
void
e_file_selector_view_set(Evas_Object *obj, int type)
{
API_ENTRY return;
switch(type)
{
case E_FILE_SELECTOR_ICONVIEW:
break;
case E_FILE_SELECTOR_LISTVIEW:
break;
}
}
int
e_file_selector_view_get(Evas_Object *obj)
{
API_ENTRY return;
return sd->view;
}
void
e_file_selector_callback_add(Evas_Object *obj, void (*func) (Evas_Object *obj, char *file, void *data), void *data)
{
API_ENTRY return;
sd->func = func;
sd->func_data = data;
}
/* local subsystem functions */
static void
_e_smart_add(Evas_Object *obj)
{
E_Smart_Data *sd;
Evas *evas;
sd = calloc(1, sizeof(E_Smart_Data));
if (!sd) return;
sd->x = 0;
sd->y = 0;
sd->w = 0;
sd->h = 0;
sd->parent = obj;
sd->func = NULL;
sd->func_data = NULL;
sd->view = E_FILE_SELECTOR_ICONVIEW;
evas = evas_object_evas_get(obj);
sd->theme = edje_object_add(evas);
evas_object_smart_member_add(sd->theme, obj);
THEME_SET(sd->theme, "main");
sd->files = e_fm_add(evas);
e_fm_selector_enable(sd->files, _e_file_selector_selected_cb, sd);
evas_object_smart_member_add(sd->files, obj);
edje_object_part_swallow(sd->theme, "items", sd->files);
evas_object_smart_data_set(obj, sd);
evas_object_show(sd->theme);
}
static void
_e_smart_del(Evas_Object *obj)
{
INTERNAL_ENTRY;
evas_object_del(sd->theme);
evas_object_del(sd->files);
free(sd);
}
static void
_e_smart_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y)
{
INTERNAL_ENTRY;
sd->x = x;
sd->y = y;
evas_object_move(sd->theme, x, y);
}
static void
_e_smart_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h)
{
INTERNAL_ENTRY;
sd->w = w;
sd->h = h;
evas_object_resize(sd->theme, w, h);
}
static void
_e_smart_show(Evas_Object *obj)
{
INTERNAL_ENTRY;
evas_object_show(sd->theme);
}
static void
_e_smart_hide(Evas_Object *obj)
{
INTERNAL_ENTRY;
evas_object_hide(sd->theme);
}
static void
_e_smart_color_set(Evas_Object *obj, int r, int g, int b, int a)
{
INTERNAL_ENTRY;
evas_object_color_set(sd->theme, r, g, b, a);
}
static void
_e_smart_clip_set(Evas_Object *obj, Evas_Object *clip)
{
INTERNAL_ENTRY;
evas_object_clip_set(sd->theme, clip);
}
static void
_e_smart_clip_unset(Evas_Object *obj)
{
INTERNAL_ENTRY;
evas_object_clip_unset(sd->theme);
}
static void
_e_file_selector_selected_cb(Evas_Object *obj, char *file, void *data)
{
E_Smart_Data *sd;
sd = data;
if(sd->func)
sd->func(sd->parent, file, sd->func_data);
}
/* never need to touch this */
static void
_e_smart_init(void)
{
if (_e_smart) return;
_e_smart = evas_smart_new(SMART_NAME,
_e_smart_add,
_e_smart_del,
NULL, NULL, NULL, NULL, NULL,
_e_smart_move,
_e_smart_resize,
_e_smart_show,
_e_smart_hide,
_e_smart_color_set,
_e_smart_clip_set,
_e_smart_clip_unset,
NULL);
}

23
src/bin/e_file_selector.h Normal file
View File

@ -0,0 +1,23 @@
/*
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
*/
#ifdef E_TYPEDEFS
typedef enum _E_File_Selector_View E_File_Selector_View;
#else
#ifndef E_FILE_SELECTOR_H
#define E_FILE_SELECTOR_H
enum E_File_Selector_View
{
E_FILE_SELECTOR_ICONVIEW,
E_FILE_SELECTOR_LISTVIEW
};
EAPI Evas_Object *e_file_selector_add(Evas *evas);
EAPI void e_file_selector_view_set(Evas_Object *object, int view);
EAPI int e_file_selector_view_get(Evas_Object *object);
#endif
#endif

View File

@ -84,3 +84,5 @@
#include "e_thumb.h"
#include "e_int_border_remember.h"
#include "e_eap_editor.h"
#include "e_file_selector.h"
#include "e_file_dialog.h"

View File

@ -3,19 +3,22 @@
*/
#include "e.h"
/*- DESCRIPTION -*/
/* This widget simply wraps e_file_selector into a widget. When a file is
* selected, the assigned value to valptr changes and contains the new file.
*/
typedef struct _E_Widget_Data E_Widget_Data;
struct _E_Widget_Data
{
Evas_Object *o_fm;
char **valptr;
Ecore_Event_Handler *change_handler;
};
static void _e_wid_del_hook(Evas_Object *obj);
static void _e_wid_focus_steal(void *data, Evas *e, Evas_Object *obj, void *event_info);
static int _e_wid_text_change(void *data, Evas_Object *entry, char *key);
static void _e_wid_fileman_selected_cb(Evas_Object *obj, char *file, void *data);
/* local subsystem functions */
static void
@ -33,33 +36,18 @@ _e_wid_focus_steal(void *data, Evas *e, Evas_Object *obj, void *event_info)
e_widget_focus_steal(data);
}
static int
_e_wid_text_change(void *data, Evas_Object *entry, char *key)
static void
_e_wid_fileman_selected_cb(Evas_Object *obj, char *file, void *data)
{
#if 0
E_Widget_Data *wd;
int size;
wd = data;
wd = data;
if(*(wd->valptr) == NULL)
{
size = (strlen(key) + 1) * sizeof(char);
*(wd->valptr) = realloc(*(wd->valptr), size);
snprintf(*(wd->valptr), size, "%s", key);
}
else
{
char *tmp;
size = (strlen(*(wd->valptr)) + strlen(key) + 1) * sizeof(char);
tmp = E_NEW(char *, strlen(*(wd->valptr)) + 1);
snprintf(tmp, strlen(*(wd->valptr)) + 1, "%s", *(wd->valptr));
*(wd->valptr) = realloc(*(wd->valptr), size);
snprintf(*(wd->valptr), size, "%s%s\0", tmp, key);
E_FREE(tmp);
}
#endif
E_FREE(*(wd->valptr));
size = (strlen(file) + 1) * sizeof(char);
*(wd->valptr) = E_NEW(char *, size);
snprintf(*(wd->valptr), size, "%s", file);
}
/* externally accessible functions */
@ -78,26 +66,15 @@ e_widget_fileman_add(Evas *evas, char **val)
wd->valptr = val;
e_widget_data_set(obj, wd);
bg = edje_object_add(evas);
e_theme_edje_object_set(bg, "base/theme/widgets/fileselector",
"widgets/fileselector/main");
evas_object_show(bg);
o = e_fm_add(evas);
wd->o_fm = o;
scrollbar = e_scrollbar_add(evas);
e_scrollbar_direction_set(scrollbar, E_SCROLLBAR_VERTICAL);
edje_object_part_swallow(bg, "items", wd->o_fm);
edje_object_part_swallow(bg, "vscrollbar", scrollbar);
evas_object_show(bg);
evas_object_resize(bg, 300, 200);
wd->o_fm = e_file_selector_add(evas);
e_file_selector_callback_add(wd->o_fm, _e_wid_fileman_selected_cb, wd);
evas_object_show(wd->o_fm);
evas_object_resize(wd->o_fm, 300, 200);
e_widget_min_size_set(obj, 300, 200);
e_widget_sub_object_add(obj, bg);
evas_object_event_callback_add(bg, EVAS_CALLBACK_MOUSE_DOWN, _e_wid_focus_steal, obj);
e_widget_resize_object_set(obj, bg);
e_widget_sub_object_add(obj, wd->o_fm);
evas_object_event_callback_add(wd->o_fm, EVAS_CALLBACK_MOUSE_DOWN, _e_wid_focus_steal, obj);
e_widget_resize_object_set(obj, wd->o_fm);
return obj;
}

View File

@ -155,51 +155,14 @@ static void
_e_wid_activate_hook(Evas_Object *obj)
{
E_Widget_Data *wd;
E_Fileman *fileman;
E_Popup *popup;
E_Zone *zone;
E_Dialog *dia;
Evas_Object *table;
Evas_Object *button;
Evas *evas;
Evas_Object *ol;
Evas_Coord w, h;
E_File_Dialog *dia;
wd = e_widget_data_get(obj);
dia = e_dialog_new(wd->con);
evas = dia->win->evas;
ol = e_widget_list_add(evas, 0, 1);
table = e_widget_frametable_add(evas, "Places", 0);
e_widget_frametable_object_append(table, e_widget_button_add(evas, "Home", "fileman/home", NULL,
NULL, NULL),
0, 0, 1, 1, 1, 0, 1, 0);
e_widget_frametable_object_append(table, e_widget_button_add(evas, " Desktop", "fileman/desktop", NULL,
NULL, NULL),
0, 1, 1, 1, 1, 0, 1, 0);
e_widget_frametable_object_append(table, e_widget_button_add(evas, " Icons", "fileman/folder", NULL,
NULL, NULL),
0, 2, 1, 1, 1, 0, 1, 0);
e_widget_list_object_append(ol, table, 1, 1, 0.0);
table = e_widget_frametable_add(evas, "Select File", 0);
e_widget_frametable_object_append(table, e_widget_fileman_add(evas, NULL),
0, 0, 4, 4, 1, 1, 1, 1);
e_widget_list_object_append(ol, table, 1, 1, 0.0);
e_widget_min_size_get(ol, &w, &h);
e_dialog_content_set(dia, ol, w, h);
e_dialog_title_set(dia, "Select File");
e_dialog_show(dia);
dia = e_file_dialog_new(wd->con);
if(!dia) return;
e_file_dialog_title_set(dia, "Select File");
e_file_dialog_show(dia);
}
static void