1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package net.curre.prefcount.gui;
16
17 import java.awt.*;
18 import java.awt.event.WindowAdapter;
19 import java.awt.event.WindowEvent;
20 import java.util.ArrayList;
21 import java.util.List;
22 import java.util.ResourceBundle;
23 import java.util.logging.Logger;
24 import javax.swing.*;
25
26 import net.curre.prefcount.App;
27 import net.curre.prefcount.PrefCountRegistry;
28 import net.curre.prefcount.event.StartAskingQuestionsListener;
29 import net.curre.prefcount.gui.aa.AAJButton;
30 import net.curre.prefcount.gui.aa.AAJPanel;
31 import net.curre.prefcount.gui.aa.AAJLabel;
32 import net.curre.prefcount.gui.menu.PrefCountMenuBar;
33 import net.curre.prefcount.bean.GameResultBean;
34 import net.curre.prefcount.bean.PlayerStatistics;
35 import net.curre.prefcount.bean.Settings;
36 import net.curre.prefcount.service.LafThemeService;
37 import net.curre.prefcount.service.SettingsService;
38 import net.curre.prefcount.util.Utilities;
39
40
41
42
43
44
45
46
47
48 public class MainWindow extends JFrameWithAnimatedInnerPanel {
49
50
51 private static Logger log = Logger.getLogger(MainWindow.class.toString());
52
53
54 public GameResultBean playerResults;
55
56
57 public PlayerDialogBasePanel playerDialogFrame;
58
59 protected JPanel mainPanel;
60 protected JPanel topPanel;
61 protected JButton button3;
62 protected JButton button4;
63 protected JLabel introLabel;
64 protected ScoreBoardPanel scoreBoardPanel;
65
66
67 private boolean dialogStarted = false;
68
69
70 private PrefCountMenuBar menuBar;
71
72
73 public MainWindow() {
74 this(true);
75 }
76
77
78
79
80
81
82
83 public MainWindow(boolean isVisible) {
84 super(ResourceBundle.getBundle("default").getString("pref.scoreboard.title"));
85
86 log.fine("Creating main window");
87
88
89 Image appImg = Toolkit.getDefaultToolkit().createImage(App.class.getResource("images/PrefCount-16x16.png"));
90 super.setIconImage(appImg);
91
92 ResourceBundle bundle = ResourceBundle.getBundle("default");
93 Settings settings = SettingsService.getSettings();
94 LafThemeService.getInstance().setLookAndFeel(settings.getLafSkinId(), true);
95
96 final String introWord = bundle.getString("pref.scoreboard.intro");
97 playerResults = new GameResultBean();
98
99 super.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
100 super.setResizable(true);
101 super.setSize(settings.getMainFrameWidth(), settings.getMainFrameHeight());
102
103 topPanel = new AAJPanel(new BorderLayout());
104 JPanel buttonsInnerPanel = new JPanel();
105 button3 = createPlayerNumberButton(3);
106 button4 = createPlayerNumberButton(4);
107 buttonsInnerPanel.add("Button 3", button3);
108 buttonsInnerPanel.add("Button 4", button4);
109 topPanel.add(buttonsInnerPanel, BorderLayout.CENTER);
110
111 mainPanel = new AAJPanel(new CardLayout());
112 introLabel = new AAJLabel(introWord, JLabel.CENTER);
113 mainPanel.add(introLabel, "Intro panel");
114 scoreBoardPanel = new ScoreBoardPanel(playerResults);
115 mainPanel.add(scoreBoardPanel, "Score board panel");
116
117 super.getContentPane().add(topPanel, BorderLayout.PAGE_START);
118 super.getContentPane().add(mainPanel, BorderLayout.CENTER);
119
120
121 super.addWindowListener(new WindowAdapter() {
122 public void windowOpened(WindowEvent e) {
123 button3.setFocusable(true);
124 button3.requestFocus();
125 }
126 });
127 menuBar = PrefCountRegistry.getInstance().addMainWindowMenuBar(this, topPanel);
128 resetFrameKeyShortcuts();
129 super.setVisible(isVisible);
130 }
131
132
133
134
135
136
137
138 public void startPlayerDialog(int numberOfPlayers) {
139
140
141 menuBar.disableActionMenu();
142 menuBar.disableLanguageMenu();
143
144
145 JButton actButton;
146 if (numberOfPlayers == 3) {
147 actButton = button3;
148 button4.setEnabled(false);
149 } else {
150 actButton = button4;
151 button3.setEnabled(false);
152 }
153 scoreBoardPanel.locationsMap.initialize(numberOfPlayers);
154
155 actButton.setSelected(true);
156 actButton.setBorderPainted(false);
157 actButton.setFocusPainted(false);
158 int size = actButton.getActionListeners().length;
159 for (int i = 0; i < size; ++i) {
160 actButton.removeActionListener(actButton.getActionListeners()[0]);
161 }
162
163 CardLayout clay = (CardLayout) mainPanel.getLayout();
164 clay.next(mainPanel);
165
166
167 List<PlayerStatistics> stats = new ArrayList<PlayerStatistics>();
168 for (int i = 0; i < numberOfPlayers; ++i) {
169 PlayerStatistics stat = new PlayerStatistics(playerResults, i);
170 stat.setPlayerName("");
171 stats.add(stat);
172 }
173 playerResults.setPlayerStats(stats);
174 playerDialogFrame = new PlayerDialogBasePanel(numberOfPlayers, this);
175
176 dialogStarted = true;
177 InputMap map = topPanel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
178 map.clear();
179 }
180
181
182
183
184
185
186 public void repaint() {
187 Settings settings = SettingsService.getSettings();
188 super.setSize(settings.getMainFrameWidth(), settings.getMainFrameHeight());
189 super.repaint();
190 ResourceBundle bundle = ResourceBundle.getBundle("default");
191
192
193 if (introLabel != null) {
194 introLabel.setText(bundle.getString("pref.scoreboard.intro"));
195 button3.setText(generateButtonLabel(3));
196 button4.setText(generateButtonLabel(4));
197 menuBar.refreshMenuItemsLabels();
198 if (dialogStarted == false) {
199 resetFrameKeyShortcuts();
200 }
201 }
202
203 super.setTitle(bundle.getString("pref.scoreboard.title"));
204
205
206 if (playerDialogFrame != null) {
207 playerDialogFrame.repaint();
208 }
209 }
210
211
212 public void showAboutInfo() {
213 super.openAnimatedInnerPanel(new AboutJOptionPane());
214 }
215
216
217
218
219
220
221
222
223
224
225
226
227
228 private JButton createPlayerNumberButton(int playersNumber) {
229 StartAskingQuestionsListener eventListener =
230 new StartAskingQuestionsListener(playersNumber);
231 JButton button = new AAJButton(generateButtonLabel(playersNumber));
232 button.addActionListener(eventListener);
233 button.addKeyListener(eventListener);
234 button.setBorderPainted(true);
235
236
237 return button;
238 }
239
240
241
242
243
244
245
246
247
248
249 private String generateButtonLabel(int playerNumber) {
250 ResourceBundle bundle = ResourceBundle.getBundle("default");
251 String str = bundle.getString("pref.scoreboard.button" + playerNumber);
252 return Utilities.underlineLetter(str, str.lastIndexOf(")") - 1);
253 }
254
255
256
257
258
259
260
261
262 private void resetFrameKeyShortcuts() {
263 if (Utilities.isMacOs()) {
264 return;
265 }
266 InputMap map = topPanel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
267 map.clear();
268 ResourceBundle bundle = ResourceBundle.getBundle("default");
269
270 String key = bundle.getString("pref.scoreboard.button3.shortcut");
271 map.put(KeyStroke.getKeyStroke("control " + key.charAt(0)), "button3Action");
272 key = bundle.getString("pref.scoreboard.button4.shortcut");
273 map.put(KeyStroke.getKeyStroke("control " + key.charAt(0)), "button4Action");
274 }
275
276 }