package org.openstreetmap.josm.plugins.directdownload;
import static org.openstreetmap.josm.tools.I18n.tr;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.util.ArrayList;
import java.util.List;
import javax.swing.BorderFactory;
import javax.swing.DefaultListSelectionModel;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.UIManager;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableColumnModel;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
import org.openstreetmap.josm.Main;
import org.openstreetmap.josm.gui.ExtendedDialog;
public class DownloadDataGui extends ExtendedDialog {
private NamedResultTableModel model;
private NamedResultTableColumnModel columnmodel;
private JTable tblSearchResults;
public DownloadDataGui() {
// Initalizes ExtendedDialog
super(Main.parent,
tr("Download Track"),
new String[] {tr("Download Track"), tr("Cancel")},
true
);
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
DefaultListSelectionModel selectionModel = new DefaultListSelectionModel();
model = new NamedResultTableModel(selectionModel);
columnmodel = new NamedResultTableColumnModel();
tblSearchResults = new JTable(model, columnmodel);
tblSearchResults.setSelectionModel(selectionModel);
tblSearchResults.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
JScrollPane scrollPane = new JScrollPane(tblSearchResults);
scrollPane.setPreferredSize(new Dimension(800,300));
panel.add(scrollPane, BorderLayout.CENTER);
model.setData(new UserTrackReader().getTrackList());
setContent(panel);
setupDialog();
}
static class NamedResultTableModel extends DefaultTableModel {
private ArrayList<UserTrack> data;
private ListSelectionModel selectionModel;
public NamedResultTableModel(ListSelectionModel selectionModel) {
data = new ArrayList<>();
this.selectionModel = selectionModel;
}
@Override
public int getRowCount() {
if (data == null) return 0;
return data.size();
}
@Override
public Object getValueAt(int row, int column) {
if (data == null) return null;
return data.get(row);
}
public void setData(List<UserTrack> data) {
if (data == null) {
this.data.clear();
} else {
this.data =new ArrayList<>(data);
}
fireTableDataChanged();
}
@Override
public boolean isCellEditable(int row, int column) {
return false;
}
public UserTrack getSelectedUserTrack() {
if (selectionModel.getMinSelectionIndex() < 0)
return null;
return data.get(selectionModel.getMinSelectionIndex());
}
}
public UserTrack getSelectedUserTrack() {
return model.getSelectedUserTrack();
}
static class NamedResultTableColumnModel extends DefaultTableColumnModel {
protected void createColumns() {
TableColumn col = null;
NamedResultCellRenderer renderer = new NamedResultCellRenderer();
// column 0 - DateTime
col = new TableColumn(0);
col.setHeaderValue(tr("Date"));
col.setResizable(true);
col.setPreferredWidth(150);
col.setCellRenderer(renderer);
addColumn(col);
// column 1 - Filename
col = new TableColumn(1);
col.setHeaderValue(tr("Filename"));
col.setResizable(true);
col.setPreferredWidth(200);
col.setCellRenderer(renderer);
addColumn(col);
// column 2 - Description
col = new TableColumn(2);
col.setHeaderValue(tr("Description"));
col.setResizable(true);
col.setPreferredWidth(450);
col.setCellRenderer(renderer);
addColumn(col);
// column 3 - tags
/*
col = new TableColumn(3);
col.setHeaderValue(tr("Tags"));
col.setResizable(true);
col.setPreferredWidth(100);
col.setCellRenderer(renderer);
addColumn(col);
*/
}
public NamedResultTableColumnModel() {
createColumns();
}
}
class ListSelectionHandler implements ListSelectionListener {
@Override
public void valueChanged(ListSelectionEvent lse) {
}
}
static class NamedResultCellRenderer extends JLabel implements TableCellRenderer {
public NamedResultCellRenderer() {
setOpaque(true);
setBorder(BorderFactory.createEmptyBorder(2,2,2,2));
}
protected void reset() {
setText("");
setIcon(null);
}
protected void renderColor(boolean selected) {
if (selected) {
setForeground(UIManager.getColor("Table.selectionForeground"));
setBackground(UIManager.getColor("Table.selectionBackground"));
} else {
setForeground(UIManager.getColor("Table.foreground"));
setBackground(UIManager.getColor("Table.background"));
}
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
reset();
renderColor(isSelected);
if (value == null) return this;
UserTrack sr = (UserTrack) value;
switch(column) {
case 0:
setText(sr.datetime);
break;
case 1:
setText(sr.filename);
break;
case 2:
setText(sr.description);
break;
/*
case 3:
setText(sr.tags);
break;
*/
}
return this;
}
}
}