~ubuntu-branches/ubuntu/precise/gnome-games/precise-proposed

« back to all changes in this revision

Viewing changes to gnome-sudoku/src/lib/gsudoku.py

  • Committer: Package Import Robot
  • Author(s): Rodrigo Moya
  • Date: 2011-05-30 13:32:04 UTC
  • mfrom: (1.3.4)
  • mto: (163.1.3 precise)
  • mto: This revision was merged to the branch mainline in revision 143.
  • Revision ID: package-import@ubuntu.com-20110530133204-celaq1v1dsxc48q1
Tags: upstream-3.0.2
ImportĀ upstreamĀ versionĀ 3.0.2

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
# -*- coding: utf-8 -*-
2
 
import gtk, gobject
 
2
from gi.repository import Gtk,Gdk,GObject
3
3
import colors
4
4
import math
5
5
import random
 
6
import logging
6
7
from simple_debug import simple_debug
7
8
import sudoku
8
9
import number_box
13
14
            color.green / float(2**16),
14
15
            color.blue  / float(2**16))
15
16
 
16
 
class SudokuNumberGrid (gtk.AspectFrame):
 
17
class SudokuNumberGrid (Gtk.AspectFrame):
17
18
 
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,
28
29
                                  )
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)
34
35
        self.add(self.eb)
35
36
        self.table.set_row_spacings(1)
53
54
        return self.table.focus_child
54
55
 
55
56
    def set_bg_color (self, color):
56
 
        if type(color) == str:
57
 
            try:
58
 
                color = gtk.gdk.color_parse(color)
59
 
            except:
60
 
                print 'set_bg_color handed Bad color', color
61
 
                return
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)
 
57
        try:
 
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)
 
61
            else:
 
62
                color = Gdk.RGBA(*color)
 
63
        except:
 
64
            logging.critical("set_bg_color handed Bad color: %s" % color, exc_info=True)
 
65
            return
 
66
 
 
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)
 
71
 
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)
70
74
 
71
 
class SudokuGameDisplay (SudokuNumberGrid, gobject.GObject):
 
75
class SudokuGameDisplay (SudokuNumberGrid, GObject.GObject):
72
76
 
73
77
    __gsignals__ = {
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, ())
76
80
        }
77
81
 
78
82
    do_highlight_cells = False
89
93
        self.impossibilities = []
90
94
        self.trackers = {}
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)
102
106
 
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)
106
110
        if dest:
107
111
            self.table.set_focus_child(self.__entries__[dest])
128
132
        self.emit('focus-changed')
129
133
 
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)
134
138
        box_s = hsv[1]
135
139
        box_v = hsv[2]
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
207
211
 
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)
215
219
 
216
220
    @simple_debug
217
221
    def show_hint (self):
736
740
            self.update_all_hints()
737
741
 
738
742
if __name__ == '__main__':
739
 
    window = gtk.Window()
740
 
    window.connect('delete-event', gtk.main_quit)
 
743
    window = Gtk.Window()
 
744
    window.connect('delete-event', Gtk.main_quit)
741
745
 
742
746
    def test_number_grid ():
743
747
        t = SudokuNumberGrid(4)
759
763
        from dialog_swallower import SwappableArea
760
764
        sgd = SudokuGameDisplay()
761
765
        sgd.set_bg_color('black')
762
 
        vb = gtk.VBox()
763
 
        hb = gtk.HBox()
 
766
        vb = Gtk.VBox()
 
767
        hb = Gtk.HBox()
764
768
        swallower = SwappableArea(hb)
765
 
        tb = gtk.Toolbar()
766
 
        b = gtk.ToolButton(stock_id = gtk.STOCK_QUIT)
767
 
        b.connect('clicked', lambda x: window.hide() or gtk.main_quit())
 
769
        tb = Gtk.Toolbar()
 
770
        b = Gtk.ToolButton(stock_id = Gtk.STOCK_QUIT)
 
771
        b.connect('clicked', lambda x: window.hide() or Gtk.main_quit())
768
772
        tb.add(b)
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)
774
778
        tb.add(b2)
775
779
        vb.pack_start(tb, fill = False, expand = False)
810
814
#    reproduce_foobared_rendering()
811
815
    test_sudoku_game()
812
816
    window.show_all()
813
 
    gtk.main()
 
817
    Gtk.main()