forked from enlightenment/enlightenment
- e_file_selector (smart)
- e_file_dialog (e_object) - fix stuff to use them SVN revision: 18063
This commit is contained in:
parent
30269e8ea8
commit
c62ac6ddc2
|
@ -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 = \
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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);
|
||||
}
|
|
@ -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
|
|
@ -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);
|
||||
}
|
|
@ -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
|
|
@ -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"
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue