/* Copyright 2014 Malcolm Herring
*
* This 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, version 3 of the License.
*
* For a copy of the GNU General Public License, see <http://www.gnu.org/licenses/>.
*/
package panels;
import static org.openstreetmap.josm.tools.I18n.tr;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.ArrayList;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import org.openstreetmap.josm.Main;
import messages.Messages;
import s57.S57att.Att;
import s57.S57map.AttMap;
import s57.S57map.Feature;
import s57.S57obj.Obj;
import s57.S57val.AttVal;
import scedit.SCeditAction;
public class PanelMain extends JPanel {
BufferedImage img;
int w, h, z, f;
JTextField wt, ht, zt, ft;
public static JTextArea decode = null;
public static JTextField messageBar = null;
public JButton saveButton = null;
private ActionListener alSave = new ActionListener() {
@Override
public void actionPerformed(java.awt.event.ActionEvent e) {
}
};
private JButton importButton = null;
JFileChooser ifc = new JFileChooser(Main.pref.get("nceditplugin.encinpfile"));
private ActionListener alImport = new ActionListener() {
@Override
public void actionPerformed(java.awt.event.ActionEvent e) {
if (e.getSource() == importButton) {
SCeditAction.panelS57.setVisible(true);
setStatus("Select S-57 ENC file for import", Color.yellow);
int returnVal = ifc.showOpenDialog(Main.parent);
if (returnVal == JFileChooser.APPROVE_OPTION) {
try {
Main.pref.put("smed2plugin.encinpfile", ifc.getSelectedFile().getPath());
SCeditAction.panelS57.startImport(ifc.getSelectedFile());
} catch (IOException e1) {
SCeditAction.panelS57.setVisible(false);
setStatus("IO Exception", Color.red);
}
} else {
SCeditAction.panelS57.setVisible(false);
clrStatus();
}
}
}
};
private JButton exportButton = null;
final JFileChooser efc = new JFileChooser();
private ActionListener alExport = new ActionListener() {
@Override
public void actionPerformed(java.awt.event.ActionEvent e) {
if (e.getSource() == exportButton) {
SCeditAction.panelS57.setVisible(true);
setStatus("Select S-57 ENC file for export", Color.yellow);
int returnVal = efc.showOpenDialog(Main.parent);
if (returnVal == JFileChooser.APPROVE_OPTION) {
try {
SCeditAction.panelS57.startExport(efc.getSelectedFile());
} catch (IOException e1) {
SCeditAction.panelS57.setVisible(false);
setStatus("IO Exception", Color.red);
}
} else {
SCeditAction.panelS57.setVisible(false);
clrStatus();
}
}
}
};
public PanelMain() {
setLayout(null);
setSize(new Dimension(480, 480));
w = h = z = f = 0;
wt = new JTextField("0");
wt.setBounds(10, 400, 40, 20);
add(wt);
ht = new JTextField("0");
ht.setBounds(60, 400, 40, 20);
add(ht);
zt = new JTextField("0");
zt.setBounds(110, 400, 40, 20);
add(zt);
ft = new JTextField("0");
ft.setBounds(160, 400, 40, 20);
add(ft);
messageBar = new JTextField();
messageBar.setBounds(70, 430, 290, 20);
messageBar.setEditable(false);
messageBar.setBackground(Color.WHITE);
add(messageBar);
importButton = new JButton(new ImageIcon(getClass().getResource("/images/importButton.png")));
importButton.setBounds(10, 430, 20, 20);
add(importButton);
importButton.addActionListener(alImport);
exportButton = new JButton(new ImageIcon(getClass().getResource("/images/exportButton.png")));
exportButton.setBounds(40, 430, 20, 20);
add(exportButton);
exportButton.addActionListener(alExport);
saveButton = new JButton();
saveButton.setBounds(370, 430, 100, 20);
saveButton.setText(tr("Save"));
add(saveButton);
saveButton.addActionListener(alSave);
decode = new JTextArea();
decode.setBounds(0, 0, 480, 420);
decode.setTabSize(1);
add(decode);
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.setBackground(new Color(0xb5d0d0));
if (img != null) g2.clearRect(0, 0, img.getWidth(), img.getHeight());
g2.drawImage(img, 0, 0, null);
}
public static void setStatus(String text, Color bg) {
messageBar.setBackground(bg);
messageBar.setText(text);
}
public static void clrStatus() {
messageBar.setBackground(Color.white);
messageBar.setText("");
}
public void parseMark(Feature feature) {
decode.setText("Selected object:\n");
decode.append("\t" + tr("Type") + ": " + Messages.getString(feature.type.name()) + "\n");
if (feature.atts.get(Att.OBJNAM) != null) {
decode.append("\t" + tr("Name") + ": " + feature.atts.get(Att.OBJNAM).val + "\n");
}
decode.append("\tObjects:\n");
for (Obj obj : feature.objs.keySet()) {
decode.append("\t\t" + Messages.getString(obj.name()) + "\n");
if (feature.objs.get(obj).size() != 0) {
for (AttMap atts : feature.objs.get(obj).values()) {
for (Att att : atts.keySet()) {
AttVal<?> item = atts.get(att);
switch (item.conv) {
case E:
decode.append("\t\t\t" + Messages.getString(att.name()) + ": " +
Messages.getString(((Enum<?>) ((ArrayList<?>) item.val).get(0)).name()) + "\n");
break;
case L:
decode.append("\t\t\t" + Messages.getString(att.name()) + ": ");
boolean first = true;
for (Object val : (ArrayList<?>) item.val) {
if (!first) {
decode.append(", ");
} else {
first = false;
}
decode.append(Messages.getString(((Enum<?>) val).name()));
}
decode.append("\n");
break;
default:
decode.append("\t\t\t" + Messages.getString(att.name()) + ": " + item.val + "\n");
}
}
}
}
}
}
public void clearMark() {
decode.setText(tr("No object selected"));
}
}