001    // This code has been adapted and copied from code that has been written by Immanuel Scholz and others for JOSM.
002    // License: GPL. Copyright 2007 by Tim Haussmann
003    package org.openstreetmap.josm.gui.download;
004    
005    import static org.openstreetmap.josm.tools.I18n.tr;
006    
007    import java.awt.Dimension;
008    import java.awt.Graphics;
009    import java.awt.Toolkit;
010    
011    import java.beans.PropertyChangeEvent;
012    import java.beans.PropertyChangeListener;
013    
014    import javax.swing.JPanel;
015    
016    import org.openstreetmap.josm.data.Bounds;
017    import org.openstreetmap.josm.gui.bbox.BBoxChooser;
018    import org.openstreetmap.josm.gui.bbox.SlippyMapBBoxChooser;
019    
020    /**
021     * JComponent that displays the slippy map tiles
022     *
023     * @author Tim Haussmann
024     *
025     */
026    public class SlippyMapChooser extends JPanel implements DownloadSelection, PropertyChangeListener{
027    
028        private DownloadDialog iGui;
029        private SlippyMapBBoxChooser pnlSlippyMapBBoxChooser;
030        // standard dimension
031        private Dimension iDownloadDialogDimension;
032    
033        /**
034         * Create the chooser component.
035         */
036        public SlippyMapChooser() {
037            pnlSlippyMapBBoxChooser = new SlippyMapBBoxChooser();
038            pnlSlippyMapBBoxChooser.addPropertyChangeListener(this);
039        }
040    
041        public void addGui(final DownloadDialog gui) {
042            iGui = gui;
043            iGui.addDownloadAreaSelector(pnlSlippyMapBBoxChooser, tr("Slippy map"));
044        }
045    
046        public void setDownloadArea(Bounds area) {
047            pnlSlippyMapBBoxChooser.setBoundingBox(area);
048            repaint();
049        }
050    
051        public void propertyChange(PropertyChangeEvent evt) {
052            if (evt.getPropertyName().equals(BBoxChooser.BBOX_PROP)) {
053                if (iGui != null) {
054                    iGui.boundingBoxChanged((Bounds)evt.getNewValue(), this);
055                }
056            } else if(evt.getPropertyName().equals(SlippyMapBBoxChooser.RESIZE_PROP)) {
057                int w, h;
058    
059                // retrieve the size of the display
060                Dimension iScreenSize = Toolkit.getDefaultToolkit().getScreenSize();
061    
062                // enlarge
063                if(iDownloadDialogDimension == null) {
064                    // make the each dimension 90% of the absolute display size
065                    w = iScreenSize.width * 90 / 100;
066                    h = iScreenSize.height * 90 / 100;
067                    iDownloadDialogDimension = iGui.getSize(); 
068                }
069                // shrink
070                else {
071                    // set the size back to the initial dimensions
072                    w = iDownloadDialogDimension.width;
073                    h = iDownloadDialogDimension.height;
074                    iDownloadDialogDimension = null;
075                }
076    
077                // resize and center the DownloadDialog 
078                iGui.setBounds((iScreenSize.width - w) / 2, (iScreenSize.height - h) / 2, w, h); 
079                repaint();
080            }
081        }
082    }