Diff of /trunk/src/notes.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 226 by harbaum, Wed Dec 2 20:05:52 2009 UTC revision 259 by harbaum, Sat May 15 12:27:40 2010 UTC
# Line 19  Line 19 
19    
20  #include <stdio.h>  #include <stdio.h>
21  #include <string.h>  #include <string.h>
22    #include <errno.h>
23    
24  #include <glib/gunicode.h>  #include <glib/gunicode.h>
25    
# Line 48  void gtk_text_buffer_set_rich_text_forma Line 49  void gtk_text_buffer_set_rich_text_forma
49    
50  #define TAG_STATE  GTK_STATE_PRELIGHT  #define TAG_STATE  GTK_STATE_PRELIGHT
51    
 static GtkWidget *check_button_new_with_label(char *label) {  
 #if !defined(USE_MAEMO) || (MAEMO_VERSION_MAJOR < 5)  
   return gtk_check_button_new_with_label(label);  
 #else  
   GtkWidget *cbut =  
     hildon_check_button_new(HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH);  
   gtk_button_set_label(GTK_BUTTON(cbut), label);  
   return cbut;  
 #endif  
 }  
   
 static void check_button_set_active(GtkWidget *button, gboolean active) {  
 #if !defined(USE_MAEMO) || (MAEMO_VERSION_MAJOR < 5)  
   gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), active);  
 #else  
   hildon_check_button_set_active(HILDON_CHECK_BUTTON(button), active);  
 #endif  
 }  
   
 static gboolean check_button_get_active(GtkWidget *button) {  
 #if !defined(USE_MAEMO) || (MAEMO_VERSION_MAJOR < 5)  
   return gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button));  
 #else  
   return hildon_check_button_get_active(HILDON_CHECK_BUTTON(button));  
 #endif  
 }  
   
