1 package net.sourceforge.simplegamenet.framework.gui;
2
3 import java.awt.*;
4 import javax.swing.*;
5 import javax.swing.border.TitledBorder;
6 import net.sourceforge.simplegamenet.specs.gui.GameSettingsPanel;
7 import net.sourceforge.simplegamenet.specs.model.GameFactory;
8 import net.sourceforge.simplegamenet.specs.to.GameSettings;
9 import net.sourceforge.simplegamenet.util.proportionlayout.ProportionConstraints;
10 import net.sourceforge.simplegamenet.util.proportionlayout.ProportionLayout;
11
12 public class GameSettingsChoicePanel extends JPanel {
13
14 private ConnectionWizardDialog connectionWizardDialog;
15 private GameFactory[] gameFactories;
16 private GameSettings[] gameSettingsArray;
17 private GameSettingsPanel[] gameSettingsPanels;
18
19 private JPanel cardPanel = new JPanel();
20 private CardLayout cardLayout = new CardLayout();
21 private TitledBorder titledBorder;
22
23 private int gameFactoriesIndex = 0;
24
25 private ConnectionConfig connectionConfig;
26
27 GameSettingsChoicePanel(ConnectionWizardDialog connectionWizardDialog,
28 GameFactory[] gameFactories) {
29 this.connectionWizardDialog = connectionWizardDialog;
30 this.gameFactories = gameFactories;
31 connectionConfig = connectionWizardDialog.getConnectionConfig();
32
33 ProportionLayout layout = new ProportionLayout();
34 layout.appendColumn(5);
35 layout.appendColumn(0, 1.0);
36 layout.appendColumn(5);
37 layout.appendRow(0);
38 layout.appendRow(0, 1.0);
39 layout.appendRow(5);
40 setLayout(layout);
41 titledBorder = BorderFactory.createTitledBorder("Settings for "
42 + gameFactories[gameFactoriesIndex].getName());
43 setBorder(titledBorder);
44
45 cardPanel.setLayout(cardLayout);
46 gameSettingsArray = new GameSettings[gameFactories.length];
47 gameSettingsPanels = new GameSettingsPanel[gameFactories.length];
48 for (int i = 0; i < gameFactories.length; i++) {
49 gameSettingsArray[i] = gameFactories[i].createDefaultGameSettings();
50 gameSettingsPanels[i] = gameSettingsArray[i].createGameSettingsPanel();
51 cardPanel.add(gameSettingsPanels[i], Integer.toString(i));
52 }
53 add(cardPanel, new ProportionConstraints(1, 1));
54 }
55
56 boolean areSettingsAcceptable() {
57 if (gameSettingsPanels[gameFactoriesIndex].areSettingsAcceptable()) {
58 connectionConfig.setGameSettings(gameSettingsArray[gameFactoriesIndex].createChangedGameSettings(
59 gameSettingsPanels[gameFactoriesIndex]));
60 return true;
61 } else {
62 return false;
63 }
64 }
65
66 public void setGameFactoriesIndex(int gameFactoriesIndex) {
67 this.gameFactoriesIndex = gameFactoriesIndex;
68 cardLayout.show(cardPanel, Integer.toString(gameFactoriesIndex));
69 titledBorder.setTitle("Settings for "
70 + gameFactories[gameFactoriesIndex].getName());
71 }
72
73 }