package ika.gui;
import ch.ethz.karto.swa.atlas.SystemInfo;
import com.fizzysoft.sdu.RecentDocumentsManager;
import ika.geo.*;
import ika.geo.clipboard.GeoTransferable;
import ika.geo.grid.GridChangeVoidOperator;
import ika.geo.grid.GridScaleOperator;
import ika.geo.grid.GridShadeOperator;
import ika.geo.grid.GridToImageOperator;
import ika.geoexport.ESRIASCIIGridExporter;
import ika.geoimport.*;
import ika.geo.grid.TerrainSculptorFilter;
import ika.utils.*;
import ika.map.tools.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.prefs.Preferences;
import javax.imageio.ImageIO;
import javax.swing.*;
/**
* A document window containing a map.
* @author Bernhard Jenny, Institute of Cartography, ETH Zurich.
*/
public class TerrainSculptorWindow extends MainWindow
implements RenderParamsProvider {
// names of grids that are displayed in the map
public static final ArrayList<String> GRID_NAMES = new ArrayList<String>();
static {
GRID_NAMES.add(TerrainSculptorFilter.RESULT_NAME);
GRID_NAMES.add(TerrainSculptorFilter.ORIGINAL_NAME);
GRID_NAMES.add(TerrainSculptorFilter.VALLEYS_NAME);
GRID_NAMES.add(TerrainSculptorFilter.RIDGES_NAME);
GRID_NAMES.add(TerrainSculptorFilter.COMBINATION_WEIGHT_NAME);
}
private TerrainSculptorFilter gridFilter = new TerrainSculptorFilter();
private ArrayList<GeoGrid> displayGrids;
private boolean adjustingGUI = false;
private RecentDocumentsManager rdm;
private boolean deferredFiltering = false;
/**
* Creates new form BaseMainWindow
*/
public TerrainSculptorWindow() {
this.initRecentDocumentsMenu(this);
this.initComponents();
this.initMenusForMac();
// pass a parent GeoSet to the MapComponent
this.mapComponent.setGeoSet(new GeoMap());
// specify the format of displayed coordinates
this.mapComponent.setCoordinateFormatter(new CoordinateFormatter("###,##0.#", "###,##0.#", 1));
// register this object so that rendering parameters can be customized.
this.mapComponent.setRenderParamsProvider(this);
mapComponent.getPageFormat().setVisible(false);
// add a MapEventListener: When the map changes, the dirty
// flag is set and the Save menu item updated.
MapEventListener mel = new MapEventListener() {
@Override
public void mapEvent(MapEvent evt) {
setDocumentDirty();
updateAllMenus();
}
};
// register the MapEventListener to be informed whenever the map changes.
GeoSetBroadcaster.addMapEventListener(mel, this.mapComponent.getGeoSet());
// register the coordinate info panel with the map
this.coordinateInfoPanel.registerWithMapComponent(this.mapComponent);
// register the scale info panel with the map
this.scaleLabel.registerWithMapComponent(this.mapComponent);
// set the initial tool
this.mapComponent.setMapTool(new ZoomInTool(mapComponent));
// maximise the size of this window. Fill the primary screen.
this.setExtendedState(JFrame.MAXIMIZED_BOTH);
this.validate();
// add a window listener that updates the menus when the
// state of the window changes (minimized, close, focus lost, activated, etc.)
WindowListener windowListener = new WindowListener() {
public void windowChanged(WindowEvent e) {
TerrainSculptorWindow mainWindow = (TerrainSculptorWindow) e.getWindow();
mainWindow.updateAllMenus();
}
@Override
public void windowOpened(WindowEvent e) {
this.windowChanged(e);
}
@Override
public void windowClosing(WindowEvent e) {
}
@Override
public void windowClosed(WindowEvent e) {
}
@Override
public void windowIconified(WindowEvent e) {
this.windowChanged(e);
}
@Override
public void windowDeiconified(WindowEvent e) {
this.windowChanged(e);
}
@Override
public void windowActivated(WindowEvent e) {
this.windowChanged(e);
}
@Override
public void windowDeactivated(WindowEvent e) {
this.windowChanged(e);
}
};
this.addWindowListener(windowListener);
// setup undo/redo
//this.mapComponent.registerUndoMenuItems(this.undoMenuItem, this.redoMenuItem);
// initialize the undo/redo manager with the current (empty) map content.
this.mapComponent.addUndo(null);
this.getRootPane().addPropertyChangeListener(new java.beans.PropertyChangeListener() {
@Override
public void propertyChange(java.beans.PropertyChangeEvent evt) {
windowModifiedPropertyChange(evt);
}
});
writeGUI();
showNoTerrainMessage();
}
private String errTitle() {
return appName() + " Error";
}
private void initRecentDocumentsMenu(final Component parent) {
rdm = new RecentDocumentsManager() {
private Preferences getPreferences() {
return Preferences.userNodeForPackage(TerrainSculptorWindow.class);
}
@Override
protected byte[] readRecentDocs() {
return getPreferences().getByteArray("RecentDocuments", null);
}
@Override
protected void writeRecentDocs(byte[] data) {
getPreferences().putByteArray("RecentDocuments", data);
}
@Override
protected void openFile(File file, ActionEvent event) {
try {
if (file != null) {
openDEM(file.getCanonicalPath());
}
} catch (IOException ex) {
String msg = "Could not open the terrain model.";
ErrorDialog.showErrorDialog(msg, errTitle(), ex, parent);
}
}
};
}
private String appName() {
Properties props = PropertiesLoader.loadProperties("ika.app.Application");
return props.getProperty("ApplicationName");
}
private void writeGUI() {
try {
adjustingGUI = true;
meanFilterLoopsSlider.setValue(gridFilter.getGridFilterLoops());
ridgesMeanFilterLoopsSlider.setValue(gridFilter.getRidgesMeanFilterLoops());
ridgesExaggerationSlider.setValue((int) (gridFilter.getRidgesExaggeration() * 100));
planCurvatureWeightSlider.setValue((int) (gridFilter.getRidgesPlancurvatureWeight() * 100));
valleysMeanFilterLoopsSlider.setValue(gridFilter.getValleysMeanFilterLoops());
valleysCurvatureThresholdSlider.setValue((int) (gridFilter.getValleysCurvatureUpperLimit() * 100));
valleysExaggerationSlider.setValue((int) (gridFilter.getValleysExaggeration() * 100));
combinationSlopeThresholdSlider.setValue((int) (gridFilter.getCombinationSlopeThreshold()));
} finally {
adjustingGUI = false;
}
}
private void showNoTerrainMessage() {
String msg = "Open a terrain model with File > Open Terrain\u2026";
mapComponent.setInfoString(msg);
mapComponent.showAll();
}
/**
* Read a grid file asynchronously.
* @param filePath
*/
public void openDEM(final String filePath) {
if (!ESRIASCIIGridReader.canRead(filePath)) {
showNoTerrainMessage();
String msg = "The selected file cannot be read.";
ErrorDialog.showErrorDialog(msg, errTitle(), null, this);
return;
}
// release previous grid to free memory
gridFilter.setGrid(null);
displayGrids = null;
SwingWorkerWithProgressIndicator worker;
worker = new SwingWorkerWithProgressIndicator<GeoGrid>(
this, appName() + " - Data Import", "", true) {
@Override
public void done() {
try {
GeoGrid grid = get(); // also tests for exceptions
// set title of window
String name = grid.getName();
if (name != null && name.trim().length() > 0) {
String title = name.trim();
if (Sys.isWindows()) {
title += " - " + appName();
}
setTitle(title);
}
grid.setName("Original Grid");
rdm.addDocument(new File(filePath), null);
gridFilter.setGrid(grid);
readGUIAndFilter(false);
} catch (Throwable ex) {
showNoTerrainMessage();
String exmsg = ex.getMessage();
if (exmsg != null && exmsg.contains("user canceled")) {
return;
}
//ex.printStackTrace();
String msg = "An error occured";
ErrorDialog.showErrorDialog(msg, errTitle(), ex, TerrainSculptorWindow.this);
return;
} finally {
complete();
}
}
@Override
protected GeoGrid doInBackground() throws Exception {
// read grid from file
GeoGrid grid = ESRIASCIIGridReader.read(filePath, this);
if (isAborted()) {
throw new IllegalStateException("user canceled");
}
return grid;
}
};
worker.setMaxTimeWithoutDialog(1);
worker.setMessage("Reading terrain model \"" + FileUtils.getFileName(filePath) + "\"");
worker.execute();
}
public void importGrid() {
String path = ika.utils.FileUtils.askFile(this, "Select an ESRI ASCII Grid", true);
if (path != null) {
openDEM(path);
}
}
/**
* Displays a dialog with information about the original sourceGrid. */
public void showGridInfo() {
try {
GeoGrid grid = gridFilter.getGrid();
if (grid == null) {
return;
}
StringBuilder sb = new StringBuilder();
sb.append("<html> <b>");
sb.append("Terrain Model");
sb.append("</b><br><br>");
sb.append(grid.toStringWithStatistics("<br>"));
sb.append("</html>");
String title = "Terrain Model Info";
JOptionPane.showMessageDialog(this, sb.toString(), title, JOptionPane.INFORMATION_MESSAGE);
} catch (Exception exc) {
String msg = "An error occured.";
ErrorDialog.showErrorDialog(msg, errTitle(), exc, this);
}
}
private void resetMap(boolean hadGrids) {
String nameOfDisplayGrid = getSelectedGridName();
GeoGrid grid = getNamedGrid(nameOfDisplayGrid);
Rectangle2D visArea = mapComponent.getVisibleArea();
mapComponent.removeAllGeoObjects();
if (grid == null) {
return;
}
// generate an image for display in the map
// FIXME: instead of allocating a new GeoImage, the existing image
// could be re-used.
final GeoImage image;
boolean shading = !("Combination Weight".equals(nameOfDisplayGrid));
if (shading) {
image = new GridShadeOperator().operateToImage(grid);
} else {
image = new GridToImageOperator().operate(grid);
}
image.setSelectable(false);
mapComponent.addGeoObject(image, false);
mapComponent.zoomOnRectangle(visArea);
if (!hadGrids || !mapComponent.isObjectVisibleOnMap(image, true)) {
mapComponent.showAll();
}
}
private String getSelectedGridName() {
if (viewFinalCheckBoxMenuItem.isSelected()) {
return GRID_NAMES.get(0);
}
if (viewOriginalCheckBoxMenuItem.isSelected()) {
return GRID_NAMES.get(1);
}
if (viewLowlandsCheckBoxMenuItem.isSelected()) {
return GRID_NAMES.get(2);
}
if (viewMountainsCheckBoxMenuItem.isSelected()) {
return GRID_NAMES.get(3);
}
if (viewCombinationCheckBoxMenuItem.isSelected()) {
return GRID_NAMES.get(4);
}
return null;
}
private GeoGrid getNamedGrid(String name) {
if (name == null || displayGrids == null) {
return null;
}
for (GeoGrid grid : displayGrids) {
if (grid != null && name.equals(grid.getName())) {
return grid;
}
}
return null;
}
private void filter() {
TerrainSculptorProgressIndicator worker;
worker = new TerrainSculptorProgressIndicator<ArrayList<GeoGrid>>(
this, appName() + " - Filtering", "", true) {
@Override
public void done() {
boolean hadGrids = (displayGrids != null) && displayGrids.size() > 0;
try {
ArrayList<GeoGrid> newGrids = get(); // also tests for exceptions
if (newGrids == null) {
return;
}
displayGrids = newGrids;
mapComponent.setInfoString("");
} catch (Throwable ex) {
String exmsg = ex.getMessage();
if (exmsg != null && exmsg.contains("user canceled")) {
// show button to restart filtering
CardLayout cl = (CardLayout)(centerPanel.getLayout());
cl.show(centerPanel, "filterButton");
filteringStatusLabel.setText("Filtering has been canceled.");
return;
}
ex.printStackTrace();
String msg = "An error occured";
ErrorDialog.showErrorDialog(msg, errTitle(), ex, TerrainSculptorWindow.this);
} finally {
deferredFiltering = isDeferredFiltering();
updateEditMenu(); // enable Filter command
try {
resetExportMenu();
resetMap(hadGrids);
} finally {
complete();
}
}
}
@Override
protected ArrayList<GeoGrid> doInBackground() throws Exception {
ArrayList<GeoGrid> filteredGrids = gridFilter.filter(this);
if (isAborted()) {
throw new IllegalStateException("user canceled");
}
return filteredGrids;
}
};
worker.setDeferredFiltering(deferredFiltering);
worker.setMaxTimeWithoutDialog(1);
worker.setMessage("");
worker.setTotalTasksCount(7);
worker.setIndeterminate(false);
worker.start();
worker.execute();
}
private void resetExportMenu() {
exportMenu.removeAll();
if (displayGrids == null) {
return;
}
for (GeoGrid geoGrid : displayGrids) {
JMenuItem menuItem = new JMenuItem();
if (geoGrid == null || geoGrid.getName() == null) {
continue;
}
menuItem.setText(geoGrid.getName());
menuItem.addActionListener(new java.awt.event.ActionListener() {
@Override
public void actionPerformed(java.awt.event.ActionEvent evt) {
String name = ((JMenuItem) evt.getSource()).getText();
String path = FileUtils.askFile(null, "Export Grid", name + ".asc", false, "asc");
if (path != null) {
for (GeoGrid geoGrid : displayGrids) {
if (name.equals(geoGrid.getName())) {
try {
ESRIASCIIGridExporter.export(geoGrid, path);
} catch (IOException ex) {
String msg = "Could not export grid";
ErrorDialog.showErrorDialog(msg, errTitle(), ex, null);
}
break;
}
}
}
}
});
exportMenu.add(menuItem);
}
}
/**
* Mac OS X specific initialization.
*/
private void initMenusForMac() {
if (ika.utils.Sys.isMacOSX()) {
// remove exit menu item on Mac OS X
this.fileMenu.remove(this.exitMenuSeparator);
this.fileMenu.remove(this.exitMenuItem);
this.fileMenu.validate();
// remove info menu item on Mac OS X
this.helpMenu.remove(this.infoMenuItem);
this.helpMenu.validate();
if (this.helpMenu.getMenuComponentCount() == 0) {
this.menuBar.remove(helpMenu);
this.menuBar.validate();
}
this.editMenu.validate();
this.menuBar.remove(helpMenu);
} else if (ika.utils.Sys.isWindows()) {
this.menuBar.remove(macHelpMenu);
}
}
/**
* Customize the passed defaultRenderParams.
* This implementation does not alter the passed parameters.
*/
@Override
public RenderParams getRenderParams(RenderParams defaultRenderParams) {
return defaultRenderParams;
}
@Override
protected boolean saveDocumentWindow(String filePath) {
try {
GeoGrid grid = getNamedGrid("Result");
ESRIASCIIGridExporter.export(grid, filePath);
return true;
} catch (Exception exc) {
String msg = "The shaded relief image could not be saved.";
ika.utils.ErrorDialog.showErrorDialog(msg, errTitle(), exc, this);
}
return false;
}
/**
* Return data that can be stored in an external file.
* @return The document content.
*/
@Override
protected byte[] getDocumentData() {
try {
return ika.utils.Serializer.serialize(mapComponent.getGeoSet(), false);
} catch (java.io.IOException exc) {
exc.printStackTrace();
return null;
}
}
/**
* Restore the document content from a passed GeoMap.
* @param data The document content.
*/
@Override
protected void setDocumentData(byte[] data) throws Exception {
GeoMap geoMap = (GeoMap) ika.utils.Serializer.deserialize(data, false);
this.mapComponent.setGeoSet(geoMap);
}
/**
* Update all menus of this window.
*/
private void updateAllMenus() {
// Only update the menu items if this frame is visible.
// This avoids menu items being enabled that will be detached from
// this frame and will be attached to a utility frame or will be
// displayed when no frame is visible on Mac OS X.
if (this.isVisible()) {
this.updateFileMenu();
this.updateEditMenu();
this.updateViewMenu();
MainWindow.updateWindowMenu(this.windowMenu, this);
}
}
/**
* Update the enabled/disabled state of the items in the file menu.
*/
private void updateFileMenu() {
this.closeMenuItem.setEnabled(true);
this.saveMenuItem.setEnabled(gridFilter.getGrid() != null);
this.saveShadedReliefMenuItem.setEnabled(gridFilter.getGrid() != null);
}
private static Component getVisibleCard(JPanel panel) {
for (Component comp : panel.getComponents()) {
if (comp.isVisible() == true) {
return comp;
}
}
return null;
}
/**
* Update the enabled/disabled state of the items in the edit menu.
*/
private void updateEditMenu() {
boolean mapHasSelectedObj = mapComponent.hasSelectedGeoObjects();
// undo and redo menu items are handled by the Undo manager.
deleteMenuItem.setEnabled(mapHasSelectedObj);
copyMenuItem.setEnabled(mapHasSelectedObj);
cutMenuItem.setEnabled(mapHasSelectedObj);
pasteMenuItem.setEnabled(GeoTransferable.isClipboardFull());
filterMenuItem.setEnabled(getVisibleCard(centerPanel) == filterCanceledPanel);
gridInfoMenuItem.setEnabled(gridFilter.getGrid() != null);
scaleTerrainMenuItem.setEnabled(gridFilter.getGrid() != null);
voidValuesMenuItem.setEnabled(gridFilter.getGrid() != null);
deferredFilteringCheckBoxMenuItem.setSelected(deferredFiltering);
}
/**
* Update the enabled/disabled state of the items in the view menu.
*/
private void updateViewMenu() {
this.zoomInMenuItem.setEnabled(true);
this.zoomOutMenuItem.setEnabled(true);
this.showAllMenuItem.setEnabled(true);
this.showPageCheckBoxMenuItem.setEnabled(true);
}
/**
* Import data from a URL and add it to the map.
*/
private void importURL(java.net.URL url) {
try {
GeoImporter importer = GeoImporter.findGeoImporter(url);
// importer.setProgressIndicator(new SwingProgressIndicator(this, "Load Data", null, true));
importer.read(url, new MapDataReceiver(this.mapComponent),
GeoImporter.SAME_THREAD); // !!! ??? NEW_THREAD);
} catch (Exception exc) {
exc.printStackTrace();
ika.utils.ErrorDialog.showErrorDialog("Could not load the data. "
+ "The format may not be supported.",
errTitle());
}
}
/**
* Export the map to a file. The user is asked to select a file path to a
* new file.
* @param exporter The GeoSetExporter to export the map.
*/
private void export(ika.geoexport.GeoSetExporter exporter) {
final double mapScale = this.mapComponent.getScaleFactor();
exporter.setDisplayMapScale(mapScale);
PageFormat pageFormat = this.mapComponent.getPageFormat();
GeoSet geoSet = this.mapComponent.getImportExportGeoSet();
GeoExportGUI.export(exporter, geoSet, this.getTitle(), this, pageFormat, true);
}
/**
* Export the map to a raster image file. The user is asked to select a
* file path to a new file.
* @param format The format of the raster image, e.g. "jpg" or "png".
*/
private void exportToRasterImage(String format) {
ika.geoexport.RasterImageExporter exporter = new ika.geoexport.RasterImageExporter();
exporter.setFormat(format);
this.export(exporter);
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
java.awt.GridBagConstraints gridBagConstraints;
toolBarButtonGroup = new javax.swing.ButtonGroup();
viewPopupMenu = new javax.swing.JPopupMenu();
viewFinalCheckBoxMenuItem = new javax.swing.JCheckBoxMenuItem();
viewOriginalCheckBoxMenuItem = new javax.swing.JCheckBoxMenuItem();
viewLowlandsCheckBoxMenuItem = new javax.swing.JCheckBoxMenuItem();
viewMountainsCheckBoxMenuItem = new javax.swing.JCheckBoxMenuItem();
viewCombinationCheckBoxMenuItem = new javax.swing.JCheckBoxMenuItem();
viewMenuButtonGroup = new javax.swing.ButtonGroup();
basicAdvancedButtonGroup = new javax.swing.ButtonGroup();
scaleTerrainPanel = new javax.swing.JPanel();
javax.swing.JLabel jLabel10 = new javax.swing.JLabel();
scaleTerrainFormattedTextField = new javax.swing.JFormattedTextField();
javax.swing.JLabel jLabel11 = new javax.swing.JLabel();
voidValuesPanel = new javax.swing.JPanel();
javax.swing.JLabel jLabel13 = new javax.swing.JLabel();
voidValuesFormattedTextField = new javax.swing.JFormattedTextField();
topPanel = new javax.swing.JPanel();
topLeftPanel = new javax.swing.JPanel();
navigationToolBar = new javax.swing.JToolBar();
zoomInToggleButton = new javax.swing.JToggleButton();
zoomOutToggleButton = new javax.swing.JToggleButton();
handToggleButton = new javax.swing.JToggleButton();
distanceToggleButton = new javax.swing.JToggleButton();
jSeparator7 = new javax.swing.JToolBar.Separator();
showAllButton = new javax.swing.JButton();
infoToolBar = new javax.swing.JToolBar();
infoPanel = new javax.swing.JPanel();
scaleLabel = new ika.gui.ScaleLabel();
coordinateInfoPanel = new ika.gui.CoordinateInfoPanel();
viewMenuButton = new ika.gui.MenuToggleButton();
javax.swing.JPanel leftPanel = new javax.swing.JPanel();
controlPanel = new javax.swing.JPanel();
levelOfDetailsPanel = new javax.swing.JPanel();
javax.swing.JPanel lodPanel = new javax.swing.JPanel();
meanFilterLoopsSlider = new javax.swing.JSlider();
javax.swing.JLabel jLabel21 = new javax.swing.JLabel();
basicAdvancedSelectionPanel = new javax.swing.JPanel();
basicToggleButton = new javax.swing.JToggleButton();
basicToggleButton.putClientProperty("JButton.buttonType", "segmentedRoundRect");
basicToggleButton.putClientProperty("JButton.segmentPosition", "first");
advancedToggleButton = new javax.swing.JToggleButton();
advancedToggleButton.putClientProperty("JButton.buttonType", "segmentedRoundRect");
advancedToggleButton.putClientProperty("JButton.segmentPosition", "last");
basicAdvancedPanel = new javax.swing.JPanel();
advancedPanel = new javax.swing.JPanel();
javax.swing.JTabbedPane jTabbedPane1 = new javax.swing.JTabbedPane();
valleysPanel = new ika.gui.TransparentMacPanel();
javax.swing.JLabel jLabel2 = new javax.swing.JLabel();
valleysMeanFilterLoopsSlider = new javax.swing.JSlider();
javax.swing.JLabel jLabel8 = new javax.swing.JLabel();
valleysExaggerationSlider = new javax.swing.JSlider();
javax.swing.JLabel jLabel12 = new javax.swing.JLabel();
valleysCurvatureThresholdSlider = new javax.swing.JSlider();
javax.swing.JSeparator jSeparator3 = new javax.swing.JSeparator();
ridgesPanel = new ika.gui.TransparentMacPanel();
javax.swing.JLabel jLabel1 = new javax.swing.JLabel();
ridgesMeanFilterLoopsSlider = new javax.swing.JSlider();
javax.swing.JSeparator jSeparator2 = new javax.swing.JSeparator();
javax.swing.JLabel jLabel7 = new javax.swing.JLabel();
ridgesExaggerationSlider = new javax.swing.JSlider();
javax.swing.JLabel jLabel17 = new javax.swing.JLabel();
planCurvatureWeightSlider = new javax.swing.JSlider();
combinationPanel = new javax.swing.JPanel();
javax.swing.JLabel jLabel9 = new javax.swing.JLabel();
combinationSlopeThresholdSlider = new javax.swing.JSlider();
javax.swing.JTextArea jTextArea1 = new javax.swing.JTextArea();
basicPanel = new javax.swing.JPanel();
jPanel1 = new javax.swing.JPanel();
scaleSlider = new javax.swing.JSlider();
javax.swing.JLabel jLabel3 = new javax.swing.JLabel();
centerPanel = new javax.swing.JPanel();
mapComponent = new ika.gui.MapComponent();
filterCanceledPanel = new javax.swing.JPanel();
filteringStatusLabel = new javax.swing.JLabel();
filterButton = new javax.swing.JButton();
menuBar = new javax.swing.JMenuBar();
fileMenu = new javax.swing.JMenu();
newMenuItem = new javax.swing.JMenuItem();
openMenuItem = new javax.swing.JMenuItem();
openRecentMenu = rdm.createOpenRecentMenu();
javax.swing.JSeparator jSeparator5 = new javax.swing.JSeparator();
closeMenuItem = new javax.swing.JMenuItem();
saveMenuItem = new javax.swing.JMenuItem();
javax.swing.JPopupMenu.Separator jSeparator1 = new javax.swing.JPopupMenu.Separator();
saveShadedReliefMenuItem = new javax.swing.JMenuItem();
exitMenuSeparator = new javax.swing.JSeparator();
exitMenuItem = new javax.swing.JMenuItem();
editMenu = new javax.swing.JMenu();
cutMenuItem = new javax.swing.JMenuItem();
copyMenuItem = new javax.swing.JMenuItem();
pasteMenuItem = new javax.swing.JMenuItem();
deleteMenuItem = new javax.swing.JMenuItem();
jSeparator8 = new javax.swing.JPopupMenu.Separator();
filterMenuItem = new javax.swing.JMenuItem();
deferredFilteringCheckBoxMenuItem = new javax.swing.JCheckBoxMenuItem();
javax.swing.JPopupMenu.Separator jSeparator6 = new javax.swing.JPopupMenu.Separator();
voidValuesMenuItem = new javax.swing.JMenuItem();
scaleTerrainMenuItem = new javax.swing.JMenuItem();
javax.swing.JPopupMenu.Separator jSeparator4 = new javax.swing.JPopupMenu.Separator();
gridInfoMenuItem = new javax.swing.JMenuItem();
viewMenu = new javax.swing.JMenu();
zoomInMenuItem = new javax.swing.JMenuItem();
zoomOutMenuItem = new javax.swing.JMenuItem();
javax.swing.JSeparator jSeparator12 = new javax.swing.JSeparator();
showAllMenuItem = new javax.swing.JMenuItem();
windowMenu = new javax.swing.JMenu();
minimizeMenuItem = new javax.swing.JMenuItem();
zoomMenuItem = new javax.swing.JMenuItem();
windowSeparator = new javax.swing.JSeparator();
helpMenu = new javax.swing.JMenu();
onlineManualMenuItem = new javax.swing.JMenuItem();
infoMenuItem = new javax.swing.JMenuItem();
systemInfoMenuItem = new javax.swing.JMenuItem();
macHelpMenu = new javax.swing.JMenu();
infoMenuItem1 = new javax.swing.JMenuItem();
systemInfoMenuItem1 = new javax.swing.JMenuItem();
onlineManualMenuItem1 = new javax.swing.JMenuItem();
debugMenu = new javax.swing.JMenu();
memoryMenuItem = new javax.swing.JMenuItem();
redrawMenuItem = new javax.swing.JMenuItem();
exportMenu = new javax.swing.JMenu();
showPageCheckBoxMenuItem = new javax.swing.JCheckBoxMenuItem();
viewMenuButtonGroup.add(viewFinalCheckBoxMenuItem);
viewFinalCheckBoxMenuItem.setSelected(true);
viewFinalCheckBoxMenuItem.setText("Filtered Terrain");
viewFinalCheckBoxMenuItem.setToolTipText("");
viewFinalCheckBoxMenuItem.setName("Result"); // NOI18N
viewFinalCheckBoxMenuItem.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent evt) {
viewMenuChanged(evt);
}
});
viewFinalCheckBoxMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
viewMenuActionHandler(evt);
}
});
viewPopupMenu.add(viewFinalCheckBoxMenuItem);
viewMenuButtonGroup.add(viewOriginalCheckBoxMenuItem);
viewOriginalCheckBoxMenuItem.setText("Original Terrain");
viewOriginalCheckBoxMenuItem.setToolTipText("");
viewOriginalCheckBoxMenuItem.setName("Original Grid"); // NOI18N
viewOriginalCheckBoxMenuItem.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent evt) {
viewMenuChanged(evt);
}
});
viewOriginalCheckBoxMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
viewMenuActionHandler(evt);
}
});
viewPopupMenu.add(viewOriginalCheckBoxMenuItem);
viewMenuButtonGroup.add(viewLowlandsCheckBoxMenuItem);
viewLowlandsCheckBoxMenuItem.setText("Lowlands");
viewLowlandsCheckBoxMenuItem.setToolTipText("");
viewLowlandsCheckBoxMenuItem.setName("Valleys"); // NOI18N
viewLowlandsCheckBoxMenuItem.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent evt) {
viewMenuChanged(evt);
}
});
viewLowlandsCheckBoxMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
viewMenuActionHandler(evt);
}
});
viewPopupMenu.add(viewLowlandsCheckBoxMenuItem);
viewMenuButtonGroup.add(viewMountainsCheckBoxMenuItem);
viewMountainsCheckBoxMenuItem.setText("Mountains");
viewMountainsCheckBoxMenuItem.setName("Ridges"); // NOI18N
viewMountainsCheckBoxMenuItem.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent evt) {
viewMenuChanged(evt);
}
});
viewMountainsCheckBoxMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
viewMenuActionHandler(evt);
}
});
viewPopupMenu.add(viewMountainsCheckBoxMenuItem);
viewMenuButtonGroup.add(viewCombinationCheckBoxMenuItem);
viewCombinationCheckBoxMenuItem.setText("Combination Mask");
viewCombinationCheckBoxMenuItem.setToolTipText("");
viewCombinationCheckBoxMenuItem.setName("Combination Weight"); // NOI18N
viewCombinationCheckBoxMenuItem.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent evt) {
viewMenuChanged(evt);
}
});
viewCombinationCheckBoxMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
viewMenuActionHandler(evt);
}
});
viewPopupMenu.add(viewCombinationCheckBoxMenuItem);
scaleTerrainPanel.setLayout(new java.awt.GridBagLayout());
jLabel10.setText("Scale Factor:");
scaleTerrainPanel.add(jLabel10, new java.awt.GridBagConstraints());
scaleTerrainFormattedTextField.setPreferredSize(new java.awt.Dimension(200, 28));
scaleTerrainFormattedTextField.setValue(new Float(1));
scaleTerrainPanel.add(scaleTerrainFormattedTextField, new java.awt.GridBagConstraints());
jLabel11.setFont(jLabel11.getFont().deriveFont(jLabel11.getFont().getSize()-2f));
jLabel11.setText("All values in the terrain grid are scaled by this factor.");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(10, 0, 0, 0);
scaleTerrainPanel.add(jLabel11, gridBagConstraints);
voidValuesPanel.setLayout(new java.awt.GridBagLayout());
jLabel13.setText("Change Void Values to");
voidValuesPanel.add(jLabel13, new java.awt.GridBagConstraints());
voidValuesFormattedTextField.setPreferredSize(new java.awt.Dimension(200, 28));
voidValuesFormattedTextField.setValue(new Float(0));
voidValuesPanel.add(voidValuesFormattedTextField, new java.awt.GridBagConstraints());
setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
setName(""); // NOI18N
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
closeWindow(evt);
}
});
topPanel.setLayout(new javax.swing.BoxLayout(topPanel, javax.swing.BoxLayout.LINE_AXIS));
topLeftPanel.setFocusCycleRoot(true);
topLeftPanel.setPreferredSize(new java.awt.Dimension(500, 50));
topLeftPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT, 20, 2));
toolBarButtonGroup.add(zoomInToggleButton);
zoomInToggleButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/ika/icons/ZoomIn16x16.gif"))); // NOI18N
zoomInToggleButton.setSelected(true);
zoomInToggleButton.setToolTipText("Zoom In");
zoomInToggleButton.setPreferredSize(new java.awt.Dimension(24, 24));
zoomInToggleButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
zoomInToggleButtonActionPerformed(evt);
}
});
navigationToolBar.add(zoomInToggleButton);
toolBarButtonGroup.add(zoomOutToggleButton);
zoomOutToggleButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/ika/icons/ZoomOut16x16.gif"))); // NOI18N
zoomOutToggleButton.setToolTipText("Zoom Out");
zoomOutToggleButton.setPreferredSize(new java.awt.Dimension(24, 24));
zoomOutToggleButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
zoomOutToggleButtonActionPerformed(evt);
}
});
navigationToolBar.add(zoomOutToggleButton);
toolBarButtonGroup.add(handToggleButton);
handToggleButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/ika/icons/Hand16x16.gif"))); // NOI18N
handToggleButton.setToolTipText("Pan");
handToggleButton.setPreferredSize(new java.awt.Dimension(24, 24));
handToggleButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
handToggleButtonActionPerformed(evt);
}
});
navigationToolBar.add(handToggleButton);
toolBarButtonGroup.add(distanceToggleButton);
distanceToggleButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/ika/icons/Ruler16x16.gif"))); // NOI18N
distanceToggleButton.setToolTipText("Measure Distance and Angle");
distanceToggleButton.setPreferredSize(new java.awt.Dimension(24, 24));
distanceToggleButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
distanceToggleButtonActionPerformed(evt);
}
});
navigationToolBar.add(distanceToggleButton);
navigationToolBar.add(jSeparator7);
showAllButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/ika/icons/ShowAll20x14.png"))); // NOI18N
showAllButton.setToolTipText("Show All");
showAllButton.setBorderPainted(false);
showAllButton.setPreferredSize(new java.awt.Dimension(32, 24));
showAllButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
showAllButtonActionPerformed(evt);
}
});
navigationToolBar.add(showAllButton);
topLeftPanel.add(navigationToolBar);
infoPanel.setLayout(new java.awt.GridBagLayout());
scaleLabel.setMaximumSize(new java.awt.Dimension(150, 12));
scaleLabel.setMinimumSize(new java.awt.Dimension(50, 20));
scaleLabel.setPreferredSize(new java.awt.Dimension(80, 12));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 0;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
infoPanel.add(scaleLabel, gridBagConstraints);
coordinateInfoPanel.setForeground(new java.awt.Color(128, 128, 128));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
infoPanel.add(coordinateInfoPanel, gridBagConstraints);
infoToolBar.add(infoPanel);
topLeftPanel.add(infoToolBar);
viewMenuButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/ika/icons/view.png"))); // NOI18N
viewMenuButton.setText("Filtered Terrain");
viewMenuButton.setToolTipText("Select the data displayed.");
viewMenuButton.setBorderPainted(false);
viewMenuButton.setContentAreaFilled(false);
viewMenuButton.setFont(new java.awt.Font("SansSerif", 0, 13));
viewMenuButton.setPopupMenu(viewPopupMenu);
topLeftPanel.add(viewMenuButton);
topPanel.add(topLeftPanel);
getContentPane().add(topPanel, java.awt.BorderLayout.NORTH);
controlPanel.setBorder(javax.swing.BorderFactory.createEmptyBorder(15, 1, 1, 1));
controlPanel.setLayout(new java.awt.GridBagLayout());
lodPanel.setLayout(new java.awt.GridBagLayout());
meanFilterLoopsSlider.setMajorTickSpacing(10);
meanFilterLoopsSlider.setMaximum(50);
meanFilterLoopsSlider.setMinorTickSpacing(5);
meanFilterLoopsSlider.setPaintLabels(true);
meanFilterLoopsSlider.setPaintTicks(true);
meanFilterLoopsSlider.setValue(10);
meanFilterLoopsSlider.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
filterSliderStateChanged(evt);
lodSliderStateChanged(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(0, 30, 0, 0);
lodPanel.add(meanFilterLoopsSlider, gridBagConstraints);
{
ika.gui.SliderUtils.setMinMaxSliderLabels(meanFilterLoopsSlider, new String[]{"Detailed", "Smooth"});
ika.gui.SliderUtils.reapplyFontSize(meanFilterLoopsSlider);
}
jLabel21.setText("Level of Detail");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
lodPanel.add(jLabel21, gridBagConstraints);
levelOfDetailsPanel.add(lodPanel);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
controlPanel.add(levelOfDetailsPanel, gridBagConstraints);
basicAdvancedSelectionPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER, 0, 5));
basicAdvancedButtonGroup.add(basicToggleButton);
basicToggleButton.setSelected(true);
basicToggleButton.setText("Basic");
basicToggleButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
basicToggleButtonActionPerformed(evt);
}
});
basicAdvancedSelectionPanel.add(basicToggleButton);
basicAdvancedButtonGroup.add(advancedToggleButton);
advancedToggleButton.setText("Advanced");
advancedToggleButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
advancedToggleButtonActionPerformed(evt);
}
});
basicAdvancedSelectionPanel.add(advancedToggleButton);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.insets = new java.awt.Insets(20, 0, 0, 0);
controlPanel.add(basicAdvancedSelectionPanel, gridBagConstraints);
basicAdvancedPanel.setLayout(new java.awt.CardLayout());
advancedPanel.setLayout(new java.awt.GridBagLayout());
valleysPanel.setBorder(javax.swing.BorderFactory.createEmptyBorder(10, 10, 10, 10));
valleysPanel.setLayout(new java.awt.GridBagLayout());
jLabel2.setText("Valleys Removal");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
valleysPanel.add(jLabel2, gridBagConstraints);
valleysMeanFilterLoopsSlider.setMajorTickSpacing(15);
valleysMeanFilterLoopsSlider.setMaximum(20);
valleysMeanFilterLoopsSlider.setMinorTickSpacing(5);
valleysMeanFilterLoopsSlider.setPaintTicks(true);
valleysMeanFilterLoopsSlider.setValue(5);
valleysMeanFilterLoopsSlider.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
filterSliderStateChanged(evt);
valleysSliderStateChanged(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
valleysPanel.add(valleysMeanFilterLoopsSlider, gridBagConstraints);
jLabel8.setText("Valley Depth");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 3;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
valleysPanel.add(jLabel8, gridBagConstraints);
valleysExaggerationSlider.setMajorTickSpacing(100);
valleysExaggerationSlider.setMaximum(500);
valleysExaggerationSlider.setMinorTickSpacing(50);
valleysExaggerationSlider.setPaintTicks(true);
valleysExaggerationSlider.setValue(40);
valleysExaggerationSlider.setInverted(true);
valleysExaggerationSlider.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
filterSliderStateChanged(evt);
valleysSliderStateChanged(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 4;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
valleysPanel.add(valleysExaggerationSlider, gridBagConstraints);
jLabel12.setText("Valley Width");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 5;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(20, 0, 0, 0);
valleysPanel.add(jLabel12, gridBagConstraints);
valleysCurvatureThresholdSlider.setMajorTickSpacing(50);
valleysCurvatureThresholdSlider.setMinorTickSpacing(10);
valleysCurvatureThresholdSlider.setPaintTicks(true);
valleysCurvatureThresholdSlider.setInverted(true);
valleysCurvatureThresholdSlider.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
filterSliderStateChanged(evt);
valleysSliderStateChanged(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 6;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
valleysPanel.add(valleysCurvatureThresholdSlider, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.insets = new java.awt.Insets(20, 0, 20, 0);
valleysPanel.add(jSeparator3, gridBagConstraints);
jTabbedPane1.addTab("Lowlands", valleysPanel);
ridgesPanel.setBorder(javax.swing.BorderFactory.createEmptyBorder(10, 10, 10, 10));
ridgesPanel.setLayout(new java.awt.GridBagLayout());
jLabel1.setText("Ridges Removal");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
ridgesPanel.add(jLabel1, gridBagConstraints);
ridgesMeanFilterLoopsSlider.setMajorTickSpacing(15);
ridgesMeanFilterLoopsSlider.setMaximum(20);
ridgesMeanFilterLoopsSlider.setMinorTickSpacing(5);
ridgesMeanFilterLoopsSlider.setPaintTicks(true);
ridgesMeanFilterLoopsSlider.setValue(5);
ridgesMeanFilterLoopsSlider.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
filterSliderStateChanged(evt);
ridgesSliderStateChanged(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
ridgesPanel.add(ridgesMeanFilterLoopsSlider, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.insets = new java.awt.Insets(20, 0, 20, 0);
ridgesPanel.add(jSeparator2, gridBagConstraints);
jLabel7.setText("Ridges Exaggeration");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 3;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
ridgesPanel.add(jLabel7, gridBagConstraints);
ridgesExaggerationSlider.setMajorTickSpacing(500);
ridgesExaggerationSlider.setMaximum(2000);
ridgesExaggerationSlider.setMinimum(110);
ridgesExaggerationSlider.setMinorTickSpacing(250);
ridgesExaggerationSlider.setPaintTicks(true);
ridgesExaggerationSlider.setValue(500);
ridgesExaggerationSlider.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
filterSliderStateChanged(evt);
ridgesSliderStateChanged(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 4;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
ridgesPanel.add(ridgesExaggerationSlider, gridBagConstraints);
jLabel17.setText("Ridges Sharpness");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 5;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(20, 0, 0, 0);
ridgesPanel.add(jLabel17, gridBagConstraints);
planCurvatureWeightSlider.setMajorTickSpacing(50);
planCurvatureWeightSlider.setMaximum(150);
planCurvatureWeightSlider.setMinorTickSpacing(25);
planCurvatureWeightSlider.setPaintTicks(true);
planCurvatureWeightSlider.setValue(150);
planCurvatureWeightSlider.setValueIsAdjusting(true);
planCurvatureWeightSlider.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
filterSliderStateChanged(evt);
ridgesSliderStateChanged(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 6;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
ridgesPanel.add(planCurvatureWeightSlider, gridBagConstraints);
jTabbedPane1.addTab("Mountains", ridgesPanel);
jTabbedPane1.setSelectedIndex(1);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 3;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.insets = new java.awt.Insets(20, 0, 20, 0);
advancedPanel.add(jTabbedPane1, gridBagConstraints);
combinationPanel.setLayout(new java.awt.GridBagLayout());
jLabel9.setText("Lowland-Mountain Mixer");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(0, 10, 0, 0);
combinationPanel.add(jLabel9, gridBagConstraints);
combinationSlopeThresholdSlider.setMajorTickSpacing(15);
combinationSlopeThresholdSlider.setMaximum(45);
combinationSlopeThresholdSlider.setMinorTickSpacing(5);
combinationSlopeThresholdSlider.setPaintTicks(true);
combinationSlopeThresholdSlider.setToolTipText("Adjust the combination mask: the lowland shading is used in black areas, the mountain shading in white areas.");
combinationSlopeThresholdSlider.setValue(15);
combinationSlopeThresholdSlider.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
combinationSlopeThresholdSliderStateChanged(evt);
filterSliderStateChanged(evt);
}
});
{
//Create the label table
Hashtable labelTable = new Hashtable();
labelTable.put( new Integer( 0 ), new JLabel("Lowlands") );
labelTable.put( new Integer( 45 ), new JLabel("Mountains") );
combinationSlopeThresholdSlider.setLabelTable( labelTable );
}
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
combinationPanel.add(combinationSlopeThresholdSlider, gridBagConstraints);
jTextArea1.setColumns(20);
jTextArea1.setFont(new java.awt.Font("SansSerif", 0, 11));
jTextArea1.setLineWrap(true);
jTextArea1.setRows(5);
jTextArea1.setText("Adjust the combination mask: the lowland shading is used where the combination mask is black, and the mountain shading is used where the combination mask is white.");
jTextArea1.setWrapStyleWord(true);
jTextArea1.setOpaque(false);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 3;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
combinationPanel.add(jTextArea1, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 4;
advancedPanel.add(combinationPanel, gridBagConstraints);
basicAdvancedPanel.add(advancedPanel, "advancedCard");
basicPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER, 5, 20));
jPanel1.setLayout(new java.awt.GridBagLayout());
scaleSlider.setMajorTickSpacing(50);
scaleSlider.setPaintLabels(true);
scaleSlider.setPaintTicks(true);
scaleSlider.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
scaleSliderStateChanged(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
gridBagConstraints.insets = new java.awt.Insets(0, 30, 0, 0);
jPanel1.add(scaleSlider, gridBagConstraints);
{
ika.gui.SliderUtils.setMinMaxSliderLabels(scaleSlider, new String[]{"Large Scale", "Small Scale"});
ika.gui.SliderUtils.reapplyFontSize(scaleSlider);
}
jLabel3.setText("Scale");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
jPanel1.add(jLabel3, gridBagConstraints);
basicPanel.add(jPanel1);
basicAdvancedPanel.add(basicPanel, "basicCard");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 3;
controlPanel.add(basicAdvancedPanel, gridBagConstraints);
CardLayout cl = (CardLayout) (basicAdvancedPanel.getLayout());
cl.show(basicAdvancedPanel, "basicCard");
leftPanel.add(controlPanel);
getContentPane().add(leftPanel, java.awt.BorderLayout.WEST);
centerPanel.setLayout(new java.awt.CardLayout());
mapComponent.setBackground(new java.awt.Color(255, 255, 255));
mapComponent.setInfoString("");
mapComponent.setMinimumSize(new java.awt.Dimension(100, 200));
mapComponent.setPreferredSize(new java.awt.Dimension(200, 200));
centerPanel.add(mapComponent, "map");
filterCanceledPanel.setBackground(new java.awt.Color(255, 255, 255));
filterCanceledPanel.setLayout(new java.awt.GridBagLayout());
filteringStatusLabel.setForeground(java.awt.Color.GRAY);
filteringStatusLabel.setText("Filtering has been canceled.");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.insets = new java.awt.Insets(12, 0, 0, 0);
filterCanceledPanel.add(filteringStatusLabel, gridBagConstraints);
filterButton.setText("Filter");
filterButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
filterButtonActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
filterCanceledPanel.add(filterButton, gridBagConstraints);
centerPanel.add(filterCanceledPanel, "filterButton");
getContentPane().add(centerPanel, java.awt.BorderLayout.CENTER);
fileMenu.setText("File");
newMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_N,
java.awt.Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
newMenuItem.setText("New Window");
newMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
newMenuItemActionPerformed(evt);
}
});
fileMenu.add(newMenuItem);
openMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_O,
java.awt.Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
openMenuItem.setText("Open Terrain�");
openMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
openMenuItemActionPerformed(evt);
}
});
fileMenu.add(openMenuItem);
openRecentMenu.setText("Open Recent Terrain Model");
fileMenu.add(openRecentMenu);
fileMenu.add(jSeparator5);
closeMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_W,
java.awt.Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
closeMenuItem.setText("Close");
closeMenuItem.setEnabled(false);
closeMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
closeMenuItemActionPerformed(evt);
}
});
fileMenu.add(closeMenuItem);
saveMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_S,
java.awt.Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
saveMenuItem.setText("Save Filtered Terrain�");
saveMenuItem.setEnabled(false);
saveMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
saveMenuItemActionPerformed(evt);
}
});
fileMenu.add(saveMenuItem);
fileMenu.add(jSeparator1);
saveShadedReliefMenuItem.setText("Save Shaded Relief�");
saveShadedReliefMenuItem.setEnabled(false);
saveShadedReliefMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
saveShadedReliefMenuItemActionPerformed(evt);
}
});
fileMenu.add(saveShadedReliefMenuItem);
fileMenu.add(exitMenuSeparator);
exitMenuItem.setText("Exit");
exitMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
exitMenuItemActionPerformed(evt);
}
});
fileMenu.add(exitMenuItem);
menuBar.add(fileMenu);
editMenu.setText("Edit");
cutMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_X,
java.awt.Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
cutMenuItem.setText("Cut");
cutMenuItem.setEnabled(false);
cutMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cutMenuItemActionPerformed(evt);
}
});
editMenu.add(cutMenuItem);
copyMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_C,
java.awt.Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
copyMenuItem.setText("Copy");
copyMenuItem.setEnabled(false);
copyMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
copyMenuItemActionPerformed(evt);
}
});
editMenu.add(copyMenuItem);
pasteMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_V,
java.awt.Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
pasteMenuItem.setText("Paste");
pasteMenuItem.setEnabled(false);
pasteMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
pasteMenuItemActionPerformed(evt);
}
});
editMenu.add(pasteMenuItem);
deleteMenuItem.setText("Delete");
deleteMenuItem.setEnabled(false);
deleteMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
deleteMenuItemActionPerformed(evt);
}
});
editMenu.add(deleteMenuItem);
editMenu.add(jSeparator8);
filterMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F,
java.awt.Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
filterMenuItem.setText("Filter");
filterMenuItem.setEnabled(false);
filterMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
filterMenuItemActionPerformed(evt);
}
});
editMenu.add(filterMenuItem);
deferredFilteringCheckBoxMenuItem.setText("Deferred Filtering");
deferredFilteringCheckBoxMenuItem.setToolTipText("Recommended for large terrains that take long to filter.");
deferredFilteringCheckBoxMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
deferredFilteringCheckBoxMenuItemActionPerformed(evt);
}
});
editMenu.add(deferredFilteringCheckBoxMenuItem);
editMenu.add(jSeparator6);
voidValuesMenuItem.setText("Change Void Values�");
voidValuesMenuItem.setEnabled(false);
voidValuesMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
voidValuesMenuItemActionPerformed(evt);
}
});
editMenu.add(voidValuesMenuItem);
scaleTerrainMenuItem.setText("Scale Terrain�");
scaleTerrainMenuItem.setEnabled(false);
scaleTerrainMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
scaleTerrainMenuItemActionPerformed(evt);
}
});
editMenu.add(scaleTerrainMenuItem);
editMenu.add(jSeparator4);
gridInfoMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_I,
java.awt.Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
gridInfoMenuItem.setText("Terrain Model Info�");
gridInfoMenuItem.setEnabled(false);
gridInfoMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
gridInfoMenuItemActionPerformed(evt);
}
});
editMenu.add(gridInfoMenuItem);
menuBar.add(editMenu);
viewMenu.setText("View");
zoomInMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_ADD,
java.awt.Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
zoomInMenuItem.setText("Zoom In");
zoomInMenuItem.setEnabled(false);
zoomInMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
zoomInMenuItemActionPerformed(evt);
}
});
viewMenu.add(zoomInMenuItem);
zoomOutMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_SUBTRACT,
java.awt.Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
zoomOutMenuItem.setText("Zoom Out");
zoomOutMenuItem.setEnabled(false);
zoomOutMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
zoomOutMenuItemActionPerformed(evt);
}
});
viewMenu.add(zoomOutMenuItem);
viewMenu.add(jSeparator12);
showAllMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_NUMPAD0,
java.awt.Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
showAllMenuItem.setText("Show All");
showAllMenuItem.setEnabled(false);
showAllMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
showAllMenuItemActionPerformed(evt);
}
});
viewMenu.add(showAllMenuItem);
menuBar.add(viewMenu);
windowMenu.setText("Window");
windowMenu.setName("WindowsMenu"); // NOI18N
minimizeMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_M,
java.awt.Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
minimizeMenuItem.setText("Minimize");
minimizeMenuItem.setEnabled(false);
minimizeMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
minimizeMenuItemActionPerformed(evt);
}
});
windowMenu.add(minimizeMenuItem);
zoomMenuItem.setText("Zoom");
zoomMenuItem.setEnabled(false);
zoomMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
zoomMenuItemActionPerformed(evt);
}
});
windowMenu.add(zoomMenuItem);
windowMenu.add(windowSeparator);
menuBar.add(windowMenu);
helpMenu.setText("?");
onlineManualMenuItem.setText("Terrain Sculptor Online Manual");
onlineManualMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
onlineManualMenuItemActionPerformed(evt);
}
});
helpMenu.add(onlineManualMenuItem);
infoMenuItem.setText("Info");
infoMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
infoMenuItemActionPerformed(evt);
}
});
helpMenu.add(infoMenuItem);
systemInfoMenuItem.setText("System Info");
systemInfoMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
systemInfoMenuItemActionPerformed(evt);
}
});
helpMenu.add(systemInfoMenuItem);
menuBar.add(helpMenu);
macHelpMenu.setText("Help");
infoMenuItem1.setText("Info");
infoMenuItem1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
infoMenuItem1ActionPerformed(evt);
}
});
macHelpMenu.add(infoMenuItem1);
systemInfoMenuItem1.setText("System Info");
systemInfoMenuItem1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
systemInfoMenuItem1ActionPerformed(evt);
}
});
macHelpMenu.add(systemInfoMenuItem1);
onlineManualMenuItem1.setText("Terrain Sculptor Online Manual");
onlineManualMenuItem1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
onlineManualMenuItemActionPerformed(evt);
}
});
macHelpMenu.add(onlineManualMenuItem1);
menuBar.add(macHelpMenu);
debugMenu.setText("Debug");
memoryMenuItem.setText("Memory Usage�");
memoryMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
memoryMenuItemActionPerformed(evt);
}
});
debugMenu.add(memoryMenuItem);
redrawMenuItem.setText("Redraw Map");
redrawMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
redrawMenuItemActionPerformed(evt);
}
});
debugMenu.add(redrawMenuItem);
exportMenu.setText("Export");
debugMenu.add(exportMenu);
showPageCheckBoxMenuItem.setText("Show Map Outline");
showPageCheckBoxMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
showPageCheckBoxMenuItemActionPerformed(evt);
}
});
debugMenu.add(showPageCheckBoxMenuItem);
menuBar.add(debugMenu);
menuBar.remove(debugMenu);
setJMenuBar(menuBar);
pack();
}// </editor-fold>//GEN-END:initComponents
private void newMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_newMenuItemActionPerformed
MainWindow.newDocumentWindow();
}//GEN-LAST:event_newMenuItemActionPerformed
private void openMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_openMenuItemActionPerformed
importGrid();
}//GEN-LAST:event_openMenuItemActionPerformed
private void closeMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_closeMenuItemActionPerformed
closeDocumentWindow();
}//GEN-LAST:event_closeMenuItemActionPerformed
private void saveMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveMenuItemActionPerformed
saveDocumentWindow();
}//GEN-LAST:event_saveMenuItemActionPerformed
private void exitMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_exitMenuItemActionPerformed
// this handler is not used on Macintosh. On Windows and other platforms
// only this window is closed.
closeDocumentWindow();
}//GEN-LAST:event_exitMenuItemActionPerformed
private void cutMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cutMenuItemActionPerformed
// create a GeoSet with copies of the currently selected GeoObjects
GeoSet copyGeoSet = new GeoSet();
this.mapComponent.getGeoSet().cloneIfSelected(copyGeoSet);
if (copyGeoSet.getNumberOfChildren() == 0) {
return;
}
// put the selected GeoObjects onto the clipboard
GeoTransferable.storeInSystemClipboard(copyGeoSet);
// delete the selected GeoObjects
this.mapComponent.removeSelectedGeoObjects();
this.mapComponent.addUndo("Cut");
}//GEN-LAST:event_cutMenuItemActionPerformed
private void copyMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_copyMenuItemActionPerformed
// create a GeoSet with copies of the currently selected GeoObjects
GeoSet copyGeoSet = new GeoSet();
this.mapComponent.getGeoSet().cloneIfSelected(copyGeoSet);
if (copyGeoSet.getNumberOfChildren() == 0) {
return;
}
copyGeoSet = (GeoSet) copyGeoSet.getGeoObject(0);
// put the selected objects onto the clipboard
GeoTransferable.storeInSystemClipboard(copyGeoSet);
// update the "Paste" command in the edit menu
this.updateEditMenu();
}//GEN-LAST:event_copyMenuItemActionPerformed
private void pasteMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_pasteMenuItemActionPerformed
GeoSet geoSet = GeoTransferable.retreiveSystemClipboardCopy();
if (geoSet == null) {
return;
}
// make all pasted objects visible to show the result of the paste action.
geoSet.setVisible(true);
this.mapComponent.deselectAllAndAddChildren(geoSet);
this.mapComponent.addUndo("Paste");
// make sure the pasted objects are visible in the map
if (this.mapComponent.isObjectVisibleOnMap(geoSet) == false) {
this.mapComponent.showAll();
}
}//GEN-LAST:event_pasteMenuItemActionPerformed
private void deleteMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteMenuItemActionPerformed
this.mapComponent.removeSelectedGeoObjects();
this.mapComponent.addUndo("Delete");
}//GEN-LAST:event_deleteMenuItemActionPerformed
private void zoomInMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_zoomInMenuItemActionPerformed
this.mapComponent.zoomIn();
}//GEN-LAST:event_zoomInMenuItemActionPerformed
private void zoomOutMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_zoomOutMenuItemActionPerformed
this.mapComponent.zoomOut();
}//GEN-LAST:event_zoomOutMenuItemActionPerformed
private void showAllMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_showAllMenuItemActionPerformed
mapComponent.showAll();
}//GEN-LAST:event_showAllMenuItemActionPerformed
private void minimizeMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_minimizeMenuItemActionPerformed
this.setState(Frame.ICONIFIED);
}//GEN-LAST:event_minimizeMenuItemActionPerformed
private void zoomMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_zoomMenuItemActionPerformed
if ((this.getExtendedState() & Frame.MAXIMIZED_BOTH) != MAXIMIZED_BOTH) {
this.setExtendedState(JFrame.MAXIMIZED_BOTH);
} else {
this.setExtendedState(JFrame.NORMAL);
}
this.validate();
}//GEN-LAST:event_zoomMenuItemActionPerformed
private void infoMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_infoMenuItemActionPerformed
ika.gui.ProgramInfoPanel.showApplicationInfo();
}//GEN-LAST:event_infoMenuItemActionPerformed
private void memoryMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_memoryMenuItemActionPerformed
MemoryUsagePanel.showMemoryUsagePanel();
}//GEN-LAST:event_memoryMenuItemActionPerformed
private void redrawMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_redrawMenuItemActionPerformed
this.mapComponent.repaint();
}//GEN-LAST:event_redrawMenuItemActionPerformed
private void zoomInToggleButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_zoomInToggleButtonActionPerformed
this.mapComponent.setMapTool(new ZoomInTool(this.mapComponent));
}//GEN-LAST:event_zoomInToggleButtonActionPerformed
private void zoomOutToggleButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_zoomOutToggleButtonActionPerformed
this.mapComponent.setMapTool(new ZoomOutTool(this.mapComponent));
}//GEN-LAST:event_zoomOutToggleButtonActionPerformed
private void handToggleButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_handToggleButtonActionPerformed
this.mapComponent.setMapTool(new PanTool(this.mapComponent));
}//GEN-LAST:event_handToggleButtonActionPerformed
private void distanceToggleButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_distanceToggleButtonActionPerformed
MeasureTool tool = new MeasureTool(this.mapComponent);
tool.addMeasureToolListener(this.coordinateInfoPanel);
this.mapComponent.setMapTool(tool);
}//GEN-LAST:event_distanceToggleButtonActionPerformed
private void showAllButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_showAllButtonActionPerformed
this.mapComponent.showAll();
}//GEN-LAST:event_showAllButtonActionPerformed
private void closeWindow(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_closeWindow
this.closeDocumentWindow();
}//GEN-LAST:event_closeWindow
private void readGUI() {
gridFilter.setGridFilterLoops(meanFilterLoopsSlider.getValue());
gridFilter.setValleysMeanFilterLoops(valleysMeanFilterLoopsSlider.getValue());
gridFilter.setValleysExaggeration(valleysExaggerationSlider.getValue() / 100f);
gridFilter.setValleysCurvatureUpperLimit(valleysCurvatureThresholdSlider.getValue() / 100f);
gridFilter.setRidgesMeanFilterLoops(ridgesMeanFilterLoopsSlider.getValue());
gridFilter.setRidgesExaggeration(ridgesExaggerationSlider.getValue() / 100f);
gridFilter.setCombinationSlopeThreshold(combinationSlopeThresholdSlider.getValue());
gridFilter.setRidgesPlancurvatureWeight(planCurvatureWeightSlider.getValue() / 100f);
}
private void saveShadedReliefMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveShadedReliefMenuItemActionPerformed
try {
GeoGrid grid = getNamedGrid("Result");
if (grid == null) {
return;
}
GeoImage geoImage = new GridShadeOperator().operateToImage(grid);
String path = FileUtils.askFile(null, "Save Shaded Relief", "shading.png", false, "png");
if (path != null) {
BufferedImage image = geoImage.getBufferedImage();
ImageIO.write(image, "png", new File(path));
}
} catch (IOException ex) {
String msg = "The shaded relief image could not be saved.";
ika.utils.ErrorDialog.showErrorDialog(msg, errTitle(), ex, this);
}
}//GEN-LAST:event_saveShadedReliefMenuItemActionPerformed
private void viewMenuActionHandler(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_viewMenuActionHandler
if (adjustingGUI) {
return;
}
JCheckBoxMenuItem mi = (JCheckBoxMenuItem) (evt.getSource());
if (mi.isSelected()) {
resetMap(displayGrids != null && displayGrids.size() > 0);
}
}//GEN-LAST:event_viewMenuActionHandler
/**
* Interpolate value for scale slider between medium and small scale.
* @param y50 y value at 50 (medium scale)
* @param y100 y value at 100 (small scale)
* @param x Between 50 and 100
* @return
*/
private float smallScaleInterpolation(float y50, float y100, float x) {
float m = (y100 - y50) / 50f;
float c = y100 - m * 100f;
return m * x + c;
}
/**
* Interpolate value for scale slider between large and medium scale.
* @param y0 y value at 0 (large scale)
* @param y50 y value at 50 (medium scale)
* @param x x value between 0 and 50
* @return
*/
private float largeScaleInterpolation(float y0, float y50, float x) {
float m = (y50 - y0) / 50f;
return m * x + y0;
}
private void interpolateBasicParameters(int w) {
final int ridgesMeanFilterLoops;
final float ridgesExaggeration;
final float ridgesPlanCurvatureWeight;
final int valleysMeanFilterLoops;
final float valleysExaggeration;
final float valleysCurvatureUpperLimit;
final float combinationSlopeThreshold;
if (w < 50) {
ridgesMeanFilterLoops = Math.round(largeScaleInterpolation(2.f, 5f, w));
ridgesExaggeration = 1.25f;
ridgesPlanCurvatureWeight = 1.5f;
valleysMeanFilterLoops = Math.round(largeScaleInterpolation(2.f, 10f, w));
valleysExaggeration = largeScaleInterpolation(0.7f, 0.4f, w);
valleysCurvatureUpperLimit = largeScaleInterpolation(0.8f, 0.5f, w);
combinationSlopeThreshold = largeScaleInterpolation(25f, 15f, w);
} else {
ridgesMeanFilterLoops = Math.round(smallScaleInterpolation(5f, 10f, w));
ridgesExaggeration = smallScaleInterpolation(1.25f, 20f, w);
ridgesPlanCurvatureWeight = smallScaleInterpolation(1.5f, 3f, w);
valleysMeanFilterLoops = Math.round(smallScaleInterpolation(10f, 30f, w));
valleysExaggeration = smallScaleInterpolation(0.4f, 0f, w);
valleysCurvatureUpperLimit = smallScaleInterpolation(0.5f, 0.05f, w);
combinationSlopeThreshold = smallScaleInterpolation(15f, 2.5f, w);
}
gridFilter.setValleysMeanFilterLoops(valleysMeanFilterLoops);
gridFilter.setRidgesMeanFilterLoops(ridgesMeanFilterLoops);
gridFilter.setRidgesExaggeration(ridgesExaggeration);
gridFilter.setRidgesPlancurvatureWeight(ridgesPlanCurvatureWeight);
gridFilter.setValleysExaggeration(valleysExaggeration);
gridFilter.setValleysCurvatureUpperLimit(valleysCurvatureUpperLimit);
gridFilter.setCombinationSlopeThreshold(combinationSlopeThreshold);
// write advanced GUI
writeGUI();
readGUIAndFilter(false);
}
private void scaleSliderStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_scaleSliderStateChanged
if (!scaleSlider.getValueIsAdjusting()) {
interpolateBasicParameters(scaleSlider.getValue());
}
}//GEN-LAST:event_scaleSliderStateChanged
private void basicToggleButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_basicToggleButtonActionPerformed
CardLayout cl = (CardLayout) (basicAdvancedPanel.getLayout());
cl.show(basicAdvancedPanel, "basicCard");
// apply current settings of scale slider
interpolateBasicParameters(scaleSlider.getValue());
}//GEN-LAST:event_basicToggleButtonActionPerformed
private void advancedToggleButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_advancedToggleButtonActionPerformed
CardLayout cl = (CardLayout) (basicAdvancedPanel.getLayout());
cl.show(basicAdvancedPanel, "advancedCard");
}//GEN-LAST:event_advancedToggleButtonActionPerformed
private void systemInfoMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_systemInfoMenuItemActionPerformed
new SystemInfo(this);
}//GEN-LAST:event_systemInfoMenuItemActionPerformed
private void onlineManualMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_onlineManualMenuItemActionPerformed
Properties props =
ika.utils.PropertiesLoader.loadProperties("ika.app.Application.properties");
String url = props.getProperty("HelpWebPage");
if (Desktop.isDesktopSupported()) {
try {
URI uri = new URI(url);
Desktop.getDesktop().browse(uri);
} catch (URISyntaxException ex) {
Logger.getLogger(TerrainSculptorWindow.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(TerrainSculptorWindow.class.getName()).log(Level.SEVERE, null, ex);
}
}
}//GEN-LAST:event_onlineManualMenuItemActionPerformed
private void systemInfoMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_systemInfoMenuItem1ActionPerformed
new SystemInfo(this);
}//GEN-LAST:event_systemInfoMenuItem1ActionPerformed
private void gridInfoMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_gridInfoMenuItemActionPerformed
showGridInfo();
}//GEN-LAST:event_gridInfoMenuItemActionPerformed
private void noTerrainErrorMessage(JFrame frame) {
String msg = "<html>There is no terrain model loaded.<br>"
+ "Please first open one.";
JOptionPane.showMessageDialog(frame, msg, errTitle(), JOptionPane.INFORMATION_MESSAGE);
}
private void scaleTerrainMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_scaleTerrainMenuItemActionPerformed
GeoGrid grid = gridFilter.getGrid();
if (grid == null) {
noTerrainErrorMessage(this);
return;
}
int option = JOptionPane.showOptionDialog(this,
scaleTerrainPanel,
"Scale Terrain",
JOptionPane.OK_CANCEL_OPTION,
JOptionPane.QUESTION_MESSAGE,
null, null, null);
if (option != JOptionPane.OK_OPTION) {
return;
}
try {
scaleTerrainFormattedTextField.commitEdit();
java.lang.Number f = (java.lang.Number) (scaleTerrainFormattedTextField.getValue());
float scale = f.floatValue();
GridScaleOperator op = new GridScaleOperator(scale);
GeoGrid scaledGrid = op.operate(grid);
gridFilter.setGrid(scaledGrid);
readGUIAndFilter(false);
} catch (Exception exc) {
String msg = "An error occured while scaling the terrain.";
ErrorDialog.showErrorDialog(msg, errTitle(), exc, this);
}
}//GEN-LAST:event_scaleTerrainMenuItemActionPerformed
private void voidValuesMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_voidValuesMenuItemActionPerformed
GeoGrid grid = gridFilter.getGrid();
if (grid == null) {
noTerrainErrorMessage(this);
return;
}
int option = JOptionPane.showOptionDialog(this,
voidValuesPanel,
"Change Void Values",
JOptionPane.OK_CANCEL_OPTION,
JOptionPane.QUESTION_MESSAGE,
null, null, null);
if (option != JOptionPane.OK_OPTION) {
return;
}
try {
voidValuesFormattedTextField.commitEdit();
java.lang.Number f = (java.lang.Number) (voidValuesFormattedTextField.getValue());
GridChangeVoidOperator op = new GridChangeVoidOperator(f.floatValue());
gridFilter.setGrid(op.operate(grid));
readGUIAndFilter(false);
} catch (Exception exc) {
ErrorDialog.showErrorDialog("An error occured while chaning void values.",
errTitle(), exc, this);
}
}//GEN-LAST:event_voidValuesMenuItemActionPerformed
private void readGUIAndFilter(boolean manuallyTriggeredFiltering) {
boolean filter = manuallyTriggeredFiltering || !deferredFiltering;
CardLayout cl = (CardLayout)(centerPanel.getLayout());
cl.show(centerPanel, filter ? "map" : "filterButton");
filteringStatusLabel.setText("Filtering is deferred.");
updateEditMenu(); // enable Filter command
if (!filter) {
return;
}
if (gridFilter.getGrid() == null) {
showNoTerrainMessage();
} else {
readGUI();
if (adjustingGUI) {
return;
}
// don't show the original grid, as no graphical response would be
// visible after a change to the GUI
try {
adjustingGUI = true;
if (viewOriginalCheckBoxMenuItem.isSelected()) {
viewFinalCheckBoxMenuItem.setSelected(true);
}
} finally {
adjustingGUI = false;
}
try {
filter();
} catch (Throwable ex) {
String exmsg = ex.getMessage();
if (exmsg != null && exmsg.contains("user canceled")) {
return;
}
String msg = "An error occured";
ErrorDialog.showErrorDialog(msg, errTitle(), ex, TerrainSculptorWindow.this);
}
}
}
private void filterSliderStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_filterSliderStateChanged
JSlider slider = (JSlider) evt.getSource();
if (!slider.getValueIsAdjusting() && !adjustingGUI) {
readGUIAndFilter(false);
}
}//GEN-LAST:event_filterSliderStateChanged
private void showPageCheckBoxMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_showPageCheckBoxMenuItemActionPerformed
boolean show = this.showPageCheckBoxMenuItem.isSelected();
mapComponent.getPageFormat().setVisible(show);
}//GEN-LAST:event_showPageCheckBoxMenuItemActionPerformed
private void filterButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_filterButtonActionPerformed
readGUIAndFilter(true);
}//GEN-LAST:event_filterButtonActionPerformed
private void combinationSlopeThresholdSliderStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_combinationSlopeThresholdSliderStateChanged
if (((JSlider) evt.getSource()).getValueIsAdjusting()) {
return;
}
if (!viewCombinationCheckBoxMenuItem.isSelected()
&& !viewFinalCheckBoxMenuItem.isSelected()) {
viewFinalCheckBoxMenuItem.setSelected(true);
}
}//GEN-LAST:event_combinationSlopeThresholdSliderStateChanged
private void viewMenuChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_viewMenuChanged
if (evt.getStateChange() == ItemEvent.SELECTED) {
JCheckBoxMenuItem menuItem = (JCheckBoxMenuItem) evt.getSource();
viewMenuButton.setText(menuItem.getText());
}
}//GEN-LAST:event_viewMenuChanged
private void ridgesSliderStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_ridgesSliderStateChanged
if (((JSlider) evt.getSource()).getValueIsAdjusting()) {
return;
}
if (!viewMountainsCheckBoxMenuItem.isSelected()
&& !viewFinalCheckBoxMenuItem.isSelected()) {
viewFinalCheckBoxMenuItem.setSelected(true);
}
}//GEN-LAST:event_ridgesSliderStateChanged
private void valleysSliderStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_valleysSliderStateChanged
if (((JSlider) evt.getSource()).getValueIsAdjusting()) {
return;
}
if (!viewLowlandsCheckBoxMenuItem.isSelected()
&& !viewFinalCheckBoxMenuItem.isSelected()) {
viewFinalCheckBoxMenuItem.setSelected(true);
}
}//GEN-LAST:event_valleysSliderStateChanged
private void lodSliderStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_lodSliderStateChanged
if (((JSlider) evt.getSource()).getValueIsAdjusting()) {
return;
}
if (viewOriginalCheckBoxMenuItem.isSelected()){
viewFinalCheckBoxMenuItem.setSelected(true);
}
}//GEN-LAST:event_lodSliderStateChanged
private void infoMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_infoMenuItem1ActionPerformed
ika.gui.ProgramInfoPanel.showApplicationInfo();
}//GEN-LAST:event_infoMenuItem1ActionPerformed
private void filterMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_filterMenuItemActionPerformed
readGUIAndFilter(true);
}//GEN-LAST:event_filterMenuItemActionPerformed
private void deferredFilteringCheckBoxMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deferredFilteringCheckBoxMenuItemActionPerformed
deferredFiltering = deferredFilteringCheckBoxMenuItem.isSelected();
}//GEN-LAST:event_deferredFilteringCheckBoxMenuItemActionPerformed
/**
* A property change listener for the root pane that adjusts the enabled
* state of the save menu depending on the windowModified property attached
* to the root pane.
*/
private void windowModifiedPropertyChange(java.beans.PropertyChangeEvent evt) {
// only treat changes to the windowModified property
if (!"windowModified".equals(evt.getPropertyName())) {
return;
}
// retrieve the value of the windowModified property
Boolean windowModified = null;
if (saveMenuItem != null && this.getRootPane() != null) {
windowModified =
(Boolean) this.getRootPane().getClientProperty("windowModified");
}
// enable or disable the saveMenu accordingly
if (windowModified != null) {
this.saveMenuItem.setEnabled(windowModified.booleanValue());
}
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JPanel advancedPanel;
private javax.swing.JToggleButton advancedToggleButton;
private javax.swing.ButtonGroup basicAdvancedButtonGroup;
private javax.swing.JPanel basicAdvancedPanel;
private javax.swing.JPanel basicAdvancedSelectionPanel;
private javax.swing.JPanel basicPanel;
private javax.swing.JToggleButton basicToggleButton;
private javax.swing.JPanel centerPanel;
private javax.swing.JMenuItem closeMenuItem;
private javax.swing.JPanel combinationPanel;
private javax.swing.JSlider combinationSlopeThresholdSlider;
private javax.swing.JPanel controlPanel;
private ika.gui.CoordinateInfoPanel coordinateInfoPanel;
private javax.swing.JMenuItem copyMenuItem;
private javax.swing.JMenuItem cutMenuItem;
private javax.swing.JMenu debugMenu;
private javax.swing.JCheckBoxMenuItem deferredFilteringCheckBoxMenuItem;
private javax.swing.JMenuItem deleteMenuItem;
private javax.swing.JToggleButton distanceToggleButton;
private javax.swing.JMenu editMenu;
private javax.swing.JMenuItem exitMenuItem;
private javax.swing.JSeparator exitMenuSeparator;
private javax.swing.JMenu exportMenu;
private javax.swing.JMenu fileMenu;
private javax.swing.JButton filterButton;
private javax.swing.JPanel filterCanceledPanel;
private javax.swing.JMenuItem filterMenuItem;
private javax.swing.JLabel filteringStatusLabel;
private javax.swing.JMenuItem gridInfoMenuItem;
private javax.swing.JToggleButton handToggleButton;
private javax.swing.JMenu helpMenu;
private javax.swing.JMenuItem infoMenuItem;
private javax.swing.JMenuItem infoMenuItem1;
private javax.swing.JPanel infoPanel;
private javax.swing.JToolBar infoToolBar;
private javax.swing.JPanel jPanel1;
private javax.swing.JToolBar.Separator jSeparator7;
private javax.swing.JPopupMenu.Separator jSeparator8;
private javax.swing.JPanel levelOfDetailsPanel;
private javax.swing.JMenu macHelpMenu;
private ika.gui.MapComponent mapComponent;
private javax.swing.JSlider meanFilterLoopsSlider;
private javax.swing.JMenuItem memoryMenuItem;
private javax.swing.JMenuBar menuBar;
private javax.swing.JMenuItem minimizeMenuItem;
private javax.swing.JToolBar navigationToolBar;
private javax.swing.JMenuItem newMenuItem;
private javax.swing.JMenuItem onlineManualMenuItem;
private javax.swing.JMenuItem onlineManualMenuItem1;
private javax.swing.JMenuItem openMenuItem;
private javax.swing.JMenu openRecentMenu;
private javax.swing.JMenuItem pasteMenuItem;
private javax.swing.JSlider planCurvatureWeightSlider;
private javax.swing.JMenuItem redrawMenuItem;
private javax.swing.JSlider ridgesExaggerationSlider;
private javax.swing.JSlider ridgesMeanFilterLoopsSlider;
private javax.swing.JPanel ridgesPanel;
private javax.swing.JMenuItem saveMenuItem;
private javax.swing.JMenuItem saveShadedReliefMenuItem;
private ika.gui.ScaleLabel scaleLabel;
private javax.swing.JSlider scaleSlider;
private javax.swing.JFormattedTextField scaleTerrainFormattedTextField;
private javax.swing.JMenuItem scaleTerrainMenuItem;
private javax.swing.JPanel scaleTerrainPanel;
private javax.swing.JButton showAllButton;
private javax.swing.JMenuItem showAllMenuItem;
private javax.swing.JCheckBoxMenuItem showPageCheckBoxMenuItem;
private javax.swing.JMenuItem systemInfoMenuItem;
private javax.swing.JMenuItem systemInfoMenuItem1;
private javax.swing.ButtonGroup toolBarButtonGroup;
private javax.swing.JPanel topLeftPanel;
private javax.swing.JPanel topPanel;
private javax.swing.JSlider valleysCurvatureThresholdSlider;
private javax.swing.JSlider valleysExaggerationSlider;
private javax.swing.JSlider valleysMeanFilterLoopsSlider;
private javax.swing.JPanel valleysPanel;
private javax.swing.JCheckBoxMenuItem viewCombinationCheckBoxMenuItem;
private javax.swing.JCheckBoxMenuItem viewFinalCheckBoxMenuItem;
private javax.swing.JCheckBoxMenuItem viewLowlandsCheckBoxMenuItem;
private javax.swing.JMenu viewMenu;
private ika.gui.MenuToggleButton viewMenuButton;
private javax.swing.ButtonGroup viewMenuButtonGroup;
private javax.swing.JCheckBoxMenuItem viewMountainsCheckBoxMenuItem;
private javax.swing.JCheckBoxMenuItem viewOriginalCheckBoxMenuItem;
private javax.swing.JPopupMenu viewPopupMenu;
private javax.swing.JFormattedTextField voidValuesFormattedTextField;
private javax.swing.JMenuItem voidValuesMenuItem;
private javax.swing.JPanel voidValuesPanel;
private javax.swing.JMenu windowMenu;
private javax.swing.JSeparator windowSeparator;
private javax.swing.JMenuItem zoomInMenuItem;
private javax.swing.JToggleButton zoomInToggleButton;
private javax.swing.JMenuItem zoomMenuItem;
private javax.swing.JMenuItem zoomOutMenuItem;
private javax.swing.JToggleButton zoomOutToggleButton;
// End of variables declaration//GEN-END:variables
}