3 class NewGame < KDE::Dialog
6 def initialize(parent, engine_loader)
8 self.caption = KDE.i18n("New game")
9 self.buttons = KDE::Dialog::Ok | KDE::Dialog::Cancel
11 @widget = Qt::Widget.new(self)
13 @engine_loader = engine_loader
14 @games = KDE::ComboBox.new(@widget) do
16 Game.each do |id, game|
17 add_item(game.class.data(:name), id.to_s)
22 @layout = Qt::VBoxLayout.new(@widget)
23 @layout.add_widget(@games)
25 @games.on('currentIndexChanged(int)') do |index|
29 update_players(@games.current_index)
31 self.main_widget = @widget
37 g.players.each do |player|
38 # iterate over the player array to preserve order
39 combo = @players[player]
40 data = combo.item_data(combo.current_index).to_a
41 if data.first == 'engine'
43 engines[player] = engine_loader[engine_name]
55 def update_players(index)
56 @players.each {|player, combo| combo.dispose }
59 engines = @engine_loader.find_by_game(g)
60 g.players.each do |player|
61 combo = KDE::ComboBox.new(@widget) do
63 add_item(KDE.i18n('Human'), Qt::Variant.new(['human']))
65 engines.each do |id, engine|
66 combo.add_item(engine.name, Qt::Variant.new(['engine', engine.name]))
68 @players[player] = combo
69 @layout.add_widget(combo)
74 index = @games.current_index if index.nil?
75 game_id = @games.item_data(index).toString.to_sym