9 class MainWindow < KDE::XmlGuiWindow
12 Theme = Struct.new(:pieces, :board, :layout)
14 def initialize(loader, game)
28 std_action :open_new do
31 std_action :quit, :slot => :close
32 regular_action :back, :icon => 'go-previous',
33 :text => KDE.i18n("&Back") do
36 regular_action :forward, :icon => 'go-next',
37 :text => KDE.i18n("&Forward") do
44 config = KDE::Global.config.group('themes')
47 theme.pieces = @loader.
48 get_matching((game.keywords || []) + %w(pieces)).
49 new(:game => game, :shadow => true)
50 theme.board = @loader.
51 get_matching(%w(board), game.keywords || []).
53 theme.layout = @loader.
54 get_matching(%w(layout), game.keywords || []).
59 state = game.state.new.tap {|s| s.setup }
61 field = AnimationField.new(20)
62 board = Board.new(scene, theme, game)
63 pools = if game.respond_to? :pool
64 game.players.inject({}) do |res, player|
65 res[player] = Pool.new(scene, theme, game)
71 clock_class = @loader.get_matching(%w(clock))
72 clocks = game.players.inject({}) do |res, player|
73 res[player] = clock_class.new(scene)
77 elements = { :board => board,
80 table = Table.new scene, theme, self, elements
82 history = History.new(state)
83 @controller = Controller.new(scene, elements, game, history)
85 self.central_widget = table