Changeset 2592 in josm for trunk


Ignore:
Timestamp:
2009-12-07T21:16:15+01:00 (12 years ago)
Author:
bastiK
Message:

geoimage: make thumbnails optional + cosmetics (see #4101)

Location:
trunk/src/org/openstreetmap/josm/gui/layer
Files:
4 edited

Legend:

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

    r2577 r2592  
    322322                    return;
    323323                }
    324                 JFileChooser fc = new JFileChooser(Main.pref.get("tagimages.lastdirectory", Main.pref.get("lastDirectory")));
     324                JFileChooser fc = new JFileChooser(Main.pref.get("geoimage.lastdirectory", Main.pref.get("lastDirectory")));
    325325                fc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
    326326                fc.setMultiSelectionEnabled(true);
     
    343343                LinkedList<File> files = new LinkedList<File>();
    344344                addRecursiveFiles(files, sel);
    345                 Main.pref.put("tagimages.lastdirectory", fc.getCurrentDirectory().getPath());
     345                Main.pref.put("geoimage.lastdirectory", fc.getCurrentDirectory().getPath());
    346346                GeoImageLayer.create(files, GpxLayer.this);
    347347            }
  • trunk/src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java

    r2566 r2592  
    3737import javax.swing.ButtonGroup;
    3838import javax.swing.JButton;
     39import javax.swing.JCheckBox;
    3940import javax.swing.JComboBox;
    4041import javax.swing.JFileChooser;
     
    149150                            if (!sel.getName().equals(wrapper.name)) {
    150151                                JOptionPane.showMessageDialog(
    151                                                 Main.parent,
     152                                        Main.parent,
    152153                                        tr("File {0} is loaded yet under the name \"{1}\"", sel.getName(), wrapper.name),
    153154                                        tr("Error"),
     
    173174                    x.printStackTrace();
    174175                    JOptionPane.showMessageDialog(
    175                                 Main.parent,
    176                                 tr("Error while parsing {0}",sel.getName())+": "+x.getMessage(),
    177                                 tr("Error"),
    178                                 JOptionPane.ERROR_MESSAGE
    179                                 );
     176                            Main.parent,
     177                            tr("Error while parsing {0}",sel.getName())+": "+x.getMessage(),
     178                            tr("Error"),
     179                            JOptionPane.ERROR_MESSAGE
     180                            );
    180181                    return;
    181182                } catch (IOException x) {
    182183                    x.printStackTrace();
    183184                    JOptionPane.showMessageDialog(
    184                                 Main.parent,
    185                                 tr("Could not read \"{0}\"",sel.getName())+"\n"+x.getMessage(),
    186                                 tr("Error"),
    187                                 JOptionPane.ERROR_MESSAGE
    188                                 );
     185                            Main.parent,
     186                            tr("Could not read \"{0}\"",sel.getName())+"\n"+x.getMessage(),
     187                            tr("Error"),
     188                            JOptionPane.ERROR_MESSAGE
     189                            );
    189190                    return;
    190191                }
     
    293294            cbTimezones = new JComboBox(vtTimezones);
    294295
    295             String tzId = Main.pref.get("tagimages.timezoneid", "");
     296            String tzId = Main.pref.get("geoimage.timezoneid", "");
    296297            TimeZone defaultTz;
    297298            if (tzId.length() == 0) {
     
    351352
    352353                public void actionPerformed(ActionEvent arg0) {
    353                     JFileChooser fc = new JFileChooser(Main.pref.get("tagimages.lastdirectory"));
     354                    JFileChooser fc = new JFileChooser(Main.pref.get("geoimage.lastdirectory"));
    354355                    fc.setAcceptAllFileFilterUsed(false);
    355356                    fc.setMultiSelectionEnabled(false);
     
    387388            while (! isOk) {
    388389                int answer = JOptionPane.showConfirmDialog(
    389                                 Main.parent, panel,
    390                                 tr("Synchronize time from a photo of the GPS receiver"),
    391                                 JOptionPane.OK_CANCEL_OPTION,
    392                                 JOptionPane.QUESTION_MESSAGE
    393                                 );
     390                        Main.parent, panel,
     391                        tr("Synchronize time from a photo of the GPS receiver"),
     392                        JOptionPane.OK_CANCEL_OPTION,
     393                        JOptionPane.QUESTION_MESSAGE
     394                        );
    394395                if (answer == JOptionPane.CANCEL_OPTION) {
    395396                    return;
     
    413414                String tzValue = selectedTz.substring(pos + 1, selectedTz.length() - 1);
    414415
    415                 Main.pref.put("tagimages.timezoneid", tzId);
     416                Main.pref.put("geoimage.timezoneid", tzId);
    416417                tfOffset.setText(Long.toString(delta / 1000));
    417418                tfTimezone.setText(tzValue);
     
    476477        panelTf.add(new JLabel(tr("Timezone: ")), gc);
    477478
    478         float gpstimezone = Float.parseFloat(Main.pref.get("tagimages.doublegpstimezone", "0.0"));
     479        float gpstimezone = Float.parseFloat(Main.pref.get("geoimage.doublegpstimezone", "0.0"));
    479480        if (gpstimezone == 0.0) {
    480             gpstimezone = - Long.parseLong(Main.pref.get("tagimages.gpstimezone", "0"));
     481            gpstimezone = - Long.parseLong(Main.pref.get("geoimage.gpstimezone", "0"));
    481482        }
    482483        tfTimezone = new JTextField();
     
    498499        panelTf.add(new JLabel(tr("Offset:")), gc);
    499500
    500         long delta = Long.parseLong(Main.pref.get("tagimages.delta", "0")) / 1000;
     501        long delta = Long.parseLong(Main.pref.get("geoimage.delta", "0")) / 1000;
    501502        tfOffset = new JTextField();
    502503        tfOffset.setText(Long.toString(delta));
     
    557558        panelTf.add(rbUntaggedImg, gc);
    558559
     560        gc.gridx = 0;
     561        gc.gridy = 5;
     562        gc.gridwidth = 2;
     563        gc.gridheight = 1;
     564        gc.fill = GridBagConstraints.NONE;
     565        gc.weightx = gc.weighty = 0.0;
     566        yLayer.loadThumbs = Main.pref.getBoolean("geoimage.showThumbs", false);
     567        JCheckBox cbShowThumbs = new JCheckBox(tr("Show Thumbnail images on the map"), yLayer.loadThumbs);
     568        panelTf.add(cbShowThumbs, gc);
     569
    559570        ButtonGroup group = new ButtonGroup();
    560571        group.add(rbAllImg);
     
    573584        GpxDataWrapper selectedGpx = null;
    574585        while (! isOk) {
    575                 ExtendedDialog dialog = new ExtendedDialog(
    576                                 Main.parent,
     586            ExtendedDialog dialog = new ExtendedDialog(
     587                    Main.parent,
    577588                tr("Correlate images with GPX track"),
    578589                new String[] { tr("Correlate"), tr("Auto-Guess"), tr("Cancel") }
    579                                 );
    580 
    581                 dialog.setContent(panel);
    582                 dialog.setButtonIcons(new String[] { "ok.png", "dialogs/geoimage/gpx2imgManual.png", "cancel.png" });
    583                 dialog.showDialog();
    584                 int answer = dialog.getValue();
     590                    );
     591
     592            dialog.setContent(panel);
     593            dialog.setButtonIcons(new String[] { "ok.png", "dialogs/geoimage/gpx2imgManual.png", "cancel.png" });
     594            dialog.showDialog();
     595            int answer = dialog.getValue();
    585596            if(answer != 1 && answer != 2)
    586597                return;
     
    624635            }
    625636
    626             Main.pref.put("tagimages.doublegpstimezone", Double.toString(gpstimezone));
    627             Main.pref.put("tagimages.gpstimezone", Long.toString(- ((long) gpstimezone)));
    628             Main.pref.put("tagimages.delta", Long.toString(delta * 1000));
    629 
     637            yLayer.loadThumbs = cbShowThumbs.isSelected();
     638
     639            Main.pref.put("geoimage.doublegpstimezone", Double.toString(gpstimezone));
     640            Main.pref.put("geoimage.gpstimezone", Long.toString(- ((long) gpstimezone)));
     641            Main.pref.put("geoimage.delta", Long.toString(delta * 1000));
     642            Main.pref.put("geoimage.showThumbs", yLayer.loadThumbs);
    630643            isOk = true;
     644
     645            if (yLayer.loadThumbs) {
     646                Thread tl = new Thread(new ThumbsLoader(yLayer.data));
     647                tl.setPriority(Thread.MIN_PRIORITY);
     648                tl.start();
     649            }
     650
    631651        }
    632652
  • trunk/src/org/openstreetmap/josm/gui/layer/geoimage/GeoImageLayer.java

    r2566 r2592  
    7171    public long timeoffset = 0;
    7272
     73    boolean loadThumbs;
     74
    7375    /*
    7476     * Stores info about each image
     
    117119
    118120        protected void rememberError(String message) {
    119                 this.errorMessages.add(message);
     121            this.errorMessages.add(message);
    120122        }
    121123
     
    138140            if (cancelled) {
    139141                return;
    140             }           
     142            }
    141143            progressMonitor.subTask(tr("Read photos..."));
    142144            progressMonitor.setTicksCount(files.size());
     
    173175            layer = new GeoImageLayer(data);
    174176            files.clear();
    175             Thread thumbsloader = new Thread(new Thumbsloader());
    176             thumbsloader.setPriority(Thread.MIN_PRIORITY);
    177             thumbsloader.start();           
    178177        }
    179178
     
    216215                        }
    217216                    } else {
    218                         rememberError(tr("Error while getting files from directory {0}\n", f.getPath()));
     217                        rememberError(tr("Error while getting files from directory {0}\n", f.getPath()));
    219218                    }
    220219
     
    230229
    231230        protected String formatErrorMessages() {
    232                 StringBuffer sb = new StringBuffer();
    233                 sb.append("<html>");
    234                 if (errorMessages.size() == 1) {
    235                         sb.append(errorMessages.iterator().next());
    236                 } else {
    237                         sb.append("<ul>");
    238                         for (String msg: errorMessages) {
    239                                 sb.append("<li>").append(msg).append("</li>");
    240                         }
    241                         sb.append("/ul>");
    242                 }
    243                 sb.append("</html>");
    244                 return sb.toString();
     231            StringBuffer sb = new StringBuffer();
     232            sb.append("<html>");
     233            if (errorMessages.size() == 1) {
     234                sb.append(errorMessages.iterator().next());
     235            } else {
     236                sb.append("<ul>");
     237                for (String msg: errorMessages) {
     238                    sb.append("<li>").append(msg).append("</li>");
     239                }
     240                sb.append("/ul>");
     241            }
     242            sb.append("</html>");
     243            return sb.toString();
    245244        }
    246245
    247246        @Override protected void finish() {
    248                 if (!errorMessages.isEmpty()) {
    249                         JOptionPane.showMessageDialog(
    250                                         Main.parent,
    251                                         formatErrorMessages(),
    252                                         tr("Error"),
    253                                         JOptionPane.ERROR_MESSAGE
    254                         );
    255                 }
     247            if (!errorMessages.isEmpty()) {
     248                JOptionPane.showMessageDialog(
     249                        Main.parent,
     250                        formatErrorMessages(),
     251                        tr("Error"),
     252                        JOptionPane.ERROR_MESSAGE
     253                );
     254            }
    256255            if (layer != null) {
    257256                Main.main.addLayer(layer);
     
    276275            cancelled = true;
    277276        }
    278        
    279         class Thumbsloader implements Runnable {
    280             public void run() {
    281                 System.err.println("Load Thumbnails");
    282                 MediaTracker tracker = new MediaTracker(Main.map.mapView);
    283                 for (int i = 0; i < layer.data.size(); i++) {
    284                     System.err.println("getImg "+i);
    285                     Image img = Toolkit.getDefaultToolkit().createImage(layer.data.get(i).file.getPath());
    286                     tracker.addImage(img, 0);
    287                     try {
    288                                 tracker.waitForID(0);
    289                     } catch (InterruptedException e) {
    290                         System.err.println("InterruptedException");
    291                                 return; //  FIXME
    292                     }
    293                     BufferedImage scaledBI = new BufferedImage(16, 16, BufferedImage.TYPE_INT_RGB);
    294                     Graphics2D g = scaledBI.createGraphics();
    295                     while (!g.drawImage(img, 0, 0, 16, 16, null))
    296                     {
    297                         try {
    298                             Thread.sleep(10);
    299                         } catch(InterruptedException ie) {}
    300                     }
    301                     g.dispose();
    302                     tracker.removeImage(img);
    303                     layer.data.get(i).thumbnail = scaledBI;
    304                     if (Main.map != null && Main.map.mapView != null) {
    305                         Main.map.mapView.repaint();
    306                     }
    307                 }
    308                
    309 //                boolean error = tracker.isErrorID(1);
    310 //                if (img != null && (img.getWidth(null) == 0 || img.getHeight(null) == 0)) {
    311 //                    error = true;
    312 //                }
    313 
    314 
    315             }
    316         }       
    317     }
    318    
     277    }
     278
    319279    private static boolean addedToggleDialog = false;
    320280
     
    424384                Point p = mv.getPoint(e.pos);
    425385                if (e.thumbnail != null && e.thumbnail.getWidth(null) > 0 && e.thumbnail.getHeight(null) > 0) {
    426                     g.drawImage(e.thumbnail, 
    427                                 p.x - e.thumbnail.getWidth(null) / 2, 
     386                    g.drawImage(e.thumbnail,
     387                                p.x - e.thumbnail.getWidth(null) / 2,
    428388                                p.y - e.thumbnail.getHeight(null) / 2, null);
    429389                }
    430390                else {
    431                 icon.paintIcon(mv, g, 
    432                                p.x - icon.getIconWidth() / 2, 
     391                icon.paintIcon(mv, g,
     392                               p.x - icon.getIconWidth() / 2,
    433393                               p.y - icon.getIconHeight() / 2);
    434394                }
     
    537497        Main.main.map.repaint();
    538498    }
    539    
     499
    540500    public void checkPreviousNextButtons() {
    541501        System.err.println("check: " + currentPhoto);
     
    598558                        ImageViewerDialog.showImage(GeoImageLayer.this, e);
    599559                        Main.main.map.repaint();
    600                        
    601                        
    602560                        break;
    603561                    }
     
    628586        });
    629587    }
    630 
    631588}
  • trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ImageDisplay.java

    r2566 r2592  
    135135            System.out.println(e);
    136136            if (e.getWhen() - lastTimeForMousePoint > 1500 || mousePointInImg == null) {
    137                 lastTimeForMousePoint = e.getWhen();
     137                lastTimeForMousePoint = e.getWhen();
    138138                mousePointInImg = comp2imgCoord(visibleRect, e.getX(), e.getY());
    139139            }
Note: See TracChangeset for help on using the changeset viewer.