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);