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

Last change on this file was 33788, checked in by donvip, 8 years ago

update to JOSM 12643

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