/**
*
*/
package plugins.svg;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.print.PageFormat;
import javax.swing.AbstractAction;
import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import freemind.controller.Controller;
import freemind.main.Tools;
/**
* @author Andy
*
* Class is responsible for a dialog to input all pdf export parameters
* like page orientation or format
*/
public class ExportPdfDialog extends JDialog {
private static final String PORTRAIT = "portrait";
private static final String LANDSCAPE = "landscape";
private static final String PROP_PDF_PAGE_FORMAT = "pdf_page_format";
private static final String PROP_PDF_PAGE_ORIENTATION = "pdf_page_orientation";
/**
* Chosen format
*/
private String format;
/**
* list of available formats
*/
private String[] formatsCollection;
/**
* reference to the freemind controller
*/
private Controller controller;
/**
* chosen orientation
*/
private int orientation;
private JComboBox listBox;
private JRadioButton birdButtonLandscape;
private JRadioButton birdButtonPortrait;
private ButtonGroup group;
private boolean mResult = true;
/**
*
* @return the format of the page format as text "A3","A4" defined in
* ExportPdfPapers
*/
public String getFormat() {
return format;
}
/**
*
* @return the pageformat PageFormat.LANDSCAPE or PageFormat.PORTRAIT
*/
public int getOrientation() {
return orientation;
}
public void setOrientation(int orientation) {
this.orientation = orientation;
}
/**
* Constructor
*
* @param owner
* @param formats
* @param controller
*/
public ExportPdfDialog(Frame owner, String[] formats, Controller controller) {
super(owner);
this.formatsCollection = formats;
this.controller = controller;
initialize();
}
/**
* Initialize the dialog elements
*/
private void initialize() {
this.setModal(true);
this.setTitle(controller.getResourceString("ExportPdfDialog.PDF_Export_Settings"));
this.setPreferredSize(new Dimension(400, 150));
// Page size
JLabel labelPaper = new JLabel(controller.getResourceString("ExportPdfDialog.Size_"));
java.util.Arrays.sort(formatsCollection);
listBox = new JComboBox(formatsCollection);
listBox.setEditable(false);
listBox.setPreferredSize(new Dimension(100, 25));
// Page orientation
birdButtonLandscape = new JRadioButton(controller.getResourceString("ExportPdfDialog.Landscape"));
birdButtonLandscape.setMnemonic(KeyEvent.VK_L);
birdButtonLandscape.setSelected(true);
birdButtonPortrait = new JRadioButton(controller.getResourceString("ExportPdfDialog.Portrait"));
birdButtonPortrait.setMnemonic(KeyEvent.VK_P);
group = new ButtonGroup();
group.add(birdButtonLandscape);
group.add(birdButtonPortrait);
// ok button
JButton jOKButton = new JButton();
jOKButton.setPreferredSize(new Dimension(100, 20));
jOKButton.setAction(new AbstractAction() {
public void actionPerformed(ActionEvent e) {
okPressed();
}
});
jOKButton.setText(controller.getResourceString("ExportPdfDialog.OK"));
// panels and layout
JPanel panel1 = new JPanel();
panel1.setBorder(BorderFactory.createTitledBorder(controller.getResourceString("ExportPdfDialog.Paper")));
GridBagLayout gridbag1 = new GridBagLayout();
panel1.setLayout(gridbag1);
JPanel panel2 = new JPanel();
panel2.setBorder(BorderFactory.createTitledBorder(controller.getResourceString("ExportPdfDialog.Orientation")));
GridBagLayout gridbag = new GridBagLayout();
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 0;
c.gridy = 0;
panel1.add(labelPaper, c);
c.gridx = 1;
panel1.add(listBox, c);
panel2.add(birdButtonLandscape);
panel2.add(birdButtonPortrait);
JPanel panel = new JPanel();
panel.setLayout(gridbag);
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 0;
c.gridy = 0;
panel.add(panel1, c);
c.gridx = 1;
c.gridy = 0;
panel.add(panel2, c);
c.fill = GridBagConstraints.CENTER;
c.anchor = GridBagConstraints.PAGE_END;
c.gridwidth = 2;
c.gridx = 0;
c.gridy = 1;
panel.add(jOKButton, c);
// set default user values
initDefaults();
// add escape action
freemind.main.Tools.addEscapeActionToDialog(this);
// finish dialog
this.setLocationRelativeTo(this.getParent());
this.setContentPane(panel);
this.getRootPane().setDefaultButton(jOKButton);
this.pack();
}
/**
* Initialize the dialog elements with default values from the user settings
*/
private void initDefaults() {
// page orientation
String storedOrientation = controller
.getProperty(PROP_PDF_PAGE_ORIENTATION);
if (storedOrientation != null) // property found
{
if (Tools.safeEquals(storedOrientation, LANDSCAPE)) {
birdButtonLandscape.setSelected(true);
} else {
birdButtonPortrait.setSelected(true);
}
}
// page format
String storedFormat = controller.getProperty(PROP_PDF_PAGE_FORMAT);
if (storedFormat != null) // property found
{
listBox.setSelectedItem(storedFormat);
}
}
/**
* stores the inputs as defaults in user settings
*/
private void storeDefaults() {
// page orientation
if (orientation == PageFormat.LANDSCAPE)
controller.setProperty(PROP_PDF_PAGE_ORIENTATION, LANDSCAPE);
else if (orientation == PageFormat.PORTRAIT)
controller.setProperty(PROP_PDF_PAGE_ORIENTATION, PORTRAIT);
// page format
controller.setProperty(PROP_PDF_PAGE_FORMAT, format);
}
/**
* button ok pressed, will close the dialog and store the values
*/
private void okPressed() {
format = (String) listBox.getSelectedItem();
if (birdButtonLandscape.isSelected()) {
orientation = PageFormat.LANDSCAPE;
} else {
orientation = PageFormat.PORTRAIT;
}
storeDefaults();
this.setVisible(false);
}
public void dispose() {
mResult = false;
super.dispose();
}
public boolean getResult() {
return mResult;
}
}