//$HeadURL$
/*---------------- FILE HEADER ------------------------------------------
This file is part of deegree.
Copyright (C) 2001-2012 by:
Department of Geography, University of Bonn
http://www.giub.uni-bonn.de/deegree/
lat/lon GmbH
http://www.lat-lon.de
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Contact:
lat/lon GmbH
Aennchenstr. 19
53177 Bonn
Germany
E-Mail: info@lat-lon.de
Prof. Dr. Klaus Greve
Department of Geography
University of Bonn
Meckenheimer Allee 166
53115 Bonn
Germany
E-Mail: greve@giub.uni-bonn.de
---------------------------------------------------------------------------*/
package org.deegree.igeo.views.swing.digitize;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import javax.swing.AbstractButton;
import javax.swing.BorderFactory;
import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
import javax.swing.JToggleButton;
import javax.swing.JTree;
import javax.swing.KeyStroke;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
import org.deegree.framework.log.ILogger;
import org.deegree.framework.log.LoggerFactory;
import org.deegree.framework.util.Pair;
import org.deegree.igeo.ApplicationContainer;
import org.deegree.igeo.i18n.Messages;
import org.deegree.igeo.mapmodel.Layer;
import org.deegree.igeo.mapmodel.MapModel;
import org.deegree.igeo.modules.DigitizerModule;
import org.deegree.igeo.views.DialogFactory;
import org.deegree.igeo.views.DigitizerFunctionSelect;
import org.deegree.igeo.views.swing.ButtonGroup;
import org.deegree.igeo.views.swing.GeometryValidationPanel;
import org.deegree.igeo.views.swing.SnappingOptionsPanel;
import org.deegree.igeo.views.swing.actionlisteners.KeyListenerRegister;
import org.deegree.igeo.views.swing.digitize.construction.DrawArcDialog;
import org.deegree.igeo.views.swing.digitize.construction.JoinCurveDialog;
import org.deegree.igeo.views.swing.digitize.construction.ParallelDialog;
import org.deegree.igeo.views.swing.digitize.construction.PointByCoordinateDialog;
import org.deegree.igeo.views.swing.digitize.options.ArcAndLengthOptionPanel;
import org.deegree.igeo.views.swing.digitize.options.LineOptionsPanel;
import org.deegree.igeo.views.swing.digitize.options.OptionsPanel;
import org.deegree.igeo.views.swing.digitize.options.VerticesOptionsPanel;
import org.deegree.igeo.views.swing.util.IconRegistry;
import org.deegree.model.spatialschema.Geometry;
/**
* Panel for selecting digitizing functionalities. It is the swing implementation of {@link DigitizerFunctionSelect}
* interface and provides some additional GUI elements for validating layers and geometries as well as for set up some
* digitizing options.
*
* @author <a href="mailto:wanhoff@lat-lon.de">Jeronimo Wanhoff</a>
* @author <a href="mailto:poth@lat-lon.de">Andreas Poth</a>
* @author last edited by: $Author$
*
* @version. $Revision$, $Date$
*/
public class DigitizerFunctionSelectPanel extends javax.swing.JPanel implements DigitizerFunctionSelect {
private static final long serialVersionUID = -3532489115230890601L;
private static final ILogger LOG = LoggerFactory.getLogger( DigitizerFunctionSelectPanel.class );
private DigitizerModule<Container> digitizerModule;
private Map<String, Object> selectionParams;
private Map<String, Object> options;
private SnappingOptionsPanel snapPanel;
private JTabbedPane functionSelectTab;
private JToggleButton select2PerFilter;
private JToggleButton btDrawPolygonHole;
private JButton btCutPolygonHole;
private JButton uniteLineStrings;
private JButton unitePolygons;
private JButton btDrawArc;
private JToggleButton selectPerFilter;
private JButton deleteFeature;
private JToggleButton select2PerLine;
private JToggleButton select2PerPolygon;
private JToggleButton select2ForEdit;
private JTree optionTree;
private JScrollPane selectOptionSC;
private JSplitPane optionsplit;
private JToggleButton fillArc;
private JToggleButton rotateFeature;
private JToggleButton moveFeature;
private JPanel createPanel;
private JButton btJoinCurves;
private JToggleButton btDrawPolygonByFillingHole;
private JButton btMoveByDistance;
private JButton btDrawParallel;
private JButton btSetDigitizeAngle;
private JButton btDrawPointAt;
private JToggleButton btDrawSizedEllipse;
private JToggleButton btDrawSizedRect;
private JTextArea editDescriptionTA;
private JToggleButton btDrawCircle;
private JToggleButton btDrawPoint;
private JToggleButton btDrawLineString;
private JToggleButton btDrawPolygon;
private JToggleButton btDrawRectangle;
private JPanel optionsPanel;
private JToggleButton btSelectForInsert;
private JTextArea taCreateDescriptionTA;
private JButton ungroupMultiPolygon;
private JButton ungroupMultiCurve;
private JButton ungroupMultiPoint;
private JButton groupPolygons;
private JButton groupLines;
private JButton groupPoints;
private JToggleButton splitPolygon;
private JToggleButton splitLine;
private JToggleButton mergeVertices;
private JToggleButton moveVertex;
private JToggleButton deleteVertex;
private JToggleButton insertVertex;
private JToggleButton dummy;
private JPanel editPanel;
private ButtonGroup mainButtonGroup;
private ActionListener buttonselectListener;
private FocusListener focusListener;
private ApplicationContainer<Container> appContainer;
private Properties prop = new Properties();
/**
* default constructor
*
* @param appContainer
*/
public DigitizerFunctionSelectPanel( ApplicationContainer<Container> appContainer ) {
this.appContainer = appContainer;
try {
InputStream is = DigitizerFunctionSelectPanel.class.getResourceAsStream( "resources/digitizer.properties" );
prop.load( is );
is.close();
} catch ( Exception e ) {
LOG.logError( e );
}
mainButtonGroup = new ButtonGroup();
buttonselectListener = new ButtonSelectListener();
focusListener = (FocusListener) buttonselectListener;
initGUI();
selectionParams = new HashMap<String, Object>();
options = new HashMap<String, Object>();
}
private void initGUI() {
try {
BorderLayout thisLayout = new BorderLayout();
this.setLayout( thisLayout );
this.setPreferredSize(new java.awt.Dimension(346, 399));
{
functionSelectTab = new JTabbedPane();
this.add( functionSelectTab, BorderLayout.CENTER );
functionSelectTab.setPreferredSize(new java.awt.Dimension(438, 402));
createCreatePanel();
// createConstructionPanel();
createEditPanel();
createSnapPanel();
createValidationPanel();
createOptionPanel();
createArcAndLengthPanel();
}
} catch ( Exception e ) {
e.printStackTrace();
}
}
/**
*
*/
private void createArcAndLengthPanel() {
JPanel panel = new ArcAndLengthOptionPanel( appContainer );
panel.setVisible( true );
functionSelectTab.addTab( Messages.getMessage( getLocale(), "$MD11779" ), null, panel, null );
}
private void createOptionPanel() {
optionsPanel = new JPanel();
BorderLayout optionsPanelLayout = new BorderLayout();
optionsPanel.setLayout( optionsPanelLayout );
functionSelectTab.addTab( Messages.getMessage( getLocale(), "$MD11191" ), null, optionsPanel, null );
{
optionsplit = new JSplitPane();
optionsPanel.add( optionsplit, BorderLayout.CENTER );
{
selectOptionSC = new JScrollPane();
optionsplit.add( selectOptionSC, JSplitPane.LEFT );
selectOptionSC.setPreferredSize( new Dimension( 150, 355 ) );
selectOptionSC.setMinimumSize( new Dimension( 150, 355 ) );
{
optionTree = new JTree();
optionTree.setCellRenderer( new CellRenderer() );
optionTree.setMinimumSize( new Dimension( 150, 60 ) );
optionTree.addMouseListener( new OptionsMouseListener() );
fillTreeModel();
optionTree.expandRow( 0 );
selectOptionSC.setViewportView( optionTree );
optionTree.setPreferredSize( new Dimension( 161, 379 ) );
}
}
}
}
private void createValidationPanel() {
JPanel validationPanel = new GeometryValidationPanel( appContainer );
validationPanel.setVisible( true );
functionSelectTab.addTab( Messages.getMessage( getLocale(), "$MD11192" ), null, validationPanel, null );
}
private void createEditPanel() {
editPanel = new JPanel();
editPanel.addComponentListener( new EditShownListener() );
functionSelectTab.addTab( Messages.getMessage( getLocale(), "$MD11193" ), null, editPanel, null );
editPanel.setLayout( null );
{
editDescriptionTA = new JTextArea();
editDescriptionTA.setLineWrap( true );
editDescriptionTA.setWrapStyleWord( true );
editDescriptionTA.setEditable( false );
String s = Messages.getMessage( getLocale(), "$MD10203" );
editDescriptionTA.setBorder( BorderFactory.createTitledBorder( s ) );
editPanel.add( editDescriptionTA );
editDescriptionTA.setText( Messages.getMessage( getLocale(), "$MD10202" ) );
editDescriptionTA.setBounds(5, 189, 330, 126);
}
{
select2ForEdit = new JToggleButton( getImageIcon( "select.gif" ) );
editPanel.add( select2ForEdit );
select2ForEdit.setActionCommand( "select2ForEdit" );
select2ForEdit.setToolTipText( Messages.getMessage( getLocale(), "$MD10212" ) );
select2ForEdit.setBounds( 6, 5, 30, 30 );
select2ForEdit.addActionListener( buttonselectListener );
select2ForEdit.addFocusListener( focusListener );
select2ForEdit.setVisible( "true".equals( prop.get( "select2ForEdit" ) ) );
mainButtonGroup.add( select2ForEdit );
}
/*
* { select2PerLine = new JToggleButton(); editPanel.add( select2PerLine ); select2PerLine.setActionCommand(
* "select2PerLine" ); select2PerLine.setToolTipText( Messages.getMessage( getLocale(), "$MD10213" ) );
* select2PerLine.setText( "select2PerLine" ); select2PerLine.setBounds( 77, 5, 30, 30 );
* select2PerLine.addActionListener( buttonselectListener ); select2PerLine.addFocusListener( focusListener );
* mainButtonGroup.add( select2PerLine ); } { select2PerPolygon = new JToggleButton(); editPanel.add(
* select2PerPolygon ); select2PerPolygon.setActionCommand( "select2PerPolygon" );
* select2PerPolygon.setToolTipText( Messages.getMessage( getLocale(), "$MD10214" ) );
* select2PerPolygon.setText( "selectPerPolygon" ); select2PerPolygon.setBounds( 41, 5, 30, 30 );
* select2PerPolygon.addActionListener( buttonselectListener ); select2PerPolygon.addFocusListener(
* focusListener ); mainButtonGroup.add( select2PerPolygon ); } { select2PerFilter = new JToggleButton();
* editPanel.add( select2PerFilter ); select2PerFilter.setActionCommand( "select2PerFilter" );
* select2PerFilter.setToolTipText( Messages.getMessage( getLocale(), "$MD10215" ) ); select2PerFilter.setText(
* "select2PerFilter" ); select2PerFilter.setBounds( 113, 5, 30, 30 ); select2PerFilter.addActionListener(
* buttonselectListener ); select2PerFilter.addFocusListener( focusListener ); mainButtonGroup.add(
* select2PerFilter ); }
*/
{
insertVertex = new JToggleButton( getImageIcon( "insert_vertex.png" ) );
editPanel.add( insertVertex );
insertVertex.setActionCommand( "update:insertVertex" );
insertVertex.setToolTipText( Messages.getMessage( getLocale(), "$MD10216" ) );
insertVertex.setBounds( 5, 41, 30, 30 );
insertVertex.addActionListener( buttonselectListener );
insertVertex.addFocusListener( focusListener );
insertVertex.setVisible( "true".equals( prop.get( "update_insertVertex" ) ) );
mainButtonGroup.add( insertVertex );
}
{
deleteVertex = new JToggleButton( getImageIcon( "delete_vertex.png" ) );
editPanel.add( deleteVertex );
deleteVertex.setActionCommand( "update:deleteVertex" );
deleteVertex.setToolTipText( Messages.getMessage( getLocale(), "$MD10217" ) );
deleteVertex.setBounds( 41, 41, 30, 30 );
deleteVertex.addActionListener( buttonselectListener );
deleteVertex.addFocusListener( focusListener );
deleteVertex.setVisible( "true".equals( prop.get( "update_deleteVertex" ) ) );
mainButtonGroup.add( deleteVertex );
}
{
moveVertex = new JToggleButton( getImageIcon( "move_vertex.png" ) );
editPanel.add( moveVertex );
moveVertex.setActionCommand( "update:moveVertex" );
moveVertex.setToolTipText( Messages.getMessage( getLocale(), "$MD10218" ) );
moveVertex.setBounds( 77, 41, 30, 30 );
moveVertex.addActionListener( buttonselectListener );
moveVertex.addFocusListener( focusListener );
moveVertex.setVisible( "true".equals( prop.get( "update_moveVertex" ) ) );
mainButtonGroup.add( moveVertex );
}
{
mergeVertices = new JToggleButton( getImageIcon( "merge_vertices.png" ) );
editPanel.add( mergeVertices );
mergeVertices.setToolTipText( Messages.getMessage( getLocale(), "$MD10219" ) );
mergeVertices.setActionCommand( "update:mergeVertices" );
mergeVertices.setBounds( 113, 41, 30, 30 );
mergeVertices.addActionListener( buttonselectListener );
mergeVertices.addFocusListener( focusListener );
mergeVertices.setVisible( "true".equals( prop.get( "update_mergeVertices" ) ) );
mainButtonGroup.add( mergeVertices );
}
{
splitLine = new JToggleButton( getImageIcon( "split_line.png" ) );
editPanel.add( splitLine );
splitLine.setActionCommand( "splitLine" );
splitLine.setToolTipText( Messages.getMessage( getLocale(), "$MD10220" ) );
splitLine.setBounds( 5, 77, 30, 30 );
splitLine.addActionListener( buttonselectListener );
splitLine.addFocusListener( focusListener );
splitLine.setVisible( "true".equals( prop.get( "splitLine" ) ) );
mainButtonGroup.add( splitLine );
}
{
splitPolygon = new JToggleButton( getImageIcon( "split_polygon.png" ) );
editPanel.add( splitPolygon );
splitPolygon.setActionCommand( "splitPolygon" );
splitPolygon.setToolTipText( Messages.getMessage( getLocale(), "$MD10221" ) );
splitPolygon.setBounds( 41, 77, 30, 30 );
splitPolygon.addActionListener( buttonselectListener );
splitPolygon.addFocusListener( focusListener );
splitPolygon.setVisible( "true".equals( prop.get( "splitPolygon" ) ) );
mainButtonGroup.add( splitPolygon );
}
{
unitePolygons = new JButton( getImageIcon( "union_polygon.png" ) );
editPanel.add( unitePolygons );
unitePolygons.setActionCommand( "uniteGeometries" );
unitePolygons.setToolTipText( Messages.getMessage( getLocale(), "$MD10270" ) );
unitePolygons.addActionListener( buttonselectListener );
unitePolygons.addFocusListener( focusListener );
unitePolygons.setVisible( "true".equals( prop.get( "uniteGeometries" ) ) );
unitePolygons.setBounds( 124, 77, 30, 30 );
}
{
uniteLineStrings = new JButton( getImageIcon( "union_line.png" ) );
editPanel.add( uniteLineStrings );
uniteLineStrings.setActionCommand( "uniteGeometries" );
uniteLineStrings.setToolTipText( Messages.getMessage( getLocale(), "$MD10272" ) );
uniteLineStrings.addActionListener( buttonselectListener );
uniteLineStrings.addFocusListener( focusListener );
uniteLineStrings.setVisible( "true".equals( prop.get( "uniteGeometries" ) ) );
uniteLineStrings.setBounds( 160, 77, 30, 30 );
}
{
groupPoints = new JButton( getImageIcon( "point_group.gif" ) );
editPanel.add( groupPoints );
groupPoints.setActionCommand( "groupPoints" );
groupPoints.setToolTipText( Messages.getMessage( getLocale(), "$MD10222" ) );
groupPoints.setBounds( 5, 113, 30, 30 );
groupPoints.addActionListener( buttonselectListener );
groupPoints.setVisible( "true".equals( prop.get( "groupPoints" ) ) );
groupPoints.addFocusListener( focusListener );
}
{
groupLines = new JButton( getImageIcon( "line_group.gif" ) );
editPanel.add( groupLines );
groupLines.setActionCommand( "groupLines" );
groupLines.setToolTipText( Messages.getMessage( getLocale(), "$MD10223" ) );
groupLines.setBounds( 41, 113, 30, 30 );
groupLines.addActionListener( buttonselectListener );
groupLines.setVisible( "true".equals( prop.get( "groupLines" ) ) );
groupLines.addFocusListener( focusListener );
}
{
groupPolygons = new JButton( getImageIcon( "shape_group.gif" ) );
editPanel.add( groupPolygons );
groupPolygons.setActionCommand( "groupPolygons" );
groupPolygons.setToolTipText( Messages.getMessage( getLocale(), "$MD10224" ) );
groupPolygons.setBounds( 77, 113, 30, 30 );
groupPolygons.addActionListener( buttonselectListener );
groupPolygons.setVisible( "true".equals( prop.get( "groupPolygons" ) ) );
groupPolygons.addFocusListener( focusListener );
}
{
ungroupMultiPoint = new JButton( getImageIcon( "point_ungroup.gif" ) );
editPanel.add( ungroupMultiPoint );
ungroupMultiPoint.setActionCommand( "ungroupMultiPoint" );
ungroupMultiPoint.setToolTipText( Messages.getMessage( getLocale(), "$MD10225" ) );
ungroupMultiPoint.addActionListener( buttonselectListener );
ungroupMultiPoint.addFocusListener( focusListener );
ungroupMultiPoint.setVisible( "true".equals( prop.get( "ungroupMultiPoint" ) ) );
ungroupMultiPoint.setBounds( 124, 113, 30, 31 );
}
{
ungroupMultiCurve = new JButton( getImageIcon( "line_ungroup.gif" ) );
editPanel.add( ungroupMultiCurve );
ungroupMultiCurve.setActionCommand( "ungroupMultiCurve" );
ungroupMultiCurve.setToolTipText( Messages.getMessage( getLocale(), "$MD10226" ) );
ungroupMultiCurve.addActionListener( buttonselectListener );
ungroupMultiCurve.addFocusListener( focusListener );
ungroupMultiCurve.setVisible( "true".equals( prop.get( "ungroupMultiCurve" ) ) );
ungroupMultiCurve.setBounds( 160, 113, 30, 31 );
}
{
ungroupMultiPolygon = new JButton( getImageIcon( "shape_ungroup.gif" ) );
editPanel.add( ungroupMultiPolygon );
ungroupMultiPolygon.setActionCommand( "ungroupMultiPolygon" );
ungroupMultiPolygon.setToolTipText( Messages.getMessage( getLocale(), "$MD10227" ) );
ungroupMultiPolygon.addActionListener( buttonselectListener );
ungroupMultiPolygon.addFocusListener( focusListener );
ungroupMultiPolygon.setVisible( "true".equals( prop.get( "ungroupMultiPolygon" ) ) );
ungroupMultiPolygon.setBounds( 196, 113, 30, 31 );
}
{
moveFeature = new JToggleButton( getImageIcon( "shape_square_move.gif" ) );
editPanel.add( moveFeature );
moveFeature.setActionCommand( "update:moveFeature" );
moveFeature.setToolTipText( Messages.getMessage( getLocale(), "$MD10228" ) );
moveFeature.setBounds( 40, 148, 30, 30 );
moveFeature.addActionListener( buttonselectListener );
moveFeature.addFocusListener( focusListener );
moveFeature.setVisible( "true".equals( prop.get( "update_moveFeature" ) ) );
mainButtonGroup.add( moveFeature );
}
{
rotateFeature = new JToggleButton( getImageIcon( "shape_rotate.gif" ) );
editPanel.add( rotateFeature );
rotateFeature.setActionCommand( "rotateFeature" );
rotateFeature.setToolTipText( Messages.getMessage( getLocale(), "$MD10229" ) );
rotateFeature.setBounds( 113, 148, 30, 30 );
rotateFeature.addActionListener( buttonselectListener );
rotateFeature.addFocusListener( focusListener );
rotateFeature.setVisible( "true".equals( prop.get( "rotateFeature" ) ) );
mainButtonGroup.add( rotateFeature );
}
{
deleteFeature = new JButton( getImageIcon( "shape_square_delete.gif" ) );
editPanel.add( deleteFeature );
deleteFeature.setActionCommand( "deleteFeature" );
deleteFeature.setToolTipText( Messages.getMessage( getLocale(), "$MD10230" ) );
deleteFeature.addActionListener( buttonselectListener );
deleteFeature.addFocusListener( focusListener );
deleteFeature.setVisible( "true".equals( prop.get( "deleteFeature" ) ) );
deleteFeature.setBounds( 5, 148, 30, 30 );
}
{
btMoveByDistance = new JButton( getImageIcon( "move_by_distance.png" ) );
editPanel.add( btMoveByDistance );
btMoveByDistance.setToolTipText( Messages.getMessage( getLocale(), "$MD11288" ) );
btMoveByDistance.setBounds( 76, 148, 30, 30 );
btMoveByDistance.setVisible( "true".equals( prop.get( "moveByDistance" ) ) );
btMoveByDistance.addActionListener( new ActionListener() {
public void actionPerformed( ActionEvent event ) {
MoveDialog md = new MoveDialog( DigitizerFunctionSelectPanel.this, appContainer );
Pair<Double, Double> distance = md.getDistance();
if ( distance != null ) {
Map<String, Object> parameter = new HashMap<String, Object>();
parameter.put( "distance", distance );
digitizerModule.performDigitizingAction( "moveByDistance", parameter );
}
}
} );
}
{
dummy = new JToggleButton();
mainButtonGroup.add( dummy );
}
}
private void createSnapPanel() {
snapPanel = new SnappingOptionsPanel( appContainer );
functionSelectTab.addTab( Messages.getMessage( getLocale(), "$MD11194" ), null, snapPanel, null );
}
private void createCreatePanel() {
createPanel = new JPanel();
createPanel.addComponentListener( new CreateShownListener() );
functionSelectTab.addTab( Messages.getMessage( getLocale(), "$MD11195" ), null, createPanel, null );
createPanel.setLayout( null );
createPanel.setPreferredSize(new java.awt.Dimension(433, 373));
{
btSelectForInsert = new JToggleButton( getImageIcon( "select.gif" ) );
createPanel.add( btSelectForInsert );
btSelectForInsert.setBounds( 6, 5, 30, 30 );
btSelectForInsert.setActionCommand( "selectForInsert" );
btSelectForInsert.setToolTipText( Messages.getMessage( getLocale(), "$MD10204" ) );
btSelectForInsert.addActionListener( buttonselectListener );
btSelectForInsert.addFocusListener( focusListener );
btSelectForInsert.setVisible( "true".equals( prop.get( "selectForInsert" ) ) );
mainButtonGroup.add( btSelectForInsert );
}
/*
* { selectPerFilter = new JToggleButton(); createPanel.add( selectPerFilter );
* selectPerFilter.setActionCommand( "selectPerFilter" ); selectPerFilter.setText( "selectPerFilter" );
* selectPerFilter.setToolTipText( Messages.getMessage( getLocale(), "$MD10205" ) ); selectPerFilter.setBounds(
* 42, 5, 30, 30 ); selectPerFilter.addActionListener( buttonselectListener ); selectPerFilter.addFocusListener(
* focusListener ); mainButtonGroup.add( selectPerFilter ); }
*/
{
btDrawRectangle = new JToggleButton( getImageIcon( "shape_square_create.gif" ) );
createPanel.add( btDrawRectangle );
btDrawRectangle.setActionCommand( "drawRectangle" );
btDrawRectangle.setToolTipText( Messages.getMessage( getLocale(), "$MD10206" ) );
btDrawRectangle.setBounds(6, 82, 30, 30);
btDrawRectangle.addActionListener( buttonselectListener );
btDrawRectangle.addFocusListener( focusListener );
btDrawRectangle.setVisible( "true".equals( prop.get( "drawRectangle" ) ) );
mainButtonGroup.add( btDrawRectangle );
}
{
btDrawPolygon = new JToggleButton( getImageIcon( "polygon_create.png" ) );
createPanel.add( btDrawPolygon );
btDrawPolygon.setActionCommand( "drawPolygon" );
btDrawPolygon.setToolTipText( Messages.getMessage( getLocale(), "$MD10207" ) );
btDrawPolygon.setBounds( 6, 41, 30, 30 );
btDrawPolygon.addActionListener( buttonselectListener );
btDrawPolygon.addFocusListener( focusListener );
btDrawPolygon.setVisible( "true".equals( prop.get( "drawPolygon" ) ) );
mainButtonGroup.add( btDrawPolygon );
}
{
btDrawLineString = new JToggleButton( getImageIcon( "line_create.gif" ) );
createPanel.add( btDrawLineString );
btDrawLineString.setActionCommand( "drawLineString" );
btDrawLineString.setToolTipText( Messages.getMessage( getLocale(), "$MD10208" ) );
btDrawLineString.setBounds(6, 123, 30, 30);
btDrawLineString.addActionListener( buttonselectListener );
btDrawLineString.addFocusListener( focusListener );
btDrawLineString.setVisible( "true".equals( prop.get( "drawLineString" ) ) );
mainButtonGroup.add( btDrawLineString );
}
{
btDrawPoint = new JToggleButton( getImageIcon( "point_create.gif" ) );
createPanel.add( btDrawPoint );
btDrawPoint.setActionCommand( "drawPoint" );
btDrawPoint.setToolTipText( Messages.getMessage( getLocale(), "$MD10209" ) );
btDrawPoint.setBounds(6, 164, 30, 30);
btDrawPoint.addActionListener( buttonselectListener );
btDrawPoint.addFocusListener( focusListener );
btDrawPoint.setVisible( "true".equals( prop.get( "drawPoint" ) ) );
mainButtonGroup.add( btDrawPoint );
}
{
btDrawCircle = new JToggleButton( getImageIcon( "circle_create.gif" ) );
createPanel.add( btDrawCircle );
btDrawCircle.setActionCommand( "drawCircle" );
btDrawCircle.setToolTipText( Messages.getMessage( getLocale(), "$MD10210" ) );
btDrawCircle.setBounds(76, 82, 30, 30);
btDrawCircle.addActionListener( buttonselectListener );
btDrawCircle.addFocusListener( focusListener );
btDrawCircle.setVisible( "true".equals( prop.get( "drawCircle" ) ) );
mainButtonGroup.add( btDrawCircle );
}
{
taCreateDescriptionTA = new JTextArea();
taCreateDescriptionTA.setLineWrap( true );
taCreateDescriptionTA.setWrapStyleWord( true );
taCreateDescriptionTA.setEditable( false );
String s = Messages.getMessage( getLocale(), "$MD10201" );
taCreateDescriptionTA.setBorder( BorderFactory.createTitledBorder( s ) );
createPanel.add( taCreateDescriptionTA );
taCreateDescriptionTA.setText( Messages.getMessage( getLocale(), "$MD10200" ) );
taCreateDescriptionTA.setBounds(6, 205, 327, 141);
}
{
btDrawPolygonHole = new JToggleButton( getImageIcon( "polygonhole_create.png" ) );
createPanel.add( btDrawPolygonHole );
btDrawPolygonHole.setActionCommand( "drawPolygonHole" );
btDrawPolygonHole.setToolTipText( Messages.getMessage( getLocale(), "$MD10299" ) );
btDrawPolygonHole.setBounds( 41, 41, 30, 30 );
btDrawPolygonHole.addActionListener( buttonselectListener );
btDrawPolygonHole.addFocusListener( focusListener );
btDrawPolygonHole.setVisible( "true".equals( prop.get( "drawPolygonHole" ) ) );
mainButtonGroup.add( btDrawPolygonHole );
}
{
// cutting holes into a surface by selecting overlapping surfaces
btCutPolygonHole = new JButton( getImageIcon( "cut.png" ) );
createPanel.add( btCutPolygonHole );
btCutPolygonHole.setActionCommand( "cutPolygonHole" );
btCutPolygonHole.setToolTipText( Messages.getMessage( getLocale(), "$MD11610" ) );
btCutPolygonHole.setBounds( 76, 41, 30, 30 );
btCutPolygonHole.addActionListener( buttonselectListener );
btCutPolygonHole.addFocusListener( focusListener );
btCutPolygonHole.setVisible( "true".equals( prop.get( "cutPolygonHole" ) ) );
}
{
btDrawSizedRect = new JToggleButton( getImageIcon( "rect_create_by_size.gif" ) );
createPanel.add( btDrawSizedRect );
btDrawSizedRect.setToolTipText( Messages.getMessage( getLocale(), "$MD11086" ) );
btDrawSizedRect.setBounds(41, 82, 30, 30);
btDrawSizedRect.addFocusListener( focusListener );
btDrawSizedRect.setActionCommand( "drawSizedRectangle" );
btDrawSizedRect.addActionListener( buttonselectListener );
btDrawSizedRect.setVisible( "true".equals( prop.get( "drawSizedRectangle" ) ) );
mainButtonGroup.add( btDrawSizedRect );
}
{
btDrawArc = new JButton( getImageIcon( "arcdraw_create.gif" ) );
createPanel.add( btDrawArc );
btDrawArc.setToolTipText( Messages.getMessage( getLocale(), "$MD11084" ) );
btDrawArc.setBounds(75, 123, 30, 30);
btDrawArc.addActionListener( new ActionListener() {
public void actionPerformed( ActionEvent e ) {
DrawArcDialog.create( digitizerModule );
unselectAll();
}
} );
btDrawArc.addFocusListener( focusListener );
btDrawArc.setVisible( "true".equals( prop.get( "drawArc" ) ) );
}
{
btDrawSizedEllipse = new JToggleButton( getImageIcon( "ellipse_create_by_size.png" ) );
createPanel.add( btDrawSizedEllipse );
btDrawSizedEllipse.setToolTipText( Messages.getMessage( getLocale(), "$MD11082" ) );
btDrawSizedEllipse.setBounds(111, 82, 30, 30);
btDrawSizedEllipse.addFocusListener( focusListener );
btDrawSizedEllipse.setActionCommand( "drawSizedEllipse" );
btDrawSizedEllipse.addActionListener( buttonselectListener );
btDrawSizedEllipse.setVisible( "true".equals( prop.get( "drawSizedEllipse" ) ) );
mainButtonGroup.add( btDrawSizedEllipse );
}
{
btDrawPointAt = new JButton( getImageIcon( "point_create_by_coords.gif" ) );
btDrawPointAt.setVisible( "true".equals( prop.get( "drawPointAt" ) ) );
mainButtonGroup.add( btDrawPointAt );
createPanel.add( btDrawPointAt );
btDrawPointAt.setToolTipText( Messages.getMessage( getLocale(), "$MD11081" ) );
btDrawPointAt.setBounds(41, 164, 30, 30);
btDrawPointAt.addFocusListener( focusListener );
btDrawPointAt.addActionListener( new ActionListener() {
public void actionPerformed( ActionEvent e ) {
unselectAll();
PointByCoordinateDialog dlg = new PointByCoordinateDialog( DigitizerFunctionSelectPanel.this,
digitizerModule );
org.deegree.model.spatialschema.Point pnt = dlg.getPoint();
if ( pnt != null ) {
digitizerModule.setDigitizingAction( "drawPoint" );
List<Geometry> list = new ArrayList<Geometry>();
list.add( pnt );
digitizerModule.mouseActionFinished( list, -1 );
}
}
} );
}
{
btDrawParallel = new JButton( getImageIcon( "parallel.png" ) );
btDrawParallel.setVisible( "true".equals( prop.get( "drawParallel" ) ) );
createPanel.add( btDrawParallel );
btDrawParallel.setToolTipText( Messages.getMessage( getLocale(), "$MD11088" ) );
btDrawParallel.setBounds(41, 123, 30, 30);
btDrawParallel.addFocusListener( focusListener );
btDrawParallel.addActionListener( new ActionListener() {
public void actionPerformed( ActionEvent e ) {
MapModel mapModel = appContainer.getMapModel( null );
List<Layer> list = mapModel.getLayersSelectedForAction( MapModel.SELECTION_EDITING );
Layer layer = list.get( 0 );
if ( layer.getSelectedFeatures().size() == 0 ) {
DialogFactory.openErrorDialog( "application", DigitizerFunctionSelectPanel.this,
Messages.getMessage( getLocale(), "$MD11286" ),
Messages.getMessage( getLocale(), "$MD11287" ) );
return;
}
new ParallelDialog( DigitizerFunctionSelectPanel.this, digitizerModule );
}
} );
}
{
btSetDigitizeAngle = new JButton( getImageIcon( "angle.png" ) );
createPanel.add( btSetDigitizeAngle );
btSetDigitizeAngle.setToolTipText( Messages.getMessage( getLocale(), "$MD11090" ) );
btSetDigitizeAngle.setBounds(112, 5, 30, 30);
btSetDigitizeAngle.addFocusListener( focusListener );
btSetDigitizeAngle.setVisible( "true".equals( prop.get( "setDigitizeAngle" ) ) );
btSetDigitizeAngle.addActionListener( new ActionListener() {
public void actionPerformed( ActionEvent e ) {
new ArcndLengthDialog( DigitizerFunctionSelectPanel.this, digitizerModule );
}
} );
}
{
btDrawPolygonByFillingHole = new JToggleButton( IconRegistry.getIcon( "paintcan.png" ) );
createPanel.add( btDrawPolygonByFillingHole );
btDrawPolygonByFillingHole.setToolTipText( Messages.getMessage( getLocale(), "$MD11291" ) );
btDrawPolygonByFillingHole.setBounds( 112, 41, 30, 30 );
btDrawPolygonByFillingHole.addFocusListener( focusListener );
btDrawPolygonByFillingHole.setActionCommand( "drawPolygonByFillingHole" );
btDrawPolygonByFillingHole.addActionListener( buttonselectListener );
btDrawPolygonByFillingHole.setVisible( "true".equals( prop.get( "drawPolygonByFillingHole" ) ) );
mainButtonGroup.add( btDrawPolygonByFillingHole );
}
{
btJoinCurves = new JButton( "CL" );
createPanel.add( btJoinCurves );
btJoinCurves.setBounds(112, 123, 30, 30);
btJoinCurves.setToolTipText( Messages.getMessage( getLocale(), "$MD11614" ) );
btJoinCurves.addActionListener( new ActionListener() {
public void actionPerformed( ActionEvent e ) {
JoinCurveDialog.create( digitizerModule );
unselectAll();
}
} );
btJoinCurves.addFocusListener( focusListener );
btJoinCurves.setVisible( "true".equals( prop.get( "joinCurves" ) ) );
mainButtonGroup.add( btJoinCurves );
}
}
private Icon getImageIcon( String image ) {
URL url = DigitizerFunctionSelectPanel.class.getResource( "resources/" + image );
return IconRegistry.getIcon( url );
}
private void fillTreeModel() {
DefaultTreeModel treeModel = (DefaultTreeModel) optionTree.getModel();
DefaultMutableTreeNode root = new DefaultMutableTreeNode( Messages.getMessage( getLocale(), "$MD10231" ) );
JPanel panel = new OptionsPanel();
root.setUserObject( panel );
optionsplit.add( panel, JSplitPane.RIGHT );
optionsplit.invalidate();
optionsplit.repaint();
root.removeAllChildren();
treeModel.setRoot( root );
optionTree.setModel( treeModel );
DefaultMutableTreeNode vertices = new DefaultMutableTreeNode( "-" );
vertices.setUserObject( new VerticesOptionsPanel( appContainer ) );
DefaultMutableTreeNode lines = new DefaultMutableTreeNode( "-" );
lines.setUserObject( new LineOptionsPanel( appContainer ) );
root.add( vertices );
root.add( lines );
}
/**
*
* @return additional parameters that may be assigned to a selected action
*/
public Map<String, Object> getSelectionParameters() {
return selectionParams;
}
/**
*
* @return digitizing options
*/
public Map<String, Object> getOptions() {
return options;
}
/*
* (non-Javadoc)
*
* @seeorg.deegree.igeo.views.swing.editfeature.DigitizerFunctionSelect#registerDigitizerModule(org.deegree.client.
* application.modules.DigitizerModule)
*/
@SuppressWarnings("unchecked")
public void registerDigitizerModule( DigitizerModule<?> digitizerModule ) {
this.digitizerModule = (DigitizerModule<Container>) digitizerModule;
}
/*
* (non-Javadoc)
*
* @see org.deegree.igeo.views.swing.digitize.DigitizerFunctionSelect#unselectAll()
*/
public void unselectAll() {
mainButtonGroup.removeSelection();
}
/*
* (non-Javadoc)
*
* @see org.deegree.igeo.views.swing.digitize.DigitizerFunctionSelect#selectFunction(java.lang.String)
*/
public void selectFunction( String name ) {
if ( !selectFunction( name, this ) ) {
LOG.logWarning( "no function with name: " + name + " available" );
}
}
private boolean selectFunction( String name, JComponent parent ) {
Component[] components = parent.getComponents();
for ( Component component : components ) {
if ( component instanceof AbstractButton ) {
if ( name.equals( ( (AbstractButton) component ).getActionCommand() ) ) {
( (AbstractButton) component ).doClick();
this.invalidate();
this.getParent().repaint();
return true;
}
} else {
if ( selectFunction( name, (JComponent) component ) ) {
return true;
}
}
}
return false;
}
// ///////////////////////////////////////////////////////////////////////////////
// inner classes
// ///////////////////////////////////////////////////////////////////////////////
/**
*
*
*
* @author <a href="mailto:poth@lat-lon.de">Andreas Poth</a>
* @author last edited by: $Author$
*
* @version. $Revision$, $Date$
*/
private class ButtonSelectListener implements ActionListener, FocusListener {
/*
* (non-Javadoc)
*
* @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
*/
public void actionPerformed( ActionEvent e ) {
appContainer.resetToolbar();
AbstractButton button = (AbstractButton) e.getSource();
if ( digitizerModule != null ) {
if ( button instanceof JToggleButton ) {
// inform registered DigitizerModule about current selected action
digitizerModule.setDigitizingAction( button.getActionCommand() );
setExplainationText( button );
} else {
// must be a JButton
digitizerModule.performDigitizingAction( button.getActionCommand() );
}
}
}
/*
* (non-Javadoc)
*
* @see java.awt.event.FocusListener#focusGained(java.awt.event.FocusEvent)
*/
public void focusGained( FocusEvent e ) {
AbstractButton button = (AbstractButton) e.getSource();
setExplainationText( button );
}
/*
* (non-Javadoc)
*
* @see java.awt.event.FocusListener#focusLost(java.awt.event.FocusEvent)
*/
public void focusLost( FocusEvent e ) {
// taCreateDescriptionTA.setText( "" );
// editDescriptionTA.setText( "" );
}
private void setExplainationText( AbstractButton button ) {
if ( btSelectForInsert == button ) {
taCreateDescriptionTA.setText( Messages.getMessage( getLocale(), "$MD10232" ) );
} else if ( selectPerFilter == button ) {
taCreateDescriptionTA.setText( Messages.getMessage( getLocale(), "$MD10233" ) );
} else if ( btDrawRectangle == button ) {
taCreateDescriptionTA.setText( Messages.getMessage( getLocale(), "$MD10234" ) );
} else if ( btDrawCircle == button ) {
taCreateDescriptionTA.setText( Messages.getMessage( getLocale(), "$MD10235" ) );
} else if ( fillArc == button ) {
taCreateDescriptionTA.setText( Messages.getMessage( getLocale(), "$MD10236" ) );
} else if ( btDrawArc == button ) {
taCreateDescriptionTA.setText( Messages.getMessage( getLocale(), "$MD10300" ) );
} else if ( btDrawPolygon == button ) {
taCreateDescriptionTA.setText( Messages.getMessage( getLocale(), "$MD10237" ) );
} else if ( btDrawPolygonHole == button ) {
taCreateDescriptionTA.setText( Messages.getMessage( getLocale(), "$MD10307" ) );
} else if ( btDrawLineString == button ) {
taCreateDescriptionTA.setText( Messages.getMessage( getLocale(), "$MD10238" ) );
} else if ( btDrawPoint == button ) {
taCreateDescriptionTA.setText( Messages.getMessage( getLocale(), "$MD10239" ) );
} else if ( select2ForEdit == button ) {
editDescriptionTA.setText( Messages.getMessage( getLocale(), "$MD10240" ) );
} else if ( select2PerLine == button ) {
editDescriptionTA.setText( Messages.getMessage( getLocale(), "$MD10241" ) );
} else if ( select2PerPolygon == button ) {
editDescriptionTA.setText( Messages.getMessage( getLocale(), "$MD10242" ) );
} else if ( select2PerFilter == button ) {
editDescriptionTA.setText( Messages.getMessage( getLocale(), "$MD10243" ) );
} else if ( insertVertex == button ) {
editDescriptionTA.setText( Messages.getMessage( getLocale(), "$MD10244" ) );
} else if ( moveVertex == button ) {
editDescriptionTA.setText( Messages.getMessage( getLocale(), "$MD10245" ) );
} else if ( deleteVertex == button ) {
editDescriptionTA.setText( Messages.getMessage( getLocale(), "$MD10246" ) );
} else if ( mergeVertices == button ) {
editDescriptionTA.setText( Messages.getMessage( getLocale(), "$MD10247" ) );
} else if ( splitLine == button ) {
editDescriptionTA.setText( Messages.getMessage( getLocale(), "$MD10248" ) );
} else if ( splitPolygon == button ) {
editDescriptionTA.setText( Messages.getMessage( getLocale(), "$MD10249" ) );
} else if ( groupPoints == button ) {
editDescriptionTA.setText( Messages.getMessage( getLocale(), "$MD10250" ) );
} else if ( groupLines == button ) {
editDescriptionTA.setText( Messages.getMessage( getLocale(), "$MD10251" ) );
} else if ( groupPolygons == button ) {
editDescriptionTA.setText( Messages.getMessage( getLocale(), "$MD10252" ) );
} else if ( ungroupMultiPoint == button ) {
editDescriptionTA.setText( Messages.getMessage( getLocale(), "$MD10253" ) );
} else if ( ungroupMultiCurve == button ) {
editDescriptionTA.setText( Messages.getMessage( getLocale(), "$MD10254" ) );
} else if ( ungroupMultiPolygon == button ) {
editDescriptionTA.setText( Messages.getMessage( getLocale(), "$MD10255" ) );
} else if ( deleteFeature == button ) {
editDescriptionTA.setText( Messages.getMessage( getLocale(), "$MD10256" ) );
} else if ( moveFeature == button ) {
editDescriptionTA.setText( Messages.getMessage( getLocale(), "$MD10257" ) );
} else if ( rotateFeature == button ) {
editDescriptionTA.setText( Messages.getMessage( getLocale(), "$MD10258" ) );
} else if ( unitePolygons == button ) {
editDescriptionTA.setText( Messages.getMessage( getLocale(), "$MD10274" ) );
} else if ( uniteLineStrings == button ) {
editDescriptionTA.setText( Messages.getMessage( getLocale(), "$MD10276" ) );
} else if ( btDrawPointAt == button ) {
taCreateDescriptionTA.setText( Messages.getMessage( getLocale(), "$MD11080" ) );
} else if ( btDrawSizedEllipse == button ) {
taCreateDescriptionTA.setText( Messages.getMessage( getLocale(), "$MD11083" ) );
} else if ( btDrawArc == button ) {
taCreateDescriptionTA.setText( Messages.getMessage( getLocale(), "$MD11085" ) );
} else if ( btDrawSizedRect == button ) {
taCreateDescriptionTA.setText( Messages.getMessage( getLocale(), "$MD11087" ) );
} else if ( btDrawParallel == button ) {
taCreateDescriptionTA.setText( Messages.getMessage( getLocale(), "$MD11089" ) );
} else if ( btSetDigitizeAngle == button ) {
taCreateDescriptionTA.setText( Messages.getMessage( getLocale(), "$MD11091" ) );
} else if ( btDrawPolygonByFillingHole == button ) {
taCreateDescriptionTA.setText( Messages.getMessage( getLocale(), "$MD11292" ) );
} else if ( btJoinCurves == button ) {
taCreateDescriptionTA.setText( Messages.getMessage( getLocale(), "$MD11584" ) );
} else if ( btCutPolygonHole == button ) {
taCreateDescriptionTA.setText( Messages.getMessage( getLocale(), "$MD11611" ) );
}
}
}
@Override
public boolean isFocusable() {
return true;
}
// ///////////////////////////////////////////////////////////////////////////////////
// inner classes
// ///////////////////////////////////////////////////////////////////////////////////
/**
*
*
*
* @author <a href="mailto:poth@lat-lon.de">Andreas Poth</a>
* @author last edited by: $Author$
*
* @version. $Revision$, $Date$
*/
private class OptionsMouseListener extends MouseAdapter {
@Override
public void mouseClicked( MouseEvent event ) {
Point dropPoint = event.getPoint();
TreePath path = optionTree.getPathForLocation( dropPoint.x, dropPoint.y );
if ( path != null ) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent();
Component[] comps = optionsplit.getComponents();
for ( Component component : comps ) {
if ( component instanceof JPanel ) {
optionsplit.remove( component );
}
}
JPanel panel = (JPanel) node.getUserObject();
optionsplit.add( panel, JSplitPane.RIGHT );
optionsplit.invalidate();
optionsplit.repaint();
}
}
}
/**
*
*
*
* @author <a href="mailto:poth@lat-lon.de">Andreas Poth</a>
* @author last edited by: $Author$
*
* @version. $Revision$, $Date$
*/
private class CellRenderer extends DefaultTreeCellRenderer {
private static final long serialVersionUID = -2295842834575094286L;
@Override
public Component getTreeCellRendererComponent( JTree tree, Object value, boolean selected, boolean expanded,
boolean leaf, int row, boolean hasFocus ) {
super.getTreeCellRendererComponent( tree, value, selected, expanded, leaf, row, hasFocus );
setIcon( null );
return this;
}
}
/**
*
*
*
* @author <a href="mailto:poth@lat-lon.de">Andreas Poth</a>
* @author last edited by: $Author$
*
* @version. $Revision$, $Date$
*/
private class DFSPActionListener implements ActionListener {
private AbstractButton command;
/**
*
* @param command
*/
public DFSPActionListener( AbstractButton command ) {
this.command = command;
}
public void actionPerformed( ActionEvent e ) {
selectFunction( command.getActionCommand() );
}
}
/**
*
*
*
* @author <a href="mailto:poth@lat-lon.de">Andreas Poth</a>
* @author last edited by: $Author$
*
* @version. $Revision$, $Date$
*/
private class CreateShownListener extends ComponentAdapter {
@Override
public void componentShown( ComponentEvent event ) {
// KeyStroke keyStroke = KeyStroke.getKeyStroke( KeyEvent.getKeyText(KeyEvent.VK_H ) );
KeyListenerRegister.registerDefaultKeyListener( DigitizerFunctionSelectPanel.this );
// create actions
KeyStroke keyStroke = KeyStroke.getKeyStroke( KeyEvent.VK_S, InputEvent.CTRL_MASK );
registerKeyboardAction( new DFSPActionListener( btSelectForInsert ), keyStroke,
JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT );
keyStroke = KeyStroke.getKeyStroke( KeyEvent.VK_F, InputEvent.CTRL_MASK );
registerKeyboardAction( new DFSPActionListener( selectPerFilter ), keyStroke,
JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT );
keyStroke = KeyStroke.getKeyStroke( KeyEvent.VK_D, InputEvent.CTRL_MASK );
registerKeyboardAction( new DFSPActionListener( deleteFeature ), keyStroke,
JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT );
keyStroke = KeyStroke.getKeyStroke( KeyEvent.VK_R, InputEvent.CTRL_MASK );
registerKeyboardAction( new DFSPActionListener( btDrawRectangle ), keyStroke,
JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT );
keyStroke = KeyStroke.getKeyStroke( KeyEvent.VK_I, InputEvent.CTRL_MASK );
registerKeyboardAction( new DFSPActionListener( btDrawCircle ), keyStroke,
JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT );
keyStroke = KeyStroke.getKeyStroke( KeyEvent.VK_A, InputEvent.CTRL_MASK );
registerKeyboardAction( new DFSPActionListener( fillArc ), keyStroke,
JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT );
keyStroke = KeyStroke.getKeyStroke( KeyEvent.VK_P, InputEvent.CTRL_MASK );
registerKeyboardAction( new DFSPActionListener( btDrawPolygon ), keyStroke,
JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT );
keyStroke = KeyStroke.getKeyStroke( KeyEvent.VK_H, InputEvent.CTRL_MASK );
registerKeyboardAction( new DFSPActionListener( btDrawPolygonHole ), keyStroke,
JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT );
keyStroke = KeyStroke.getKeyStroke( KeyEvent.VK_B, InputEvent.CTRL_MASK );
registerKeyboardAction( new DFSPActionListener( btDrawArc ), keyStroke,
JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT );
keyStroke = KeyStroke.getKeyStroke( KeyEvent.VK_L, InputEvent.CTRL_MASK );
registerKeyboardAction( new DFSPActionListener( btDrawLineString ), keyStroke,
JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT );
keyStroke = KeyStroke.getKeyStroke( KeyEvent.VK_T, InputEvent.CTRL_MASK );
registerKeyboardAction( new DFSPActionListener( btDrawPoint ), keyStroke,
JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT );
}
}
/**
*
*
*
* @author <a href="mailto:poth@lat-lon.de">Andreas Poth</a>
* @author last edited by: $Author$
*
* @version. $Revision$, $Date$
*/
private class EditShownListener extends ComponentAdapter {
@Override
public void componentShown( ComponentEvent event ) {
// edit actions
KeyStroke keyStroke = KeyStroke.getKeyStroke( KeyEvent.VK_S, InputEvent.CTRL_MASK );
registerKeyboardAction( new DFSPActionListener( select2ForEdit ), keyStroke,
JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT );
keyStroke = KeyStroke.getKeyStroke( KeyEvent.VK_F, InputEvent.CTRL_MASK );
registerKeyboardAction( new DFSPActionListener( select2PerFilter ), keyStroke,
JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT );
keyStroke = KeyStroke.getKeyStroke( KeyEvent.VK_I, InputEvent.CTRL_MASK );
registerKeyboardAction( new DFSPActionListener( insertVertex ), keyStroke,
JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT );
keyStroke = KeyStroke.getKeyStroke( KeyEvent.VK_M, InputEvent.CTRL_MASK );
registerKeyboardAction( new DFSPActionListener( moveVertex ), keyStroke,
JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT );
keyStroke = KeyStroke.getKeyStroke( KeyEvent.VK_D, InputEvent.CTRL_MASK );
registerKeyboardAction( new DFSPActionListener( deleteVertex ), keyStroke,
JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT );
keyStroke = KeyStroke.getKeyStroke( KeyEvent.VK_E, InputEvent.CTRL_MASK );
registerKeyboardAction( new DFSPActionListener( mergeVertices ), keyStroke,
JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT );
keyStroke = KeyStroke.getKeyStroke( KeyEvent.VK_T, InputEvent.CTRL_MASK );
registerKeyboardAction( new DFSPActionListener( groupPoints ), keyStroke,
JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT );
keyStroke = KeyStroke.getKeyStroke( KeyEvent.VK_L, InputEvent.CTRL_MASK );
registerKeyboardAction( new DFSPActionListener( groupLines ), keyStroke,
JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT );
keyStroke = KeyStroke.getKeyStroke( KeyEvent.VK_P, InputEvent.CTRL_MASK );
registerKeyboardAction( new DFSPActionListener( groupPolygons ), keyStroke,
JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT );
keyStroke = KeyStroke.getKeyStroke( KeyEvent.VK_T, InputEvent.ALT_MASK | InputEvent.CTRL_MASK );
registerKeyboardAction( new DFSPActionListener( ungroupMultiPoint ), keyStroke,
JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT );
keyStroke = KeyStroke.getKeyStroke( KeyEvent.VK_L, InputEvent.ALT_MASK | InputEvent.CTRL_MASK );
registerKeyboardAction( new DFSPActionListener( ungroupMultiCurve ), keyStroke,
JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT );
keyStroke = KeyStroke.getKeyStroke( KeyEvent.VK_P, InputEvent.ALT_MASK | InputEvent.CTRL_MASK );
registerKeyboardAction( new DFSPActionListener( ungroupMultiPolygon ), keyStroke,
JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT );
keyStroke = KeyStroke.getKeyStroke( KeyEvent.VK_Z, InputEvent.CTRL_MASK );
registerKeyboardAction( new DFSPActionListener( deleteFeature ), keyStroke,
JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT );
keyStroke = KeyStroke.getKeyStroke( KeyEvent.VK_DELETE, 0 );
registerKeyboardAction( new DFSPActionListener( deleteFeature ), keyStroke,
JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT );
keyStroke = KeyStroke.getKeyStroke( KeyEvent.VK_O, InputEvent.CTRL_MASK );
registerKeyboardAction( new DFSPActionListener( moveFeature ), keyStroke,
JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT );
keyStroke = KeyStroke.getKeyStroke( KeyEvent.VK_R, InputEvent.CTRL_MASK );
registerKeyboardAction( new DFSPActionListener( rotateFeature ), keyStroke,
JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT );
}
}
}