/[schmitzm]/trunk/src/skrueger/geotools/selection/ChartSelectionSynchronizer.java
ViewVC logotype

Annotation of /trunk/src/skrueger/geotools/selection/ChartSelectionSynchronizer.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 604 - (hide annotations)
Wed Dec 9 14:15:53 2009 UTC (15 years, 2 months ago) by alfonx
Original Path: branches/2.0-RC1/src/skrueger/geotools/selection/ChartSelectionSynchronizer.java
File size: 6101 byte(s)
2.0-RC1 branch ist für GP1.3 bugfixes...  1.0-gt2-2.6  ist der entwicklungs brnach 
1 alfonx 244 /*******************************************************************************
2     * Copyright (c) 2009 Martin O. J. Schmitz.
3     *
4     * This file is part of the SCHMITZM library - a collection of utility
5 alfonx 256 * classes based on Java 1.6, focusing (not only) on Java Swing
6 alfonx 244 * and the Geotools library.
7     *
8     * The SCHMITZM project is hosted at:
9     * http://wald.intevation.org/projects/schmitzm/
10     *
11     * This program is free software; you can redistribute it and/or
12     * modify it under the terms of the GNU Lesser General Public License
13     * as published by the Free Software Foundation; either version 3
14     * of the License, or (at your option) any later version.
15     *
16     * This program is distributed in the hope that it will be useful,
17     * but WITHOUT ANY WARRANTY; without even the implied warranty of
18     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19     * GNU General Public License for more details.
20     *
21     * You should have received a copy of the GNU Lesser General Public License (license.txt)
22     * along with this program; if not, write to the Free Software
23     * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
24     * or try this link: http://www.gnu.org/licenses/lgpl.html
25     *
26     * Contributors:
27     * Martin O. J. Schmitz - initial API and implementation
28     * Stefan A. Krüger - additional utility classes
29     ******************************************************************************/
30     package skrueger.geotools.selection;
31    
32     import java.beans.PropertyChangeEvent;
33     import java.beans.PropertyChangeListener;
34     import java.util.Vector;
35    
36     import org.jfree.data.general.Dataset;
37    
38     import schmitzm.jfree.chart.renderer.SelectionRenderer;
39     import schmitzm.jfree.chart.selection.DatasetSelectionChangeEvent;
40     import schmitzm.jfree.chart.selection.DatasetSelectionListener;
41     import schmitzm.jfree.chart.selection.DatasetSelectionModel;
42     import schmitzm.jfree.chart.selection.DatasetSelectionModelProvider;
43     import schmitzm.jfree.feature.FeatureDatasetSelectionModel;
44    
45     /**
46     * This class keeps the selection of a {@link Dataset} (based on feature
47     * attributes) synchronized with the {@link StyledLayerSelectionModel} of a layer.
48     * This is done by implementing:
49     * <ul>
50     * <li>a {@link PropertyChangeListener} which listens to the
51     * {@link StyledLayerSelectionModel} and accordingly changes the {@link SelectionRenderer}
52     * selection</li>
53     * <li>a {@link DatasetSelectionModel} which listens to the {@link SelectionRenderer} and
54     * accordingly changes the {@link StyledLayerSelectionModel} selection</li>
55     * </ul>
56     * After creating, the instance of this synchronizer must be added as listener
57     * to both, the {@link StyledLayerSelectionModel} and the chart's
58     * {@link DatasetSelectionModel} (e.g. the renderer).
59     * @see DatasetSelectionModelProvider
60     * @author <a href="mailto:[email protected]">Martin Schmitz</a>
61     */
62     public class ChartSelectionSynchronizer extends StyledLayerSelectionModelSynchronizer<StyledFeatureLayerSelectionModel>
63     implements DatasetSelectionListener {
64    
65     /** Holds the chart datset to keep synchronized with the layer selection model. */
66 mojays 289 protected FeatureDatasetSelectionModel<?,?,?> datasetSelModel = null;
67 alfonx 244
68     /**
69     * Creates a new synchronizer.
70     * @param layerSelModel
71     * layer selection model to keep synchronized with the dataset
72     * selection model
73     * @param datasetSelModel
74     * dataset selection model to keep synchronized with the layer
75     * selection model
76     */
77 mojays 289 public ChartSelectionSynchronizer(StyledFeatureLayerSelectionModel layerSelModel, FeatureDatasetSelectionModel<?,?,?> datasetSelModel) {
78 alfonx 244 super(layerSelModel);
79     this.datasetSelModel = datasetSelModel;
80     }
81    
82     /**
83     * Called by {@link StyledLayerSelectionModel} when the selection on other
84     * selection components (map, table, ...) has changed. When calling this
85     * method changes the dataset selection according to the
86     * {@link StyledLayerSelectionModel} selection.
87     * @param evt an event
88     */
89     @Override
90     public void propertyChange(PropertyChangeEvent evt) {
91 alfonx 487
92 alfonx 489 if (!isEnabled())
93 alfonx 487 return;
94    
95 alfonx 244 if (!(evt instanceof StyledLayerSelectionEvent))
96     return;
97     StyledLayerSelectionEvent selEvt = (StyledLayerSelectionEvent) evt;
98     // Only react on own layer and ignore events invoked by
99     // this component itself
100     if (selEvt.getEmitter() != layerSelModel || selectionChangeCausedByMe)
101     return;
102     // Apply new selection on chart (except this event is one of
103     // some more events)
104     Vector<String> newSelection = layerSelModel.getSelection();
105     if (newSelection == null)
106     return;
107    
108     // Avoid event circles in valueChanged(..)
109     selectionChangeCausedByMe = true;
110    
111     datasetSelModel.setValueIsAdjusting(true);
112     datasetSelModel.clearSelection();
113     for (String fID : newSelection)
114     datasetSelModel.setItemSelected(fID, true);
115     datasetSelModel.setValueIsAdjusting(false); // event is fired autmatically!
116    
117     // Danger of event circles in valueChanged(..) banned
118     selectionChangeCausedByMe = false;
119     }
120    
121     /**
122     * Called when the chart selection is changed by the user. When calling this
123     * method changes the selection of the {@link StyledLayerSelectionModel}.
124     * @param evt an event
125     */
126     @Override
127     public void selectionChanged(DatasetSelectionChangeEvent evt) {
128     // ignore event if it is part of multiple events
129     if (evt != null && evt.getSource().getValueIsAdjusting())
130     return;
131     // ignore event if it is caused by the ChartSelectionSynchronizer
132     if (selectionChangeCausedByMe)
133     return;
134    
135     // Avoid event circles in propertyChange(..)
136     selectionChangeCausedByMe = true;
137    
138     // reset the selection of the DpLayerSelectionModel
139     layerSelModel.setValueIsAdjusting(true);
140     layerSelModel.clearSelection();
141     for (String featureID : datasetSelModel.getSelectedFeatures())
142     layerSelModel.addSelection(featureID);
143     layerSelModel.setValueIsAdjusting(false);
144    
145     // Danger of event circles in propertyChange(..) banned
146     selectionChangeCausedByMe = false;
147     }
148    
149    
150     }

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26