/**
* OSM2ShareNav
*
*
* @version $Revision$ ($Name$)
*
* Copyright (C) 2007 Harald Mueller
*/
package net.sharenav.osm.fBrowser;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.io.File;
import javax.swing.JDesktopPane;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.KeyStroke;
import javax.swing.filechooser.FileFilter;
import org.openstreetmap.gui.jmapviewer.JMapViewer;
/**
* @author hmueller
*
*/
public class FBrowser extends JFrame implements ActionListener {
/**
*
*/
private static final long serialVersionUID = 1L;
JDesktopPane desktop;
private String root="D:/java/Workspace/ShareNav-Release/Osm2ShareNav/testdata";
public String getRoot() {
return root;
}
public MapFrame getMap() {
return map;
}
private MapFrame map;
/**
*
*/
public FBrowser() {
super("GPSMid File Browser");
int inset = 50;
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
setBounds(inset, inset,
screenSize.width - inset*2,
screenSize.height - inset*2);
//Set up the GUI.
desktop = new JDesktopPane(); //a specialized layered pane
// createFrame(); //create first "window"
setContentPane(desktop);
setJMenuBar(createMenuBar());
//Make dragging a little faster but perhaps uglier.
desktop.setDragMode(JDesktopPane.OUTLINE_DRAG_MODE);
}
protected JMenuBar createMenuBar() {
JMenuBar menuBar = new JMenuBar();
//Set up the lone menu.
JMenu menu = new JMenu("Open");
menu.setMnemonic(KeyEvent.VK_O);
menuBar.add(menu);
//Set up the lone menu.
JMenuItem cmenu = new JMenuItem("Config");
cmenu.setMnemonic(KeyEvent.VK_C);
cmenu.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_C, ActionEvent.ALT_MASK));
cmenu.setActionCommand("config");
cmenu.addActionListener(this);
menuBar.add(cmenu);
//setup Dictionary
for (int i=0 ; i<=3 ; i++){
menuEntry(i, menu);
}
//Set up the map menu item.
JMenuItem menuItem = new JMenuItem("Map");
menuItem.setMnemonic(KeyEvent.VK_M);
menuItem.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_M, ActionEvent.ALT_MASK));
menuItem.setActionCommand("map");
menuItem.addActionListener(this);
menu.add(menuItem);
//Set up the second menu item.
menuItem = new JMenuItem("Quit");
menuItem.setMnemonic(KeyEvent.VK_Q);
menuItem.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_Q, ActionEvent.ALT_MASK));
menuItem.setActionCommand("quit");
menuItem.addActionListener(this);
menu.add(menuItem);
return menuBar;
}
private void menuEntry(int level,JMenu menu){
JMenuItem menuItem = new JMenuItem("Level " + level);
menuItem.setMnemonic(KeyEvent.VK_0 + level);
menuItem.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_0 + level, ActionEvent.ALT_MASK));
menuItem.setActionCommand("level" + level);
menuItem.addActionListener(this);
menu.add(menuItem);
}
@Override
public void actionPerformed(ActionEvent e) {
String cmd=e.getActionCommand();
System.out.println("call " + cmd);
if (cmd.startsWith("level")) {
createFrame(cmd);
} else if ("config".equals(cmd)) {
askDataDir();
} else if ("map".equals(cmd)){
openMap();
} else {
quit();
}
}
/** Create a new map internal frame.
*/
protected void openMap() {
map = new MapFrame();
map.setVisible(true); //necessary as of 1.3
desktop.add(map);
try {
map.setSelected(true);
} catch (java.beans.PropertyVetoException e) {
}
}
/** Create a new internal Tree frame which shows the tile structure.
*/
protected void createFrame(String cmd) {
DictTreeFrame frame = new DictTreeFrame(cmd,this);
frame.setVisible(true); //necessary as of 1.3
desktop.add(frame);
try {
frame.setSelected(true);
} catch (java.beans.PropertyVetoException e) {}
}
/** Quit the application.
*/
protected void quit() {
System.exit(0);
}
private void askDataDir() {
JFileChooser chooser = new JFileChooser(root);
chooser.setAcceptAllFileFilterUsed(false);
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
chooser.setDialogTitle("Select map subdirectory");
FileFilter ff = new FileFilter() {
@Override
public boolean accept(File f) {
if (f.isDirectory()) {
return true;
}
return false;
}
@Override
public String getDescription() {
return "Data Dir";
}
};
chooser.setFileFilter(ff);
int returnVal = chooser.showOpenDialog(null);
if (returnVal == JFileChooser.APPROVE_OPTION) {
root = chooser.getSelectedFile().getAbsolutePath();
}
createFrame("level0");
createFrame("level1");
createFrame("level2");
createFrame("level3");
openMap();
}
/**
* Create the GUI and show it. For thread safety,
* this method should be invoked from the
* event-dispatching thread.
*/
private static void createAndShowGUI() {
//Make sure we have nice window decorations.
JFrame.setDefaultLookAndFeelDecorated(true);
//Create and set up the window.
FBrowser frame = new FBrowser();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Display the window.
frame.setVisible(true);
}
public static void main(String[] args) {
//Schedule a job for the event-dispatching thread:
//creating and showing this application's GUI.
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
/**
* @param tile
*/
public void setSelected(Tile tile) {
if (map != null){
map.setSelected(tile);
tile.setMap(map);
}
}
/**
* @param sel
*/
public void setSelected(BWay sel) {
if (map != null){
map.setSelected(sel);
sel.getTile().setMap(map);
}
}
}