/*
* Licensed Materials - Property of Rogue Wave Software, Inc.
* © Copyright Rogue Wave Software, Inc. 2014, 2017
* © Copyright IBM Corp. 2009, 2014
* © Copyright ILOG 1996, 2009
* All Rights Reserved.
*
* Note to U.S. Government Users Restricted Rights:
* The Software and Documentation were developed at private expense and
* are "Commercial Items" as that term is defined at 48 CFR 2.101,
* consisting of "Commercial Computer Software" and
* "Commercial Computer Software Documentation", as such terms are
* used in 48 CFR 12.212 or 48 CFR 227.7202-1 through 227.7202-4,
* as applicable.
*/
package shared;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.ComponentOrientation;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.HeadlessException;
import java.awt.Image;
import java.awt.Insets;
import java.awt.Point;
import java.awt.RenderingHints;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.security.AccessControlException;
import java.sql.DriverManager;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Random;
import java.util.Vector;
import javax.swing.AbstractButton;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JRootPane;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JSlider;
import javax.swing.JSplitPane;
import javax.swing.JTable;
import javax.swing.JToggleButton;
import javax.swing.JToolTip;
import javax.swing.JTree;
import javax.swing.KeyStroke;
import javax.swing.OverlayLayout;
import javax.swing.SpringLayout;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.Timer;
import javax.swing.ToolTipManager;
import javax.swing.UIManager;
import javax.swing.border.EtchedBorder;
import javax.swing.border.TitledBorder;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.plaf.basic.BasicHTML;
import javax.swing.tree.TreePath;
import ilog.views.IlvConstants;
import ilog.views.IlvGrapher;
import ilog.views.IlvGraphic;
import ilog.views.IlvGraphicEnumeration;
import ilog.views.IlvManager;
import ilog.views.IlvManagerLayer;
import ilog.views.IlvManagerView;
import ilog.views.IlvManagerViewInteractor;
import ilog.views.IlvNamedProperty;
import ilog.views.IlvPoint;
import ilog.views.IlvRect;
import ilog.views.IlvTransformer;
import ilog.views.IlvUtil;
import ilog.views.event.InteractorChangedEvent;
import ilog.views.event.InteractorListener;
import ilog.views.event.ManagerContentChangedEvent;
import ilog.views.event.ManagerContentChangedListener;
import ilog.views.event.ManagerSelectionChangedEvent;
import ilog.views.event.ManagerSelectionListener;
import ilog.views.event.ObjectInsertedEvent;
import ilog.views.interactor.IlvMakePolyPointsInteractor;
import ilog.views.interactor.IlvManagerMagViewInteractor;
import ilog.views.interactor.IlvPolyPointsObjectFactory;
import ilog.views.maps.ExceptionHandler;
import ilog.views.maps.IlvAltitudeDataSource;
import ilog.views.maps.IlvAreaOfInterest;
import ilog.views.maps.IlvAttributeInfoProperty;
import ilog.views.maps.IlvAttributeProperty;
import ilog.views.maps.IlvCoordinate;
import ilog.views.maps.IlvCoordinateSystemProperty;
import ilog.views.maps.IlvDisplayPreferences;
import ilog.views.maps.IlvDisplayPreferencesProperty;
import ilog.views.maps.IlvFeatureAttribute;
import ilog.views.maps.IlvFeatureAttributeProperty;
import ilog.views.maps.IlvMapLayerTreeProperty;
import ilog.views.maps.IlvMapOutputStream;
import ilog.views.maps.IlvMapScaleLimiter;
import ilog.views.maps.IlvMapUtil;
import ilog.views.maps.attribute.IlvAttributeArray;
import ilog.views.maps.attribute.IlvStringAttribute;
import ilog.views.maps.beans.IlvCompass;
import ilog.views.maps.beans.IlvDataSourcePanel;
import ilog.views.maps.beans.IlvExceptionMessage;
import ilog.views.maps.beans.IlvJAdvancedZoomControl;
import ilog.views.maps.beans.IlvJAreaOfInterestPanel;
import ilog.views.maps.beans.IlvJAutomaticScaleBar;
import ilog.views.maps.beans.IlvJCompass;
import ilog.views.maps.beans.IlvJCoordinateSystemEditorPanel;
import ilog.views.maps.beans.IlvJDisplayPreferencesEditorPanel;
import ilog.views.maps.beans.IlvJMapLegend;
import ilog.views.maps.beans.IlvJMapScaleControl;
import ilog.views.maps.beans.IlvJMapsManagerViewControlBar;
import ilog.views.maps.beans.IlvJMouseCoordinateViewer;
import ilog.views.maps.beans.IlvJOverview;
import ilog.views.maps.beans.IlvLayerTreePanel;
import ilog.views.maps.beans.IlvMapAnnotationToolBar;
import ilog.views.maps.beans.IlvMapLayer;
import ilog.views.maps.beans.IlvMapLayerTreeModel;
import ilog.views.maps.beans.IlvMapLegendPanel;
import ilog.views.maps.beans.IlvMapScaleComputation;
import ilog.views.maps.datasource.IlvGraphicLayerDataSource;
import ilog.views.maps.datasource.IlvMapDataSource;
import ilog.views.maps.datasource.IlvMapDataSourceModel;
import ilog.views.maps.datasource.IlvMapDataSourceProperty;
import ilog.views.maps.datasource.IlvShapeDataSource;
import ilog.views.maps.export.IlvKMLExporter;
import ilog.views.maps.export.IlvMapExportDialog;
import ilog.views.maps.export.IlvSDOExporter;
import ilog.views.maps.export.IlvShapeExporter;
import ilog.views.maps.export.SDOConnectionPanel;
import ilog.views.maps.format.image.IlvRasterBasicImageReader;
import ilog.views.maps.graphic.IlvMapSelectionFactory;
import ilog.views.maps.graphic.style.IlvGraphicPathStyle;
import ilog.views.maps.graphic.style.IlvMapCompositeStyle;
import ilog.views.maps.graphic.style.IlvMapStyle;
import ilog.views.maps.graphic.style.IlvMapStyleBeanInfo;
import ilog.views.maps.graphic.style.IlvPolylineStyle;
import ilog.views.maps.interactor.IlvContinuousZoomInteractor;
import ilog.views.maps.interactor.IlvManagerViewRotateInteractor;
import ilog.views.maps.interactor.IlvMapPanInteractor;
import ilog.views.maps.interactor.IlvSeeThroughConfigurationPanel;
import ilog.views.maps.interactor.IlvSeeThroughInteractor;
import ilog.views.maps.label.IlvMapLabelStyle;
import ilog.views.maps.label.IlvMapLabeler;
import ilog.views.maps.label.IlvMapLabelerProperty;
import ilog.views.maps.measures.IlvMakeMeasureInteractor;
import ilog.views.maps.print.IlvMapPrintingController;
import ilog.views.maps.projection.IlvProjectionUtil;
import ilog.views.maps.raster.IlvRasterTemporaryFileManager;
import ilog.views.maps.raster.datasource.IlvRasterDataSourceFactory;
import ilog.views.maps.srs.coordsys.IlvCoordinateSystem;
import ilog.views.maps.srs.coordsys.IlvGeographicCoordinateSystem;
import ilog.views.maps.srs.coordsys.IlvProjectedCoordinateSystem;
import ilog.views.maps.srs.coordtrans.IlvCoordinateTransformation;
import ilog.views.maps.srs.coordtrans.IlvCoordinateTransformationException;
import ilog.views.print.IlvManagerPrintableDocument;
import ilog.views.print.IlvPrintAreaInteractor;
import ilog.views.sdm.IlvSDMEngine;
import ilog.views.swing.IlvJScrollManagerView;
import ilog.views.swing.IlvThreadedActivityMonitor;
import ilog.views.swing.IlvThreadedActivityMonitorPanel;
import ilog.views.swing.IlvThreadedActivityMonitorProperty;
import ilog.views.swing.IlvToolTipManager;
import ilog.views.util.IlvImageUtil;
import ilog.views.util.IlvProductUtil;
import ilog.views.util.internal.IlvPopUserBrowser;
import ilog.views.util.print.IlvPrintableDocument;
import ilog.views.util.swing.IlvSwingUtil;
import nodefense.InteractorsDefLess;
import plugins.SDOLoadAction;
import plugins.ShapeLoadAction;
import shared.ui.AdvancedTabbedPane;
import utils.CoordinateSystemDictionaryManager;
import utils.GCManager;
import utils.GridManager;
import utils.IvlFileManager;
import utils.SymbologyManager;
import utils.TileCacheManager;
import utils.TileDebugManager;
/**
* base JViews Maps show case.
*/
SuppressWarnings("serial")
public abstract class BaseDemo extends JRootPane implements PropertyChangeListener {
/**
* A boolean that allows to load a simplified default map when set to true.
* Note, this parameter can be changed in the MapBuilder.settings file
*/
protected boolean useSimplifiedDefaultMap = true;
/**
* A boolean to control whether the map needs to be updated for each change of
* the projection in the coordinate panel.
*/
protected boolean autoReprojection;
static {
// to change the default appearance of the split pane dividers everywhere in
// this application.
UIManager.put("SplitPaneDivider.border", BorderFactory.createEmptyBorder()); //$NON-NLS-1$
UIManager.put("SplitPane.dividerSize", new Integer(5));//$NON-NLS-1$
/*
* since JViews 8.1 : display a message to the user when a deep exception
* happens
*/
IlvMapUtil.setExceptionHandler(new ExceptionHandler() {
Override
public void handle(Exception e) throws Exception {
new IlvExceptionMessage(e, null);
throw e;
}
});
// speed-up oracle connection timeout (JV-3538)
DriverManager.setLoginTimeout(3);
}
{
// This sample uses JViews Maps features. When deploying an
// application that includes this code, you need to be in possession
// of a JViews Maps Deployment license.
IlvProductUtil.DeploymentLicenseRequired(IlvProductUtil.JViews_Maps_Deployment);
// It can also use JViews Maps for Defense features. If you need those,
// when deploying an application that includes this code, you need to be
// in possession of a JViews Maps for Defense Deployment license.
IlvProductUtil.DeploymentLicenseRequired(IlvProductUtil.JViews_Maps_for_Defense_Deployment);
// This sample uses JViews Charts features (through the Charts palette).
// When deploying an application that includes this code, you need to
// be in possession of a JViews Charts Deployment license.
IlvProductUtil.DeploymentLicenseRequired(IlvProductUtil.JViews_Charts_Deployment);
}
// Listener on manager properties to detect if map structure has changed
private JButton preview = new JButton(IlvMapUtil.getString(BaseDemo.class, "BaseDemo.PrintPreview")); //$NON-NLS-1$
private JButton setup = new JButton(IlvMapUtil.getString(BaseDemo.class, "BaseDemo.PageSetup")); //$NON-NLS-1$
private JButton print = new JButton(IlvMapUtil.getString(BaseDemo.class, "BaseDemo.Print")); //$NON-NLS-1$
/**
* @return the print button
*/
public JButton getPrintButton() {
return print;
}
/**
* @return the print setup button
*/
public JButton getSetupButton() {
return setup;
}
/**
* @return the print preview button
*/
public JButton getPreviewButton() {
return preview;
}
private static IlvMapDataSource findDataSource(IlvMapLayer mapLayer) {
IlvMapDataSource dataSource = mapLayer.getDataSource();
if (dataSource == null) {
IlvMapLayer parentLayer = null;
try {
parentLayer = mapLayer.getParent();
} catch (ClassCastException e) {
// Workaround for exception sometimes thrown by getParent() ...
}
if (parentLayer != null) {
dataSource = findDataSource(parentLayer);
}
}
return dataSource;
}
static boolean removeSelection(IlvManager manager) {
boolean removed = false;
IlvGraphicEnumeration en = manager.getSelectedObjects();
Vector<IlvGraphic> selected = new Vector<IlvGraphic>();
while (en.hasMoreElements()) {
IlvGraphic obj = en.nextElement();
if (obj != null) {
selected.add(obj);
}
}
if (selected.size() > 0) {
IlvMapLabelerProperty p = (IlvMapLabelerProperty) manager.getNamedProperty(IlvMapLabelerProperty.NAME);
for (int i = 0; i < selected.size(); i++) {
IlvGraphic obj = (IlvGraphic) selected.get(i);
// select it
if (obj != null) {
IlvMapLayer ml = IlvMapLayer.get(obj);
manager.removeObject(obj, true);
if (ml != null) {
IlvMapDataSource ds = findDataSource(ml);
if (ds instanceof IlvGraphicLayerDataSource) {
IlvGraphicLayerDataSource gds = (IlvGraphicLayerDataSource) ds;
gds.remove(obj);
// JV-2949 remove the layer it it becomes empty
if (gds.size() == 0) {
IlvMapLayer toRemove = ds.getInsertionLayer();
IlvMapLayerTreeModel model = IlvMapLayerTreeProperty.GetMapLayerTreeModel(manager);
model.removeChild(toRemove);
}
} else if (ds != null) {
ds.setForceUsingBackupDataSource(true);
IlvGraphicLayerDataSource srcs[] = ds.getBackupDataSources();
if (srcs != null) {
int nobj = 0;
for (int is = 0; is < srcs.length; is++) {
srcs[is].remove(obj);
nobj += srcs[is].size();
}
// remove the layer it it becomes empty
if (nobj == 0) {
IlvMapLayer toRemove = ds.getInsertionLayer();
IlvMapLayerTreeModel model = IlvMapLayerTreeProperty.GetMapLayerTreeModel(manager);
model.removeChild(toRemove);
}
}
ds.setSaveBackupDataSources(true);
if (p != null) {
IlvMapLabeler labeler = p.getMapLabeler();
if (labeler != null) {
labeler.performLabeling();
}
}
removed = true;
} else if (manager instanceof IlvGrapher) { // JV-2887: remove
// symbols from the
// engine.
IlvSDMEngine e = IlvSDMEngine.getSDMEngine((IlvGrapher) manager);
if (e != null) {
Object modelObject = e.getObject(obj);
if (modelObject != null) {
e.getModel().removeObject(modelObject);
}
}
}
}
}
}
}
return removed;
}
private final class PopInteractorKeyListener extends KeyAdapter {
/**
* Manage ESCAPE key.
*
* @see java.awt.event.KeyAdapter#keyPressed(java.awt.event.KeyEvent)
*/
Override
public void keyPressed(KeyEvent e) {
if (e.getKeyChar() == KeyEvent.VK_ESCAPE) {
view.popInteractor();
}
}
}
private class FileOpenButton extends JMenuItem implements ActionListener {
FileOpenButton(String fileName) {
super(fileName);
addActionListener(this);
}
/**
* @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
*/
Override
public void actionPerformed(ActionEvent e) {
File f = new File(getText());
if (f.exists()) {
IvlFileManager.LoadIvlActionListener loader = new IvlFileManager.LoadIvlActionListener(BaseDemo.this);
loader.doLoad(f);
}
}
}
static private int lastFilesCount = 4;
private Properties bundle = new Properties();
/**
* @return the stored properties.
*/
public Properties getPreferences() {
return bundle;
}
/**
* @return Returns the maximum number of files in the last files menu.
*/
public static int getLastFilesCount() {
return lastFilesCount;
}
private static final String lastFileTag = "LastFile"; //$NON-NLS-1$
/**
* Sets last opened file
*
* @param fileName
* file path and name
*/
public void setCurrentFile(String fileName) {
currentFile = fileName;
saveBtn.setEnabled(currentFile != null);
if (fileName == null)
return;
fileName = fileName.replace('\\', '/');
Vector<String> names = new Vector<String>();
int i;
for (i = 0; i < getLastFilesCount(); i++) {
String last = bundle.getProperty(lastFileTag + i);
if (last != null)
names.add(last);
}
names.removeElement(fileName);
names.insertElementAt(fileName, 0);
for (i = 0; i < names.size(); i++) {
bundle.setProperty(lastFileTag + i, (String) names.get(i));
}
for (; i < getLastFilesCount(); i++) {
bundle.remove(lastFileTag + i);
}
savePreferences();
setupRecentFileMenu();
// JV-1782 : set the document name.
if (fileName.endsWith("/")) //$NON-NLS-1$
fileName = fileName.substring(0, fileName.length() - 1);
i = fileName.lastIndexOf('/');
String docName = i != -1 ? fileName.substring(i + 1) : fileName;
getPrintingController().getDocument().setName(docName);
}
/**
* @return Returns the current File.
*/
public String getCurrentFile() {
return currentFile;
}
private void setupRecentFileMenu() {
lastFilesMenu.removeAll();
for (int i = 0; i < getLastFilesCount(); i++) {
String fileName = bundle.getProperty("LastFile" + i);//$NON-NLS-1$
if (fileName != null) {
lastFilesMenu.add(new FileOpenButton(fileName));
}
}
lastFilesMenu.setEnabled(lastFilesMenu.getMenuComponentCount() != 0);
}
/**
* Add additional preferences (for subclasses)
*
* @param pbundle
* properties to load.
*/
protected void loadAddditionalPreferences(Properties pbundle) {
pbundle.setProperty("BaseDemo.SimplifiedDefaultMap", Boolean.toString(useSimplifiedDefaultMap)); //$NON-NLS-1$
}
/**
* Save additional preferences (for subclasses)
*
* @param pbundle
* properties to load.
*/
protected void saveAddditionalPreferences(Properties pbundle) {
/* ignore */
}
/**
* the splash windows that shows when map builder starts.
*/
protected static SplashWindow splashWindow;
/**
* Creates and shows the splash screen.
*/
protected static void showSplashScreen() {
String iconFile = IlvMapUtil.getString(BaseDemo.class, "BaseDemo.SplashIconURL"); //$NON-NLS-1$
splashWindow = new SplashWindow(new JFrame(), findURL(iconFile));
splashWindow.showMessage(IlvMapUtil.getString(BaseDemo.class, "BaseDemo.SplashInitalizing")); //$NON-NLS-1$
splashWindow.start();
}
private int fps = 0;
// // COMPONENTS
// --------------------------------------------------------------------
/** Map view */
protected IlvManagerView view;
/** Map Overview */
protected IlvJOverview overview;
/** Map Toolbar */
protected IlvJMapsManagerViewControlBar toolbar;
/** Coordinate viewer */
protected IlvJMouseCoordinateViewer coordViewer;
/** Scale control panel */
protected IlvJMapScaleControl scaleControl;
/** Graphic scale visualizer */
protected IlvJAutomaticScaleBar graphicScale;
/** Layer Tree Panel */
protected IlvLayerTreePanel layerTreePanel;
/** Data Source List */
protected IlvDataSourcePanel dataSourcePanel;
/** Advanced zooming slider */
protected IlvJAdvancedZoomControl zoomer;
/** Continuous zoom and pan interactor */
protected IlvContinuousZoomInteractor continuousZoomer;
/** IlvMapManager list */
protected IlvJMapLegend _managerLayersLegend;
/** IlvMapManager list */
protected JPanel managerLayersPanel;
/** New Legend */
protected IlvMapLegendPanel mapLayersLegend;
/** coordinate system panel */
protected JPanel csMainPanel;
/** coordinate system editor */
protected IlvJCoordinateSystemEditorPanel csPanel;
/** preference Editor panel */
protected IlvJDisplayPreferencesEditorPanel prefsPanel;
/** Symbol edition panel */
protected JPanel simpleSymbologyPanel;
/** Symbol edition panel */
protected IlvJAreaOfInterestPanel areaPanel;
/** file menu */
protected JMenu fileMenu;
/** options menu */
protected JMenu optionMenu;
/** Help menu * */
protected JMenu helpMenu;
/** last files opened sub-menu */
protected JMenu lastFilesMenu = new JMenu(IlvMapUtil.getString(BaseDemo.class, "BaseDemo.Recent")); //$NON-NLS-1$
/** Coordinate system selection dialog */
protected CoordinateSystemDictionaryManager csdialog;
/** Symbology management */
protected SymbologyManager symbologyManager;
/** Scale panel */
protected JPanel scalePanel;
/** View Popup menu */
protected JPopupMenu viewPopupMenu = new JPopupMenu();
/** Location where popup menu was last displayed */
protected Point lastPopupLocation = new Point();
/** Annotations toolbar */
protected IlvMapAnnotationToolBar annotations;
// protected JDialog generateTiles;
// // CONTAINERS
// --------------------------------------------------------------------
/** editor tabbed panes */
private AdvancedTabbedPane bottomLeftPanel;
private AdvancedTabbedPane additionalViewPanel;
private JDialog additionalViewDialog;
/**
* Returns a tabbed pane to place unused views into.
*
* @return Returns a tabbed pane to place unused views into.
*/
protected AdvancedTabbedPane getAdditionalViewsPanel() {
if (additionalViewPanel == null) {
additionalViewPanel = new AdvancedTabbedPane();
}
return additionalViewPanel;
}
private AdvancedTabbedPane bottomRightPanel;
private AdvancedTabbedPane topLeftPanel;
/** panel containing the status */
protected JPanel statusPanel;
/** panel monitoring background tasks */
protected IlvThreadedActivityMonitorPanel monitorPanel;
/** view scroll */
private IlvJScrollManagerView viewScroll;
/** left hand side panel */
protected JSplitPane leftSplitPane;
/** right hand side panel */
protected JSplitPane rightSplitPane;
/** main split between overview & view */
protected JSplitPane mainSplit;
/** Print panel */
protected JPanel printPanel;
/** Continuous Zoom configuration panel */
protected ZoomConfigurationPanel zoomConfigPanel;
/** advanced panel */
protected JPanel advancedPanel;
/** grid setting panel */
protected JPanel gridPanel;
// JPanel prefPanel;
/** panel containing overview and zoom control */
protected JPanel overviewAndZoomPanel;
// private JDialog additionalViewFrame;
/**
* Button to change triple buffer state
*/
protected MBCheckBoxMenuItem tripleBuffered;
/**
* Button to change antialiasing state
*/
protected MBCheckBoxMenuItem antiAliased;
/**
* Button to change map tooltip state
*/
protected MBCheckBoxMenuItem showToolTips;
/**
* Button to change triple buffer state
*/
protected MBCheckBoxMenuItem showGUIToolTips;
/**
* Button to change advanced properties state
*/
protected MBCheckBoxMenuItem advancedProperties;
/**
* Button to select coordinate systems
*/
protected MBMenuItem selectSystem;
/**
* Button to show additional views
*/
protected MBMenuItem additionalViews;
/**
* Button to save map
*/
protected MBMenuItem saveBtn = new MBMenuItem("BaseDemo.SaveMap", true); //$NON-NLS-1$
/**
* Button to save map as
*/
protected MBMenuItem saveAsBtn = new MBMenuItem("BaseDemo.SaveAs", true); //$NON-NLS-1$
/**
* Button to load map
*/
protected MBMenuItem loadBtn = new MBMenuItem("BaseDemo.OpenMap", true); //$NON-NLS-1$
/**
* Button to clear map
*/
protected MBMenuItem clearBtn = new MBMenuItem("BaseDemo.ClearMap", true); //$NON-NLS-1$
/**
* Button to exit
*/
protected MBMenuItem exitBtn = new MBMenuItem("BaseDemo.Exit", true); //$NON-NLS-1$
/**
*
* Button to show print dialog Not used for now
*/
protected MBMenuItem printButton = new MBMenuItem("BaseDemo.Print", true); //$NON-NLS-1$
/**
* Button to export
*/
protected MBMenuItem exportBtn = new MBMenuItem("BaseDemo.Export", true); //$NON-NLS-1$
/**
* Button to export
*/
protected MBMenuItem tilingButton = new MBMenuItem("BaseDemo.ThinClientParameters", true); //$NON-NLS-1$
/**
* Generate tiles.
*/
// protected MBMenuItem generateTilesButton = new
// MBMenuItem("BaseDemo.GenerateTiles", true); //$NON-NLS-1$
/**
* Button to change projection center
*/
protected MBToggleButton centerInteractorBtn;
/**
* Button to zoom to layer
*/
protected MBButton zoomToLayer = new MBButton("BaseDemo.ZoomToLayer", false); //$NON-NLS-1$
/**
* Menu Item to zoom to layer
*/
protected MBMenuItem miZoomToLayer = new MBMenuItem("BaseDemo.ZoomToLayer", true); //$NON-NLS-1$
/**
* Menu Item to select an object
*/
protected MBMenuItem miSelectObject = new MBMenuItem("BaseDemo.SelectObject", true); //$NON-NLS-1$
/**
* Menu Item to edit the metadata of an object
*/
protected MBMenuItem miEditDataObject = new MBMenuItem("BaseDemo.EditObjectData", true); //$NON-NLS-1$
/**
* Menu Item to remove an object
*/
protected MBMenuItem miRemoveObject = new MBMenuItem("BaseDemo.RemoveObject", true); //$NON-NLS-1$
/**
* Menu Item to zoom to selection
*/
protected MBMenuItem miZoomToObject = new MBMenuItem("BaseDemo.ZoomToObject", true); //$NON-NLS-1$
/**
* Menu Item to center on selection
*/
protected MBMenuItem miCenterOnObject = new MBMenuItem("BaseDemo.CenterOnObject", true); //$NON-NLS-1$
/**
* Menu Item to cancel popup menu
*/
protected MBMenuItem miCancel = new MBMenuItem("BaseDemo.CancelPopupMenu", true); //$NON-NLS-1$
private JTree layerTree;
private GridManager gridManager;
private Map<String, AdvancedTabbedPane> panes;
private String currentFile;
IlvSeeThroughInteractor seeThrough;
/**
* JButton that manages icon resource.
*/
static public class MBButton extends JButton {
/**
* Creates a new <code>MBButton</code>.
*
* @param ressourceName
* resource name to find icon,label and tooltip
* @param showIconAndText
* indicates if both icon and text should be visible
*/
public MBButton(String ressourceName, boolean showIconAndText) {
this(BaseDemo.class, ressourceName, showIconAndText);
}
/**
* Creates a new <code>MBButton</code>.
*
* @param loader
* class to use to find resource file.
* @param ressourceName
* resource name to find icon,label and tooltip
* @param showIconAndText
* indicates if both icon and text should be visible
*/
public MBButton(Class<?> loader, String ressourceName, boolean showIconAndText) {
try {
String iconURL = IlvMapUtil.getString(loader, ressourceName + "Icon"); //$NON-NLS-1$
Image image = IlvImageUtil.getImageFromFile(loader, iconURL);
setIcon(new ImageIcon(image));
if (showIconAndText) {
setText(IlvMapUtil.getString(loader, ressourceName));
}
} catch (IOException e1) {
setText(IlvMapUtil.getString(loader, ressourceName));
}
setToolTipText(wrapToolTipText(IlvMapUtil.getString(loader, ressourceName + "Tip"))); //$NON-NLS-1$
setMargin(new Insets(2, 2, 2, 2));
}
}
/**
* JToggleButton that manages icon resource.
*/
static public class MBToggleButton extends JToggleButton {
/**
* Creates a new <code>MBToggleButton</code>.
*
* @param ressourceName
* resource name to find icon,label and tooltip
* @param showIconAndText
* indicates if both icon and text should be visible
*/
public MBToggleButton(String ressourceName, boolean showIconAndText) {
this(BaseDemo.class, ressourceName, showIconAndText);
}
/**
* Creates a new <code>MBToggleButton</code>.
*
* @param loader
* class to use to find resource file.
* @param ressourceName
* resource name to find icon,label and tooltip
* @param showIconAndText
* indicates if both icon and text should be visible
*/
public MBToggleButton(Class<?> loader, String ressourceName, boolean showIconAndText) {
try {
String iconURL = IlvMapUtil.getString(loader, ressourceName + "Icon"); //$NON-NLS-1$
Image image = IlvImageUtil.getImageFromFile(loader, iconURL);
setIcon(new ImageIcon(image));
if (showIconAndText) {
setText(IlvMapUtil.getString(loader, ressourceName));
}
} catch (IOException e1) {
setText(IlvMapUtil.getString(loader, ressourceName));
}
setToolTipText(wrapToolTipText(IlvMapUtil.getString(loader, ressourceName + "Tip"))); //$NON-NLS-1$
setMargin(new Insets(2, 2, 2, 2));
}
}
/**
* about ...
*/
protected MBMenuItem about = new MBMenuItem("BaseDemo.Help.About", false); //$NON-NLS-1$
/**
* MapBuilder help ...
*/
protected MBMenuItem mapBuilder = new MBMenuItem("BaseDemo.Help.MapBuilder", false); //$NON-NLS-1$
/**
* Menu item that manages accelerator resource.
*/
static public class MBMenuItem extends JMenuItem {
/**
* Creates a new <code>MBMenuItem</code>.
*
* @param ressourceName
* resource name to find icon,label and tooltip
* @param showIconAndText
* indicates if both icon and text should be visible
*/
public MBMenuItem(String ressourceName, boolean showIconAndText) {
this(BaseDemo.class, ressourceName, showIconAndText);
}
/**
* Creates a new <code>MBMenuItem</code>.
*
* @param loader
* @param ressourceName
* resource name to find icon,label and tooltip
* @param showIconAndText
* indicates if both icon and text should be visible
*/
public MBMenuItem(Class<?> loader, String ressourceName, boolean showIconAndText) {
String accelerator = IlvMapUtil.getString(loader, ressourceName + "Accelerator"); //$NON-NLS-1$
if (accelerator != null) {
setAccelerator(KeyStroke.getKeyStroke(accelerator));
}
try {
String iconURL = IlvMapUtil.getString(loader, ressourceName + "Icon"); //$NON-NLS-1$
Image image = IlvImageUtil.getImageFromFile(loader, iconURL);
setIcon(new ImageIcon(image));
if (showIconAndText) {
setText(IlvMapUtil.getString(loader, ressourceName));
}
} catch (IOException e1) {
setText(IlvMapUtil.getString(loader, ressourceName));
}
}
}
/**
* Menu item that manages accelerator resource.
*/
static public class MBCheckBoxMenuItem extends JCheckBoxMenuItem {
/**
* Creates a new <code>MBCheckBoxMenuItem</code>.
*
* @param ressourceName
* @param status
*/
public MBCheckBoxMenuItem(String ressourceName, boolean status) {
this(BaseDemo.class, ressourceName, status);
}
/**
* Creates a new <code>MBCheckBoxMenuItem</code>.
*
* @param loader
* @param ressourceName
* @param status
*/
public MBCheckBoxMenuItem(Class<?> loader, String ressourceName, boolean status) {
super(IlvMapUtil.getString(loader, ressourceName), status);
String accelerator = IlvMapUtil.getString(loader, ressourceName + "Accelerator"); //$NON-NLS-1$
if (accelerator != null) {
setAccelerator(KeyStroke.getKeyStroke(accelerator));
}
}
}
/**
* List of additional views; Comment for <code>views</code>
*/
protected JComponent views[];
/** Engine used to display symbols */
protected IlvSDMEngine engine;
private IlvMapExportDialog exportDialog;
JDialog printDialog;
/** Dialog to manage tile pyramid parameter (for thin client use) * */
JDialog tilingDialog = null;
private IlvJCompass compass;
/**
* Adds a named tabbed pane for view management.
*
* @param pane
*/
protected void addTabbedPane(AdvancedTabbedPane pane) {
panes.put(pane.getName(), pane);
}
/**
* Sets the default names of the different views and builds the {@link #views}
* table.
*/
protected void initViews() {
bottomLeftPanel.setName("BottomLeft"); //$NON-NLS-1$
getAdditionalViewsPanel().setName("AdditionalViews");//$NON-NLS-1$
bottomRightPanel.setName("BottomRight");//$NON-NLS-1$
topLeftPanel.setName("TopLeft");//$NON-NLS-1$
panes = new HashMap<String, AdvancedTabbedPane>();
addTabbedPane(bottomLeftPanel);
addTabbedPane(bottomRightPanel);
addTabbedPane(getAdditionalViewsPanel());
addTabbedPane(topLeftPanel);
advancedPanel.setName("BaseDemo.AdvancedSettings");//$NON-NLS-1$
managerLayersPanel.setName("BaseDemo.ManagerLayers");//$NON-NLS-1$
mapLayersLegend.setName("BaseDemo.NewLegend");//$NON-NLS-1$
compass.setName("BaseDemo.Compass");//$NON-NLS-1$
dataSourcePanel.setName("BaseDemo.DataSources");//$NON-NLS-1$
printPanel.setName("BaseDemo.Printing");//$NON-NLS-1$
zoomConfigPanel.setName("BaseDemo.ZoomConfigPanel"); //$NON-NLS-1$
gridPanel.setName("BaseDemo.Grids");//$NON-NLS-1$
layerTreePanel.setName("BaseDemo.MapLayers");//$NON-NLS-1$
csMainPanel.setName("BaseDemo.DisplayOptions");//$NON-NLS-1$
prefsPanel.setName("BaseDemo.Preferences");//$NON-NLS-1$
simpleSymbologyPanel.setName("BaseDemo.SymbologyTab");//$NON-NLS-1$
overviewAndZoomPanel.setName("BaseDemo.Overview");//$NON-NLS-1$
areaPanel.setName("BaseDemo.Areas");//$NON-NLS-1$
views = new JComponent[] { layerTreePanel, advancedPanel, managerLayersPanel, mapLayersLegend, compass,
dataSourcePanel, printPanel, zoomConfigPanel, gridPanel, prefsPanel, csMainPanel, simpleSymbologyPanel,
overviewAndZoomPanel, areaPanel };
}
/**
* @return the name of the preference file.
*/
protected String getPreferenceFileName() {
return IlvMapUtil.getString(BaseDemo.class, "BaseDemo.PreferencesFile"); //$NON-NLS-1$
}
/**
* Saves the preference file to setup views organisation.
*/
protected void savePreferences() {
for (int i = 0; i < views.length; i++) {
String parentName = null;
if (views[i].getParent() != null) {
parentName = views[i].getParent().getName();
}
if (parentName != null) {
bundle.setProperty(views[i].getName(), parentName);
}
}
saveAddditionalPreferences(bundle);
FileOutputStream out;
try {
out = new FileOutputStream(getPreferenceFileName());
bundle.store(out, ""); //$NON-NLS-1$
out.close();
} catch (IOException e) {
e.printStackTrace();
} catch (SecurityException e) {
// Applet -> do not save prefs
}
}
/**
* Loads the preference file to setup views organisation.
*/
protected void loadPreferences() {
InputStream preferences;
try {
preferences = new FileInputStream(getPreferenceFileName());
} catch (FileNotFoundException e1) {
preferences = BaseDemo.class.getResourceAsStream(IlvMapUtil.getString(BaseDemo.class, "BaseDemo.DefaultLayout")); //$NON-NLS-1$
} catch (AccessControlException e) {
// applet
preferences = BaseDemo.class.getResourceAsStream(IlvMapUtil.getString(BaseDemo.class, "BaseDemo.DefaultLayout")); //$NON-NLS-1$
}
try {
try {
bundle.load(preferences);
} finally {
preferences.close();
}
for (int i = 0; i < views.length; i++) {
String paneName = bundle.getProperty(views[i].getName());
AdvancedTabbedPane pane = getTabbedPane(paneName);
if (pane == null && views[i].getParent() == null) {
pane = getAdditionalViewsPanel();
}
if (pane != null) {
pane.addView(IlvMapUtil.getString(BaseDemo.class, views[i].getName()), views[i], false);
}
}
setupRecentFileMenu();
String s = null;
try {
s = System.getProperty("BaseDemo.SimplifiedDefaultMap"); //$NON-NLS-1$
} catch (SecurityException e) {
// s == null;
}
if (s != null)
useSimplifiedDefaultMap = (Boolean.valueOf(s) == Boolean.TRUE);
else {
String last = bundle.getProperty("BaseDemo.SimplifiedDefaultMap"); //$NON-NLS-1$
if (last != null)
useSimplifiedDefaultMap = (Boolean.valueOf(last) == Boolean.TRUE);
}
loadAddditionalPreferences(bundle);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Returns the tabbed pane with the name passed.
*
* @param paneName
* name of the tabbed pane.
* @return a tabbed pane or null.
*/
protected AdvancedTabbedPane getTabbedPane(String paneName) {
return (AdvancedTabbedPane) panes.get(paneName);
}
private void createBeans() {
/** Map view */
IlvGrapher manager = new IlvGrapher(0/* , Integer.MAX_VALUE */);
manager.addNamedPropertyListener(getModificationListener());
if (splashWindow != null) {
splashWindow.showMessage(IlvMapUtil.getString(BaseDemo.class, "BaseDemo.SplashInitJViews")); //$NON-NLS-1$
}
// if (IlvManagerView.class == null) {
// do nothing, just for initializing the class. It can take some time so
// we change the message.
// }
if (splashWindow != null) {
splashWindow.showMessage(IlvMapUtil.getString(BaseDemo.class, "BaseDemo.SplashCreatingView")); //$NON-NLS-1$
}
view = new IlvManagerView(manager, null) {
Override
public void paint(Graphics g) {
super.paint(g);
fps++;// count frames per second.
}
};
// view.setRepaintSkipThreshold(100);
/** Map Overview */
overview = new IlvJOverview();
/** Map Toolbar */
toolbar = new IlvJMapsManagerViewControlBar();
/** Coordinate viewer */
coordViewer = new IlvJMouseCoordinateViewer();
/** Scale control panel */
scaleControl = new IlvJMapScaleControl();
/** Graphic scale visualizer */
graphicScale = new IlvJAutomaticScaleBar();
compass = new IlvJCompass() {
Override
public void paint(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
Object k = g2d.getRenderingHint(RenderingHints.KEY_ANTIALIASING);
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
super.paint(g);
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, k);
}
};
compass.setCartographicNeedleStyle(IlvCompass.NEEDLE_STYLE_COMPASS_ROSE);
compass.setGeographicNeedleStyle(IlvCompass.NEEDLE_STYLE_COMPASS);
compass.setDecorationBackground(null);
/** Layer Tree Panel */
layerTreePanel = new IlvLayerTreePanel();
ToolTipManager.sharedInstance().registerComponent(layerTreePanel.getLayerTree());
layerTreePanel.getStylePropertySheet().addTargetPropertyChangeListener(getModificationListener());
/** Data Source List */
dataSourcePanel = new IlvDataSourcePanel();
dataSourcePanel.setLayerTree(layerTreePanel.getLayerTree());
/** Advanced zooming slider */
zoomer = new IlvJAdvancedZoomControl();
/**
* IlvMapManager list: do not create it unless user needs it: it consumes
* lots of CPU when layers are changed
*/
managerLayersPanel = new JPanel(new BorderLayout());
JButton showLayers = new JButton(IlvMapUtil.getString(BaseDemo.class, "BaseDemo.ShowLayers")); //$NON-NLS-1$
showLayers.addActionListener(new ActionListener() {
Override
public void actionPerformed(ActionEvent e) {
_managerLayersLegend = new IlvJMapLegend();
_managerLayersLegend.setLayerGlobalVisibilityMode(true);
_managerLayersLegend.setView(view);
managerLayersPanel.removeAll();
managerLayersPanel.add(_managerLayersLegend, BorderLayout.CENTER);
managerLayersPanel.invalidate();
managerLayersPanel.validate();
}
});
managerLayersPanel.add(showLayers, BorderLayout.CENTER);
/** New Legend */
mapLayersLegend = new IlvMapLegendPanel();
/** coordinate system panel */
csMainPanel = new JPanel(new BorderLayout());
/** coordinate system editor */
csPanel = new IlvJCoordinateSystemEditorPanel();
csMainPanel.add(csPanel, BorderLayout.CENTER);
// JV-3495
/** control of re projection */
JPanel delayedReprojectionPanel = new JPanel();
delayedReprojectionPanel
.setBorder(new TitledBorder(IlvMapUtil.getString(BaseDemo.class, "BaseDemo.ReprojectPolicyTitle"))); //$NON-NLS-1$
final JCheckBox toggleAutomatic = new JCheckBox(
IlvMapUtil.getString(BaseDemo.class, "BaseDemo.ReprojectAutoLabel")); //$NON-NLS-1$
toggleAutomatic.setToolTipText(IlvMapUtil.getString(BaseDemo.class, "BaseDemo.ReprojectAutoToolTip")); //$NON-NLS-1$
final JButton buttonNow = new JButton(IlvMapUtil.getString(BaseDemo.class, "BaseDemo.ReprojectNowLabel")); //$NON-NLS-1$
buttonNow.addActionListener(new ActionListener() {
Override
public void actionPerformed(ActionEvent e) {
reprojectNow(csPanel.getCoordinateSystem(), IlvJCoordinateSystemEditorPanel.PROJECTION_CHANGED);
}
});
toggleAutomatic.setToolTipText(IlvMapUtil.getString(BaseDemo.class, "BaseDemo.ReprojectNowTooltip")); //$NON-NLS-1$
toggleAutomatic.addChangeListener(new ChangeListener() {
Override
public void stateChanged(ChangeEvent e) {
autoReprojection = toggleAutomatic.isSelected();
buttonNow.setEnabled(!autoReprojection);
}
});
toggleAutomatic.setSelected(true);
delayedReprojectionPanel.add(toggleAutomatic);
delayedReprojectionPanel.add(buttonNow);
csMainPanel.add(delayedReprojectionPanel, BorderLayout.SOUTH);
/** preference Editor panel */
prefsPanel = new IlvJDisplayPreferencesEditorPanel();
/** Symbol edition panel */
simpleSymbologyPanel = new JPanel(new BorderLayout());
/** Area of interest panel */
areaPanel = new IlvJAreaOfInterestPanel(view, true, true, true);
// // CONTAINERS
// --------------------------------------------------------------------
/** editor tabbed panes */
bottomLeftPanel = new AdvancedTabbedPane();
bottomRightPanel = new AdvancedTabbedPane();
topLeftPanel = new AdvancedTabbedPane();
/** panel containing the status */
statusPanel = new JPanel();
MySpringLayout springLayout = new MySpringLayout();
statusPanel.setLayout(springLayout);
/** view scroll */
viewScroll = new IlvJScrollManagerView(view) {
Override
public String getToolTipText(MouseEvent event) {
Point pt = SwingUtilities.convertPoint(this, event.getPoint(), view);
// Find component located at point pt
IlvGraphic o = view.getManager().getObject(new IlvPoint(pt.x, pt.y), view);
if (o != null) {
IlvFeatureAttributeProperty p = (IlvFeatureAttributeProperty) o.getNamedProperty(IlvAttributeProperty.NAME);
if (p != null) {
IlvStringAttribute att = null;
try {
att = (IlvStringAttribute) p.getValue(IlvMapAnnotationToolBar.EXT_ANNOTATION_PROPERTY_NAME);
} catch (IllegalArgumentException e) {
att = null;
}
if (att != null) {
String v = att.getString();
if (v != null && !"".equals(v) && !"__null__".equals(v)) //$NON-NLS-1$ //$NON-NLS-2$
return getFormatedExtendedText(v);
}
}
return getToolTip(o, pt);
}
return null;
}
};
/** left hand side panel */
leftSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, topLeftPanel, bottomLeftPanel);
leftSplitPane.setOneTouchExpandable(true);
/** right hand side panel */
rightSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, viewScroll, bottomRightPanel);
rightSplitPane.setOneTouchExpandable(true);
new DragDropSupport(this);
}
/**
* Return a HTML formated text when argument contains new lines. This method
* is used when displaying tooltips.
*
* @param s
* The string to format.
* @return The HTML formated string.
*/
String getFormatedExtendedText(String s) {
if (BasicHTML.isHTMLString(s))
return s;
String sp[] = s.split("\n"); //$NON-NLS-1$
if (sp.length <= 1)
return s;
s = "<html> "; //$NON-NLS-1$
for (int i = 0; i < sp.length; i++) {
if (i > 0)
s += " <br> "; //$NON-NLS-1$
s += "\n" + sp[i]; //$NON-NLS-1$
}
s += "\n </html> "; //$NON-NLS-1$
return s;
}
private void showAdditionalTooltips(boolean tipsOn) {
if (tipsOn) {
overview.setToolTipText(wrapToolTipText(IlvMapUtil.getString(BaseDemo.class, "BaseDemo.OverviewTip"))); //$NON-NLS-1$
zoomer.setToolTipText(wrapToolTipText(IlvMapUtil.getString(BaseDemo.class, "BaseDemo.InteractiveZoomTip"))); //$NON-NLS-1$
coordViewer.setToolTipText(wrapToolTipText(IlvMapUtil.getString(BaseDemo.class, "BaseDemo.CoordinateViewerTip"))); //$NON-NLS-1$
graphicScale.setToolTipText(wrapToolTipText(IlvMapUtil.getString(BaseDemo.class, "BaseDemo.ScaleTip"))); //$NON-NLS-1$
compass.setToolTipText(wrapToolTipText(IlvMapUtil.getString(BaseDemo.class, "BaseDemo.CompassTip"))); //$NON-NLS-1$
scaleControl.getScaleField()
.setToolTipText(wrapToolTipText(IlvMapUtil.getString(BaseDemo.class, "BaseDemo.ScaleControlTip"))); //$NON-NLS-1$
tripleBuffered.setToolTipText(wrapToolTipText(IlvMapUtil.getString(BaseDemo.class, "BaseDemo.TripleBufferTip"))); //$NON-NLS-1$
antiAliased.setToolTipText(wrapToolTipText(IlvMapUtil.getString(BaseDemo.class, "BaseDemo.AntiAliasingTip"))); //$NON-NLS-1$
showToolTips.setToolTipText(wrapToolTipText(IlvMapUtil.getString(BaseDemo.class, "BaseDemo.ShowToolTipsTip"))); //$NON-NLS-1$
showGUIToolTips
.setToolTipText(wrapToolTipText(IlvMapUtil.getString(BaseDemo.class, "BaseDemo.ShowGUIToolTipsTip"))); //$NON-NLS-1$
advancedProperties
.setToolTipText(wrapToolTipText(IlvMapUtil.getString(BaseDemo.class, "BaseDemo.AdvancedPropertiesTip"))); //$NON-NLS-1$
optionMenu.setToolTipText(wrapToolTipText(IlvMapUtil.getString(BaseDemo.class, "BaseDemo.OptionsTip"))); //$NON-NLS-1$
fileMenu.setToolTipText(wrapToolTipText(IlvMapUtil.getString(BaseDemo.class, "BaseDemo.FileMenuTip"))); //$NON-NLS-1$
additionalViews
.setToolTipText(wrapToolTipText(IlvMapUtil.getString(BaseDemo.class, "BaseDemo.AdditionalViewsTip"))); //$NON-NLS-1$
selectSystem.setToolTipText(wrapToolTipText(IlvMapUtil.getString(BaseDemo.class, "BaseDemo.SelectSystemTip"))); //$NON-NLS-1$
tilingButton
.setToolTipText(wrapToolTipText(IlvMapUtil.getString(BaseDemo.class, "BaseDemo.ThinClientParametersTip"))); //$NON-NLS-1$
} else {
overview.setToolTipText(null);
zoomer.setToolTipText(null);
coordViewer.setToolTipText(null);
graphicScale.setToolTipText(null);
compass.setToolTipText(null);
scaleControl.getScaleField().setToolTipText(null);
tripleBuffered.setToolTipText(null);
antiAliased.setToolTipText(null);
showToolTips.setToolTipText(null);
showGUIToolTips.setToolTipText(null);
advancedProperties.setToolTipText(null);
optionMenu.setToolTipText(null);
fileMenu.setToolTipText(null);
additionalViews.setToolTipText(null);
selectSystem.setToolTipText(null);
}
}
private IlvMapPrintingController controller;
private IlvPrintAreaInteractor printAreaInteractor;
/**
* @return the printing controller
*/
public IlvMapPrintingController getPrintingController() {
if (controller == null) {
// Creates the printing controller
controller = new IlvMapPrintingController(view);
// final IlvManagerPrintingController controller = new
// IlvManagerPrintingController(view);
// Initializes the document with some parameters.
final IlvPrintableDocument document = controller.getDocument();
document.setName(IlvMapUtil.getString(BaseDemo.class, "BaseDemo.PrintDocumentName")); //$NON-NLS-1$
// JV-1782
document.setAuthor(controller.getPrinterJob().getUserName());
// JV-1783
document.setPageFormat(controller.getDefaultPageFormat());
}
return controller;
}
private Component getTopComponent() {
Container parent = BaseDemo.this;
while ((parent = parent.getParent()) != null) {
if (parent instanceof Frame)
return parent;
}
return null;
}
/**
* Listens to the contents of the attached manager and invalidates the triple
* buffer if it is necessary. It is not the most efficient way to invalidate
* the triple buffer. It does not work all the time, do not know why yet. Need
* more time to investigate.
*/
private ManagerContentChangedListener managerContentListener = new ManagerContentChangedListener() {
Override
public void contentsChanged(ManagerContentChangedEvent evt) {
if (!evt.isAdjusting()) {
view.invalidateTripleBuffer(false);
overview.getOverviewView().invalidateTripleBuffer(false);
}
}
};
/**
* Creates a Base Frame to display maps.
*/
public BaseDemo() {
super();
// Make sure the swing construction is called in Swing event thread.
ilog.views.util.swing.IlvSwingUtil.invokeAndWait(new Runnable() {
Override
public void run() {
createBeans();
setJMenuBar(new JMenuBar());
IlvUtil.SetDeltaLine(10);// increase the selection margin on lines.
new IlvMapPanInteractor().setView(view);
view.setSize(new Dimension(900, 450));
view.setKeepingAspectRatio(true);
// view.setOptimizedTranslation(false);
view.setBackground(new Color(80, 180, 240));
view.setAntialiasing(false);
// IlvToolTipManager.registerView(view);
overview.setBackground(view.getBackground());
overview.setDrawingStyle(IlvManagerMagViewInteractor.Wire);
overview.setResizingAllowed(true);
overview.setSize(200, 100);
overview.setPreferredSize(overview.getSize());
overview.setMinimumSize(overview.getSize());
overview.setView(view);
overview.getOverviewView().setRepaintSkipThreshold(500);
overview.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED));
csPanel.addCoordinateSystemChangeListener(BaseDemo.this);
csPanel.setAdvancedPanelsVisible(false);
// prefPanel = new JPanel(new BorderLayout());
// prefsPanel.setBorder(BorderFactory.createTitledBorder(IlvMapUtil.getString(BaseDemo.class,
// "BaseDemo.Preferences"))); //$NON-NLS-1$
// prefPanel.add(prefsPanel, BorderLayout.SOUTH);
// prefPanel.add(csPanel, BorderLayout.NORTH);
prefsPanel.addDisplayPreferencesChangeListener(prefChangeListener);
view.getManager().setNamedProperty(new IlvCoordinateSystemProperty(IlvGeographicCoordinateSystem.WGS84));
IlvMapScaleLimiter limiter = new IlvMapScaleLimiter(1, (1 / 1E9));
limiter.setView(view);
layerTreePanel.setView(view);
// listen to layer selection
layerTreePanel.getLayerTree().addTreeSelectionListener(new TreeSelectionListener() {
Override
public void valueChanged(TreeSelectionEvent e) {
zoomToLayer.setEnabled(e.getNewLeadSelectionPath() != null);
miZoomToLayer.setEnabled(e.getNewLeadSelectionPath() != null);
}
});
// listen to object selection
view.getManager().addManagerSelectionListener(new ManagerSelectionListener() {
Override
public void selectionChanged(ManagerSelectionChangedEvent event) {
// JV-1830
if (!event.isAdjusting() || event.isAdjustmentEnd()) {
miZoomToObject.setEnabled(event.getManager().getSelectedObjectsCount() != 0);
miRemoveObject.setEnabled(event.getManager().getSelectedObjectsCount() != 0);
miCenterOnObject.setEnabled(event.getManager().getSelectedObjectsCount() != 0);
}
}
});
layerTree = layerTreePanel.getLayerTree();
mapLayersLegend.setView(view);
dataSourcePanel.setManager(view.getManager());
zoomer.setOrientation(SwingConstants.VERTICAL);
zoomer.setView(view);
zoomer.setZoomDelay(10);
zoomer.setPreferredSize(new Dimension(zoomer.getPreferredSize().width, 100));
coordViewer.setHtmlTableProperties("border=1 cellpadding=0 cellspacing=0 "); //$NON-NLS-1$
coordViewer.setBackground(Color.white);
coordViewer.setOpaque(true);
coordViewer.setFont(new Font("Monospaced", Font.BOLD, 14)); //$NON-NLS-1$
coordViewer.setView(view);
graphicScale.setView(view);
// JV-3360
graphicScale.setScaleComputation(new IlvMapScaleComputation(IlvConstants.BOTTOM, true));
compass.setView(view);
graphicScale.setMarginHeight(0);
scaleControl.setView(view);
statusPanel.add(coordViewer/* , BorderLayout.LINE_START */);
scalePanel = new JPanel(new BorderLayout(2, 0));
scalePanel.add(graphicScale, BorderLayout.CENTER);
scalePanel.add(scaleControl, BorderLayout.LINE_END);
statusPanel.add(scalePanel/* , BorderLayout.CENTER */);
// statusPanel.add(compass);
IlvThreadedActivityMonitor mon = IlvThreadedActivityMonitorProperty
.GetThreadedActivityMonitor(view.getManager());
monitorPanel = new IlvThreadedActivityMonitorPanel(mon);
statusPanel.add(monitorPanel/* , BorderLayout.LINE_END */);
viewScroll.setPreferredSize(view.getSize());
toolbar.setView(view);
tripleBuffered = new MBCheckBoxMenuItem("BaseDemo.TripleBuffer", false); //$NON-NLS-1$
tripleBuffered.addActionListener(new ActionListener() {
Override
public void actionPerformed(ActionEvent e) {
if (tripleBuffered.isSelected()) {
int count = view.getManager().getLayersCount();
view.setTripleBufferedLayerCount(count);
view.invalidateTripleBuffer(true);
// Activates also the triple buffer in the overview:
overview.getOverviewView().setTripleBufferedLayerCount(count);
overview.getOverviewView().invalidateTripleBuffer(true);
view.getManager().addManagerContentChangedListener(managerContentListener);
} else {
view.setTripleBufferedLayerCount(0);
view.repaint();
// Removes also the triple buffer in the overview:
overview.getOverviewView().setTripleBufferedLayerCount(0);
overview.getOverviewView().repaint();
view.getManager().removeManagerContentChangedListener(managerContentListener);
}
}
});
antiAliased = new MBCheckBoxMenuItem("BaseDemo.AntiAliasing", false); //$NON-NLS-1$
antiAliased.addActionListener(new ActionListener() {
Override
public void actionPerformed(ActionEvent e) {
/*
* IlvMapLabelManager labelManager=null; IlvMapLabeler labeler =
* IlvMapLabelerProperty.GetMapLabeler(view.getManager()); if
* (labeler instanceof IlvMapDefaultLabeler) {
* labelManager=((IlvMapDefaultLabeler)labeler).getLabelManager(); }
*/
if (antiAliased.isSelected()) {
view.setAntialiasing(true);
overview.getOverviewView().setAntialiasing(true);
/*
* uncomment this to also force antialias for labels.
* if(labelManager!=null) {
* labelManager.setForceLabelAntialiasing(true); }
*/
} else {
view.setAntialiasing(false);
overview.getOverviewView().setAntialiasing(false);
/*
* uncomment this to also remove antialias for labels.
* if(labelManager!=null) {
* labelManager.setForceLabelAntialiasing(false); }
*/
}
// view.getManager().reDraw();
view.repaint();
overview.repaint();
}
});
showToolTips = new MBCheckBoxMenuItem("BaseDemo.ShowToolTips", false); //$NON-NLS-1$
showToolTips.addActionListener(new ActionListener() {
Override
public void actionPerformed(ActionEvent e) {
if (showToolTips.isSelected()) {
IlvToolTipManager.registerView(view);
} else {
IlvToolTipManager.unregisterView(view);
}
}
});
showGUIToolTips = new MBCheckBoxMenuItem("BaseDemo.ShowGUIToolTips", true); //$NON-NLS-1$
showGUIToolTips.addActionListener(new ActionListener() {
Override
public void actionPerformed(ActionEvent e) {
showAdditionalTooltips(showGUIToolTips.isSelected());
}
});
advancedProperties = new MBCheckBoxMenuItem("BaseDemo.AdvancedProperties", //$NON-NLS-1$
IlvMapStyleBeanInfo.isAdvancedMode());
advancedProperties.addActionListener(new ActionListener() {
Override
public void actionPerformed(ActionEvent e) {
int sel[] = layerTreePanel.getLayerTree().getSelectionRows();
IlvMapStyleBeanInfo.setAdvancedMode(advancedProperties.isSelected());
layerTreePanel.getLayerTree().setSelectionRow(-1);
layerTreePanel.getLayerTree().setSelectionRows(sel);
}
});
exportBtn.addActionListener(new ActionListener() {
Override
public void actionPerformed(ActionEvent e) {
if (exportDialog == null)
exportDialog = makeExportDialog(view);
exportDialog.setVisible(true);
}
});
tilingButton.addActionListener(new ThinClientParametersPanel(view));
printButton.addActionListener(new ActionListener() {
Override
public void actionPerformed(ActionEvent e) {
if (printDialog == null) {
printDialog = new JDialog();
printDialog.getContentPane().add(printPanel);
}
printDialog.pack();
JFrame frame = (JFrame) SwingUtilities.getAncestorOfClass(JFrame.class, BaseDemo.this);
if (frame != null) {
Dimension fSize = frame.getSize();
Point fLoc = frame.getLocation();
Dimension jSize = printDialog.getSize();
int x = (fSize.width - jSize.width) / 2 + fLoc.x;
int y = (fSize.height - jSize.height) / 2 + fLoc.y;
if (x < 0)
x = 0;
if (y < 0)
y = 0;
printDialog.setLocation(x, y);
}
printDialog.setVisible(true);
}
});
/*
* generateTilesButton.addActionListener(new ActionListener() { public
* void actionPerformed(ActionEvent e) { if(generateTiles == null)
* generateTiles = new TileGenerator(view);
* generateTiles.setVisible(true); } });
*/
if (splashWindow != null) {
splashWindow.showMessage(IlvMapUtil.getString(BaseDemo.class, "BaseDemo.SplashCreatingMenus"));//$NON-NLS-1$
}
optionMenu = new JMenu(IlvMapUtil.getString(BaseDemo.class, "BaseDemo.Options")); //$NON-NLS-1$
optionMenu.add(showGUIToolTips);
optionMenu.add(showToolTips);
optionMenu.add(advancedProperties);
optionMenu.add(antiAliased);
optionMenu.add(tripleBuffered);
optionMenu.add(tilingButton);
// optionMenu.add(generateTilesButton);
fileMenu = new JMenu(IlvMapUtil.getString(BaseDemo.class, "BaseDemo.FileMenu")); //$NON-NLS-1$
getJMenuBar().add(fileMenu);
getJMenuBar().add(optionMenu);
optionMenu.setMnemonic('o');
fileMenu.setMnemonic('f');
helpMenu = new JMenu(IlvMapUtil.getString(BaseDemo.class, "BaseDemo.Help.Menu")); //$NON-NLS-1$
about.addActionListener(new ActionListener() {
Override
public void actionPerformed(ActionEvent e) {
String iconFile = IlvMapUtil.getString(BaseDemo.class, "BaseDemo.SplashIconURL"); //$NON-NLS-1$
JFrame f = new JFrame();
final SplashWindow tempSplash = new SplashWindow(f, findURL(iconFile));
f.setBounds(BaseDemo.this.getBounds());
String click = IlvMapUtil.getString(BaseDemo.class, "BaseDemo.About.ClickToClose"); //$NON-NLS-1$
tempSplash.showMessage(click);
tempSplash.addMouseListener(new MouseAdapter() {
Override
public void mouseClicked(MouseEvent evt) {
tempSplash.setVisible(false);
tempSplash.dispose();
}
});
Image i = tempSplash.getImage();
tempSplash.setSize(i.getWidth(null), i.getHeight(null));
placeDialog(tempSplash);
tempSplash.setVisible(true);
}
void placeDialog(Component j) {
Component top = getTopComponent();
if (top == null)
return;
Dimension fSize = top.getSize();
Point fLoc = getTopComponent().getLocation();
Dimension jSize = j.getSize();
int x = (fSize.width - jSize.width) / 2 + fLoc.x;
int y = (fSize.height - jSize.height) / 2 + fLoc.y;
if (x < 0)
x = 0;
if (y < 0)
y = 0;
j.setLocation(x, y);
}
});
helpMenu.add(about);
mapBuilder.addActionListener(new ActionListener() {
Override
public void actionPerformed(ActionEvent e) {
boolean popped = false;
try {
String doc = IlvMapUtil.getString(BaseDemo.class, "BaseDemo.Help.Documentation"); //$NON-NLS-1$
// JV-3825
if (nodefense.App6aDefLess.isAvailable()) {
doc = IlvMapUtil.getString(BaseDemo.class, "BaseDemo.Help.DocumentationDefense"); //$NON-NLS-1$
}
try {
URL url = new URL(doc);
IlvPopUserBrowser.pop(url);
popped = true;
} catch (MalformedURLException e1) {
File f = new File(doc);
boolean exists;
try {
exists = f.exists();
if (exists) {
IlvPopUserBrowser.pop(f);
popped = true;
}
} catch (SecurityException e2) {
//
}
}
} catch (Exception e1) {
e1.printStackTrace();
}
if (!popped) {
String msg = IlvMapUtil.getString(BaseDemo.class, "BaseDemo.Help.DocumentationNotFound"); //$NON-NLS-1$
JLabel label = new JLabel(msg);
String title = IlvMapUtil.getString(BaseDemo.class, "BaseDemo.Help.DocumentationNotFoundTitle"); //$NON-NLS-1$
JOptionPane.showMessageDialog(getView(), label, title, JOptionPane.ERROR_MESSAGE);
}
}
});
helpMenu.add(mapBuilder);
getJMenuBar().add(helpMenu);
additionalViews = new MBMenuItem("BaseDemo.AdditionalViews", true); //$NON-NLS-1$
additionalViews.addActionListener(new ActionListener() {
void placeDialog(JDialog j, Frame frame) {
Dimension fSize = frame.getSize();
Point fLoc = frame.getLocation();
Dimension jSize = j.getSize();
int x = (fSize.width - jSize.width) / 2 + fLoc.x;
int y = (fSize.height - jSize.height) / 2 + fLoc.y;
if (x < 0)
x = 0;
if (y < 0)
y = 0;
j.setLocation(x, y);
}
Override
public void actionPerformed(ActionEvent e) {
if (additionalViewDialog == null) {
Component c = getTopComponent();
Frame frame = null;
if (c instanceof Frame)
frame = (Frame) c;
additionalViewDialog = new JDialog(frame);
additionalViewDialog.setTitle(IlvMapUtil.getString(BaseDemo.class, "BaseDemo.AdditionalViewsTitle")); //$NON-NLS-1$
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
// JV-4674
panel.setToolTipText(IlvMapUtil.getString(BaseDemo.class, "BaseDemo.AdditionalViewsLabel"));//$NON-NLS-1$
panel.add(getAdditionalViewsPanel(), BorderLayout.CENTER);
JPanel buttons = new JPanel();
JButton b = new JButton(IlvMapUtil.getString(BaseDemo.class, "BaseDemo.CloseAdditionalViewDialog")); //$NON-NLS-1$
b.addActionListener(new ActionListener() {
Override
public void actionPerformed(ActionEvent evt) {
additionalViewDialog.setVisible(false);
}
});
buttons.add(b);
panel.add(buttons, BorderLayout.SOUTH);
additionalViewDialog.getContentPane().add(panel);
additionalViewDialog.pack();
additionalViewDialog.setSize(600, 400);
placeDialog(additionalViewDialog, frame);
}
additionalViewDialog.setVisible(true);
}
});
selectSystem = new MBMenuItem("BaseDemo.SelectSystem", true); //$NON-NLS-1$
selectSystem.addActionListener(new ActionListener() {
Override
public void actionPerformed(ActionEvent e) {
if (csdialog == null) {
csdialog = new CoordinateSystemDictionaryManager();
}
csdialog.setVisible(true);
IlvCoordinateSystem cs = csdialog.getSelectedCoordinateSystem();
if (cs != null) {
boolean oldAuto = autoReprojection;
autoReprojection = true;// force projection in this case
csPanel.setCoordinateSystem(cs);
autoReprojection = oldAuto;
}
}
});
optionMenu.add(selectSystem);
optionMenu.add(additionalViews);
printPanel = makePrintPanel();
continuousZoomer = new IlvContinuousZoomInteractor();
continuousZoomer.setPermanent(true);
zoomConfigPanel = makeZoomConfigPanel();
zoomConfigPanel.addPropertyChangeListener(new PropertyChangeListener() {
Override
public void propertyChange(PropertyChangeEvent evt) {
String p = evt.getPropertyName();
if (p == ZoomConfigurationPanel.ZOOM_FACTOR) {
double f = ((Double) evt.getNewValue()).doubleValue();
zoomer.setMaxZoomingRatio(f);
continuousZoomer.setContinuousZoomFactor(f);
} else if (p == ZoomConfigurationPanel.PERIOD) {
int period = ((Integer) evt.getNewValue()).intValue();
zoomer.setZoomDelay(period);
continuousZoomer.setPeriod(period);
}
}
});
zoomConfigPanel.setPeriod(zoomer.getZoomDelay());
zoomConfigPanel.setContinuousZoomFactor(zoomer.getMaxZoomingRatio());
viewPopupMenu.add(miSelectObject);
viewPopupMenu.add(miEditDataObject);
viewPopupMenu.add(miRemoveObject);
miRemoveObject.setEnabled(false);
viewPopupMenu.add(new JSeparator());
ActionListener zoomToLayerListener = new ActionListener() {
Override
public void actionPerformed(ActionEvent e) {
IlvManagerView.FitAreaCalculator f = new IlvManagerView.FitAreaCalculator() {
Override
public IlvRect getAreaToFit(IlvManagerView fittedView) {
IlvMapLayer ml = layerTreePanel.getSelectedLayer();
List<IlvManagerLayer> v = Arrays.asList(ml.getManagerLayers());
IlvRect bounds = null;
for (int i = 0; i < v.size(); i++) {
IlvManagerLayer l = (IlvManagerLayer) v.get(i);
IlvRect obounds = l.computeBBox(fittedView.getTransformer());
if (obounds != null && !obounds.isEmpty()) // computeBBox
// returns
// new IlvRect() if
// not
// visible => point
// 0,
// 0, always
// included
if (bounds == null) {
bounds = obounds;
} else {
bounds.add(obounds);
}
}
return bounds == null ? new IlvRect() : bounds;
}
};
view.fitTransformerToArea(new Insets(0, 0, 0, 0), f, 4);
viewScroll.adjustScrollBars();
view.repaint();
}
};
toolbar.add(zoomToLayer);
zoomToLayer.setEnabled(false);
zoomToLayer.addActionListener(zoomToLayerListener);
viewPopupMenu.add(miZoomToLayer);
miZoomToLayer.setEnabled(false);
miZoomToLayer.addActionListener(zoomToLayerListener);
miSelectObject.addActionListener(new ActionListener() {
Override
public void actionPerformed(ActionEvent e) {
// get the object under mouse
IlvGraphic obj = view.getManager().getObject(new IlvPoint(lastPopupLocation.x, lastPopupLocation.y), view);
// select it
if (obj != null) {
view.getManager().deSelectAll(false);
view.getManager().setSelected(obj, true, true);
}
}
});
miEditDataObject.addActionListener(new ActionListener() {
Override
public void actionPerformed(ActionEvent e) {
// get the object under mouse
IlvGraphic obj = view.getManager().getObject(new IlvPoint(lastPopupLocation.x, lastPopupLocation.y), view);
// select it
if (obj != null) {
IlvNamedProperty p = obj.getNamedProperty(IlvAttributeProperty.NAME);
if (p != null) {
IlvAttributeProperty copy = (IlvAttributeProperty) p.copy();
JTable table = new JTable(new TableAttributeModel(copy));
int ans = JOptionPane.showConfirmDialog(view, new JScrollPane(table),
IlvMapUtil.getString(BaseDemo.class, "BaseDemo.EditObjectDataTitle"), //$NON-NLS-1$
JOptionPane.OK_CANCEL_OPTION);
if (ans == JOptionPane.OK_OPTION) {
obj.setNamedProperty(copy);
IlvMapLayer ml = IlvMapLayer.get(obj);
if (ml != null) {
IlvMapDataSource ds = findDataSource(ml);
if (ds instanceof IlvGraphicLayerDataSource) {
setModified(true);
} else if (ds != null) {
ds.setForceUsingBackupDataSource(true);
ds.setSaveBackupDataSources(true);
setModified(true);
}
}
}
} else {
// JV-3840
if (engine != null) {
Object node = engine.getObject(obj);
if (node != null) {// is that a symbol ?
if (symbologyManager != null) {
// edit it (it is already selected)
symbologyManager.getSymbologyTreePanel().performEdit();
}
}
}
}
}
}
});
miRemoveObject.addActionListener(new ActionListener() {
Override
public void actionPerformed(ActionEvent e) {
IlvGraphicEnumeration en = view.getManager().getSelectedObjects();
if (en.hasMoreElements()) {
int ans = JOptionPane.showConfirmDialog(view,
IlvMapUtil.getString(BaseDemo.class, "BaseDemo.RemoveObjectMessage"), //$NON-NLS-1$
IlvMapUtil.getString(BaseDemo.class, "BaseDemo.RemoveObjectTitle"), //$NON-NLS-1$
JOptionPane.OK_CANCEL_OPTION);
if (ans == JOptionPane.OK_OPTION) {
if (removeSelection(view.getManager())) {
setModified(true);
}
}
}
}
});
ActionListener zoomToObjectListener = new ActionListener() {
Override
public void actionPerformed(ActionEvent e) {
IlvManagerView.FitAreaCalculator f = new IlvManagerView.FitAreaCalculator() {
Override
public IlvRect getAreaToFit(IlvManagerView fittedView) {
IlvRect bounds = null;
IlvGraphicEnumeration en = view.getManager().getSelectedObjects();
if (en != null) {
while (en.hasMoreElements()) {
IlvGraphic g = en.nextElement();
IlvRect obounds = g.boundingBox(fittedView.getTransformer());
if (bounds == null) {
bounds = obounds;
} else {
bounds.add(obounds);
}
}
}
return bounds;
}
};
view.fitTransformerToArea(new Insets(0, 0, 0, 0), f, 4);
viewScroll.adjustScrollBars();
view.repaint();
}
};
ActionListener centerOnObjectListener = new ActionListener() {
Override
public void actionPerformed(ActionEvent e) {
IlvRect bounds = null;
IlvGraphicEnumeration en = view.getManager().getSelectedObjects();
if (en != null) {
while (en.hasMoreElements()) {
IlvGraphic g = en.nextElement();
IlvRect obounds = g.boundingBox();
if (bounds == null) {
bounds = obounds;
} else {
bounds.add(obounds);
}
}
}
if (bounds != null) {
IlvPoint c = new IlvPoint(bounds.getCenterX(), bounds.getCenterY());
IlvTransformer t = view.getTransformer();
t.apply(c);
t.translate(view.getWidth() / 2 - c.x, view.getHeight() / 2 - c.y);
view.setTransformer(t);
// JV-1830
viewScroll.adjustScrollBars();
view.repaint();
}
}
};
viewPopupMenu.add(miCenterOnObject);
miCenterOnObject.setEnabled(false);
miCenterOnObject.addActionListener(centerOnObjectListener);
viewPopupMenu.add(miZoomToObject);
miZoomToObject.setEnabled(false);
miZoomToObject.addActionListener(zoomToObjectListener);
viewPopupMenu.add(new JSeparator());
viewPopupMenu.add(miCancel);
seeThrough = new IlvSeeThroughInteractor();
seeThrough.setPermanent(true);
MBToggleButton seeThroughButton = installInteractorButton("BaseDemo.SeeThroughInteractor", seeThrough, -1); //$NON-NLS-1$
addConfigurationPanel(seeThroughButton, IlvMapUtil.getString(BaseDemo.class, "BaseDemo.SeeThroughConfig"), //$NON-NLS-1$
new IlvSeeThroughConfigurationPanel(getView().getManager(), seeThrough), seeThrough);
centerInteractorBtn = installInteractorButton("BaseDemo.CenterInteractor", new CenterInteractor(csPanel), -1); //$NON-NLS-1$
centerInteractorBtn.setEnabled(false);
JComboBox<?> projList = csPanel.getProjectionList();
Container projListContainer = projList.getParent();
GridBagConstraints c = new GridBagConstraints();
c.gridy = 1;
c.gridwidth = GridBagConstraints.REMAINDER;
projListContainer.add(centerInteractorBtn, c);
toolbar.add(new JLabel(" - ")); //$NON-NLS-1$
installInteractorButton("BaseDemo.MeasureInteractor", new IlvMakeMeasureInteractor(), -1); //$NON-NLS-1$
installInteractorButton("BaseDemo.SymbolMagnifyInteractor", InteractorsDefLess.newIlvMagnifySymbolsInteractor(), //$NON-NLS-1$
-1);
toolbar.add(new JLabel(" - ")); //$NON-NLS-1$
// new IlvMakeLineOfVisibilityInteractor(bottomRightPanel));
final IlvManagerViewInteractor lineOfVisibilityInter = InteractorsDefLess
.newIlvMakeLineOfVisibilityInteractor(bottomRightPanel);
MBToggleButton lovButton = installInteractorButton("BaseDemo.LineOfVisibilityInteractor", //$NON-NLS-1$
lineOfVisibilityInter, -1);
if (lineOfVisibilityInter != null)
new SelectObjectAndSetSelectInteractor((IlvMakePolyPointsInteractor) lineOfVisibilityInter);
MBToggleButton gradButton = installInteractorButton("BaseDemo.GradientInteractor", //$NON-NLS-1$
InteractorsDefLess.newIlvMakeGradientInteractor(), -1);
MBToggleButton valleyButton = installInteractorButton("BaseDemo.ValleyInteractor", //$NON-NLS-1$
InteractorsDefLess.newIlvMakeValleyInteractor(), -1);
MBToggleButton lakeButton = installInteractorButton("BaseDemo.LakeInteractor", //$NON-NLS-1$
InteractorsDefLess.newIlvMakeAreaOfSightInteractor(), -1);
IlvManagerViewInteractor terrainCutInter = InteractorsDefLess.newIlvMakeTerrainCutInteractor(bottomRightPanel);
JToggleButton terrainCutButton = installInteractorButton("BaseDemo.TerrainCutInteractor", //$NON-NLS-1$
terrainCutInter, -1);
if (terrainCutInter != null)
new SelectObjectAndSetSelectInteractor((IlvMakePolyPointsInteractor) terrainCutInter);
JToggleButton v3dButton = installInteractorButton("BaseDemo.3DViewInteractor", //$NON-NLS-1$
InteractorsDefLess.newIlvMake3DViewInteractor(bottomRightPanel), -1);
InteractorsDefLess.RegisterAccessoryComponent(bottomRightPanel, view.getManager());
JToggleButton ftButton = installInteractorButton("BaseDemo.3DFlyThroughInteractor", //$NON-NLS-1$
InteractorsDefLess.newIlvMake3DFlyThroughInteractor(), -1);
listenForTerrainData(new JToggleButton[] { lovButton, gradButton, valleyButton, lakeButton, terrainCutButton,
v3dButton, ftButton });
setupPopupMenu();
// Add a popup menu to split layers
new SourceSplitter(layerTreePanel.getLayerTree());
// Add a popup menu to simplify layers
new SourceSimplifier(layerTreePanel.getLayerTree());
// JV-4998 - customer wish
// Add a popup menu to reload layers
new SourceReloader(layerTreePanel.getLayerTree());
new AttributeStyler(layerTreePanel.getLayerTree());
toolbar.add(new JLabel(" - ")); //$NON-NLS-1$
annotations = new IlvMapAnnotationToolBar();
annotations.setView(getView());
annotations.setGrapherMode(true);
// place all annotation toolbar buttons in the regular toolbar (to
// prevent
// embedded toolbar offset)
Component btns[] = annotations.getComponents();
for (int i = 0; i < btns.length; i++) {
toolbar.add(btns[i]);
}
// setup advanced panel
advancedPanel = new JPanel(new GridLayout(0, 1));
final JCheckBox repaintSkipped = new JCheckBox(IlvMapUtil.getString(BaseDemo.class, "BaseDemo.RepaintSkipped"), //$NON-NLS-1$
true);
repaintSkipped.addActionListener(new ActionListener() {
Override
public void actionPerformed(ActionEvent e) {
if (repaintSkipped.isSelected()) {
overview.getOverviewView().setRepaintSkipThreshold(500);
} else {
overview.getOverviewView().setRepaintSkipThreshold(0);
}
}
});
advancedPanel.add(repaintSkipped);
TileCacheManager tcm = new TileCacheManager(view.getManager());
JPanel p1 = new JPanel(new BorderLayout());
p1.add(tcm.getPolicyChoiceCombo(), BorderLayout.CENTER);
p1.add(tcm.getTileCacheCountSpinner(), BorderLayout.LINE_END);
advancedPanel.add(p1);
TileDebugManager tdm = makeTileDebugManager(view);
if (tdm != null)
advancedPanel.add(tdm.getDebugCheckbox());
GCManager gcManager = new GCManager();
advancedPanel.add(gcManager.getActivationCheckBox());
advancedPanel.add(gcManager.getMemoryInformationLabel());
/* allow to change the component orientation */
final ComponentOrientation vdirections[] = { ComponentOrientation.UNKNOWN, ComponentOrientation.LEFT_TO_RIGHT,
ComponentOrientation.RIGHT_TO_LEFT };
String sdirections[] = { IlvMapUtil.getString(BaseDemo.class, "BaseDemo.ComponentOrientationUnknown"), //$NON-NLS-1$
IlvMapUtil.getString(BaseDemo.class, "BaseDemo.ComponentOrientationLTR"), //$NON-NLS-1$
IlvMapUtil.getString(BaseDemo.class, "BaseDemo.ComponentOrientationRTL")//$NON-NLS-1$
};
JLabel labeldir = new JLabel(IlvMapUtil.getString(BaseDemo.class, "BaseDemo.ComponentOrientation"));//$NON-NLS-1$
final JComboBox<String> combodir = new JComboBox<String>(sdirections);
combodir.addActionListener(new ActionListener() {
Override
public void actionPerformed(ActionEvent e) {
int ico = combodir.getSelectedIndex();
IlvSwingUtil.updateComponentTreeOrientation(BaseDemo.this, vdirections[ico]);
}
});
JPanel p2 = new JPanel(new BorderLayout());
p2.add(labeldir, BorderLayout.CENTER);
p2.add(combodir, BorderLayout.LINE_END);
advancedPanel.add(p2);
/*
* uncomment this if you want to add a performance bench for your map:
* it displays the view 200 times and displays the time necessary. final
* JButton bench=new JButton("Bench"); bench.addActionListener(new
* ActionListener() {
*
* public void actionPerformed(ActionEvent e) { long
* t0=System.currentTimeMillis(); for (int i = 0; i < 200; i++) {
* Graphics g=view.getGraphics(); g.setClip(null);
* view.paint(view.getGraphics()); }
* bench.setText("Bench "+(System.currentTimeMillis()-t0)); } });
*
* advancedPanel.add(bench);
*/
final JLabel fpsLabel = new JLabel();
Timer tfps = new Timer(1000, new ActionListener() {
long lastTime;
Override
public void actionPerformed(ActionEvent e) {
if (lastTime != 0) {
long time = System.currentTimeMillis();
double dt = (time - lastTime) / 1000.0;
double realFPS = fps / dt;
fpsLabel.setText((int) realFPS + IlvMapUtil.getString(BaseDemo.class, "BaseDemo.FPS")); //$NON-NLS-1$
}
lastTime = System.currentTimeMillis();
fps = 0;
}
});
tfps.start();
advancedPanel.add(fpsLabel, BorderLayout.NORTH);
saveAsBtn.addActionListener(new IvlFileManager.SaveIvlActionListener(BaseDemo.this, false));
saveBtn.addActionListener(new IvlFileManager.SaveIvlActionListener(BaseDemo.this, true));
saveBtn.setEnabled(false);
loadBtn.addActionListener(new IvlFileManager.LoadIvlActionListener(BaseDemo.this));
clearBtn.addActionListener(new IvlFileManager.ClearManagerActionListener(BaseDemo.this, view));
exitBtn.addActionListener(new ActionListener() {
Override
public void actionPerformed(ActionEvent e) {
exitApplication();
}
});
fileMenu.add(clearBtn);
fileMenu.add(loadBtn);
fileMenu.add(saveBtn);
fileMenu.add(saveAsBtn);
fileMenu.add(exportBtn);
// fileMenu.add(printButton);
fileMenu.add(new JSeparator());
fileMenu.add(lastFilesMenu);
fileMenu.add(new JSeparator());
fileMenu.add(exitBtn);
JPanel pPanel = new JPanel();
pPanel.add(advancedPanel, BorderLayout.NORTH);
advancedPanel = pPanel;
gridPanel = new JPanel(new GridLayout(0, 1));
gridManager = new GridManager(view);
gridPanel.add(gridManager.getGridChoice());
gridPanel.add(gridManager.getDelayedCheckBox());
pPanel = new JPanel();
pPanel.add(gridPanel, BorderLayout.LINE_START);
gridPanel = pPanel;
toolbar.setOrientation(SwingConstants.HORIZONTAL);
toolbar.setFloatable(false);
overviewAndZoomPanel = new JPanel(new BorderLayout());
overviewAndZoomPanel.add(overview, BorderLayout.CENTER);
overviewAndZoomPanel.add(zoomer, BorderLayout.LINE_END);
leftSplitPane.setResizeWeight(0);
view.setWheelZoomingEnabled(true);
viewScroll.setWheelScrollingEnabled(true);
rightSplitPane.setResizeWeight(1);
if (splashWindow != null) {
splashWindow.showMessage(IlvMapUtil.getString(BaseDemo.class, "BaseDemo.SplashBuildingViews"));//$NON-NLS-1$
}
initViews();
loadPreferences();
pPanel = new JPanel(new BorderLayout());
pPanel.add(toolbar, BorderLayout.NORTH);
pPanel.add(rightSplitPane, BorderLayout.CENTER);
mainSplit = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, leftSplitPane, pPanel);
mainSplit.setOneTouchExpandable(true);
getContentPane().add(mainSplit, BorderLayout.CENTER);
coordViewer.addPropertyChangeListener(new PropertyChangeListener() {
Override
public void propertyChange(PropertyChangeEvent evt) {
if ("text".equals(evt.getPropertyName())) { //$NON-NLS-1$
Dimension p = coordViewer.getPreferredSize();
Dimension m = coordViewer.getMaximumSize();
if (p.width != m.width) {
coordViewer.setMaximumSize(p);
coordViewer.getParent().invalidate();
}
}
}
});
monitorPanel.setMaximumSize(monitorPanel.getPreferredSize());
coordViewer.setMaximumSize(coordViewer.getPreferredSize());
SpringLayout layout = (SpringLayout) statusPanel.getLayout();
layout.putConstraint(SpringLayout.WEST, coordViewer, 0, SpringLayout.WEST, statusPanel);
layout.putConstraint(SpringLayout.NORTH, coordViewer, 0, SpringLayout.NORTH, statusPanel);
layout.putConstraint(SpringLayout.WEST, scalePanel, 2, SpringLayout.EAST, coordViewer);
layout.putConstraint(SpringLayout.NORTH, scalePanel, 2, SpringLayout.NORTH, statusPanel);
// layout.putConstraint(SpringLayout.WEST, compass, 2,
// SpringLayout.EAST,
// scalePanel);
// layout.putConstraint(SpringLayout.NORTH, compass, 2,
// SpringLayout.NORTH,
// statusPanel);
// layout.putConstraint(SpringLayout.WEST, monitorPanel, 2,
// SpringLayout.EAST, compass);
// layout.putConstraint(SpringLayout.NORTH, monitorPanel, 2,
// SpringLayout.NORTH, compass);
layout.putConstraint(SpringLayout.WEST, monitorPanel, 2, SpringLayout.EAST, scalePanel);
layout.putConstraint(SpringLayout.NORTH, monitorPanel, 2, SpringLayout.NORTH, statusPanel);
layout.putConstraint(SpringLayout.EAST, statusPanel, 2, SpringLayout.EAST, monitorPanel);
layout.putConstraint(SpringLayout.SOUTH, statusPanel, 2, SpringLayout.SOUTH, monitorPanel);
getContentPane().add(statusPanel, BorderLayout.SOUTH);
symbologyManager = new SymbologyManager(view, getSymbolStyleSheetURL());
JPanel symbologyView = symbologyManager.getSymbologyTreePanel();
if (symbologyView != null) {
simpleSymbologyPanel.add(symbologyView);
} else {
if (simpleSymbologyPanel.getParent() != null) {
simpleSymbologyPanel.getParent().remove(simpleSymbologyPanel);
}
}
engine = symbologyManager.getEngine();
view.getManager().setSelectionFactory(new IlvMapSelectionFactory());
view.addKeyListener(new PopInteractorKeyListener());
showAdditionalTooltips(true);
}
void addConfigurationPanel(final MBToggleButton button, final String title, final JPanel panel,
final IlvManagerViewInteractor inter) {
final int smallSize = 9;
final JButton smallButton = new JButton() {
Override
public void paint(Graphics g) {
super.paint(g);
g.drawLine(smallSize / 2, 2, smallSize / 2, smallSize - 3);
g.drawLine(2, smallSize / 2, smallSize - 3, smallSize / 2);
}
Override
public Color getBackground() {
Color c = super.getBackground();
if (c == null)
return c;
Color ret = new Color(c.getRed(), c.getGreen(), c.getBlue(), 100);
return ret;
}
};
Dimension small = new Dimension(smallSize, smallSize);
smallButton.setSize(small);
button.add(smallButton);
button.setLayout(new OverlayLayout(button) {
Dimension buttonDim = new Dimension(26, 26);
Override
public void layoutContainer(Container target) {
smallButton.setLocation(target.getWidth() - smallSize - 1, target.getHeight() - smallSize - 1);
}
Override
public Dimension maximumLayoutSize(Container target) {
return buttonDim;
}
Override
public Dimension minimumLayoutSize(Container target) {
return buttonDim;
}
Override
public Dimension preferredLayoutSize(Container target) {
return buttonDim;
}
});
smallButton.addActionListener(new ActionListener() {
Override
public void actionPerformed(ActionEvent e) {
JOptionPane pane = new JOptionPane();
pane.setMessage(panel);
JDialog dialog = pane.createDialog(getView(), title);
dialog.setResizable(true);
if (panel instanceof IlvSeeThroughConfigurationPanel) // TODO
((IlvSeeThroughConfigurationPanel) panel).update();
Point p = new Point();
SwingUtilities.convertPointToScreen(p, smallButton);
dialog.setLocation(p);
dialog.setVisible(true);
Object selectedValue = pane.getValue();
if (selectedValue == null)
return;
if (selectedValue instanceof Integer) {
int i = ((Integer) selectedValue).intValue();
if (i == JOptionPane.OK_OPTION)
getView().setInteractor(inter);
}
}
});
}
});// event thread runnable
}
/**
* Sets up a listener to show the popup menu.
*/
protected void setupPopupMenu() {
view.addMouseListener(new MouseAdapter() {
Override
public void mousePressed(MouseEvent e) {
showMenu(e);
}
Override
public void mouseReleased(MouseEvent e) {
showMenu(e);
}
private void showMenu(MouseEvent e) {
if (e.isPopupTrigger()) {
lastPopupLocation.setLocation(e.getX(), e.getY());
SwingUtilities.invokeLater(new Runnable() {
Override
public void run() {
if (view.getInteractor() instanceof IlvManagerViewRotateInteractor) {
return;// right click should cancel rotation only.
}
IlvGraphic obj = view.getManager().getObject(new IlvPoint(lastPopupLocation.x, lastPopupLocation.y),
view);
if (obj != null) {
if (obj.getPopupMenu() == null && obj.getPopupMenuName() == null) {
miSelectObject.setEnabled(obj.isSelectable() && !view.getManager().isSelected(obj));
viewPopupMenu.show(view, (int) lastPopupLocation.getX(), (int) lastPopupLocation.getY());
}
}
}
});
}
}
});
}
/**
* Returns the URL of a CSS stylesheet used to display APP6 symbols.
*
* @return Returns the URL of a CSS stylesheet used to display APP6 symbols.
*/
protected String getSymbolStyleSheetURL() {
return IlvMapUtil.getString(SymbologyManager.class, "SymbologyManager.App6CssURL"); //$NON-NLS-1$
}
/**
* disable those buttons if there is no terrain data.
*
* @param buttons
*/
private void listenForTerrainData(final JToggleButton[] buttons) {
for (int i = 0; i < buttons.length; i++) {
if (!buttons[i].isEnabled()) {// do not enable already disabled buttons
buttons[i] = null;
}
}
/* TerrainButtonsDisabler disabler= */new TerrainButtonsDisabler(view, buttons);
}
/**
* Hides the splash screen and loads data.
*
* @see java.awt.Frame#addNotify()
*/
Override
public void addNotify() {
if (splashWindow != null) {
splashWindow.showMessage(IlvMapUtil.getString(BaseDemo.class, "BaseDemo.SplashLoadingData"));//$NON-NLS-1$
}
loadInitialData();
super.addNotify();
if (splashWindow != null) {
splashWindow.stop();
splashWindow = null;
}
}
/**
* Computes the lat/lon of the point on the map.
*
* @param point
* location of the mouse on the view.
* @return the lat/lon coordinates in radians, or null.
*/
protected IlvCoordinate computeCoordinates(Point point) {
IlvCoordinate coord;
IlvPoint pt = new IlvPoint(point.x, point.y);
view.getTransformer().inverse(pt);
IlvProjectionUtil.invertY(pt);
try {
IlvCoordinateSystem cs = IlvCoordinateSystemProperty.GetCoordinateSystem(view.getManager());
IlvCoordinateTransformation ct = IlvCoordinateTransformation.CreateTransformation(cs,
IlvGeographicCoordinateSystem.KERNEL);
coord = new IlvCoordinate(pt.x, pt.y);
ct.transform(coord, coord);
} catch (IlvCoordinateTransformationException e) {
coord = null;
}
return coord;
}
/**
* Returns a tooltip associated to a graphical object by making an HTML table
* from its IlvAttributeProperty.
*
* @param graphic
* Graphical object
* @param point
* location of the mouse on the view.
* @return the string to display as a tooltip.
*/
protected String getToolTip(IlvGraphic graphic, Point point) {
IlvDisplayPreferences pref = IlvDisplayPreferencesProperty.GetDisplayPreferences(view.getManager());
IlvCoordinate coord = computeCoordinates(point);
// information for example.
IlvAttributeProperty property = (IlvAttributeProperty) graphic.getNamedProperty(IlvAttributeProperty.NAME);
if (property != null) {
IlvAttributeInfoProperty info = property.getInfo();
int count = info.getAttributesCount();
int displayed = 0;
String text = "<HTML><TABLE>"; //$NON-NLS-1$
for (int ip = 0; ip < count; ip++) {
Object v = property.getValue(ip);
String name = info.getAttributeName(ip);
if (v == null || v == "") //$NON-NLS-1$
continue;
if (v instanceof IlvAltitudeDataSource) {
IlvAltitudeDataSource ads = (IlvAltitudeDataSource) v;
if (coord != null) {
double alt = ads.getAltitude(coord.x, coord.y, 0);
if (!Double.isNaN(alt)) {
v = pref.formatAltitude(alt);
} else {
continue;
}
} else {
continue;
}
}
if (v instanceof IlvAttributeArray) {
IlvAttributeArray a = (IlvAttributeArray) v;
String ss = "<ul>"; //$NON-NLS-1$
for (int i = 0; i < a.getSize(); i++) {
IlvFeatureAttribute fa = a.getAttribute(i);
ss += "<li>" + fa + "</li>"; //$NON-NLS-1$ //$NON-NLS-2$
}
ss += "</ul>"; //$NON-NLS-1$
v = ss;
}
text += "<tr><td>" + name + "</td><td>" + v + "</td></tr>"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
displayed++;
}
if (displayed == 0) {
return null;
}
text += "</TABLE></HTML>"; //$NON-NLS-1$
return text;
}
return null;
}
/**
* @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent)
*/
Override
public void propertyChange(PropertyChangeEvent e) {
if (loading)
return;
if (!autoReprojection)
return;
reprojectNow((IlvCoordinateSystem) e.getNewValue(), e.getPropertyName());
}
private void reprojectNow(IlvCoordinateSystem system, String reason) {
// keep the same area of interest
IlvAreaOfInterest a = null;
if (IlvJCoordinateSystemEditorPanel.PROJECTION_CHANGED.equals(reason)) {
// if projection change, try keeping the same visible area
a = IlvJAreaOfInterestPanel.createLocationFromView(getView(), 0, false);
// stop center interactor.
view.setInteractor(toolbar.getPanInteractor());
}
view.getManager().setNamedProperty(new IlvCoordinateSystemProperty(system));
boolean isProj = system instanceof IlvProjectedCoordinateSystem;
centerInteractorBtn.setEnabled(isProj);
if (!isProj && centerInteractorBtn.isSelected()) {
view.setInteractor(toolbar.getPanInteractor());
}
// reloads data
engine.loadData();
IlvMapLabelerProperty prop = (IlvMapLabelerProperty) getView().getManager()
.getNamedProperty(IlvMapLabelerProperty.NAME);
if (prop != null) {
prop.getMapLabeler().performLabeling();
}
getOverview().getInteractor().fitOverview();
if (a != null) {
a.zoomTo(getView());
}
}
static Random ran = new Random();
static int ShapeLayerIndex = 0;
private float ran() {
return (float) (ran.nextDouble() / 2 + 0.5);
}
/**
* Returns an url created with a resource name.
*
* @param resource
* resource name.
* @return a file name or URL.
*/
public static URL findURL(String resource) {
URL rtnURL = null;
boolean exists = false;
try {
exists = new File(resource).exists();
} catch (AccessControlException e) {
exists = false;
}
if (exists) {
try {
rtnURL = new File(resource).toURI().toURL();
} catch (Exception e) {
e.printStackTrace();
}
} else {
// get the resource at the base of the classpath
rtnURL = BaseDemo.class.getResource("/" + resource); //$NON-NLS-1$
if (rtnURL == null)
rtnURL = BaseDemo.class.getResource(resource);
}
return rtnURL;
}
/**
* Method to load sample data.
*/
protected void loadInitialData() {
ran.setSeed(13);
String shapeFile = IlvMapUtil.getString(BaseDemo.class, "BaseDemo.ShpFileURL"); //$NON-NLS-1$
URL shpFile = findURL(shapeFile);
try {
IlvManager manager = view.getManager();
IlvMapDataSourceModel dsm = IlvMapDataSourceProperty.GetMapDataSourceModel(manager);
IlvMapLayerTreeModel ltm = IlvMapLayerTreeProperty.GetMapLayerTreeModel(manager);
String formatName;
if (!useSimplifiedDefaultMap) {
String gifImageFile = IlvMapUtil.getString(BaseDemo.class, "BaseDemo.ImgFileURL"); //$NON-NLS-1$
URL gifFile = findURL(gifImageFile);
// create a raster reader for the gif file (necessary to create a
// datasource below)
IlvRasterBasicImageReader imageReader = new IlvRasterBasicImageReader();
imageReader.addMap(gifFile/* .getFile() */);
// georeference this image (it covers the whole earth)
imageReader.setImageBounds(0, -Math.PI, Math.PI / 2, Math.PI, -Math.PI / 2);
// create main branch layer for image.
formatName = IlvMapUtil.getString(ShapeLoadAction.class, "BasicImageLoadAction.FormatName"); //$NON-NLS-1$
IlvMapLayer imageParent = new IlvMapLayer();
imageParent.setName(formatName);
imageParent.setStyle(new IlvMapCompositeStyle());
ltm.addChild(null, imageParent);
// create a datasource for the gif file.
IlvMapDataSource imageDataSource = IlvRasterDataSourceFactory.buildTiledImageDataSource(view.getManager(),
imageReader, true, true, null);
imageDataSource.setName(formatName + " (" + gifImageFile + ")"); //$NON-NLS-1$ //$NON-NLS-2$
dsm.insert(imageDataSource);
imageDataSource.getInsertionLayer().setName(imageDataSource.getName());
imageDataSource.getInsertionLayer().getStyle().setVisibleInOverview(true);
imageDataSource.getInsertionLayer().getStyle().setVisibleIn3DView(true);
ltm.addChild(imageParent, imageDataSource.getInsertionLayer());
}
// create main branch layer for shape file.
formatName = IlvMapUtil.getString(ShapeLoadAction.class, "ShapeLoadAction.FormatName"); //$NON-NLS-1$
IlvMapLayer shapeParent = new IlvMapLayer();
shapeParent.setName(formatName);
shapeParent.setStyle(new IlvMapCompositeStyle());
ltm.addChild(null, shapeParent);
// read data
IlvShapeDataSource shapeSource = new IlvShapeDataSource(
shpFile/* .getFile() */, true);
shapeSource.setName(formatName + " (" + shapeFile + ")"); //$NON-NLS-1$ //$NON-NLS-2$
shapeSource.setCoordinateSystem(IlvGeographicCoordinateSystem.WGS84);
dsm.insert(shapeSource);
IlvMapLayer shapeLayer = shapeSource.getInsertionLayer();
shapeLayer.setName(shapeSource.getName());
ltm.addChild(shapeParent, shapeLayer);
// start reading.
dsm.start();
// tweak the shape file style
IlvMapStyle shapeStyle = shapeLayer.getStyle();
if (!useSimplifiedDefaultMap) {
shapeStyle.setAttribute(IlvPolylineStyle.FOREGROUND, Color.white);
shapeStyle.setVisibleIn3DView(true);// JV-4851 show this by default in
// 3d view
shapeStyle.setAttribute(IlvGraphicPathStyle.DO_FILL, Boolean.FALSE);
shapeStyle.setLabelAttribute("NAME"); //$NON-NLS-1$
// Setup the label layer policy
IlvMapLabeler labeler = IlvMapLabelerProperty.GetMapLabeler(view.getManager());
labeler.setView(view);
labeler.getLabelLayer(shapeLayer).getStyle().setAttribute(IlvMapLabelStyle.DRAW_CENTERED, Boolean.TRUE);
labeler.getLabelLayer(shapeLayer).getStyle().setAttribute(IlvMapLabelStyle.LABELLING_SMALL_AREAS, Boolean.TRUE);
labeler.addLayer(shapeSource.getInsertionLayer());
} else if (shapeStyle != null) {
shapeStyle.setAttribute(IlvPolylineStyle.FOREGROUND, Color.black);
shapeStyle.setAttribute(IlvPolylineStyle.BACKGROUND, new Color(ran(), ran(), ran()));
shapeStyle.setVisibleIn3DView(true);// JV-4851 show this by default in
// 3d view
shapeStyle.setVisibleInOverview(true);
}
layerTree.expandPath(new TreePath(layerTree.getModel().getRoot()));
layerTree.setRootVisible(false);
} catch (RuntimeException e1) {
e1.printStackTrace();
}
view.fitTransformerToContent();
SwingUtilities.invokeLater(new Runnable() {
Override
public void run() {
view.fitTransformerToContent();
setModified(false);
}
});
}
private PropertyChangeListener prefChangeListener = new PropertyChangeListener() {
Override
public void propertyChange(PropertyChangeEvent e) {
if (loading)
return;
IlvDisplayPreferences system = (IlvDisplayPreferences) e.getNewValue();
/*
* Uncomment this to activate the geodetic interpolation when geodetic
* computation is activated. if(system.isUsingGeodeticComputation()){
* IlvMapCurveRenderer.setGeodeticInterpolationRendering(true);
* IlvMapAreaRenderer.setGeodeticInterpolationRendering(true); }
*/
view.getManager().setNamedProperty(new IlvDisplayPreferencesProperty(system));
IlvMapLabelerProperty prop = (IlvMapLabelerProperty) getView().getManager()
.getNamedProperty(IlvMapLabelerProperty.NAME);
if (prop != null) {
prop.getMapLabeler().performLabeling();
}
}
};
private boolean loading;
/**
* Adds an interactor on the toolbar.
*
* @param interactorResource
* name of the resource, found with <code>IlvMapUtil.getString</code>
* @param interactor
* interactor to add on the view
* @param index
* -1 or the index of the interactor in the toolbar.
* @see IlvImageUtil#getImageFromFile(java.lang.Class, java.lang.String)
* @see IlvMapUtil#getString(java.lang.Class, java.lang.String)
* @return the button created.
*/
protected MBToggleButton installInteractorButton(String interactorResource, final IlvManagerViewInteractor interactor,
int index) {
final MBToggleButton interactorButton = new MBToggleButton(interactorResource, false);
if (index == -1)
toolbar.add(interactorButton);
else
toolbar.add(interactorButton, index);
if (interactor == null) {
interactorButton.setEnabled(false);
} else {
interactorButton.addActionListener(new ActionListener() {
Override
public void actionPerformed(ActionEvent e) {
if (interactorButton.isSelected()) {
view.setInteractor(interactor);
view.requestFocus();
} else if (view.getInteractor() == interactor) {
view.popInteractor();
}
}
});
InteractorListener interactorListener = new InteractorListener() {
Override
public void interactorChanged(InteractorChangedEvent event) {
boolean isMyInteractor = (event.getNewValue() == interactor);
if (interactorButton.isSelected() != isMyInteractor) {
interactorButton.setSelected(isMyInteractor);
}
}
};
view.addInteractorListener(interactorListener);
}
interactorButton.setName(interactorResource);
return interactorButton;
}
/**
* Deinstalls an interactor from the toolbar.
*
* @param name
* name of the interactor.
*/
protected void desinstallInteractorButton(String name) {
for (int i = 0; i < toolbar.getComponentCount(); i++) {
Component c = toolbar.getComponent(i);
if (name.equals(c.getName())) {
toolbar.remove(c);
return;
}
}
}
/**
* Code called when the application exits.
*
*/
public void exitApplication() {
int ans = JOptionPane.NO_OPTION;
if (isModified()) {
ans = JOptionPane.showConfirmDialog(view, IlvMapUtil.getString(BaseDemo.class, "BaseDemo.MessageConfirmExit"), //$NON-NLS-1$
IlvMapUtil.getString(BaseDemo.class, "BaseDemo.TitleConfirmExit"), //$NON-NLS-1$
JOptionPane.YES_NO_CANCEL_OPTION);
}
if (ans == JOptionPane.YES_OPTION) {
IvlFileManager.SaveIvlActionListener p = new IvlFileManager.SaveIvlActionListener(this, true);
p.actionPerformed(null);
if (!p.isSaved()) {
ans = JOptionPane.CANCEL_OPTION;
}
}
if (ans != JOptionPane.CANCEL_OPTION) {
/* normal termination */
savePreferences();
// IvlFileManager.clearManager(view, true);
// dispose();
// remove the temporary files
try {
IlvRasterTemporaryFileManager.removeAllFiles();
System.exit(0);
} catch (SecurityException e) {
// Applet do not exit
}
}
}
/**
* @return Returns the main map view of this application.
*/
public IlvManagerView getView() {
return view;
}
/**
* @return the overview of this show case.
*/
public IlvJOverview getOverview() {
return overview;
}
/**
* @return Returns the coordinate system editor panel.
*/
public IlvJCoordinateSystemEditorPanel getCoordinateSystemEditorPanel() {
return csPanel;
}
/**
* @return Returns the display preferences editor panel.
*/
public IlvJDisplayPreferencesEditorPanel getDisplayPreferencesEditorPanel() {
return prefsPanel;
}
/**
* @param loading
* indicates the loading mode.
*/
public void setLoading(boolean loading) {
this.loading = loading;
if (loading == false) {
gridManager.updateAfterLoad();
}
}
private boolean modified;
/**
* Indicates whether or not the current map has been modified.
*
* @return true if the map has been modified
*/
public boolean isModified() {
return modified;
}
/**
* Determines whether or not the current map has been modified.
*
* @param b
* true to display the map as beeing modified.
*/
public void setModified(boolean b) {
modified = b;
}
private DemoModificationListener modificationListener;
private DemoModificationListener getModificationListener() {
if (modificationListener == null) {
modificationListener = new DemoModificationListener(this);
}
return modificationListener;
}
/**
* Create the print panel.
*
* @return A <code>JPanel</code> containing the buttons to configure the
* printing.
*/
protected JPanel makePrintPanel() {
// Creates the interactor.
JButton cleararea = new JButton(IlvMapUtil.getString(BaseDemo.class, "BaseDemo.ClearArea")); //$NON-NLS-1$
JButton setarea = new JButton(IlvMapUtil.getString(BaseDemo.class, "BaseDemo.SetArea")); //$NON-NLS-1$
// Action to open the print preview dialog.
// Action to install the print area interactor.
setarea.addActionListener(new ActionListener() {
Override
public void actionPerformed(ActionEvent ev) {
if (printAreaInteractor == null) {
printAreaInteractor = new IlvPrintAreaInteractor(getPrintingController());
}
view.setInteractor(printAreaInteractor);
}
});
// Action to reset the print area to full manager size.
cleararea.addActionListener(new ActionListener() {
Override
public void actionPerformed(ActionEvent ev) {
((IlvManagerPrintableDocument) getPrintingController().getDocument()).setPrintArea(null);
}
});
JPanel p = new JPanel(new GridLayout(0, 1));
p.add(setup);
p.add(preview);
p.add(print);
p.add(setarea);
p.add(cleararea);
JPanel pPanel = new JPanel();
pPanel.add(p, BorderLayout.NORTH);
return pPanel;
}
/**
* Creates the continuous zoom configuration panel.
*
* @return a new <code>ZoomConfigurationPanel</code>
*/
protected ZoomConfigurationPanel makeZoomConfigPanel() {
return new ZoomConfigurationPanel();
}
/**
* Creates an <code>IlvMapExportDialog</code> and returns it. This method
* registers the <code>IlvMapExporter</code> exporters needed by the
* application.
*
* @param vview
* The view
* @return an <code>IlvMapExportDialog</code> object.
*/
protected IlvMapExportDialog makeExportDialog(IlvManagerView vview) {
IlvMapExportDialog ed = new IlvMapExportDialog(vview);
IlvKMLExporter kmlExport = new IlvKMLExporter();
ed.registerVectorExporter(kmlExport);
ed.registerRasterExporter(kmlExport);
ed.registerVectorExporter(new IlvShapeExporter());
ed.registerRasterExporter(new GeoTiffExporter());
// share connection information
IlvSDOExporter sdoex = new IlvSDOExporter() {
Override
public void showConfigurationDialog(JDialog parent) {
SDOConnectionPanel connectionPanel = getConnectionPanel();
String user = getPreferences().getProperty(SDOLoadAction.USER);
if (user != null) {
connectionPanel.setUser(user);
}
String driver = getPreferences().getProperty(SDOLoadAction.DRIVER);
if (user != null) {
connectionPanel.setDriver(driver);
}
String password = getPreferences().getProperty(SDOLoadAction.PASSWORD);
if (password != null) {
connectionPanel.setPassword(password);
}
String databaseName = getPreferences().getProperty(SDOLoadAction.DATABASE_SID);
if (databaseName != null) {
connectionPanel.setSid(databaseName);
}
String hostName = getPreferences().getProperty(SDOLoadAction.HOST_NAME);
if (hostName != null) {
connectionPanel.setHostName(hostName);
}
String hostPort = getPreferences().getProperty(SDOLoadAction.HOST_PORT);
if (hostPort != null) {
connectionPanel.setHostPort(hostPort);
}
super.showConfigurationDialog(parent);
}
};
ed.registerVectorExporter(sdoex);
return ed;
}
/**
* Creates an <code>TileDebugManager</code>.
*
* @param vview
* The <code>IlvManagerView</code> to debug.
* @return an <code>TileDebugManager</code>.
*/
protected TileDebugManager makeTileDebugManager(IlvManagerView vview) {
return new TileDebugManager(vview);
}
static class MySpringLayout extends SpringLayout {
/**
* @inheritDoc
*/
Override
public void layoutContainer(Container parent) {
super.layoutContainer(parent);
int height = 0;
for (int i = 0; i < parent.getComponentCount(); i++) {
height = Math.max(height, parent.getComponent(i).getHeight());
}
int ph = parent.getHeight();
for (int i = 0; i < parent.getComponentCount(); i++) {
Component c = parent.getComponent(i);
int h = c.getHeight();
c.setLocation(c.getX(), (ph - h) / 2);
}
}
}
class SelectObjectAndSetSelectInteractor {
IlvGraphic object;
SelectObjectAndSetSelectInteractor(IlvMakePolyPointsInteractor inter) {
final IlvPolyPointsObjectFactory ppof = inter.getObjectFactory();
IlvPolyPointsObjectFactory n = new IlvPolyPointsObjectFactory() {
Override
public IlvGraphic createObject(IlvPoint[] points) {
object = ppof.createObject(points);
return object;
}
};
inter.setObjectFactory(n);
IlvManager manager = getView().getManager();
manager.addManagerContentChangedListener(new ManagerContentChangedListener() {
Override
public void contentsChanged(final ManagerContentChangedEvent evt) {
if (object == null)
return;
if (evt.isAdjusting())
return;
if (evt.getType() == ManagerContentChangedEvent.OBJECT_ADDED) {
ObjectInsertedEvent oie = (ObjectInsertedEvent) evt;
if (oie.getGraphicObject() == object) {
Component c[] = toolbar.getComponents();
final AbstractButton b = (AbstractButton) c[1];
SwingUtilities.invokeLater(new Runnable() {
Override
public void run() {
evt.getManager().setSelected(object, true, false);
b.doClick();
object = null;
}
});
}
}
}
});
}
}
static class ZoomConfigurationPanel extends JPanel {
static final String PERIOD = "PERIOD"; //$NON-NLS-1$
static final String ZOOM_FACTOR = "ZOOM_FACTOR"; //$NON-NLS-1$
private final static double defaultZoomFactor = 1.06;
private final static int defaultPeriod = 10;
private double zoomFactor = defaultZoomFactor;
private int period = defaultPeriod;
JSlider cs;
JSlider per;
JCheckBox continuous;
JCheckBox wheel;
/**
* Zooom Config Panel.
*/
public ZoomConfigurationPanel() {
super(new BorderLayout());
JPanel mainPanel = new JPanel(new GridBagLayout());
JPanel contZoomFactor = new JPanel(new BorderLayout());
String title = IlvMapUtil.getString(getClass(), "BaseDemo.ContinuousZoomFactor"); //$NON-NLS-1$
contZoomFactor.setBorder(BorderFactory.createTitledBorder(title));
int csMin = 101;
int csMax = 116;
double zf = getContinuousZoomFactor();
cs = new JSlider(csMin, csMax, (int) (zf * 100));
Hashtable<Integer, JLabel> csLabels = new Hashtable<Integer, JLabel>();
final JLabel csMinLabel = new JLabel(IlvMapUtil.getString(getClass(), "BaseDemo.ContinuousZoomFactor.Min")); //$NON-NLS-1$
csLabels.put(new Integer(csMin), csMinLabel);
final JLabel csMaxLabel = new JLabel(IlvMapUtil.getString(getClass(), "BaseDemo.ContinuousZoomFactor.Max")); //$NON-NLS-1$
csLabels.put(new Integer(csMax), csMaxLabel);
cs.setLabelTable(csLabels);
cs.setPaintLabels(true);
cs.setMajorTickSpacing(csMax - csMin);
cs.setMinorTickSpacing((csMax - csMin) / 10);
cs.setPaintTicks(true);
cs.setPaintTrack(true);
cs.addChangeListener(new ChangeListener() {
Override
public void stateChanged(ChangeEvent e) {
int value = cs.getValue();
if (cs.getValueIsAdjusting()) {
// wait
} else {
setContinuousZoomFactor(value / 100.);
}
}
});
contZoomFactor.add(cs, BorderLayout.CENTER);
contZoomFactor.setAlignmentX(Component.LEFT_ALIGNMENT);
int isMin = 10;
int isMax = 500;
JPanel pperiod = new JPanel(new BorderLayout());
String t = IlvMapUtil.getString(getClass(), "BaseDemo.Delay"); //$NON-NLS-1$
pperiod.setBorder(BorderFactory.createTitledBorder(t));
int pr = getPeriod() * 10;
per = new JSlider(isMin, isMax, pr);
Hashtable<Integer, JLabel> perLabels = new Hashtable<Integer, JLabel>();
final JLabel perMinLabel = new JLabel(IlvMapUtil.getString(getClass(), "BaseDemo.Delay.Min")); //$NON-NLS-1$
perLabels.put(new Integer(isMin), perMinLabel);
final JLabel perMaxLabel = new JLabel(IlvMapUtil.getString(getClass(), "BaseDemo.Delay.Max")); //$NON-NLS-1$
perLabels.put(new Integer(isMax), perMaxLabel);
per.setLabelTable(perLabels);
per.setPaintLabels(true);
per.setMajorTickSpacing(isMax - isMin);
per.setMinorTickSpacing((isMax - isMin) / 10);
per.setPaintTicks(true);
per.setPaintTrack(true);
per.addChangeListener(new ChangeListener() {
Override
public void stateChanged(ChangeEvent e) {
int value = per.getValue();
if (per.getValueIsAdjusting()) {
//
} else {
int v = (int) (value / 10.);
if (v <= 0) {
v = 1;
}
setPeriod(v);
}
}
});
pperiod.add(per, BorderLayout.CENTER);
pperiod.setAlignmentX(Component.LEFT_ALIGNMENT);
JPanel restorePanel = new JPanel();
JButton restoreButton = new JButton(IlvMapUtil.getString(getClass(), "BaseDemo.RestoreDefaultZoomFactor")); //$NON-NLS-1$
restoreButton.addActionListener(new ActionListener() {
Override
public void actionPerformed(ActionEvent e) {
per.setValue(defaultPeriod * 10);
cs.setValue((int) (defaultZoomFactor * 100));
}
});
restorePanel.add(restoreButton);
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.HORIZONTAL;
c.weightx = 1;
c.gridy = 0;
mainPanel.add(contZoomFactor, c);
c.gridy = 1;
mainPanel.add(pperiod, c);
c.gridy = 2;
mainPanel.add(restorePanel, c);
add(mainPanel, BorderLayout.NORTH);
}
int getPeriod() {
return period;
}
void setPeriod(int period) {
this.period = period;
per.setValue(period * 10);
putClientProperty(PERIOD, new Integer(period));
}
double getContinuousZoomFactor() {
return zoomFactor;
}
void setContinuousZoomFactor(double zoomFactor) {
this.zoomFactor = zoomFactor;
cs.setValue((int) (zoomFactor * 100.));
putClientProperty(ZOOM_FACTOR, new Double(zoomFactor));
}
}
void dropFile(File f) {
if (f.getName().toLowerCase().endsWith(IlvMapOutputStream.getFileSuffix())) {
IvlFileManager.LoadIvlActionListener loader = new IvlFileManager.LoadIvlActionListener(this);
loader.doLoad(f);
}
}
static int max = 0;
// JV-4677
static String wrapToolTipText(String text) {
if (max == 0) {
try {
max = Toolkit.getDefaultToolkit().getScreenSize().width;
} catch (HeadlessException he) {
he.printStackTrace();// no reason to happen
}
}
if (max > 10) {
max -= 10;
JToolTip test = new JToolTip();
test.setTipText(text);
if (test.getPreferredSize().width > max) {
return "<html><div width=\"" //$NON-NLS-1$
+ max + "\" align=\"left\">" //$NON-NLS-1$
+ text + "</div></html>"; //$NON-NLS-1$
}
}
return text;
}
}