1818import java .awt .event .WindowEvent ;
1919import java .io .*;
2020import java .net .URL ;
21+ import java .util .Locale ;
2122
2223public class Editor extends JFrame implements ActionListener {
2324 private static final long serialVersionUID = 212475114885790986L ;
@@ -28,15 +29,19 @@ public class Editor extends JFrame implements ActionListener {
2829 private final CsvMaker csvMaker ;
2930
3031 public Editor () {
31- super (Resources . getMessage ( "editor.title" ) );
32+ super ();
3233
3334 of = new OptionFile ();
3435 of2 = new OptionFile ();
3536 csvMaker = new CsvMaker ();
3637
37- initComponents ();
38+ setDefaultCloseOperation (WindowConstants .EXIT_ON_CLOSE );
39+ initIcon ();
3840
39- tabbedPane .setVisible (false );
41+ File lastDir = loadSettings ();
42+ setTitle (Resources .getMessage ("editor.title" ));
43+
44+ initComponents (lastDir );
4045 }
4146
4247 //region Initialize the GUI components
@@ -60,10 +65,7 @@ public Editor() {
6065 private /* final*/ CsvSwitchPanel csvSwitch ;
6166 private /* final*/ JFileChooser csvChooser ;
6267
63- private void initComponents () {
64- setDefaultCloseOperation (WindowConstants .EXIT_ON_CLOSE );
65- initIcon ();
66-
68+ private void initComponents (File lastDir ) {
6769 csvSwitch = new CsvSwitchPanel ();
6870
6971 csvChooser = new JFileChooser ();
@@ -110,18 +112,22 @@ private void initComponents() {
110112 tabbedPane .addTab (Resources .getMessage ("editor.tab8" ), null , globalPan , null );
111113 tabbedPane .addTab (Resources .getMessage ("editor.tab9" ), null , importPanel , null );
112114
113- buildMenu ();
114- getContentPane ().add (tabbedPane );
115-
116115 opFileFilter = new OptionFileFilter ();
117116 //
118- opFileChooser = new JFileChooser (loadSettings () );
117+ opFileChooser = new JFileChooser (lastDir );
119118 opFileChooser .setAcceptAllFileFilterUsed (false );
120119 opFileChooser .addChoosableFileFilter (opFileFilter );
121120 opFileChooser .setAccessory (new OptionPreviewPanel (opFileChooser ));
122121
122+ buildMenu ();
123+
124+ setResizable (true );
125+ getContentPane ().add (tabbedPane );
126+
123127 setResizable (false );
124128 pack ();
129+
130+ tabbedPane .setVisible (false );
125131 }
126132
127133 private JMenuItem open2Item ;
@@ -172,6 +178,9 @@ private void buildMenu() {
172178 tool .add (csvItem );
173179 tool .add (convertItem );
174180
181+ JMenu language = new JMenu (Resources .getMessage ("menu.language" ));
182+ buildLanguageMenu (language );
183+
175184 JMenuItem helpItem = new JMenuItem (Resources .getMessage ("menu.helpPage" ));
176185 helpItem .setActionCommand ("Help" );
177186 helpItem .addActionListener (this );
@@ -187,17 +196,21 @@ private void buildMenu() {
187196 JMenuBar mb = new JMenuBar ();
188197 mb .add (file );
189198 mb .add (tool );
199+ mb .add (language );
190200 mb .add (help );
191201
192202 setJMenuBar (mb );
193203
194- csvItem .setEnabled (false );
195- open2Item .setEnabled (false );
196- saveItem .setEnabled (false );
197- saveAsItem .setEnabled (false );
198- convertItem .setEnabled (false );
204+ enableMenuItems (false );
205+ log .debug ("Building of menu-bar is succeeded" );
206+ }
199207
200- log .debug ("Building of menu-bar succeeded" );
208+ private void enableMenuItems (boolean enable ) {
209+ csvItem .setEnabled (enable );
210+ open2Item .setEnabled (enable );
211+ saveItem .setEnabled (enable );
212+ saveAsItem .setEnabled (enable );
213+ convertItem .setEnabled (enable && of2 .isLoaded ());
201214 }
202215
203216 private void initIcon () {
@@ -208,6 +221,20 @@ private void initIcon() {
208221 }
209222 }
210223
224+ private void buildLanguageMenu (JMenu language ) {
225+ Locale loc ;
226+ JMenuItem mi ;
227+ for (int i = 0 ; i < Resources .SUPPORTED_LOCALES .length ; i ++) {
228+ loc = Resources .SUPPORTED_LOCALES [i ];
229+
230+ mi = new JMenuItem (loc .getDisplayLanguage (loc ));
231+ mi .setActionCommand ("Language" + i );
232+ mi .addActionListener (this );
233+
234+ language .add (mi );
235+ }
236+ }
237+
211238 //endregion
212239
213240 private void refreshTitle (String filename ) {
@@ -239,6 +266,10 @@ public void actionPerformed(ActionEvent evt) {
239266 exportCsv ();
240267 } else if ("Convert" .equalsIgnoreCase (evt .getActionCommand ())) {
241268 importFromOF2 ();
269+ } else if (null != evt .getActionCommand () && evt .getActionCommand ().startsWith ("Language" )) {
270+ int i = Integer .parseInt (evt .getActionCommand ().substring (8 ));
271+ switchLanguage (Resources .SUPPORTED_LOCALES [i ]);
272+
242273 } else if ("Help" .equalsIgnoreCase (evt .getActionCommand ())) {
243274 helpDia .setVisible (true );
244275 } else if ("About" .equalsIgnoreCase (evt .getActionCommand ())) {
@@ -275,40 +306,51 @@ private void openFile(String filePath) {
275306
276307 Squads .fixAll (of );
277308
278- flagPanel .refresh ();
279- imagePanel .refresh ();
280- transferPan .refresh ();
281- wenShop .getWenPanel ().refresh ();
282- wenShop .getShopPanel ().refresh ();
283- stadiumPan .refresh ();
284- teamPan .refresh ();
285- leaguePan .refresh ();
286- importPanel .refresh ();
287-
288- tabbedPane .setVisible (true );
289-
290- csvItem .setEnabled (true );
291- open2Item .setEnabled (true );
292- saveItem .setEnabled (true );
293- saveAsItem .setEnabled (true );
294- convertItem .setEnabled (of2 .isLoaded ());
309+ refreshComponents ();
310+ enableMenuItems (true );
295311
296312 log .debug ("Open succeeded on input file: {}" , fs .getName ());
297313 } else {
298314 refreshTitle (null );
299315 tabbedPane .setVisible (false );
300316
301- csvItem .setEnabled (false );
302- open2Item .setEnabled (false );
303- saveItem .setEnabled (false );
304- saveAsItem .setEnabled (false );
305- convertItem .setEnabled (false );
317+ enableMenuItems (false );
306318
307319 log .debug ("Failed to open file: {}" , fs );
308320 showOpenFailMsg ();
309321 }
310322 }
311323
324+ private void refreshComponents () {
325+ flagPanel .refresh ();
326+ imagePanel .refresh ();
327+ transferPan .refresh ();
328+ wenShop .getWenPanel ().refresh ();
329+ wenShop .getShopPanel ().refresh ();
330+ stadiumPan .refresh ();
331+ teamPan .refresh ();
332+ leaguePan .refresh ();
333+ importPanel .refresh ();
334+
335+ tabbedPane .setVisible (true );
336+ }
337+
338+ private void switchLanguage (Locale locale ) {
339+ Locale .setDefault (locale );
340+ saveSettings ();
341+
342+ getContentPane ().remove (tabbedPane );
343+ initComponents (opFileChooser .getCurrentDirectory ());
344+
345+ if (null != currentFile ) {
346+ refreshTitle (currentFile .getName ());
347+ refreshComponents ();
348+ enableMenuItems (true );
349+ } else {
350+ refreshTitle (null );
351+ }
352+ }
353+
312354 /**
313355 * Imports OptionFile from OF2.
314356 */
@@ -505,14 +547,14 @@ private void showIllegalNameMsg() {
505547
506548 private boolean saveSettings () {
507549 File dir = opFileChooser .getCurrentDirectory ();
508- if (null == dir ) {
550+ /* if (null == dir) {
509551 return true;
510- }
552+ }*/
511553
512554 ObjectOutputStream sw = null ;
513555 try {
514556 sw = new ObjectOutputStream (new FileOutputStream (settingsFile , false ));
515- sw .writeObject (dir );
557+ sw .writeObject (new Object []{ dir , Locale . getDefault ()} );
516558
517559 } catch (IOException e ) {
518560 log .warn ("Failed to save settings: {}" , e .toString ());
@@ -540,11 +582,13 @@ private File loadSettings() {
540582 sr = new ObjectInputStream (new FileInputStream (settingsFile ));
541583 Object o = sr .readObject ();
542584
543- if (o instanceof File ) {
544- dir = (File ) o ;
545- if (!dir .exists ()) {
585+ if (o instanceof Object []) {
586+ Object [] settings = (Object []) o ;
587+ dir = (File ) settings [0 ];
588+ if (null != dir && !dir .exists ()) {
546589 dir = null ;
547590 }
591+ Locale .setDefault ((Locale ) settings [1 ]);
548592 }
549593 } catch (Exception e ) {
550594 log .warn ("Failed to load settings: {}" , e .toString ());
0 commit comments