Changeset 15498 in josm


Ignore:
Timestamp:
2019-11-02T16:40:58+01:00 (3 years ago)
Author:
Don-vip
Message:

fix #12209 - CorrelateGpxWithImages refactor (patch by Bjoeni)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java

    r15496 r15498  
    3838import java.util.TimeZone;
    3939import java.util.concurrent.TimeUnit;
     40import java.util.stream.Collectors;
    4041
    4142import javax.swing.AbstractAction;
    4243import javax.swing.AbstractListModel;
    4344import javax.swing.BorderFactory;
     45import javax.swing.DefaultComboBoxModel;
    4446import javax.swing.JButton;
    4547import javax.swing.JCheckBox;
     
    246248
    247249    private ExtendedDialog syncDialog;
    248     private final transient List<GpxDataWrapper> gpxLst = new ArrayList<>();
     250    private MutableComboBoxModel<GpxDataWrapper> gpxModel;
    249251    private JPanel outerPanel;
    250252    private JosmComboBox<GpxDataWrapper> cbGpx;
     
    276278            try {
    277279                outerPanel.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
    278 
    279                 for (int i = gpxLst.size() - 1; i >= 0; i--) {
    280                     GpxDataWrapper wrapper = gpxLst.get(i);
     280                for (int i = gpxModel.getSize() - 1; i >= 0; i--) {
     281                    GpxDataWrapper wrapper = gpxModel.getElementAt(i);
    281282                    if (sel.equals(wrapper.file)) {
    282                         cbGpx.setSelectedIndex(i);
     283                        gpxModel.setSelectedItem(wrapper);
    283284                        if (!sel.getName().equals(wrapper.name)) {
    284285                            JOptionPane.showMessageDialog(
     
    319320                }
    320321
    321                 MutableComboBoxModel<GpxDataWrapper> model = (MutableComboBoxModel<GpxDataWrapper>) cbGpx.getModel();
    322322                loadedGpxData.add(data);
    323                 if (gpxLst.get(0).file == null) {
    324                     gpxLst.remove(0);
    325                     model.removeElementAt(0);
     323                if (gpxModel.getElementAt(0).file == null) {
     324                    gpxModel.removeElementAt(0);
    326325                }
    327326                GpxDataWrapper elem = new GpxDataWrapper(sel.getName(), data, sel);
    328                 gpxLst.add(elem);
    329                 model.addElement(elem);
    330                 cbGpx.setSelectedIndex(cbGpx.getItemCount() - 1);
     327                gpxModel.addElement(elem);
     328                gpxModel.setSelectedItem(elem);
    331329            } finally {
    332330                outerPanel.setCursor(Cursor.getDefaultCursor());
     
    795793                    GpxLayer gpx = (GpxLayer) layer;
    796794                    GpxDataWrapper gdw = new GpxDataWrapper(gpx.getName(), gpx.data, gpx.data.storageFile);
    797                     gpxLst.add(gdw);
    798                     MutableComboBoxModel<GpxDataWrapper> model = (MutableComboBoxModel<GpxDataWrapper>) cbGpx.getModel();
    799                     if (gpxLst.get(0).file == null) {
    800                         gpxLst.remove(0);
    801                         model.removeElementAt(0);
     795                    if (gpxModel.getElementAt(0).file == null) {
     796                        gpxModel.removeElementAt(0);
    802797                    }
    803                     model.addElement(gdw);
     798                    gpxModel.addElement(gdw);
    804799                }
    805800            }
     
    820815    public void actionPerformed(ActionEvent ae) {
    821816        // Construct the list of loaded GPX tracks
    822         gpxLst.clear();
     817        gpxModel = new DefaultComboBoxModel<>();
    823818        GpxDataWrapper defaultItem = null;
    824         for (GpxLayer cur : MainApplication.getLayerManager().getLayersOfType(GpxLayer.class)) {
     819        for (GpxLayer cur : MainApplication.getLayerManager().getLayersOfType(GpxLayer.class).stream().filter(GpxLayer::isLocalFile).collect(Collectors.toList())) {
    825820            GpxDataWrapper gdw = new GpxDataWrapper(cur.getName(), cur.data, cur.data.storageFile);
    826             gpxLst.add(gdw);
    827             if (cur == yLayer.gpxLayer) {
     821            gpxModel.addElement(gdw);
     822            if (cur == yLayer.gpxLayer || (defaultItem == null && gdw.file != null)) {
    828823                defaultItem = gdw;
    829824            }
    830825        }
    831826        for (GpxData data : loadedGpxData) {
    832             gpxLst.add(new GpxDataWrapper(data.storageFile.getName(),
    833                     data,
    834                     data.storageFile));
    835         }
    836 
    837         if (gpxLst.isEmpty()) {
    838             gpxLst.add(new GpxDataWrapper(tr("<No GPX track loaded yet>"), null, null));
     827            GpxDataWrapper gdw = new GpxDataWrapper(data.storageFile.getName(), data, data.storageFile);
     828            gpxModel.addElement(gdw);
     829            if (defaultItem == null && gdw.file != null) { // select first GPX track associated to a file
     830                defaultItem = gdw;
     831            }
     832        }
     833
     834        GpxDataWrapper nogdw = new GpxDataWrapper(tr("<No GPX track loaded yet>"), null, null);
     835        if (gpxModel.getSize() == 0) {
     836            gpxModel.addElement(nogdw);
     837        } else if (defaultItem != null) {
     838            gpxModel.setSelectedItem(defaultItem);
    839839        }
    840840
     
    843843        panelCb.add(new JLabel(tr("GPX track: ")));
    844844
    845         cbGpx = new JosmComboBox<>(gpxLst.toArray(new GpxDataWrapper[0]));
    846         if (defaultItem != null) {
    847             cbGpx.setSelectedItem(defaultItem);
    848         } else {
    849             // select first GPX track associated to a file
    850             gpxLst.stream().filter(i -> i.file != null).findFirst().ifPresent(cbGpx::setSelectedItem);
    851         }
     845        cbGpx = new JosmComboBox<>(gpxModel);
     846        cbGpx.setPrototypeDisplayValue(nogdw);
    852847        cbGpx.addActionListener(statusBarUpdaterWithRepaint);
    853848        panelCb.add(cbGpx);
     
    13651360
    13661361    private GpxDataWrapper selectedGPX(boolean complain) {
    1367         Object item = cbGpx.getSelectedItem();
     1362        Object item = gpxModel.getSelectedItem();
    13681363
    13691364        if (item == null || ((GpxDataWrapper) item).file == null) {
Note: See TracChangeset for help on using the changeset viewer.