Enlightenment CVS committal

Author  : handyande
Project : e17
Module  : apps/e_utils

Dir     : e17/apps/e_utils/src/bin/eapp_edit


Modified Files:
        eapp_edit_main.c 


Log Message:
Rewrite eapp_edit from dj2 including the comments field change from ilLogict
===================================================================
RCS file: 
/cvsroot/enlightenment/e17/apps/e_utils/src/bin/eapp_edit/eapp_edit_main.c,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -3 -r1.18 -r1.19
--- eapp_edit_main.c    6 Jul 2005 23:27:39 -0000       1.18
+++ eapp_edit_main.c    20 Aug 2005 14:28:59 -0000      1.19
@@ -1,390 +1,454 @@
 #include <Eet.h>
 #include <Ewl.h>
+#include <Ecore_File.h>
 #include <Engrave.h>
-#include <Ecore_X.h>
 
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-
-static void _eapp_edit_help(void);
-static Ewl_Widget *_eapp_edit_read(Eet_File *ef, char *key, char *lang,
-    char *desc, Ewl_Widget *grid, int row, int checkbox);
-static void _eapp_edit_write(Eet_File *ef, char *key, char *lang,
-    Ewl_Widget *source, int checkbox);
-
-static void _eapp_edit_window_configure_cb(Ewl_Widget *w, void *ev_data, void 
*user_data);
-static void _eapp_edit_drag_start(Ewl_Widget * w, void *ev_data, void 
*user_data);
-static void _eapp_edit_drag_end(Ewl_Widget * w, void *ev_data, void 
*user_data);
+#define TREE_COLS 2
 
-Ewl_Widget *name, *info, *comments, *exe, *wname, *wclass, *start, *wait;
-Ewl_Widget *icon, *dialog, *dialog_win, *main_win;
+static void eapp_usage(void);
+static int eapp_ui_init(char *file, char *lang);
+static int eapp_populate(Ewl_Tree *tree, char *file, char *lang);
+static char *eapp_eet_read(Eet_File *ef, char *key, char *lang);
+static void eapp_eet_write(Eet_File *ef, char *key, char *lang, char *val, int 
size);
+
+static void eapp_cb_quit(Ewl_Widget *w, void *ev, void *data);
+static void eapp_cb_save(Ewl_Widget *w, void *ev, void *data);
+static void eapp_cb_fd_show(Ewl_Widget *w, void *ev, void *data);
+static void eapp_cb_fd_hide(Ewl_Widget *w, void *ev, void *data);
+static void eapp_cb_fd_changed(Ewl_Widget *w, void *ev, void *data);
+
+typedef struct Eapp_Item Eapp_Item;
+struct Eapp_Item
+{
+    char *key;
+    char *name;
+    int checkbox;
+};
+
+static Eapp_Item keys[] = {
+            {"app/info/name", "App name", 0},
+            {"app/info/generic", "Generic info", 0},
+            {"app/info/comment", "Comment", 0},
+            {"app/info/exe", "Executable", 0},
+            {"app/window/name", "Window name", 0},
+            {"app/window/class", "Window class", 0},
+            {"app/info/startup_notify", "Startup notify", 1},
+            {"app/info/wait_exit", "Wait exit", 1}
+        };
 
