/*
* SettingsPanel.java
*
*/
package org.jmeld.ui.settings;
import org.jmeld.settings.JMeldSettings;
import org.jmeld.ui.JMeldPanel;
import org.jmeld.ui.StatusBar;
import org.jmeld.ui.util.ImageUtil;
import org.jmeld.util.conf.ConfigurationListenerIF;
import org.jmeld.util.conf.ConfigurationManager;
import org.jmeld.util.prefs.FileChooserPreference;
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
/**
*
* @author kees
*/
public class SettingsPanel
extends SettingsPanelForm
implements ConfigurationListenerIF
{
private DefaultListModel listModel;
private JMeldPanel mainPanel;
public SettingsPanel(JMeldPanel mainPanel)
{
this.mainPanel = mainPanel;
init();
initConfiguration();
getConfiguration().addConfigurationListener(this);
}
private void init()
{
settingsPanel.setLayout(new CardLayout());
for (Settings setting : Settings.values())
{
settingsPanel.add(setting.getPanel(), setting.getName());
}
initButton(saveButton, "stock_save", "Save settings");
saveButton.addActionListener(getSaveAction());
initButton(saveAsButton, "stock_save-as",
"Save settings to a different file");
saveAsButton.addActionListener(getSaveAsAction());
initButton(reloadButton, "stock_reload",
"Reload settings from a different file");
reloadButton.addActionListener(getReloadAction());
fileLabel.setText("");
listModel = new DefaultListModel();
for (Settings setting : Settings.values())
{
listModel.addElement(setting);
}
settingItems.setModel(listModel);
settingItems.setCellRenderer(new SettingCellRenderer());
settingItems.setSelectedIndex(0);
settingItems.addListSelectionListener(getSettingItemsAction());
}
private void initButton(JButton button, String iconName, String toolTipText)
{
ImageIcon icon;
button.setText("");
button.setToolTipText(toolTipText);
button.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
button.setContentAreaFilled(false);
icon = ImageUtil.getSmallImageIcon(iconName);
button.setIcon(icon);
button.setDisabledIcon(ImageUtil.createTransparentIcon(icon));
button.setPressedIcon(ImageUtil.createDarkerIcon(icon));
button.setFocusable(false);
}
public ActionListener getSaveAction()
{
return new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
getConfiguration().save();
StatusBar.getInstance().setText("Configuration saved");
}
};
}
public ActionListener getSaveAsAction()
{
return new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
JFileChooser chooser;
int result;
File file;
FileChooserPreference pref;
Window ancestor;
chooser = new JFileChooser();
chooser.setApproveButtonText("Save");
chooser.setDialogTitle("Save settings");
pref = new FileChooserPreference("SettingsSave", chooser);
ancestor = SwingUtilities.getWindowAncestor((Component) ae.getSource());
result = chooser.showOpenDialog(ancestor);
if (result == JFileChooser.APPROVE_OPTION)
{
pref.save();
file = chooser.getSelectedFile();
getConfiguration().setConfigurationFile(file);
getConfiguration().save();
StatusBar.getInstance().setText("Configuration saved to " + file);
}
}
};
}
public ActionListener getReloadAction()
{
return new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
JFileChooser chooser;
int result;
File file;
FileChooserPreference pref;
Window ancestor;
chooser = new JFileChooser();
chooser.setApproveButtonText("Reload");
chooser.setDialogTitle("Reload settings");
pref = new FileChooserPreference("SettingsSave", chooser);
ancestor = SwingUtilities.getWindowAncestor((Component) ae.getSource());
result = chooser.showOpenDialog(ancestor);
if (result == JFileChooser.APPROVE_OPTION)
{
pref.save();
file = chooser.getSelectedFile();
if (!ConfigurationManager.getInstance().reload(file,
getConfiguration().getClass()))
{
StatusBar.getInstance().setAlarm("Failed to reload from " + file);
}
}
}
};
}
public ListSelectionListener getSettingItemsAction()
{
return new ListSelectionListener()
{
public void valueChanged(ListSelectionEvent event)
{
CardLayout layout;
Settings settings;
settings = (Settings) settingItems.getSelectedValue();
layout = (CardLayout) settingsPanel.getLayout();
layout.show(settingsPanel, settings.getName());
}
};
}
public void configurationChanged()
{
initConfiguration();
}
private void initConfiguration()
{
JMeldSettings c;
c = getConfiguration();
fileLabel.setText(c.getConfigurationFileName());
saveButton.setEnabled(c.isChanged());
}
public boolean checkSave()
{
SaveSettingsDialog dialog;
if (getConfiguration().isChanged())
{
dialog = new SaveSettingsDialog(mainPanel);
dialog.show();
if (dialog.isOK())
{
dialog.doSave();
}
}
return true;
}
private JMeldSettings getConfiguration()
{
return JMeldSettings.getInstance();
}
}