View Javadoc

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);                                 // 0 empty
35          layout.appendColumn(0, 1.0);                            // 1
36          layout.appendColumn(5);                                 // 2 empty
37          layout.appendRow(0);                                 // 0 empty
38          layout.appendRow(0, 1.0);                            // 1
39          layout.appendRow(5);                                 // 2 empty
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  }