+ # callback for menu item open activated event
+ def on_open_activate (self, menuitem):
+ dlg = gtk.FileChooserDialog ("Open a GetAClue puzzle", self.window,
+ gtk.FILE_CHOOSER_ACTION_OPEN,
+ (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK))
+
+ if dlg.run () == gtk.RESPONSE_OK:
+ puzzlefile = dlg.get_filename ()
+ self.open_file (puzzlefile)
+
+ dlg.destroy ()
+
+ # callback for menu item save as activated event
+ def on_save_as_activate (self, menuitem):
+ if self.puzzle:
+ dlg = gtk.FileChooserDialog ("Save GetAClue puzzle as", self.window,
+ gtk.FILE_CHOOSER_ACTION_SAVE,
+ (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_SAVE,
+ gtk.RESPONSE_OK))
+ if dlg.run () == gtk.RESPONSE_OK:
+ puzzlefile = dlg.get_filename ()
+ self.save_file (puzzlefile)
+
+ dlg.destroy ()
+
+ # callback for main window destroy
+ def on_mainwindow_destroy (self, args):
+ gtk.main_quit ()
+
+
+ # callback for window closing dialog
+ def on_mainwindow_delete_event (self, window, event):
+ # verify whether really to quit or not if a puzzle is open
+ v = self.verify_quit ()
+ # return False for deleting and True for not deleting
+ return not v
+
+ # callback for menu item quit activated event
+ def on_quit_activate (self, menuitem):
+ # verify whether really to quit or not if a puzzle is open
+ v = self.verify_quit ()
+ # if verified, then quit
+ if v is True:
+ self.window.destroy ()
+
+ # callback for menu item clear grid activated event
+ def on_cleargrid_activate (self, menuitem):
+ if self.puzzle:
+ dlg = gtk.MessageDialog (self.window, gtk.DIALOG_MODAL,
+ gtk.MESSAGE_QUESTION, gtk.BUTTONS_YES_NO,
+ "Are you sure you wish to clear your entries?")
+ if dlg.run () == gtk.RESPONSE_YES:
+ # clear the guesses
+ self.puzzle.clear_guesses ()
+ # redraw the grid
+ puzgrid = self.ui.get_object ("puzzlegrid")
+ puzgrid.queue_draw ()
+ dlg.destroy()
+
+ # callback for menu item verify board activated event
+ def on_verify_activate (self, menuitem):
+ if self.puzzle:
+ try:
+ ans = self.puzzle.is_solution_correct ()
+ # if the solution is correct
+ if ans:
+ dlg = gtk.MessageDialog (self.window, gtk.DIALOG_MODAL,
+ gtk.MESSAGE_INFO, gtk.BUTTONS_CLOSE,
+ "Success! Your entries are correct.")
+ dlg.run ()
+ else:
+ dlg = gtk.MessageDialog (self.window, gtk.DIALOG_MODAL,
+ gtk.MESSAGE_INFO, gtk.BUTTONS_CLOSE,
+ "Your solution has some errors. Fix them and try again")
+ dlg.run ()
+ except crosswordpuzzle.IncompleteSolutionException:
+ dlg = gtk.MessageDialog (self.window, gtk.DIALOG_MODAL,
+ gtk.MESSAGE_ERROR, gtk.BUTTONS_CLOSE,
+ "You've not completed the board yet. Cannot verify")
+ dlg.run ()
+ dlg.destroy ()
+
+ # callback for menu item hide solution activated event
+ def on_hidesolution_activate (self, menuitem):
+ if self.puzzle:
+ # hide the solution
+ self.puzzle.reveal_solution (False)
+ puzgrid = self.ui.get_object ("puzzlegrid")
+ # redraw the grid
+ puzgrid.queue_draw ()
+
+ # callback for menu item reveal solution activated event
+ def on_revealsolution_activate (self, menuitem):
+ if self.puzzle:
+ # confirm first
+ dlg = gtk.MessageDialog (self.window, gtk.DIALOG_MODAL,
+ gtk.MESSAGE_QUESTION, gtk.BUTTONS_YES_NO,
+ "This will reveal all words in the puzzle! Are you sure?")
+ if dlg.run () == gtk.RESPONSE_YES:
+ # reveal the solution
+ self.puzzle.reveal_solution ()
+ # redraw the grid
+ puzgrid = self.ui.get_object ("puzzlegrid")
+ puzgrid.queue_draw ()
+ dlg.destroy ()
+
+ # callback for menu item reveal word activated event
+ def on_revealword_activate (self, menuitem):
+ if self.puzzle:
+ # reveal across/down word if any the position
+ if self.puzzle.data[self.selected_row][self.selected_col].occupied_across is True:
+ dlg = gtk.MessageDialog (self.window, gtk.DIALOG_MODAL,
+ gtk.MESSAGE_QUESTION, gtk.BUTTONS_YES_NO,
+ "Are you sure you wish to reveal across word at current cell?")
+ # confirm that the user wants to reveal
+ if dlg.run () == gtk.RESPONSE_YES:
+ self.puzzle.reveal_word_across (self.selected_row, self.selected_col)
+ # redraw the grid to reveal the word
+ puzgrid = self.ui.get_object ("puzzlegrid")
+ puzgrid.queue_draw ()
+ dlg.destroy ()
+ if self.puzzle.data[self.selected_row][self.selected_col].occupied_down is True:
+ dlg = gtk.MessageDialog (self.window, gtk.DIALOG_MODAL,
+ gtk.MESSAGE_QUESTION, gtk.BUTTONS_YES_NO,
+ "Are you sure wish to reveal down word at current cell?")
+ if dlg.run () == gtk.RESPONSE_YES:
+ self.puzzle.reveal_word_down (self.selected_row, self.selected_col)
+ # redraw the grid to reveal the word
+ puzgrid = self.ui.get_object ("puzzlegrid")
+ puzgrid.queue_draw ()
+ dlg.destroy ()
+
+ # callback for menu help about activated event
+ def on_about_activate (self, menu_item):
+ # display the about dialog
+ self.about ()
+
+ # function to set the selected row/col based on the number clicked
+ # on the clues list and also set the typing mode
+ def set_selection_of_num (self, num, across = True):
+ # get the row, col of the word
+ row, col = self.puzzle.get_position_of_num (num)
+
+ # set the selected row and column
+ self.selected_row = row
+ self.selected_col = col
+ # set typing mode to across
+ if across is True:
+ self.typing_mode = self.ACROSS
+ else:
+ self.typing_mode = self.DOWN
+
+ # update the puzzle grid
+ puzgrid = self.ui.get_object ("puzzlegrid")
+
+ puzgrid.queue_draw ()
+
+ # callback for tree view "across" being activated
+ # activated - when double clicked or enter pressed
+ def on_tree_clues_across_row_activated (self, view, path, column):
+ # get the across list object
+ across_list = self.ui.get_object ("clues_across")
+ # get the number of the across word
+ anum = int (across_list.get_value (across_list.get_iter (path), 0))
+
+ self.set_selection_of_num (anum)
+
+ return False
+
+ # callback for tree view "down" being activated
+ # activated - when double clicked or enter pressed
+ def on_tree_clues_down_row_activated (self, view, path, column):
+ # get the down list object
+ down_list = self.ui.get_object ("clues_down")
+ # get the number of the down word
+ dnum = int (down_list.get_value (down_list.get_iter (path), 0))
+
+ self.set_selection_of_num (dnum, False)
+