Save and load grid state functionality implemented
[wordblah.git] / wordblox_player.c
index 605d9f5..9560ac8 100644 (file)
@@ -466,8 +466,8 @@ gboolean on_puzzle_area_draw (GtkWidget *widget, cairo_t *cr, gpointer data)
 /* slot for reveal solution menu */
 void on_menu_reveal_solution_activate (GtkMenuItem *item, GtkDrawingArea *area)
 {
-       /* if puzzle is password protected ask for the password */
-       if (strlen (app_data.puzzle.hashed_password) > 0)
+       /* if puzzle solution is password protected ask for the password */
+       if (strlen (app_data.puzzle.hashed_solution_password) > 0)
        {
                GtkBuilder *builder;
                builder = gtk_builder_new ();
@@ -504,7 +504,7 @@ void on_menu_reveal_solution_activate (GtkMenuItem *item, GtkDrawingArea *area)
                        const gchar *user_pwd = gtk_entry_get_text 
                                                                                        (GTK_ENTRY(password_text));
                        /* if password is correct */
-                       if (verify_password (&app_data.puzzle, user_pwd) == true)
+                       if (verify_solution_password (&app_data.puzzle, user_pwd) == true)
                                app_data.solution_revealed = true;
                        /* password is incorrect */
                        else
@@ -534,10 +534,65 @@ void on_menu_reveal_solution_activate (GtkMenuItem *item, GtkDrawingArea *area)
 
 }
 
+/* slot for load grid state menu */
+void on_menu_load_grid_state_activate (GtkMenuItem *item, GtkDrawingArea *area)
+{
+       GtkWidget *dialog;
+       GtkFileChooserAction action = GTK_FILE_CHOOSER_ACTION_OPEN;
+       gint res;
+       dialog = gtk_file_chooser_dialog_new (OPEN_FILE, GTK_WINDOW (main_window),
+                                                                               action,
+                                                                               "_Cancel",
+                                                                               GTK_RESPONSE_CANCEL,
+                                                                               "_Open",
+                                                                               GTK_RESPONSE_ACCEPT,
+                                                                               NULL
+                                                                               );
+                                                                               
+       res = gtk_dialog_run (GTK_DIALOG (dialog));
+       if (res == GTK_RESPONSE_ACCEPT)
+       {
+               char *filename;
+               filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
+               load_user_data (&app_data, filename);
+               g_free (filename);
+       }
+       
+       gtk_widget_destroy (dialog);
+       
+       gtk_widget_queue_draw_area (GTK_WIDGET(area), 0, 0,  
+                               app_data.puzzle.grid_size*GRID_PIXELS+10, 
+                               app_data.puzzle.grid_size*GRID_PIXELS+10);
+                               
+       update_clue_items ();
+}
+
 /* slot for save grid state menu */
 void on_menu_save_grid_state_activate (GtkMenuItem *item, gpointer *data)
 {
-       /* TODO */
+       if (app_data.is_loaded == false)
+               return;
+               
+       GtkWidget *dialog;
+       GtkFileChooserAction action = GTK_FILE_CHOOSER_ACTION_SAVE;
+       gint res;
+       dialog = gtk_file_chooser_dialog_new (SAVE_FILE, GTK_WINDOW(main_window),
+                                                                               action,
+                                                                               "_Cancel",
+                                                                               GTK_RESPONSE_CANCEL,
+                                                                               "_Save",
+                                                                               GTK_RESPONSE_ACCEPT,
+                                                                               NULL);
+       res = gtk_dialog_run (GTK_DIALOG (dialog));
+       if (res == GTK_RESPONSE_ACCEPT)
+       {
+               char *filename;
+               filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
+               save_user_data (&app_data, filename);
+               g_free (filename);
+       }
+       
+       gtk_widget_destroy (dialog);
 }
 
 /* slot for exit menu */