/* ***************************************************************************** * Copyright (C) 2000-2004, International Business Machines Corporation and * * others. All Rights Reserved. * ***************************************************************************** */ package com.ibm.rbm.gui; import java.awt.*; import java.awt.event.*; import java.io.IOException; import java.util.Locale; import javax.swing.*; import com.ibm.rbm.*; /** * Dialog to display to a user about their preferences. */ class PreferencesDialog extends JDialog { String userName; Locale locale; LookAndFeel laf; RBManagerGUI gui; // ** COMPONENTS ** JTextField nameField; JRadioButton machineRadio; JRadioButton definedRadio; JRadioButton isoRadio; JComboBox machineCombo; JComboBox definedCombo; JComboBox isoLangCombo; JComboBox isoCounCombo; JComboBox lafCombo; JButton okButton; JButton cancelButton; public PreferencesDialog(RBManagerGUI gui) { super(gui, Resources.getTranslation("dialog_title_preferences"), true); this.gui = gui; userName = gui.getUser(); locale = Resources.getLocale(); laf = UIManager.getLookAndFeel(); initComponents(); enableEvents(AWTEvent.KEY_EVENT_MASK); } protected void processKeyEvent(KeyEvent ev) { if (ev.getKeyCode() == KeyEvent.VK_ENTER) { updatePreferences(); } else if (ev.getKeyCode() == KeyEvent.VK_CANCEL) { thisWindowClosing(); } } private void initComponents() { UIManager.LookAndFeelInfo lafi[] = UIManager.getInstalledLookAndFeels(); String lafn[] = new String[lafi.length]; for (int i=0; i < lafi.length; i++) { lafn[i] = lafi[i].getName(); } // COMPONENTS JPanel panel1 = new JPanel(); JPanel panel2 = new JPanel(); JPanel panel3 = new JPanel(); JPanel panel4 = new JPanel(); Box mainBox = new Box(BoxLayout.Y_AXIS); Box localeBox1 = new Box(BoxLayout.Y_AXIS); Box localeBox2 = new Box(BoxLayout.Y_AXIS); JPanel localePanel = new JPanel(); Dimension localeDim1 = new Dimension(200,25); Dimension localeDim2 = new Dimension(150,25); Dimension localeDim3 = new Dimension(50,25); JLabel nameLabel = new JLabel(Resources.getTranslation("dialog_preferences_username")); JLabel lafLabel = new JLabel(Resources.getTranslation("dialog_preferences_lookandfeel")); JLabel warnLabel = new JLabel(Resources.getTranslation("dialog_preferences_locale_warning")); JLabel underscoreLabel = new JLabel("_"); nameField = new JTextField(userName); machineRadio = new JRadioButton(Resources.getTranslation("dialog_preferences_locale_machine"), false); definedRadio = new JRadioButton(Resources.getTranslation("dialog_preferences_locale_defined"), true); isoRadio = new JRadioButton(Resources.getTranslation("dialog_preferences_locale_iso"), false); machineCombo = new JComboBox(Locale.getAvailableLocales()); definedCombo = new JComboBox(Resources.getAvailableLocales()); isoLangCombo = new JComboBox(Locale.getISOLanguages()); isoCounCombo = new JComboBox(Locale.getISOCountries()); lafCombo = new JComboBox(lafn); okButton = new JButton(Resources.getTranslation("button_update")); cancelButton = new JButton(Resources.getTranslation("button_cancel")); machineRadio.setPreferredSize(localeDim1); definedRadio.setPreferredSize(localeDim1); isoRadio.setPreferredSize(localeDim1); nameLabel.setPreferredSize(localeDim1); lafLabel.setPreferredSize(localeDim1); //localePanel.setPreferredSize(localeDim2); machineCombo.setPreferredSize(localeDim2); definedCombo.setPreferredSize(localeDim2); nameField.setPreferredSize(localeDim2); lafCombo.setPreferredSize(localeDim2); isoLangCombo.setPreferredSize(localeDim3); isoCounCombo.setPreferredSize(localeDim3); // Select the appropriate entries in the combo boxes String lafname = UIManager.getLookAndFeel().getName(); for (int i = 0; i < lafCombo.getItemCount(); i++) { if (lafCombo.getItemAt(i).toString().equals(lafname)) { lafCombo.setSelectedIndex(i); break; } } String locname = Resources.getLocale().toString(); String loclang = Resources.getLocale().getLanguage(); String loccoun = Resources.getLocale().getCountry(); for (int i = 0; i < machineCombo.getItemCount(); i++) { if (machineCombo.getItemAt(i).toString().equalsIgnoreCase(locname)) { machineCombo.setSelectedIndex(i); break; } } for (int i = 0; i < definedCombo.getItemCount(); i++) { if (definedCombo.getItemAt(i).toString().equalsIgnoreCase(locname)) { definedCombo.setSelectedIndex(i); break; } } for (int i = 0; i < isoLangCombo.getItemCount(); i++) { if (isoLangCombo.getItemAt(i).toString().equalsIgnoreCase(loclang)) { isoLangCombo.setSelectedIndex(i); break; } } for (int i = 0; i < isoCounCombo.getItemCount(); i++) { if (isoCounCombo.getItemAt(i).toString().equalsIgnoreCase(loccoun)) { isoCounCombo.setSelectedIndex(i); break; } } // Set the radio button group ButtonGroup group = new ButtonGroup(); group.add(machineRadio); group.add(definedRadio); group.add(isoRadio); nameField.setColumns(15); // Add action listeners cancelButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ev) { thisWindowClosing(); } }); okButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ev) { updatePreferences(); } }); getRootPane().setDefaultButton(okButton); panel3.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), Resources.getTranslation("dialog_preferences_locale"))); panel3.setLayout(new BorderLayout()); localePanel.add(isoLangCombo); localePanel.add(underscoreLabel); localePanel.add(isoCounCombo); localeBox1.add(machineRadio); localeBox1.add(definedRadio); localeBox1.add(isoRadio); localeBox2.add(machineCombo); localeBox2.add(definedCombo); localeBox2.add(localePanel); localeBox1.add(Box.createVerticalStrut(5)); localeBox2.add(Box.createVerticalStrut(5)); panel1.add(nameLabel); panel1.add(nameField); panel2.add(lafLabel); panel2.add(lafCombo); panel3.add(localeBox1, BorderLayout.WEST); panel3.add(localeBox2, BorderLayout.EAST); panel3.add(warnLabel, BorderLayout.SOUTH); panel4.add(okButton); panel4.add(cancelButton); mainBox.add(panel1); mainBox.add(panel2); mainBox.add(panel3); mainBox.add(panel4); getContentPane().add(mainBox); //validate(); pack(); setVisible(true); } private void thisWindowClosing() { setVisible(false); dispose(); } void updatePreferences() { // Set the user name gui.setUser(nameField.getText().trim()); // Set the look and feel try { UIManager.LookAndFeelInfo lafi[] = UIManager.getInstalledLookAndFeels(); for (int i=0; i < lafi.length; i++) { if (lafi[i].getName().equals(lafCombo.getSelectedItem().toString())) { UIManager.setLookAndFeel(lafi[i].getClassName()); gui.updateUI(); break; } } } catch (Exception e) { System.err.println("Could not change the look and feel"); e.printStackTrace(System.err); } // Set the locale String language = null; String country = null; String variant = null; if (definedRadio.isSelected()) { String encoding = ""; if (definedCombo.getSelectedItem() != null) { encoding = definedCombo.getSelectedItem().toString(); } language = Resources.getLanguage(encoding); country = Resources.getCountry(encoding); variant = Resources.getVariant(encoding); RBManagerGUI.debugMsg("Before: " + language + "_" + country + "_" + variant); if (country == null) country = new String(); if (variant == null) locale = new Locale(language, country); else locale = new Locale(language, country, variant); RBManagerGUI.debugMsg("After: " + locale.toString()); } else if (machineRadio.isSelected()) { String encoding = machineCombo.getSelectedItem().toString(); language = Resources.getLanguage(encoding); country = Resources.getCountry(encoding); variant = Resources.getVariant(encoding); if (country == null) country = new String(); if (variant == null) locale = new Locale(language, country); else locale = new Locale(language, country, variant); } else if (isoRadio.isSelected()) { language = isoLangCombo.getSelectedItem().toString(); country = isoCounCombo.getSelectedItem().toString(); if (variant == null) locale = new Locale(language, country); else locale = new Locale(language, country, variant); } Resources.setLocale(locale); gui.updateLocale(locale); // Write the preferences Preferences.setPreference("username", gui.getUser()); Preferences.setPreference("lookandfeel", UIManager.getLookAndFeel().getClass().getName()); Preferences.setPreference("locale", locale.toString()); try { Preferences.savePreferences(); } catch (IOException ioe) { JOptionPane.showMessageDialog(this, Resources.getTranslation("error_preferences_save"), Resources.getTranslation("error"), JOptionPane.ERROR_MESSAGE); ioe.printStackTrace(System.err); } // Close the window thisWindowClosing(); } }