47e2d24924
X-SVN-Rev: 15964
283 lines
9.1 KiB
Java
283 lines
9.1 KiB
Java
/*
|
|
*****************************************************************************
|
|
* 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();
|
|
}
|
|
}
|