Package aimax.osm.applications

Source Code of aimax.osm.applications.OsmViewerPlusApp

package aimax.osm.applications;

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Locale;

import javax.swing.JButton;
import javax.swing.JToggleButton;
import javax.swing.JToolBar;

import aimax.osm.data.DataResource;
import aimax.osm.data.EntityClassifier;
import aimax.osm.data.entities.EntityViewInfo;
import aimax.osm.viewer.DefaultEntityRenderer;
import aimax.osm.viewer.MapStyleFactory;
import aimax.osm.viewer.MapViewFrame;
import aimax.osm.viewer.MapViewPane;


/**
* Adds a night view mode to the map viewer. This class demonstrates, how
* additional functionality can be added to the <code>MapViewFrame</code>
* even without subclassing.
* @author Ruediger Lunde
*/
public class OsmViewerPlusApp implements ActionListener {
  protected MapViewFrame frame;
  private JButton zoomInButton;
  private JButton zoomOutButton;
  private JButton leftButton;
  private JButton upButton;
  private JButton downButton;
  private JButton rightButton;
  protected JToggleButton nightButton;
 
  public OsmViewerPlusApp(String[] args) {
    frame = new MapViewFrame(args);
    frame.setTitle("OSM Viewer+");
   
    JToolBar toolbar = frame.getToolbar();
    toolbar.addSeparator();
    nightButton = new JToggleButton("Night Mode");
    zoomInButton = new JButton("In");
    zoomInButton.addActionListener(this);
    toolbar.add(zoomInButton);
    zoomOutButton = new JButton("Out");
    zoomOutButton.addActionListener(this);
    toolbar.add(zoomOutButton);
    leftButton = new JButton("Left");
    leftButton.addActionListener(this);
    toolbar.add(leftButton);
    rightButton = new JButton("Right");
    rightButton.addActionListener(this);
    toolbar.add(rightButton);
    upButton = new JButton("Up");
    upButton.addActionListener(this);
    toolbar.add(upButton);
    downButton = new JButton("Down");
    downButton.addActionListener(this);
    toolbar.add(downButton);
   
    toolbar.addSeparator();
    toolbar.add(nightButton);
    nightButton.addActionListener(this);
  }
 
  public MapViewFrame getFrame() {
    return frame;
  }
 
  public void showFrame() {
    frame.setSize(800, 600);
    frame.setVisible(true);
  }
 
  /** Returns the default renderer without change. */
  protected DefaultEntityRenderer createDayRenderer() {
    return new DefaultEntityRenderer();
  }

  public void actionPerformed(ActionEvent e) {
    MapViewPane view = frame.getView();
    if (e.getSource() == zoomInButton) {
      view.zoom(2, view.getWidth() / 2, view.getHeight() / 2);
    } else if (e.getSource() == zoomOutButton) {
      view.zoom(0.5f, view.getWidth() / 2, view.getHeight() / 2);
    } else if (e.getSource() == leftButton) {
      view.adjust((int) (0.3 * view.getWidth()), 0);
    } else if (e.getSource() == rightButton) {
      view.adjust((int) (-0.3 * view.getWidth()), 0);
    else if (e.getSource() == upButton) {
      view.adjust(0, (int) (0.3 * view.getHeight()));
    } else if (e.getSource() == downButton) {
      view.adjust(0, (int) (-0.3 * view.getHeight()));
    } else if (e.getSource() == nightButton) {
      if (nightButton.isSelected()) {
        EntityClassifier<EntityViewInfo> eClassifier =
          new MapStyleFactory().createNightViewClassifier();
        frame.getView().getRenderer().setBackgroundColor(Color.BLACK);
        frame.getMap().setEntityClassifier(eClassifier);
      } else {
        EntityClassifier<EntityViewInfo> eClassifier =
          new MapStyleFactory().createDefaultClassifier();
        frame.getView().getRenderer().setBackgroundColor(Color.WHITE);
        frame.getMap().setEntityClassifier(eClassifier);
      }   
    }
  }

  /**
   * Start application with program arg <code>-screenwidth=xx</code>
   * (with xx the width in cm)
   * or <code>-screensize=yy</code> (with yy measured diagonally in inch).
   */
  public static void main(String[] args) {
    // indicates progress when reading large maps (for testing only)
    // Logger.getLogger("aimax.osm").setLevel(Level.FINEST);
    // Logger.getLogger("").getHandlers()[0].setLevel(Level.FINE);
   
    Locale.setDefault(Locale.US);
    OsmViewerPlusApp demo = new OsmViewerPlusApp(args);
    demo.getFrame().readMap(DataResource.getULMFileResource());
    demo.showFrame();
  }
}
TOP

Related Classes of aimax.osm.applications.OsmViewerPlusApp

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.