Ignore:
Timestamp:
2014-06-10T00:04:18+02:00 (11 years ago)
Author:
zverik
Message:

wow, it works

File:
1 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/NanoLog/src/nanolog/NanoLogPanel.java

    r27960 r30491  
    11package nanolog;
    22
     3import java.awt.Rectangle;
     4import java.text.SimpleDateFormat;
     5import java.util.*;
    36import javax.swing.*;
     7import nanolog.NanoLogLayer.NanoLogLayerListener;
     8import org.openstreetmap.josm.Main;
     9import org.openstreetmap.josm.gui.MapView.LayerChangeListener;
    410import org.openstreetmap.josm.gui.dialogs.ToggleDialog;
     11import org.openstreetmap.josm.gui.layer.Layer;
    512import static org.openstreetmap.josm.tools.I18n.tr;
    613import org.openstreetmap.josm.tools.Shortcut;
     
    1118 * @author zverik
    1219 */
    13 public class NanoLogPanel extends ToggleDialog {
    14     private JList logPanel;
     20public class NanoLogPanel extends ToggleDialog implements LayerChangeListener, NanoLogLayerListener {
     21    private JList<String> logPanel;
    1522    private LogListModel listModel;
    1623   
    1724    public NanoLogPanel() {
    18         super(tr("NanoLog"), "nanolog", tr("Open NanoLog panel"), null, 150, true);
     25        super(tr("NanoLog"), "nanolog", tr("Open NanoLog panel"), null, 150, false);
    1926       
    2027        listModel = new LogListModel();
    21         logPanel = new JList(listModel);
     28        logPanel = new JList<String>(listModel);
    2229        createLayout(logPanel, true, null);
    2330    }
     31
     32    public void updateMarkers() {
     33        List<NanoLogEntry> entries = new ArrayList<NanoLogEntry>();
     34        for( NanoLogLayer l : Main.map.mapView.getLayersOfType(NanoLogLayer.class) ) {
     35            entries.addAll(l.getEntries());
     36        }
     37        listModel.setEntries(entries);
     38    }
     39
     40    @Override
     41    public void activeLayerChange( Layer oldLayer, Layer newLayer ) {
     42        // todo
     43    }
     44
     45    @Override
     46    public void layerAdded( Layer newLayer ) {
     47        if( newLayer instanceof NanoLogLayer )
     48            ((NanoLogLayer)newLayer).addListener(this);
     49        updateMarkers();
     50    }
     51
     52    @Override
     53    public void layerRemoved( Layer oldLayer ) {
     54        updateMarkers();
     55    }
     56
     57    @Override
     58    public void markersUpdated( NanoLogLayer layer ) {
     59        updateMarkers();
     60    }
     61
     62    @Override
     63    public void markerActivated( NanoLogLayer layer, NanoLogEntry entry ) {
     64        int idx = entry == null ? -1 : listModel.find(entry);
     65        if( idx >= 0 ) {
     66            logPanel.setSelectedIndex(idx);
     67            Rectangle rect = logPanel.getCellBounds(Math.max(0, idx-2), Math.min(idx+4, listModel.getSize()));
     68            logPanel.scrollRectToVisible(rect);
     69        }
     70    }
    2471   
    25     private class LogListModel extends AbstractListModel {
     72    private class LogListModel extends AbstractListModel<String> {
     73        private List<NanoLogEntry> entries;
     74        private final SimpleDateFormat TIME_FORMAT = new SimpleDateFormat("HH:mm:ss");
    2675
    2776        public int getSize() {
    28             return 0;
     77            return entries.size();
    2978        }
    3079
    3180        public String getElementAt( int index ) {
    32             return ""; // todo
     81            return TIME_FORMAT.format(entries.get(index).getTime()) + " " + entries.get(index).getMessage();
     82        }
     83
     84        public void setEntries( List<NanoLogEntry> entries ) {
     85            this.entries = entries;
     86            fireContentsChanged(this, 0, entries.size());
     87        }
     88
     89        public int find( NanoLogEntry entry ) {
     90            return entries.indexOf(entry);
    3391        }
    3492    }
Note: See TracChangeset for help on using the changeset viewer.