/*
Copyright 2008-2010 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org
This file is part of Gephi.
Gephi is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
Gephi 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 Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with Gephi. If not, see <http://www.gnu.org/licenses/>.
*/
package org.gephi.ui.exporter.preview;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.text.NumberFormat;
import java.text.ParseException;
import javax.swing.AbstractAction;
import javax.swing.DefaultComboBoxModel;
import org.gephi.io.exporter.preview.PDFExporter;
import org.gephi.lib.validation.ValidationClient;
import org.netbeans.validation.api.Problems;
import org.netbeans.validation.api.Validator;
import org.netbeans.validation.api.builtin.Validators;
import org.netbeans.validation.api.ui.ValidationGroup;
import org.netbeans.validation.api.ui.ValidationPanel;
import org.openide.util.NbBundle;
import org.openide.util.NbPreferences;
/**
*
* @author Mathieu Bastian
*/
public class UIExporterPDFPanel extends javax.swing.JPanel implements ValidationClient {
private static final double INCH = 72.0;
private static final double MM = 2.8346456692895527;
private final String customSizeString;
private boolean millimeter = true;
private NumberFormat sizeFormatter;
private NumberFormat marginFormatter;
public UIExporterPDFPanel() {
initComponents();
sizeFormatter = NumberFormat.getNumberInstance();
sizeFormatter.setMaximumFractionDigits(3);
marginFormatter = NumberFormat.getNumberInstance();
marginFormatter.setMaximumFractionDigits(1);
//Page size model - http://en.wikipedia.org/wiki/Paper_size
DefaultComboBoxModel comboBoxModel = new DefaultComboBoxModel();
comboBoxModel.addElement(new PageSizeItem(PageSize.A0, "A0", 841, 1189, 33.1, 46.8));
comboBoxModel.addElement(new PageSizeItem(PageSize.A1, "A1", 594, 841, 23.4, 33.1));
comboBoxModel.addElement(new PageSizeItem(PageSize.A2, "A2", 420, 594, 16.5, 23.4));
comboBoxModel.addElement(new PageSizeItem(PageSize.A3, "A3", 297, 420, 11.7, 16.5));
comboBoxModel.addElement(new PageSizeItem(PageSize.A4, "A4", 210, 297, 8.3, 11.7));
comboBoxModel.addElement(new PageSizeItem(PageSize.A5, "A5", 148, 210, 5.8, 8.3));
comboBoxModel.addElement(new PageSizeItem(PageSize.ARCH_A, "ARCH A", 229, 305, 9, 12));
comboBoxModel.addElement(new PageSizeItem(PageSize.ARCH_B, "ARCH B", 305, 457, 12, 18));
comboBoxModel.addElement(new PageSizeItem(PageSize.ARCH_C, "ARCH C", 457, 610, 18, 24));
comboBoxModel.addElement(new PageSizeItem(PageSize.ARCH_D, "ARCH D", 610, 914, 24, 36));
comboBoxModel.addElement(new PageSizeItem(PageSize.ARCH_E, "ARCH E", 914, 1219, 36, 48));
comboBoxModel.addElement(new PageSizeItem(PageSize.B0, "B0", 1000, 1414, 39.4, 55.7));
comboBoxModel.addElement(new PageSizeItem(PageSize.B1, "B1", 707, 1000, 27.8, 39.4));
comboBoxModel.addElement(new PageSizeItem(PageSize.B2, "B2", 500, 707, 19.7, 27.8));
comboBoxModel.addElement(new PageSizeItem(PageSize.B3, "B3", 353, 500, 13.9, 19.7));
comboBoxModel.addElement(new PageSizeItem(PageSize.B4, "B4", 250, 353, 9.8, 13.9));
comboBoxModel.addElement(new PageSizeItem(PageSize.B5, "B5", 176, 250, 6.9, 9.8));
comboBoxModel.addElement(new PageSizeItem(PageSize.LEDGER, "Ledger", 432, 279, 17, 11));
comboBoxModel.addElement(new PageSizeItem(PageSize.LEGAL, "Legal", 216, 356, 8.5, 14));
comboBoxModel.addElement(new PageSizeItem(PageSize.LETTER, "Letter", 216, 279, 8.5, 11));
comboBoxModel.addElement(new PageSizeItem(PageSize.TABLOID, "Tabloid", 279, 432, 11, 17));
customSizeString = NbBundle.getMessage(UIExporterPDFPanel.class, "UIExporterPDFPanel.pageSize.custom");
comboBoxModel.addElement(customSizeString);
pageSizeCombo.setModel(comboBoxModel);
loadPreferences();
initEvents();
refreshUnit(false);
}
private void loadPreferences() {
boolean defaultMM = NbPreferences.forModule(UIExporterPDF.class).getBoolean("Default_Millimeter", false);
millimeter = NbPreferences.forModule(UIExporterPDF.class).getBoolean("Millimeter", defaultMM);
}
private void savePreferences() {
NbPreferences.forModule(UIExporterPDF.class).putBoolean("Millimeter", millimeter);
}
private void initEvents() {
pageSizeCombo.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
Object selectedItem = pageSizeCombo.getSelectedItem();
if (selectedItem != customSizeString) {
PageSizeItem pageSize = (PageSizeItem) selectedItem;
setPageSize(pageSize);
}
}
});
widthTextField.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
updatePageSize();
}
});
heightTextField.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
updatePageSize();
}
});
unitLink.setAction(new AbstractAction() {
public void actionPerformed(ActionEvent e) {
millimeter = !millimeter;
refreshUnit(true);
}
});
}
public static ValidationPanel createValidationPanel(UIExporterPDFPanel innerPanel) {
ValidationPanel validationPanel = new ValidationPanel();
validationPanel.setInnerComponent(innerPanel);
ValidationGroup group = validationPanel.getValidationGroup();
innerPanel.validate(group);
return validationPanel;
}
public void validate(ValidationGroup group) {
//Size
group.add(widthTextField, Validators.REQUIRE_NON_EMPTY_STRING,
new PositiveSizeValidator(this));
group.add(heightTextField, Validators.REQUIRE_NON_EMPTY_STRING,
new PositiveSizeValidator(this));
//Margins
group.add(topMarginTextField, Validators.REQUIRE_NON_EMPTY_STRING,
Validators.REQUIRE_VALID_NUMBER);
group.add(bottomMarginTextField, Validators.REQUIRE_NON_EMPTY_STRING,
Validators.REQUIRE_VALID_NUMBER);
group.add(leftMarginTextField, Validators.REQUIRE_NON_EMPTY_STRING,
Validators.REQUIRE_VALID_NUMBER);
group.add(rightMargintextField, Validators.REQUIRE_NON_EMPTY_STRING,
Validators.REQUIRE_VALID_NUMBER);
}
public void setup(PDFExporter pdfExporter) {
DefaultComboBoxModel comboBoxModel = (DefaultComboBoxModel) pageSizeCombo.getModel();
PageSizeItem pageSize = new PageSizeItem(pdfExporter.getPageSize());
int index = 0;
if ((index = comboBoxModel.getIndexOf(pageSize)) == -1) {
comboBoxModel.setSelectedItem(customSizeString);
} else {
pageSize = (PageSizeItem) comboBoxModel.getElementAt(index);
comboBoxModel.setSelectedItem(pageSize);
}
setPageSize(pageSize);
setMargins(pdfExporter.getMarginTop(), pdfExporter.getMarginBottom(), pdfExporter.getMarginLeft(), pdfExporter.getMarginRight());
setOrientation(pdfExporter.isLandscape());
}
public void unsetup(PDFExporter pdfExporter) {
if (pageSizeCombo.getSelectedItem() == customSizeString) {
double width = pdfExporter.getPageSize().getWidth();
double height = pdfExporter.getPageSize().getHeight();
try {
width = sizeFormatter.parse(widthTextField.getText()).doubleValue();
} catch (ParseException ex) {
}
try {
height = sizeFormatter.parse(heightTextField.getText()).doubleValue();
} catch (ParseException ex) {
}
if (millimeter) {
width *= MM;
height *= MM;
} else {
width *= INCH;
height *= INCH;
}
float w = (float) width;
float h = (float) height;
Rectangle rect = new Rectangle(w, h);
pdfExporter.setPageSize(rect);
} else {
pdfExporter.setPageSize(((PageSizeItem) pageSizeCombo.getSelectedItem()).getPageSize());
}
pdfExporter.setLandscape(landscapeRadio.isSelected());
double top = pdfExporter.getMarginTop();
double bottom = pdfExporter.getMarginBottom();
double left = pdfExporter.getMarginLeft();
double right = pdfExporter.getMarginRight();
try {
top = marginFormatter.parse(topMarginTextField.getText()).doubleValue();
} catch (ParseException ex) {
}
try {
bottom = marginFormatter.parse(bottomMarginTextField.getText()).doubleValue();
} catch (ParseException ex) {
}
try {
left = marginFormatter.parse(leftMarginTextField.getText()).doubleValue();
} catch (ParseException ex) {
}
try {
right = marginFormatter.parse(rightMargintextField.getText()).doubleValue();
} catch (ParseException ex) {
}
if (millimeter) {
top *= MM;
bottom *= MM;
left *= MM;
right *= MM;
} else {
top *= INCH;
bottom *= INCH;
left *= INCH;
right *= INCH;
}
pdfExporter.setMarginTop((float) top);
pdfExporter.setMarginBottom((float) bottom);
pdfExporter.setMarginLeft((float) left);
pdfExporter.setMarginRight((float) right);
savePreferences();
}
private void updatePageSize() {
if (pageSizeCombo.getSelectedItem() != customSizeString && !widthTextField.getText().isEmpty() && !heightTextField.getText().isEmpty()) {
DefaultComboBoxModel comboBoxModel = (DefaultComboBoxModel) pageSizeCombo.getModel();
PageSizeItem item = getItem(widthTextField.getText(), heightTextField.getText());
if (item == null) {
comboBoxModel.setSelectedItem(customSizeString);
} else {
comboBoxModel.setSelectedItem(item);
}
}
}
private void setPageSize(PageSizeItem pageSize) {
double pageWidth = 0;
double pageHeight = 0;
if (millimeter) {
pageWidth = pageSize.mmWidth;
pageHeight = pageSize.mmHeight;
} else {
pageWidth = pageSize.inWidth;
pageHeight = pageSize.inHeight;
}
widthTextField.setText(sizeFormatter.format(pageWidth));
heightTextField.setText(sizeFormatter.format(pageHeight));
}
private void setOrientation(boolean landscape) {
portraitRadio.setSelected(!landscape);
landscapeRadio.setSelected(landscape);
}
private void setMargins(float top, float bottom, float left, float right) {
if (millimeter) {
top /= MM;
bottom /= MM;
left /= MM;
right /= MM;
} else {
top /= INCH;
bottom /= INCH;
left /= INCH;
right /= INCH;
}
topMarginTextField.setText(marginFormatter.format(top));
bottomMarginTextField.setText(marginFormatter.format(bottom));
leftMarginTextField.setText(marginFormatter.format(left));
rightMargintextField.setText(marginFormatter.format(right));
}
private PageSizeItem getItem(String width, String height) {
DefaultComboBoxModel comboBoxModel = (DefaultComboBoxModel) pageSizeCombo.getModel();
for (int i = 0; i < comboBoxModel.getSize(); i++) {
Object o = comboBoxModel.getElementAt(i);
if (o instanceof PageSizeItem) {
PageSizeItem pageSize = (PageSizeItem) o;
double pageWidth = 0;
double pageHeight = 0;
if (millimeter) {
pageWidth = pageSize.mmWidth;
pageHeight = pageSize.mmHeight;
} else {
pageWidth = pageSize.inWidth;
pageHeight = pageSize.inHeight;
}
String wStr = sizeFormatter.format(pageWidth);
String hStr = sizeFormatter.format(pageHeight);
if (wStr.equals(width) && hStr.equals(height)) {
return ((PageSizeItem) o);
}
}
}
return null;
}
private void refreshUnit(boolean convert) {
unitLink.setText(millimeter ? NbBundle.getMessage(UIExporterPDFPanel.class, "UIExporterPDFPanel.unitLink.millimeter") : NbBundle.getMessage(UIExporterPDFPanel.class, "UIExporterPDFPanel.unitLink.inch"));
widthUnitLabel.setText(millimeter ? NbBundle.getMessage(UIExporterPDFPanel.class, "UIExporterPDFPanel.labelUnit.millimeter") : NbBundle.getMessage(UIExporterPDFPanel.class, "UIExporterPDFPanel.labelUnit.inch"));
heightUnitLabel.setText(widthUnitLabel.getText());
if (convert) {
if (pageSizeCombo.getSelectedItem() != customSizeString) {
setPageSize((PageSizeItem) pageSizeCombo.getSelectedItem());
} else {
double width = 0;
double height = 0;
try {
width = sizeFormatter.parse(widthTextField.getText()).doubleValue();
} catch (ParseException ex) {
}
try {
height = sizeFormatter.parse(heightTextField.getText()).doubleValue();
} catch (ParseException ex) {
}
if (!millimeter) {
width *= MM / INCH;
height *= MM / INCH;
} else {
width *= INCH / MM;
height *= INCH / MM;
}
widthTextField.setText(sizeFormatter.format(width));
heightTextField.setText(sizeFormatter.format(height));
}
updatePageSize();
double top = 0.;
double bottom = 0.;
double left = 0.;
double right = 0.;
try {
top = marginFormatter.parse(topMarginTextField.getText()).doubleValue();
} catch (ParseException ex) {
}
try {
bottom = marginFormatter.parse(bottomMarginTextField.getText()).doubleValue();
} catch (ParseException ex) {
}
try {
left = marginFormatter.parse(leftMarginTextField.getText()).doubleValue();
} catch (ParseException ex) {
}
try {
right = marginFormatter.parse(rightMargintextField.getText()).doubleValue();
} catch (ParseException ex) {
}
if (!millimeter) {
top *= MM / INCH;
bottom *= MM / INCH;
left *= MM / INCH;
right *= MM / INCH;
} else {
top *= INCH / MM;
bottom *= INCH / MM;
left *= INCH / MM;
right *= INCH / MM;
}
topMarginTextField.setText(marginFormatter.format(top));
bottomMarginTextField.setText(marginFormatter.format(bottom));
leftMarginTextField.setText(marginFormatter.format(left));
rightMargintextField.setText(marginFormatter.format(right));
}
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
orientationButtonGroup = new javax.swing.ButtonGroup();
labelPageSize = new javax.swing.JLabel();
pageSizeCombo = new javax.swing.JComboBox();
labelWidth = new javax.swing.JLabel();
widthTextField = new javax.swing.JTextField();
labelHeight = new javax.swing.JLabel();
heightTextField = new javax.swing.JTextField();
widthUnitLabel = new javax.swing.JLabel();
heightUnitLabel = new javax.swing.JLabel();
labelOrientation = new javax.swing.JLabel();
portraitRadio = new javax.swing.JRadioButton();
landscapeRadio = new javax.swing.JRadioButton();
labelMargins = new javax.swing.JLabel();
labelTop = new javax.swing.JLabel();
topMarginTextField = new javax.swing.JTextField();
labelBottom = new javax.swing.JLabel();
bottomMarginTextField = new javax.swing.JTextField();
labelLeft = new javax.swing.JLabel();
labelRight = new javax.swing.JLabel();
leftMarginTextField = new javax.swing.JTextField();
rightMargintextField = new javax.swing.JTextField();
labelUnit = new javax.swing.JLabel();
unitLink = new org.jdesktop.swingx.JXHyperlink();
labelPageSize.setText(org.openide.util.NbBundle.getMessage(UIExporterPDFPanel.class, "UIExporterPDFPanel.labelPageSize.text")); // NOI18N
pageSizeCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
labelWidth.setText(org.openide.util.NbBundle.getMessage(UIExporterPDFPanel.class, "UIExporterPDFPanel.labelWidth.text")); // NOI18N
widthTextField.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
widthTextField.setText(org.openide.util.NbBundle.getMessage(UIExporterPDFPanel.class, "UIExporterPDFPanel.widthTextField.text")); // NOI18N
labelHeight.setText(org.openide.util.NbBundle.getMessage(UIExporterPDFPanel.class, "UIExporterPDFPanel.labelHeight.text")); // NOI18N
heightTextField.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
heightTextField.setText(org.openide.util.NbBundle.getMessage(UIExporterPDFPanel.class, "UIExporterPDFPanel.heightTextField.text")); // NOI18N
widthUnitLabel.setText(org.openide.util.NbBundle.getMessage(UIExporterPDFPanel.class, "UIExporterPDFPanel.widthUnitLabel.text")); // NOI18N
heightUnitLabel.setText(org.openide.util.NbBundle.getMessage(UIExporterPDFPanel.class, "UIExporterPDFPanel.heightUnitLabel.text")); // NOI18N
labelOrientation.setText(org.openide.util.NbBundle.getMessage(UIExporterPDFPanel.class, "UIExporterPDFPanel.labelOrientation.text")); // NOI18N
orientationButtonGroup.add(portraitRadio);
portraitRadio.setText(org.openide.util.NbBundle.getMessage(UIExporterPDFPanel.class, "UIExporterPDFPanel.portraitRadio.text")); // NOI18N
orientationButtonGroup.add(landscapeRadio);
landscapeRadio.setText(org.openide.util.NbBundle.getMessage(UIExporterPDFPanel.class, "UIExporterPDFPanel.landscapeRadio.text")); // NOI18N
labelMargins.setText(org.openide.util.NbBundle.getMessage(UIExporterPDFPanel.class, "UIExporterPDFPanel.labelMargins.text")); // NOI18N
labelTop.setText(org.openide.util.NbBundle.getMessage(UIExporterPDFPanel.class, "UIExporterPDFPanel.labelTop.text")); // NOI18N
topMarginTextField.setText(org.openide.util.NbBundle.getMessage(UIExporterPDFPanel.class, "UIExporterPDFPanel.topMarginTextField.text")); // NOI18N
labelBottom.setText(org.openide.util.NbBundle.getMessage(UIExporterPDFPanel.class, "UIExporterPDFPanel.labelBottom.text")); // NOI18N
bottomMarginTextField.setText(org.openide.util.NbBundle.getMessage(UIExporterPDFPanel.class, "UIExporterPDFPanel.bottomMarginTextField.text")); // NOI18N
labelLeft.setText(org.openide.util.NbBundle.getMessage(UIExporterPDFPanel.class, "UIExporterPDFPanel.labelLeft.text")); // NOI18N
labelRight.setText(org.openide.util.NbBundle.getMessage(UIExporterPDFPanel.class, "UIExporterPDFPanel.labelRight.text")); // NOI18N
leftMarginTextField.setText(org.openide.util.NbBundle.getMessage(UIExporterPDFPanel.class, "UIExporterPDFPanel.leftMarginTextField.text")); // NOI18N
rightMargintextField.setText(org.openide.util.NbBundle.getMessage(UIExporterPDFPanel.class, "UIExporterPDFPanel.rightMargintextField.text")); // NOI18N
labelUnit.setText(org.openide.util.NbBundle.getMessage(UIExporterPDFPanel.class, "UIExporterPDFPanel.labelUnit.text")); // NOI18N
unitLink.setText(""); // NOI18N
unitLink.setToolTipText(org.openide.util.NbBundle.getMessage(UIExporterPDFPanel.class, "UIExporterPDFPanel.unitLink.toolTipText")); // NOI18N
unitLink.setFocusPainted(false);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(labelUnit)
.addGap(62, 62, 62)
.addComponent(unitLink, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(labelPageSize)
.addComponent(labelOrientation)
.addComponent(labelMargins))
.addGap(27, 27, 27)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addComponent(landscapeRadio, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(portraitRadio, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(labelHeight)
.addComponent(labelWidth))
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(heightTextField, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 95, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(widthTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 95, javax.swing.GroupLayout.PREFERRED_SIZE))))
.addGap(10, 10, 10)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(widthUnitLabel)
.addComponent(heightUnitLabel)))
.addComponent(pageSizeCombo, 0, 224, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(labelTop)
.addGap(26, 26, 26)
.addComponent(topMarginTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(labelLeft))
.addGroup(layout.createSequentialGroup()
.addComponent(labelBottom)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(bottomMarginTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(labelRight)))
.addGap(21, 21, 21)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(leftMarginTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(rightMargintextField, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE))))))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(labelUnit)
.addComponent(unitLink, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(labelPageSize)
.addComponent(pageSizeCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(widthUnitLabel)
.addComponent(widthTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(labelWidth))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(heightTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(heightUnitLabel)
.addComponent(labelHeight))
.addGap(28, 28, 28)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(labelOrientation)
.addComponent(portraitRadio))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(landscapeRadio)
.addGap(30, 30, 30)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(labelMargins)
.addComponent(labelTop)
.addComponent(topMarginTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(labelLeft)
.addComponent(leftMarginTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(bottomMarginTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(labelBottom)
.addComponent(labelRight)
.addComponent(rightMargintextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
}// </editor-fold>//GEN-END:initComponents
private static class PageSizeItem {
private final Rectangle pageSize;
private String name = "";
private final double inWidth;
private final double inHeight;
private final double mmWidth;
private final double mmHeight;
public PageSizeItem(Rectangle pageSize) {
this.pageSize = pageSize;
this.inHeight = pageSize.getHeight() / INCH;
this.inWidth = pageSize.getWidth() / INCH;
this.mmHeight = pageSize.getHeight() / MM;
this.mmWidth = pageSize.getWidth() / MM;
}
public PageSizeItem(Rectangle pageSize, String name, double mmWidth, double mmHeight, double inWidth, double inHeight) {
this.pageSize = pageSize;
this.name = name;
this.inHeight = inHeight;
this.inWidth = inWidth;
this.mmHeight = mmHeight;
this.mmWidth = mmWidth;
}
public Rectangle getPageSize() {
return pageSize;
}
public double getInHeight() {
return inHeight;
}
public double getInWidth() {
return inWidth;
}
public double getMmHeight() {
return mmHeight;
}
public double getMmWidth() {
return mmWidth;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final PageSizeItem other = (PageSizeItem) obj;
if (this.pageSize != other.pageSize && (this.pageSize == null || !this.pageSize.equals(other.pageSize))) {
return false;
}
return true;
}
@Override
public int hashCode() {
int hash = 3;
hash = 47 * hash + (this.pageSize != null ? this.pageSize.hashCode() : 0);
return hash;
}
@Override
public String toString() {
return name;
}
}
private static class PositiveSizeValidator implements Validator<String> {
private UIExporterPDFPanel panel;
public PositiveSizeValidator(UIExporterPDFPanel panel) {
this.panel = panel;
}
@Override
public boolean validate(Problems problems, String compName, String model) {
boolean result = false;
try {
double i = panel.sizeFormatter.parse(panel.widthTextField.getText()).doubleValue();
result = i > 0;
} catch (ParseException ex) {
}
if (!result) {
String message = NbBundle.getMessage(getClass(),
"PositiveSizeValidator.NEGATIVE", model);
problems.add(message);
}
return result;
}
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JTextField bottomMarginTextField;
private javax.swing.JTextField heightTextField;
private javax.swing.JLabel heightUnitLabel;
private javax.swing.JLabel labelBottom;
private javax.swing.JLabel labelHeight;
private javax.swing.JLabel labelLeft;
private javax.swing.JLabel labelMargins;
private javax.swing.JLabel labelOrientation;
private javax.swing.JLabel labelPageSize;
private javax.swing.JLabel labelRight;
private javax.swing.JLabel labelTop;
private javax.swing.JLabel labelUnit;
private javax.swing.JLabel labelWidth;
private javax.swing.JRadioButton landscapeRadio;
private javax.swing.JTextField leftMarginTextField;
private javax.swing.ButtonGroup orientationButtonGroup;
private javax.swing.JComboBox pageSizeCombo;
private javax.swing.JRadioButton portraitRadio;
private javax.swing.JTextField rightMargintextField;
private javax.swing.JTextField topMarginTextField;
private org.jdesktop.swingx.JXHyperlink unitLink;
private javax.swing.JTextField widthTextField;
private javax.swing.JLabel widthUnitLabel;
// End of variables declaration//GEN-END:variables
}