-char *file, *lang, *icon_file;
-char *new_win_class;
+int
+main(int argc, char ** argv)
+{
+    char *file = NULL;
+    char *lang = NULL;
+    int ret = 1;
+    int i;
+
+    if (!ewl_init(&argc, argv))
+    {
+        fprintf(stderr, "Error initing EWL.\n");
+        goto SHUTDOWN;
+    }
 
-static void
-_eapp_edit_quit(Ewl_Widget *w, void *ev, void *data) {
-  ewl_main_quit();
-}
+    for (i = 1; i < argc; i++)
+    {
+        if ((!strcmp(argv[i], "-h")) || (!strcmp(argv[i], "--help")))
+        {
+            eapp_usage();
+            goto EWL_SHUTDOWN;
+        }
+        else if ((!strcmp(argv[i], "-l")) || (!strcmp(argv[i], "--lang")))
+        {
+            if (++i < argc)
+            {
+                if (lang) free(lang);
+                lang = strdup(argv[i]);
+            }
+            else
+            {
+                fprintf(stderr, "Error, missing argument for lang.\n");
+                goto ARGS_SHUTDOWN;
+            }
+        }
+        else
+        {
+            if (file) free(file);
+            file = strdup(argv[i]);
+        }
+    }
 
-static void
-_eapp_edit_save(Ewl_Widget *w, void *ev, void *data) {
-  Eet_File *ef;
+    if (!file)
+    {
+        fprintf(stderr, "Error missing file argument.\n");
+        eapp_usage();
+        goto EWL_SHUTDOWN;
+    }
 
-  if (icon_file) {
-    Engrave_File *eet;
-    Engrave_Image *image;
-    Engrave_Group *grp;
-    Engrave_Part *part;
-    Engrave_Part_State *ps;
-    char *idir, *ifile;
-
-    ifile = strrchr(icon_file, '/');
-    *ifile = '\0';
-    idir = strdup(icon_file);
-
-    *ifile = '/';
-    ifile ++;
-
-    eet = engrave_file_new();
-    engrave_file_image_dir_set(eet, idir);
-    image = engrave_image_new(ifile, ENGRAVE_IMAGE_TYPE_COMP, 0);
-    engrave_file_image_add(eet, image);
-
-    grp = engrave_group_new();
-    engrave_group_name_set(grp, "icon");
-    engrave_group_max_size_set(grp, 48, 48);
-    engrave_file_group_add(eet, grp);
-
-    part = engrave_part_new(ENGRAVE_PART_TYPE_IMAGE);
-    engrave_part_name_set(part, "image");
-    engrave_part_mouse_events_set(part, 0);
-    engrave_group_part_add(grp, part);
-
-    ps = engrave_part_state_new();
-    engrave_part_state_name_set(ps, "default", 0.0);
-    engrave_part_state_aspect_set(ps, 1.0, 1.0);
-    engrave_part_state_image_normal_set(ps, image);
-    engrave_part_state_add(part, ps);
-
-    engrave_eet_output(eet, file);
-    engrave_file_free(eet);
-
-    free(idir);
-  } 
-  
-  /* if the file does not exist it should do now... */
-  ef = eet_open(file, EET_FILE_MODE_READ_WRITE);
-  if (!ef) {
-    printf("ERROR: cannot open file %s for READ/WRITE\n \
-  (if a new icon you must supply an image)\n", file);
-    return;
-  }
-
-  _eapp_edit_write(ef, "app/info/name", lang, name, 0);
-  _eapp_edit_write(ef, "app/info/generic", lang, info, 0);
-  _eapp_edit_write(ef, "app/info/comments", lang, comments, 0);
-  _eapp_edit_write(ef, "app/info/exe", NULL, exe, 0);
-  _eapp_edit_write(ef, "app/window/name", NULL, wname, 0);
-  _eapp_edit_write(ef, "app/window/class", NULL, wclass, 0);
-  _eapp_edit_write(ef, "app/info/startup_notify", NULL, start, 1);
-  _eapp_edit_write(ef, "app/info/wait_exit", NULL, wait, 1);
-
-  eet_close(ef);
-  _eapp_edit_quit(NULL, NULL, NULL);
-}
-
-static Ewl_Widget *
-_eapp_edit_read(Eet_File *ef, char *key, char *lang, char *desc,
-    Ewl_Widget *grid, int row, int checkbox) {
-  char buf[4096];
-  char *ret, *ret_buf;
-  int size_ret;
-  Ewl_Widget *cell1, *cell2, *text, *part;
+    if (!eet_init())
+    {
+        fprintf(stderr, "Error initialzing eet.\n");
+        goto ARGS_SHUTDOWN;
+    }
 
-  if (ef) {
-    if (lang)
-      snprintf(buf, sizeof(buf), "%s[%s]", key, lang);
-    else
-      snprintf(buf, sizeof(buf), "%s", key);
-    ret = (char *) eet_read(ef, buf, &size_ret);
-    ret_buf = malloc(size_ret + 1);
-    snprintf(ret_buf, size_ret + 1, "%s", ret);
-  } else
-    ret_buf = "";
-                  
-  cell1 = ewl_cell_new();
-  cell2 = ewl_cell_new();
-  text = ewl_text_new(desc);
-  if (checkbox) {
-    part = ewl_checkbutton_new("");
-    ewl_checkbutton_checked_set(EWL_CHECKBUTTON(part), ret_buf[0] == 1);
-  } else {
-    part = ewl_entry_new(ret_buf);
-  }
-  ewl_container_child_append(EWL_CONTAINER(cell1), text);
-  ewl_container_child_append(EWL_CONTAINER(cell2), part);
-  ewl_widget_show(text);
-  ewl_widget_show(part);
-  ewl_widget_show(cell1);
-  ewl_widget_show(cell2);
-  ewl_grid_add(EWL_GRID(grid), cell1, 1, 1, row, row);
-  ewl_grid_add(EWL_GRID(grid), cell2, 2, 3, row, row);
+    if (!eapp_ui_init(file, lang))
+    {
+        fprintf(stderr, "Error initializing e_utils_eapp_edit.\n");
+        goto EET_SHUTDOWN;
+    }
 
-  if (ef)
-    free(ret_buf);
+    ewl_main();
+    ret = 0;
 
-  return part;
+EET_SHUTDOWN:
+    eet_shutdown();
+ARGS_SHUTDOWN:
+    if (file) free(file);
+    if (lang) free(lang);
+EWL_SHUTDOWN:
+    ewl_shutdown();
+SHUTDOWN:
+    return ret;
 }
 
 static void
-_eapp_edit_write(Eet_File *ef, char *key, char *lang, Ewl_Widget *source,
-    int checkbox) {
-  char buf[4096];
-  char *ret;
-  char ret_char;
-  int size_ret;
-  int delete;
-
-  ret = NULL;
-  delete = 0;
-  if (checkbox) {
-    ret_char = ewl_checkbutton_is_checked(EWL_CHECKBUTTON(source));
-    size_ret = 1;
-  } else {
-    ret = ewl_text_text_get(EWL_TEXT(source));
-    if (ret)
-      size_ret = strlen(ret);
-    else
-      size_ret = 0;
-    if (size_ret == 0)
-      delete = 1;
-  }
-   
-  if (lang)
-    snprintf(buf, sizeof(buf), "%s[%s]", key, lang);
-  else
-    snprintf(buf, sizeof(buf), "%s", key);
-  if (delete)
-    eet_delete(ef, buf);
-  else {
-    if (checkbox)
-      eet_write(ef, buf, &ret_char, 1, 0);
-    else
-      eet_write(ef, buf, ret, size_ret, 0);
-  }
+eapp_usage(void)
+{
+    printf("usage: e_util_eapp_edit [OPTIONS] file.eap\n"
+            "\t if <file.eap> doesn't exist a new file will be created\n\n"
+            " [OPTIONS]\n"
+            "  -h           \t - view this help screen.\n"
+            "  -l [str]     \t - Set the language for the meta data.\n"
+            "  -c [str]     \t - Set the window class.\n"
+            "\n");
 }
 
-void
-_eapp_edit_dialog_destroy(Ewl_Widget * w, void *ev_data, void *user_data) {
-  ewl_widget_hide(w);
-}
-
-void
-_eapp_edit_dialog_changed(Ewl_Widget * w, void *ev_data, void *user_data) {
-  int *click;
-  int iw;
-  int ih;
-  
-  click = (int *)ev_data;
-
-  switch (*click) {
-    case EWL_RESPONSE_OPEN:
-      icon_file = ewl_filedialog_file_get(EWL_FILEDIALOG(w));
-      iw = ewl_object_current_w_get(EWL_OBJECT(icon));
-      ih = ewl_object_current_h_get(EWL_OBJECT(icon));
-      ewl_image_file_set(EWL_IMAGE(icon), icon_file, "");
-      break;
-    case EWL_RESPONSE_CANCEL:
-      break;
-  }
-  ewl_widget_hide(dialog_win);
-}
-
-void
-_eapp_edit_dialog_show(Ewl_Widget * w, void *ev_data, void *user_data) {
-  
-  if (!dialog_win) {
-    dialog_win = ewl_window_new();
-    ewl_window_title_set(EWL_WINDOW(dialog_win), "Eapp Editor Icon Selection");
-    ewl_window_name_set(EWL_WINDOW(dialog_win), "Eapp Editor Icon Selection");
-    ewl_window_class_set(EWL_WINDOW(dialog_win), "Eapp Editor");
-    ewl_object_size_request(EWL_OBJECT(dialog_win), 300, 200);
-    ewl_callback_append(dialog_win, EWL_CALLBACK_DELETE_WINDOW,
-        _eapp_edit_dialog_destroy, NULL);
-    ewl_widget_show(dialog_win);
-
-    dialog = ewl_filedialog_new(EWL_FILEDIALOG_TYPE_OPEN);
-    ewl_callback_append(dialog, EWL_CALLBACK_VALUE_CHANGED,
-        _eapp_edit_dialog_changed, NULL);
-    ewl_container_child_append(EWL_CONTAINER(dialog_win), dialog);
-    ewl_widget_show(dialog);
-  }
+static void
+eapp_cb_quit(Ewl_Widget *w, void *ev, void *data)
+{
+    ewl_main_quit();
+}
+
+static int
+eapp_ui_init(char *file, char *lang)
+{
+    Ewl_Widget *win, *vbox, *hbox, *tree, *o;
+
+    win = ewl_window_new();
+    ewl_window_title_set(EWL_WINDOW(win), "Eapp Editor");
+    ewl_window_class_set(EWL_WINDOW(win), "Eapp Editor");
+    ewl_window_name_set(EWL_WINDOW(win), "Eapp_Editor");
+    ewl_callback_append(win, EWL_CALLBACK_DELETE_WINDOW, eapp_cb_quit, NULL);
+    ewl_widget_show(win);
+
+    vbox = ewl_vbox_new();
+    ewl_container_child_append(EWL_CONTAINER(win), vbox);
+    ewl_widget_show(vbox);
+
+    tree = ewl_tree_new(TREE_COLS);
+    ewl_container_child_append(EWL_CONTAINER(vbox), tree);
+    ewl_tree_headers_visible_set(EWL_TREE(tree), FALSE);
+    ewl_tree_mode_set(EWL_TREE(tree), EWL_TREE_MODE_NONE);
+    ewl_widget_show(tree);
+
+    if (!eapp_populate(EWL_TREE(tree), file, lang))
+    {
+        fprintf(stderr, "Error getting eap info.\n");
+        return 0;
+    }
+
+    hbox = ewl_hbox_new();
+    ewl_container_child_append(EWL_CONTAINER(vbox), hbox);
+    ewl_object_fill_policy_set(EWL_OBJECT(hbox), EWL_FLAG_FILL_NONE);
+    ewl_object_alignment_set(EWL_OBJECT(hbox), EWL_FLAG_ALIGN_CENTER);
+    ewl_box_spacing_set(EWL_BOX(hbox), 5);
+    ewl_widget_show(hbox);
+
+    o = ewl_button_new("Save");
+    ewl_container_child_append(EWL_CONTAINER(hbox), o);
+    ewl_object_fill_policy_set(EWL_OBJECT(o), EWL_FLAG_FILL_SHRINK);
+    ewl_object_alignment_set(EWL_OBJECT(o), EWL_FLAG_ALIGN_CENTER);
+    ewl_widget_data_set(o, "file", file);
+    ewl_widget_data_set(o, "lang", lang);
+    ewl_callback_append(o, EWL_CALLBACK_CLICKED, eapp_cb_save, NULL);
+    ewl_widget_show(o);
+
+    o = ewl_button_new("Cancel");
+    ewl_container_child_append(EWL_CONTAINER(hbox), o);
+    ewl_object_fill_policy_set(EWL_OBJECT(o), EWL_FLAG_FILL_SHRINK);
+    ewl_object_alignment_set(EWL_OBJECT(o), EWL_FLAG_ALIGN_CENTER);
+    ewl_callback_append(o, EWL_CALLBACK_CLICKED, eapp_cb_quit, NULL);
+    ewl_widget_show(o);
+
+    return 1;
+}
+
+static int
+eapp_populate(Ewl_Tree *tree, char *file, char *lang)
+{
+    Ewl_Widget *row[TREE_COLS];
+    Eet_File *ef = NULL;
+    char *v;
+    int i;
+
+    if (ecore_file_exists(file))
+    {
+        ef = eet_open(file, EET_FILE_MODE_READ);
+        if (!ef)
+        {
+            fprintf(stderr, "Error, unable to open eap file.");
+            return 0;
+        }
+    }
+
+    /* add the icon */
+    row[0] = ewl_image_new(file, "icon");
+    ewl_widget_name_set(row[0], "icon");
+    ewl_image_proportional_set(EWL_IMAGE(row[0]), TRUE);
+    ewl_image_scale_to(EWL_IMAGE(row[0]), 32, 32);
+    ewl_widget_show(row[0]);
+
+    row[1] = ewl_button_new("Set Icon");
+    ewl_callback_append(row[1], EWL_CALLBACK_CLICKED, eapp_cb_fd_show, NULL);
+    ewl_object_fill_policy_set(EWL_OBJECT(row[1]), EWL_FLAG_FILL_SHRINK);
+    ewl_widget_show(row[1]);
+
+    ewl_tree_row_add(tree, NULL, row);
+
+    /* add all the eet data */
+    for (i = 0; i < (sizeof(keys) / sizeof(keys[0])); i++)
+    {
+        row[0] = ewl_text_new(keys[i].name);
+        ewl_widget_show(row[0]);
+
+        v = eapp_eet_read(ef, keys[i].key, lang);
+        if (keys[i].checkbox)
+        {
+            row[1] = ewl_checkbutton_new("");
+            ewl_checkbutton_checked_set(EWL_CHECKBUTTON(row[1]), v[0] == 1);
+        }
+        else
+        {
+            row[1] = ewl_entry_new(v);
+        }
+        ewl_widget_name_set(row[1], keys[i].key);
+        ewl_widget_show(row[1]);
+        if (v) free(v);
 
-  ewl_widget_show(dialog_win);
+        ewl_tree_row_add(tree, NULL, row);
+    }
+    
+    if (ef) eet_close(ef);
+
+    return 1;
 }
 
-/* externally accessible functions */
-int
-main(int argc, char **argv) {
-  int i;
-  Eet_File *ef;
-  struct stat st;
-
-  Ewl_Widget *main_box, *grid, *cell, *content;
-
-  icon_file = NULL;
-  dialog_win = NULL;
-  ef = NULL;
-  /* handle some command-line parameters */
-  for (i = 1; i < argc; i++) {
-    if (!strcmp(argv[i], "-l") || !strcmp(argv[i], "--lang")) {
-      if (i < (argc - 1)) {
-        lang = argv[++i];
-      } else {
-        printf("missing argument for -lang\n");
-      }
-    } else if (!strcmp(argv[i], "-c") || 
-        !strcmp(argv[i], "--win-class")) {
-      if (i < (argc - 1)) {
-        new_win_class = argv[++i];
-      } else {
-        printf("missing argument for -win-class\n");
-      }
-    } else if ((!strcmp(argv[i], "-h")) ||
-        (!strcmp(argv[i], "-help")) ||
-        (!strcmp(argv[i], "--h")) ||
-        (!strcmp(argv[i], "--help"))) {
-      _eapp_edit_help();
-      exit(0);
-    } else
-      file = argv[i];
-  }
-  if (!file) {
-    printf("ERROR: no file specified!\n");
-    _eapp_edit_help();
-    exit(0);
-  }
-  ecore_init();
-  eet_init();
-  if (stat(file, &st) < 0)
-    printf("file %s not found, will create when you save\n", file);
-  else {
-    ef = eet_open(file, EET_FILE_MODE_READ);
-    if (!ef) {
-      printf("ERROR: cannot open file %s for READ\n", file);
-      return -1;
-    }
-  }
-  ewl_init(&argc, argv);
-
-  main_win = ewl_window_new();
-  ewl_window_title_set(EWL_WINDOW(main_win), "Eapp Editor");
-  ewl_window_class_set(EWL_WINDOW(main_win), "Eapp Editor");
-
-  ewl_callback_append(main_win, EWL_CALLBACK_DELETE_WINDOW, _eapp_edit_quit, 
NULL);
-  ewl_callback_append(main_win, EWL_CALLBACK_CONFIGURE, 
_eapp_edit_window_configure_cb, NULL);
-  ewl_object_size_request(EWL_OBJECT(main_win), 210, 200);
-  ewl_widget_show(main_win);
-
-  main_box = ewl_vbox_new();
-  ewl_container_child_append(EWL_CONTAINER(main_win), main_box);
-  ewl_widget_show(main_box);
-
-  grid = ewl_grid_new(3, 10);
-  ewl_container_child_append(EWL_CONTAINER(main_box), grid);
-  ewl_widget_show(grid);
-  ewl_object_fill_policy_set(EWL_OBJECT(grid), EWL_FLAG_FILL_ALL);
-
-  name = _eapp_edit_read(ef, "app/info/name", lang, "App name", grid, 3, 0);
-  info = _eapp_edit_read(ef, "app/info/generic", lang, "Generic info", grid, 
4, 0);
-  comments = _eapp_edit_read(ef, "app/info/comments", lang, "Comments", grid, 
5, 0);
-  exe = _eapp_edit_read(ef, "app/info/exe", NULL, "Executable", grid, 6, 0);
-  wname = _eapp_edit_read(ef, "app/window/name", NULL, "Window name", grid, 7, 
0);
-  wclass = _eapp_edit_read(ef, "app/window/class", NULL, "Window class", grid, 
8, 0);
-  if (new_win_class)
-    ewl_text_text_set(EWL_TEXT(wclass), new_win_class);
-  start = _eapp_edit_read(ef, "app/info/startup_notify", NULL, "Startup 
notify", grid, 9, 1);
-  wait = _eapp_edit_read(ef, "app/info/wait_exit", NULL, "Wait exit", grid, 
10, 1);
-   
-  if (ef)
-    eet_close(ef);
+static char *
+eapp_eet_read(Eet_File *ef, char *key, char *lang)
+{
+    if (ef)
+    {
+        int size;
+        char buf[4096];
+        char *ret, *r;
+
+        if (lang)
+            snprintf(buf, sizeof(buf), "%s[%s]", key, lang);
+        else
+            snprintf(buf, sizeof(buf), "%s", key);
+
+        r = eet_read(ef, buf, &size);
+        if (r)
+        {
+            ret = malloc(sizeof(char) * (size + 1));
+            snprintf(ret, size + 1, "%s", r);
+            free(r);
+            return ret;
+        }
+    }
+    return strdup("");
+}
 
-  cell = ewl_cell_new();
-  content = ewl_button_new("Set Icon");
-  ewl_callback_append(content, EWL_CALLBACK_CLICKED, _eapp_edit_dialog_show, 
NULL);
-  ewl_widget_show(content);
-  ewl_container_child_append(EWL_CONTAINER(cell), content);
-  ewl_widget_show(cell);
-  ewl_grid_add(EWL_GRID(grid), cell, 2, 2, 1, 1);
-
-  cell = ewl_cell_new();
-  icon = ewl_image_new(file, "icon");
-  ewl_image_proportional_set(EWL_IMAGE(icon), TRUE);
-  ewl_image_scale_to(EWL_IMAGE(icon), 32, 32);
-  ewl_widget_show(icon);
-  ewl_container_child_append(EWL_CONTAINER(cell), icon);
-  ewl_object_fill_policy_set(EWL_OBJECT(cell), EWL_FLAG_FILL_ALL);
-  ewl_widget_show(cell);
-  ewl_grid_add(EWL_GRID(grid), cell, 1, 1, 1, 2);
-
-  ewl_callback_append(icon, EWL_CALLBACK_MOUSE_DOWN, _eapp_edit_drag_start, 
NULL);
-  ewl_callback_append(icon, EWL_CALLBACK_MOUSE_UP, _eapp_edit_drag_end, NULL);
-
-  grid = ewl_hbox_new();
-  ewl_container_child_append(EWL_CONTAINER(main_box), grid);
-  ewl_object_fill_policy_set(EWL_OBJECT(grid), EWL_FLAG_FILL_HFILL);
-  ewl_widget_show(grid);
-
-  content = ewl_button_new("Save");
-  ewl_callback_append(content, EWL_CALLBACK_CLICKED, _eapp_edit_save, file);
-  ewl_widget_show(content);
-  ewl_container_child_append(EWL_CONTAINER(grid), content);
-   
-  content = ewl_button_new("Cancel");
-  ewl_callback_append(content, EWL_CALLBACK_CLICKED, _eapp_edit_quit, NULL);
-  ewl_widget_show(content);
-  ewl_container_child_append(EWL_CONTAINER(grid), content);
-
-  ewl_main();
-
-  ewl_shutdown();
-  eet_shutdown();
-  ecore_shutdown();
-  /* just return 0 to keep the compiler quiet */
-  return 0;
+static void
+eapp_cb_fd_show(Ewl_Widget *w, void *ev, void *data)
+{
+    Ewl_Widget *fd;
+
+    fd = ewl_widget_name_find("fd");
+    if (!fd)
+    {
+        Ewl_Widget *dialog;
+
+        fd = ewl_window_new();
+        ewl_window_title_set(EWL_WINDOW(fd), "Eapp Editor Icon Selection");
+        ewl_window_name_set(EWL_WINDOW(fd), "Eapp Editor");
+        ewl_window_class_set(EWL_WINDOW(fd), "Eapp Editor");
+        ewl_widget_name_set(fd, "fd");
+        ewl_callback_append(fd, EWL_CALLBACK_DELETE_WINDOW,
+                                eapp_cb_fd_hide, NULL);
+
+        dialog = ewl_filedialog_new(EWL_FILEDIALOG_TYPE_OPEN);
+        ewl_callback_append(dialog, EWL_CALLBACK_VALUE_CHANGED,
+                                eapp_cb_fd_changed, NULL);
+        ewl_container_child_append(EWL_CONTAINER(fd), dialog);
+        ewl_widget_show(dialog);
+    }
+    ewl_widget_show(fd);
 }
 
 static void
-_eapp_edit_help(void) {
-  printf("USAGE:\n"
-      "e_util_eapp_edit [options] file.eap\n\n"
-      "if file.eap does not exist a new icon file will be created\n\n"
-      "options:\n"
-      "  -h --help     View this screen\n"
-      "  -l --lang [str]       Set laguage for meta data\n"
-      "  -c --win-class [str]  Set the window class to use (used by window 
managers\n");
+eapp_cb_fd_hide(Ewl_Widget *w, void *ev, void *data)
+{
+    ewl_widget_hide(w);
 }
 
 static void
-_eapp_edit_window_configure_cb(Ewl_Widget *w, void *ev_data, void *user_data) {
-   ecore_x_dnd_aware_set((Ecore_X_Window) EWL_WINDOW(w)->window, 1);   
+eapp_cb_fd_changed(Ewl_Widget *w, void *ev, void *data)
+{
+    int *click;
+    Ewl_Widget *o;
+    
+    click = (int *)ev;
+    switch(*click)
+    {
+        case EWL_RESPONSE_OPEN:
+            {
+                char *icon;
+
+                icon = ewl_filedialog_file_get(EWL_FILEDIALOG(w));
+
+                o = ewl_widget_name_find("icon");
+                ewl_widget_data_set(o, "file", icon);
+                ewl_image_file_set(EWL_IMAGE(o), icon, "");
+            }
+            break;
+
+        case EWL_RESPONSE_CANCEL:
+        default:
+            break;
+    }
+
+    o = ewl_widget_name_find("fd");
+    ewl_widget_hide(o);
 }
 
 static void
-_eapp_edit_drag_start(Ewl_Widget * w, void *ev_data, void *user_data) {
-   char *name;
+eapp_cb_save(Ewl_Widget *w, void *ev, void *data)
+{
+    Eet_File *ef;
+    Ewl_Widget *o;
+    char *icon = NULL, *file = NULL, *lang = NULL;
+    int i;
+
+    file = ewl_widget_data_get(w, "file");
+    lang = ewl_widget_data_get(w, "lang");
+
+    o = ewl_widget_name_find("icon");
+    icon = ewl_widget_data_get(o, "file");
+    if (icon)
+    {
+        Engrave_File *eet;
+        Engrave_Image *image;
+        Engrave_Group *grp;
+        Engrave_Part *part;
+        Engrave_Part_State *ps;
+        char *icon_dir, *icon_file;
+
+        icon_file = strrchr(icon, '/');
+        *icon_file = '\0';
+        icon_dir = strdup(icon);
+
+        *icon_file = '/';
+        icon_file++;
+
+        eet = engrave_file_new();
+        engrave_file_image_dir_set(eet, icon_dir);
+        image = engrave_image_new(icon_file, ENGRAVE_IMAGE_TYPE_COMP, 0);
+        engrave_file_image_add(eet, image);
+
+        grp = engrave_group_new();
+        engrave_group_name_set(grp, "icon");
+        engrave_group_max_size_set(grp, 48, 48);
+        engrave_file_group_add(eet, grp);
+
+        part = engrave_part_new(ENGRAVE_PART_TYPE_IMAGE);
+        engrave_part_name_set(part, "image");
+        engrave_part_mouse_events_set(part, 0);
+        engrave_group_part_add(grp, part);
+    
+        ps = engrave_part_state_new();
+        engrave_part_state_name_set(ps, "default", 0.0);
+        engrave_part_state_aspect_set(ps, 1.0, 1.0);
+        engrave_part_state_image_normal_set(ps, image);
+        engrave_part_state_add(part, ps);
+
+        engrave_eet_output(eet, file);
+        engrave_file_free(eet);
+
+        free(icon_dir);
+    }
+    else
+    {
+        Engrave_File *eet;
+
+        /* if the file dosen't exist, create it */
+        if (!ecore_file_exists(file))
+        {
+            eet = engrave_file_new();
+            engrave_eet_output(eet, file);
+            engrave_file_free(eet);
+        }
+    }
+
+    ef = eet_open(file, EET_FILE_MODE_READ_WRITE);
+    if (!ef)
+    {
+        fprintf(stderr, "Error opening file for READ/WRITE.\n");
+        return;
+    }
 
-   if (!file)
-     return;
-   ecore_x_dnd_type_set((Ecore_X_Window) EWL_WINDOW(main_win)->window,
-     "text/uri-list", 1);
-   ecore_x_dnd_begin((Ecore_X_Window) EWL_WINDOW(main_win)->window, file,
-     strlen(file) * sizeof(char));
+    /* add all the eet data */
+    for (i = 0; i < (sizeof(keys) / sizeof(keys[0])); i++)
+    {
+        Ewl_Widget *o;
+        char *v = NULL;
+        int s = 0;
+        char c;
+
+        o = ewl_widget_name_find(keys[i].key);
+        if (keys[i].checkbox)
+        {
+            s = 1;
+            c = ewl_checkbutton_is_checked(EWL_CHECKBUTTON(o));
+            v = &c;
+        }
+        else
+        {
+            v = ewl_text_text_get(EWL_TEXT(o));
+            if (v) s = strlen(v);
+        }
+
+        eapp_eet_write(ef, keys[i].key, lang, v, s);
+    }
+
+    eet_close(ef);
+    eapp_cb_quit(NULL, NULL, NULL);
 }
 
 static void
-_eapp_edit_drag_end(Ewl_Widget * w, void *ev_data, void *user_data) {
-   ecore_x_dnd_drop();
+eapp_eet_write(Eet_File *ef, char *key, char *lang, char *val, int size)
+{
+    char buf[4096];
+
+    if (lang)
+        snprintf(buf, sizeof(buf), "%s[%s]", key, lang);
+    else
+        snprintf(buf, sizeof(buf), "%s", key);
+
+    if (size == 0)
+        eet_delete(ef, buf);
+    else
+        eet_write(ef, buf, val, size, 0);
 }
+
+
+




-------------------------------------------------------
SF.Net email is Sponsored by the Better Software Conference & EXPO
September 19-22, 2005 * San Francisco, CA * Development Lifecycle Practices
Agile & Plan-Driven Development * Managing Projects & Teams * Testing & QA
Security * Process Improvement & Measurement * http://www.sqe.com/bsce5sf
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to