/*
* WPCleaner: A tool to help on Wikipedia maintenance tasks.
* Copyright (C) 2013 Nicolas Vervelle
*
* See README.txt file for licensing information.
*/
package org.wikipediacleaner.gui.swing.options;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.FlowLayout;
import java.awt.event.ActionListener;
import java.beans.EventHandler;
import java.util.ArrayList;
import java.util.List;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.WindowConstants;
import org.wikipediacleaner.gui.swing.action.ActionDispose;
import org.wikipediacleaner.gui.swing.basic.BasicWindow;
import org.wikipediacleaner.gui.swing.basic.Utilities;
import org.wikipediacleaner.i18n.GT;
import org.wikipediacleaner.utils.Configuration;
import org.wikipediacleaner.utils.ConfigurationValueShortcut;
/**
* Options Window of WikipediaCleaner.
*/
public class OptionsWindow
extends BasicWindow {
public final static Integer WINDOW_VERSION = Integer.valueOf(4);
public final List<OptionsPanel> panels = new ArrayList<OptionsPanel>();
private JButton buttonApply;
private JButton buttonCancel;
private JButton buttonDefault;
private JButton buttonValidate;
/**
* Create and display an OptionsWindow.
*/
public static void createOptionsWindow() {
createWindow(
"OptionsWindow",
null,
WindowConstants.DISPOSE_ON_CLOSE,
OptionsWindow.class,
null);
}
/* (non-Javadoc)
* @see org.wikipediacleaner.gui.swing.basic.BasicWindow#getTitle()
*/
@Override
public String getTitle() {
return GT._("Options");
}
/**
* @return Window components.
*/
@Override
protected Component createComponents() {
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
panel.add(createOptionsComponents());
panel.add(createCommandComponents());
return panel;
}
/**
* @return Login components.
*/
private Component createOptionsComponents() {
JPanel panel = new JPanel(new BorderLayout());
// Create tabbed pane
JTabbedPane pane = new JTabbedPane();
GeneralOptionsPanel generalOptions = new GeneralOptionsPanel();
pane.addTab(GT._("General"), generalOptions);
panels.add(generalOptions);
LimitOptionsPanel limitOptions = new LimitOptionsPanel();
pane.addTab(GT._("Limits"), limitOptions);
panels.add(limitOptions);
AnalysisOptionsPanel analysisOptions = new AnalysisOptionsPanel();
pane.addTab(GT._("Full analysis"), analysisOptions);
panels.add(analysisOptions);
SortingOptionsPanel sortingOptions = new SortingOptionsPanel();
pane.addTab(GT._("Sorting"), sortingOptions);
panels.add(sortingOptions);
FormattingOptionsPanel formattingOptions = new FormattingOptionsPanel();
pane.addTab(GT._("Formatting"), formattingOptions);
panels.add(formattingOptions);
ShortcutOptionsPanel shortcutOptions = new ShortcutOptionsPanel();
pane.addTab(GT._("Shortcuts"), shortcutOptions);
panels.add(shortcutOptions);
DebugOptionsPanel debugOptions = new DebugOptionsPanel();
pane.addTab(GT._("Debug"), debugOptions);
panels.add(debugOptions);
TranslationOptionsPanel translationOptions = new TranslationOptionsPanel();
pane.addTab(GT._("Translation"), translationOptions);
panels.add(translationOptions);
panel.add(pane);
return panel;
}
/**
* @return Login components.
*/
private Component createCommandComponents() {
JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER));
// Apply button
buttonApply = Utilities.createJButton(
GT._("Apply"),
ConfigurationValueShortcut.APPLY);
buttonApply.addActionListener(EventHandler.create(
ActionListener.class, this, "actionApply"));
panel.add(buttonApply);
// Validate button
buttonValidate = Utilities.createJButton(
GT._("Validate"),
ConfigurationValueShortcut.VALIDATE);
buttonValidate.addActionListener(EventHandler.create(
ActionListener.class, this, "actionValidate"));
panel.add(buttonValidate);
// Cancel button
buttonCancel = ActionDispose.createButton(getParentComponent(), true, true);
panel.add(buttonCancel);
// Restore defaults button
buttonDefault = Utilities.createJButton(
GT._("Restore defaults"),
ConfigurationValueShortcut.RESTORE_DEFAULTS);
buttonDefault.addActionListener(EventHandler.create(
ActionListener.class, this, "actionDefault"));
panel.add(buttonDefault);
return panel;
}
/**
* Action called when Apply button is pressed.
*/
public void actionApply() {
for (OptionsPanel panel : panels) {
panel.apply();
}
Configuration config = Configuration.getConfiguration();
config.updateConfiguration();
}
/**
* Action called when Default button is pressed.
*/
public void actionDefault() {
for (OptionsPanel panel : panels) {
panel.defaultValues();
}
}
/**
* Action called when Validate button is pressed.
*/
public void actionValidate() {
actionApply();
dispose();
}
}