9 require 'interaction/match'
11 require 'ics/protocol'
12 require 'ics/match_handler'
13 require 'ics/connection'
18 class MainWindow < KDE::XmlGuiWindow
24 def initialize(loader, game)
39 std_action(:open_new) { new_game(Match.new(@default_game)) }
40 std_action(:open) { load_game }
41 std_action :quit, :slot => :close
42 std_action(:save) { save_game }
43 std_action(:saveAs) { save_game_as }
45 regular_action :back, :icon => 'go-previous',
46 :text => KDE.i18n("&Back") do
49 regular_action :forward, :icon => 'go-next',
50 :text => KDE.i18n("&Forward") do
53 regular_action :connect, :icon => 'network-connect',
54 :text => KDE.i18n("&Connect to ICS") do
57 regular_action :disconnect, :icon => 'network-disconnect',
58 :text => KDE.i18n("&Disconnect from ICS") do
65 regular_action :flip, :icon => 'object-rotate-left',
66 :text => KDE.i18n("F&lip") do
67 @table.flip(! @table.flipped?)
74 @table = Table.new scene, @loader, self
75 @controller = Controller.new(@table)
77 movelist = @loader.get_matching(%w(movelist)).new(@controller)
78 movelist_dock = Qt::DockWidget.new(self)
79 movelist_dock.widget = movelist
80 movelist_dock.window_title = KDE.i18n("Move list")
81 movelist_dock.object_name = "movelist"
82 add_dock_widget(Qt::LeftDockWidgetArea, movelist_dock, Qt::Vertical)
85 @console = Console.new(nil)
86 console_dock = Qt::DockWidget.new(self)
87 console_dock.widget = @console
88 console_dock.focus_proxy = @console
89 console_dock.window_title = KDE.i18n("Console")
90 console_dock.object_name = "console"
91 add_dock_widget(Qt::BottomDockWidgetArea, console_dock, Qt::Horizontal)
92 console_dock.window_flags = console_dock.window_flags & ~Qt::WindowStaysOnTopHint
95 new_game(Match.new(game))
97 self.central_widget = @table
101 protocol = ICS::Protocol.new(:debug)
102 @connection = ICS::Connection.new('freechess.org', 23)
103 protocol.add_observer ICS::AuthModule.new(@connection, 'ujjajja', '')
104 protocol.add_observer ICS::StartupModule.new(@connection)
105 protocol.link_to @connection
107 protocol.observe :text do |text|
108 @console.append(text)
111 @console.observe :input do |text|
112 @connection.send_text text
115 handler = ICS::MatchHandler.new(@controller, protocol)
117 protocol.observe :creating_game do |data|
118 puts "CREATING GAME: #{data.inspect}"
125 @controller.color = match.game.players.first
126 opponents = match.game.players[1..-1].map do |color|
127 DummyPlayer.new(color)
129 opponents.each do |p|
130 @controller.add_controlled_player(p)
133 @controller.controlled.values.each do |p|
136 @controller.controlled.values.each do |p|
139 @controller.reset(match)
143 url = KDE::FileDialog.get_open_url(KDE::Url.new, '*.*', self,
144 KDE.i18n("Open game"))
147 ext = File.extname(url.path)[1..-1]
149 readers = Game.to_enum.find_all do |_, game|
150 game.respond_to?(:game_extensions) and
151 game.game_extensions.include?(ext)
153 [game, game.game_reader.new]
157 warn "Unknown file extension #{ext}"
162 return unless KIO::NetAccess.download(url, tmp_file, self)
168 readers.each do |g, reader|
170 data = File.open(tmp_file) do |f|
174 history = reader.read(data, i)
178 rescue ParseException
183 warn "Could not load file #{url.path}"
187 match = Match.new(game)
188 @controller.color = match.game.players.first
189 opponents = match.game.players[1..-1].map do |color|
190 DummyPlayer.new(color)
192 opponents.each do |p|
193 @controller.add_controlled_player(p)
196 @controller.controlled.values.each do |p|
199 @controller.controlled.values.each do |p|
202 match.history = history
205 @controller.reset(match)
210 match = @controller.match
212 pattern = match.game.game_extensions.map{|ext| "*.#{ext}"}.join(' ')
213 url = KDE::FileDialog.get_save_url(
214 KDE::Url.new, pattern, self, KDE.i18n("Save game"))
215 match.url = write_game(url)
220 match = @controller.match
230 def write_game(url = nil)
231 match = @controller.match
234 writer = match.game.game_writer.new
236 info[:players] = info[:players].inject({}) do |res, pl|
237 res[pl.color] = pl.name
240 result = writer.write(info, match.history)
241 write_file(url, result)
253 def initialize(color)