📄 mapdemo.java
字号:
package org.placelab.demo.mapview;import java.io.FileOutputStream;import java.io.IOException;import java.util.Enumeration;import java.util.Hashtable;import java.util.Vector;import org.eclipse.jface.dialogs.MessageDialog;import org.eclipse.swt.SWT;import org.eclipse.swt.events.KeyAdapter;import org.eclipse.swt.events.KeyEvent;import org.eclipse.swt.events.SelectionEvent;import org.eclipse.swt.events.SelectionListener;import org.eclipse.swt.graphics.Point;import org.eclipse.swt.graphics.Rectangle;import org.eclipse.swt.layout.GridData;import org.eclipse.swt.layout.GridLayout;import org.eclipse.swt.widgets.Display;import org.eclipse.swt.widgets.FileDialog;import org.eclipse.swt.widgets.Menu;import org.eclipse.swt.widgets.MenuItem;import org.eclipse.swt.widgets.Shell;import org.placelab.client.PlacelabWithProxy;import org.placelab.client.tracker.CentroidTracker;import org.placelab.client.tracker.Tracker;import org.placelab.eventsystem.SWTEventSystem;import org.placelab.mapper.CompoundMapper;import org.placelab.mapper.Mapper;import org.placelab.spotter.LogSpotter;import org.placelab.spotter.PlacelabStumblerLogSpotter;import org.placelab.spotter.Spotter;import org.placelab.spotter.SpotterException;import org.placelab.spotter.WiFiSpotter;import org.placelab.util.Cmdline;/** * A map application. */public class MapDemo { protected PlacelabWithProxy daemon; protected Display display; protected Shell shell; protected TrackedMapView mapView; protected Menu bar; protected Vector placeItems; public WadData data; protected Spotter sp; protected Tracker createTracker(Mapper m) { Tracker t = new CentroidTracker(m); return t;// CompoundTracker ct = new CompoundTracker();// BeaconAndGPSParticleFilterTracker t = new BeaconAndGPSParticleFilterTracker(m, 1000, 10000);// t.getParticleFilter().setMotionModel(new WeightedMotionModel());// t.getParticleFilter().setSensorModel(new UniformSensorModel(m));// t.getParticleFilter().setSensorModel(new LogRRSensorModel(m));// BeaconAndGPSParticleFilterTracker t = new BeaconAndGPSParticleFilterTracker(m, 1000, 10000);// t.getParticleFilter().setMotionModel(new WeightedMotionModel());// ParticleFilterTracker t = new ParticleFilterTracker(m);// t.getParticleFilter().setSensorModel(new LogRRSensorModel(m));// t.getParticleFilter().setMotionModel(new WeightedMotionModel());// ParticleFilterTracker t = new ParticleFilterTracker(m); //t.getParticleFilter().setSensorModel(new The914MhzSensorModel(m));// t.getParticleFilter().setMotionModel(new HybridMotionModel());// ct.addTracker(t);// ct.addTracker(new PositionTracker());// return ct; } protected MapDemo() { } public MapDemo(String logfile, String mapArchive, String mapName, Mapper m) throws IOException { if (m==null) m = CompoundMapper.createDefaultMapper(true, true); buildShell(); sp = null; if(logfile == null) { sp = new WiFiSpotter(250); } else { sp = LogSpotter.newSpotter(logfile); } /*if (logfile==null) { daemon = new PlacelabWithProxy(createTracker(m), m, -1); } else { PlacelabStumblerLogSpotter sp = new PlacelabStumblerLogSpotter(logfile); sp.setOutputStumblerMeasurements(false);// Spotter sp = LogSpotter.newSpotter(logfile); daemon = new PlacelabWithProxy(sp, createTracker(m), m, -1); }*/ Tracker t = createTracker(m); if(sp != null) sp.addListener(t); mapView = new TrackedMapView(shell, SWT.NONE, t, m); mapView.getHolder().addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { if((e.character == '+') || (e.character == '=')) { if(sp instanceof LogSpotter) { LogSpotter log = (LogSpotter)sp; if(log.getRate() < 1600) ((LogSpotter)sp).setRate(log.getRate() * 2); } } else if(e.character == '-') { if(sp instanceof LogSpotter) { LogSpotter log = (LogSpotter)sp; if(log.getRate() > 2) ((LogSpotter)sp).setRate(log.getRate() / 2); } } } }); mapView.setLayoutData(new GridData(GridData.FILL_BOTH)); mapView.setShowBeacons(false); loadWad(mapArchive, mapName); if(Cmdline.getArg("zoom") != null) { try { double zoom = Double.parseDouble(Cmdline.getArg("zoom")); if(zoom > 0) { mapView.setZoom(zoom); } } catch (NumberFormatException nfe) { mapView.setZoom(1.0); } } resize(); shell.open(); } protected void loadWad() { loadWad(null, null); } protected void loadWad(String path, String mapName) { WadData temp; if(path == null) { path = askUserForFile(); // if path is still null, user doesn't want to // load a wad. so be it. if(path == null) { buildMenu(); return; } } try { temp = new WadData(path); } catch (Exception e) { errorDialog("Couldn't load mapwad", e); return; } MapBacking mapBack = null; if (mapName != null) { mapBack = temp.getMap(mapName); if (mapBack == null) { // print this stuff on the console since its only going to result // from incorrect cmdline args System.out.println("Map: " + mapName + " not found. Available maps are:\n"); for (Enumeration en = temp.getMaps().keys(); en.hasMoreElements();) { System.out.println(" - " + en.nextElement().toString()); } //System.exit(1); System.out.println("Choosing an arbitrary map instead"); mapName = null; } if(mapName == null) mapBack = temp.getDefaultMap(); } Hashtable defaultPlaces = temp.getDefaultPlaceSets(); if(mapBack == null) { // render the first map if there is no default try { mapBack = (MapBacking)temp.getMaps().elements().nextElement(); } catch (java.util.NoSuchElementException e) { errorDialog("That mapwad doesn't have any maps!"); return; } } if(mapBack == null) { errorDialog("That mapwad doesn't have any maps!"); return; } if(defaultPlaces == null) defaultPlaces = new Hashtable(); data = temp; mapView.setMapData(mapBack); mapView.setPlaceSets(defaultPlaces); // XXX: hacked regions in here RegionOverlay ro = new RegionOverlay(mapView); ro.addRegions(data.getRegions()); shell.setText(mapBack.getName()); buildMenu(); } protected String askUserForFile() { FileDialog fd = new FileDialog(shell, SWT.OPEN); String path = fd.open(); return path; } protected void errorDialog(String msg) { errorDialog(msg, null); } protected void errorDialog(String msg, Throwable e) { if(e != null) e.printStackTrace(); MessageDialog d = new MessageDialog(shell, e == null ? "Error" : msg, null, e == null ? msg : e.toString(), MessageDialog.ERROR, new String[]{"OK"}, 0); d.open(); } protected void buildShell() { int flag = SWT.SHELL_TRIM; if(System.getProperty("os.name").equalsIgnoreCase ("Windows CE")) flag = SWT.NO_TRIM; Display.setAppName("Placelab XMapDemo"); display = Display.getCurrent(); if(display == null) display = new Display(); shell = new Shell(display, flag); GridLayout layout = new GridLayout(); layout.marginWidth = layout.marginHeight = 0; shell.setLayout(layout); } protected void buildMenu() { // building menus by hand is a crime // but alas, this is how its done in swt int commandKey = SWT.CONTROL; if(BrowserControl.isMacPlatform()) commandKey = SWT.COMMAND; bar = new Menu(shell, SWT.BAR); shell.setMenuBar(bar); // build file menu MenuItem fileItem = new MenuItem(bar, SWT.CASCADE); fileItem.setText("File"); Menu fileMenu = new Menu(bar); MenuItem openItem = new MenuItem(fileMenu, SWT.PUSH); openItem.setText("Open..."); openItem.setAccelerator(commandKey | 'O'); openItem.addSelectionListener(new SelectionListener() { public void widgetSelected(SelectionEvent e) { loadWad(); } public void widgetDefaultSelected(SelectionEvent e) { loadWad(); } }); MenuItem saveItem = new MenuItem(fileMenu, SWT.PUSH); saveItem.setText("Save"); saveItem.setAccelerator(commandKey | 'S'); saveItem.addSelectionListener(new SelectionListener() { public void widgetSelected(SelectionEvent e) { saveWad(); } public void widgetDefaultSelected(SelectionEvent e) { saveWad(); } }); MenuItem saveAsItem = new MenuItem(fileMenu, SWT.PUSH); saveAsItem.setText("Save As..."); saveAsItem.setAccelerator(commandKey | SWT.SHIFT | 'S'); saveAsItem.addSelectionListener(new SelectionListener() { public void widgetSelected(SelectionEvent e) { saveAsWad(); } public void widgetDefaultSelected(SelectionEvent e) { saveAsWad(); } }); if(!BrowserControl.isMacPlatform()) { MenuItem exitItem = new MenuItem(fileMenu, SWT.PUSH); exitItem.setText("Exit"); exitItem.setAccelerator(SWT.ALT | SWT.F4); exitItem.addSelectionListener(new SelectionListener() { public void widgetSelected(SelectionEvent e) { shutdown(); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -