break out wallpaper import dialog and import settings dialog into separate dialogs usable outside the wallpaper widget, also clean up this code
SVN revision: 75047devs/princeamd/enlightenment-0.17-elive
parent
0689758ce0
commit
5e1e915578
11 changed files with 802 additions and 1104 deletions
@ -0,0 +1,520 @@ |
||||
#include "e.h" |
||||
|
||||
#define IMPORT_STRETCH 0 |
||||
#define IMPORT_TILE 1 |
||||
#define IMPORT_CENTER 2 |
||||
#define IMPORT_SCALE_ASPECT_IN 3 |
||||
#define IMPORT_SCALE_ASPECT_OUT 4 |
||||
#define IMPORT_PAN 5 |
||||
|
||||
static void _import_edj_gen(E_Import_Config_Dialog *import); |
||||
static Eina_Bool _import_cb_edje_cc_exit(void *data, int type, void *event); |
||||
|
||||
|
||||
static void |
||||
_import_edj_gen(E_Import_Config_Dialog *import) |
||||
{ |
||||
Evas *evas; |
||||
Evas_Object *img; |
||||
int fd, num = 1; |
||||
int w = 0, h = 0; |
||||
const char *file, *locale; |
||||
char buf[PATH_MAX], cmd[PATH_MAX], tmpn[PATH_MAX], ipart[PATH_MAX], enc[128]; |
||||
char *imgdir = NULL, *fstrip; |
||||
int cr, cg, cb, ca; |
||||
FILE *f; |
||||
size_t len, off; |
||||
|
||||
evas = e_win_evas_get(import->dia->win); |
||||
file = ecore_file_file_get(import->file); |
||||
fstrip = ecore_file_strip_ext(file); |
||||
if (!fstrip) return; |
||||
len = e_user_dir_snprintf(buf, sizeof(buf), "backgrounds/%s.edj", fstrip); |
||||
if (len >= sizeof(buf)) return; |
||||
off = len - (sizeof(".edj") - 1); |
||||
for (num = 1; ecore_file_exists(buf) && num < 100; num++) |
||||
snprintf(buf + off, sizeof(buf) - off, "-%d.edj", num); |
||||
free(fstrip); |
||||
cr = import->color.r; |
||||
cg = import->color.g; |
||||
cb = import->color.b; |
||||
ca = import->color.a; |
||||
|
||||
if (num == 100) |
||||
{ |
||||
printf("Couldn't come up with another filename for %s\n", buf); |
||||
return; |
||||
} |
||||
|
||||
strcpy(tmpn, "/tmp/e_bgdlg_new.edc-tmp-XXXXXX"); |
||||
fd = mkstemp(tmpn); |
||||
if (fd < 0) |
||||
{ |
||||
printf("Error Creating tmp file: %s\n", strerror(errno)); |
||||
return; |
||||
} |
||||
close(fd); |
||||
|
||||
f = fopen(tmpn, "w"); |
||||
if (!f) |
||||
{ |
||||
printf("Cannot open %s for writing\n", tmpn); |
||||
return; |
||||
} |
||||
|
||||
imgdir = ecore_file_dir_get(import->file); |
||||
if (!imgdir) ipart[0] = '\0'; |
||||
else |
||||
{ |
||||
snprintf(ipart, sizeof(ipart), "-id %s", e_util_filename_escape(imgdir)); |
||||
free(imgdir); |
||||
} |
||||
|
||||
img = evas_object_image_add(evas); |
||||
evas_object_image_file_set(img, import->file, NULL); |
||||
evas_object_image_size_get(img, &w, &h); |
||||
evas_object_del(img); |
||||
|
||||
if (import->external) |
||||
{ |
||||
fstrip = strdup(e_util_filename_escape(import->file)); |
||||
snprintf(enc, sizeof(enc), "USER"); |
||||
} |
||||
else |
||||
{ |
||||
fstrip = strdup(e_util_filename_escape(file)); |
||||
if (import->quality == 100) |
||||
snprintf(enc, sizeof(enc), "COMP"); |
||||
else |
||||
snprintf(enc, sizeof(enc), "LOSSY %i", import->quality); |
||||
} |
||||
switch (import->method) |
||||
{ |
||||
case IMPORT_STRETCH: |
||||
fprintf(f, |
||||
"images { image: \"%s\" %s; }\n" |
||||
"collections {\n" |
||||
"group { name: \"e/desktop/background\";\n" |
||||
"data { item: \"style\" \"0\"; }\n" |
||||
"max: %i %i;\n" |
||||
"parts {\n" |
||||
"part { name: \"bg\"; mouse_events: 0;\n" |
||||
"description { state: \"default\" 0.0;\n" |
||||
"image { normal: \"%s\"; scale_hint: STATIC; }\n" |
||||
"} } } } }\n" |
||||
, fstrip, enc, w, h, fstrip); |
||||
break; |
||||
|
||||
case IMPORT_TILE: |
||||
fprintf(f, |
||||
"images { image: \"%s\" %s; }\n" |
||||
"collections {\n" |
||||
"group { name: \"e/desktop/background\";\n" |
||||
"data { item: \"style\" \"1\"; }\n" |
||||
"max: %i %i;\n" |
||||
"parts {\n" |
||||
"part { name: \"bg\"; mouse_events: 0;\n" |
||||
"description { state: \"default\" 0.0;\n" |
||||
"image { normal: \"%s\"; }\n" |
||||
"fill { size {\n" |
||||
"relative: 0.0 0.0;\n" |
||||
"offset: %i %i;\n" |
||||
"} } } } } } }\n" |
||||
, fstrip, enc, w, h, fstrip, w, h); |
||||
break; |
||||
|
||||
case IMPORT_CENTER: |
||||
fprintf(f, |
||||
"images { image: \"%s\" %s; }\n" |
||||
"collections {\n" |
||||
"group { name: \"e/desktop/background\";\n" |
||||
"data { item: \"style\" \"2\"; }\n" |
||||
"max: %i %i;\n" |
||||
"parts {\n" |
||||
"part { name: \"col\"; type: RECT; mouse_events: 0;\n" |
||||
"description { state: \"default\" 0.0;\n" |
||||
"color: %i %i %i %i;\n" |
||||
"} }\n" |
||||
"part { name: \"bg\"; mouse_events: 0;\n" |
||||
"description { state: \"default\" 0.0;\n" |
||||
"min: %i %i; max: %i %i;\n" |
||||
"image { normal: \"%s\"; }\n" |
||||
"} } } } }\n" |
||||
, fstrip, enc, w, h, cr, cg, cb, ca, w, h, w, h, fstrip); |
||||
break; |
||||
|
||||
case IMPORT_SCALE_ASPECT_IN: |
||||
locale = e_intl_language_get(); |
||||
setlocale(LC_NUMERIC, "C"); |
||||
fprintf(f, |
||||
"images { image: \"%s\" %s; }\n" |
||||
"collections {\n" |
||||
"group { name: \"e/desktop/background\";\n" |
||||
"data { item: \"style\" \"3\"; }\n" |
||||
"max: %i %i;\n" |
||||
"parts {\n" |
||||
"part { name: \"col\"; type: RECT; mouse_events: 0;\n" |
||||
"description { state: \"default\" 0.0;\n" |
||||
"color: %i %i %i %i;\n" |
||||
"} }\n" |
||||
"part { name: \"bg\"; mouse_events: 0;\n" |
||||
"description { state: \"default\" 0.0;\n" |
||||
"aspect: %1.9f %1.9f; aspect_preference: BOTH;\n" |
||||
"image { normal: \"%s\"; scale_hint: STATIC; }\n" |
||||
"} } } } }\n" |
||||
, fstrip, enc, w, h, cr, cg, cb, ca, (double)w / (double)h, (double)w / (double)h, fstrip); |
||||
setlocale(LC_NUMERIC, locale); |
||||
break; |
||||
|
||||
case IMPORT_SCALE_ASPECT_OUT: |
||||
locale = e_intl_language_get(); |
||||
setlocale(LC_NUMERIC, "C"); |
||||
fprintf(f, |
||||
"images { image: \"%s\" %s; }\n" |
||||
"collections {\n" |
||||
"group { name: \"e/desktop/background\";\n" |
||||
"data { item: \"style\" \"4\"; }\n" |
||||
"max: %i %i;\n" |
||||
"parts {\n" |
||||
"part { name: \"bg\"; mouse_events: 0;\n" |
||||
"description { state: \"default\" 0.0;\n" |
||||
"aspect: %1.9f %1.9f; aspect_preference: NONE;\n" |
||||
"image { normal: \"%s\"; scale_hint: STATIC; }\n" |
||||
"} } } } }\n" |
||||
, fstrip, enc, w, h, (double)w / (double)h, (double)w / (double)h, fstrip); |
||||
setlocale(LC_NUMERIC, locale); |
||||
break; |
||||
|
||||
case IMPORT_PAN: |
||||
locale = e_intl_language_get(); |
||||
setlocale(LC_NUMERIC, "C"); |
||||
fprintf(f, |
||||
"images { image: \"%s\" %s; }\n" |
||||
"collections {\n" |
||||
"group { name: \"e/desktop/background\";\n" |
||||
"data { item: \"style\" \"4\"; }\n" |
||||
"max: %i %i;\n" |
||||
"script {\n" |
||||
"public cur_anim; public cur_x; public cur_y; public prev_x;\n" |
||||
"public prev_y; public total_x; public total_y; \n" |
||||
"public pan_bg(val, Float:v) {\n" |
||||
"new Float:x, Float:y, Float:px, Float: py;\n" |
||||
|
||||
"px = get_float(prev_x); py = get_float(prev_y);\n" |
||||
"if (get_int(total_x) > 1) {\n" |
||||
"x = float(get_int(cur_x)) / (get_int(total_x) - 1);\n" |
||||
"x = px - (px - x) * v;\n" |
||||
"} else { x = 0.0; v = 1.0; }\n" |
||||
"if (get_int(total_y) > 1) {\n" |
||||
"y = float(get_int(cur_y)) / (get_int(total_y) - 1);\n" |
||||
"y = py - (py - y) * v;\n" |
||||
"} else { y = 0.0; v = 1.0; }\n" |
||||
|
||||
"set_state_val(PART:\"bg\", STATE_ALIGNMENT, x, y);\n" |
||||
|
||||
"if (v >= 1.0) {\n" |
||||
"set_int(cur_anim, 0); set_float(prev_x, x);\n" |
||||
"set_float(prev_y, y); return 0;\n" |
||||
"}\n" |
||||
"return 1;\n" |
||||
"}\n" |
||||
"public message(Msg_Type:type, id, ...) {\n" |
||||
"if ((type == MSG_FLOAT_SET) && (id == 0)) {\n" |
||||
"new ani;\n" |
||||
|
||||
"get_state_val(PART:\"bg\", STATE_ALIGNMENT, prev_x, prev_y);\n" |
||||
"set_int(cur_x, round(getfarg(3))); set_int(total_x, round(getfarg(4)));\n" |
||||
"set_int(cur_y, round(getfarg(5))); set_int(total_y, round(getfarg(6)));\n" |
||||
|
||||
"ani = get_int(cur_anim); if (ani > 0) cancel_anim(ani);\n" |
||||
"ani = anim(getfarg(2), \"pan_bg\", 0); set_int(cur_anim, ani);\n" |
||||
"} } }\n" |
||||
"parts {\n" |
||||
"part { name: \"bg\"; mouse_events: 0;\n" |
||||
"description { state: \"default\" 0.0;\n" |
||||
"aspect: %1.9f %1.9f; aspect_preference: NONE;\n" |
||||
"image { normal: \"%s\"; scale_hint: STATIC; }\n" |
||||
"} } }\n" |
||||
"programs { program {\n" |
||||
" name: \"init\";\n" |
||||
" signal: \"load\";\n" |
||||
" source: \"\";\n" |
||||
" script { custom_state(PART:\"bg\", \"default\", 0.0);\n" |
||||
" set_state(PART:\"bg\", \"custom\", 0.0);\n" |
||||
" set_float(prev_x, 0.0); set_float(prev_y, 0.0);\n" |
||||
"} } } } }\n" |
||||
, fstrip, enc, w, h, (double)w / (double)h, (double)w / (double)h, fstrip); |
||||
setlocale(LC_NUMERIC, locale); |
||||
break; |
||||
|
||||
default: |
||||
/* won't happen */ |
||||
break; |
||||
} |
||||
free(fstrip); |
||||
|
||||
fclose(f); |
||||
|
||||
snprintf(cmd, sizeof(cmd), "edje_cc -v %s %s %s", |
||||
ipart, tmpn, e_util_filename_escape(buf)); |
||||
|
||||
import->tmpf = strdup(tmpn); |
||||
import->fdest = eina_stringshare_add(buf); |
||||
import->exe_handler = |
||||
ecore_event_handler_add(ECORE_EXE_EVENT_DEL, |
||||
_import_cb_edje_cc_exit, import); |
||||
import->exe = ecore_exe_run(cmd, import); |
||||
} |
||||
|
||||
static Eina_Bool |
||||
_import_cb_edje_cc_exit(void *data, __UNUSED__ int type, void *event) |
||||
{ |
||||
E_Import_Config_Dialog *import; |
||||
Ecore_Exe_Event_Del *ev; |
||||
int r = 1; |
||||
|
||||
ev = event; |
||||
import = data; |
||||
if (ecore_exe_data_get(ev->exe) != import) return ECORE_CALLBACK_PASS_ON; |
||||
|
||||
if (ev->exit_code != 0) |
||||
{ |
||||
e_util_dialog_show(_("Picture E_Import_Config_Dialog Error"), |
||||
_("Enlightenment was unable to import the picture<br>" |
||||
"due to conversion errors.")); |
||||
r = 0; |
||||
} |
||||
|
||||
if (r && import->ok) |
||||
{ |
||||
e_object_ref(E_OBJECT(import)); |
||||
import->ok((void*)import->fdest, import); |
||||
e_object_del(E_OBJECT(import)); |
||||
e_object_unref(E_OBJECT(import)); |
||||
} |
||||
else |
||||
e_object_del(E_OBJECT(import)); |
||||
|
||||
return ECORE_CALLBACK_DONE; |
||||
} |
||||
|
||||
static void |
||||
_import_cb_close(void *data, E_Dialog *dia __UNUSED__) |
||||
{ |
||||
E_Import_Config_Dialog *import = data; |
||||
|
||||
e_object_ref(data); |
||||
if (import->cancel) import->cancel(import); |
||||
e_object_del(data); |
||||
e_object_unref(data); |
||||
} |
||||
|
||||
static void |
||||
_import_cb_ok(void *data, E_Dialog *dia __UNUSED__) |
||||
{ |
||||
E_Import_Config_Dialog *import = data; |
||||
const char *file; |
||||
char buf[PATH_MAX]; |
||||
int is_bg, is_theme, r; |
||||
|
||||
r = 0; |
||||
if (!import->file) return; |
||||
file = ecore_file_file_get(import->file); |
||||
if (!eina_str_has_extension(file, "edj")) |
||||
{ |
||||
_import_edj_gen(import); |
||||
e_win_hide(import->dia->win); |
||||
return; |
||||
} |
||||
e_user_dir_snprintf(buf, sizeof(buf), "backgrounds/%s", file); |
||||
|
||||
is_bg = edje_file_group_exists(import->file, "e/desktop/background"); |
||||
is_theme = edje_file_group_exists(import->file, |
||||
"e/widgets/border/default/border"); |
||||
|
||||
if ((is_bg) && (!is_theme)) |
||||
{ |
||||
if (!ecore_file_cp(import->file, buf)) |
||||
{ |
||||
e_util_dialog_show(_("Import Error"), |
||||
_("Enlightenment was unable to " |
||||
"import the image<br>due to a " |
||||
"copy error.")); |
||||
} |
||||
else |
||||
r = 1; |
||||
} |
||||
else |
||||
{ |
||||
e_util_dialog_show(_("Import Error"), |
||||
_("Enlightenment was unable to " |
||||
"import the image.<br><br>" |
||||
"Are you sure this is a valid " |
||||
"image?")); |
||||
} |
||||
|
||||
if (r) |
||||
{ |
||||
e_object_ref(E_OBJECT(import)); |
||||
if (import->ok) import->ok((void*)buf, import); |
||||
e_object_del(E_OBJECT(import)); |
||||
e_object_unref(E_OBJECT(import)); |
||||
} |
||||
else |
||||
_import_cb_close(import, NULL); |
||||
} |
||||
|
||||
static void |
||||
_e_import_config_preview_size_get(int size, int w, int h,int *tw, int *th) |
||||
{ |
||||
if (size <= 0) return; |
||||
double aspect; |
||||
aspect = (double)w/h; |
||||
|
||||
if(w > size) |
||||
{ |
||||
w = size; |
||||
h = (w/aspect); |
||||
} |
||||
*tw = w; |
||||
*th = h; |
||||
} |
||||
|
||||
static void |
||||
_e_import_config_dialog_del(void *data) |
||||
{ |
||||
E_Import_Config_Dialog *import = data; |
||||
|
||||
if (import->exe_handler) ecore_event_handler_del(import->exe_handler); |
||||
import->exe_handler = NULL; |
||||
if (import->tmpf) unlink(import->tmpf); |
||||
free(import->tmpf); |
||||
eina_stringshare_del(import->fdest); |
||||
import->exe = NULL; |
||||
eina_stringshare_del(import->file); |
||||
e_object_del(E_OBJECT(import->dia)); |
||||
free(import); |
||||
} |
||||
|
||||
static void |
||||
_e_import_config_dialog_win_del(E_Win *win) |
||||
{ |
||||
E_Dialog *dia; |
||||
E_Import_Config_Dialog *import; |
||||
|
||||
dia = win->data; |
||||
import = dia->data; |
||||
e_object_ref(E_OBJECT(import)); |
||||
if (import->cancel) import->cancel(import); |
||||
e_object_del(E_OBJECT(import)); |
||||
e_object_unref(E_OBJECT(import)); |
||||
} |
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
EAPI E_Import_Config_Dialog * |
||||
e_import_config_dialog_show(E_Container *con, const char *path, Ecore_End_Cb ok, Ecore_Cb cancel) |
||||
{ |
||||
Evas *evas; |
||||
E_Dialog *dia; |
||||
E_Import_Config_Dialog *import; |
||||
Evas_Object *o, *of, *ord, *ot, *ol, *preview, *frame; |
||||
E_Radio_Group *rg; |
||||
int w, h, tw, th; |
||||
|
||||
if (!path) return NULL; |
||||
|
||||
import = E_OBJECT_ALLOC(E_Import_Config_Dialog, E_IMPORT_CONFIG_DIALOG_TYPE, _e_import_config_dialog_del); |
||||
if (!import) return NULL; |
||||
|
||||
dia = e_dialog_new(con, "E", "_import_config_dialog"); |
||||
e_dialog_title_set(dia, _("Import Settings...")); |
||||
dia->data = import; |
||||
import->dia = dia; |
||||
import->ok = ok, import->cancel = cancel; |
||||
import->path = eina_stringshare_add(path); |
||||
e_win_delete_callback_set(dia->win, _e_import_config_dialog_win_del); |
||||
|
||||
evas = e_win_evas_get(dia->win); |
||||
|
||||
import->method = IMPORT_SCALE_ASPECT_OUT; |
||||
import->external = 0; |
||||
import->quality = 90; |
||||
import->file = eina_stringshare_add(path); |
||||
|
||||
evas = e_win_evas_get(dia->win); |
||||
|
||||
o = e_widget_list_add(evas, 0, 0); |
||||
|
||||
ot = e_widget_list_add(evas, 0, 0); |
||||
frame = e_widget_frametable_add(evas, _("Preview"), 1); |
||||
|
||||
preview = evas_object_image_add(evas); |
||||
evas_object_image_file_set(preview, path, NULL); |
||||
evas_object_image_size_get(preview,&w, &h); |
||||
evas_object_del(preview); |
||||
|
||||
_e_import_config_preview_size_get(320, w, h, &tw, &th); |
||||
|
||||
preview = e_widget_preview_add(evas, tw, th); |
||||
e_widget_preview_thumb_set(preview, path, NULL, tw, th); |
||||
|
||||
e_widget_frametable_object_append(frame, preview, 0, 0, 1, 1, 1, 1, 1, 0); |
||||
e_widget_list_object_append(ot, frame, 1, 1, 0); |
||||
of = e_widget_frametable_add(evas, _("Fill and Stretch Options"), 1); |
||||
rg = e_widget_radio_group_new(&import->method); |
||||
ord = e_widget_radio_icon_add(evas, _("Stretch"), |
||||
"enlightenment/wallpaper_stretch", |
||||
24, 24, IMPORT_STRETCH, rg); |
||||
e_widget_frametable_object_append(of, ord, 0, 0, 1, 1, 1, 0, 1, 0); |
||||
ord = e_widget_radio_icon_add(evas, _("Center"), |
||||
"enlightenment/wallpaper_center", |
||||
24, 24, IMPORT_CENTER, rg); |
||||
e_widget_frametable_object_append(of, ord, 1, 0, 1, 1, 1, 0, 1, 0); |
||||
ord = e_widget_radio_icon_add(evas, _("Tile"), |
||||
"enlightenment/wallpaper_tile", |
||||
24, 24, IMPORT_TILE, rg); |
||||
e_widget_frametable_object_append(of, ord, 2, 0, 1, 1, 1, 0, 1, 0); |
||||
ord = e_widget_radio_icon_add(evas, _("Within"), |
||||
"enlightenment/wallpaper_scale_aspect_in", |
||||
24, 24, IMPORT_SCALE_ASPECT_IN, rg); |
||||
e_widget_frametable_object_append(of, ord, 3, 0, 1, 1, 1, 0, 1, 0); |
||||
ord = e_widget_radio_icon_add(evas, _("Fill"), |
||||
"enlightenment/wallpaper_scale_aspect_out", |
||||
24, 24, IMPORT_SCALE_ASPECT_OUT, rg); |
||||
e_widget_frametable_object_append(of, ord, 4, 0, 1, 1, 1, 0, 1, 0); |
||||
ord = e_widget_radio_icon_add(evas, _("Pan"), |
||||
"enlightenment/wallpaper_pan", |
||||
24, 24, IMPORT_PAN, rg); |
||||
e_widget_frametable_object_append(of, ord, 5, 0, 1, 1, 1, 0, 1, 0); |
||||
e_widget_list_object_append(ot, of, 1, 1, 0); |
||||
|
||||
ol = e_widget_list_add(evas, 0, 1); |
||||
|
||||
of = e_widget_frametable_add(evas, _("File Quality"), 0); |
||||
ord = e_widget_check_add(evas, _("Use original file"), &(import->external)); |
||||
e_widget_frametable_object_append(of, ord, 0, 0, 1, 1, 1, 0, 1, 0); |
||||
ord = e_widget_slider_add(evas, 1, 0, _("%3.0f%%"), 0.0, 100.0, 1.0, 0, |
||||
NULL, &(import->quality), 150); |
||||
e_widget_frametable_object_append(of, ord, 0, 1, 1, 1, 1, 0, 1, 0); |
||||
e_widget_list_object_append(ol, of, 1, 1, 0); |
||||
|
||||
of = e_widget_framelist_add(evas, _("Fill Color"), 0); |
||||
ord = e_widget_color_well_add(evas, &import->color, 1); |
||||
e_widget_framelist_object_append(of, ord); |
||||
e_widget_list_object_append(ol, of, 1, 0, 1); |
||||
e_widget_list_object_append(ot, ol, 1, 1, 0); |
||||
|
||||
e_widget_list_object_append(o, ot, 0, 0, 0.5); |
||||
|
||||
e_widget_size_min_get(o, &w, &h); |
||||
e_dialog_content_set(dia, o, w, h); |
||||
e_dialog_button_add(dia, _("OK"), NULL, _import_cb_ok, import); |
||||
e_dialog_button_add(dia, _("Cancel"), NULL, _import_cb_close, import); |
||||
e_win_centered_set(dia->win, 1); |
||||
e_dialog_border_icon_set(dia, "folder-image"); |
||||
e_dialog_button_focus_num(dia, 0); |
||||
e_dialog_show(dia); |
||||
|
||||
return import; |
||||
} |
@ -0,0 +1,32 @@ |
||||
#ifdef E_TYPEDEFS |
||||
typedef struct _E_Import_Config_Dialog E_Import_Config_Dialog; |
||||
#else |
||||
#ifndef E_IMPORT_CONFIG_DIALOG_H |
||||
#define E_IMPORT_CONFIG_DIALOG_H |
||||
|
||||
#define E_IMPORT_CONFIG_DIALOG_TYPE 0xE0b01040 |
||||
struct _E_Import_Config_Dialog |
||||
{ |
||||
E_Object e_obj_inherit; |
||||
Ecore_End_Cb ok; |
||||
Ecore_Cb cancel; |
||||
|
||||
const char *file; |
||||
int method; |
||||
int external; |
||||
int quality; |
||||
E_Color color; |
||||
|
||||
Ecore_Exe *exe; |
||||
Ecore_Event_Handler *exe_handler; |
||||
const char *path; |
||||
char *tmpf; |
||||
const char *fdest; |
||||
|
||||
E_Dialog *dia; |
||||
}; |
||||
|
||||
EAPI E_Import_Config_Dialog *e_import_config_dialog_show(E_Container *con, const char *path, Ecore_End_Cb ok, Ecore_Cb cancel); |
||||
|
||||
#endif |
||||
#endif |
@ -0,0 +1,182 @@ |
||||
#include "e.h" |
||||
|
||||
static void |
||||
_fsel_path_save(E_Import_Dialog *id) |
||||
{ |
||||
const char *fdev = NULL, *fpath = NULL; |
||||
|
||||
e_widget_fsel_path_get(id->fsel_obj, &fdev, &fpath); |
||||
if ((fdev) || (fpath)) |
||||
{ |
||||
eina_stringshare_replace(&e_config->wallpaper_import_last_dev, fdev); |
||||
eina_stringshare_replace(&e_config->wallpaper_import_last_path, fpath); |
||||
e_config_save_queue(); |
||||
} |
||||
} |
||||
|
||||
static void |
||||
_fsel_cb_close(void *data, E_Dialog *dia __UNUSED__) |
||||
{ |
||||
E_Import_Dialog *id = data; |
||||
|
||||
e_object_ref(data); |
||||
if (id->cancel) id->cancel(id); |
||||
e_object_del(data); |
||||
e_object_unref(data); |
||||
} |
||||
|
||||
static void |
||||
_import_ok(void *data, void *data2) |
||||
{ |
||||
E_Import_Dialog *id; |
||||
|
||||
id = e_object_data_get(data2); |
||||
e_object_ref(E_OBJECT(id)); |
||||
if (id->ok) id->ok(data, id); |
||||
e_object_del(E_OBJECT(id)); |
||||
e_object_unref(E_OBJECT(id)); |
||||
} |
||||
|
||||
static void |
||||
_fsel_cb_ok(void *data, E_Dialog *dia __UNUSED__) |
||||
{ |
||||
E_Import_Dialog *id; |
||||
const char *path, *p; |
||||
int is_bg, is_theme, r; |
||||
const char *file; |
||||
char buf[PATH_MAX]; |
||||
|
||||
id = data; |
||||
path = e_widget_fsel_selection_path_get(id->fsel_obj); |
||||
if (!path) return; |
||||
|
||||
p = strrchr(path, '.'); |
||||
if ((p) && (strcasecmp(p, ".edj"))) |
||||
{ |
||||
E_Import_Config_Dialog *import; |
||||
import = e_import_config_dialog_show(id->dia->win->container, path, _import_ok, NULL); |
||||
e_object_data_set(E_OBJECT(import), id); |
||||
return; |
||||
} |
||||
r = 0; |
||||
file = ecore_file_file_get(path); |
||||
e_user_dir_snprintf(buf, sizeof(buf), "backgrounds/%s", file); |
||||
|
||||
is_bg = edje_file_group_exists(path, "e/desktop/background"); |
||||
is_theme = |
||||
edje_file_group_exists(path, "e/widgets/border/default/border"); |
||||
|
||||
if ((is_bg) && (!is_theme)) |
||||
{ |
||||
if (!ecore_file_cp(path, buf)) |
||||
{ |
||||
e_util_dialog_show(_("Import Error"), |
||||
_("Enlightenment was unable to " |
||||
"import the image<br>due to a " |
||||
"copy error.")); |
||||
} |
||||
else |
||||
r = 1; |
||||
} |
||||
else |
||||
{ |
||||
e_util_dialog_show(_("Import Error"), |
||||
_("Enlightenment was unable to " |
||||
"import the image.<br><br>" |
||||
"Are you sure this is a valid " |
||||
"image?")); |
||||
} |
||||
|
||||
if (r) |
||||
{ |
||||
e_object_ref(E_OBJECT(id)); |
||||
if (id->ok) id->ok(buf, id); |
||||
e_object_del(E_OBJECT(id)); |
||||
e_object_unref(E_OBJECT(id)); |
||||
} |
||||
else |
||||
_fsel_cb_close(id, NULL); |
||||
} |
||||
|
||||
|
||||
static void |
||||
_e_import_dialog_del(void *data) |
||||
{ |
||||
E_Import_Dialog *id = data; |
||||
|
||||
_fsel_path_save(id); |
||||
e_object_del(E_OBJECT(id->dia)); |
||||
free(id); |
||||
} |
||||
|
||||
static void |
||||
_e_import_dialog_win_del(E_Win *win) |
||||
{ |
||||
E_Dialog *dia; |
||||
E_Import_Dialog *id; |
||||
|
||||
dia = win->data; |
||||
id = dia->data; |
||||
e_object_del(E_OBJECT(id)); |
||||
} |
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
EAPI E_Import_Dialog * |
||||
e_import_dialog_show(E_Container *con, const char *dev, const char *path, Ecore_End_Cb ok, Ecore_Cb cancel) |
||||
{ |
||||
Evas *evas; |
||||
E_Import_Dialog *id; |
||||
Evas_Object *ofm; |
||||
int w, h; |
||||
const char *fdev, *fpath; |
||||
char buf[PATH_MAX]; |
||||
E_Dialog *dia; |
||||
|
||||
id = E_OBJECT_ALLOC(E_Import_Dialog, E_IMPORT_DIALOG_TYPE, _e_import_dialog_del); |
||||
if (!id) return NULL; |
||||
|
||||
dia = e_dialog_new(con, "E", "_import_fsel_dialog"); |
||||
dia->data = id; |
||||
id->dia = dia; |
||||
id->ok = ok, id->cancel = cancel; |
||||
e_win_delete_callback_set(dia->win, _e_import_dialog_win_del); |
||||
|
||||
evas = e_win_evas_get(dia->win); |
||||
e_dialog_title_set(dia, _("Select a Picture...")); |
||||
|
||||
fdev = dev ?: e_config->wallpaper_import_last_dev; |
||||
fpath = path ?: e_config->wallpaper_import_last_path; |
||||
if (fdev) |
||||
snprintf(buf, sizeof(buf), "%s/%s", |
||||
fdev, path); |
||||
else |
||||
snprintf(buf, sizeof(buf), "%s", path); |
||||
|
||||
if (!ecore_file_exists(ecore_file_realpath(buf))) |
||||
fpath = "/"; |
||||
else |
||||
fpath = path ?: e_config->wallpaper_import_last_path; |
||||
|
||||
if ((!fdev) && (!fpath)) |
||||
{ |
||||
fdev = "~/"; |
||||
fpath = "/"; |
||||
} |
||||
|
||||
printf("LAST: [%s] '%s' '%s'\n", buf, fdev, fpath); |
||||
ofm = e_widget_fsel_add(evas, fdev, fpath, NULL, NULL, NULL, NULL, |
||||
NULL, NULL, 1); |
||||
e_widget_fsel_window_object_set(ofm, E_OBJECT(dia->win)); |
||||
id->fsel_obj = ofm; |
||||
e_widget_size_min_get(ofm, &w, &h); |
||||
e_dialog_content_set(dia, ofm, w, h); |
||||
|
||||
e_dialog_button_add(dia, _("Import"), NULL, _fsel_cb_ok, id); |
||||
e_dialog_button_add(dia, _("Cancel"), NULL, _fsel_cb_close, id); |
||||
e_dialog_border_icon_set(dia, "enlightenment/background"); |
||||
e_dialog_show(dia); |
||||
e_win_centered_set(dia->win, 1); |
||||
e_widget_focus_set(ofm, 1); |
||||
|
||||
return id; |
||||
} |
@ -0,0 +1,21 @@ |
||||
#ifdef E_TYPEDEFS |
||||
typedef struct _E_Import_Dialog E_Import_Dialog; |
||||
#else |
||||
#ifndef E_IMPORT_DIALOG_H |
||||
#define E_IMPORT_DIALOG_H |
||||
|
||||
#define E_IMPORT_DIALOG_TYPE 0xE0b0103f |
||||
struct _E_Import_Dialog |
||||
{ |
||||
E_Object e_obj_inherit; |
||||
Evas_Object *fsel_obj; |
||||
Ecore_End_Cb ok; |
||||
Ecore_Cb cancel; |
||||
|
||||
E_Dialog *dia; |
||||
}; |
||||
|
||||
EAPI E_Import_Dialog *e_import_dialog_show(E_Container *con, const char *dev, const char *path, Ecore_End_Cb ok, Ecore_Cb cancel); |
||||
|
||||
#endif |
||||
#endif |
File diff suppressed because it is too large
Load Diff
@ -1,13 +0,0 @@ |
||||
#ifdef E_TYPEDEFS |
||||
#else |
||||
#ifndef E_INT_CONFIG_WALLPAPER_IMPORT_H |
||||
#define E_INT_CONFIG_WALLPAPER_IMPORT_H |
||||
|
||||
E_Win *e_int_config_wallpaper_fsel(E_Config_Dialog *parent); |
||||
E_Win *e_int_config_wallpaper_import(void *data, const char *path); |
||||
void e_int_config_wallpaper_del(E_Win *win); |
||||
void e_int_config_wallpaper_fsel_del(E_Win *win); |
||||
void e_int_config_wallpaper_import_del(E_Win *win); |
||||
|
||||
#endif |
||||
#endif |
Loading…
Reference in new issue