Factor common code out of xboard and gnushogi engines.
[kaya/ydirson.git] / lib / board / table.rb
blobcbf44fd73cc7ced2b48f96dfa31c0e8acf059bc7
1 # Copyright (c) 2009 Paolo Capriotti <p.capriotti@gmail.com>
2
3 # This program is free software; you can redistribute it and/or modify
4 # it under the terms of the GNU General Public License as published by
5 # the Free Software Foundation; either version 2 of the License, or
6 # (at your option) any later version.
8 require 'board/element_manager'
9 require 'board/theme_loader'
11 class Table < Qt::GraphicsView
12   include Observable
13   include ThemeLoader
14   include ElementManager
15   
16   attr_reader :elements, :scene, :theme, :game
17   private :game, :scene, :theme
19   def initialize(scene, loader, parent)
20     super(@scene = scene, parent)
21     @loader = loader
22   end
23   
24   def reset(match)
25     @game = match.game
26     # destroy old elements
27     if @elements
28       @scene.remove_element(@elements[:board])
29       @elements[:pools].each do |col, pool|
30         @scene.remove_element(pool)
31       end
32       @elements[:clocks].each do |col, clock|
33         @scene.remove_element(clock)
34       end
35     end
36     
37     @theme = load_theme
38     @elements = create_elements
39     
40     relayout
41     fire :reset => match
42   end
44   def flip(value)
45     if flipped? != value
46       @theme.layout.flip(value)
47       @theme.board.flip(value)
48       @theme.pieces.flip(value)
49       relayout
50     end
51   end
53   def resizeEvent(e)
54     @initialized = true
55     r = Qt::RectF.new(0, 0, e.size.width, e.size.height)
56     @scene.scene_rect = r
57     relayout if @elements
58   end
59   
60   def relayout
61     if @initialized
62       @theme.layout.layout(@scene.scene_rect, @elements)
63     end
64   end
65   
66   def flipped?
67     @theme.layout.flipped?
68   end
69 end