/*
* 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 utils;
import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.plaf.basic.BasicOptionPaneUI.ButtonAreaLayout;
import javax.swing.tree.TreePath;
import ilog.views.maps.IlvMapUtil;
import ilog.views.maps.beans.IlvJCoordinateSystemEditorPanel;
import ilog.views.maps.srs.coordsys.IlvCoordinateSystem;
import ilog.views.maps.srs.wkt.IlvWKTCoordinateSystemDictionary;
/**
* This dialog displays all the known coordinate systems (using
* {@link ilog.views.maps.srs.wkt.IlvWKTCoordinateSystemDictionary}) and gives
* users the possibility to chose and preview them.
*/
public class CoordinateSystemDictionaryManager extends JDialog {
JButton okButton = new JButton(UIManager.getString("OptionPane.okButtonText")); //$NON-NLS-1$
JButton cancelButton = new JButton(UIManager.getString("OptionPane.cancelButtonText")); //$NON-NLS-1$
/**
* Default constructor.
*/
public CoordinateSystemDictionaryManager() {
super();
setTitle(IlvMapUtil.getString(CoordinateSystemDictionaryManager.class, "CoordinateSystemDictionaryManager.Title")); //$NON-NLS-1$
setModal(true);
makeGUI();
pack();
}
private IlvCoordinateSystem selectedCoordinateSystem;
/**
* @return Returns the selected CoordinateSystem.
*/
public IlvCoordinateSystem getSelectedCoordinateSystem() {
return selectedCoordinateSystem;
}
/**
* @param selectedCoordinateSystem
* The selected CoordinateSystem to set.
*/
public void setSelectedCoordinateSystem(IlvCoordinateSystem selectedCoordinateSystem) {
this.selectedCoordinateSystem = selectedCoordinateSystem;
}
private void makeGUI() {
IlvWKTCoordinateSystemDictionary dic = new IlvWKTCoordinateSystemDictionary();
final IlvJCoordinateSystemEditorPanel panel = new IlvJCoordinateSystemEditorPanel();
if (selectedCoordinateSystem != null) {
panel.setCoordinateSystem(selectedCoordinateSystem);
}
panel.setEnabled(false);
JTree tree = new JTree(dic.makeTreeModel(IlvWKTCoordinateSystemDictionary.CATEGORY));
tree.putClientProperty("JTree.lineStyle", "Angled"); //$NON-NLS-1$ //$NON-NLS-2$
tree.setRootVisible(false);
tree.setShowsRootHandles(true);
tree.setExpandsSelectedPaths(true);
tree.getSelectionModel().addTreeSelectionListener(new TreeSelectionListener() {
Override
public void valueChanged(TreeSelectionEvent e) {
TreePath path = e.getNewLeadSelectionPath();
if (path == null) {
okButton.setEnabled(false);
return;
}
okButton.setEnabled(true);
Object node = path.getLastPathComponent();
if (node instanceof IlvWKTCoordinateSystemDictionary.CoordinateSystemNode) {
setSelectedCoordinateSystem(
((IlvWKTCoordinateSystemDictionary.CoordinateSystemNode) node).getCoordinateSystem());
panel.setCoordinateSystem(getSelectedCoordinateSystem());
panel.repaint();
} else {
okButton.setEnabled(false);
}
}
});
tree.addMouseListener(new MouseAdapter() {
Override
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) {
okButton.doClick();
}
}
});
okButton.addActionListener(new ActionListener() {
Override
public void actionPerformed(ActionEvent e) {
dispose();
}
});
cancelButton.addActionListener(new ActionListener() {
Override
public void actionPerformed(ActionEvent e) {
setSelectedCoordinateSystem(null);
dispose();
}
});
JPanel buttons = new JPanel();
buttons.setBorder(BorderFactory.createEmptyBorder(6, 6, 6, 6));
buttons.setLayout(new ButtonAreaLayout(true, 6));
buttons.add(okButton);
buttons.add(cancelButton);
configureButton(okButton);
configureButton(cancelButton);
okButton.setEnabled(false);
getContentPane().add(new JScrollPane(tree));
getContentPane().add(panel, BorderLayout.LINE_END);
getContentPane().add(buttons, BorderLayout.SOUTH);
SwingUtilities.getRootPane(this).setDefaultButton(okButton);
}
private void configureButton(JButton aButton) {
aButton.setMultiClickThreshhold(UIManager.getInt("OptionPane.buttonClickThreshhold")); //$NON-NLS-1$
Font buttonFont = UIManager.getFont("OptionPane.buttonFont"); //$NON-NLS-1$
if (buttonFont != null) {
aButton.setFont(buttonFont);
}
aButton.setMargin(new Insets(2, 4, 2, 4));
}
}