Changeset 23851 in osm for applications


Ignore:
Timestamp:
2010-10-26T20:03:29+02:00 (14 years ago)
Author:
oliverw
Message:

Reorganized dialog, added headers and map.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/AddressEdit/src/org/openstreetmap/josm/plugins/addressEdit/gui/AddressEditDialog.java

    r23835 r23851  
    1717
    1818import java.awt.BorderLayout;
     19import java.awt.Color;
    1920import java.awt.Dimension;
    2021import java.awt.FlowLayout;
     22import java.awt.Font;
    2123import java.awt.GridLayout;
    2224import java.awt.HeadlessException;
    2325import java.awt.event.ActionEvent;
    2426import java.awt.event.ActionListener;
     27import java.util.List;
    2528
    2629import javax.swing.JButton;
     
    3639import javax.swing.event.ListSelectionListener;
    3740
     41import org.openstreetmap.gui.jmapviewer.JMapViewer;
     42import org.openstreetmap.gui.jmapviewer.MapMarkerDot;
     43import org.openstreetmap.josm.data.osm.BBox;
     44import org.openstreetmap.josm.data.osm.Node;
     45import org.openstreetmap.josm.data.osm.Way;
    3846import org.openstreetmap.josm.plugins.addressEdit.AddressEditContainer;
    39 
    40 public class AddressEditDialog extends JFrame implements ActionListener, ListSelectionListener {
     47import org.openstreetmap.josm.plugins.addressEdit.AddressNode;
     48import org.openstreetmap.josm.plugins.addressEdit.IAddressEditContainerListener;
     49import org.openstreetmap.josm.plugins.addressEdit.INodeEntity;
     50import org.openstreetmap.josm.plugins.addressEdit.StreetNode;
     51import org.openstreetmap.josm.plugins.addressEdit.StreetSegmentNode;
     52
     53public class AddressEditDialog extends JFrame implements ActionListener, ListSelectionListener, IAddressEditContainerListener {
     54        private static final String INCOMPLETE_HEADER_FMT = tr("Incomplete Addresses (%d)");
     55        private static final String UNRESOLVED_HEADER_FMT = tr("Unresolved Addresses (%d)");
     56        private static final String STREET_HEADER_FMT = tr("Streets (%d)");
    4157        private static final String CANCEL_COMMAND = "Cancel";
    4258        private static final String OK_COMMAND = "Ok";
     
    4561         */
    4662        private static final long serialVersionUID = 6251676464816335631L;
    47         private AddressEditContainer addressContainer;
     63        private AddressEditContainer editContainer;
    4864        private JTable unresolvedTable;
    4965        private JTable incompleteTable;
     
    5571                resolveAction   
    5672        };
     73        private JLabel streetLabel;
     74        private JLabel incompleteAddressesLabel;
     75        private JLabel unresolvedAddressesLabel;
     76        private JMapViewer mapViewer;
     77        private JLabel mapLabel;
    5778       
    5879        /**
     
    6384                super(tr("Edit Addresses"));
    6485       
    65                 this.addressContainer = addressEditContainer;
     86                this.editContainer = addressEditContainer;
     87                this.editContainer.addChangedListener(this);
    6688                setLayout(new BorderLayout());
    67                 setSize(800,600);
     89                setSize(1024,600);
    6890                // TODO: Center on screen
    6991                setLocation(100, 100);
     92
    7093               
    7194                // TODO: Proper init, if model is null
    7295                if (addressEditContainer != null) {
     96                        /* Panel for street table */
    7397                        JPanel streetPanel = new JPanel(new BorderLayout());
    74                         streetList = new JTable(new StreetTableModel(addressContainer));
     98                        streetList = new JTable(new StreetTableModel(editContainer));
    7599                        streetList.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    76100                        streetList.getSelectionModel().addListSelectionListener(this);
     
    78102                        JScrollPane scroll1 = new JScrollPane(streetList);
    79103                        streetPanel.add(scroll1, BorderLayout.CENTER);
    80                         streetPanel.add(new JLabel("Streets"), BorderLayout.NORTH);
    81                         streetPanel.setMinimumSize(new Dimension(350, 400));
    82                        
     104                       
     105                        streetLabel = createHeaderLabel(STREET_HEADER_FMT, editContainer.getNumberOfStreets());
     106                        streetPanel.add(streetLabel, BorderLayout.NORTH);
     107                        streetPanel.setMinimumSize(new Dimension(350, 300));
     108                       
     109                        /* Panel for unresolved addresses table */
    83110                        JPanel unresolvedPanel = new JPanel(new BorderLayout());               
    84                         unresolvedTable = new JTable(new UnresolvedAddressesTableModel(addressContainer));
     111                        unresolvedTable = new JTable(new UnresolvedAddressesTableModel(editContainer));
    85112                        unresolvedTable.getSelectionModel().setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
    86113                        unresolvedTable.getSelectionModel().addListSelectionListener(this);
     
    88115                        JScrollPane scroll2 = new JScrollPane(unresolvedTable);
    89116                        unresolvedPanel.add(scroll2, BorderLayout.CENTER);
    90                         unresolvedPanel.add(new JLabel("Unresolved Addresses"), BorderLayout.NORTH);
     117                        unresolvedAddressesLabel = createHeaderLabel(
     118                                        UNRESOLVED_HEADER_FMT, editContainer.getNumberOfUnresolvedAddresses());
     119                        unresolvedPanel.add(unresolvedAddressesLabel , BorderLayout.NORTH);
    91120                        unresolvedPanel.setMinimumSize(new Dimension(350, 200));
    92121                       
     
    96125                        unresolvedPanel.add(unresolvedButtons, BorderLayout.SOUTH);
    97126                       
    98                         JPanel incompletePanel = new JPanel(new BorderLayout());
    99                        
    100                         incompleteTable = new JTable(new IncompleteAddressesTableModel(addressContainer));
     127                        /* Panel for incomplete addresses */
     128                        JPanel incompletePanel = new JPanel(new BorderLayout());                       
     129                        incompleteTable = new JTable(new IncompleteAddressesTableModel(editContainer));
    101130                        incompleteTable.getSelectionModel().setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
    102131                        incompleteTable.getSelectionModel().addListSelectionListener(this);
     
    104133                       
    105134                        incompletePanel.add(scroll3, BorderLayout.CENTER);
    106                         incompletePanel.add(new JLabel("Incomplete Addresses"), BorderLayout.NORTH);
     135                        incompleteAddressesLabel = createHeaderLabel(
     136                                        INCOMPLETE_HEADER_FMT, editContainer.getNumberOfUnresolvedAddresses());
     137                        incompletePanel.add(incompleteAddressesLabel, BorderLayout.NORTH);
    107138                        incompletePanel.setMinimumSize(new Dimension(350, 200));
    108139                       
    109                         JSplitPane addrSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, unresolvedPanel, incompletePanel);
    110                        
    111                         JSplitPane pane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, streetPanel, addrSplitPane);
     140                        /* Edit panel for incomplete addresses */
     141                        JPanel incompleteEditPanel = new JPanel();
     142                        incompleteEditPanel.setMinimumSize(new Dimension(350, 300));
     143                       
     144                        /* Combine panels */
     145                        JSplitPane unresSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, streetPanel, unresolvedPanel);
     146                        JSplitPane addrSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, incompleteEditPanel, incompletePanel);                     
     147                        JSplitPane pane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, unresSplitPane, addrSplitPane);
     148                       
     149                        /* Map Panel */
     150                        JPanel mapPanel = new JPanel(new BorderLayout());
     151                        mapViewer = new JMapViewer();
     152                        mapPanel.add(mapViewer, BorderLayout.CENTER);
     153                        mapPanel.setMinimumSize(new Dimension(200, 200));
     154                        mapLabel = createHeaderLabel(tr("Map"));
     155                        mapPanel.add(mapLabel, BorderLayout.NORTH);
     156                        mapPanel.add(new JSeparator(), BorderLayout.SOUTH);
     157                        mapViewer.setVisible(false);
     158                       
    112159                        this.getContentPane().add(pane, BorderLayout.CENTER);
     160                        this.getContentPane().add(mapPanel, BorderLayout.EAST);
    113161                } else {
    114162                        this.getContentPane().add(new JLabel(tr("(No data)")), BorderLayout.CENTER);
     
    120168                buttonPanel.add(ok);
    121169               
     170                // JMapViewer
     171               
    122172                // Murks
    123173                for (int i = 0; i < 8; i++) {
     
    128178        }
    129179
     180        private JLabel createHeaderLabel(String text) {
     181                JLabel label = new JLabel(text);
     182                label.setFont(label.getFont().deriveFont(Font.BOLD));
     183                return label;
     184        }
     185
     186        private JLabel createHeaderLabel(String fmtString, int n) {
     187                JLabel label = new JLabel(String.format(fmtString, n));
     188                label.setFont(label.getFont().deriveFont(Font.BOLD));
     189                return label;
     190        }
     191       
     192        private void updateHeaders() {
     193                if (editContainer != null) {
     194                        streetLabel.setText(String.format(STREET_HEADER_FMT, editContainer.getNumberOfStreets()));
     195                        incompleteAddressesLabel.setText(String.format(INCOMPLETE_HEADER_FMT, editContainer.getNumberOfIncompleteAddresses()));
     196                        unresolvedAddressesLabel.setText(String.format(UNRESOLVED_HEADER_FMT, editContainer.getNumberOfUnresolvedAddresses()));
     197                } else {
     198                        streetLabel.setText(String.format(STREET_HEADER_FMT, 0));
     199                        incompleteAddressesLabel.setText(String.format(INCOMPLETE_HEADER_FMT, 0));
     200                        unresolvedAddressesLabel.setText(String.format(UNRESOLVED_HEADER_FMT, 0));
     201                }
     202        }
     203
    130204        @Override
    131205        public void actionPerformed(ActionEvent e) {
     
    144218               
    145219                AddressEditSelectionEvent ev = new AddressEditSelectionEvent(e.getSource(),
    146                                 streetList, unresolvedTable, incompleteTable, addressContainer);
     220                                streetList, unresolvedTable, incompleteTable, editContainer);
    147221               
    148222                for (AbstractAddressEditAction action : actions) {
    149223                        action.updateEnabledState(ev);
    150224                }
     225               
     226                clearMapViewer();
     227                StreetNode sNode = ev.getSelectedStreet();
     228                if (sNode != null) {
     229                                               
     230                        //mapViewer.addMapRectangle(new BBoxMapRectangle(bb));
     231                        for (INodeEntity seg : sNode.getChildren()) {
     232                                Way way = (Way) seg.getOsmObject();
     233                                //BBox bb = way.getBBox();
     234                               
     235                                for (Node node : way.getNodes()) {
     236                                        mapViewer.addMapMarker(new MapMarkerDot(Color.GREEN, node.getCoor().lat(), node.getCoor().lon()));
     237                                }
     238                        }       
     239                       
     240                        List<AddressNode> incAddresses = ev.getSelectedIncompleteAddresses();
     241                        if (incAddresses != null) {
     242                                for (AddressNode aNode : incAddresses) {
     243                                        Node node = (Node) aNode.getOsmObject();
     244                                        mapViewer.addMapMarker(new MapMarkerDot(Color.RED, node.getCoor().lat(), node.getCoor().lon()));
     245                                }
     246                        }
     247                       
     248                        List<AddressNode> unrAddresses = ev.getSelectedUnresolvedAddresses();
     249                        if (unrAddresses != null) {
     250                                for (AddressNode aNode : unrAddresses) {
     251                                        Node node = (Node) aNode.getOsmObject();
     252                                        mapViewer.addMapMarker(new MapMarkerDot(Color.ORANGE, node.getCoor().lat(), node.getCoor().lon()));
     253                                }
     254                        }
     255                        mapViewer.setDisplayToFitMapMarkers();
     256                        mapViewer.setVisible(true);
     257                }
     258        }
     259
     260        private void clearMapViewer() {
     261                mapViewer.setVisible(false);
     262                // remove markers and rectangles from map viewer
     263                mapViewer.getMapMarkerList().clear();
     264                mapViewer.getMapRectangleList().clear();
     265        }
     266
     267        @Override
     268        public void containerChanged(AddressEditContainer container) {
     269                updateHeaders();
     270        }
     271
     272        @Override
     273        public void entityChanged() {
     274                updateHeaders();
    151275        }
    152276
Note: See TracChangeset for help on using the changeset viewer.