From 68475cb28fe5c811a8d8a1a244b8d3be92dec514 Mon Sep 17 00:00:00 2001 From: Andy Williams Date: Mon, 1 Jan 2018 21:41:14 +0000 Subject: [PATCH] examples: First pass add of examples info. Infrastructure not in place yet, so example cannot be selected --- data/extra/examples/examples.edc | 23 +++ data/extra/examples/images/hellogui.png | Bin 0 -> 2642 bytes data/extra/examples/meson.build | 20 +++ data/meson.build | 1 + src/bin/screens/edi_welcome.c | 220 ++++++++++++++++++++---- 5 files changed, 231 insertions(+), 33 deletions(-) create mode 100644 data/extra/examples/examples.edc create mode 100644 data/extra/examples/images/hellogui.png create mode 100644 data/extra/examples/meson.build diff --git a/data/extra/examples/examples.edc b/data/extra/examples/examples.edc new file mode 100644 index 0000000..2dcdb22 --- /dev/null +++ b/data/extra/examples/examples.edc @@ -0,0 +1,23 @@ +data { + item: "hellogui.title" "C EFL Beta Hello World"; + item: "hellogui.directory" "tutorials/c/hellogui/"; + item: "hellogui.description" + "Hello World using the EFL Beta APIs"; +} + +collections { + group { + name: "hellogui"; + max: 128 128; + + parts { + part { name: "icon"; + description { state: "default" 0.0; + max: 128 128; + images.image: "hellogui.png" COMP; + image.normal: "hellogui.png"; + } + } + } + } +} diff --git a/data/extra/examples/images/hellogui.png b/data/extra/examples/images/hellogui.png new file mode 100644 index 0000000000000000000000000000000000000000..6ad779c919327e2b94732685fe4b8c7eec1ed63f GIT binary patch literal 2642 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 ATmS$7 literal 0 HcmV?d00001 diff --git a/data/extra/examples/meson.build b/data/extra/examples/meson.build new file mode 100644 index 0000000..2431771 --- /dev/null +++ b/data/extra/examples/meson.build @@ -0,0 +1,20 @@ +tar = find_program('tar') +edje_cc = find_program('edje_cc') + +cmd = [ edje_cc, + '-id', join_paths(meson.source_root(), 'data' , 'extra', 'examples', 'images'), + '@INPUT@', '@OUTPUT@' + ] + +examples_dir = join_paths(get_option('datadir'), 'edi', 'examples') +custom_target('examples_meta', + input : 'examples.edc', + output : 'examples.edj', + command : cmd, + install_dir: examples_dir, + install: true, +) + +out = join_paths(get_option('prefix'), examples_dir, 'examples.edj') +meson.add_install_script('../../../scripts/world_read.sh', out) + diff --git a/data/meson.build b/data/meson.build index 3b2b0d8..881b3c2 100644 --- a/data/meson.build +++ b/data/meson.build @@ -1,4 +1,5 @@ subdir('desktop') subdir('images') subdir('extra/templates') +subdir('extra/examples') subdir('themes') diff --git a/src/bin/screens/edi_welcome.c b/src/bin/screens/edi_welcome.c index 869267f..93b4cc3 100644 --- a/src/bin/screens/edi_welcome.c +++ b/src/bin/screens/edi_welcome.c @@ -22,6 +22,15 @@ typedef struct _Edi_Template char *desc; } Edi_Template; +typedef struct _Edi_Example +{ + char *edje_id; + char *edje_path; + char *example_path; + char *title; + char *desc; +} Edi_Example; + typedef struct _Edi_Welcome_Data { Evas_Object *pb; Evas_Object *button; @@ -31,6 +40,7 @@ typedef struct _Edi_Welcome_Data { } Edi_Welcome_Data; static Eina_List *_available_templates = NULL; +static Eina_List *_available_examples = NULL; static Evas_Object *_welcome_window, *_welcome_naviframe; static Evas_Object *_edi_new_popup; @@ -214,37 +224,6 @@ _edi_welcome_project_new_input_row_add(const char *text, const char *placeholder _create_inputs[row] = input; } -static void -_edi_template_free(Edi_Template *t) -{ - if (t) - { - free(t->title); - free(t->desc); - free(t->edje_path); - free(t->skeleton_path); - free(t); - } -} - -static void -_edi_welcome_project_new_create_done_cb(const char *path, Eina_Bool success) -{ - Edi_Template *template; - - if (!success) - { - ERR("Unable to create project at path %s", path); - - return; - } - - EINA_LIST_FREE(_available_templates, template) - _edi_template_free(template); - - _edi_welcome_project_open(path, EINA_TRUE); -} - Edi_Template * _edi_template_add(const char *directory, const char *file) { @@ -263,6 +242,19 @@ _edi_template_add(const char *directory, const char *file) return t; } +static void +_edi_template_free(Edi_Template *t) +{ + if (!t) + return; + + free(t->title); + free(t->desc); + free(t->edje_path); + free(t->skeleton_path); + free(t); +} + static void _edi_templates_discover(const char *directory) { @@ -286,6 +278,82 @@ _edi_templates_discover(const char *directory) eina_list_free(files); } +Edi_Example * +_edi_example_add(const char *examples, const char *group) +{ + Edi_Example *e; + + e = malloc(sizeof(Edi_Example)); + + printf("EXITS %s, %s\n", edje_file_data_get(examples, "title"), + edje_file_data_get(examples, eina_slstr_printf("%s.title", group))); + e->title = edje_file_data_get(examples, eina_slstr_printf("%s.title", group)); + e->desc = edje_file_data_get(examples, eina_slstr_printf("%s.description", group)); + e->example_path = edje_file_data_get(examples, eina_slstr_printf("%s.directory", group)); + e->edje_path = strdup(examples); + e->edje_id = strdup(group); + + return e; +} + +static void +_edi_example_free(Edi_Example *e) +{ + if (!e) + return; + + free(e->title); + free(e->desc); + free(e->edje_path); + free(e->edje_id); + free(e->example_path); + free(e); +} + +static void +_edi_examples_discover(const char *directory) +{ + Eina_List *collection, *list; + char path[PATH_MAX]; + const char *groupname; + + eina_file_path_join(path, sizeof(path), directory, "examples.edj"); + if (!ecore_file_exists(path)) + return; + + collection = edje_file_collection_list(path); + EINA_LIST_FOREACH(collection, list, groupname) + { + printf("Found group %s\n", groupname); + Edi_Example *example = _edi_example_add(path, groupname); + if (example) + _available_examples = eina_list_append(_available_examples, example); + } + + edje_mmap_collection_list_free(collection); +} + +static void +_edi_welcome_project_new_create_done_cb(const char *path, Eina_Bool success) +{ + Edi_Template *template; + Edi_Example *example; + + if (!success) + { + ERR("Unable to create project at path %s", path); + + return; + } + + EINA_LIST_FREE(_available_templates, template) + _edi_template_free(template); + EINA_LIST_FREE(_available_examples, example) + _edi_example_free(example); + + _edi_welcome_project_open(path, EINA_TRUE); +} + static void _edi_welcome_project_new_create_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { @@ -449,6 +517,66 @@ _content_get(void *data, Evas_Object *obj, const char *source) return frame; } +static char * +_header_text_get(void *data, Evas_Object *obj EINA_UNUSED, const char *source EINA_UNUSED) +{ + return strdup((char *)data); +} + +static void +_header_del(void *data, Evas_Object *obj EINA_UNUSED) +{ + free(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) { @@ -457,7 +585,8 @@ _edi_welcome_project_new_cb(void *data, Evas_Object *obj EINA_UNUSED, void *even Evas_Object *table, *list, *rect, *hbox; Elm_Object_Item *item; Edi_Template *template; - Elm_Genlist_Item_Class *itc; + Edi_Example *example; + Elm_Genlist_Item_Class *ith, *itc, *itc2; char path[PATH_MAX]; naviframe = (Evas_Object *) data; @@ -466,10 +595,13 @@ _edi_welcome_project_new_cb(void *data, Evas_Object *obj EINA_UNUSED, void *even _edi_template_free(template); snprintf(path, sizeof(path), "%s/templates", _edi_config_dir_get()); - _edi_templates_discover(PACKAGE_DATA_DIR "/templates"); _edi_templates_discover(path); + snprintf(path, sizeof(path), "%s/examples", _edi_config_dir_get()); + _edi_examples_discover(PACKAGE_DATA_DIR "/examples"); + _edi_examples_discover(path); + content = elm_box_add(naviframe); evas_object_size_hint_weight_set(content, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(content, EVAS_HINT_FILL, EVAS_HINT_FILL); @@ -503,6 +635,12 @@ _edi_welcome_project_new_cb(void *data, Evas_Object *obj EINA_UNUSED, void *even elm_table_pack(table, list, 0, 0, 1, 1); elm_box_pack_end(hbox, table); + ith = elm_genlist_item_class_new(); + ith->item_style = "group_index"; + ith->func.text_get = _header_text_get; + ith->func.del = _header_del; + elm_genlist_item_append(list, ith, _("Templates"), NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL); + itc = elm_genlist_item_class_new(); itc->item_style = "full"; itc->func.text_get = NULL; @@ -513,6 +651,22 @@ _edi_welcome_project_new_cb(void *data, Evas_Object *obj EINA_UNUSED, void *even EINA_LIST_FOREACH(_available_templates, l, template) elm_genlist_item_append(list, itc, template, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL); + 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_realized_items_update(list); elm_genlist_item_class_free(itc);