diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index 70abd28..0000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "data/extra/skeleton"] - path = data/extra/skeleton - url = git://git.enlightenment.org/tools/skeleton.git diff --git a/data/extra/Makefile.am b/data/extra/Makefile.am index 22369b1..9a8b3e7 100644 --- a/data/extra/Makefile.am +++ b/data/extra/Makefile.am @@ -1,12 +1,10 @@ MAINTAINERCLEANFILES = Makefile.in skeletondir = $(datadir)/$(PACKAGE)/ -skeleton_DATA = skeleton/README +skeleton_DATA = install-data-hook: -## removing the temporary README that is used for a git submodule check - rm -f $(skeletondir)/README - cp -rv skeleton $(skeletondir) + tar -xf skeleton.tar.gz -C $(skeletondir) uninstall-local: rm -rf $(skeletondir)/skeleton diff --git a/data/extra/skeleton b/data/extra/skeleton deleted file mode 160000 index 24f27aa..0000000 --- a/data/extra/skeleton +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 24f27aa356566b55ffd69ff8592ed3070a50b14e diff --git a/data/extra/skeleton.tar.gz b/data/extra/skeleton.tar.gz new file mode 100644 index 0000000..01b4aeb Binary files /dev/null and b/data/extra/skeleton.tar.gz differ diff --git a/src/bin/welcome/edi_welcome.c b/src/bin/welcome/edi_welcome.c index 9d8cbeb..e356da6 100644 --- a/src/bin/welcome/edi_welcome.c +++ b/src/bin/welcome/edi_welcome.c @@ -7,8 +7,21 @@ #include "edi_welcome.h" #include "edi_private.h" -static Evas_Object *_welcome_window; +#include +#define _EDI_WELCOME_PROJECT_NEW_TABLE_WIDTH 4 + +static Evas_Object *_welcome_window; +static Evas_Object *_create_inputs[5]; + +static void +_edi_welcome_project_open(const char *path) +{ + evas_object_del(_welcome_window); + + edi_project_set(path); + edi_open(edi_project_get()); +} static void _edi_welcome_project_chosen_cb(void *data, @@ -19,10 +32,7 @@ _edi_welcome_project_chosen_cb(void *data, if (event_info) { - evas_object_del(_welcome_window); - - edi_project_set(event_info); - edi_open(edi_project_get()); + _edi_welcome_project_open((const char*)event_info); } } @@ -62,6 +72,126 @@ _edi_welcome_project_choose_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNU evas_object_show(win); } +static void +_edi_welcome_project_new_directory_row_add(const char *text, const char *placeholder, int row, + Evas_Object *parent) +{ + Evas_Object *label, *input; + + label = elm_label_add(parent); + elm_object_text_set(label, text); + evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_table_pack(parent, label, 0, row, 1, 1); + evas_object_show(label); + + input = elm_fileselector_entry_add(parent); + elm_object_text_set(input, "Select folder"); + elm_fileselector_folder_only_set(input, EINA_TRUE); + evas_object_size_hint_weight_set(input, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(input, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_table_pack(parent, input, 1, row, _EDI_WELCOME_PROJECT_NEW_TABLE_WIDTH - 1, 1); + evas_object_show(input); + + if (placeholder) + { + elm_object_text_set(input, placeholder); + } + _create_inputs[row] = input; +} + +static void +_edi_welcome_project_new_input_row_add(const char *text, const char *placeholder, int row, + Evas_Object *parent) +{ + Evas_Object *label, *input; + + label = elm_label_add(parent); + elm_object_text_set(label, text); + evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_table_pack(parent, label, 0, row, 1, 1); + evas_object_show(label); + + input = elm_entry_add(parent); + elm_entry_scrollable_set(input, EINA_TRUE); + elm_entry_single_line_set(input, EINA_TRUE); + evas_object_size_hint_weight_set(input, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(input, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_table_pack(parent, input, 1, row, _EDI_WELCOME_PROJECT_NEW_TABLE_WIDTH - 1, 1); + evas_object_show(input); + + if (placeholder) + { + elm_object_text_set(input, placeholder); + } + _create_inputs[row] = input; +} + +static void +_edi_welcome_project_new_create_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +{ + const char *path, *name, *user, *email, *url; + char script[PATH_MAX], fullpath[PATH_MAX]; + + path = elm_fileselector_path_get(_create_inputs[0]); + name = elm_object_text_get(_create_inputs[1]); + url = elm_object_text_get(_create_inputs[2]); + user = elm_object_text_get(_create_inputs[3]); + email = elm_object_text_get(_create_inputs[4]); + + snprintf(script, sizeof(script), "%s/skeleton/eflprj", elm_app_data_dir_get()); + snprintf(fullpath, sizeof(fullpath), "%s/%s", path, name); + int pid = fork(); + + if (pid == 0) + { + printf("Creating project \"%s\" at path %s for %s<%s>\n", name, fullpath, user, email); + + execlp(script, script, fullpath, name, user, email, url, NULL); + exit(0); + } + wait(pid); + _edi_welcome_project_open(fullpath); +} + +static void +_edi_welcome_project_new_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +{ + Evas_Object *content, *button, *naviframe = data; + Elm_Object_Item *item; + int row = 0; + + content = elm_table_add(naviframe); + elm_table_homogeneous_set(content, EINA_TRUE); + evas_object_size_hint_weight_set(content, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(content); + + _edi_welcome_project_new_directory_row_add("Parent Path", NULL, row++, content); + _edi_welcome_project_new_input_row_add("Project Name", NULL, row++, content); + _edi_welcome_project_new_input_row_add("Project URL", NULL, row++, content); + _edi_welcome_project_new_input_row_add("Username", getenv("USER"), row++, content); + _edi_welcome_project_new_input_row_add("Email", NULL, row++, content); + + button = elm_button_add(content); + elm_object_text_set(button, "Create"); + evas_object_size_hint_weight_set(button, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(button); + elm_table_pack(content, button, _EDI_WELCOME_PROJECT_NEW_TABLE_WIDTH - 2, row, 2, 1); + evas_object_smart_callback_add(button, "clicked", _edi_welcome_project_new_create_cb, NULL); + + item = elm_naviframe_item_push(naviframe, + "Create New Project", + NULL, + NULL, + content, + NULL); + + elm_naviframe_item_title_enabled_set(item, EINA_TRUE, EINA_TRUE); + +} + static void _edi_welcome_exit(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { @@ -71,7 +201,8 @@ _edi_welcome_exit(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EIN Evas_Object *edi_welcome_show() { - Evas_Object *win, *hbx, *box, *button, *label, *image; + Evas_Object *win, *hbx, *box, *button, *label, *image, *naviframe; + Elm_Object_Item *item; char buf[PATH_MAX]; win = elm_win_util_standard_add("main", "Welcome to Edi"); @@ -81,10 +212,14 @@ Evas_Object *edi_welcome_show() elm_win_focus_highlight_enabled_set(win, EINA_TRUE); evas_object_smart_callback_add(win, "delete,request", _edi_welcome_exit, win); - hbx = elm_box_add(win); + naviframe = elm_naviframe_add(win); + evas_object_size_hint_weight_set(naviframe, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, naviframe); + evas_object_show(naviframe); + + hbx = elm_box_add(naviframe); elm_box_horizontal_set(hbx, EINA_TRUE); evas_object_size_hint_weight_set(hbx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - elm_win_resize_object_add(win, hbx); evas_object_show(hbx); /* Existing projects area */ @@ -124,12 +259,22 @@ Evas_Object *edi_welcome_show() evas_object_show(image); button = elm_button_add(box); elm_object_text_set(button, "Create New Project"); - elm_object_disabled_set(button, EINA_TRUE); + evas_object_smart_callback_add(button, "clicked", + _edi_welcome_project_new_cb, naviframe); elm_box_pack_end(box, button); evas_object_show(button); - evas_object_resize(win, 320 * elm_config_scale_get(), 240 * elm_config_scale_get()); + evas_object_resize(win, 320 * elm_config_scale_get(), 180 * elm_config_scale_get()); evas_object_show(win); + item = elm_naviframe_item_push(naviframe, + "Choose Project", + NULL, + NULL, + hbx, + NULL); + + elm_naviframe_item_title_enabled_set(item, EINA_FALSE, EINA_FALSE); + return win; }