ajwillia-ms pushed a commit to branch master.

http://git.enlightenment.org/tools/edi.git/commit/?id=95f43adaecf1c044581b48384f9e4163be51efed

commit 95f43adaecf1c044581b48384f9e4163be51efed
Author: Al Poole <[email protected]>
Date:   Mon Mar 27 22:03:11 2017 +0100

    Move File/Dir Creation to edi_file.c/h
    
    Summary: Also add options to menus
    
    Reviewers: ajwillia.ms
    
    Reviewed By: ajwillia.ms
    
    Tags: #edi
    
    Differential Revision: https://phab.enlightenment.org/D4750
---
 src/bin/Makefile.am     |   2 +
 src/bin/edi_file.c      | 191 ++++++++++++++++++++++++++++++++++++++++++++++++
 src/bin/edi_file.h      |  55 ++++++++++++++
 src/bin/edi_filepanel.c |  30 ++++++++
 src/bin/edi_main.c      |  99 ++++++++-----------------
 5 files changed, 309 insertions(+), 68 deletions(-)

diff --git a/src/bin/Makefile.am b/src/bin/Makefile.am
index 834a76c..cdcedb0 100644
--- a/src/bin/Makefile.am
+++ b/src/bin/Makefile.am
@@ -27,6 +27,7 @@ editor/edi_editor.h \
 edi_content_provider.h \
 screens/edi_screens.h \
 edi_filepanel.h \
+edi_file.h \
 edi_logpanel.h \
 edi_consolepanel.h \
 mainview/edi_mainview_item.h \
@@ -44,6 +45,7 @@ screens/edi_about.c \
 screens/edi_settings_font.c \
 screens/edi_settings.c \
 edi_filepanel.c \
+edi_file.c \
 edi_logpanel.c \
 edi_consolepanel.c \
 mainview/edi_mainview_item.c \
diff --git a/src/bin/edi_file.c b/src/bin/edi_file.c
new file mode 100644
index 0000000..0ac22b9
--- /dev/null
+++ b/src/bin/edi_file.c
@@ -0,0 +1,191 @@
+#include "Edi.h"
+#include "mainview/edi_mainview.h"
+#include "edi_file.h"
+#include "edi_private.h"
+
+static Evas_Object *_parent_obj, *_popup, *_popup_dir, 
*_edi_file_message_popup;
+static const char *_directory_path;
+
+static void
+_edi_file_message_close_cb(void *data EINA_UNUSED,
+                     Evas_Object *obj EINA_UNUSED,
+                     void *event_info EINA_UNUSED)
+{
+   Evas_Object *popup = data;
+   evas_object_del(popup);
+}
+
+static void
+_edi_file_message_open(const char *message)
+{
+   Evas_Object *popup, *button;
+
+   _edi_file_message_popup = popup = elm_popup_add(_parent_obj);
+   elm_object_part_text_set(popup, "title,text",
+                           message);
+
+   button = elm_button_add(popup);
+   elm_object_text_set(button, "Ok");
+   elm_object_part_content_set(popup, "button1", button);
+   evas_object_smart_callback_add(button, "clicked",
+                                 _edi_file_message_close_cb, popup);
+
+   evas_object_show(popup);
+}
+
+static void
+_edi_file_popup_cancel_cb(void *data, Evas_Object *obj EINA_UNUSED,
+                     void *event_info EINA_UNUSED)
+{
+   evas_object_del((Evas_Object *)data);
+   eina_stringshare_del(_directory_path);
+   _directory_path = NULL;
+}
+
+static void
+_edi_file_create_file_cb(void *data,
+                             Evas_Object *obj EINA_UNUSED,
+                             void *event_info EINA_UNUSED)
+{
+   const char *name;
+   char *path;
+   const char *directory = _directory_path;
+   FILE *f;
+
+   if (!ecore_file_is_dir(directory))
+     return;
+
+   name = elm_entry_entry_get((Evas_Object *) data);
+   if (!name || strlen(name) == 0)
+     {
+        _edi_file_message_open("Please enter a file name.");
+        return;
+     }
+
+   path = edi_path_append(directory, name);
+   if ((ecore_file_exists(path) && ecore_file_is_dir(path)) ||
+       !ecore_file_exists(path))
+     {
+        f = fopen(path, "w");
+        if (f)
+          {
+             fclose(f);
+             edi_mainview_open_path(path);
+          }
+        else
+          _edi_file_message_open("Unable to write file.");
+     }
+
+   eina_stringshare_del(_directory_path);
+   _directory_path = NULL;
+
+   evas_object_del(_popup);
+   free(path);
+}
+
+static void
+_edi_file_create_dir_cb(void *data,
+                             Evas_Object *obj EINA_UNUSED,
+                             void *event_info EINA_UNUSED)
+{
+   const char *name;
+   char *path;
+   const char *directory = _directory_path;
+
+   if (!ecore_file_is_dir(directory)) return;
+
+   name = elm_entry_entry_get((Evas_Object *) data);
+   if (!name || strlen(name) == 0)
+     {
+        _edi_file_message_open("Please enter a directory name.");
+        return;
+     }
+
+   path = edi_path_append(directory, name);
+
+   mkdir(path, 0755);
+   
+   eina_stringshare_del(_directory_path);
+   _directory_path = NULL;
+
+   evas_object_del(_popup_dir);
+   free(path);
+}
+
+void
+edi_file_create_file(Evas_Object *parent, const char *directory)
+{
+   Evas_Object *popup, *box, *input, *button;
+
+   _parent_obj = parent;
+   _popup = popup = elm_popup_add(parent);
+   elm_object_part_text_set(popup, "title,text",
+                            "Enter new file name");
+   _directory_path = eina_stringshare_add(directory);
+
+   box = elm_box_add(popup);
+   elm_box_horizontal_set(box, EINA_FALSE);
+   elm_object_content_set(popup, box);
+
+   input = elm_entry_add(box);
+   elm_entry_single_line_set(input, EINA_TRUE);
+   evas_object_size_hint_weight_set(input, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_size_hint_align_set(input, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_show(input);
+   elm_box_pack_end(box, input);
+
+   button = elm_button_add(popup);
+   elm_object_text_set(button, "cancel");
+   elm_object_part_content_set(popup, "button1", button);
+   evas_object_smart_callback_add(button, "clicked",
+                                       _edi_file_popup_cancel_cb, popup);
+
+   button = elm_button_add(popup);
+   elm_object_text_set(button, "create");
+   elm_object_part_content_set(popup, "button2", button);
+   evas_object_smart_callback_add(button, "clicked",
+                                       _edi_file_create_file_cb, input);
+
+   evas_object_show(popup);
+   elm_object_focus_set(input, EINA_TRUE);
+}
+
+void
+edi_file_create_dir(Evas_Object *parent, const char *directory)
+{
+   Evas_Object *popup, *box, *input, *button;
+
+   _parent_obj = parent;
+   _directory_path = eina_stringshare_add(directory);
+
+   _popup_dir = popup = elm_popup_add(parent);
+   elm_object_part_text_set(popup, "title,text",
+                            "Enter new directory name");
+
+   box = elm_box_add(popup);
+   elm_box_horizontal_set(box, EINA_FALSE);
+   elm_object_content_set(popup, box);
+
+   input = elm_entry_add(box);
+   elm_entry_single_line_set(input, EINA_TRUE);
+   evas_object_size_hint_weight_set(input, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_size_hint_align_set(input, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_show(input);
+   elm_box_pack_end(box, input);
+
+   button = elm_button_add(popup);
+   elm_object_text_set(button, "cancel");
+   elm_object_part_content_set(popup, "button1", button);
+   evas_object_smart_callback_add(button, "clicked",
+                                       _edi_file_popup_cancel_cb, popup);
+
+   button = elm_button_add(popup);
+   elm_object_text_set(button, "create");
+   elm_object_part_content_set(popup, "button2", button);
+   evas_object_smart_callback_add(button, "clicked",
+                                       _edi_file_create_dir_cb, input);
+
+   evas_object_show(popup);
+   elm_object_focus_set(input, EINA_TRUE);
+}
+
diff --git a/src/bin/edi_file.h b/src/bin/edi_file.h
new file mode 100644
index 0000000..cc1e3e5
--- /dev/null
+++ b/src/bin/edi_file.h
@@ -0,0 +1,55 @@
+#ifndef __EDI_FILE_H__
+#define __EDI_FILE_H__
+
+#include <Elementary.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @file
+ * @brief These routines used for managing Edi file actions.
+ */
+
+/**
+ * @brief UI management functions.
+ * @defgroup UI
+ *
+ * @{
+ *
+ * Management of file/dir creation with the UI
+ *
+ */
+
+/**
+ * Create a file add dialogue and add it to the parent obj.
+ *
+ * @param parent The object into which the UI will load.
+ * @param directory The directory root of which file is created.
+ * @ingroup UI
+ */
+
+void edi_file_create_file(Evas_Object *parent, const char *directory);
+
+/**
+ * Create a directory add dialogue and add it to the parent obj.
+ *
+ * @param parent The object into which the UI will load.
+ * @param directory The directory root of which directory is created.
+ * @ingroup UI
+ */
+
+void edi_file_create_dir(Evas_Object *parent, const char *directory);
+/**
+ * @}
+ */
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+
+#endif
diff --git a/src/bin/edi_filepanel.c b/src/bin/edi_filepanel.c
index 1031ff9..d3ce90f 100644
--- a/src/bin/edi_filepanel.c
+++ b/src/bin/edi_filepanel.c
@@ -13,6 +13,7 @@
 #include "Edi.h"
 
 #include "edi_filepanel.h"
+#include "edi_file.h"
 #include "edi_content_provider.h"
 #include "mainview/edi_mainview.h"
 
@@ -204,11 +205,40 @@ _item_menu_rmdir_cb(void *data EINA_UNUSED, Evas_Object 
*obj EINA_UNUSED,
 }
 
 static void
+_item_menu_create_file_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
+                      void *event_info EINA_UNUSED)
+{
+   Evas_Object *win = data;
+
+   const char *directory = _menu_cb_path;
+   if (!ecore_file_is_dir(directory))
+     return;
+
+   edi_file_create_file(win, directory);
+}
+
+static void
+_item_menu_create_dir_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
+                      void *event_info EINA_UNUSED)
+{
+   Evas_Object *win = data;
+
+   const char *directory = _menu_cb_path;
+
+   if (!ecore_file_is_dir(directory))
+     return;
+
+   edi_file_create_dir(win, directory);
+}
+
+static void
 _item_menu_dir_create(Evas_Object *win)
 {
    menu = elm_menu_add(win);
    evas_object_smart_callback_add(menu, "dismissed", _item_menu_dismissed_cb, 
NULL);
 
+   elm_menu_item_add(menu, NULL, "document-new", "create file here", 
_item_menu_create_file_cb, win);
+   elm_menu_item_add(menu, NULL, "folder-new", "create directory here", 
_item_menu_create_dir_cb, win);
    if (ecore_file_app_installed("terminology"))
      elm_menu_item_add(menu, NULL, "terminal", "open terminal here", 
_item_menu_open_terminal_cb, NULL);
    if (ecore_file_dir_is_empty(_menu_cb_path))
diff --git a/src/bin/edi_main.c b/src/bin/edi_main.c
index 6c07236..efa477a 100644
--- a/src/bin/edi_main.c
+++ b/src/bin/edi_main.c
@@ -17,6 +17,7 @@
 #include "Edi.h"
 #include "edi_config.h"
 #include "edi_filepanel.h"
+#include "edi_file.h"
 #include "edi_logpanel.h"
 #include "edi_consolepanel.h"
 #include "mainview/edi_mainview.h"
@@ -41,7 +42,7 @@ static Elm_Object_Item *_edi_logpanel_item, 
*_edi_consolepanel_item, *_edi_testp
 static Elm_Object_Item *_edi_selected_bottompanel;
 static Evas_Object *_edi_filepanel, *_edi_filepanel_icon;
 
-static Evas_Object *_edi_main_win, *_edi_main_box, *_edi_new_popup, 
*_edi_message_popup;
+static Evas_Object *_edi_main_win, *_edi_main_box, *_edi_message_popup;
 int _edi_log_dom = -1;
 
 static void
@@ -487,80 +488,19 @@ _edi_launcher_run(Edi_Project_Config_Launch *launch)
 }
 
 static void
-_tb_new_create_cb(void *data,
-                             Evas_Object *obj EINA_UNUSED,
-                             void *event_info EINA_UNUSED)
+_tb_new_cb(void *data EINA_UNUSED, Evas_Object *obj, void *event_info 
EINA_UNUSED)
 {
-   const char *selected, *name;
-   char *path;
-   FILE *fileid;
-
-   name = elm_entry_entry_get((Evas_Object *) data);
-   if (!name || strlen(name) == 0)
-     {
-        _edi_message_open("Please enter a file name.");
-        return;
-     }
+   const char *path, *selected;
 
    selected = edi_filepanel_selected_path_get(_edi_filepanel);
    if (selected && ecore_file_is_dir(selected))
-     path = edi_path_append(selected, name);
+     path = selected;
    else
-     path = edi_project_file_path_get(name);
+     path = edi_project_get();
 
-   fileid = fopen(path, "w");
-   if (!fileid)
-     _edi_message_open("Unable to write file.");
-   else
-     edi_mainview_open_path(path);
-
-   evas_object_del(_edi_new_popup);
-   free((char*)path);
-}
-
-static void
-_edi_file_new()
-{
-   Evas_Object *popup, *box, *input, *button;
-
-   popup = elm_popup_add(_edi_main_win);
-   _edi_new_popup = popup;
-   elm_object_part_text_set(popup, "title,text",
-                            "Enter new file name");
-
-   box = elm_box_add(popup);
-   elm_box_horizontal_set(box, EINA_FALSE);
-   elm_object_content_set(popup, box);
-
-   input = elm_entry_add(box);
-   elm_entry_single_line_set(input, EINA_TRUE);
-   evas_object_size_hint_weight_set(input, EVAS_HINT_FILL, EVAS_HINT_FILL);
-   evas_object_size_hint_align_set(input, EVAS_HINT_FILL, EVAS_HINT_FILL);
-   evas_object_show(input);
-   elm_box_pack_end(box, input);
-
-   button = elm_button_add(popup);
-   elm_object_text_set(button, "cancel");
-   elm_object_part_content_set(popup, "button1", button);
-   evas_object_smart_callback_add(button, "clicked",
-                                       _edi_popup_cancel_cb, _edi_new_popup);
-
-   button = elm_button_add(popup);
-   elm_object_text_set(button, "create");
-   elm_object_part_content_set(popup, "button2", button);
-   evas_object_smart_callback_add(button, "clicked",
-                                       _tb_new_create_cb, input);
-
-   evas_object_show(popup);
-   elm_object_focus_set(input, EINA_TRUE);
-}
-
-static void
-_tb_new_cb(void *data EINA_UNUSED, Evas_Object *obj, void *event_info 
EINA_UNUSED)
-{
    elm_toolbar_item_selected_set(elm_toolbar_selected_item_get(obj), 
EINA_FALSE);
 
-   _edi_file_new();
+   edi_file_create_file(_edi_main_win, path);
 }
 
 static void
@@ -691,7 +631,29 @@ static void
 _edi_menu_new_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
                  void *event_info EINA_UNUSED)
 {
-   _edi_file_new();
+   const char *path, *selected;
+
+   selected = edi_filepanel_selected_path_get(_edi_filepanel);
+   if (selected && ecore_file_is_dir(selected))
+     path = selected;
+   else
+     path = edi_project_get();
+
+   edi_file_create_file(_edi_main_win, path);
+}
+
+static void
+_edi_menu_new_dir_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
+                 void *event_info EINA_UNUSED)
+{
+   const char *path, *selected;
+   selected = edi_filepanel_selected_path_get(_edi_filepanel);
+   if (selected && ecore_file_is_dir(selected))
+     path =selected;
+   else
+     path = edi_project_get();
+
+   edi_file_create_dir(_edi_main_win, path);
 }
 
 static void
@@ -839,6 +801,7 @@ _edi_menu_setup(Evas_Object *win)
    elm_menu_item_add(menu, menu_it, "folder-new", "New Project ...", 
_edi_menu_project_new_cb, NULL);
    elm_menu_item_separator_add(menu, menu_it);
    elm_menu_item_add(menu, menu_it, "document-new", "New ...", 
_edi_menu_new_cb, NULL);
+   elm_menu_item_add(menu, menu_it, "folder-new", "New Directory ...", 
_edi_menu_new_dir_cb, NULL);
    elm_menu_item_add(menu, menu_it, "document-save", "Save", 
_edi_menu_save_cb, NULL);
    elm_menu_item_add(menu, menu_it, "window-new", "New window", 
_edi_menu_open_window_cb, NULL);
    elm_menu_item_add(menu, menu_it, "document-close", "Close", 
_edi_menu_close_cb, NULL);

-- 


Reply via email to