Enlightenment CVS committal

Author  : codewarrior
Project : e17
Module  : apps/estickies

Dir     : e17/apps/estickies/src/bin


Modified Files:
        stickies.c stickies.h 


Log Message:
Based on a patch from morlenxus, allow exporting of estickies' content (per 
sticky, or all at once) to a text file of your choice. Next move should allow 
you to import them as well.


===================================================================
RCS file: /cvs/e/e17/apps/estickies/src/bin/stickies.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -3 -r1.15 -r1.16
--- stickies.c  22 Mar 2007 23:33:16 -0000      1.15
+++ stickies.c  26 Mar 2007 23:18:54 -0000      1.16
@@ -1,4 +1,6 @@
 #include "stickies.h"
+#include <fcntl.h>
+#include <unistd.h>
 
 E_Stickies *ss;
 static Etk_Bool _e_sticky_is_moving = ETK_FALSE;
@@ -253,10 +255,11 @@
 _e_sticky_menu_show(E_Sticky *s)
 {
    Etk_Widget *menu;
-   
+
    menu = etk_menu_new();
    _etk_menu_stock_item_new("New", ETK_STOCK_DOCUMENT_OPEN, 
ETK_MENU_SHELL(menu), ETK_CALLBACK(_e_sticky_new_show_append), NULL);
    _etk_menu_stock_item_new("Save", ETK_STOCK_DOCUMENT_SAVE, 
ETK_MENU_SHELL(menu), ETK_CALLBACK(_e_config_save), ss);
+   _etk_menu_stock_item_new("Export To File", ETK_STOCK_DOCUMENT_SAVE_AS, 
ETK_MENU_SHELL(menu), ETK_CALLBACK(_e_sticky_export_to), s);
    _etk_menu_stock_item_new("Delete", ETK_STOCK_EDIT_DELETE, 
ETK_MENU_SHELL(menu), ETK_CALLBACK(_e_sticky_delete_confirm), s);
    _etk_menu_stock_item_new("Options", ETK_STOCK_PREFERENCES_DESKTOP_THEME, 
ETK_MENU_SHELL(menu), ETK_CALLBACK(_e_theme_chooser_show), s);
    _etk_menu_stock_item_new("About", ETK_STOCK_DIALOG_INFORMATION, 
ETK_MENU_SHELL(menu), ETK_CALLBACK(_e_about_show), NULL);
@@ -361,7 +364,8 @@
    etk_widget_focus(s->textview);
    etk_signal_connect("selection-received", ETK_OBJECT(s->win), 
ETK_CALLBACK(_e_sticky_selection_text_request_cb), s);
    
-   etk_widget_color_set(s->win, 160, 160, 160, 160);   
+   etk_widget_propagate_color_set(s->win, ETK_FALSE);   
+   etk_widget_color_set(s->win, 160, 160, 160, 160);
    etk_widget_color_set(s->stick_toggle, 160, 160, 160, 160);
    etk_widget_color_set(s->lock_toggle, 160, 160, 160, 160);
    etk_widget_color_set(s->close_button, 160, 160, 160, 160);   
@@ -383,6 +387,137 @@
 {
    etk_object_destroy(ETK_OBJECT(s->win));
    E_FREE(s);
+}
+
+void
+_e_sticky_export_cb(void *data)
+{
+   E_Filedialog *fd = data;
+   Evas_List *l;
+   E_Sticky *s;
+   FILE *fh;
+   int c = 1;
+   const char *basename;
+   const char *dir;
+   char file[PATH_MAX];
+   char *text;
+
+   basename = etk_entry_text_get(ETK_ENTRY(fd->entry));
+   dir = etk_filechooser_widget_current_folder_get
+     (ETK_FILECHOOSER_WIDGET(fd->filechooser));
+   s = fd->s;
+   
+   if (!dir || !basename || !s) { printf("return!\n"); return;}
+
+   etk_widget_hide(fd->dia);
+
+   snprintf(file, sizeof(file), "%s/%s", dir, basename);
+   if((fh = fopen(file, "w")) == NULL) return;
+   
+   if (!etk_toggle_button_active_get(ETK_TOGGLE_BUTTON(fd->export_mode)))
+     {
+       /* save only current sticky */
+       fprintf(fh, "Sticky %d\n=========================\n", c);
+       text = strdup(etk_string_get(etk_textblock_text_get(
+                     ETK_TEXT_VIEW(s->textview)->textblock, 
+                     ETK_FALSE)));
+       fprintf (fh, "%s\n\n", text);   
+     }
+   else
+     {
+       /* save all stickies */
+       for(l = ss->stickies; l; l = l->next)
+         {          
+            s = l->data;            
+            fprintf(fh, "Sticky %d\n=========================\n", c);
+            text = strdup(etk_string_get(etk_textblock_text_get(
+                          ETK_TEXT_VIEW(s->textview)->textblock, 
+                          ETK_FALSE)));
+            fprintf (fh, "%s\n\n", text);
+            ++c;
+         }     
+     }
+   
+   fclose (fh);   
+}
+
+void
+_e_sticky_export_to_cb(Etk_Object *object, void *event, void *data)
+{
+   Etk_Event_Key_Down *ev = event;
+
+   if (!strcmp(ev->key, "Return") || !strcmp(ev->key, "KP_Enter"))
+     _e_sticky_export_cb(data);
+}
+
+void
+_e_sticky_export_to(E_Sticky *s)
+{
+   static E_Filedialog *fd = NULL;
+   Etk_Widget *vbox;
+   Etk_Widget *hbox;
+   Etk_Widget *btn;
+   Etk_Widget *label;
+   char dflt_filename[64]; 
+
+   if (!fd)
+     {
+        fd = calloc(1, sizeof(E_Filedialog));
+        if (!fd) return;
+       fd->s = NULL;
+        fd->dia = NULL;
+     }
+   
+   snprintf (dflt_filename, sizeof (dflt_filename), "estickies_export.txt");
+   fd->s = s;
+   
+   /* Don't open more then one window */
+   if (fd->dia)
+     {
+        /* Update the filename when we show the window again */
+        etk_entry_text_set(ETK_ENTRY(fd->entry), dflt_filename);
+        etk_widget_show_all(ETK_WIDGET(fd->dia));
+        return;
+     }
+
+   fd->dia = etk_dialog_new();
+   etk_window_title_set(ETK_WINDOW(fd->dia), "Estickies export to ..");
+   etk_signal_connect("delete-event", ETK_OBJECT(fd->dia),
+                      ETK_CALLBACK(etk_window_hide_on_delete), fd->dia);
+
+   fd->filechooser = etk_filechooser_widget_new();
+   etk_dialog_pack_in_main_area(ETK_DIALOG(fd->dia), fd->filechooser, 
ETK_BOX_START, ETK_BOX_EXPAND_FILL, 0);
+   
+   vbox = etk_vbox_new(ETK_FALSE, 0);
+   label = etk_label_new("Filename:");
+   etk_box_append(ETK_BOX(vbox), label, ETK_BOX_START, ETK_BOX_NONE, 0);
+
+   fd->entry = etk_entry_new();
+   etk_entry_text_set(ETK_ENTRY(fd->entry), dflt_filename);
+   etk_box_append(ETK_BOX(vbox), fd->entry, ETK_BOX_START, ETK_BOX_EXPAND, 0);
+   etk_signal_connect("key-down", ETK_OBJECT(fd->entry),
+                      ETK_CALLBACK(_e_sticky_export_to_cb), fd);
+
+   hbox = etk_hbox_new(ETK_FALSE, 0);
+   etk_container_add(ETK_CONTAINER(vbox), hbox);
+
+   btn = etk_button_new_with_label("Export");
+   etk_box_append(ETK_BOX(hbox), btn, ETK_BOX_START, ETK_BOX_NONE, 0);
+   etk_signal_connect_swapped("clicked", ETK_OBJECT(btn),
+                              ETK_CALLBACK(_e_sticky_export_cb), fd);
+
+   btn = etk_button_new_with_label("Cancel");
+   etk_box_append(ETK_BOX(hbox), btn, ETK_BOX_START, ETK_BOX_NONE, 0);
+   etk_signal_connect_swapped("clicked", ETK_OBJECT(btn),
+                              ETK_CALLBACK(etk_widget_hide), fd->dia);
+
+   fd->export_mode = etk_check_button_new_with_label("All Stickies");
+   etk_box_append(ETK_BOX(hbox), fd->export_mode, ETK_BOX_START, ETK_BOX_FILL, 
0);
+   
+   etk_dialog_pack_widget_in_action_area(ETK_DIALOG(fd->dia), vbox, 
+                                        ETK_BOX_START, ETK_BOX_EXPAND_FILL, 0);
+   
+   etk_widget_show_all(fd->dia);
 }
 
 void
===================================================================
RCS file: /cvs/e/e17/apps/estickies/src/bin/stickies.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -3 -r1.5 -r1.6
--- stickies.h  6 Aug 2006 16:55:06 -0000       1.5
+++ stickies.h  26 Mar 2007 23:18:54 -0000      1.6
@@ -33,6 +33,7 @@
 typedef struct _E_Config_Stickies E_Config_Stickies;
 typedef struct _E_Config_General E_Config_General;
 typedef struct _E_Config_Version E_Config_Version;
+typedef struct _E_Filedialog E_Filedialog;
 typedef struct _E_Sticky E_Sticky;
 typedef struct _E_Stickies E_Stickies;
 
@@ -65,6 +66,15 @@
    int patch;
 };
 
+struct _E_Filedialog
+{
+   Etk_Widget *dia;
+   Etk_Widget *filechooser;
+   Etk_Widget *entry;
+   Etk_Widget *export_mode;
+   E_Sticky *s;
+};
+
 struct _E_Sticky
 {
    int x, y, w, h;
@@ -108,6 +118,7 @@
 void _e_sticky_properties_set(E_Sticky *s);
 void _e_sticky_theme_apply(E_Sticky *s, char *theme);
 void _e_sticky_theme_apply_all(char *theme);  
+void _e_sticky_export_to(E_Sticky *s);
 void _e_sticky_delete_confirm(E_Sticky *s);
     
 #endif



-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to