52  static notes_t *notes_load(appdata_t *appdata, cache_t *cache) {  static notes_t *notes_load(appdata_t *appdata, cache_t *cache) {
53    notes_t *notes = NULL;    notes_t *notes = NULL;
54    xmlDoc *doc = NULL;    xmlDoc *doc = NULL;
# Line 202  static int notes_write_file(cache_contex Line 176  static int notes_write_file(cache_contex
176    g_assert(context);    g_assert(context);
177    g_assert(context->cache);    g_assert(context->cache);
178    
   printf("write\n");  
   
179    /* build local path */    /* build local path */
180    int path_len = strlen(context->appdata->image_path) +    int path_len = strlen(context->appdata->image_path) +
181      2 * strlen(context->cache->id) + 6;      2 * strlen(context->cache->id) + 6;
   printf("plen = %d\n", path_len);  
182    
183    char *path = malloc(path_len);    char *path = malloc(path_len);
184    snprintf(path, path_len, "%s%s/%s.gpx",    snprintf(path, path_len, "%s%s/%s.gpx",
# Line 220  static int notes_write_file(cache_contex Line 191  static int notes_write_file(cache_contex
191      return -1;      return -1;
192    }    }
193    
   printf("still al\n");  
   
194    LIBXML_TEST_VERSION;    LIBXML_TEST_VERSION;
195    
196    xmlDocPtr doc = xmlNewDoc(BAD_CAST "1.0");    xmlDocPtr doc = xmlNewDoc(BAD_CAST "1.0");
# Line 282  static void notes_save(cache_context_t * Line 251  static void notes_save(cache_context_t *
251    /* there is a position which differs from the original one */    /* there is a position which differs from the original one */
252    /* or has been changed */    /* or has been changed */
253    
   printf("saving notes\n");  
   
254    if(context->notes.modified) {    if(context->notes.modified) {
255    #ifdef USE_STACKABLE_WINDOW
256        context->notes_have_been_changed = TRUE;
257    #endif
258    
259      printf("something has been modified, saving notes\n");      printf("something has been modified, saving notes\n");
260    
261      GtkTextIter start;      GtkTextIter start;
# Line 662  GtkWidget *cache_notes(cache_context_t * Line 633  GtkWidget *cache_notes(cache_context_t *
633    pos_t pos = gpx_cache_pos(cache);    pos_t pos = gpx_cache_pos(cache);
634    if(cache->notes) pos = cache->notes->pos;    if(cache->notes) pos = cache->notes->pos;
635    
636    gtk_table_attach_defaults(GTK_TABLE(table),    context->notes.latw = lat_entry_new(pos.lat);
637              context->notes.latw = lat_entry_new(pos.lat), 0, 1, 1, 2);    context->notes.lonw = lon_entry_new(pos.lon);
638      GtkWidget *picker =
639        preset_coordinate_picker(context->appdata,
640                                 context->notes.latw, context->notes.lonw);
641    
642    g_signal_connect(G_OBJECT(context->notes.latw), "focus-out-event",    g_signal_connect(G_OBJECT(context->notes.latw), "focus-out-event",
643                     G_CALLBACK(focus_out), context);                     G_CALLBACK(focus_out), context);
   
   gtk_table_attach_defaults(GTK_TABLE(table),  
             context->notes.lonw = lon_entry_new(pos.lon), 2, 3, 1, 2);  
644    g_signal_connect(G_OBJECT(context->notes.lonw), "focus-out-event",    g_signal_connect(G_OBJECT(context->notes.lonw), "focus-out-event",
645                     G_CALLBACK(focus_out), context);                     G_CALLBACK(focus_out), context);
646    
647    
648      GtkWidget *ihbox = gtk_hbox_new(FALSE, 0);
649    
650      gtk_box_pack_start_defaults(GTK_BOX(ihbox), context->notes.latw);
651      gtk_box_pack_start_defaults(GTK_BOX(ihbox), context->notes.lonw);
652      gtk_box_pack_start_defaults(GTK_BOX(ihbox), picker);
653    
654      gtk_table_attach_defaults(GTK_TABLE(table),
655                                ihbox, 0, 3, 1, 2);
656    
657  #if !defined(USE_MAEMO) || (MAEMO_VERSION_MAJOR < 5)  #if !defined(USE_MAEMO) || (MAEMO_VERSION_MAJOR < 5)
658    hbox = gtk_hbox_new(FALSE, 0);    hbox = gtk_hbox_new(FALSE, 0);
659    gtk_box_pack_start(GTK_BOX(hbox), table, FALSE, FALSE, 0);    gtk_box_pack_start(GTK_BOX(hbox), table, FALSE, FALSE, 0);
# Line 781  typedef struct { Line 763  typedef struct {
763    GtkWidget *info_label;    GtkWidget *info_label;
764    GtkWidget *dialog;    GtkWidget *dialog;
765    appdata_t *appdata;    appdata_t *appdata;
   GtkWidget *path_label;  
766  } export_context_t;  } export_context_t;
767    
 static void on_browse(GtkWidget *widget, gpointer data) {  
   GtkWidget *dialog;  
   
   export_context_t *context = (export_context_t*)data;  
   
 #ifdef USE_MAEMO  
   dialog = hildon_file_chooser_dialog_new(GTK_WINDOW(context->dialog),  
                                           GTK_FILE_CHOOSER_ACTION_SAVE);  
 #else  
   dialog = gtk_file_chooser_dialog_new(_("Save POI database"),  
                                        GTK_WINDOW(context->dialog),  
                                        GTK_FILE_CHOOSER_ACTION_SAVE,  
                                        GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,  
                                        GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,  
                                        NULL);  
 #endif  
   
   printf("set filename <%s>\n", context->appdata->fieldnotes_path);  
   
   if(!g_file_test(context->appdata->fieldnotes_path, G_FILE_TEST_EXISTS)) {  
     char *last_sep = strrchr(context->appdata->fieldnotes_path, '/');  
     if(last_sep) {  
       *last_sep = 0;  // seperate path from file  
   
       /* the user just created a new document */  
       gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog),  
                                           context->appdata->fieldnotes_path);  
       gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog), last_sep+1);  
   
       /* restore full filename */  
       *last_sep = '/';  
     }  
   } else  
     gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog),  
                                   context->appdata->fieldnotes_path);  
   
   if (gtk_dialog_run (GTK_DIALOG(dialog)) == GTK_FM_OK) {  
     gchar *name = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));  
     if(name) {  
       free(context->appdata->fieldnotes_path);  
       context->appdata->fieldnotes_path = strdup(name);  
       gtk_label_set_text(GTK_LABEL(context->path_label),  
                          context->appdata->fieldnotes_path);  
     }  
   }  
   
   gtk_widget_destroy (dialog);  
 }  
   
