import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+
import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import tim.prune.I18nManager;
import tim.prune.data.Altitude;
import tim.prune.data.Field;
+import tim.prune.data.SourceInfo;
/**
// previously selected values
private char _lastUsedDelimiter = ',';
private Field[] _lastSelectedFields = null;
- private int _lastAltitudeFormat = Altitude.FORMAT_NONE;
+ private Altitude.Format _lastAltitudeFormat = Altitude.Format.NO_FORMAT;
// constants
private static final int SNIPPET_SIZE = 6;
/**
- * Open the selected file and show the GUI dialog
- * to select load options
+ * Open the selected file and show the GUI dialog to select load options
+ * @param inFile file to open
*/
public void openFile(File inFile)
{
{
_dialog = new JDialog(_parentFrame, I18nManager.getText("dialog.openoptions.title"), true);
_dialog.setLocationRelativeTo(_parentFrame);
- _dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
+ _dialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
+ // add closing listener
+ _dialog.addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e) {
+ _dialog.dispose();
+ _app.informNoDataLoaded();
+ }
+ });
_dialog.getContentPane().add(makeDialogComponents());
// select best separator according to row counts (more is better)
_delimiterRadios[_delimiterRadios.length-1].setSelected(true);
informDelimiterSelected();
_dialog.pack();
- _dialog.show();
+ _dialog.setVisible(true);
}
- else
- {
- JOptionPane.showMessageDialog(_parentFrame, I18nManager.getText("error.load.noread"),
- I18nManager.getText("error.load.dialogtitle"), JOptionPane.ERROR_MESSAGE);
+ else {
+ // Didn't pass pre-check
+ _app.showErrorMessage("error.load.dialogtitle", "error.load.noread");
+ _app.informNoDataLoaded();
}
}
public void actionPerformed(ActionEvent e)
{
_dialog.dispose();
+ _app.informNoDataLoaded();
}
});
buttonPanel.add(cancelButton);
_cardPanel.setLayout(_layout);
JPanel firstCard = new JPanel();
firstCard.setLayout(new BorderLayout());
+ firstCard.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 15));
JPanel delimsPanel = new JPanel();
delimsPanel.setLayout(new GridLayout(0, 2));
// Second screen, for field order selection
JPanel secondCard = new JPanel();
secondCard.setLayout(new BorderLayout());
+ secondCard.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 15));
// table for file contents
_fileExtractTableModel = new FileExtractTableModel();
JTable extractTable = new JTable(_fileExtractTableModel);
JScrollPane tableScrollPane = new JScrollPane(extractTable);
extractTable.setPreferredScrollableViewportSize(new Dimension(350, 80));
extractTable.getTableHeader().setReorderingAllowed(false);
- secondCard.add(makeLabelledPanel("dialog.openoptions.tabledesc", tableScrollPane), BorderLayout.NORTH);
+ secondCard.add(makeLabelledPanel("dialog.openoptions.filesnippet", tableScrollPane), BorderLayout.NORTH);
JPanel innerPanel2 = new JPanel();
innerPanel2.setLayout(new BorderLayout());
+ innerPanel2.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
+
_fieldTable = new JTable(new FieldSelectionTableModel());
_fieldTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
// add listener for selected table row
}
}
});
- JPanel tablePanel = new JPanel();
- tablePanel.setLayout(new BorderLayout());
- tablePanel.add(_fieldTable.getTableHeader(), BorderLayout.NORTH);
- tablePanel.add(_fieldTable, BorderLayout.CENTER);
- innerPanel2.add(tablePanel, BorderLayout.CENTER);
+ JScrollPane lowerTablePane = new JScrollPane(_fieldTable);
+ lowerTablePane.setPreferredSize(new Dimension(300, 100));
+ innerPanel2.add(lowerTablePane, BorderLayout.CENTER);
JPanel innerPanel3 = new JPanel();
innerPanel3.setLayout(new BoxLayout(innerPanel3, BoxLayout.Y_AXIS));
}
});
innerPanel3.add(_moveDownButton);
- innerPanel3.add(Box.createVerticalStrut(70));
+ innerPanel3.add(Box.createVerticalStrut(60));
+ JButton guessButton = new JButton(I18nManager.getText("button.guessfields"));
+ guessButton.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e)
+ {
+ _lastSelectedFields = null;
+ prepareSecondPanel();
+ }
+ });
+ innerPanel3.add(guessButton);
innerPanel2.add(innerPanel3, BorderLayout.EAST);
secondCard.add(innerPanel2, BorderLayout.CENTER);
{
fields = _delimiterInfos[i].getMaxFields();
_statusLabel.setText("" + numRecords + " " + I18nManager.getText("dialog.openoptions.deliminfo.records")
- + fields + " " + I18nManager.getText("dialog.openoptions.deliminfo.fields"));
+ + " " + fields + " " + I18nManager.getText("dialog.openoptions.deliminfo.fields"));
}
}
}
FileSplitter splitter = new FileSplitter(_fileCacher);
// Check info makes sense - num fields > 0, num records > 0
// set "Finished" button to disabled if not ok
- // TODO: Work out if there are header rows or not, save?
- // Try to match header rows with fields
- // Try to match data with fields
// Add data to GUI elements
- Object[][] tableData = splitter.splitFieldData(info.getDelimiter());
+ String[][] tableData = splitter.splitFieldData(info.getDelimiter());
// possible to ignore blank columns here
_currentDelimiter = info.getDelimiter();
_fileExtractTableModel.updateData(tableData);
// Check number of fields and use last ones if count matches
Field[] startFieldArray = null;
if (_lastSelectedFields != null && splitter.getNumColumns() == _lastSelectedFields.length)
+ {
startFieldArray = _lastSelectedFields;
+ }
else
- startFieldArray = splitter.makeDefaultFields();
+ {
+ // Take first full row of file and use it to guess fields
+ startFieldArray = FieldGuesser.guessFields(splitter.getFirstFullRow());
+ }
+
_fieldTableModel.updateData(startFieldArray);
_fieldTable.setModel(_fieldTableModel);
// add dropdowns to second column
JComboBox fieldTypesBox = new JComboBox();
- for (int i=0; i<Field.ALL_AVAILABLE_FIELDS.length; i++)
+ String[] fieldNames = Field.getFieldNames();
+ for (int i=0; i<fieldNames.length; i++)
{
- fieldTypesBox.addItem(Field.ALL_AVAILABLE_FIELDS[i].getName());
+ fieldTypesBox.addItem(fieldNames[i]);
}
_fieldTable.getColumnModel().getColumn(1).setCellEditor(new DefaultCellEditor(fieldTypesBox));
// Set altitude format to same as last time if available
- if (_lastAltitudeFormat == Altitude.FORMAT_METRES)
+ if (_lastAltitudeFormat == Altitude.Format.METRES)
_unitsDropDown.setSelectedIndex(0);
- else if (_lastAltitudeFormat == Altitude.FORMAT_FEET)
+ else if (_lastAltitudeFormat == Altitude.Format.FEET)
_unitsDropDown.setSelectedIndex(1);
// no selection on field list
selectField(-1);
// Save delimiter, field array and altitude format for later use
_lastUsedDelimiter = _currentDelimiter;
_lastSelectedFields = _fieldTableModel.getFieldArray();
- int altitudeFormat = Altitude.FORMAT_METRES;
+ Altitude.Format altitudeFormat = Altitude.Format.METRES;
if (_unitsDropDown.getSelectedIndex() == 1)
{
- altitudeFormat = Altitude.FORMAT_FEET;
+ altitudeFormat = Altitude.Format.FEET;
}
_lastAltitudeFormat = altitudeFormat;
// give data to App
+ SourceInfo sourceInfo = new SourceInfo(_file, SourceInfo.FILE_TYPE.TEXT);
_app.informDataLoaded(_fieldTableModel.getFieldArray(),
- _fileExtractTableModel.getData(), altitudeFormat,
- _file.getName());
+ _fileExtractTableModel.getData(), altitudeFormat, sourceInfo, null);
// clear up file cacher
_fileCacher.clear();
// dispose of dialog