Java tutorial
/* * Created on 17-Feb-2006 * Copyright (C) 2006 by Andrea Vacondio. * * This program is free software; you can redistribute it and/or modify it under the terms of the * GNU General Public License as published by the Free Software Foundation; * either version 2 of the License. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * You should have received a copy of the GNU General Public License along with this program; * if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package org.pdfsam.plugin.split.GUI; import java.awt.Component; import java.awt.Container; import java.awt.Dimension; import java.awt.FocusTraversalPolicy; import java.awt.GridLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import javax.swing.BorderFactory; import javax.swing.ButtonGroup; import javax.swing.ButtonModel; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JFileChooser; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.JTextField; import javax.swing.SpringLayout; import org.apache.log4j.Logger; import org.dom4j.Element; import org.dom4j.Node; import org.pdfsam.console.business.dto.commands.SplitParsedCommand; import org.pdfsam.guiclient.business.listeners.EnterDoClickListener; import org.pdfsam.guiclient.commons.business.listeners.CompressCheckBoxItemListener; import org.pdfsam.guiclient.commons.components.CommonComponentsFactory; import org.pdfsam.guiclient.commons.components.JPdfVersionCombo; import org.pdfsam.guiclient.commons.components.sharedchooser.SharedJFileChooser; import org.pdfsam.guiclient.commons.components.sharedchooser.SharedJFileChooserType; import org.pdfsam.guiclient.commons.models.SimplePdfSelectionTableModel; import org.pdfsam.guiclient.commons.panels.JPdfSelectionPanel; import org.pdfsam.guiclient.configuration.Configuration; import org.pdfsam.guiclient.dto.PdfSelectionTableItem; import org.pdfsam.guiclient.dto.StringItem; import org.pdfsam.guiclient.exceptions.LoadJobException; import org.pdfsam.guiclient.exceptions.SaveJobException; import org.pdfsam.guiclient.gui.components.JHelpLabel; import org.pdfsam.guiclient.plugins.interfaces.AbstractPlugablePanel; import org.pdfsam.i18n.GettextResource; import org.pdfsam.plugin.split.components.JBLevelCombo; import org.pdfsam.plugin.split.components.JSplitRadioButton; import org.pdfsam.plugin.split.components.JSplitRadioButtonModel; import org.pdfsam.plugin.split.components.JSplitSizeCombo; import org.pdfsam.plugin.split.listeners.RadioListener; import org.pdfsam.plugin.split.listeners.RunButtonActionListener; /** * Plugable JPanel provides a GUI for split functions. * * @author Andrea Vacondio * @see javax.swing.JPanel */ public class SplitMainGUI extends AbstractPlugablePanel { private static final long serialVersionUID = -5907189950338614835L; private static final Logger log = Logger.getLogger(SplitMainGUI.class.getPackage().getName()); private JTextField outPrefixText = CommonComponentsFactory.getInstance() .createTextField(CommonComponentsFactory.PREFIX_TEXT_FIELD_TYPE_FULL_MENU); private SpringLayout outputPanelLayout; private SpringLayout destinationPanelLayout; private JTextField destinationFolderText = CommonComponentsFactory.getInstance() .createTextField(CommonComponentsFactory.DESTINATION_TEXT_FIELD_TYPE); private JTextField thisPageTextField = CommonComponentsFactory.getInstance() .createTextField(CommonComponentsFactory.SIMPLE_TEXT_FIELD_TYPE); private JTextField nPagesTextField = CommonComponentsFactory.getInstance() .createTextField(CommonComponentsFactory.SIMPLE_TEXT_FIELD_TYPE); private JHelpLabel checksHelpLabel; private SpringLayout optionsPaneLayout; private JHelpLabel prefixHelpLabel; private JHelpLabel destinationHelpLabel; private SpringLayout splitSpringLayout; private String splitType = ""; private JPdfVersionCombo versionCombo = new JPdfVersionCombo(true); private Configuration config; private JPdfSelectionPanel selectionPanel = new JPdfSelectionPanel(JPdfSelectionPanel.SINGLE_SELECTABLE_FILE, SimplePdfSelectionTableModel.DEFAULT_SHOWED_COLUMNS_NUMBER, false, false); private JSplitSizeCombo splitSizeCombo = new JSplitSizeCombo(); private JBLevelCombo bLevelCombo = new JBLevelCombo(selectionPanel); // button private final JButton browseDestButton = CommonComponentsFactory.getInstance() .createButton(CommonComponentsFactory.BROWSE_BUTTON_TYPE); private final JButton runButton = CommonComponentsFactory.getInstance() .createButton(CommonComponentsFactory.RUN_BUTTON_TYPE); // key_listeners private final EnterDoClickListener browsedEnterkeyListener = new EnterDoClickListener(browseDestButton); private final EnterDoClickListener runEnterkeyListener = new EnterDoClickListener(runButton); // split_radio private final JSplitRadioButton burstRadio = new JSplitRadioButton(SplitParsedCommand.S_BURST); private final JSplitRadioButton everyNRadio = new JSplitRadioButton(SplitParsedCommand.S_NSPLIT); private final JSplitRadioButton evenRadio = new JSplitRadioButton(SplitParsedCommand.S_EVEN); private final JSplitRadioButton oddRadio = new JSplitRadioButton(SplitParsedCommand.S_ODD); private final JSplitRadioButton thisPageRadio = new JSplitRadioButton(SplitParsedCommand.S_SPLIT); private final JSplitRadioButton sizeRadio = new JSplitRadioButton(SplitParsedCommand.S_SIZE); private final JSplitRadioButton bookmarksLevel = new JSplitRadioButton(SplitParsedCommand.S_BLEVEL); private RadioListener radioListener; // radio private final JRadioButton sameAsSourceRadio = new JRadioButton(); private final JRadioButton chooseAFolderRadio = new JRadioButton(); private ButtonGroup splitOptionsRadioGroup; // checks private final JCheckBox overwriteCheckbox = CommonComponentsFactory.getInstance() .createCheckBox(CommonComponentsFactory.OVERWRITE_CHECKBOX_TYPE); private final JCheckBox outputCompressedCheck = CommonComponentsFactory.getInstance() .createCheckBox(CommonComponentsFactory.COMPRESS_CHECKBOX_TYPE); // focus policy private final SplitFocusPolicy splitFocusPolicy = new SplitFocusPolicy(); // panels private final JPanel splitOptionsPanel = new JPanel(); private final JPanel destinationPanel = new JPanel(); private final JPanel outputOptionsPanel = new JPanel(); private final JPanel splitTypesPanel = new JPanel(); // labels private final JLabel outPrefixLabel = new JLabel(); private final JLabel outputVersionLabel = CommonComponentsFactory.getInstance() .createLabel(CommonComponentsFactory.PDF_VERSION_LABEL); private final String PLUGIN_AUTHOR = "Andrea Vacondio"; private final String PLUGIN_VERSION = "0.5.7"; /** * Constructor * */ public SplitMainGUI() { super(); initialize(); } private void initialize() { config = Configuration.getInstance(); setPanelIcon("/images/split.png"); setPreferredSize(new Dimension(500, 570)); // splitSpringLayout = new SpringLayout(); setLayout(splitSpringLayout); add(selectionPanel); // SPLIT_SECTION optionsPaneLayout = new SpringLayout(); splitOptionsPanel.setLayout(optionsPaneLayout); splitOptionsPanel.setBorder(BorderFactory .createTitledBorder(GettextResource.gettext(config.getI18nResourceBundle(), "Split options"))); add(splitOptionsPanel); GridLayout splitOptionsLayout = new GridLayout(0, 3, 5, 5); splitTypesPanel.setLayout(splitOptionsLayout); burstRadio.setText( GettextResource.gettext(config.getI18nResourceBundle(), "Burst (split into single pages)")); everyNRadio.setText(GettextResource.gettext(config.getI18nResourceBundle(), "Split every \"n\" pages")); evenRadio.setText(GettextResource.gettext(config.getI18nResourceBundle(), "Split even pages")); oddRadio.setText(GettextResource.gettext(config.getI18nResourceBundle(), "Split odd pages")); nPagesTextField.setEnabled(false); thisPageRadio.setText(GettextResource.gettext(config.getI18nResourceBundle(), "Split after these pages")); sizeRadio.setText(GettextResource.gettext(config.getI18nResourceBundle(), "Split at this size")); bookmarksLevel.setText(GettextResource.gettext(config.getI18nResourceBundle(), "Split by bookmarks level")); thisPageTextField.setEnabled(false); splitSizeCombo.setEnabled(false); bLevelCombo.setEnabled(false); splitTypesPanel.add(burstRadio); splitTypesPanel.add(thisPageRadio); splitTypesPanel.add(thisPageTextField); splitTypesPanel.add(evenRadio); splitTypesPanel.add(everyNRadio); splitTypesPanel.add(nPagesTextField); splitTypesPanel.add(oddRadio); splitTypesPanel.add(sizeRadio); splitTypesPanel.add(splitSizeCombo); splitTypesPanel.add(new JLabel()); splitTypesPanel.add(bookmarksLevel); splitTypesPanel.add(bLevelCombo); splitOptionsPanel.add(splitTypesPanel); String helpText = "<html><body><b>" + GettextResource.gettext(config.getI18nResourceBundle(), "Split options") + "</b><ul>" + "<li><b>" + GettextResource.gettext(config.getI18nResourceBundle(), "Burst") + ":</b> " + GettextResource.gettext(config.getI18nResourceBundle(), "Explode the pdf document into single pages") + ".</li>" + "<li><b>" + GettextResource.gettext(config.getI18nResourceBundle(), "Split every \"n\" pages") + ":</b> " + GettextResource.gettext(config.getI18nResourceBundle(), "Split the document every \"n\" pages") + ".</li>" + "<li><b>" + GettextResource.gettext(config.getI18nResourceBundle(), "Split even pages") + ":</b> " + GettextResource.gettext(config.getI18nResourceBundle(), "Split the document every even page") + ".</li>" + "<li><b>" + GettextResource.gettext(config.getI18nResourceBundle(), "Split odd pages") + ":</b> " + GettextResource.gettext(config.getI18nResourceBundle(), "Split the document every odd page") + ".</li>" + "<li><b>" + GettextResource.gettext(config.getI18nResourceBundle(), "Split after these pages") + ":</b> " + GettextResource.gettext(config.getI18nResourceBundle(), "Split the document after page numbers (num1-num2-num3..)") + ".</li>" + "<li><b>" + GettextResource.gettext(config.getI18nResourceBundle(), "Split at this size") + ":</b> " + GettextResource.gettext(config.getI18nResourceBundle(), "Split the document in files of the given size (roughly)") + ".</li>" + "<li><b>" + GettextResource.gettext(config.getI18nResourceBundle(), "Split by bookmarks level") + ":</b> " + GettextResource.gettext(config.getI18nResourceBundle(), "Split the document at pages referred by bookmarks of the given level") + ".</li>" + "</ul></body></html>"; checksHelpLabel = new JHelpLabel(helpText, true); splitOptionsPanel.add(checksHelpLabel); // END_SPLIT_SECTION // RADIO_LISTENERS /* This listeners enable or disable text field based on what you select */ radioListener = new RadioListener(this, nPagesTextField, thisPageTextField, splitSizeCombo, bLevelCombo); burstRadio.setActionCommand(RadioListener.DISABLE_ALL); burstRadio.addActionListener(radioListener); everyNRadio.setActionCommand(RadioListener.ENABLE_FIRST); everyNRadio.addActionListener(radioListener); evenRadio.setActionCommand(RadioListener.DISABLE_ALL); evenRadio.addActionListener(radioListener); oddRadio.setActionCommand(RadioListener.DISABLE_ALL); oddRadio.addActionListener(radioListener); thisPageRadio.setActionCommand(RadioListener.ENABLE_SECOND); thisPageRadio.addActionListener(radioListener); sizeRadio.setActionCommand(RadioListener.ENABLE_THIRD); sizeRadio.addActionListener(radioListener); bookmarksLevel.setActionCommand(RadioListener.ENABLE_FOURTH); bookmarksLevel.addActionListener(radioListener); // END_RADIO_LISTENERS // DESTINATION_PANEL destinationPanelLayout = new SpringLayout(); destinationPanel.setLayout(destinationPanelLayout); destinationPanel.setBorder(BorderFactory .createTitledBorder(GettextResource.gettext(config.getI18nResourceBundle(), "Destination folder"))); add(destinationPanel); // END_DESTINATION_PANEL // DESTINATION_RADIOS sameAsSourceRadio.setText(GettextResource.gettext(config.getI18nResourceBundle(), "Same as source")); destinationPanel.add(sameAsSourceRadio); chooseAFolderRadio.setSelected(true); chooseAFolderRadio.setText(GettextResource.gettext(config.getI18nResourceBundle(), "Choose a folder")); destinationPanel.add(chooseAFolderRadio); // END_DESTINATION_RADIOS // RADIOGROUP splitOptionsRadioGroup = new ButtonGroup(); splitOptionsRadioGroup.add(burstRadio); splitOptionsRadioGroup.add(everyNRadio); splitOptionsRadioGroup.add(evenRadio); splitOptionsRadioGroup.add(oddRadio); splitOptionsRadioGroup.add(thisPageRadio); splitOptionsRadioGroup.add(sizeRadio); splitOptionsRadioGroup.add(bookmarksLevel); final ButtonGroup outputRadioGroup = new ButtonGroup(); outputRadioGroup.add(sameAsSourceRadio); outputRadioGroup.add(chooseAFolderRadio); // END_RADIOGROUP destinationPanel.add(destinationFolderText); destinationPanel.add(overwriteCheckbox); destinationPanel.add(outputCompressedCheck); outputCompressedCheck.addItemListener(new CompressCheckBoxItemListener(versionCombo)); outputCompressedCheck.setSelected(true); destinationPanel.add(versionCombo); destinationPanel.add(outputVersionLabel); browseDestButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JFileChooser fileChooser = SharedJFileChooser.getInstance(SharedJFileChooserType.NO_FILTER, JFileChooser.DIRECTORIES_ONLY, destinationFolderText.getText()); if (fileChooser.showOpenDialog(browseDestButton.getParent()) == JFileChooser.APPROVE_OPTION) { File chosenFile = fileChooser.getSelectedFile(); if (chosenFile != null) { destinationFolderText.setText(chosenFile.getAbsolutePath()); } } } }); destinationPanel.add(browseDestButton); // HELP_LABEL_DESTINATION String helpTextDest = "<html><body><b>" + GettextResource.gettext(config.getI18nResourceBundle(), "Destination output directory") + "</b>" + "<p>" + GettextResource.gettext(config.getI18nResourceBundle(), "Use the same output folder as the input file or choose a folder.") + "</p>" + "<p>" + GettextResource.gettext(config.getI18nResourceBundle(), "To choose a folder browse or enter the full path to the destination output directory.") + "</p>" + "<p>" + GettextResource.gettext(config.getI18nResourceBundle(), "Check the box if you want to overwrite the output files if they already exist.") + "</p>" + "<p>" + GettextResource.gettext(config.getI18nResourceBundle(), "Check the box if you want compressed output files.") + " " + GettextResource.gettext(config.getI18nResourceBundle(), "PDF version 1.5 or above.") + "</p>" + "<p>" + GettextResource.gettext(config.getI18nResourceBundle(), "Set the pdf version of the ouput document.") + "</p>" + "</body></html>"; destinationHelpLabel = new JHelpLabel(helpTextDest, true); destinationPanel.add(destinationHelpLabel); // END_HELP_LABEL_DESTINATION // S_PANEL outputOptionsPanel.setBorder(BorderFactory .createTitledBorder(GettextResource.gettext(config.getI18nResourceBundle(), "Output options"))); outputPanelLayout = new SpringLayout(); outputOptionsPanel.setLayout(outputPanelLayout); add(outputOptionsPanel); outPrefixLabel .setText(GettextResource.gettext(config.getI18nResourceBundle(), "Output file names prefix:")); outputOptionsPanel.add(outPrefixLabel); outPrefixText.setPreferredSize(new Dimension(180, 20)); outputOptionsPanel.add(outPrefixText); // END_S_PANEL // HELP_LABEL_PREFIX String helpTextPrefix = "<html><body><b>" + GettextResource.gettext(config.getI18nResourceBundle(), "Output files prefix") + "</b>" + "<p> " + GettextResource.gettext(config.getI18nResourceBundle(), "If it contains \"[CURRENTPAGE]\", \"[TIMESTAMP]\", \"[FILENUMBER]\" or \"[BOOKMARK_NAME]\" it performs variable substitution.") + "</p>" + "<p> " + GettextResource.gettext(config.getI18nResourceBundle(), "Ex. prefix_[BASENAME]_[CURRENTPAGE] generates prefix_FileName_005.pdf.") + "</p>" + "<br><p> " + GettextResource.gettext(config.getI18nResourceBundle(), "If it doesn't contain \"[CURRENTPAGE]\", \"[TIMESTAMP]\" or \"[FILENUMBER]\" it generates oldstyle output file names.") + "</p>" + "<br><p> " + GettextResource.gettext(config.getI18nResourceBundle(), "Available variables") + ": [CURRENTPAGE], [TIMESTAMP], [BASENAME], [FILENUMBER], [BOOKMARK_NAME].</p>" + "</body></html>"; prefixHelpLabel = new JHelpLabel(helpTextPrefix, true); outputOptionsPanel.add(prefixHelpLabel); // END_HELP_LABEL_PREFIX // RUN_BUTTON // listener runButton.addActionListener(new RunButtonActionListener(this)); runButton.setToolTipText(GettextResource.gettext(config.getI18nResourceBundle(), "Split selected file")); runButton.setMargin(new Insets(5, 5, 5, 5)); runButton.setSize(new Dimension(88, 25)); add(runButton); // END_RUN_BUTTON // RADIO_LISTENERS sameAsSourceRadio.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { destinationFolderText.setEnabled(false); browseDestButton.setEnabled(false); } }); chooseAFolderRadio.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { destinationFolderText.setEnabled(true); browseDestButton.setEnabled(true); } }); // END_RADIO_LISTENERS // ENTER_KEY_LISTENERS browseDestButton.addKeyListener(browsedEnterkeyListener); runButton.addKeyListener(runEnterkeyListener); outPrefixText.addKeyListener(runEnterkeyListener); // END_ENTER_KEY_LISTENERS setLayout(); } /** * @return Returns the Plugin author. */ public String getPluginAuthor() { return PLUGIN_AUTHOR; } /** * @return Returns the Plugin name. */ public String getPluginName() { return GettextResource.gettext(config.getI18nResourceBundle(), "Split"); } /** * @return Returns the version. */ public String getVersion() { return PLUGIN_VERSION; } public Node getJobNode(Node arg0, boolean savePasswords) throws SaveJobException { try { if (arg0 != null) { Element fileSource = ((Element) arg0).addElement("source"); PdfSelectionTableItem[] items = selectionPanel.getTableRows(); if (items != null && items.length > 0) { fileSource.addAttribute("value", items[0].getInputFile().getAbsolutePath()); if (savePasswords) { fileSource.addAttribute("password", items[0].getPassword()); } } Element splitOption = ((Element) arg0).addElement("split_option"); if (splitOptionsRadioGroup.getSelection() != null) { splitOption.addAttribute("value", ((JSplitRadioButtonModel) splitOptionsRadioGroup.getSelection()).getSplitCommand()); } Element splitNpages = ((Element) arg0).addElement("npages"); splitNpages.addAttribute("value", nPagesTextField.getText()); Element splitThispage = ((Element) arg0).addElement("thispage"); splitThispage.addAttribute("value", thisPageTextField.getText()); Element splitSize = ((Element) arg0).addElement("splitsize"); splitSize.addAttribute("value", splitSizeCombo.getSelectedItem().toString()); Element bookLevel = ((Element) arg0).addElement("bookmarkslevel"); if (bLevelCombo.getSelectedItem() != null) { bookLevel.addAttribute("value", bLevelCombo.getSelectedItem().toString()); } Element fileDestination = ((Element) arg0).addElement("destination"); fileDestination.addAttribute("value", destinationFolderText.getText()); Element filePrefix = ((Element) arg0).addElement("prefix"); filePrefix.addAttribute("value", outPrefixText.getText()); Element file_overwrite = ((Element) arg0).addElement("overwrite"); file_overwrite.addAttribute("value", overwriteCheckbox.isSelected() ? TRUE : FALSE); Element fileCompress = ((Element) arg0).addElement("compressed"); fileCompress.addAttribute("value", outputCompressedCheck.isSelected() ? TRUE : FALSE); Element pdfVersion = ((Element) arg0).addElement("pdfversion"); pdfVersion.addAttribute("value", ((StringItem) versionCombo.getSelectedItem()).getId()); } return arg0; } catch (Exception ex) { throw new SaveJobException(ex); } } public void loadJobNode(Node arg0) throws LoadJobException { try { Node fileSource = (Node) arg0.selectSingleNode("source/@value"); if (fileSource != null && fileSource.getText().length() > 0) { Node filePwd = (Node) arg0.selectSingleNode("source/@password"); String password = null; if (filePwd != null && filePwd.getText().length() > 0) { password = filePwd.getText(); } selectionPanel.getLoader().addFile(new File(fileSource.getText()), password); } Node splitOption = (Node) arg0.selectSingleNode("split_option/@value"); if (splitOption != null) { if (splitOption.getText().equals(burstRadio.getSplitCommand())) burstRadio.doClick(); else if (splitOption.getText().equals(everyNRadio.getSplitCommand())) everyNRadio.doClick(); else if (splitOption.getText().equals(evenRadio.getSplitCommand())) evenRadio.doClick(); else if (splitOption.getText().equals(oddRadio.getSplitCommand())) oddRadio.doClick(); else if (splitOption.getText().equals(thisPageRadio.getSplitCommand())) thisPageRadio.doClick(); else if (splitOption.getText().equals(sizeRadio.getSplitCommand())) sizeRadio.doClick(); else if (splitOption.getText().equals(bookmarksLevel.getSplitCommand())) bookmarksLevel.doClick(); } Node splitNpages = (Node) arg0.selectSingleNode("npages/@value"); if (splitNpages != null) { nPagesTextField.setText(splitNpages.getText()); } Node splitThispage = (Node) arg0.selectSingleNode("thispage/@value"); if (splitThispage != null) { thisPageTextField.setText(splitThispage.getText()); } Node splitSize = (Node) arg0.selectSingleNode("splitsize/@value"); if (splitSize != null) { splitSizeCombo.setSelectedItem(splitSize.getText()); } Node bookLevel = (Node) arg0.selectSingleNode("bookmarkslevel/@value"); if (bookLevel != null) { bLevelCombo.setSelectedItem(bookLevel.getText()); } Node fileDestination = (Node) arg0.selectSingleNode("destination/@value"); if (fileDestination != null && fileDestination.getText().length() > 0) { destinationFolderText.setText(fileDestination.getText()); chooseAFolderRadio.doClick(); } else { sameAsSourceRadio.doClick(); } Node fileOverwrite = (Node) arg0.selectSingleNode("overwrite/@value"); if (fileOverwrite != null) { overwriteCheckbox.setSelected(TRUE.equals(fileOverwrite.getText())); } Node fileCompressed = (Node) arg0.selectSingleNode("compressed/@value"); if (fileCompressed != null && TRUE.equals(fileCompressed.getText())) { outputCompressedCheck.doClick(); } Node filePrefix = (Node) arg0.selectSingleNode("prefix/@value"); if (filePrefix != null) { outPrefixText.setText(filePrefix.getText()); } Node pdfVersion = (Node) arg0.selectSingleNode("pdfversion/@value"); if (pdfVersion != null) { for (int i = 0; i < versionCombo.getItemCount(); i++) { if (((StringItem) versionCombo.getItemAt(i)).getId().equals(pdfVersion.getText())) { versionCombo.setSelectedIndex(i); break; } } } log.info(GettextResource.gettext(config.getI18nResourceBundle(), "Split section loaded.")); } catch (Exception ex) { log.error(GettextResource.gettext(config.getI18nResourceBundle(), "Error: "), ex); } } /** * Set plugin layout for each component * */ private void setLayout() { splitSpringLayout.putConstraint(SpringLayout.SOUTH, selectionPanel, 115, SpringLayout.NORTH, this); splitSpringLayout.putConstraint(SpringLayout.EAST, selectionPanel, 0, SpringLayout.EAST, this); splitSpringLayout.putConstraint(SpringLayout.NORTH, selectionPanel, 0, SpringLayout.NORTH, this); splitSpringLayout.putConstraint(SpringLayout.WEST, selectionPanel, 0, SpringLayout.WEST, this); // LAYOUT splitSpringLayout.putConstraint(SpringLayout.SOUTH, splitOptionsPanel, 145, SpringLayout.NORTH, splitOptionsPanel); splitSpringLayout.putConstraint(SpringLayout.EAST, splitOptionsPanel, 0, SpringLayout.EAST, this); splitSpringLayout.putConstraint(SpringLayout.NORTH, splitOptionsPanel, 20, SpringLayout.SOUTH, selectionPanel); splitSpringLayout.putConstraint(SpringLayout.WEST, splitOptionsPanel, 0, SpringLayout.WEST, selectionPanel); splitSpringLayout.putConstraint(SpringLayout.SOUTH, destinationPanel, 160, SpringLayout.NORTH, destinationPanel); splitSpringLayout.putConstraint(SpringLayout.EAST, destinationPanel, 0, SpringLayout.EAST, splitOptionsPanel); splitSpringLayout.putConstraint(SpringLayout.NORTH, destinationPanel, 10, SpringLayout.SOUTH, splitOptionsPanel); splitSpringLayout.putConstraint(SpringLayout.WEST, destinationPanel, 0, SpringLayout.WEST, splitOptionsPanel); destinationPanelLayout.putConstraint(SpringLayout.SOUTH, sameAsSourceRadio, 25, SpringLayout.NORTH, sameAsSourceRadio); destinationPanelLayout.putConstraint(SpringLayout.NORTH, sameAsSourceRadio, 0, SpringLayout.NORTH, destinationPanel); destinationPanelLayout.putConstraint(SpringLayout.WEST, sameAsSourceRadio, 10, SpringLayout.WEST, destinationPanel); destinationPanelLayout.putConstraint(SpringLayout.SOUTH, chooseAFolderRadio, 0, SpringLayout.SOUTH, sameAsSourceRadio); destinationPanelLayout.putConstraint(SpringLayout.NORTH, chooseAFolderRadio, 0, SpringLayout.NORTH, sameAsSourceRadio); destinationPanelLayout.putConstraint(SpringLayout.WEST, chooseAFolderRadio, 20, SpringLayout.EAST, sameAsSourceRadio); destinationPanelLayout.putConstraint(SpringLayout.SOUTH, destinationFolderText, 50, SpringLayout.NORTH, destinationPanel); destinationPanelLayout.putConstraint(SpringLayout.NORTH, destinationFolderText, 30, SpringLayout.NORTH, destinationPanel); destinationPanelLayout.putConstraint(SpringLayout.EAST, destinationFolderText, -105, SpringLayout.EAST, destinationPanel); destinationPanelLayout.putConstraint(SpringLayout.WEST, destinationFolderText, 5, SpringLayout.WEST, destinationPanel); destinationPanelLayout.putConstraint(SpringLayout.SOUTH, overwriteCheckbox, 17, SpringLayout.NORTH, overwriteCheckbox); destinationPanelLayout.putConstraint(SpringLayout.NORTH, overwriteCheckbox, 5, SpringLayout.SOUTH, destinationFolderText); destinationPanelLayout.putConstraint(SpringLayout.WEST, overwriteCheckbox, 0, SpringLayout.WEST, destinationFolderText); destinationPanelLayout.putConstraint(SpringLayout.SOUTH, outputCompressedCheck, 17, SpringLayout.NORTH, outputCompressedCheck); destinationPanelLayout.putConstraint(SpringLayout.NORTH, outputCompressedCheck, 5, SpringLayout.SOUTH, overwriteCheckbox); destinationPanelLayout.putConstraint(SpringLayout.WEST, outputCompressedCheck, 0, SpringLayout.WEST, destinationFolderText); destinationPanelLayout.putConstraint(SpringLayout.SOUTH, outputVersionLabel, 17, SpringLayout.NORTH, outputVersionLabel); destinationPanelLayout.putConstraint(SpringLayout.NORTH, outputVersionLabel, 8, SpringLayout.SOUTH, outputCompressedCheck); destinationPanelLayout.putConstraint(SpringLayout.WEST, outputVersionLabel, 0, SpringLayout.WEST, destinationFolderText); destinationPanelLayout.putConstraint(SpringLayout.SOUTH, versionCombo, 0, SpringLayout.SOUTH, outputVersionLabel); destinationPanelLayout.putConstraint(SpringLayout.WEST, versionCombo, 2, SpringLayout.EAST, outputVersionLabel); destinationPanelLayout.putConstraint(SpringLayout.SOUTH, browseDestButton, 0, SpringLayout.SOUTH, destinationFolderText); destinationPanelLayout.putConstraint(SpringLayout.EAST, browseDestButton, -10, SpringLayout.EAST, destinationPanel); destinationPanelLayout.putConstraint(SpringLayout.NORTH, browseDestButton, -25, SpringLayout.SOUTH, destinationFolderText); destinationPanelLayout.putConstraint(SpringLayout.WEST, browseDestButton, -98, SpringLayout.EAST, destinationPanel); destinationPanelLayout.putConstraint(SpringLayout.SOUTH, destinationHelpLabel, -1, SpringLayout.SOUTH, destinationPanel); destinationPanelLayout.putConstraint(SpringLayout.EAST, destinationHelpLabel, -1, SpringLayout.EAST, destinationPanel); splitSpringLayout.putConstraint(SpringLayout.SOUTH, outputOptionsPanel, 55, SpringLayout.NORTH, outputOptionsPanel); splitSpringLayout.putConstraint(SpringLayout.EAST, outputOptionsPanel, 0, SpringLayout.EAST, destinationPanel); splitSpringLayout.putConstraint(SpringLayout.NORTH, outputOptionsPanel, 10, SpringLayout.SOUTH, destinationPanel); splitSpringLayout.putConstraint(SpringLayout.WEST, outputOptionsPanel, 0, SpringLayout.WEST, destinationPanel); outputPanelLayout.putConstraint(SpringLayout.SOUTH, outPrefixLabel, 20, SpringLayout.NORTH, outputOptionsPanel); outputPanelLayout.putConstraint(SpringLayout.NORTH, outPrefixLabel, 0, SpringLayout.NORTH, outputOptionsPanel); outputPanelLayout.putConstraint(SpringLayout.WEST, outPrefixLabel, 5, SpringLayout.WEST, outputOptionsPanel); outputPanelLayout.putConstraint(SpringLayout.SOUTH, outPrefixText, 0, SpringLayout.SOUTH, outPrefixLabel); outputPanelLayout.putConstraint(SpringLayout.WEST, outPrefixText, 10, SpringLayout.EAST, outPrefixLabel); outputPanelLayout.putConstraint(SpringLayout.EAST, outPrefixText, -30, SpringLayout.EAST, outputOptionsPanel); outputPanelLayout.putConstraint(SpringLayout.SOUTH, prefixHelpLabel, -1, SpringLayout.SOUTH, outputOptionsPanel); outputPanelLayout.putConstraint(SpringLayout.EAST, prefixHelpLabel, -1, SpringLayout.EAST, outputOptionsPanel); splitSpringLayout.putConstraint(SpringLayout.EAST, runButton, -11, SpringLayout.EAST, this); splitSpringLayout.putConstraint(SpringLayout.NORTH, runButton, 10, SpringLayout.SOUTH, outputOptionsPanel); // RADIO_LAYOUT optionsPaneLayout.putConstraint(SpringLayout.NORTH, splitTypesPanel, 0, SpringLayout.NORTH, splitOptionsPanel); optionsPaneLayout.putConstraint(SpringLayout.WEST, splitTypesPanel, 10, SpringLayout.WEST, splitOptionsPanel); optionsPaneLayout.putConstraint(SpringLayout.SOUTH, checksHelpLabel, -1, SpringLayout.SOUTH, splitOptionsPanel); optionsPaneLayout.putConstraint(SpringLayout.EAST, checksHelpLabel, -1, SpringLayout.EAST, splitOptionsPanel); } /** * @param splitType * The splitType to set. */ public void setSplitType(String splitType) { this.splitType = splitType; } public FocusTraversalPolicy getFocusPolicy() { return (FocusTraversalPolicy) splitFocusPolicy; } /** * * @author Andrea Vacondio Focus policy for split panel * */ public class SplitFocusPolicy extends FocusTraversalPolicy { public SplitFocusPolicy() { super(); } public Component getComponentAfter(Container CycleRootComp, Component aComponent) { if (aComponent.equals(selectionPanel.getAddFileButton())) { return selectionPanel.getClearButton(); } else if (aComponent.equals(selectionPanel.getClearButton())) { return burstRadio; } else if (aComponent.equals(burstRadio)) { return evenRadio; } else if (aComponent.equals(evenRadio)) { return oddRadio; } else if (aComponent.equals(oddRadio)) { return thisPageRadio; } else if (aComponent.equals(thisPageRadio)) { if (thisPageTextField.isEnabled()) { return thisPageTextField; } else { return everyNRadio; } } else if (aComponent.equals(thisPageTextField)) { return everyNRadio; } else if (aComponent.equals(everyNRadio)) { if (nPagesTextField.isEnabled()) { return nPagesTextField; } else { return sizeRadio; } } else if (aComponent.equals(nPagesTextField)) { return sizeRadio; } else if (aComponent.equals(sizeRadio)) { if (splitSizeCombo.isEnabled()) { return splitSizeCombo; } else { return bookmarksLevel; } } else if (aComponent.equals(splitSizeCombo) || aComponent.getParent().equals(splitSizeCombo)) { return bookmarksLevel; } else if (aComponent.equals(bookmarksLevel)) { if (bLevelCombo.isEnabled()) { return bLevelCombo.getLevelCombo(); } else { return sameAsSourceRadio; } } else if (aComponent.equals(bLevelCombo.getLevelCombo()) || aComponent.getParent().equals(bLevelCombo.getLevelCombo())) { if (bLevelCombo.getFillCombo().isEnabled()) { return bLevelCombo.getFillCombo(); } else { return sameAsSourceRadio; } } else if (aComponent.equals(bLevelCombo.getFillCombo())) { return sameAsSourceRadio; } else if (aComponent.equals(sameAsSourceRadio)) { return chooseAFolderRadio; } else if (aComponent.equals(chooseAFolderRadio)) { if (destinationFolderText.isEnabled()) { return destinationFolderText; } else { return overwriteCheckbox; } } else if (aComponent.equals(destinationFolderText)) { return browseDestButton; } else if (aComponent.equals(browseDestButton)) { return overwriteCheckbox; } else if (aComponent.equals(overwriteCheckbox)) { return outputCompressedCheck; } else if (aComponent.equals(outputCompressedCheck)) { return versionCombo; } else if (aComponent.equals(versionCombo)) { return outPrefixText; } else if (aComponent.equals(outPrefixText)) { return runButton; } else if (aComponent.equals(runButton)) { return selectionPanel.getAddFileButton(); } return selectionPanel.getAddFileButton(); } public Component getComponentBefore(Container CycleRootComp, Component aComponent) { if (aComponent.equals(selectionPanel.getAddFileButton())) { return runButton; } else if (aComponent.equals(runButton)) { return outPrefixText; } else if (aComponent.equals(outPrefixText)) { return versionCombo; } else if (aComponent.equals(versionCombo)) { return outputCompressedCheck; } else if (aComponent.equals(outputCompressedCheck)) { return overwriteCheckbox; } else if (aComponent.equals(overwriteCheckbox)) { if (browseDestButton.isEnabled()) { return browseDestButton; } else { return chooseAFolderRadio; } } else if (aComponent.equals(browseDestButton)) { return destinationFolderText; } else if (aComponent.equals(destinationFolderText)) { return chooseAFolderRadio; } else if (aComponent.equals(chooseAFolderRadio)) { return sameAsSourceRadio; } else if (aComponent.equals(sameAsSourceRadio)) { if (bLevelCombo.isEnabled()) { if (bLevelCombo.getFillCombo().isEnabled()) { return bLevelCombo.getFillCombo(); } else { return bLevelCombo.getLevelCombo(); } } else { return bookmarksLevel; } } else if (aComponent.equals(bLevelCombo.getLevelCombo()) || aComponent.getParent().equals(bLevelCombo.getLevelCombo())) { return bookmarksLevel; } else if (aComponent.equals(bLevelCombo.getFillCombo())) { return bLevelCombo.getLevelCombo(); } else if (aComponent.equals(bookmarksLevel)) { if (splitSizeCombo.isEnabled()) { return splitSizeCombo; } else { return sizeRadio; } } else if (aComponent.equals(splitSizeCombo) || aComponent.getParent().equals(splitSizeCombo)) { return sizeRadio; } else if (aComponent.equals(sizeRadio)) { if (nPagesTextField.isEnabled()) { return nPagesTextField; } else { return everyNRadio; } } else if (aComponent.equals(nPagesTextField)) { return everyNRadio; } else if (aComponent.equals(everyNRadio)) { if (thisPageTextField.isEnabled()) { return thisPageTextField; } else { return thisPageRadio; } } else if (aComponent.equals(thisPageTextField)) { return thisPageRadio; } else if (aComponent.equals(thisPageRadio)) { return oddRadio; } else if (aComponent.equals(oddRadio)) { return evenRadio; } else if (aComponent.equals(evenRadio)) { return burstRadio; } else if (aComponent.equals(burstRadio)) { return selectionPanel.getClearButton(); } else if (aComponent.equals(selectionPanel.getClearButton())) { return selectionPanel.getAddFileButton(); } return selectionPanel.getAddFileButton(); } public Component getDefaultComponent(Container CycleRootComp) { return selectionPanel.getAddFileButton(); } public Component getLastComponent(Container CycleRootComp) { return runButton; } public Component getFirstComponent(Container CycleRootComp) { return selectionPanel.getAddFileButton(); } } public void resetPanel() { selectionPanel.clearSelectionTable(); destinationFolderText.setText(""); versionCombo.resetComponent(); outputCompressedCheck.setSelected(false); overwriteCheckbox.setSelected(false); thisPageTextField.setText(""); nPagesTextField.setText(""); outPrefixText.setText("pdfsam_"); bLevelCombo.resetComponent(); ButtonModel bmodel = splitOptionsRadioGroup.getSelection(); if (bmodel != null) { bmodel.setSelected(false); } chooseAFolderRadio.setSelected(true); } /** * @return the outPrefixText */ public JTextField getOutPrefixText() { return outPrefixText; } /** * @return the destinationFolderText */ public JTextField getDestinationFolderText() { return destinationFolderText; } /** * @return the thisPageTextField */ public JTextField getThisPageTextField() { return thisPageTextField; } /** * @return the versionCombo */ public JPdfVersionCombo getVersionCombo() { return versionCombo; } /** * @return the selectionPanel */ public JPdfSelectionPanel getSelectionPanel() { return selectionPanel; } /** * @return the splitSizeCombo */ public JSplitSizeCombo getSplitSizeCombo() { return splitSizeCombo; } /** * @return the bLevelCombo */ public JBLevelCombo getbLevelCombo() { return bLevelCombo; } /** * @return the bookmarksLevel */ public JSplitRadioButton getBookmarksLevel() { return bookmarksLevel; } /** * @return the overwriteCheckbox */ public JCheckBox getOverwriteCheckbox() { return overwriteCheckbox; } /** * @return the splitType */ public String getSplitType() { return splitType; } /** * @return the sameAsSourceRadio */ public JRadioButton getSameAsSourceRadio() { return sameAsSourceRadio; } /** * @return the outputCompressedCheck */ public JCheckBox getOutputCompressedCheck() { return outputCompressedCheck; } /** * @return the nPagesTextField */ public JTextField getnPagesTextField() { return nPagesTextField; } }