1
2
3
4
5
6
7 package net.curre.prefcount.gui.menu;
8
9 import java.awt.event.ActionEvent;
10 import java.awt.event.ActionListener;
11 import javax.swing.Box;
12 import javax.swing.ButtonGroup;
13 import javax.swing.JMenu;
14 import javax.swing.JMenuBar;
15 import javax.swing.JRadioButtonMenuItem;
16
17 import net.curre.prefcount.PrefCountRegistry;
18 import net.curre.prefcount.bean.Settings;
19 import net.curre.prefcount.event.ChangeLanguageActionListener;
20 import net.curre.prefcount.event.LafMenuItemListener;
21 import net.curre.prefcount.gui.theme.skin.PrefSkin;
22 import static net.curre.prefcount.gui.type.WindowComponent.ABOUT_ACTION;
23 import static net.curre.prefcount.gui.type.WindowComponent.DIVISIBLE_BY_N;
24 import static net.curre.prefcount.gui.type.WindowComponent.DIVISIBLE_IGNORE;
25 import static net.curre.prefcount.gui.type.WindowComponent.HELP_COMMON_ACTION;
26 import static net.curre.prefcount.gui.type.WindowComponent.HELP_COUNT_ACTION;
27 import static net.curre.prefcount.gui.type.WindowComponent.HELP_PREF_ACTION;
28 import static net.curre.prefcount.gui.type.WindowComponent.LENINGRAD;
29 import static net.curre.prefcount.gui.type.WindowComponent.MAIN_3_PLAYERS;
30 import static net.curre.prefcount.gui.type.WindowComponent.MAIN_4_PLAYERS;
31 import static net.curre.prefcount.gui.type.WindowComponent.PRINT_SCORES_ACTION;
32 import static net.curre.prefcount.gui.type.WindowComponent.PRINT_TEMPLATE3_ACTION;
33 import static net.curre.prefcount.gui.type.WindowComponent.PRINT_TEMPLATE4_ACTION;
34 import static net.curre.prefcount.gui.type.WindowComponent.QUIT_ACTION;
35 import static net.curre.prefcount.gui.type.WindowComponent.RESET_SETTINGS_ACTION;
36 import static net.curre.prefcount.gui.type.WindowComponent.SAVE_SETTINGS_ACTION;
37 import static net.curre.prefcount.gui.type.WindowComponent.SOCHINKA;
38 import net.curre.prefcount.service.LafThemeService;
39 import net.curre.prefcount.service.SettingsService;
40 import net.curre.prefcount.util.LocaleExt;
41 import net.curre.prefcount.util.Utilities;
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56 public class SwingMenuBar extends JMenuBar implements PrefCountMenuBar {
57
58
59 private JMenu languageMenu;
60
61
62 private JRadioButtonMenuItem dialogFrameItem;
63
64
65
66
67
68
69
70 public SwingMenuBar() {
71 if (Utilities.isMacOs()) {
72 throw new UnsupportedOperationException("SwingMenuBar should not be created for Mac OS");
73 }
74
75 createMenus();
76 }
77
78
79 public void refreshLanguageIcon() {
80 languageMenu.setIcon(PrefCountRegistry.getCurrentLocale().getLocaleIcon());
81 }
82
83
84
85
86
87
88 public void toggleNextAction(boolean enabled) {
89 }
90
91
92
93
94
95
96 public void toggleBackAction(boolean enabled) {
97 }
98
99
100
101
102
103
104 public void toggleComputeAction(boolean enabled) {
105 }
106
107
108 public void setDialogFrameItemState(boolean isSelected) {
109 this.dialogFrameItem.setSelected(isSelected);
110 }
111
112
113
114
115 private void createMenus() {
116
117
118 super.add(createMainMenu());
119
120
121 super.add(createActionMenu());
122
123
124 super.add(createWindowMenu());
125
126
127 super.add(createHelpMenu());
128
129
130 this.languageMenu = createLanguageMenu();
131 super.add(Box.createHorizontalGlue());
132 super.add(this.languageMenu);
133 }
134
135
136
137
138
139
140 private JMenu createMainMenu() {
141
142 JMenu mainMenu = new JMenu(LocaleExt.getString("pref.mainMenu.main"));
143 LocaleExt.registerComponent(mainMenu, "pref.mainMenu.main");
144
145
146 Settings settings = SettingsService.getSettings();
147 final JMenu lafMenu = new JMenu(LocaleExt.getString("pref.mainMenu.look"));
148 LocaleExt.registerComponent(lafMenu, "pref.mainMenu.look");
149
150 ButtonGroup group = new ButtonGroup();
151 for (final PrefSkin skin : LafThemeService.AVAILABLE_SKINS) {
152 String name = LocaleExt.getString(skin.getNameResourceKey());
153 JRadioButtonMenuItem lafItem = new JRadioButtonMenuItem(name);
154 LocaleExt.registerComponent(lafItem, skin.getNameResourceKey());
155 group.add(lafItem);
156 if (skin.getNameResourceKey().equals(settings.getLafSkinId())) {
157 lafItem.setSelected(true);
158 }
159 lafItem.addActionListener(new LafMenuItemListener(skin));
160 lafMenu.add(lafItem);
161 }
162 mainMenu.add(lafMenu);
163
164
165 MenuItemsBean menuItemsBean = PrefCountRegistry.getInstance().getMenuItemsBean();
166 mainMenu.add(menuItemsBean.getJMenuItem(PRINT_SCORES_ACTION));
167
168 final JMenu printMenu = new JMenu(LocaleExt.getString("pref.mainMenu.print.templates"));
169 LocaleExt.registerComponent(printMenu, "pref.mainMenu.print.templates");
170 printMenu.add(menuItemsBean.getJMenuItem(PRINT_TEMPLATE3_ACTION));
171 printMenu.add(menuItemsBean.getJMenuItem(PRINT_TEMPLATE4_ACTION));
172 mainMenu.add(printMenu);
173
174 mainMenu.addSeparator();
175
176 mainMenu.add(menuItemsBean.getJMenuItem(SAVE_SETTINGS_ACTION));
177 mainMenu.add(menuItemsBean.getJMenuItem(RESET_SETTINGS_ACTION));
178 mainMenu.addSeparator();
179
180 mainMenu.add(menuItemsBean.getJMenuItem(QUIT_ACTION));
181
182 return mainMenu;
183 }
184
185
186
187
188
189
190 private JMenu createActionMenu() {
191
192 JMenu menu = new JMenu(LocaleExt.getString("pref.actionMenu.name"));
193 LocaleExt.registerComponent(menu, "pref.actionMenu.name");
194 MenuItemsBean menuItemsBean = PrefCountRegistry.getInstance().getMenuItemsBean();
195
196 menu.add(menuItemsBean.getJRadioButtonMenuItem(LENINGRAD));
197 menu.add(menuItemsBean.getJRadioButtonMenuItem(SOCHINKA));
198 menu.addSeparator();
199
200 menu.add(menuItemsBean.getJRadioButtonMenuItem(MAIN_3_PLAYERS));
201 menu.add(menuItemsBean.getJRadioButtonMenuItem(MAIN_4_PLAYERS));
202 menu.addSeparator();
203
204 menu.add(menuItemsBean.getJRadioButtonMenuItem(DIVISIBLE_IGNORE));
205 menu.add(menuItemsBean.getJRadioButtonMenuItem(DIVISIBLE_BY_N));
206
207 return menu;
208 }
209
210
211
212
213
214
215 private JMenu createWindowMenu() {
216 final JMenu winMenu = new JMenu(LocaleExt.getString("pref.windowMenu.name"));
217 LocaleExt.registerComponent(winMenu, "pref.windowMenu.name");
218
219 final JRadioButtonMenuItem scoreboardItem = new JRadioButtonMenuItem(LocaleExt.getString("pref.windowMenu.scoreboard"));
220 scoreboardItem.setSelected(true);
221 scoreboardItem.setEnabled(false);
222 LocaleExt.registerComponent(scoreboardItem, "pref.windowMenu.scoreboard");
223 winMenu.add(scoreboardItem);
224
225 this.dialogFrameItem = new JRadioButtonMenuItem(LocaleExt.getString("pref.windowMenu.dialog"));
226 this.dialogFrameItem.setSelected(true);
227 LocaleExt.registerComponent(this.dialogFrameItem, "pref.windowMenu.dialog");
228 this.dialogFrameItem.addActionListener(new ActionListener() {
229 public void actionPerformed(ActionEvent event) {
230 boolean selected = SwingMenuBar.this.dialogFrameItem.isSelected();
231 PrefCountRegistry.getInstance().getPlayerDialogFrame().setVisible(selected);
232 }
233 });
234 winMenu.add(this.dialogFrameItem);
235 return winMenu;
236 }
237
238
239
240
241
242
243 private JMenu createHelpMenu() {
244 final JMenu helpMenu = new JMenu(LocaleExt.getString("pref.helpMenu.name"));
245 LocaleExt.registerComponent(helpMenu, "pref.helpMenu.name");
246
247 MenuItemsBean menuItemsBean = PrefCountRegistry.getInstance().getMenuItemsBean();
248 helpMenu.add(menuItemsBean.getJMenuItem(HELP_COUNT_ACTION));
249 helpMenu.add(menuItemsBean.getJMenuItem(HELP_PREF_ACTION));
250 helpMenu.add(menuItemsBean.getJMenuItem(HELP_COMMON_ACTION));
251 helpMenu.add(menuItemsBean.getJMenuItem(ABOUT_ACTION));
252
253 return helpMenu;
254 }
255
256
257
258
259
260
261 private JMenu createLanguageMenu() {
262 LocaleExt loc = PrefCountRegistry.getCurrentLocale();
263 JMenu menu = new JMenu();
264 menu.setIcon(loc.getLocaleIcon());
265 ButtonGroup group = new ButtonGroup();
266 for (final LocaleExt currLoc : PrefCountRegistry.AVAILABLE_LOCALES) {
267 JRadioButtonMenuItem rbMenuItem = new JRadioButtonMenuItem(currLoc.getDisplayLanguage());
268 rbMenuItem.setIcon(currLoc.getLocaleIcon());
269 if (currLoc.equals(loc)) {
270 rbMenuItem.setSelected(true);
271 }
272 group.add(rbMenuItem);
273 rbMenuItem.addActionListener(
274 new ChangeLanguageActionListener(currLoc.getLocale().getLanguage()));
275 menu.add(rbMenuItem);
276 }
277 return menu;
278 }
279
280 }