source: osm/applications/editors/josm/plugins/NanoLog/src/nanolog/NanoLogPanel.java@ 31897

Last change on this file since 31897 was 30737, checked in by donvip, 11 years ago

[josm_plugins] fix Java 7 / unused code warnings

File size: 2.9 KB
Line 
1package nanolog;
2
3import static org.openstreetmap.josm.tools.I18n.tr;
4
5import java.awt.Rectangle;
6import java.text.SimpleDateFormat;
7import java.util.ArrayList;
8import java.util.List;
9
10import javax.swing.AbstractListModel;
11import javax.swing.JList;
12
13import nanolog.NanoLogLayer.NanoLogLayerListener;
14
15import org.openstreetmap.josm.Main;
16import org.openstreetmap.josm.gui.MapView.LayerChangeListener;
17import org.openstreetmap.josm.gui.dialogs.ToggleDialog;
18import org.openstreetmap.josm.gui.layer.Layer;
19
20/**
21 * NanoLog Panel. Displays the selected log item, along with surrounding 30-50 lines.
22 *
23 * @author zverik
24 */
25public class NanoLogPanel extends ToggleDialog implements LayerChangeListener, NanoLogLayerListener {
26 private JList<String> logPanel;
27 private LogListModel listModel;
28
29 public NanoLogPanel() {
30 super(tr("NanoLog"), "nanolog", tr("Open NanoLog panel"), null, 150, false);
31
32 listModel = new LogListModel();
33 logPanel = new JList<>(listModel);
34 createLayout(logPanel, true, null);
35 }
36
37 public void updateMarkers() {
38 List<NanoLogEntry> entries = new ArrayList<>();
39 for( NanoLogLayer l : Main.map.mapView.getLayersOfType(NanoLogLayer.class) ) {
40 entries.addAll(l.getEntries());
41 }
42 listModel.setEntries(entries);
43 }
44
45 @Override
46 public void activeLayerChange( Layer oldLayer, Layer newLayer ) {
47 // todo
48 }
49
50 @Override
51 public void layerAdded( Layer newLayer ) {
52 if( newLayer instanceof NanoLogLayer )
53 ((NanoLogLayer)newLayer).addListener(this);
54 updateMarkers();
55 }
56
57 @Override
58 public void layerRemoved( Layer oldLayer ) {
59 updateMarkers();
60 }
61
62 @Override
63 public void markersUpdated( NanoLogLayer layer ) {
64 updateMarkers();
65 }
66
67 @Override
68 public void markerActivated( NanoLogLayer layer, NanoLogEntry entry ) {
69 int idx = entry == null ? -1 : listModel.find(entry);
70 if( idx >= 0 ) {
71 logPanel.setSelectedIndex(idx);
72 Rectangle rect = logPanel.getCellBounds(Math.max(0, idx-2), Math.min(idx+4, listModel.getSize()));
73 logPanel.scrollRectToVisible(rect);
74 }
75 }
76
77 private class LogListModel extends AbstractListModel<String> {
78 private List<NanoLogEntry> entries;
79 private final SimpleDateFormat TIME_FORMAT = new SimpleDateFormat("HH:mm:ss");
80
81 @Override
82 public int getSize() {
83 return entries.size();
84 }
85
86 @Override
87 public String getElementAt( int index ) {
88 return TIME_FORMAT.format(entries.get(index).getTime()) + " " + entries.get(index).getMessage();
89 }
90
91 public void setEntries( List<NanoLogEntry> entries ) {
92 this.entries = entries;
93 fireContentsChanged(this, 0, entries.size());
94 }
95
96 public int find( NanoLogEntry entry ) {
97 return entries.indexOf(entry);
98 }
99 }
100}
Note: See TracBrowser for help on using the repository browser.