package org.signalml.plugin.bookreporter.ui;
import java.io.File;
import javax.swing.filechooser.FileNameExtensionFilter;
/**
* @author piotr@develancer.pl
*/
public class BookReporterChartExportDialog extends javax.swing.JDialog {
private static final float MM_PER_INCH = 25.4f;
private static final float STANDARD_DPI = 100.0f;
private int dpi;
private File selectedFile = null;
/**
* Creates new form BookReporterChartExportDialog
*/
public BookReporterChartExportDialog(java.awt.Frame parent, boolean modal) {
super(parent, modal);
initComponents();
dpi = Integer.parseInt((String) dpiCombo.getSelectedItem());
}
/**
* @return exported chart width in pixels
*/
public int getPixelWidth() {
int px = (Integer) xSize.getValue();
if (unitCombo.getSelectedIndex() == 1) {
px = (int) Math.ceil(px / MM_PER_INCH * dpi);
}
return px;
}
/**
* @return exported chart height in pixels
*/
public int getPixelHeight() {
int px = (Integer) ySize.getValue();
if (unitCombo.getSelectedIndex() == 1) {
px = (int) Math.ceil(px / MM_PER_INCH * dpi);
}
return px;
}
public File getSelectedFile() {
return selectedFile;
}
/**
* @return scale of exported chart (1 = screen resolution)
*/
public float getScale() {
return dpi / STANDARD_DPI;
}
@Override
public void setVisible(boolean visible) {
if (visible) {
selectedFile = null;
}
super.setVisible(visible);
}
/**
* 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() {
sizePanel = new javax.swing.JPanel();
xSize = new javax.swing.JSpinner();
ySize = new javax.swing.JSpinner();
dpiCombo = new javax.swing.JComboBox();
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
jLabel3 = new javax.swing.JLabel();
jLabel4 = new javax.swing.JLabel();
unitCombo = new javax.swing.JComboBox();
fileChooser = new javax.swing.JFileChooser();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setTitle("Export chart as PNG");
xSize.setModel(new javax.swing.SpinnerNumberModel(Integer.valueOf(100), Integer.valueOf(1), null, Integer.valueOf(1)));
ySize.setModel(new javax.swing.SpinnerNumberModel(Integer.valueOf(100), Integer.valueOf(1), null, Integer.valueOf(1)));
dpiCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "72", "100", "150", "200", "300", "600" }));
dpiCombo.setSelectedIndex(2);
dpiCombo.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
dpiComboActionPerformed(evt);
}
});
jLabel1.setText("dpi");
jLabel2.setText("Size:");
jLabel3.setText("x");
jLabel4.setText("at");
unitCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "px", "mm" }));
unitCombo.setSelectedIndex(1);
javax.swing.GroupLayout sizePanelLayout = new javax.swing.GroupLayout(sizePanel);
sizePanel.setLayout(sizePanelLayout);
sizePanelLayout.setHorizontalGroup(
sizePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(sizePanelLayout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(xSize, javax.swing.GroupLayout.PREFERRED_SIZE, 89, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel3)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(ySize, javax.swing.GroupLayout.PREFERRED_SIZE, 89, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(unitCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel4)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(dpiCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel1)
.addContainerGap(61, Short.MAX_VALUE))
);
sizePanelLayout.setVerticalGroup(
sizePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(sizePanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(sizePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(xSize, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel2)
.addComponent(jLabel3)
.addComponent(ySize, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel4)
.addComponent(dpiCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel1)
.addComponent(unitCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
fileChooser.setDialogType(javax.swing.JFileChooser.SAVE_DIALOG);
fileChooser.setFileFilter(new FileNameExtensionFilter("PNG images", "png"));
fileChooser.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
fileChooserActionPerformed(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(sizePanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(fileChooser, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(sizePanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(fileChooser, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
pack();
}// </editor-fold>//GEN-END:initComponents
private void dpiComboActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_dpiComboActionPerformed
dpi = Integer.parseInt((String) dpiCombo.getSelectedItem());
}//GEN-LAST:event_dpiComboActionPerformed
private void fileChooserActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_fileChooserActionPerformed
if (evt.getActionCommand().equals("ApproveSelection")) {
selectedFile = fileChooser.getSelectedFile();
this.setVisible(false);
} else if (evt.getActionCommand().equals("CancelSelection")) {
this.setVisible(false);
}
}//GEN-LAST:event_fileChooserActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JComboBox dpiCombo;
private javax.swing.JFileChooser fileChooser;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JPanel sizePanel;
private javax.swing.JComboBox unitCombo;
private javax.swing.JSpinner xSize;
private javax.swing.JSpinner ySize;
// End of variables declaration//GEN-END:variables
}