Changeset 2334 in josm for trunk


Ignore:
Timestamp:
2009-10-27T22:33:54+01:00 (12 years ago)
Author:
Gubaer
Message:

Improved bookmark tab in download dialog

Location:
trunk/src/org/openstreetmap/josm
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/actions/DownloadAction.java

    r2331 r2334  
    55import static org.openstreetmap.josm.tools.I18n.tr;
    66
    7 import java.awt.BorderLayout;
    8 import java.awt.Dimension;
    97import java.awt.event.ActionEvent;
    108import java.awt.event.KeyEvent;
    119import java.util.concurrent.Future;
    1210import java.util.logging.Logger;
    13 
    14 import javax.swing.JOptionPane;
    15 import javax.swing.JPanel;
    1611
    1712import org.openstreetmap.josm.Main;
     
    2015import org.openstreetmap.josm.actions.downloadtasks.PostDownloadHandler;
    2116import org.openstreetmap.josm.data.Bounds;
    22 import org.openstreetmap.josm.gui.ExtendedDialog;
    2317import org.openstreetmap.josm.gui.download.DownloadDialog;
    2418import org.openstreetmap.josm.tools.Shortcut;
    25 import org.openstreetmap.josm.tools.WindowGeometry;
    2619
    2720/**
     
    4740        if (! dialog.isCanceled()) {
    4841            dialog.rememberSettings();
    49             Bounds area = dialog.getSelectedDownloadArea();               
     42            Bounds area = dialog.getSelectedDownloadArea();           
    5043            if (dialog.isDownloadOsmData()) {
    5144                DownloadOsmTask task = new DownloadOsmTask();
  • trunk/src/org/openstreetmap/josm/data/Preferences.java

    r2327 r2334  
    6060     */
    6161    public static class Bookmark implements Comparable<Bookmark> {
    62         public String name;
    63         public double[] latlon = new double[4]; // minlat, minlon, maxlat, maxlon
     62        private String name;
     63        private Bounds area;
    6464       
    65         public Bookmark() {           
     65        public Bookmark() {   
     66            area = null;
     67            name = null;
    6668        }
    6769       
    68         public Bookmark(Bounds b) {
    69             if (b == null) {
    70                 latlon[0] = 0.0;
    71                 latlon[1] = 0.0;
    72                 latlon[2] = 0.0;
    73                 latlon[3] = 0.0;
    74             } else {
    75                 latlon[0] = b.getMin().lat();
    76                 latlon[1] = b.getMin().lon();
    77                 latlon[2] = b.getMax().lat();
    78                 latlon[3] = b.getMax().lon();
    79             }
     70        public Bookmark(Bounds area) {
     71            this.area = area;           
    8072        }
    8173       
     
    8880        }
    8981       
    90         public Bounds asBounds() {
    91             return new Bounds(latlon[0], latlon[1], latlon[2], latlon[3]);
     82        public Bounds getArea() {
     83            return area;
     84        }
     85
     86        public String getName() {
     87            return name;
     88        }
     89
     90        public void setName(String name) {
     91            this.name = name;
     92        }
     93
     94        public void setArea(Bounds area) {
     95            this.area = area;
    9296        }
    9397    }
     
    488492            // FIXME: legacy code using ',' sign, should be \u001e only
    489493            Matcher m = Pattern.compile("^(.+)[,\u001e](-?\\d+.\\d+)[,\u001e](-?\\d+.\\d+)[,\u001e](-?\\d+.\\d+)[,\u001e](-?\\d+.\\d+)$").matcher(line);
    490             if(m.matches())
    491             {
    492                 Bookmark b = new Bookmark();
    493                 b.name = m.group(1);
    494                 for (int i = 0; i < b.latlon.length; ++i) {
    495                     b.latlon[i] = Double.parseDouble(m.group(i+2));
     494            if (!m.matches() || m.groupCount() != 5) {
     495                System.err.println(tr("Error: Unexpected line ''{0}'' in bookmark file ''{1}''",line, bookmarkFile.toString()));
     496                continue;
     497            }
     498            Bookmark b = new Bookmark();
     499            b.setName(m.group(1));
     500            double[] values= new double[4];
     501            for (int i = 0; i < 4; ++i) {
     502                try {
     503                    values[i] = Double.parseDouble(m.group(i+2));
     504                } catch(NumberFormatException e) {
     505                    System.err.println(tr("Error: Illegal double value ''{0}'' on line ''{1}'' in bookmark file ''{2}''",m.group(i+2),line, bookmarkFile.toString()));
     506                    continue;                   
    496507                }
    497                 bookmarks.add(b);
    498             }
     508            }
     509            b.setArea(new Bounds(values));
     510            bookmarks.add(b);
    499511        }
    500512        in.close();
     
    511523                new FileOutputStream(bookmarkFile), "utf-8"));
    512524        for (Bookmark b : bookmarks) {
    513             out.print(b.name+"\u001e");
    514             for (int i = 0; i < b.latlon.length; ++i) {
    515                 out.print(b.latlon[i]+(i<b.latlon.length-1?"\u001e":""));
    516             }
     525            out.print(b.getName()+ "\u001e");
     526            Bounds area = b.getArea();
     527            out.print(area.getMin().lat() +"\u001e");
     528            out.print(area.getMin().lon() +"\u001e");
     529            out.print(area.getMax().lat() +"\u001e");
     530            out.print(area.getMax().lon());
    517531            out.println();
    518532        }
  • trunk/src/org/openstreetmap/josm/data/ServerSidePreferences.java

    r2017 r2334  
    2525
    2626import org.openstreetmap.josm.Main;
     27import org.openstreetmap.josm.data.Preferences.Bookmark;
    2728import org.openstreetmap.josm.io.OsmConnection;
    2829import org.openstreetmap.josm.io.XmlWriter;
     
    191192            for (String line = in.readLine(); line != null; line = in.readLine()) {
    192193                StringTokenizer st = new StringTokenizer(line, ",");
    193                 if (st.countTokens() < 5) {
     194                if (st.countTokens() != 5) {
     195                    System.err.println(tr("Error: Unexpected line ''{0}'' in bookmark list from server",line));
    194196                    continue;
    195197                }
    196198                Bookmark b = new Bookmark();
    197                 b.name = st.nextToken();
    198                 try {
    199                     for (int i = 0; i < b.latlon.length; ++i) {
    200                         b.latlon[i] = Double.parseDouble(st.nextToken());
     199                b.setName(st.nextToken());
     200                double[] values= new double[4];
     201                for (int i = 0; i < 4; ++i) {
     202                    String token = st.nextToken();
     203                    try {                       
     204                        values[i] = Double.parseDouble(token);
     205                    } catch(NumberFormatException e) {
     206                        System.err.println(tr("Error: Illegal double value ''{0}'' on line ''{1}'' in bookmark list from server",token,line));
     207                        continue;                   
    201208                    }
    202                     bookmarks.add(b);
    203                 } catch (NumberFormatException x) {
    204                     // line not parsed
    205                 }
     209                }
     210                b.setArea(new Bounds(values));
     211                bookmarks.add(b);
    206212            }
    207213            in.close();
  • trunk/src/org/openstreetmap/josm/gui/BookmarkList.java

    r2067 r2334  
    44import static org.openstreetmap.josm.tools.I18n.tr;
    55
     6import java.awt.Component;
    67import java.io.IOException;
    78import java.util.Collection;
     
    910
    1011import javax.swing.DefaultListModel;
     12import javax.swing.JLabel;
    1113import javax.swing.JList;
    1214import javax.swing.JOptionPane;
     15import javax.swing.ListCellRenderer;
     16import javax.swing.UIManager;
    1317
    1418import org.openstreetmap.josm.Main;
     19import org.openstreetmap.josm.data.Bounds;
    1520import org.openstreetmap.josm.data.Preferences;
     21import org.openstreetmap.josm.data.Preferences.Bookmark;
    1622
    1723/**
     
    2834        load();
    2935        setVisibleRowCount(7);
     36        setCellRenderer(new BookmarkCellRenderer());
    3037    }
    3138
     
    7380        }
    7481    }
     82   
     83    class BookmarkCellRenderer extends JLabel implements ListCellRenderer {
     84
     85        public BookmarkCellRenderer() {
     86            setOpaque(true);
     87        }
     88       
     89        protected void renderColor(boolean selected) {
     90            if (selected) {
     91                setBackground(UIManager.getColor("List.selectionBackground"));
     92                setForeground(UIManager.getColor("List.selectionForeground"));
     93            } else {
     94                setBackground(UIManager.getColor("List.background"));
     95                setForeground(UIManager.getColor("List.foreground"));
     96            }
     97        }
     98       
     99        protected String buildToolTipText(Bookmark b) {
     100            Bounds area = b.getArea();
     101            StringBuffer sb = new StringBuffer();
     102            sb.append("<html>min[latitude,longitude]=<strong>[")
     103            .append(area.getMin().lat()).append(",").append(area.getMin().lon()).append("]</strong>")
     104            .append("<br>")
     105            .append("max[latitude,longitude]=<strong>[")
     106            .append(area.getMax().lat()).append(",").append(area.getMax().lon()).append("]</strong>")
     107            .append("</html>");
     108            return sb.toString();
     109           
     110        }
     111        public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected,
     112                boolean cellHasFocus) {
     113           
     114            Bookmark b = (Bookmark) value;
     115            renderColor(isSelected);
     116            setText(b.getName());
     117            setToolTipText(buildToolTipText(b));
     118            return this;
     119        }       
     120    }
    75121}
  • trunk/src/org/openstreetmap/josm/gui/download/BookmarkSelection.java

    r2332 r2334  
    44import static org.openstreetmap.josm.tools.I18n.tr;
    55
     6import java.awt.GridBagConstraints;
    67import java.awt.GridBagLayout;
    7 import java.awt.GridLayout;
    88import java.awt.event.ActionEvent;
    9 import java.awt.event.ActionListener;
    109
     10import javax.swing.AbstractAction;
    1111import javax.swing.DefaultListModel;
    1212import javax.swing.JButton;
     
    2020import org.openstreetmap.josm.data.Bounds;
    2121import org.openstreetmap.josm.data.Preferences;
     22import org.openstreetmap.josm.data.Preferences.Bookmark;
    2223import org.openstreetmap.josm.gui.BookmarkList;
    23 import org.openstreetmap.josm.tools.GBC;
     24import org.openstreetmap.josm.tools.ImageProvider;
    2425
    2526/**
     
    3435public class BookmarkSelection implements DownloadSelection {
    3536
    36     private Preferences.Bookmark tempBookmark = null;
     37    private Bounds currentArea;
    3738    private BookmarkList bookmarks;
     39   
     40    protected JPanel buildButtonPanel() {
     41        JPanel pnl = new JPanel();
     42        pnl.setLayout(new GridBagLayout());
     43        GridBagConstraints gc = new GridBagConstraints();
     44        gc.fill = GridBagConstraints.HORIZONTAL;
     45        gc.weightx = 1.0;
     46        gc.weighty = 0.0;
     47        pnl.add(new JButton(new AddAction()), gc);
    3848
     49        gc.gridy = 1;
     50        RemoveAction removeAction = new RemoveAction();
     51        bookmarks.addListSelectionListener(removeAction);
     52        pnl.add(new JButton(removeAction), gc);
     53
     54        gc.gridy = 2;
     55        RenameAction renameAction = new RenameAction();
     56        bookmarks.addListSelectionListener(renameAction);
     57        pnl.add(new JButton(renameAction), gc);
     58
     59        gc.fill = GridBagConstraints.BOTH;
     60        gc.weightx = 1.0;
     61        gc.weighty = 1.0;
     62        gc.gridy = 3;
     63        pnl.add(new JPanel(), gc); // just a filler
     64        return pnl;
     65    }
     66 
    3967    public void addGui(final DownloadDialog gui) {
    40 
    4168        JPanel dlg = new JPanel(new GridBagLayout());
    4269        gui.addDownloadAreaSelector(dlg, tr("Bookmarks"));
    43 
     70        GridBagConstraints gc = new GridBagConstraints();
     71     
     72       
    4473        bookmarks = new BookmarkList();
    4574        bookmarks.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
     
    4776                Preferences.Bookmark b = (Preferences.Bookmark)bookmarks.getSelectedValue();
    4877                if (b != null) {
    49                     gui.boundingBoxChanged(b.asBounds(),BookmarkSelection.this);
     78                    gui.boundingBoxChanged(b.getArea(),BookmarkSelection.this);
    5079                }
    5180            }
    5281        });
    53         //wc.addListMarker(bookmarks);
    54         dlg.add(new JScrollPane(bookmarks), GBC.eol().fill());
    55 
    56         JPanel buttons = new JPanel(new GridLayout(1,2));
    57         JButton add = new JButton(tr("Add"));
    58         add.addActionListener(new ActionListener(){
    59             public void actionPerformed(ActionEvent e) {
    60 
    61                 if (tempBookmark == null) {
    62                     JOptionPane.showMessageDialog(
    63                             Main.parent,
    64                             tr("Please enter the desired coordinates first."),
    65                             tr("Information"),
    66                             JOptionPane.INFORMATION_MESSAGE
    67                     );
    68                     return;
    69                 }
    70                 tempBookmark.name = JOptionPane.showInputDialog(
    71                         Main.parent,tr("Please enter a name for the location."),
    72                         tr("Name of location"),
    73                         JOptionPane.QUESTION_MESSAGE
    74                 );
    75                 if (tempBookmark.name != null && !tempBookmark.name.equals("")) {
    76                     ((DefaultListModel)bookmarks.getModel()).addElement(tempBookmark);
    77                     bookmarks.save();
    78                 }
    79             }
    80         });
    81         buttons.add(add);
    82         JButton remove = new JButton(tr("Remove"));
    83         remove.addActionListener(new ActionListener(){
    84             public void actionPerformed(ActionEvent e) {
    85                 Object sel = bookmarks.getSelectedValue();
    86                 if (sel == null) {
    87                     JOptionPane.showMessageDialog(
    88                             Main.parent,
    89                             tr("Select a bookmark first."),
    90                             tr("Information"),
    91                             JOptionPane.INFORMATION_MESSAGE
    92                     );
    93                     return;
    94                 }
    95                 ((DefaultListModel)bookmarks.getModel()).removeElement(sel);
    96                 bookmarks.save();
    97             }
    98         });
    99         buttons.add(remove);
    100         dlg.add(buttons, GBC.eop().fill(GBC.HORIZONTAL));
     82               
     83        gc.fill = GridBagConstraints.VERTICAL;
     84        gc.weightx = 0.0;
     85        gc.weighty = 1.0;       
     86        dlg.add(buildButtonPanel(),gc);
     87       
     88        gc.fill = GridBagConstraints.BOTH;
     89        gc.weightx = 1.0;
     90        gc.weighty = 1.0;   
     91        gc.gridx = 1;
     92        dlg.add(new JScrollPane(bookmarks), gc);       
    10193    }
    102 
    10394   
    10495    public void setDownloadArea(Bounds area) {
    10596        if (area == null) return;
    106         tempBookmark = new Preferences.Bookmark(area);
     97        this.currentArea = area;
    10798        bookmarks.clearSelection();
    10899    }
     100   
     101    class AddAction extends AbstractAction {
     102        public AddAction() {
     103            //putValue(NAME, tr("Add"));
     104            putValue(SMALL_ICON, ImageProvider.get("dialogs", "add"));
     105            putValue(SHORT_DESCRIPTION, tr("Add a bookmark for the currently selected download area"));
     106        }
     107       
     108        public void actionPerformed(ActionEvent e) {
     109            if (currentArea == null) {
     110                JOptionPane.showMessageDialog(
     111                        Main.parent,
     112                        tr("Currently, there is no download area selected. Please select an area first."),
     113                        tr("Information"),
     114                        JOptionPane.INFORMATION_MESSAGE
     115                );
     116                return;
     117            }
     118            Bookmark b = new Bookmark();
     119            b.setName(
     120                    JOptionPane.showInputDialog(
     121                    Main.parent,tr("Please enter a name for the bookmarked download area."),
     122                    tr("Name of location"),
     123                    JOptionPane.QUESTION_MESSAGE)
     124            );
     125            b.setArea(currentArea);
     126            if (b.getName() != null && !b.getName().equals("")) {
     127                ((DefaultListModel)bookmarks.getModel()).addElement(b);
     128                bookmarks.save();
     129            }           
     130        }
     131    }
     132   
     133    class RemoveAction extends AbstractAction implements ListSelectionListener{
     134        public RemoveAction() {
     135           //putValue(NAME, tr("Remove"));
     136            putValue(SMALL_ICON, ImageProvider.get("dialogs", "delete"));
     137            putValue(SHORT_DESCRIPTION, tr("Remove the currently selected bookmarks"));
     138            updateEnabledState();
     139        }
     140       
     141        public void actionPerformed(ActionEvent e) {
     142            Object[] sels = bookmarks.getSelectedValues();
     143            if (sels == null || sels.length == 0) {
     144                return;
     145            }
     146            for (Object sel: sels) {
     147                ((DefaultListModel)bookmarks.getModel()).removeElement(sel);
     148            }
     149            bookmarks.save();
     150        }
     151        protected void updateEnabledState() {
     152            setEnabled(bookmarks.getSelectedIndices().length > 0);
     153        }
     154        public void valueChanged(ListSelectionEvent e) {
     155            updateEnabledState();
     156        }       
     157    }
     158   
     159    class RenameAction extends AbstractAction implements ListSelectionListener{
     160        public RenameAction() {
     161           //putValue(NAME, tr("Remove"));
     162            putValue(SMALL_ICON, ImageProvider.get("dialogs", "edit"));
     163            putValue(SHORT_DESCRIPTION, tr("Rename the currently selected bookmark"));
     164            updateEnabledState();
     165        }
     166       
     167        public void actionPerformed(ActionEvent e) {
     168            Object[] sels = bookmarks.getSelectedValues();
     169            if (sels == null || sels.length != 1) {
     170                return;
     171            }
     172            Bookmark b = (Bookmark)sels[0];
     173            Object value =
     174                    JOptionPane.showInputDialog(
     175                    Main.parent,tr("Please enter a name for the bookmarked download area."),
     176                    tr("Name of location"),
     177                    JOptionPane.QUESTION_MESSAGE,
     178                    null,
     179                    null,
     180                    b.getName()
     181                    );
     182            if (value != null) {
     183                b.setName(value.toString());           
     184                bookmarks.save();
     185                bookmarks.repaint();
     186            }
     187        }
     188        protected void updateEnabledState() {
     189            setEnabled(bookmarks.getSelectedIndices().length == 1);
     190        }
     191        public void valueChanged(ListSelectionEvent e) {
     192            updateEnabledState();
     193        }       
     194    }
     195   
    109196}
  • trunk/src/org/openstreetmap/josm/gui/download/BoundingBoxSelection.java

    r2332 r2334  
    1414import javax.swing.BorderFactory;
    1515import javax.swing.JLabel;
    16 import javax.swing.JOptionPane;
    1716import javax.swing.JPanel;
    1817import javax.swing.JTextArea;
     
    2423import javax.swing.text.JTextComponent;
    2524
    26 import org.openstreetmap.josm.Main;
    2725import org.openstreetmap.josm.data.Bounds;
    2826import org.openstreetmap.josm.data.coor.LatLon;
     
    183181            }
    184182            if (!LatLon.isValidLat(value)) {
    185                 JOptionPane.showMessageDialog(
    186                         Main.parent,
    187                         tr("Value for latitude in range [-90,90] required.", tfLatValue.getText()),
    188                         tr("Error"),
    189                         JOptionPane.ERROR_MESSAGE
    190                );         
    191183                setErrorMessage(tr("Value for latitude in range [-90,90] required.", tfLatValue.getText()));
    192184                return;           
Note: See TracChangeset for help on using the changeset viewer.