/*
* This file is part of the OSMembrane project.
* More informations under www.osmembrane.de
*
* The project is licensed under the GNU GENERAL PUBLIC LICENSE 3.0.
* for more details about the license see http://www.osmembrane.de/license/
*
* Source: $HeadURL$ ($Revision$)
* Last changed: $Date$
*/
package de.osmembrane.controller.actions;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.KeyStroke;
import de.osmembrane.Application;
import de.osmembrane.exceptions.ControlledException;
import de.osmembrane.exceptions.ExceptionSeverity;
import de.osmembrane.model.ModelProxy;
import de.osmembrane.model.settings.AbstractSettings;
import de.osmembrane.model.settings.SettingType;
import de.osmembrane.model.settings.UnparsableFormatException;
import de.osmembrane.resources.Resource;
import de.osmembrane.tools.I18N;
import de.osmembrane.tools.IconLoader.Size;
import de.osmembrane.view.ViewRegistry;
import de.osmembrane.view.dialogs.SettingsDialog;
import de.osmembrane.view.interfaces.ISettingsDialog;
/**
* Action to open the change settings dialog.
*
* @author tobias_kuhn
*
*/
public class ChangeSettingsAction extends AbstractAction {
private static final long serialVersionUID = -1491395674816531738L;
/**
* Creates a new {@link ChangeSettingsAction}
*/
public ChangeSettingsAction() {
putValue(
Action.NAME,
I18N.getInstance().getString(
"Controller.Actions.ChangeSettings.Name"));
putValue(
Action.SHORT_DESCRIPTION,
I18N.getInstance().getString(
"Controller.Actions.ChangeSettings.Description"));
putValue(Action.SMALL_ICON,
Resource.PROGRAM_ICON.getImageIcon("settings.png", Size.SMALL));
putValue(Action.LARGE_ICON_KEY,
Resource.PROGRAM_ICON.getImageIcon("settings.png", Size.NORMAL));
putValue(Action.ACCELERATOR_KEY,
KeyStroke.getKeyStroke(KeyEvent.VK_F8, 0));
}
@Override
public void actionPerformed(ActionEvent e) {
ISettingsDialog dialog = ViewRegistry.getInstance().getCasted(
SettingsDialog.class, ISettingsDialog.class);
// set the display components
AbstractSettings settings = ModelProxy.getInstance().getSettings();
dialog.setLocales(settings.getLanguages());
for (SettingType setting : SettingType.values()) {
dialog.setValue(setting, settings.getValue(setting));
}
dialog.showWindow();
if (dialog.shallApplyChanges()) {
// set the model values, if necessary
for (SettingType setting : SettingType.values()) {
Object newValue = dialog.getValue(setting);
if ((newValue != null)
&& (!newValue.equals(settings.getValue(setting)))) {
try {
settings.setValue(setting, newValue);
} catch (UnparsableFormatException e1) {
Application
.handleException(new ControlledException(
this,
ExceptionSeverity.WARNING,
I18N.getInstance()
.getString(
"Controller.ChangeSettings.UnparsableFormatException",
I18N.getInstance()
.getString(
"Model.Settings.Type."
+ e1.getType()),
I18N.getInstance()
.getString(
"Model.Settings.Format."
+ e1.getType()
.getDeclaringClass()
.getSimpleName()))));
}
}
}
} /* if apply changes */
}
}