/* * 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.BorderLayout; import java.awt.Color; 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 java.awt.event.ActionListener; import java.beans.EventHandler; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextField; import javax.swing.JTextPane; import javax.swing.ScrollPaneConstants; import javax.swing.SwingConstants; import javax.swing.WindowConstants; import javax.swing.border.TitledBorder; import javax.swing.text.BadLocationException; import org.wikipediacleaner.api.constants.EnumWikipedia; import org.wikipediacleaner.api.data.DataManager; import org.wikipediacleaner.api.data.Page; 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.MWPane; import org.wikipediacleaner.gui.swing.component.MWPaneBasicFormatter; import org.wikipediacleaner.gui.swing.worker.NewSectionWorker; import org.wikipediacleaner.i18n.GT; import org.wikipediacleaner.utils.Configuration; import org.wikipediacleaner.utils.ConfigurationValueString; /** * A window to create a new section. */ public class NewSectionWindow extends BasicWindow { public final static Integer WINDOW_VERSION = Integer.valueOf(2); Page page; Page articlePage; String articleText; private JTextField textTitle; private JCheckBox chkForceWatch; private JButton buttonSignature; private JTextPane textNewSection; private MWPane textArticle; private JButton buttonValidate; private JButton buttonCancel; /** * Create and display a NewSectionWindow. * * @param page Page name. * @param articleText Text of the article. * @param articleTitle Title of the article. * @param wikipedia Wikipedia. */ public static void createNewSectionWindow( final Page page, final String articleText, final String articleTitle, final EnumWikipedia wikipedia) { createWindow( "NewSectionWindow", wikipedia, WindowConstants.DISPOSE_ON_CLOSE, NewSectionWindow.class, new DefaultBasicWindowListener() { @Override public void initializeWindow(BasicWindow window) { if (window instanceof NewSectionWindow) { NewSectionWindow newSection = (NewSectionWindow) window; newSection.page = page; newSection.articleText = articleText; newSection.articlePage = DataManager.getPage(wikipedia, articleTitle, null, null, null); newSection.articlePage.setContents(articleText); } } }); } /* (non-Javadoc) * @see org.wikipediacleaner.gui.swing.basic.BasicWindow#getTitle() */ @Override public String getTitle() { return GT._("New section in {0}", page.getTitle()); } /** * @return Window components. */ @Override protected Component createComponents() { JPanel panel = new JPanel(new GridBagLayout()); JPanel panelComment = new JPanel(new GridBagLayout()); panelComment.setBorder(new TitledBorder(GT._("Comment"))); // 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; // Discussion title textTitle = new JTextField(60); JLabel labelTitle = Utilities.createJLabel(GT._("&Title")); labelTitle.setLabelFor(textTitle); labelTitle.setHorizontalAlignment(SwingConstants.TRAILING); constraints.gridx = 0; constraints.weightx = 0; panelComment.add(labelTitle, constraints); constraints.gridx++; constraints.weightx = 1; panelComment.add(textTitle, constraints); constraints.gridy++; // Force watching and signature buttonSignature = Utilities.createJButton(GT._("&Signature"), null); buttonSignature.addActionListener(EventHandler.create( ActionListener.class, this, "actionSignature")); constraints.gridx = 0; constraints.weightx = 0; panelComment.add(buttonSignature, constraints); chkForceWatch = Utilities.createJCheckBox( GT._("&Force watching page"), false); constraints.gridx++; constraints.weightx = 1; panelComment.add(chkForceWatch, constraints); constraints.gridy++; // Contents textNewSection = new JTextPane(); textNewSection.setBackground(Color.WHITE); textNewSection.setEditable(true); JScrollPane scrollContents = new JScrollPane(textNewSection); scrollContents.setMinimumSize(new Dimension(100, 100)); scrollContents.setPreferredSize(new Dimension(1000, 500)); scrollContents.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); constraints.fill = GridBagConstraints.BOTH; constraints.gridwidth = 2; constraints.gridx = 0; constraints.weighty = 1; constraints.weightx = 1; panelComment.add(scrollContents, constraints); constraints.gridy++; constraints.fill = GridBagConstraints.BOTH; constraints.gridwidth = 1; constraints.gridx = 0; constraints.gridy = 0; constraints.weightx = 1; constraints.weighty = 1; panel.add(panelComment, constraints); constraints.gridy++; // Article contents if ((articleText != null) && (articleText.length() > 0)) { textArticle = new MWPane(getWikipedia(), articlePage, this); textArticle.setText(articleText); textArticle.setFormatter(new MWPaneBasicFormatter()); textArticle.setEditable(false); textArticle.resetAttributes(); JScrollPane scrollText = new JScrollPane(textArticle); scrollText.setMinimumSize(new Dimension(100, 100)); scrollText.setPreferredSize(new Dimension(1000, 300)); scrollText.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); JPanel panelText = new JPanel(new BorderLayout()); panelText.setBorder(new TitledBorder(GT._("Article contents"))); panelText.add(scrollText); panel.add(panelText, constraints); constraints.gridy++; } // Buttons JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); buttonValidate = Utilities.createJButton(GT._("&Validate"), null); buttonValidate.addActionListener( EventHandler.create(ActionListener.class, this, "actionValidate")); buttonPanel.add(buttonValidate); buttonCancel = Utilities.createJButton(GT._("&Cancel"), null); buttonCancel.addActionListener(EventHandler.create( ActionListener.class, this, "dispose")); buttonPanel.add(buttonCancel); constraints.fill = GridBagConstraints.NONE; constraints.gridwidth = 2; constraints.gridx = 0; constraints.weightx = 1; constraints.weighty = 0; panel.add(buttonPanel, constraints); constraints.gridy++; return panel; } /** * Action called when Validate button is pressed. */ public void actionValidate() { String section = textTitle.getText().trim(); String text = textNewSection.getText().trim(); if (("".equals(section)) || ("".equals(text))) { return; } new NewSectionWorker( getWikipedia(), this, page, section, text, chkForceWatch.isSelected()).start(); } /** * Action called when Signature button is pressed. */ public void actionSignature() { Configuration config = Configuration.getConfiguration(); try { textNewSection.getDocument().insertString( textNewSection.getCaretPosition(), config.getString( null, ConfigurationValueString.SIGNATURE), null); } catch (BadLocationException e) { // } } }