3 class NewGame < KDE::Dialog
10 self.caption = KDE.i18n("New game")
11 self.buttons = KDE::Dialog::Ok | KDE::Dialog::Cancel
13 @widget = Qt::Widget.new(self)
15 @engine_loader = engine_loader
16 label = Qt::Label.new(KDE.i18n("&Game:"), @widget)
17 @games = Game.new_combo(@widget)
20 hlayout = Qt::HBoxLayout.new
21 hlayout.add_widget(label)
22 hlayout.add_widget(@games)
25 @layout = Qt::VBoxLayout.new(@widget)
26 @layout.add_layout(hlayout)
28 current = (0...@games.count).
29 map{|i| @games.item_data(i).toString }.
30 index(current_game.class.data(:id).to_s)
31 @games.current_index = current if current
32 @games.on('currentIndexChanged(int)') do |index|
36 update_players(@games.current_index)
38 self.main_widget = @widget
44 g.players.each do |player|
45 # iterate over the player array to preserve order
46 combo = @players[player]
47 data = combo.item_data(combo.current_index).to_a
48 if data.first == 'engine'
50 engines[player] = engine_loader[engine_name]
62 def update_players(index)
63 @player_widget.dispose if @player_widget
64 @player_widget = Qt::Widget.new(@widget)
65 layout = Qt::VBoxLayout.new(@player_widget)
67 @layout.add_widget(@player_widget)
71 engines = @engine_loader.find_by_game(g)
72 g.players.each do |player|
73 label = Qt::Label.new(player.to_s.capitalize + ':', @player_widget)
74 combo = KDE::ComboBox.new(@player_widget) do
76 add_item(KDE.i18n('Human'), Qt::Variant.new(['human']))
78 engines.each do |id, engine|
79 combo.add_item(engine.name, Qt::Variant.new(['engine', engine.name]))
81 @players[player] = combo
83 hlayout = Qt::HBoxLayout.new
84 hlayout.add_widget(label)
85 hlayout.add_widget(combo)
86 layout.add_layout(hlayout)
91 index = @games.current_index if index.nil?
92 game_id = @games.item_data(index).toString.to_sym