/* This program 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, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. N.B. the above text was copied from http://www.gnu.org/licenses/gpl.html unmodified. I have not attached a copy of the GNU license to the source... Copyright (C) 2011 Timo Rantalainen, tjrantal@gmail.com */ /* Frame with save as and open menu */ package ui; import java.awt.Dimension; import java.awt.event.*; //Eventit ja Actionlistener import java.io.*; import javax.swing.*; import java.util.*; import analysis.*; public class SaveableFrame extends JFrame implements ActionListener{ private JMenu fileMenu = new JMenu("File"); private JMenuBar menuBar = new JMenuBar(); private JMenuItem openItem = new JMenuItem("Open"); private JMenuItem saveItem = new JMenuItem("Save"); private JMenuItem saveAsItem = new JMenuItem("Save As"); public String fileName = null; private JTextArea textArea; public Vector<Vector<String>> data; private JavaVideoAnalysis mainProgram; public SaveableFrame(){ init(); } public SaveableFrame(JavaVideoAnalysis mainProgram){ this.mainProgram = mainProgram; init(); } private void init(){ this.textArea = new JTextArea(); fileMenu.add(openItem); fileMenu.add(saveItem); fileMenu.add(saveAsItem); openItem.addActionListener(this); saveItem.addActionListener(this); saveAsItem.addActionListener(this); menuBar.add(fileMenu); setJMenuBar(menuBar); textArea.setEditable(false); JScrollPane scrollPane = new JScrollPane(textArea); scrollPane.setPreferredSize(new Dimension(400,200)); scrollPane.setOpaque(true); setContentPane(scrollPane); } // Handle menu events public void actionPerformed(ActionEvent e) { if (e.getSource() == openItem){ loadFile(); }else{ if (e.getSource() == saveItem){ saveFile(fileName); }else{ if (e.getSource() == saveAsItem){ saveFile(null); } } } } private void saveFile(String fileName){ if (fileName == null) { // get filename from user JFileChooser fc = null; if (this.fileName == null){ fc = new JFileChooser(System.getProperty("user.dir")); }else{ fc = new JFileChooser(new File(this.fileName).getParent()); } if (fc.showSaveDialog(null) != JFileChooser.CANCEL_OPTION){ fileName = fc.getSelectedFile().getAbsolutePath(); this.fileName = fileName; } } if (fileName != null) { // else user cancelled try { BufferedWriter writer = new BufferedWriter(new FileWriter(fileName)); writer.write(textArea.getText()); writer.close(); } catch (Exception e) { System.out.println("Coudln't write the file "+e.toString()); } } } public void callLoad(){ loadFile(); } private void loadFile(){ JFileChooser fc = new JFileChooser(System.getProperty("user.dir")); if (fc.showOpenDialog(null) != JFileChooser.CANCEL_OPTION){ String fileName = fc.getSelectedFile().getAbsolutePath(); CSVReader reader = new CSVReader(new File(fileName),"\t"); data = reader.data; writeCalibrationFile(); /*Check if digitized points were read*/ System.out.println("Loaded file "+data.get(0).get(0)); /*Digitzed points*/ if (data.get(0).get(0).indexOf("Frame#") > -1){ /*Read digitized points*/ mainProgram.digitizedPoints = new DigitizedPoints(); //Erase the existing points int scaledPoints = data.get(0).size()-3; double[] digitizedPoint = new double[scaledPoints]; System.out.println("Start adding points into DigitizedPoints "); for (int i = 1;i<data.size();++i){ for (int j = 0;j<digitizedPoint.length;++j){ digitizedPoint[j] = Double.parseDouble(data.get(i).get(j+3)); } double[] tempPoint = {Double.parseDouble(data.get(i).get(1)), Double.parseDouble(data.get(i).get(2))}; mainProgram.digitizedPoints.addPoint(tempPoint,digitizedPoint, Integer.valueOf(data.get(i).get(0))); System.out.println("Added "+Integer.valueOf(data.get(i).get(0))); } }else{ /*Calibration object*/ /* If calibrationFrame.data.size() == 3, 2D calibration object == 4, 3D calibration object == 5, 2D calibration object and digitized points >= 6, 3D calibration object and digitized points */ mainProgram.status.setText(new String("Calibration chosen")); /*Add calibration to a JTextArea*/ if (data.get(0).size() ==3 || data.get(0).size() ==5){ /*2D calibration object*/ mainProgram.digitizedCalibration = new int[data.size()-1][2]; //First row is headers... } else { /*3D calibration object*/ mainProgram.digitizedCalibration = new int[data.size()-1][2]; //First row is headers... } if (data.get(0).size() >=5){ if (data.get(0).size() ==5){ for (int i = 0; i<data.size()-1;++i){ for (int j = 0; j<2;++j){ mainProgram.digitizedCalibration[i][j] = (int) Double.parseDouble(data.get(i+1).get(j+3)); } } mainProgram.calculateCoefficients(); } } else { mainProgram.pointsDigitized = 0; data.get(0).add("DX"); data.get(0).add("DY"); mainProgram.status.setText(new String("Digitize "+data.get(mainProgram.pointsDigitized+1).get(0))); } } } } public void writeCalibrationFile(){ textArea.setText(""); //Empty the text prior to adding the latest results... for (int r = 0;r<data.size();++r){ String tempText = ""; for (int c = 0;c<data.get(r).size();++c){ tempText+=data.get(r).get(c); if (c <data.get(r).size()-1){tempText+="\t";} } if (r < data.size()-1){ tempText+="\n"; } textArea.append(tempText); } } public void writeDigitizedPoints(DigitizedPoints digitizedPoints){ textArea.setText(""); //Empty the text prior to adding the latest results... textArea.append("Frame#\tX\tY\tScaledX\tScaledY\n"); for (int r = 0;r<digitizedPoints.points.size();++r){ String tempText = ""; tempText+=digitizedPoints.points.get(r).frameNo+"\t"; tempText+=digitizedPoints.points.get(r).x+"\t"; tempText+=digitizedPoints.points.get(r).y+"\t"; for (int c = 0;c<digitizedPoints.points.get(r).scaledPoints.length;++c){ tempText+=digitizedPoints.points.get(r).scaledPoints[c]; if (c <digitizedPoints.points.get(r).scaledPoints.length-1){tempText+="\t";} } if (r < digitizedPoints.points.size()-1){ tempText+="\n"; } textArea.append(tempText); } } }