blob: 063ce87dab3e87d8a6ae6d14032e21ffcfa9e2dd [file] [log] [blame]
/*
*****************************************************************************
* 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();
}
}