Added functionality to across and down clues list
[getaclue.git] / player_mainwindow.py
index 366cbfa..3d528cc 100644 (file)
@@ -33,24 +33,51 @@ class MainWindow:
 
                self.gtk_main_quit ()
 
-       # callback for puzzle grid mouse button release event
-       def on_puzzlegrid_button_press_event (self, drawarea, event):
-               # set the focus on the puzzle grid
-               if self.puzzle:
-                       self.window.set_focus (drawarea)
+       # 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
 
-                       col = int (event.x / 30)
-                       row = int (event.y / 30)
+               # update the puzzle grid
+               puzgrid = self.ui.get_object ("puzzlegrid")
 
-                       if col < self.puzzle.cols and row < self.puzzle.rows:
-                               if (self.puzzle.data[row][col].occupied_across is True or
-                               self.puzzle.data[row][col].occupied_down is True):
-                                       self.selected_col = col
-                                       self.selected_row = row
-                                       drawarea.queue_draw ()
+               # set focus to the puzzle grid
+               self.window.set_focus (puzgrid)
+
+               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)
+
        # moving the current selection in grid by one up or down
        def move_selection_updown (self, step):
                # increase or reduce the row by step until an occupied grid is found
@@ -118,31 +145,59 @@ class MainWindow:
                                # reset selection
                                else:
                                        self.selected_col = old_sel_col
+                       elif self.typing_mode == self.DOWN:
+                               # prevent deleting characters when there is a gap
+                               old_sel_row = self.selected_row
+                               self.move_selection_updown (-1)
+                               # only if there is no block inbetween delete
+                               if abs (self.selected_row - old_sel_row) <= 1:
+                                       self.puzzle.data[self.selected_row][self.selected_col].guess = None
+                               # reset selection
+                               else:
+                                       self.selected_row = old_sel_row
+
+       # callback for puzzle grid mouse button release event
+       def on_puzzlegrid_button_press_event (self, drawarea, event):
+               # set the focus on the puzzle grid
+               if self.puzzle:
+                       self.window.set_focus (drawarea)
+
+                       col = int (event.x / 30)
+                       row = int (event.y / 30)
+
+                       if col < self.puzzle.cols and row < self.puzzle.rows:
+                               if (self.puzzle.data[row][col].occupied_across is True or
+                               self.puzzle.data[row][col].occupied_down is True):
+                                       self.selected_col = col
+                                       self.selected_row = row
+                                       drawarea.queue_draw ()
+
+               return False
 
        # callback for puzzle grid key release event
        def on_puzzlegrid_key_press_event (self, drawarea, event):
                if self.puzzle:
-                       key = gtk.gdk.keyval_name (event.keyval)
+                       key = gtk.gdk.keyval_name (event.keyval).lower ()
 
-                       if event.state == gtk.gdk.SHIFT_MASK and key == "Up":
+                       if event.state == gtk.gdk.SHIFT_MASK and key == "up":
                                # reduce the row by 1 until you find an occupied grid and not a
                                # black block
                                self.move_selection_updown (-1)
                                self.typing_mode = self.DOWN
                                drawarea.queue_draw ()
-                       elif event.state == gtk.gdk.SHIFT_MASK and key == "Down":
+                       elif event.state == gtk.gdk.SHIFT_MASK and key == "down":
                                # increase the row by 1 until you find an occupied grid and not a
                                # black block
                                self.move_selection_updown (1)
                                self.typing_mode = self.DOWN
                                drawarea.queue_draw ()
-                       elif event.state == gtk.gdk.SHIFT_MASK and key == "Right":
+                       elif event.state == gtk.gdk.SHIFT_MASK and key == "right":
                                # increase the column by 1 until you find an occupied grid and not
                                # a black block
                                self.move_selection_across (1)
                                self.typing_mode = self.ACROSS
                                drawarea.queue_draw ()
-                       elif event.state == gtk.gdk.SHIFT_MASK and key == "Left":
+                       elif event.state == gtk.gdk.SHIFT_MASK and key == "left":
                                # decrease the column by 1 until you find an occupied grid and not
                                # a black block
                                self.move_selection_across (-1)
@@ -153,7 +208,7 @@ class MainWindow:
                                self.set_guess (key)
                                drawarea.queue_draw ()
                        # if it is the delete key then delete character at selected row/col
-                       elif key == "Delete":
+                       elif key == "delete" or key == "space":
                                self.puzzle.data[self.selected_row][self.selected_col].guess = None
                                drawarea.queue_draw ()
                        # if it is backspace key then delete character at previous row/col
@@ -187,8 +242,6 @@ class MainWindow:
                        # size the area
                        drawarea.set_size_request (self.puzzle.cols*30+2, self.puzzle.rows*30+2)
 
-                       #numlayout = gtk.PrintContext().create_pango_layout ()
-                       #numlayout.set_font_description (pango.FontDescription ("Sans 8"))
                        ctx = drawarea.window.cairo_create ()
                        ctx.set_line_width (1.5)