9 require 'interaction/match'
11 require 'ics/protocol'
12 require 'ics/match_handler'
13 require 'ics/connection'
18 class MainWindow < KDE::XmlGuiWindow
22 def initialize(loader, game)
37 std_action(:open_new) { new_game(@default_game) }
38 std_action :quit, :slot => :close
39 std_action(:save) { save_game }
41 regular_action :back, :icon => 'go-previous',
42 :text => KDE.i18n("&Back") do
45 regular_action :forward, :icon => 'go-next',
46 :text => KDE.i18n("&Forward") do
49 regular_action :connect, :icon => 'network-connect',
50 :text => KDE.i18n("&Connect to ICS") do
53 regular_action :disconnect, :icon => 'network-disconnect',
54 :text => KDE.i18n("&Disconnect from ICS") do
61 regular_action :flip, :icon => 'object-rotate-left',
62 :text => KDE.i18n("F&lip") do
63 @table.flip(! @table.flipped?)
70 @table = Table.new scene, @loader, self
71 @controller = Controller.new(@table)
73 movelist = @loader.get_matching(%w(movelist)).new(@controller)
74 movelist_dock = Qt::DockWidget.new(self)
75 movelist_dock.widget = movelist
76 movelist_dock.window_title = KDE.i18n("Move list")
77 movelist_dock.object_name = "movelist"
78 add_dock_widget(Qt::LeftDockWidgetArea, movelist_dock, Qt::Vertical)
81 @console = Console.new(nil)
82 console_dock = Qt::DockWidget.new(self)
83 console_dock.widget = @console
84 console_dock.focus_proxy = @console
85 console_dock.window_title = KDE.i18n("Console")
86 console_dock.object_name = "console"
87 add_dock_widget(Qt::BottomDockWidgetArea, console_dock, Qt::Horizontal)
88 console_dock.window_flags = console_dock.window_flags & ~Qt::WindowStaysOnTopHint
93 self.central_widget = @table
97 protocol = ICS::Protocol.new(:debug)
98 @connection = ICS::Connection.new('freechess.org', 23)
99 protocol.add_observer ICS::AuthModule.new(@connection, 'ujjajja', '')
100 protocol.add_observer ICS::StartupModule.new(@connection)
101 protocol.link_to @connection
103 protocol.observe :text do |text|
104 @console.append(text)
107 @console.observe :input do |text|
108 @connection.send_text text
111 handler = ICS::MatchHandler.new(@controller, protocol)
113 protocol.observe :creating_game do |data|
114 puts "CREATING GAME: #{data.inspect}"
121 @controller.color = game.players.first
122 opponents = game.players[1..-1].map do |color|
123 DummyPlayer.new(color)
125 opponents.each do |p|
126 @controller.add_controlled_player(p)
129 match = Match.new(game)
130 @controller.controlled.values.each do |p|
133 @controller.controlled.values.each do |p|
137 @controller.reset(match)
141 match = @controller.match
143 url = KDE::FileDialog.get_save_url(
144 KDE::Url.new, "*.pgn", self, KDE.i18n("Save game"))
145 match.url = write_game(url)
150 match = @controller.match
160 def write_game(url = nil)
161 match = @controller.match
164 writer = match.game.game_writer.new
166 info[:players] = info[:players].inject({}) do |res, pl|
167 res[pl.color] = pl.name
170 result = writer.write(info, match.history)
171 write_file(url, result)
182 def initialize(color)