[Xword-commits] r20 - trunk
terrencegf at garage.maemo.org
terrencegf at garage.maemo.org
Tue Apr 22 00:55:47 EEST 2008
Author: terrencegf
Date: 2008-04-22 00:55:45 +0300 (Tue, 22 Apr 2008)
New Revision: 20
Modified:
trunk/xword
Log:
TONS of modifications since the initial check in and hildonization.
See the changelog for more information.
Modified: trunk/xword
===================================================================
--- trunk/xword 2008-04-19 02:40:19 UTC (rev 19)
+++ trunk/xword 2008-04-21 21:55:45 UTC (rev 20)
@@ -1,6 +1,6 @@
#!/usr/bin/python
-__version__ = "1.0"
+__version__ = "1.0.4"
__license__ = """
Copyright (c) 2005-2006,
@@ -96,6 +96,15 @@
('Top and Bottom', ('V', 'across', 150, ('V', 'puzzle', 300, 'down')))
]
+toolbar_layouts = [
+ ('Off', 'puzzle', 'N'),
+ ('Checks on Left', 'checks','L'),
+ ('Checks on Right', 'checks','R'),
+ ('Keyboard on Left', 'keyboard','L'),
+ ('Keyboard on Right', 'keyboard','R')
+ ]
+
+
def time_str(t):
total = int(t)
secs = total % 60
@@ -1183,6 +1192,7 @@
self.skip_filled = False
self.layout = 0
+ self.toolbar_layout = 0
self.window_size = (900, 600)
self.maximized = False
self.fullscreen = False
@@ -1208,33 +1218,40 @@
win.resize(self.window_size[0], self.window_size[1])
if self.maximized: win.maximize()
- box = gtk.HBox()
- win.add(box)
- box = box
-
self.cur_layout = None
+ self.letterbar1 = None
+ menubox = gtk.VBox()
self.menubar = self.create_menubar()
+ menubox.pack_start(self.menubar, False, False, 0)
+
+ win.add(menubox)
+
+ self.box = gtk.HBox()
+ menubox.pack_start(self.box, True, True, 0)
+
+ self.toolbox = gtk.HBox()
+ self.box.pack_start(self.toolbox, False, False, 0)
+
self.toolbar = self.create_toolbar()
- box.pack_start(self.toolbar, False, False, 0)
+ self.letterbar1 = self.create_letterbar(
+ ['A','D','G','J','M','P','S','V','Y','ISO_Left_Tab','Left'])
+ self.letterbar2 = self.create_letterbar(
+ ['B','E','H','K','N','Q','T','W','Z','Up','Return','Down'])
+ self.letterbar3 = self.create_letterbar(
+ ['C','F','I','L','O','R','U','X','BackSpace','Tab','Right'])
self.create_widgets()
self.setup_controller()
self.vbox = gtk.VBox()
- box.pack_start(self.vbox, True, True, 0)
+ self.box.pack_start(self.vbox, True, True, 0)
self.cur_layout = self.generate_layout(self.positions)
self.vbox.pack_start(self.cur_layout, True, True, 0)
- self.status_bar = gtk.Statusbar()
+ self.set_toolbar_layout(self.toolbar_layout)
- #Put "status bar" into toolbar since it's mostly just wasting space
- self.status_bar.set_has_resize_grip(False)
- toolitem = gtk.ToolItem()
- toolitem.add(self.status_bar)
- self.toolbar.insert(toolitem, -1)
-
gobject.timeout_add(500, self.idle_event)
win.connect('key-press-event', self.key_event)
@@ -1246,10 +1263,6 @@
child.reparent(menu)
self.win.set_menu(menu)
self.menubar.destroy()
- else:
- toolitem = gtk.ToolItem()
- toolitem.add(self.menubar)
- self.toolbar.insert(toolitem, 0)
win.show_all()
@@ -1338,7 +1351,11 @@
except IOError: return
if not start_over:
- self.load_puzzle(fname, f)
+ opts = ['Start Over', 'Continue']
+ msg = ('This puzzle has been opened before. Would you like to ' +
+ 'continue where you left off?')
+ if has_hildon or self.ask(msg, opts) == 1:
+ self.load_puzzle(fname, f)
def write_puzzle(self):
if not self.puzzle: return
@@ -1430,7 +1447,10 @@
self.about_dialog.set_version(__version__)
self.about_dialog.set_comments('The Crossword puzzle player.')
self.about_dialog.set_license(__license__)
- self.about_dialog.set_authors(['Bill McCloskey <bill.mccloskey at gmail.com>\nMaemo Port: Bradley Bell <bradleyb at u.washington.edu>'])
+ self.about_dialog.set_authors(
+ ['Bill McCloskey <bill.mccloskey at gmail.com>\n' +
+ 'Maemo Port: Bradley Bell <bradleyb at u.washington.edu>\n' +
+ 'and Terrence Fleury <terrencegf at gmail.com>'])
# gtk.about_dialog_set_url_hook(self.show_website, "http://xword.garage.maemo.org")
self.about_dialog.set_website_label("http://xword.garage.maemo.org")
icon_path = ABOUT_ICON
@@ -1524,6 +1544,27 @@
for (name, w) in self.widgets.items():
if w is widget: return name
+ def set_toolbar_layout(self, index):
+ if not self.letterbar1: return
+
+ self.toolbar_layout = index
+ for child in self.toolbox.get_children():
+ self.toolbox.remove(child)
+
+ if toolbar_layouts[index][1] == 'checks':
+ self.toolbox.pack_start(self.toolbar,False,False,0)
+ elif toolbar_layouts[index][1] == 'keyboard':
+ self.toolbox.pack_start(self.letterbar1,False,False,0)
+ self.toolbox.pack_start(self.letterbar2,False,False,0)
+ self.toolbox.pack_start(self.letterbar3,False,False,0)
+
+ if toolbar_layouts[index][2] == 'L':
+ self.box.reorder_child(self.toolbox,0)
+ elif toolbar_layouts[index][2] == 'R':
+ self.box.reorder_child(self.toolbox,-1)
+
+ self.win.show_all()
+
def state_event(self, w, event):
state = int(event.new_window_state)
self.maximized = (state & gtk.gdk.WINDOW_STATE_MAXIMIZED) <> 0
@@ -1596,6 +1637,22 @@
append(menu, 'skip-filled',
create_menu_item('Skip Filled', MENU_SKIP, None,
gtk.CheckMenuItem, self.skip_filled))
+
+ item = create_menu_item('Toolbar Layout', 0)
+ append(menu, 'toolbar', item)
+
+ menu1 = gtk.Menu()
+ item.set_submenu(menu1)
+
+ g = None
+ i = -1
+ for (name, layout, side) in toolbar_layouts:
+ item = create_radio_item(name, i-10, g, -(i+1)==self.toolbar_layout)
+ menu1.append(item)
+ if not g: item.set_active(True)
+ g = item
+ i -= 1
+
item = create_menu_item('Word List Layout', 0)
append(menu, 'layout', item)
@@ -1647,6 +1704,10 @@
self.show_properties()
elif action == 'about':
self.show_about()
+ elif action < -10:
+ toolbar_layout = -(action+11)
+ if toolbar_layout <> self.toolbar_layout:
+ self.set_toolbar_layout(toolbar_layout)
elif action < 0:
layout = -(action+1)
if layout <> self.layout: self.set_layout(layout)
@@ -1700,7 +1761,8 @@
toolbar.set_orientation(gtk.ORIENTATION_VERTICAL)
self.toolbar = toolbar
- #self.create_toolbar_item('Quit', gtk.STOCK_QUIT, 'Quit')
+ if not has_hildon:
+ self.create_toolbar_item('Quit', gtk.STOCK_QUIT, 'Quit')
self.create_toolbar_item('Open', gtk.STOCK_OPEN, 'Open')
self.create_toolbar_item('Check Word', CHECK_ICON,
'Check a word')
@@ -1716,6 +1778,41 @@
return toolbar
+ def load_icon(self,filename):
+ img = gtk.Image()
+ img.set_from_file(filename)
+ return img
+
+ def create_letterbar(self,itemlist):
+ letterbar = gtk.Toolbar()
+ letterbar.set_style(gtk.TOOLBAR_ICONS)
+ letterbar.set_orientation(gtk.ORIENTATION_VERTICAL)
+
+ for item in itemlist:
+ if item == 'Left': button = gtk.ToolButton(
+ self.load_icon(HOME_PATH+'/left.xpm'),None)
+ elif item == 'Right': button = gtk.ToolButton(
+ self.load_icon(HOME_PATH+'/right.xpm'),None)
+ elif item == 'Up': button = gtk.ToolButton(
+ self.load_icon(HOME_PATH+'/up.xpm'),None)
+ elif item == 'Down': button = gtk.ToolButton(
+ self.load_icon(HOME_PATH+'/down.xpm'),None)
+ elif item == 'BackSpace': button = gtk.ToolButton(
+ self.load_icon(HOME_PATH+'/backspace.xpm'),None)
+ elif item == 'Return': button = gtk.ToolButton(
+ self.load_icon(HOME_PATH+'/swap.xpm'),None)
+ elif item == 'Tab': button = gtk.ToolButton(
+ self.load_icon(HOME_PATH+'/nextword.xpm'),None)
+ elif item == 'ISO_Left_Tab': button = gtk.ToolButton(
+ self.load_icon(HOME_PATH+'/prevword.xpm'),None)
+ else:
+ button = gtk.ToolButton(None,item)
+
+ button.connect('clicked',self.letterbar_event,item)
+ letterbar.insert(button,-1)
+
+ return letterbar
+
def create_list(self, mode):
if mode == ACROSS: label = 'Across'
else: label = 'Down'
@@ -1792,9 +1889,19 @@
else:
self.clock_time += (time.time() - self.clock_start)
+ def letterbar_event(self, widget, event):
+ keypress = gtk.gdk.Event(gtk.gdk.KEY_PRESS)
+ keypress.keyval = int(gtk.gdk.keyval_from_name(event))
+ if len(event) is 1 and event.isalpha():
+ self.puzzle_key_event('',keypress)
+ else:
+ self.key_event('',keypress)
+
def button_event(self, widget, event, puzzle):
if event.type is gtk.gdk.BUTTON_PRESS:
- (x, y) = puzzle.translate_position(event.x, event.y)
+ (x, y) = puzzle.translate_position(
+ event.x+puzzle.widget.get_hadjustment().get_value(),
+ event.y+puzzle.widget.get_vadjustment().get_value())
if x == self.control.x and y == self.control.y:
self.control.switch_mode()
else:
@@ -1811,7 +1918,8 @@
elif name == 'Up': c.move(DOWN, -1)
elif name == 'Down': c.move(DOWN, 1)
elif name == 'BackSpace': c.back_space()
- elif name == 'Return' or name == 'Tab': c.next_word(1)
+ elif name == 'Return': c.switch_mode()
+ elif name == 'Tab': c.next_word(1)
elif name == 'ISO_Left_Tab': c.next_word(-1)
elif name == 'F6':
if self.fullscreen:
@@ -1820,6 +1928,7 @@
self.win.fullscreen()
elif name == 'F7': c.next_word(1)
elif name == 'F8': c.next_word(-1)
+ elif name == 'Escape': c.check_word()
else: return False
return True
@@ -1839,11 +1948,10 @@
self.clock_button.set_active(False)
def check_result(self, correct):
- if correct: msg = 'No mistakes found'
+ if correct: msg = 'No mistakes found.'
else: msg = 'Incorrect.'
- if not has_hildon:
- self.status_bar.push(self.status_bar.get_context_id('stat'), msg)
+ self.notify(msg)
def open_file(self):
def open_cb(w, open_dlg):
@@ -1923,6 +2031,8 @@
self.skip_filled = c.getboolean('options', 'skip_filled')
if c.has_option('options', 'layout'):
self.layout = c.getint('options', 'layout')
+ if c.has_option('options', 'toolbar_layout'):
+ self.toolbar_layout = c.getint('options', 'toolbar_layout')
if c.has_option('options', 'positions'):
self.positions = eval(c.get('options', 'positions'))
if c.has_option('options', 'window_size'):
@@ -1939,6 +2049,7 @@
c.add_section('options')
c.set('options', 'skip_filled', self.skip_filled)
c.set('options', 'layout', self.layout)
+ c.set('options', 'toolbar_layout', self.toolbar_layout)
c.set('options', 'positions', repr(self.get_layout(self.cur_layout)))
c.set('options', 'window_size', repr(self.window_size))
c.set('options', 'maximized', repr(self.maximized))
@@ -1946,6 +2057,7 @@
c.set('options', 'last_file', repr(self.last_file))
c.write(file(os.path.expanduser('~/.crossword.cfg'), 'w'))
+
if __name__ == '__main__':
if len(sys.argv) <> 2:
p = None
More information about the Xword-commits
mailing list