package org.openpnp.gui.importer;
import java.awt.FileDialog;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.BoxLayout;
import javax.swing.InputMap;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRootPane;
import javax.swing.JSeparator;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
import javax.swing.border.TitledBorder;
import org.openpnp.gui.importer.rs274x.Rs274xParser;
import org.openpnp.gui.support.MessageBoxes;
import org.openpnp.model.Board;
import org.openpnp.model.Board.Side;
import org.openpnp.model.BoardPad;
import com.jgoodies.forms.layout.ColumnSpec;
import com.jgoodies.forms.layout.FormLayout;
import com.jgoodies.forms.layout.FormSpecs;
import com.jgoodies.forms.layout.RowSpec;
class SolderPasteGerberImporterDlg extends JDialog {
private final SolderPasteGerberImporter solderPasteGerberImporter;
private JTextField textFieldTopFile;
private JTextField textFieldBottomFile;
private final Action browseTopFileAction = new SwingAction();
private final Action browseBottomFileAction = new SwingAction_1();
private final Action importAction = new SwingAction_2();
private final Action cancelAction = new SwingAction_3();
public SolderPasteGerberImporterDlg(SolderPasteGerberImporter solderPasteGerberImporter,
Frame parent) {
super(parent, SolderPasteGerberImporter.DESCRIPTION, true);
this.solderPasteGerberImporter = solderPasteGerberImporter;
getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));
JPanel panel = new JPanel();
panel.setBorder(new TitledBorder(null, "Files", TitledBorder.LEADING, TitledBorder.TOP,
null, null));
getContentPane().add(panel);
panel.setLayout(new FormLayout(
new ColumnSpec[] {FormSpecs.RELATED_GAP_COLSPEC, FormSpecs.DEFAULT_COLSPEC,
FormSpecs.RELATED_GAP_COLSPEC, ColumnSpec.decode("default:grow"),
FormSpecs.RELATED_GAP_COLSPEC, FormSpecs.DEFAULT_COLSPEC,},
new RowSpec[] {FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC,
FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC,}));
JLabel lblTopFilemnt = new JLabel("Top Paste Gerber");
panel.add(lblTopFilemnt, "2, 2, right, default");
textFieldTopFile = new JTextField();
panel.add(textFieldTopFile, "4, 2, fill, default");
textFieldTopFile.setColumns(10);
JButton btnBrowse = new JButton("Browse");
btnBrowse.setAction(browseTopFileAction);
panel.add(btnBrowse, "6, 2");
JLabel lblBottomFilemnb = new JLabel("Bottom Paste Gerber");
panel.add(lblBottomFilemnb, "2, 4, right, default");
textFieldBottomFile = new JTextField();
panel.add(textFieldBottomFile, "4, 4, fill, default");
textFieldBottomFile.setColumns(10);
JButton btnBrowse_1 = new JButton("Browse");
btnBrowse_1.setAction(browseBottomFileAction);
panel.add(btnBrowse_1, "6, 4");
JSeparator separator = new JSeparator();
getContentPane().add(separator);
JPanel panel_2 = new JPanel();
FlowLayout flowLayout = (FlowLayout) panel_2.getLayout();
flowLayout.setAlignment(FlowLayout.RIGHT);
getContentPane().add(panel_2);
JButton btnCancel = new JButton("Cancel");
btnCancel.setAction(cancelAction);
panel_2.add(btnCancel);
JButton btnImport = new JButton("Import");
btnImport.setAction(importAction);
panel_2.add(btnImport);
setSize(400, 400);
setLocationRelativeTo(parent);
JRootPane rootPane = getRootPane();
KeyStroke stroke = KeyStroke.getKeyStroke("ESCAPE");
InputMap inputMap = rootPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
inputMap.put(stroke, "ESCAPE");
rootPane.getActionMap().put("ESCAPE", cancelAction);
}
private class SwingAction extends AbstractAction {
public SwingAction() {
putValue(NAME, "Browse");
putValue(SHORT_DESCRIPTION, "Browse");
}
public void actionPerformed(ActionEvent e) {
FileDialog fileDialog = new FileDialog(SolderPasteGerberImporterDlg.this);
// fileDialog.setFilenameFilter(new FilenameFilter() {
// @Override
// public boolean accept(File dir, String name) {
// return name.toLowerCase().endsWith(".mnt");
// }
// });
fileDialog.setVisible(true);
if (fileDialog.getFile() == null) {
return;
}
File file = new File(new File(fileDialog.getDirectory()), fileDialog.getFile());
textFieldTopFile.setText(file.getAbsolutePath());
}
}
private class SwingAction_1 extends AbstractAction {
public SwingAction_1() {
putValue(NAME, "Browse");
putValue(SHORT_DESCRIPTION, "Browse");
}
public void actionPerformed(ActionEvent e) {
FileDialog fileDialog = new FileDialog(SolderPasteGerberImporterDlg.this);
// fileDialog.setFilenameFilter(new FilenameFilter() {
// @Override
// public boolean accept(File dir, String name) {
// return name.toLowerCase().endsWith(".mnb");
// }
// });
fileDialog.setVisible(true);
if (fileDialog.getFile() == null) {
return;
}
File file = new File(new File(fileDialog.getDirectory()), fileDialog.getFile());
textFieldBottomFile.setText(file.getAbsolutePath());
}
}
private class SwingAction_2 extends AbstractAction {
public SwingAction_2() {
putValue(NAME, "Import");
putValue(SHORT_DESCRIPTION, "Import");
}
public void actionPerformed(ActionEvent e) {
SolderPasteGerberImporterDlg.this.solderPasteGerberImporter.topFile =
new File(textFieldTopFile.getText());
SolderPasteGerberImporterDlg.this.solderPasteGerberImporter.bottomFile =
new File(textFieldBottomFile.getText());
SolderPasteGerberImporterDlg.this.solderPasteGerberImporter.board = new Board();
List<BoardPad> pads = new ArrayList<>();
try {
if (SolderPasteGerberImporterDlg.this.solderPasteGerberImporter.topFile.exists()) {
List<BoardPad> topPads = new Rs274xParser().parseSolderPastePads(
SolderPasteGerberImporterDlg.this.solderPasteGerberImporter.topFile);
for (BoardPad pad : topPads) {
pad.setSide(Side.Top);
}
pads.addAll(topPads);
}
if (SolderPasteGerberImporterDlg.this.solderPasteGerberImporter.bottomFile
.exists()) {
List<BoardPad> bottomPads = new Rs274xParser().parseSolderPastePads(
SolderPasteGerberImporterDlg.this.solderPasteGerberImporter.bottomFile);
for (BoardPad pad : bottomPads) {
pad.setSide(Side.Bottom);
}
pads.addAll(bottomPads);
}
}
catch (Exception e1) {
MessageBoxes.errorBox(SolderPasteGerberImporterDlg.this, "Import Error", e1);
return;
}
for (BoardPad pad : pads) {
SolderPasteGerberImporterDlg.this.solderPasteGerberImporter.board
.addSolderPastePad(pad);
}
setVisible(false);
}
}
private class SwingAction_3 extends AbstractAction {
public SwingAction_3() {
putValue(NAME, "Cancel");
putValue(SHORT_DESCRIPTION, "Cancel");
}
public void actionPerformed(ActionEvent e) {
setVisible(false);
}
}
}