enlightenment/src/bin/e_eap_editor.c

380 lines
10 KiB
C

#include "e.h"
typedef struct _E_App_Edit E_App_Edit;
typedef struct _E_App_Edit_CFData E_App_Edit_CFData;
struct _E_App_Edit
{
E_App *eap;
Evas_Object *img;
Evas_Object *img_widget;
E_App_Edit_CFData *cfdata;
};
struct _E_App_Edit_CFData
{
/*- BASIC -*/
char *name;
char *exe;
/*- ADVANCED -*/
char *generic;
char *comment;
char *wname;
char *wclass;
char *wtitle;
char *wrole;
char *iclass;
char *path;
int startup_notify;
int wait_exit;
/*- common -*/
char *image;
E_App_Edit *editor;
};
/* local subsystem functions */
static void _e_eap_edit_fill_data(E_App_Edit_CFData *cdfata);
static void *_e_eap_edit_create_data(E_Config_Dialog *cfd);
static void _e_eap_edit_free_data(E_Config_Dialog *cfd, void *data);
static int _e_eap_edit_basic_apply_data(E_Config_Dialog *cfd, void *data);
static int _e_eap_edit_advanced_apply_data(E_Config_Dialog *cfd, void *data);
static Evas_Object *_e_eap_edit_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, void *data);
static Evas_Object *_e_eap_edit_advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, void *data);
static void _e_eap_edit_select_cb(Evas_Object *obj, char *file, void *data);
#define IFDUP(src, dst) if(src) dst = strdup(src); else dst = NULL
/* externally accessible functions */
void
e_eap_edit_show(E_Container *con, E_App *a)
{
E_Config_Dialog *cfd;
E_Config_Dialog_View v;
E_App_Edit *editor;
if (!con) return;
editor = E_NEW(E_App_Edit, 1);
if (!editor) return;
editor->eap = a;
/* methods */
v.create_cfdata = _e_eap_edit_create_data;
v.free_cfdata = _e_eap_edit_free_data;
v.basic.apply_cfdata = _e_eap_edit_basic_apply_data;
v.basic.create_widgets = _e_eap_edit_basic_create_widgets;
v.advanced.apply_cfdata = _e_eap_edit_advanced_apply_data;
v.advanced.create_widgets = _e_eap_edit_advanced_create_widgets;
/* create config diaolg for NULL object/data */
cfd = e_config_dialog_new(con, _("Eap Editor"), NULL, 0, &v, editor);
}
/* local subsystem functions */
static void
_e_eap_edit_fill_data(E_App_Edit_CFData *cfdata)
{
/*- BASIC -*/
IFDUP(cfdata->editor->eap->name, cfdata->name);
IFDUP(cfdata->editor->eap->exe, cfdata->exe);
/*- ADVANCED -*/
IFDUP(cfdata->editor->eap->generic, cfdata->generic);
IFDUP(cfdata->editor->eap->comment, cfdata->comment);
IFDUP(cfdata->editor->eap->win_name, cfdata->wname);
IFDUP(cfdata->editor->eap->win_class, cfdata->wclass);
IFDUP(cfdata->editor->eap->win_title, cfdata->wtitle);
IFDUP(cfdata->editor->eap->win_role, cfdata->wrole);
IFDUP(cfdata->editor->eap->path, cfdata->path);
cfdata->startup_notify = cfdata->editor->eap->startup_notify;
cfdata->wait_exit = cfdata->editor->eap->wait_exit;
}
static void *
_e_eap_edit_create_data(E_Config_Dialog *cfd)
{
E_App_Edit_CFData *cfdata;
cfdata = E_NEW(E_App_Edit_CFData, 1);
if (!cfdata) return NULL;
cfdata->editor = cfd->data;
cfdata->image = NULL;
_e_eap_edit_fill_data(cfdata);
return cfdata;
}
static void
_e_eap_edit_free_data(E_Config_Dialog *cfd, void *data)
{
free(data);
}
static int
_e_eap_edit_basic_apply_data(E_Config_Dialog *cfd, void *data)
{
E_App_Edit *editor;
E_App *eap;
E_App_Edit_CFData *cfdata;
cfdata = data;
editor = cfdata->editor;
eap = editor->eap;
if(!(cfdata->path))
return -1;
E_FREE(eap->name);
E_FREE(eap->exe);
E_FREE(eap->image);
IFDUP(cfdata->name, eap->name);
IFDUP(cfdata->exe, eap->exe);
IFDUP(cfdata->image, eap->image);
eap->startup_notify = cfdata->startup_notify;
eap->wait_exit = cfdata->wait_exit;
e_app_fields_save(eap);
return 1;
}
static int
_e_eap_edit_advanced_apply_data(E_Config_Dialog *cfd, void *data)
{
E_App_Edit *editor;
E_App *eap;
E_App_Edit_CFData *cfdata;
cfdata = data;
editor = cfdata->editor;
eap = editor->eap;
if(!(cfdata->path))
return -1;
E_FREE(eap->generic);
E_FREE(eap->comment);
E_FREE(eap->win_name);
E_FREE(eap->win_class);
E_FREE(eap->win_title);
E_FREE(eap->win_role);
E_FREE(eap->icon_class);
E_FREE(eap->path);
if(cfdata->startup_notify)
eap->startup_notify = 1;
else eap->startup_notify = 0;
if(cfdata->wait_exit)
eap->wait_exit = 1;
else eap->wait_exit = 0;
IFDUP(cfdata->generic, eap->generic);
IFDUP(cfdata->comment, eap->comment);
IFDUP(cfdata->wname, eap->win_name);
IFDUP(cfdata->wclass, eap->win_class);
IFDUP(cfdata->wtitle, eap->win_title);
IFDUP(cfdata->wrole, eap->win_role);
IFDUP(cfdata->iclass, eap->icon_class);
IFDUP(cfdata->path, eap->path);
e_app_fields_save(eap);
return 1;
}
static Evas_Object *
_e_eap_edit_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, void *data)
{
E_App_Edit_CFData *cfdata;
E_App_Edit *editor;
E_App *eap;
Evas_Object *ol, *o;
Evas_Object *entry;
cfdata = data;
editor = cfdata->editor;
eap = editor->eap;
//ol = e_widget_list_add(evas, 0, 1);
ol = e_widget_table_add(evas, 0);
o = e_widget_frametable_add(evas, _("Icon"), 0);
editor->img = e_icon_add(evas);
if(eap->path)
{
e_icon_file_key_set(editor->img, eap->path, "images/0");
e_icon_fill_inside_set(editor->img, 1);
}
editor->img_widget = e_widget_iconsel_add(evas, editor->img, 48, 48,
&(cfdata->image));
e_widget_iconsel_select_callback_add(editor->img_widget, _e_eap_edit_select_cb, editor);
e_widget_frametable_object_append(o, editor->img_widget,
0, 0, 1, 1,
1, 1, 1, 1);
//e_widget_list_object_append(ol, o, 1, 1, 0.5);
e_widget_table_object_append(ol, o, 0, 0, 1, 1, 1 ,1, 1, 1);
o = e_widget_frametable_add(evas, _("Basic Info"), 0);
e_widget_frametable_object_append(o, e_widget_label_add(evas, "App name"),
0, 0, 1, 1,
1, 1, 1, 1);
entry = e_widget_entry_add(evas, &(cfdata->name));
e_widget_min_size_set(entry, 100, 1);
e_widget_frametable_object_append(o, entry,
1, 0, 1, 1,
1, 1, 1, 1);
e_widget_frametable_object_append(o, e_widget_label_add(evas, "Executable"),
0, 1, 1, 1,
1, 1, 1, 1);
e_widget_frametable_object_append(o, e_widget_entry_add(evas, &(cfdata->exe)),
1, 1, 1, 1,
1, 1, 1, 1);
//e_widget_list_object_append(ol, o, 1, 1, 0.5);
e_widget_table_object_append(ol, o, 1, 0, 1, 1, 1 ,1, 1, 1);
return ol;
}
static Evas_Object *
_e_eap_edit_advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, void *data)
{
E_App_Edit_CFData *cfdata;
E_App_Edit *editor;
E_App *eap;
Evas_Object *ol, *o;
Evas_Object *entry;
cfdata = data;
editor = cfdata->editor;
eap = editor->eap;
//ol = e_widget_table_add(evas, 0);
ol = _e_eap_edit_basic_create_widgets(cfd, evas, data);
o = e_widget_frametable_add(evas, _("General"), 0);
/*- general info -*/
e_widget_frametable_object_append(o, e_widget_label_add(evas, "Generic Info"),
0, 0, 1, 1,
1, 1, 1, 1);
entry = e_widget_entry_add(evas, &(cfdata->generic));
e_widget_min_size_set(entry, 100, 1);
e_widget_frametable_object_append(o, entry,
1, 0, 1, 1,
1, 1, 1, 1);
e_widget_frametable_object_append(o, e_widget_label_add(evas, "Comment"),
0, 1, 1, 1,
1, 1, 1, 1);
e_widget_frametable_object_append(o, e_widget_entry_add(evas, &(cfdata->comment)),
1, 1, 1, 1,
1, 1, 1, 1);
e_widget_table_object_append(ol, o, 0, 1, 1, 1, 1 ,1, 1, 1);
/*- window info -*/
o = e_widget_frametable_add(evas, _("Window"), 0);
e_widget_frametable_object_append(o, e_widget_label_add(evas, "Window Name"),
0, 0, 1, 1,
1, 1, 1, 1);
entry = e_widget_entry_add(evas, &(cfdata->wname));
e_widget_min_size_set(entry, 100, 1);
e_widget_frametable_object_append(o, entry,
1, 0, 1, 1,
1, 1, 1, 1);
e_widget_frametable_object_append(o, e_widget_label_add(evas, "Window Class"),
0, 1, 1, 1,
1, 1, 1, 1);
e_widget_frametable_object_append(o, e_widget_entry_add(evas, &(cfdata->wclass)),
1, 1, 1, 1,
1, 1, 1, 1);
e_widget_frametable_object_append(o, e_widget_label_add(evas, "Window Title"),
0, 2, 1, 1,
1, 1, 1, 1);
e_widget_frametable_object_append(o, e_widget_entry_add(evas, &(cfdata->wtitle)),
1, 2, 1, 1,
1, 1, 1, 1);
e_widget_frametable_object_append(o, e_widget_label_add(evas, "Window Role"),
0, 3, 1, 1,
1, 1, 1, 1);
e_widget_frametable_object_append(o, e_widget_entry_add(evas, &(cfdata->wrole)),
1, 3, 1, 1,
1, 1, 1, 1);
e_widget_table_object_append(ol, o, 0, 2, 1, 1, 1 ,1, 1, 1);
/*- icon info -*/
o = e_widget_frametable_add(evas, _("Icon"), 0);
e_widget_frametable_object_append(o, e_widget_label_add(evas, "Icon Class"),
0, 0, 1, 1,
1, 1, 1, 1);
entry = e_widget_entry_add(evas, &(cfdata->iclass));
e_widget_min_size_set(entry, 100, 1);
e_widget_frametable_object_append(o, entry,
1, 0, 1, 1,
1, 1, 1, 1);
e_widget_frametable_object_append(o, e_widget_label_add(evas, "Path"),
0, 1, 1, 1,
1, 1, 1, 1);
e_widget_frametable_object_append(o, e_widget_entry_add(evas, &(cfdata->path)),
1, 1, 1, 1,
1, 1, 1, 1);
e_widget_table_object_append(ol, o, 1, 1, 1, 1, 1 ,1, 1, 1);
/*- misc info -*/
o = e_widget_frametable_add(evas, _("Misc"), 0);
e_widget_frametable_object_append(o, e_widget_check_add(evas, "Startup Notify", &(cfdata->startup_notify)),
0, 0, 1, 1,
1, 1, 1, 1);
e_widget_frametable_object_append(o, e_widget_check_add(evas, "Wait Exit", &(cfdata->wait_exit)),
0, 1, 1, 1,
1, 1, 1, 1);
e_widget_table_object_append(ol, o, 1, 2, 1, 1, 1 ,1, 1, 1);
return ol;
}
void
_e_eap_edit_select_cb(Evas_Object *obj, char *file, void *data)
{
E_App_Edit *editor;
editor = data;
printf("selected: %s\n", file);
}