From 305c7c4b436ef46528a22f40e6822020a8b86480 Mon Sep 17 00:00:00 2001 From: Andy Williams Date: Sat, 6 Jan 2018 13:42:24 +0000 Subject: [PATCH] examples: refactor template code to work for examples too --- data/extra/examples/examples.edc | 6 +- data/extra/templates/eflproject.edc | 23 --- data/extra/templates/eflproject_python.edc | 23 --- data/extra/templates/meson.build | 22 +-- data/extra/templates/templates.edc | 45 +++++ src/bin/screens/edi_welcome.c | 198 ++++++--------------- 6 files changed, 109 insertions(+), 208 deletions(-) delete mode 100644 data/extra/templates/eflproject.edc delete mode 100644 data/extra/templates/eflproject_python.edc create mode 100644 data/extra/templates/templates.edc diff --git a/data/extra/examples/examples.edc b/data/extra/examples/examples.edc index 230ceb4..482f346 100644 --- a/data/extra/examples/examples.edc +++ b/data/extra/examples/examples.edc @@ -5,7 +5,7 @@ collections { data { item: "title" "C EFL Beta Hello World"; - item: "directory" "tutorials/c/hellogui/"; + item: "path" "tutorials/c/hellogui/"; item: "description" "Hello World using the EFL Beta APIs"; } @@ -27,7 +27,7 @@ collections { data { item: "title" "C EFL Beta Game of Life"; - item: "directory" "apps/c/life/"; + item: "path" "apps/c/life/"; item: "description" "Game of Life using the EFL Beta APIs"; } @@ -49,7 +49,7 @@ collections { data { item: "title" "C EFL Beta Basic Text Editor"; - item: "directory" "apps/c/texteditor/"; + item: "path" "apps/c/texteditor/"; item: "description" "A basic text editor app using the EFL Beta APIs"; } diff --git a/data/extra/templates/eflproject.edc b/data/extra/templates/eflproject.edc deleted file mode 100644 index d0e3375..0000000 --- a/data/extra/templates/eflproject.edc +++ /dev/null @@ -1,23 +0,0 @@ -data { - item: "title" "C EFL Project"; - item: "file" "skeletons/eflproject.tar.gz"; - item: "description" - - "Begin your C programming EFL project. All content is freely modifiable and distributable and licensed in the public-domain.

Happy hacking!"; -} - -collections { - group { - name: "logo"; - max: 128 128; - parts { - part { name: "icon"; - description { state: "default" 0.0; - max: 128 128; - image.image: "c.png" COMP; - image.normal: "c.png"; - } - } - } - } -} diff --git a/data/extra/templates/eflproject_python.edc b/data/extra/templates/eflproject_python.edc deleted file mode 100644 index 24cf5d5..0000000 --- a/data/extra/templates/eflproject_python.edc +++ /dev/null @@ -1,23 +0,0 @@ -data { - item: "title" "Python EFL Project"; - item: "file" "skeletons/eflproject_python.tar.gz"; - item: "description" - - "Start your new EFL Python programming project. All code is in the public-domain, you are free to modify and distribute as you wish."; -} - -collections { - group { - name: "logo"; - max: 128 128; - parts { - part { name: "icon"; - description { state: "default" 0.0; - max: 128 128; - image.image: "python.png" COMP; - image.normal: "python.png"; - } - } - } - } -} diff --git a/data/extra/templates/meson.build b/data/extra/templates/meson.build index 10f7910..4358554 100644 --- a/data/extra/templates/meson.build +++ b/data/extra/templates/meson.build @@ -20,18 +20,14 @@ cmd = [ edje_cc, '@INPUT@', '@OUTPUT@' ] -skeleton_meta = ['eflproject', 'eflproject_python'] - template_dir = join_paths(get_option('datadir'), 'edi', 'templates') -foreach meta : skeleton_meta - custom_target('meta ' + meta, - input : meta + '.edc', - output : meta + '.edj', - command : cmd, - install_dir: template_dir, - install: true, - ) - out = join_paths(get_option('prefix'), template_dir, meta + '.edj') - meson.add_install_script('../../../scripts/world_read.sh', out) -endforeach +custom_target('templates_meta', + input : 'templates.edc', + output : 'templates.edj', + command : cmd, + install_dir: template_dir, + install: true, +) +out = join_paths(get_option('prefix'), template_dir, 'templates.edj') +meson.add_install_script('../../../scripts/world_read.sh', out) diff --git a/data/extra/templates/templates.edc b/data/extra/templates/templates.edc new file mode 100644 index 0000000..5bc9a1d --- /dev/null +++ b/data/extra/templates/templates.edc @@ -0,0 +1,45 @@ +collections { + group { + name: "eflproject"; + max: 128 128; + + data { + item: "title" "C EFL Project"; + item: "path" "skeletons/eflproject.tar.gz"; + item: "description" + "Begin your C programming EFL project. All content is freely modifiable and distributable and licensed in the public-domain.

Happy hacking!"; + } + + parts { + part { name: "icon"; + description { state: "default" 0.0; + max: 128 128; + images.image: "c.png" COMP; + image.normal: "c.png"; + } + } + } + } + + group { + name: "eflproject_python"; + max: 128 128; + + data { + item: "title" "Python EFL Project"; + item: "path" "skeletons/eflproject_python.tar.gz"; + item: "description" + "Start your new EFL Python programming project. All code is in the public-domain, you are free to modify and distribute as you wish."; + } + + parts { + part { name: "icon"; + description { state: "default" 0.0; + max: 128 128; + images.image: "python.png" COMP; + image.normal: "python.png"; + } + } + } + } +} diff --git a/src/bin/screens/edi_welcome.c b/src/bin/screens/edi_welcome.c index a4db773..d623edd 100644 --- a/src/bin/screens/edi_welcome.c +++ b/src/bin/screens/edi_welcome.c @@ -15,21 +15,15 @@ #define _EDI_WELCOME_PROJECT_NEW_TABLE_WIDTH 4 typedef struct _Edi_Template -{ - char *edje_path; - char *skeleton_path; - char *title; - char *desc; -} Edi_Template; - -typedef struct _Edi_Example { char *edje_id; - char *edje_path; - char *example_path; + char *edje_path; // TODO fix + char *path; // file path for skeleton, directory for example char *title; char *desc; -} Edi_Example; + + Eina_Bool is_template; +} Edi_Template; typedef struct _Edi_Welcome_Data { Evas_Object *pb; @@ -174,7 +168,7 @@ _edi_welcome_project_choose_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNU static void _edi_welcome_project_new_directory_row_add(const char *text, int row, - Evas_Object *parent) + Evas_Object *parent) { Evas_Object *label, *input; @@ -196,9 +190,9 @@ _edi_welcome_project_new_directory_row_add(const char *text, int row, _create_inputs[row] = input; } -static void -_edi_welcome_project_new_input_row_add(const char *text, const char *placeholder, int row, - Evas_Object *parent) +static Evas_Object * +_edi_welcome_project_new_input_row_add(const char *text, const char *placeholder, + Eina_Bool show, int row, Evas_Object *parent) { Evas_Object *label, *input; @@ -225,19 +219,22 @@ _edi_welcome_project_new_input_row_add(const char *text, const char *placeholder } Edi_Template * -_edi_template_add(const char *directory, const char *file) +_edi_template_add(const char *templates, const char *groupname) { Edi_Template *t; - char *path = edi_path_append(directory, file); - - if (!ecore_file_exists(path)) - return NULL; + Evas_Object *group; + Ecore_Evas *evas; // TODO find a way to not need this! t = malloc(sizeof(Edi_Template)); - t->title = edje_file_data_get(path, "title"); - t->desc = edje_file_data_get(path, "description"); - t->skeleton_path = edi_path_append(directory, edje_file_data_get(path, "file")); - t->edje_path = path; + evas = ecore_evas_buffer_new(0, 0); + group = edje_object_add(ecore_evas_get(evas)); + edje_object_file_set(group, templates, groupname); + + t->title = strdup(edje_object_data_get(group, "title")); + t->desc = strdup(edje_object_data_get(group, "description")); + t->path = strdup(edje_object_data_get(group, "path")); + t->edje_path = strdup(templates); + t->edje_id = strdup(groupname); return t; } @@ -251,67 +248,34 @@ _edi_template_free(Edi_Template *t) free(t->title); free(t->desc); free(t->edje_path); - free(t->skeleton_path); + free(t->edje_id); + free(t->path); free(t); } static void _edi_templates_discover(const char *directory) { - Eina_List *files; - char *file; + Eina_List *collection, *list; + char path[PATH_MAX]; + const char *groupname; - files = ecore_file_ls(directory); - EINA_LIST_FREE(files, file) - { - if (eina_str_has_extension(file, ".edj")) - { - Edi_Template *template = _edi_template_add(directory, file); - if (template) - _available_templates = eina_list_append(_available_templates, template); - } - - free(file); - } - - if (files) - eina_list_free(files); -} - -Edi_Example * -_edi_example_add(const char *examples, const char *groupname) -{ - Edi_Example *e; - Evas_Object *group; - Ecore_Evas *evas; // TODO find a way to not need this! - - e = malloc(sizeof(Edi_Example)); - evas = ecore_evas_buffer_new(0, 0); - group = edje_object_add(ecore_evas_get(evas)); - edje_object_file_set(group, examples, groupname); - - e->title = strdup(edje_object_data_get(group, "title")); - e->desc = strdup(edje_object_data_get(group, "description")); - e->example_path = strdup(edje_object_data_get(group, "directory")); - e->edje_path = strdup(examples); - e->edje_id = strdup(groupname); - - ecore_evas_free(evas); - return e; -} - -static void -_edi_example_free(Edi_Example *e) -{ - if (!e) + eina_file_path_join(path, sizeof(path), directory, "templates.edj"); + if (!ecore_file_exists(path)) return; - free(e->title); - free(e->desc); - free(e->edje_path); - free(e->edje_id); - free(e->example_path); - free(e); + collection = edje_file_collection_list(path); + EINA_LIST_FOREACH(collection, list, groupname) + { + Edi_Template *template = _edi_template_add(path, groupname); + if (!template) + continue; + + template->is_template = EINA_TRUE; + _available_templates = eina_list_append(_available_templates, template); + } + + edje_mmap_collection_list_free(collection); } static void @@ -328,9 +292,12 @@ _edi_examples_discover(const char *directory) collection = edje_file_collection_list(path); EINA_LIST_FOREACH(collection, list, groupname) { - Edi_Example *example = _edi_example_add(path, groupname); - if (example) - _available_examples = eina_list_append(_available_examples, example); + Edi_Template *example = _edi_template_add(path, groupname); + if (!example) + continue; + + example->is_template = EINA_FALSE; + _available_examples = eina_list_append(_available_examples, example); } edje_mmap_collection_list_free(collection); @@ -339,8 +306,7 @@ _edi_examples_discover(const char *directory) static void _edi_welcome_project_new_create_done_cb(const char *path, Eina_Bool success) { - Edi_Template *template; - Edi_Example *example; + Edi_Template *template, *example; if (!success) { @@ -352,7 +318,7 @@ _edi_welcome_project_new_create_done_cb(const char *path, Eina_Bool success) EINA_LIST_FREE(_available_templates, template) _edi_template_free(template); EINA_LIST_FREE(_available_examples, example) - _edi_example_free(example); + _edi_template_free(example); _edi_welcome_project_open(path, EINA_TRUE); } @@ -500,7 +466,7 @@ _content_get(void *data, Evas_Object *obj, const char *source) evas_object_size_hint_weight_set(image, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(image, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_size_hint_min_set(image, 96 * elm_config_scale_get(), 96 * elm_config_scale_get()); - elm_image_file_set(image, template->edje_path, "logo"); + elm_image_file_set(image, template->edje_path, template->edje_id); evas_object_show(image); elm_table_pack(table, image, 0, 0, 1, 1); @@ -526,54 +492,6 @@ _header_text_get(void *data, Evas_Object *obj EINA_UNUSED, const char *source EI return strdup((char *)data); } -static Evas_Object * -_example_content_get(void *data, Evas_Object *obj, const char *source) -{ - Evas_Object *frame, *table, *image, *entry; - Edi_Example *example = (Edi_Example *) data; - Eina_Slstr *content; - - if (strcmp(source, "elm.swallow.content")) - return NULL; - - frame = elm_frame_add(obj); - elm_object_style_set(frame, "pad_medium"); - evas_object_size_hint_weight_set(frame, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(frame, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_show(frame); - - table = elm_table_add(obj); - evas_object_size_hint_weight_set(table, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(table, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_table_padding_set(table, 5, 5); - elm_table_homogeneous_set(table, EINA_TRUE); - evas_object_show(table); - elm_object_content_set(frame, table); - - image = elm_image_add(table); - evas_object_size_hint_weight_set(image, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(image, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_size_hint_min_set(image, 96 * elm_config_scale_get(), 96 * elm_config_scale_get()); - elm_image_file_set(image, example->edje_path, example->edje_id); - evas_object_show(image); - elm_table_pack(table, image, 0, 0, 1, 1); - - entry = elm_entry_add(table); - evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_entry_editable_set(entry, EINA_FALSE); - elm_entry_scrollable_set(entry, EINA_FALSE); - elm_entry_single_line_set(entry, EINA_FALSE); - elm_entry_line_wrap_set(entry, ELM_WRAP_WORD); - elm_table_pack(table, entry, 1, 0, 3, 1); - evas_object_show(entry); - - content = eina_slstr_printf("%s

%s", example->title, example->desc); - elm_object_text_set(entry, content); - - return frame; -} - static void _edi_welcome_project_new_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { @@ -581,10 +499,9 @@ _edi_welcome_project_new_cb(void *data, Evas_Object *obj EINA_UNUSED, void *even Evas_Object *content, *button, *naviframe; Evas_Object *table, *list, *rect, *hbox; Elm_Object_Item *item; - Edi_Template *template; - Edi_Example *example; - Elm_Genlist_Item_Class *ith, *itc, *itc2; char path[PATH_MAX]; + Edi_Template *template, *example; + Elm_Genlist_Item_Class *ith, *itc; naviframe = (Evas_Object *) data; @@ -650,19 +567,8 @@ _edi_welcome_project_new_cb(void *data, Evas_Object *obj EINA_UNUSED, void *even elm_genlist_item_append(list, ith, _("Examples"), NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL); - itc2 = elm_genlist_item_class_new(); - itc2->item_style = "full"; - itc2->func.text_get = NULL; - itc2->func.content_get = _example_content_get; - itc2->func.state_get = NULL; - itc2->func.del = NULL; EINA_LIST_FOREACH(_available_examples, l, example) - { - Elm_Widget_Item *item; - - item = elm_genlist_item_append(list, itc2, example, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL); - elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_NONE); - } + elm_genlist_item_append(list, itc, example, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL); elm_genlist_realized_items_update(list);