Add console dock.
[kaya.git] / lib / mainwindow.rb
blobcecac854bf2d06257c3a123e44a377951e9ac053
1 require 'qtutils'
2 require 'board/board'
3 require 'board/pool'
4 require 'board/table'
5 require 'board/scene'
6 require 'history'
7 require 'controller'
9 require 'interaction/match'
11 require 'ics/protocol'
12 require 'ics/match_handler'
13 require 'ics/connection'
14 require 'console'
16 class MainWindow < KDE::XmlGuiWindow
17   include ActionHandler
19   def initialize(loader, game)
20     super nil
21     
22     @loader = loader
23     @default_game = game
24     
25     load_board(game)
26     
27     setup_actions
28     setupGUI
29   end
31 private
33   def setup_actions
34     std_action(:open_new) { new_game(@default_game) }
35     std_action :quit, :slot => :close
36     regular_action :back, :icon => 'go-previous', 
37                           :text => KDE.i18n("&Back") do
38       @controller.back
39     end
40     regular_action :forward, :icon => 'go-next', 
41                              :text => KDE.i18n("&Forward") do
42       @controller.forward
43     end
44     regular_action :connect, :icon => 'network-connect',
45                              :text => KDE.i18n("&Connect to ICS") do
46       connect_to_ics
47     end
48     regular_action :disconnect, :icon => 'network-disconnect',
49                                 :text => KDE.i18n("&Disconnect from ICS") do
50       puts "disconnect"
51     end
52     
53     regular_action :flip, :icon => 'object-rotate-left',
54                           :text => KDE.i18n("F&lip") do
55       @table.flip(! @table.flipped?)
56     end
57                   
58   end
59   
60   def load_board(game)
61     scene = Scene.new
62     @table = Table.new scene, @loader, self
63     @controller = Controller.new(@table)
65     movelist = @loader.get_matching(%w(movelist)).new(@controller)
66     movelist_dock = Qt::DockWidget.new(self)
67     movelist_dock.widget = movelist
68     movelist_dock.window_title = KDE.i18n("Move list")
69     movelist_dock.object_name = "movelist"
70     add_dock_widget(Qt::LeftDockWidgetArea, movelist_dock, Qt::Vertical)
71     movelist_dock.show
73     @console = Console.new(nil)
74     console_dock = Qt::DockWidget.new(self)                                                      
75     console_dock.widget = @console                                                             
76     console_dock.focus_proxy = @console                                                        
77     console_dock.window_title = KDE.i18n("Console")                                              
78     console_dock.object_name = "console"                                                         
79     add_dock_widget(Qt::BottomDockWidgetArea, console_dock, Qt::Horizontal)                      
80     console_dock.window_flags = console_dock.window_flags & ~Qt::WindowStaysOnTopHint            
81     console_dock.show                                                                            
83     new_game(game)
84     
85     self.central_widget = @table
86   end
87   
88   def connect_to_ics
89     protocol = ICS::Protocol.new(:debug)
90     c = ICS::Connection.new('freechess.org', 23)
91     protocol.add_observer ICS::AuthModule.new(c, 'ujjajja', '')
92     protocol.add_observer ICS::StartupModule.new(c)
93     protocol.link_to c
95     protocol.observe :text do |text|
96       @console.append(text)
97     end
99     @console.observe :input do |text|
100       c.send_text text
101     end
103     handler = ICS::MatchHandler.new(@controller, protocol)
105     protocol.observe :creating_game do |data|
106       puts "CREATING GAME: #{data.inspect}"
107     end
109     c.start
110   end
111   
112   def new_game(game)
113     @controller.color = game.players.first
114     opponents = game.players[1..-1].map do |color|
115       DummyPlayer.new(color)
116     end
117     opponents.each do |p| 
118       @controller.add_controlled_player(p)
119     end
121     match = Match.new(game)
122     @controller.controlled.values.each do |p|
123       match.register(p)
124     end
125     @controller.controlled.values.each do |p|
126       match.start(p)
127     end
128     
129     @controller.reset(match)
130   end
133 class DummyPlayer
134   include Observer
135   
136   attr_reader :color
137   
138   def initialize(color)
139     @color = color
140   end