efl
246 строк · 7.1 Кб
1#ifdef HAVE_CONFIG_H2# include "elementary_config.h"3#endif4
5#ifdef HAVE_SYS_TIMES_H6# include <sys/times.h>7#endif8
9#ifdef _WIN3210# ifndef WIN32_LEAN_AND_MEAN11# define WIN32_LEAN_AND_MEAN12# endif13# include <windows.h>14# undef WIN32_LEAN_AND_MEAN15#endif16
17#include <Eio.h>18
19#include <Elementary.h>20
21static Elm_Genlist_Item_Class it_eio;22
23#ifdef _WIN3224ULONGLONG st_time_kernel;25ULONGLONG st_time_user;26ULONGLONG en_time_kernel;27ULONGLONG en_time_user;28#else29static clock_t st_time;30static clock_t en_time;31static struct tms st_cpu;32static struct tms en_cpu;33#endif34
35static void _sel_file(void *data, Evas_Object *obj, void *event_info);36static Eina_Bool _ls_filter_cb(void *data, Eio_File *handler, const char *file);37static void _ls_main_cb(void *data, Eio_File *handler, const char *file);38static void _ls_done_cb(void *data, Eio_File *handler);39static void _ls_error_cb(void *data, Eio_File *handler, int error);40static void _file_chosen(void *data, Evas_Object *obj, void *event_info);41static char *_gl_text_get(void *data, Evas_Object *obj, const char *part);42static Evas_Object *_gl_content_get(void *data, Evas_Object *obj, const char *part);43static Eina_Bool _gl_state_get(void *data, Evas_Object *obj, const char *part);44static void _gl_del(void *data, Evas_Object *obj);45static void _test_eio_clear(void *data, Evas_Object *obj, void *event);46
47static void48_sel_file(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)49{
50}
51
52static Eina_Bool53_ls_filter_cb(void *data EINA_UNUSED, Eio_File *handler EINA_UNUSED, const char *file EINA_UNUSED)54{
55return EINA_TRUE;56}
57
58static int59_compare_cb(const void *data1, const void *data2)60{
61Elm_Object_Item *it = (Elm_Object_Item *)data1;62Elm_Object_Item *it2 = (Elm_Object_Item *)data2;63return strcoll(elm_object_item_data_get(it),64elm_object_item_data_get(it2));65}
66
67static void68_ls_main_cb(void *data, Eio_File *handler EINA_UNUSED, const char *file)69{
70elm_genlist_item_sorted_insert(data,71&it_eio,72eina_stringshare_add(file),73NULL,74ELM_GENLIST_ITEM_NONE,75_compare_cb,76_sel_file,77NULL);78}
79
80static void81_ls_done_cb(void *data EINA_UNUSED, Eio_File *handler EINA_UNUSED)82{
83#ifdef _WIN3284FILETIME tc;85FILETIME te;86FILETIME tk;87FILETIME tu;88ULARGE_INTEGER time_kernel;89ULARGE_INTEGER time_user;90
91if (!GetProcessTimes(GetCurrentProcess(),92&tc, &te, &tk, &tu))93return;94
95time_kernel.u.LowPart = tk.dwLowDateTime;96time_kernel.u.HighPart = tk.dwHighDateTime;97en_time_kernel = time_kernel.QuadPart;98
99time_user.u.LowPart = tu.dwLowDateTime;100time_user.u.HighPart = tu.dwHighDateTime;101en_time_user = time_user.QuadPart;102
103fprintf(stderr, "ls done\n");104fprintf(stderr, "Kernel Time: %lld, User Time: %lld",105(en_time_kernel - st_time_kernel),106(en_time_user - st_time_user));107#else108en_time = times(&en_cpu);109fprintf(stderr, "ls done\n");110fprintf(stderr, "Real Time: %.jd, User Time: %.jd, System Time: %.jd\n",111(intmax_t)(en_time - st_time),112(intmax_t)(en_cpu.tms_utime - st_cpu.tms_utime),113(intmax_t)(en_cpu.tms_stime - st_cpu.tms_stime));114#endif115}
116
117static void118_ls_error_cb(void *data EINA_UNUSED, Eio_File *handler EINA_UNUSED, int error)119{
120fprintf(stderr, "error: [%s]\n", strerror(error));121}
122
123static void124_file_chosen(void *data, Evas_Object *obj EINA_UNUSED, void *event_info)125{
126const char *file = event_info;127if (file)128{129#ifdef _WIN32130FILETIME tc;131FILETIME te;132FILETIME tk;133FILETIME tu;134ULARGE_INTEGER time_kernel;135ULARGE_INTEGER time_user;136
137if (!GetProcessTimes(GetCurrentProcess(),138&tc, &te, &tk, &tu))139return;140
141time_kernel.u.LowPart = tk.dwLowDateTime;142time_kernel.u.HighPart = tk.dwHighDateTime;143st_time_kernel = time_kernel.QuadPart;144
145time_user.u.LowPart = tu.dwLowDateTime;146time_user.u.HighPart = tu.dwHighDateTime;147st_time_user = time_user.QuadPart;148#else149st_time = times(&st_cpu);150#endif151eio_file_ls(file,152_ls_filter_cb,153_ls_main_cb,154_ls_done_cb,155_ls_error_cb,156data);157}158}
159
160static char *161_gl_text_get(void *data, Evas_Object *obj EINA_UNUSED, const char *part EINA_UNUSED)162{
163char buf[PATH_MAX];164snprintf(buf, sizeof(buf), "Item # %s", (char*)data);165return strdup(buf);166}
167
168static Evas_Object *169_gl_content_get(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, const char *part EINA_UNUSED)170{
171return NULL;172}
173
174static Eina_Bool175_gl_state_get(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, const char *part EINA_UNUSED)176{
177return EINA_FALSE;178}
179
180static void181_gl_del(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED)182{
183}
184
185static void186_test_eio_clear(void *data, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED)187{
188elm_genlist_clear(data);189}
190
191void
192test_eio(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)193{
194Evas_Object *win, *vbox, *hbox, *ic, *bt, *fs_bt, *gl;195
196it_eio.item_style = "default";197it_eio.func.text_get = _gl_text_get;198it_eio.func.content_get = _gl_content_get;199it_eio.func.state_get = _gl_state_get;200it_eio.func.del = _gl_del;201
202win = elm_win_util_standard_add("fileselector-button", "File Selector Button");203elm_win_autodel_set(win, EINA_TRUE);204
205vbox = elm_box_add(win);206evas_object_size_hint_weight_set(vbox, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);207elm_win_resize_object_add(win, vbox);208evas_object_show(vbox);209
210gl = elm_genlist_add(win);211evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);212evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);213elm_box_pack_end(vbox, gl);214evas_object_show(gl);215
216/* file selector button */217hbox = elm_box_add(win);218elm_box_horizontal_set(hbox, EINA_TRUE);219ic = elm_icon_add(win);220elm_icon_standard_set(ic, "file");221evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);222fs_bt = elm_fileselector_button_add(win);223elm_object_text_set(fs_bt, "Select a dir");224elm_object_part_content_set(fs_bt, "icon", ic);225elm_fileselector_button_inwin_mode_set(fs_bt, EINA_TRUE);226elm_fileselector_folder_only_set(fs_bt, EINA_TRUE);227
228elm_box_pack_end(hbox, fs_bt);229elm_box_pack_end(vbox, hbox);230evas_object_show(fs_bt);231evas_object_show(ic);232
233/* attribute setting buttons */234bt = elm_button_add(win);235elm_object_text_set(bt, "clear");236evas_object_smart_callback_add(bt, "clicked", _test_eio_clear, gl);237elm_box_pack_end(hbox, bt);238evas_object_show(bt);239evas_object_show(hbox);240
241evas_object_smart_callback_add(fs_bt, "file,chosen", _file_chosen, gl);242
243evas_object_resize(win, 300 * elm_config_scale_get(),244500 * elm_config_scale_get());245evas_object_show(win);246}
247