/*
* 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;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.ScrollPaneConstants;
import javax.swing.SwingConstants;
import javax.swing.WindowConstants;
import org.wikipediacleaner.api.constants.EnumWikipedia;
import org.wikipediacleaner.gui.swing.action.ActionDispose;
import org.wikipediacleaner.gui.swing.basic.BasicWindow;
import org.wikipediacleaner.gui.swing.basic.DefaultBasicWindowListener;
import org.wikipediacleaner.gui.swing.basic.Utilities;
import org.wikipediacleaner.gui.swing.component.HTMLPane;
import org.wikipediacleaner.i18n.GT;
/**
* A window to show information.
*/
public class InformationWindow
extends BasicWindow {
String title;
String information;
boolean html;
JLabel lblTitle;
JTextPane textPane;
HTMLPane textInformation;
private JButton buttonClose;
/**
* Create and display an InformationWindow.
*
* @param title Title.
* @param information Information.
* @param html True if information is in HTML format.
* @param wikipedia Wikipedia.
*/
public static void createInformationWindow(
final String title,
final String information,
final boolean html,
final EnumWikipedia wikipedia) {
createWindow(
"InformationWindow",
wikipedia,
WindowConstants.DISPOSE_ON_CLOSE,
InformationWindow.class,
new DefaultBasicWindowListener() {
@Override
public void initializeWindow(BasicWindow window) {
if (window instanceof InformationWindow) {
InformationWindow info = (InformationWindow) window;
info.title = title;
info.information = information;
info.html = html;
}
}
@Override
public void displayWindow(BasicWindow window) {
if (window instanceof InformationWindow) {
InformationWindow info = (InformationWindow) window;
info.updateInformation();
}
}
});
}
/**
* Update information.
*/
void updateInformation() {
lblTitle.setText(title);
if (html) {
textInformation.setText(information);
} else {
textPane.setText(information);
}
}
/* (non-Javadoc)
* @see org.wikipediacleaner.gui.swing.basic.BasicWindow#getTitle()
*/
@Override
public String getTitle() {
return GT._("Information");
}
/**
* @return Window components.
*/
@Override
protected Component createComponents() {
JPanel panel = new JPanel(new GridBagLayout());
// Initialize constraints
GridBagConstraints constraints = new GridBagConstraints();
constraints.fill = GridBagConstraints.HORIZONTAL;
constraints.gridheight = 1;
constraints.gridwidth = 1;
constraints.gridx = 0;
constraints.gridy = 0;
constraints.insets = new Insets(2, 2, 2, 2);
constraints.ipadx = 0;
constraints.ipady = 0;
constraints.weightx = 0;
constraints.weighty = 0;
// Title
lblTitle = Utilities.createJLabel(title);
lblTitle.setHorizontalAlignment(SwingConstants.LEADING);
constraints.gridx = 0;
constraints.weightx = 0;
panel.add(lblTitle, constraints);
constraints.gridy++;
// Information
Component component = null;
if (html) {
textInformation = HTMLPane.createHTMLPane(null);
component = textInformation;
} else {
textPane = new JTextPane();
textPane.setEditable(false);
component = textPane;
}
JScrollPane scrollPane = new JScrollPane(component);
scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
component = scrollPane;
component.setPreferredSize(new Dimension(500, 500));
component.setMinimumSize(new Dimension(100, 100));
lblTitle.setLabelFor(component);
constraints.fill = GridBagConstraints.BOTH;
constraints.gridx = 0;
constraints.weighty = 1;
constraints.weightx = 1;
panel.add(component, constraints);
constraints.gridy++;
// Buttons
JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
buttonClose = ActionDispose.createButton(getParentComponent(), true, false);
buttonPanel.add(buttonClose);
constraints.fill = GridBagConstraints.NONE;
constraints.gridx = 0;
constraints.weightx = 1;
constraints.weighty = 0;
panel.add(buttonPanel, constraints);
constraints.gridy++;
return panel;
}
}