768  typedef struct log_chain_s {  typedef struct log_chain_s {
769    cache_t *cache;    cache_t *cache;
770    struct log_chain_s *next;    struct log_chain_s *next;
# Line 922  void notes_log_export(appdata_t *appdata Line 854  void notes_log_export(appdata_t *appdata
854    /* ------------------ path/file ------------------ */    /* ------------------ path/file ------------------ */
855    gtk_box_pack_start_defaults(GTK_BOX(vbox), gtk_hseparator_new());    gtk_box_pack_start_defaults(GTK_BOX(vbox), gtk_hseparator_new());
856    
857    GtkWidget *hbox = gtk_hbox_new(FALSE, 0);    gtk_box_pack_start_defaults(GTK_BOX(vbox),
858    GtkWidget *label = gtk_label_new(_("Export to:"));       export_file(_("Save POI database"), &appdata->fieldnotes_path));
   gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE,0);  
   gtk_misc_set_alignment(GTK_MISC(label), 0.f, 0.5f);  
   GtkWidget *button = gtk_button_new_with_label(_("Browse"));  
 #if defined(USE_MAEMO) && (MAEMO_VERSION_MAJOR == 5)  
   hildon_gtk_widget_set_theme_size(button,  
            (HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH));  
 #endif  
   gtk_signal_connect(GTK_OBJECT(button), "clicked",  
                      GTK_SIGNAL_FUNC(on_browse), (gpointer)&context);  
   gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE,0);  
   gtk_box_pack_start_defaults(GTK_BOX(vbox), hbox);  
   
   context.path_label = gtk_label_new(appdata->fieldnotes_path);  
   gtk_misc_set_alignment(GTK_MISC(context.path_label), 0.f, 0.5f);  
   gtk_label_set_ellipsize(GTK_LABEL(context.path_label),  
                           PANGO_ELLIPSIZE_MIDDLE);  
   gtk_box_pack_start_defaults(GTK_BOX(vbox), context.path_label);  
859    
860    label = gtk_label_new(_("(a %s in the filename will be replaced by the "    GtkWidget *label =
861                            "current date and time)"));      gtk_label_new(_("(a %s in the filename will be replaced by the "
862                        "current date and time)"));
863    gtk_label_set_line_wrap_mode(GTK_LABEL(label), PANGO_WRAP_WORD);    gtk_label_set_line_wrap_mode(GTK_LABEL(label), PANGO_WRAP_WORD);
864    gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);    gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);
865    gtk_misc_set_alignment(GTK_MISC(label), 0.f, 0.5f);    gtk_misc_set_alignment(GTK_MISC(label), 0.f, 0.5f);
# Line 962  void notes_log_export(appdata_t *appdata Line 878  void notes_log_export(appdata_t *appdata
878      time_t now = time(NULL);      time_t now = time(NULL);
879      struct tm *tm_now = localtime(&now);      struct tm *tm_now = localtime(&now);
880      char now_str[32];      char now_str[32];
881      strftime(now_str, sizeof(now_str)-1, "%F_%H:%M", tm_now);      strftime(now_str, sizeof(now_str)-1, "%F_%H-%M", tm_now);
882      char *fname = g_strdup_printf(appdata->fieldnotes_path, now_str);      char *fname = g_strdup_printf(appdata->fieldnotes_path, now_str);
883    
884      printf("--- about to export logs to %s ---\n", fname);      printf("--- about to export logs to %s ---\n", fname);
885      FILE *file = fopen(fname, "w");      FILE *file = fopen(fname, "w");
886      g_free(fname);      g_free(fname);
887    
888      if(file) {      if(file) {
   
889        llog = log;        llog = log;
890        while(llog) {        while(llog) {
891          printf("Exporting %s\n", llog->cache->id);          printf("Exporting %s\n", llog->cache->id);
# Line 1059  void notes_log_export(appdata_t *appdata Line 975  void notes_log_export(appdata_t *appdata
975        }        }
976    
977        fclose(file);        fclose(file);
978      }      } else
979          errorf(_("Can't open file:\n\n%s"), strerror(errno));
980    
981    } else {    } else {
982      /* restore old path, in case it has been altered but not been used */      /* restore old path, in case it has been altered but not been used */
983      free(appdata->fieldnotes_path);      free(appdata->fieldnotes_path);

Legend:
Removed from v.226  
changed lines
  Added in v.259