Renamed the project to Wordblah from wordblox
[wordblah.git] / wordblox_player.c
diff --git a/wordblox_player.c b/wordblox_player.c
deleted file mode 100644 (file)
index 9560ac8..0000000
+++ /dev/null
@@ -1,724 +0,0 @@
-#include <gtk/gtk.h>
-
-#include "constantstrings.h"
-#include "wordblox_resource.c"
-#include "wordblox.h"
-
-GtkWidget *main_window; 
-GtkListStore *across_store;
-GtkListStore *down_store;
-
-MainPlayerData app_data;
-
-/* update the clue items store */
-void update_clue_items ()
-{
-       gtk_list_store_clear (across_store);
-       gtk_list_store_clear (down_store);
-       
-       /* if the puzzle is loaded */
-       if (app_data.is_loaded == true)
-       {
-               /* iterate through the puzzle grid and gte the clues */
-               for (int i = 0; i < app_data.puzzle.grid_size; i ++)
-               {
-                       for (int j = 0; j < app_data.puzzle.grid_size; j ++)
-                       {
-                               /* if it is the start of an across word */
-                               if (app_data.puzzle.start_across_word[i][j] != -1)
-                               {
-                                       GtkTreeIter iter;
-                                                                                       
-                                       gtk_list_store_append (across_store, &iter);
-                                       gtk_list_store_set (across_store, &iter, 0,
-                                                                               app_data.puzzle.start_across_word[i][j],
-                                                                               1, app_data.puzzle.clue_across[i][j],
-                                                                               -1);
-                               }
-                               /* if it is the start of a down word */
-                               if (app_data.puzzle.start_down_word[i][j] != -1)
-                               {
-                                       GtkTreeIter iter;
-                                       gtk_list_store_append (down_store, &iter);
-                                       gtk_list_store_set (down_store, &iter, 0,
-                                                                               app_data.puzzle.start_down_word[i][j],
-                                                                               1, app_data.puzzle.clue_down[i][j],
-                                                                               -1);
-                               }
-                       }
-               }
-       } 
-}
-
-/* slot for handling list down selection changed */
-gboolean on_down_list_selection_changed (GtkTreeSelection *sel, 
-                                                                                       GtkDrawingArea *area)
-{
-       GtkTreeIter iter;
-       GtkTreeModel* mod;
-       
-       if (gtk_tree_selection_get_selected (sel, &mod, &iter))
-       {
-               guint sel_word_index;
-               gtk_tree_model_get (mod, &iter, 0, &sel_word_index, -1);
-               set_selection_to_word_start (&app_data, DOWN, sel_word_index);
-       }
-       
-       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);
-       
-       return FALSE;
-
-}
-/* slot for handling list across selection changed */
-gboolean on_across_list_selection_changed (GtkTreeSelection *sel, 
-                                                                                       GtkDrawingArea *area)
-{
-       GtkTreeIter iter;
-       GtkTreeModel* mod;
-       
-       if (gtk_tree_selection_get_selected (sel, &mod, &iter))
-       {
-               guint sel_word_index;
-               gtk_tree_model_get (mod, &iter, 0, &sel_word_index, -1);
-               set_selection_to_word_start (&app_data, ACROSS, sel_word_index);
-       }
-       
-       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);
-       
-       return FALSE;
-
-}
-
-/* slot for handling mouse button event for puzzle drawing area */
-gboolean on_puzzle_area_button_press_event (GtkWidget *widget, 
-                                                                       GdkEventButton *event, gpointer data)
-{
-       /* if it is solution mode, then don't do anything but reset it to 
-          non solution mode */
-       if (app_data.solution_revealed == true)
-       {
-               app_data.solution_revealed = false;
-               gtk_widget_queue_draw_area (widget, 0, 0,  
-                       app_data.puzzle.grid_size*GRID_PIXELS+10, 
-                       app_data.puzzle.grid_size*GRID_PIXELS+10);
-               return FALSE;
-       }
-       
-       /* Depending on the type of button handle the movement */
-       if (event->type == GDK_BUTTON_PRESS && event->button == 1)
-       {
-               int col = (event->x - 5) / GRID_PIXELS;
-               int row = (event->y - 5) / GRID_PIXELS;
-       
-               if (app_data.puzzle.chars[row][col] != '#')
-               {
-                       if (row < app_data.puzzle.grid_size && 
-                               col < app_data.puzzle.grid_size)
-                       {
-                               app_data.cur_row = row;
-                               app_data.cur_col = col;
-                               
-                               /* if it is a start of both across and down word, then 
-                                  toggle the movement on clicking it */
-                               if (app_data.puzzle.start_across_word[row][col] != -1 &&
-                                       app_data.puzzle.start_down_word[row][col] != -1)
-                               {
-                                       if (app_data.current_movement == ACROSS)
-                                               app_data.current_movement = DOWN;
-                                       else
-                                               app_data.current_movement = ACROSS;                             
-                               }
-                               /* if it is only start of across word, make the current
-                                  movement across */
-                               else if (app_data.puzzle.start_across_word[row][col] != -1)
-                                       app_data.current_movement = ACROSS;
-                               /* else down movement */
-                               else if (app_data.puzzle.start_down_word[row][col] != -1)
-                                       app_data.current_movement = DOWN; 
-                       }
-               }
-       }
-       
-       gtk_widget_queue_draw_area (widget, 0, 0,  
-               app_data.puzzle.grid_size*GRID_PIXELS+10, 
-               app_data.puzzle.grid_size*GRID_PIXELS+10);
-
-       return FALSE;   
-}
-
-/* slot for handling key press event for puzzle drawing area */
-gboolean on_puzzle_area_key_press_event (GtkWidget *widget, 
-                                                                       GdkEventKey *event, gpointer data)
-{
-       /* respond to key events only if the puzzle is loaded */
-       if (app_data.is_loaded == true)
-       {
-               /* if the solution is revealed, don't respond to key events except
-                  to return to the non-solution mode */
-               if (app_data.solution_revealed == true)
-               {
-                       app_data.solution_revealed = false;
-                       gtk_widget_queue_draw_area (widget, 0, 0,  
-                               app_data.puzzle.grid_size*GRID_PIXELS+10, 
-                               app_data.puzzle.grid_size*GRID_PIXELS+10);
-                       return FALSE;
-               }
-               
-               switch (event->keyval)
-               {
-                       case GDK_KEY_Down : move_current_row (&app_data, DIR_FORWARD);
-                                                               app_data.current_movement = DOWN;
-                                                               break;
-                       case GDK_KEY_Up   : move_current_row (&app_data, DIR_BACK);
-                                                               app_data.current_movement = DOWN;
-                                                               break;
-                       case GDK_KEY_Right: move_current_col (&app_data, DIR_FORWARD);
-                                                               app_data.current_movement = ACROSS;
-                                                               break;
-                       case GDK_KEY_Left : move_current_col (&app_data, DIR_BACK);
-                                                               app_data.current_movement = ACROSS;
-                                                               break;
-                       case GDK_KEY_BackSpace:
-                       case GDK_KEY_Delete:
-                       case GDK_KEY_space: 
-                                       app_data.char_ans[app_data.cur_row][app_data.cur_col] = ' ';
-                                                               break;                  
-                       case GDK_KEY_a    :
-                       case GDK_KEY_A    : 
-                                       app_data.char_ans[app_data.cur_row][app_data.cur_col] = 'A';
-                                                               break;
-                       case GDK_KEY_b    :
-                       case GDK_KEY_B    : 
-                                       app_data.char_ans[app_data.cur_row][app_data.cur_col] = 'B';
-                                                               break;
-                       case GDK_KEY_c    :
-                       case GDK_KEY_C    : 
-                                       app_data.char_ans[app_data.cur_row][app_data.cur_col] = 'C';
-                                                               break;
-                       case GDK_KEY_d    :
-                       case GDK_KEY_D    : 
-                                       app_data.char_ans[app_data.cur_row][app_data.cur_col] = 'D';
-                                                               break;
-                       case GDK_KEY_e    :
-                       case GDK_KEY_E    : 
-                                       app_data.char_ans[app_data.cur_row][app_data.cur_col] = 'E';
-                                                               break;
-                       case GDK_KEY_f    :
-                       case GDK_KEY_F    : 
-                                       app_data.char_ans[app_data.cur_row][app_data.cur_col] = 'F';            
-                                                               break;
-                       case GDK_KEY_g    :
-                       case GDK_KEY_G    : 
-                                       app_data.char_ans[app_data.cur_row][app_data.cur_col] = 'G';
-                                                               break;
-                       case GDK_KEY_h    :
-                       case GDK_KEY_H    : 
-                                       app_data.char_ans[app_data.cur_row][app_data.cur_col] = 'H';
-                                                               break;
-                       case GDK_KEY_i    :
-                       case GDK_KEY_I    : 
-                                       app_data.char_ans[app_data.cur_row][app_data.cur_col] = 'I';
-                                                               break;
-                       case GDK_KEY_j    :
-                       case GDK_KEY_J    : 
-                                       app_data.char_ans[app_data.cur_row][app_data.cur_col] = 'J';
-                                                               break;
-                       case GDK_KEY_k    :
-                       case GDK_KEY_K    : 
-                                       app_data.char_ans[app_data.cur_row][app_data.cur_col] = 'K';
-                                                               break;
-                       case GDK_KEY_l    :
-                       case GDK_KEY_L    : 
-                                       app_data.char_ans[app_data.cur_row][app_data.cur_col] = 'L';
-                                                               break;
-                       case GDK_KEY_m    :
-                       case GDK_KEY_M    : 
-                                       app_data.char_ans[app_data.cur_row][app_data.cur_col] = 'M';
-                                                               break;
-                       case GDK_KEY_n    :
-                       case GDK_KEY_N    : 
-                                       app_data.char_ans[app_data.cur_row][app_data.cur_col] = 'N';
-                                                               break;
-                       case GDK_KEY_o    :
-                       case GDK_KEY_O    : 
-                                       app_data.char_ans[app_data.cur_row][app_data.cur_col] = 'O';
-                                                               break;
-                       case GDK_KEY_p    :
-                       case GDK_KEY_P    : 
-                                       app_data.char_ans[app_data.cur_row][app_data.cur_col] = 'P';
-                                                               break;
-                       case GDK_KEY_q    :
-                       case GDK_KEY_Q    : 
-                                       app_data.char_ans[app_data.cur_row][app_data.cur_col] = 'Q';
-                                                               break;
-                       case GDK_KEY_r    :
-                       case GDK_KEY_R    : 
-                                       app_data.char_ans[app_data.cur_row][app_data.cur_col] = 'R';
-                                                               break;
-                       case GDK_KEY_s    :
-                       case GDK_KEY_S    : 
-                                       app_data.char_ans[app_data.cur_row][app_data.cur_col] = 'S';
-                                                               break;
-                       case GDK_KEY_t    :
-                       case GDK_KEY_T    : 
-                                       app_data.char_ans[app_data.cur_row][app_data.cur_col] = 'T';
-                                                               break;
-                       case GDK_KEY_u    :
-                       case GDK_KEY_U    : 
-                                       app_data.char_ans[app_data.cur_row][app_data.cur_col] = 'U';
-                                                               break;
-                       case GDK_KEY_v    :
-                       case GDK_KEY_V    : 
-                                       app_data.char_ans[app_data.cur_row][app_data.cur_col] = 'V';
-                                                               break;
-                       case GDK_KEY_w    :
-                       case GDK_KEY_W    : 
-                                       app_data.char_ans[app_data.cur_row][app_data.cur_col] = 'W';
-                                                               break;
-                       case GDK_KEY_x    :
-                       case GDK_KEY_X    : 
-                                       app_data.char_ans[app_data.cur_row][app_data.cur_col] = 'X';
-                                                               break;
-                       case GDK_KEY_y    :
-                       case GDK_KEY_Y    : 
-                                       app_data.char_ans[app_data.cur_row][app_data.cur_col] = 'Y';
-                                                               break;
-                       case GDK_KEY_z    :
-                       case GDK_KEY_Z    : 
-                                       app_data.char_ans[app_data.cur_row][app_data.cur_col] = 'Z';
-                                                               break;
-                       default                   : return FALSE;
-                                                                               
-               }
-       }
-       
-       /* move the selection pointer to next row/col as per the current 
-       movement orientation if it is not a key left right up or down */
-       if (event->keyval != GDK_KEY_Down && event->keyval != GDK_KEY_Up &&
-                       event->keyval != GDK_KEY_Left && event->keyval != GDK_KEY_Right
-                               && event->keyval != GDK_KEY_Delete)
-       {
-               /* if the current movement is an across movement */
-               if (app_data.current_movement == ACROSS)
-               {
-                       /* if the next column is not blocking move the col */
-                       if (event->keyval != GDK_KEY_BackSpace && 
-                               next_col_block (&app_data.puzzle, app_data.cur_row,
-                                                       app_data.cur_col) == false)
-                               move_current_col (&app_data, DIR_FORWARD);
-                       else if (event->keyval == GDK_KEY_BackSpace &&
-                                                prev_col_block (&app_data.puzzle, app_data.cur_row,
-                                                       app_data.cur_col) == false)
-                               move_current_col (&app_data, DIR_BACK);
-               }
-               /* current movement is a up/down movement */
-               else
-               {
-                       if (event->keyval != GDK_KEY_BackSpace && 
-                                               next_row_block (&app_data.puzzle, 
-                                                               app_data.cur_row, app_data.cur_col) == false)
-                               move_current_row (&app_data, DIR_FORWARD);
-                       else if (event->keyval == GDK_KEY_BackSpace &&
-                                               prev_row_block (&app_data.puzzle,
-                                                               app_data.cur_row, app_data.cur_col) == false)
-                               move_current_row (&app_data, DIR_BACK);
-               }       
-       }
-               
-       
-       gtk_widget_queue_draw_area (widget, 0, 0,  
-               app_data.puzzle.grid_size*GRID_PIXELS+10, 
-               app_data.puzzle.grid_size*GRID_PIXELS+10);      
-       
-       return FALSE;
-}
-
-/* slot for drawing the puzzle */
-gboolean on_puzzle_area_draw (GtkWidget *widget, cairo_t *cr, gpointer data)
-{
-       /* if a puzzle is loaded */
-       if (app_data.is_loaded == true)
-       {
-               GdkRGBA colorfore, colorback, colorblue, colorbacksel1, 
-                               colorbacksel2, colorsolution;
-               gdk_rgba_parse (&colorfore, "#000000"); 
-               gdk_rgba_parse (&colorback, "#ffffff");
-               gdk_rgba_parse (&colorblue, "#0000dd");
-               gdk_rgba_parse (&colorbacksel1, "#ffffaa");
-               gdk_rgba_parse (&colorbacksel2, "#aaffff");
-               gdk_rgba_parse (&colorsolution, "#990099");
-               cairo_set_line_width (cr, 3);
-               
-               /* set the size of the drawing area */
-               gtk_widget_set_size_request (widget, 
-                                                               app_data.puzzle.grid_size*GRID_PIXELS+10, 
-                                                               app_data.puzzle.grid_size*GRID_PIXELS+10);
-                                                               
-               /* Draw the grid */                     
-               for (int i = 0; i < app_data.puzzle.grid_size; i ++)
-               {
-                       for (int j = 0; j < app_data.puzzle.grid_size; j ++)
-                       {
-                               /* if it is the current selection or if -1 is the current 
-                               selection then let the current selection be the first word */
-                               if (app_data.cur_col == -1 && app_data.cur_row == -1)
-                               {
-                                       if (app_data.puzzle.start_across_word[i][j] == 1)
-                                       {
-                                               app_data.cur_row = i;
-                                               app_data.cur_col = j;
-                                               app_data.current_movement = ACROSS;
-                                       }
-                                       else if (app_data.puzzle.start_down_word[i][j] == 1)
-                                       {
-                                               app_data.cur_row = i; 
-                                               app_data.cur_col = j;
-                                               app_data.current_movement = DOWN;
-                                       }
-                               }
-                       
-                               gdk_cairo_set_source_rgba (cr, &colorfore);
-                               cairo_rectangle (cr, j*GRID_PIXELS+5, i*GRID_PIXELS+5, 
-                                                                       GRID_PIXELS, GRID_PIXELS);
-
-                               cairo_stroke (cr);
-                               
-                               /* if it is not a blank grid then set the background color
-                                  to black */
-                               if (app_data.puzzle.chars[i][j] != '#')
-                                       gdk_cairo_set_source_rgba (cr, &colorback);
-                               
-                               /* if it is a current selection and solution reveal mode is not 
-                                  set then then set the background depending on whether across
-                                  or down movement mode is current */
-                               if (app_data.solution_revealed == false && 
-                                               app_data.cur_row == i && app_data.cur_col == j)
-                               {
-                                       if (app_data.current_movement == ACROSS)
-                                               gdk_cairo_set_source_rgba (cr, &colorbacksel1);
-                                       else
-                                               gdk_cairo_set_source_rgba (cr, &colorbacksel2);
-                               }
-                               
-                               cairo_rectangle (cr, j*GRID_PIXELS+5, i*GRID_PIXELS+5, 
-                                                                       GRID_PIXELS, GRID_PIXELS);
-                               cairo_fill (cr);
-                               
-                               /* draw the word number if it is the start of a word */
-                               if (app_data.puzzle.start_across_word[i][j] != -1 || 
-                                       app_data.puzzle.start_down_word[i][j] != -1)
-                               {
-                                       int num;
-                                       if (app_data.puzzle.start_across_word[i][j] != -1)
-                                               num = app_data.puzzle.start_across_word[i][j];
-                                       else
-                                               num = app_data.puzzle.start_down_word[i][j];
-                               
-                                       gdk_cairo_set_source_rgba (cr, &colorblue);     
-                                       cairo_select_font_face (cr, "sans serif", 
-                                                                                       CAIRO_FONT_SLANT_NORMAL,
-                                                                                       CAIRO_FONT_WEIGHT_NORMAL);
-                                       cairo_set_font_size (cr, 11);
-                                       cairo_move_to (cr, j*GRID_PIXELS+7, i*GRID_PIXELS+15);
-                                       char cnum[3];
-                                       sprintf (cnum, "%d", num);
-                                       cairo_show_text (cr, (const char*)cnum);
-                               }
-                               
-                               /* if solution is not revealed set the color to normal
-                                  or set it to solution color */
-                               if (app_data.solution_revealed == false)
-                                       gdk_cairo_set_source_rgba (cr, &colorfore);
-                               else
-                                       gdk_cairo_set_source_rgba (cr, &colorsolution);
-                                       
-                               cairo_select_font_face (cr, "sans serif", 
-                                                                               CAIRO_FONT_SLANT_NORMAL,
-                                                                               CAIRO_FONT_WEIGHT_BOLD);
-                               
-                               cairo_set_font_size (cr, 16);
-                               cairo_move_to (cr, j*GRID_PIXELS+GRID_PIXELS/2, 
-                                                               i*GRID_PIXELS+GRID_PIXELS-10);
-                               char ctxt[3];
-                               /* if it is solution mode reveal the answer or else the 
-                                  user input */
-                                 if (app_data.solution_revealed == false)
-                                       sprintf (ctxt, "%c", app_data.char_ans[i][j]);
-                                 else
-                                       if (app_data.puzzle.chars[i][j] != '#')
-                                               sprintf (ctxt, "%c", app_data.puzzle.chars[i][j]);
-                                       else
-                                               sprintf (ctxt, "%c", ' ');
-                               cairo_show_text (cr, (const char*) ctxt);
-
-                       }
-               }
-       }
-                       
-       return FALSE;
-
-}
-
-/* slot for reveal solution menu */
-void on_menu_reveal_solution_activate (GtkMenuItem *item, GtkDrawingArea *area)
-{
-       /* 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 ();
-               
-               guint ret = gtk_builder_add_from_resource 
-                                               (builder, 
-                                                       "/org/harishankar/wordblox/wordblox_player.glade", 
-                                                       NULL);          
-               if (ret == 0)
-               {
-                       fprintf (stderr, ERROR_WINDOW);
-                       g_object_unref (builder);
-                       return;
-               }
-                                               
-               GtkWidget *password_dialog = GTK_WIDGET (gtk_builder_get_object 
-                                                                               (builder, "password_dialog"));
-               GtkWidget *password_text = GTK_WIDGET (gtk_builder_get_object 
-                                                                               (builder, "password_text"));
-                                                                               
-               if (password_dialog == NULL)
-               {
-                       fprintf (stderr, ERROR_WINDOW);
-                       g_object_unref (builder);
-                       return;
-               }
-               gtk_window_set_transient_for (GTK_WINDOW(password_dialog), 
-                                                                       GTK_WINDOW(main_window));
-               gtk_dialog_set_default_response (GTK_DIALOG(password_dialog), 
-               GTK_RESPONSE_ACCEPT);
-               gint res = gtk_dialog_run (GTK_DIALOG (password_dialog));
-               if (res == GTK_RESPONSE_ACCEPT)
-               {
-                       const gchar *user_pwd = gtk_entry_get_text 
-                                                                                       (GTK_ENTRY(password_text));
-                       /* if password is correct */
-                       if (verify_solution_password (&app_data.puzzle, user_pwd) == true)
-                               app_data.solution_revealed = true;
-                       /* password is incorrect */
-                       else
-                       {
-                               app_data.solution_revealed = false;
-                               GtkWidget *errordlg ;
-                               errordlg = gtk_message_dialog_new (GTK_WINDOW(main_window), 
-                                                                                               GTK_DIALOG_DESTROY_WITH_PARENT,
-                                                                                               GTK_MESSAGE_ERROR,
-                                                                                               GTK_BUTTONS_CLOSE,
-                                                                                               WRONG_PASSWORD);
-                               gtk_dialog_run (GTK_DIALOG(errordlg));
-                               gtk_widget_destroy (errordlg);
-                       }
-               }
-               
-               gtk_widget_destroy (password_text);
-               gtk_widget_destroy (password_dialog);
-               g_object_unref (builder);
-                       }
-       else
-               app_data.solution_revealed = true;
-
-       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);
-
-}
-
-/* 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)
-{
-       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 */
-void on_menu_exit_activate (GtkMenuItem *item, gpointer data)
-{
-       gtk_main_quit ();
-}
-
-/* slot for open menu */
-void on_menu_open_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));
-               MainPlayerData temp;
-               reset_player_data (&temp, filename);
-
-               /* if the grid is not frozen then the game cannot be played */
-               if (temp.is_loaded == false)
-               {
-                       GtkWidget *errordlg ;
-                       errordlg = gtk_message_dialog_new (GTK_WINDOW(main_window), 
-                                                                                               GTK_DIALOG_DESTROY_WITH_PARENT,
-                                                                                               GTK_MESSAGE_ERROR,
-                                                                                               GTK_BUTTONS_CLOSE,
-                                                                                               UNFROZEN_GRID_PLAYER);
-                       gtk_dialog_run (GTK_DIALOG(errordlg));
-                       gtk_widget_destroy (errordlg);
-               }
-               else
-               {
-                       app_data = temp;
-                       gtk_widget_queue_draw_area (GTK_WIDGET (area), 0, 0, 
-                                                                               app_data.puzzle.grid_size*30+10, 
-                                                                               app_data.puzzle.grid_size*30+10);
-
-               }
-               update_clue_items ();           
-               g_free (filename);
-       }
-       
-       gtk_widget_destroy (dialog);
-}
-
-/* slot for about menu */
-void on_menu_about_activate (GtkMenuItem *item, gpointer data)
-{      
-       const char *AUTHOR[] =  {"V.Harishankar", NULL};
-       gtk_show_about_dialog (GTK_WINDOW(main_window), "authors",AUTHOR, 
-                                                       "program-name", PROGRAM_NAME,
-                                                       "copyright", COPYRIGHT,
-                                                       "comments", COMMENTS,
-                                                       "website", WEBSITE,
-                                                       "website-label", WEBSITE_LABEL,
-                                                       "license-type", GTK_LICENSE_GPL_2_0,
-                                                       "version", VERSION,
-                                                       (char*)NULL);
-}
-
-int main (int argc, char *argv [])
-{
-       gtk_init (&argc, &argv);
-       GdkPixbuf *icon;
-       icon = gdk_pixbuf_new_from_resource 
-                               ("/org/harishankar/wordblox/wordblox.svg", NULL);
-       if (icon == NULL)
-               fprintf (stderr, ERROR_ICON);
-       
-       GtkBuilder *builder;
-       builder = gtk_builder_new ();
-       guint ret = gtk_builder_add_from_resource (builder, 
-               "/org/harishankar/wordblox/wordblox_player.glade", NULL);
-       
-       app_data.is_loaded = false;
-       
-       if (ret == 0)
-       {
-               fprintf (stderr, ERROR_WINDOW);
-               g_object_unref (builder);
-               return 1;       
-       }
-       else 
-       {
-               main_window = GTK_WIDGET (gtk_builder_get_object (builder, 
-                                                                                                                       "main_window"));
-
-               across_store = GTK_LIST_STORE (gtk_builder_get_object
-                                                                                       (builder, "store_across_clues"));
-               down_store = GTK_LIST_STORE (gtk_builder_get_object 
-                                                                                       (builder, "store_down_clues"));
-                                                                                       
-               if (main_window != NULL)
-               {
-                       gtk_window_set_default_icon (icon);
-                       
-                       GtkWidget *draw_area = GTK_WIDGET (
-                                                       gtk_builder_get_object(builder, "puzzle_area"));
-                       
-                       /* make drawing area respond to mouse event */
-                       gtk_widget_set_events(draw_area,
-                                       gtk_widget_get_events(draw_area) 
-                                               | GDK_BUTTON_PRESS_MASK);
-               
-                       gtk_builder_connect_signals (builder, NULL);
-                       g_object_unref (builder);
-                       gtk_widget_show (main_window);
-                       gtk_main ();
-                       return 0;
-               }
-               else
-               {
-                       g_object_unref (builder);
-                       fprintf (stderr, ERROR_WINDOW);
-                       return 1;
-               }
-       } 
-}