OSDN Git Service

be3c799546827febe78334c70c74f9477aa417a3
[sudokuki/sudokuki.git] / src / classes / net / jankenpoi / sudokuki / ui / swing / LanguageDialog.java
1 /*\r
2  * Sudokuki - essential sudoku game\r
3  * Copyright (C) 2007-2016 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.gtxt;\r
21 \r
22 import java.awt.Color;\r
23 import java.awt.Container;\r
24 import java.awt.FlowLayout;\r
25 import java.awt.GridLayout;\r
26 import java.awt.Point;\r
27 import java.awt.event.ActionEvent;\r
28 import java.awt.event.KeyAdapter;\r
29 import java.awt.event.KeyEvent;\r
30 import java.util.HashMap;\r
31 import java.util.Locale;\r
32 \r
33 import javax.swing.AbstractAction;\r
34 import javax.swing.BoxLayout;\r
35 import javax.swing.ButtonGroup;\r
36 import javax.swing.Icon;\r
37 import javax.swing.JButton;\r
38 import javax.swing.JDialog;\r
39 import javax.swing.JFrame;\r
40 import javax.swing.JPanel;\r
41 import javax.swing.JRadioButton;\r
42 import javax.swing.JScrollPane;\r
43 \r
44 import net.jankenpoi.i18n.I18n;\r
45 import net.jankenpoi.i18n.LocaleListener;\r
46 import net.jankenpoi.sudokuki.ui.L10nComponent;\r
47 \r
48 @SuppressWarnings("serial")\r
49 public class LanguageDialog extends JDialog implements L10nComponent {\r
50 \r
51         private HashMap<String, JRadioButton> itemsMap = new HashMap<String, JRadioButton>();\r
52 \r
53         private LocaleListener localeListener;\r
54         \r
55         public LanguageDialog(JFrame parent, ToolBar toolbar) {\r
56                 super(parent, true);\r
57                 setTitle(gtxt("Language"));\r
58 \r
59                 initComponents();\r
60                 setResizable(false);\r
61                 pack();\r
62 \r
63                 panel.requestFocus();\r
64                 \r
65                 Point toolBarLoc = toolbar.getLocationOnScreen();\r
66                 setSize(parent.getWidth()*2/3, parent.getHeight()*2/3);\r
67                 setLocation(toolBarLoc.x + toolbar.getWidth() / 2 - getWidth() / 2,\r
68                                 toolBarLoc.y + toolbar.getHeight());\r
69                 \r
70         localeListener = new LocaleListenerImpl(this);\r
71         I18n.addLocaleListener(localeListener);\r
72         }\r
73 \r
74         private JPanel panel = new JPanel();\r
75         private JPanel btnPanel = new JPanel();\r
76         private JButton okBtn = new JButton(gtxt("Ok"));\r
77         \r
78         private void initComponents() {\r
79                 \r
80                 Container pane = getContentPane();\r
81                 BoxLayout globalLayout = new BoxLayout(pane, BoxLayout.Y_AXIS);\r
82                 pane.setLayout(globalLayout);\r
83 \r
84                 GridLayout pnlLayout = new GridLayout(0, 1);\r
85                 panel.setLayout(pnlLayout);\r
86 \r
87         icons.put("ar", StockIcons.ICON_FLAG_AR);\r
88         icons.put("de", StockIcons.ICON_FLAG_DE);\r
89         icons.put("el", StockIcons.ICON_FLAG_EL);\r
90         icons.put("eo", StockIcons.ICON_FLAG_EO);\r
91         icons.put("en", StockIcons.ICON_FLAG_EN);\r
92         icons.put("es", StockIcons.ICON_FLAG_ES);\r
93         icons.put("fr", StockIcons.ICON_FLAG_FR);\r
94         icons.put("hu", StockIcons.ICON_FLAG_HU);\r
95         icons.put("ja", StockIcons.ICON_FLAG_JA);\r
96         icons.put("lv", StockIcons.ICON_FLAG_LV);\r
97         icons.put("nl", StockIcons.ICON_FLAG_NL);
98         icons.put("pl", StockIcons.ICON_FLAG_PL);
99         icons.put("pt", StockIcons.ICON_FLAG_PT);\r
100         icons.put("pt_BR", StockIcons.ICON_FLAG_BR);\r
101         icons.put("ru", StockIcons.ICON_FLAG_RU);\r
102         icons.put("ta", StockIcons.ICON_FLAG_TA);\r
103         icons.put("tr", StockIcons.ICON_FLAG_TR);\r
104         icons.put("zh", StockIcons.ICON_FLAG_ZH);\r
105         \r
106                 ButtonGroup myGroup = new ButtonGroup();\r
107         addItem("ar", "\u0627\u0644\u0639\u0631\u0628\u064a\u0629", myGroup);\r
108         addItem("de", "Deutsch", myGroup);\r
109         addItem("el", "E\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ac", myGroup);\r
110         addItem("en", "English", myGroup);\r
111         addItem("eo", "Esperanto", myGroup);\r
112         addItem("es", "Espa\u00f1ol", myGroup);\r
113         addItem("fr", "Fran\u00e7ais", myGroup);\r
114         addItem("hu", "Magyar", myGroup);\r
115         addItem("ja", "\u65e5\u672c\u8a9e", myGroup);\r
116         addItem("lv", "Latvie\u0161u", myGroup);\r
117         addItem("nl", "Nederlands", myGroup);
118         addItem("pl", "Polish", myGroup);
119         addItem("pt", "Portugu\u00eas", myGroup);\r
120         addItem("pt_BR", "Portugu\u00eas (Brasil)", myGroup);\r
121         addItem("ru", "\u0420\u0443\u0441\u0441\u043a\u0438\u0439", myGroup);\r
122         addItem("ta", "\u0BA4\u0BAE\u0BBF\u0BB4\u0BCD\u0020\u0028\u0B87\u0BA8\u0BCD\u0BA4\u0BBF\u0BAF\u0BBE\u0029", myGroup);\r
123         addItem("tr", "\u0054\u00FC\u0072\u006B\u00E7\u0065", myGroup);\r
124         addItem("zh", "\u4e2d\u6587", myGroup);\r
125         \r
126         JScrollPane scrollPane = new JScrollPane();\r
127         JPanel enclosingPanel = new JPanel();\r
128         enclosingPanel.add(panel);\r
129         enclosingPanel.setBackground(Color.WHITE);\r
130         panel.setBackground(Color.WHITE);\r
131         scrollPane.getViewport().add(enclosingPanel);\r
132                 pane.add(scrollPane);\r
133                 \r
134                 FlowLayout btnLayout = new FlowLayout(1);\r
135                 btnPanel.setLayout(btnLayout);\r
136                 okBtn.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);\r
137                 okBtn.addActionListener(new java.awt.event.ActionListener() {\r
138                         public void actionPerformed(java.awt.event.ActionEvent evt) {\r
139                                 okButtonClicked();\r
140                         }\r
141 \r
142                         private void okButtonClicked() {\r
143                                 dispose();\r
144                         }\r
145                 });\r
146                 btnPanel.add(okBtn);            \r
147                 \r
148                 pane.add(btnPanel);\r
149         }\r
150 \r
151         @Override\r
152         public void setL10nMessages(Locale locale, String languageCode) {\r
153                 setTitle(gtxt("Language"));\r
154                 okBtn.setText(gtxt("Ok"));\r
155         }\r
156 \r
157     private final HashMap<String, Icon> icons = new HashMap<String, Icon>();\r
158         \r
159         private void addItem(final String code, String language, ButtonGroup group) {\r
160                 final JRadioButton radioItem = new JRadioButton(language, icons.get(code));\r
161                 itemsMap.put(code, radioItem);\r
162                 \r
163                 if (code.equals(code)) {\r
164                         radioItem.setSelected(true);\r
165                 }\r
166         radioItem.setAction(new AbstractAction(language, icons.get(code)) {\r
167 \r
168             @Override\r
169             public void actionPerformed(ActionEvent arg0) {\r
170                     I18n.reset(code);\r
171             }\r
172         });\r
173         radioItem.addKeyListener(new KeyAdapter() {\r
174                 @Override\r
175                 public void keyPressed(KeyEvent ke) {\r
176                         if (ke.getKeyCode() == KeyEvent.VK_ENTER) {\r
177                                 dispose();\r
178                         }\r
179                 }\r
180                 });\r
181         \r
182                 group.add(radioItem);\r
183                 panel.add(radioItem);\r
184         }\r
185 \r
186 }\r