OSDN Git Service

Improved L10n support and fixed minor UI issues.
[sudokuki/sudokuki.git] / src / classes / net / jankenpoi / sudokuki / ui / swing / LanguageDialog.java
1 /*\r
2  * Sudokuki - essential sudoku game\r
3  * Copyright (C) 2007-2012 Sylvain Vedrenne\r
4  *\r
5  * This program is free software: you can redistribute it and/or modify\r
6  * it under the terms of the GNU General Public License as published by\r
7  * the Free Software Foundation, either version 3 of the License, or\r
8  * (at your option) any later version.\r
9  * \r
10  * This program is distributed in the hope that it will be useful,\r
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
13  * GNU General Public License for more details.\r
14  * \r
15  * You should have received a copy of the GNU General Public License\r
16  * along with this program.  If not, see <http://www.gnu.org/licenses/>.\r
17  */\r
18 package net.jankenpoi.sudokuki.ui.swing;\r
19 \r
20 import static net.jankenpoi.i18n.I18n._;\r
21 \r
22 import java.awt.Container;\r
23 import java.awt.FlowLayout;\r
24 import java.awt.GridLayout;\r
25 import java.awt.Point;\r
26 import java.awt.event.ActionEvent;\r
27 import java.util.HashMap;\r
28 import java.util.Locale;\r
29 \r
30 import javax.swing.AbstractAction;\r
31 import javax.swing.BoxLayout;\r
32 import javax.swing.ButtonGroup;\r
33 import javax.swing.Icon;\r
34 import javax.swing.JButton;\r
35 import javax.swing.JDialog;\r
36 import javax.swing.JFrame;\r
37 import javax.swing.JPanel;\r
38 import javax.swing.JRadioButton;\r
39 \r
40 import net.jankenpoi.i18n.I18n;\r
41 import net.jankenpoi.i18n.LocaleListener;\r
42 import net.jankenpoi.sudokuki.ui.L10nComponent;\r
43 \r
44 @SuppressWarnings("serial")\r
45 public class LanguageDialog extends JDialog implements L10nComponent {\r
46 \r
47         private HashMap<String, JRadioButton> itemsMap = new HashMap<String, JRadioButton>();\r
48 \r
49         private LocaleListener localeListener;\r
50         \r
51         public LanguageDialog(JFrame parent, ToolBar toolbar) {\r
52                 super(parent, true);\r
53                 setTitle(_("Language"));\r
54 \r
55                 initComponents();\r
56                 setResizable(false);\r
57                 pack();\r
58 \r
59                 Point toolBarLoc = toolbar.getLocationOnScreen();\r
60                 setLocation(toolBarLoc.x + toolbar.getWidth() / 2 - getWidth() / 2,\r
61                                 toolBarLoc.y + toolbar.getHeight());\r
62                 setSize(getPreferredSize());\r
63                 \r
64         localeListener = new LocaleListenerImpl(this);\r
65         I18n.addLocaleListener(localeListener);\r
66         }\r
67 \r
68         private JPanel panel = new JPanel();\r
69         private JPanel btnPanel = new JPanel();\r
70         private JButton okBtn = new JButton(_("Ok"));\r
71         \r
72         private void initComponents() {\r
73                 \r
74                 Container pane = getContentPane();\r
75                 BoxLayout globalLayout = new BoxLayout(pane, BoxLayout.Y_AXIS);\r
76                 pane.setLayout(globalLayout);\r
77 \r
78                 GridLayout pnlLayout = new GridLayout(6, 1);\r
79                 panel.setLayout(pnlLayout);\r
80 \r
81                 String detectedLanguage = _("DETECTED_LANGUAGE");\r
82                 System.out.println("LanguageMenu.addItems() detected language:"\r
83                                 + detectedLanguage);\r
84 \r
85         icons.put("de", StockIcons.ICON_FLAG_DE);\r
86         icons.put("el", StockIcons.ICON_FLAG_EL);\r
87         icons.put("eo", StockIcons.ICON_FLAG_EO);\r
88         icons.put("en", StockIcons.ICON_FLAG_EN);\r
89         icons.put("es", StockIcons.ICON_FLAG_ES);\r
90         icons.put("fr", StockIcons.ICON_FLAG_FR);\r
91         icons.put("ja", StockIcons.ICON_FLAG_JA);\r
92         icons.put("pt", StockIcons.ICON_FLAG_PT);\r
93         icons.put("ru", StockIcons.ICON_FLAG_RU);\r
94         icons.put("zh", StockIcons.ICON_FLAG_ZH);\r
95         \r
96                 ButtonGroup myGroup = new ButtonGroup();\r
97         addItem("de", _("German"), myGroup);\r
98         addItem("el", _("Greek"), myGroup);\r
99         addItem("en", _("English"), myGroup);\r
100         addItem("eo", _("Esperanto"), myGroup);\r
101         addItem("es", _("Spanish"), myGroup);\r
102         addItem("fr", _("French"), myGroup);\r
103         addItem("ja", _("Japanese"), myGroup);\r
104         addItem("pt", _("Portuguese"), myGroup);\r
105         addItem("ru", _("Russian"), myGroup);\r
106         addItem("zh", _("Mandarin"), myGroup);\r
107         \r
108                 pane.add(panel);\r
109                 \r
110                 FlowLayout btnLayout = new FlowLayout(1);\r
111                 btnPanel.setLayout(btnLayout);\r
112                 okBtn.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);\r
113                 okBtn.addActionListener(new java.awt.event.ActionListener() {\r
114                         public void actionPerformed(java.awt.event.ActionEvent evt) {\r
115                                 okButtonClicked();\r
116                         }\r
117 \r
118                         private void okButtonClicked() {\r
119                                 dispose();\r
120                         }\r
121                 });\r
122                 btnPanel.add(okBtn);            \r
123                 \r
124                 pane.add(btnPanel);\r
125         }\r
126 \r
127         @Override\r
128         public void setL10nMessages(Locale locale, String languageCode) {\r
129                 setTitle(_("Language"));\r
130                 okBtn.setText(_("Ok"));\r
131                 itemsMap.get("de").setText(_("German"));\r
132                 itemsMap.get("el").setText(_("Greek"));\r
133                 itemsMap.get("en").setText(_("English"));\r
134                 itemsMap.get("eo").setText(_("Esperanto"));\r
135                 itemsMap.get("es").setText(_("Spanish"));\r
136                 itemsMap.get("fr").setText(_("French"));\r
137                 itemsMap.get("ja").setText(_("Japanese"));\r
138                 itemsMap.get("pt").setText(_("Portuguese"));\r
139                 itemsMap.get("zh").setText(_("Mandarin"));\r
140         }\r
141 \r
142     private final HashMap<String, Icon> icons = new HashMap<String, Icon>();\r
143         \r
144         private void addItem(final String code, String language, ButtonGroup group) {\r
145                 JRadioButton radioItem;\r
146 \r
147                 radioItem = new JRadioButton(language, icons.get(code));\r
148                 itemsMap.put(code, radioItem);\r
149                 \r
150                 if (code.equals(code)) {\r
151                         radioItem.setSelected(true);\r
152                 }\r
153         radioItem.setAction(new AbstractAction(language, icons.get(code)) {\r
154 \r
155             @Override\r
156             public void actionPerformed(ActionEvent arg0) {\r
157                     I18n.reset(code);\r
158             }\r
159         });\r
160 \r
161                 group.add(radioItem);\r
162                 panel.add(radioItem);\r
163         }\r
164 \r
165 }