13
14
color.green / float(2**16),
14
15
color.blue / float(2**16))
16
class SudokuNumberGrid (gtk.AspectFrame):
17
class SudokuNumberGrid (Gtk.AspectFrame):
18
19
def __init__ (self, group_size = 9):
19
self.table = gtk.Table(rows = group_size, columns = group_size, homogeneous = True)
20
self.table = Gtk.Table(rows = group_size, columns = group_size, homogeneous = True)
20
21
self.group_size = group_size
21
22
self.__entries__ = {}
22
23
for x in range(self.group_size):
27
28
self.table.attach(e, x, x+1, y, y+1,
29
30
self.__entries__[(x, y)] = e
30
gtk.AspectFrame.__init__(self, obey_child = False)
31
self.set_shadow_type(gtk.SHADOW_NONE)
32
self.eb = gtk.EventBox()
31
GObject.GObject.__init__(self, obey_child = False)
32
self.set_shadow_type(Gtk.ShadowType.NONE)
33
self.eb = Gtk.EventBox()
33
34
self.eb.add(self.table)
35
36
self.table.set_row_spacings(1)
53
54
return self.table.focus_child
55
56
def set_bg_color (self, color):
56
if type(color) == str:
58
color = gtk.gdk.color_parse(color)
60
print 'set_bg_color handed Bad color', color
62
self.eb.modify_bg(gtk.STATE_NORMAL, color)
63
self.eb.modify_base(gtk.STATE_NORMAL, color)
64
self.eb.modify_fg(gtk.STATE_NORMAL, color)
65
self.table.modify_bg(gtk.STATE_NORMAL, color)
66
self.table.modify_base(gtk.STATE_NORMAL, color)
67
self.table.modify_fg(gtk.STATE_NORMAL, color)
58
if type(color) == str:
59
color = Gdk.color_parse(color)[1]
60
color = Gdk.RGBA(color.red/65535.0, color.green/65535.0, color.blue/65535.0)
62
color = Gdk.RGBA(*color)
64
logging.critical("set_bg_color handed Bad color: %s" % color, exc_info=True)
67
self.eb.override_color(Gtk.StateFlags.NORMAL, color)
68
self.eb.override_background_color(Gtk.StateFlags.NORMAL, color)
69
self.table.override_color(Gtk.StateFlags.NORMAL, color)
70
self.table.override_background_color(Gtk.StateFlags.NORMAL, color)
68
72
for e in self.__entries__.values():
69
e.modify_bg(gtk.STATE_NORMAL, color)
73
e.override_background_color(Gtk.StateFlags.NORMAL, color)
71
class SudokuGameDisplay (SudokuNumberGrid, gobject.GObject):
75
class SudokuGameDisplay (SudokuNumberGrid, GObject.GObject):
74
'focus-changed':(gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, ()),
75
'puzzle-finished':(gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, ())
78
'focus-changed':(GObject.SignalFlags.RUN_LAST, None, ()),
79
'puzzle-finished':(GObject.SignalFlags.RUN_LAST, None, ())
78
82
do_highlight_cells = False
89
93
self.impossibilities = []
91
95
self.tinfo = tracker_info.TrackerInfo()
92
gobject.GObject.__init__(self)
96
GObject.GObject.__init__(self)
93
97
SudokuNumberGrid.__init__(self, group_size = group_size)
94
98
self.setup_grid(grid, group_size)
95
99
for e in self.__entries__.values():
101
105
self.connect('focus-changed', self.highlight_cells)
103
107
def key_press_cb (self, widget, event):
104
key = gtk.gdk.keyval_name(event.keyval)
108
key = Gdk.keyval_name(event.keyval)
105
109
dest = self.go_around(widget.x, widget.y, key)
107
111
self.table.set_focus_child(self.__entries__[dest])
128
132
self.emit('focus-changed')
130
134
def get_highlight_colors (self):
131
entry = self.__entries__.values()[0]
132
default_color = gtkcolor_to_rgb(entry.style.bg[gtk.STATE_SELECTED])
135
bg = self.get_style_context().get_background_color(Gtk.StateFlags.SELECTED)
136
default_color = (bg.red, bg.green, bg.blue)
133
137
hsv = colors.rgb_to_hsv(*default_color)
202
206
def set_hint_square (self, square):
203
207
if self.hint_square is not None:
204
208
self.hint_square.set_border_color(None)
205
gobject.source_remove(self.hint_timer)
209
GObject.source_remove(self.hint_timer)
206
210
self.hint_timer = None
208
212
if square is None:
211
215
self.hint_square = self.__entries__[square]
212
216
self.hint_animate_count = 0
213
217
self.animate_hint()
214
self.hint_timer = gobject.timeout_add(150, self.animate_hint)
218
self.hint_timer = GObject.timeout_add(150, self.animate_hint)
217
221
def show_hint (self):
759
763
from dialog_swallower import SwappableArea
760
764
sgd = SudokuGameDisplay()
761
765
sgd.set_bg_color('black')
764
768
swallower = SwappableArea(hb)
766
b = gtk.ToolButton(stock_id = gtk.STOCK_QUIT)
767
b.connect('clicked', lambda x: window.hide() or gtk.main_quit())
770
b = Gtk.ToolButton(stock_id = Gtk.STOCK_QUIT)
771
b.connect('clicked', lambda x: window.hide() or Gtk.main_quit())
769
773
def run_swallowed_dialog (*args):
770
774
md = MessageDialog(title = "Bar", label = "Bar", sublabel = "Baz "*12)
771
775
swallower.run_dialog(md)
772
b2 = gtk.ToolButton(label = 'Dialog')
776
b2 = Gtk.ToolButton(label = 'Dialog')
773
777
b2.connect('clicked', run_swallowed_dialog)
775
779
vb.pack_start(tb, fill = False, expand = False)