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

Diff of /branches/2.1/src/skrueger/geotools/selection/ChartSelectionSynchronizer.java

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

trunk/src/skrueger/geotools/selection/ChartSelectionSynchronizer.java revision 130 by mojays, Sat May 30 16:34:00 2009 UTC branches/2.0-RC2/src/skrueger/geotools/selection/ChartSelectionSynchronizer.java revision 621 by alfonx, Thu Jan 28 10:06:05 2010 UTC
# Line 1  Line 1 
1  /** SCHMITZM - This file is part of the java library of Martin O.J. Schmitz (SCHMITZM)  /*******************************************************************************
2     * Copyright (c) 2009 Martin O. J. Schmitz.
3      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.   *
4      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.   * This file is part of the SCHMITZM library - a collection of utility
5      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., 51 Franklin St, Fifth Floor, Boston, MA 02110, USA   * classes based on Java 1.6, focusing (not only) on Java Swing
6     * and the Geotools library.
7      Diese Bibliothek ist freie Software; Sie dürfen sie unter den Bedingungen der GNU Lesser General Public License, wie von der Free Software Foundation veröffentlicht, weiterverteilen und/oder modifizieren; entweder gemäß Version 2.1 der Lizenz oder (nach Ihrer Option) jeder späteren Version.   *
8      Diese Bibliothek wird in der Hoffnung weiterverbreitet, daß sie nützlich sein wird, jedoch OHNE IRGENDEINE GARANTIE, auch ohne die implizierte Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN ZWECK. Mehr Details finden Sie in der GNU Lesser General Public License.   * The SCHMITZM project is hosted at:
9      Sie sollten eine Kopie der GNU Lesser General Public License zusammen mit dieser Bibliothek erhalten haben; falls nicht, schreiben Sie an die Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110, USA.   * http://wald.intevation.org/projects/schmitzm/
10   **/   *
11     * This program is free software; you can redistribute it and/or
12  package skrueger.geotools.selection;   * modify it under the terms of the GNU Lesser General Public License
13     * as published by the Free Software Foundation; either version 3
14  import java.beans.PropertyChangeEvent;   * of the License, or (at your option) any later version.
15  import java.beans.PropertyChangeListener;   *
16     * This program is distributed in the hope that it will be useful,
17  import javax.swing.JTable;   * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  import javax.swing.ListSelectionModel;   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19  import javax.swing.event.ListSelectionListener;   * GNU General Public License for more details.
20     *
21  import org.jfree.chart.JFreeChart;   * You should have received a copy of the GNU Lesser General Public License (license.txt)
22  import org.jfree.data.general.Dataset;   * 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  import schmitzm.jfree.chart.renderer.SelectionRenderer;   * or try this link: http://www.gnu.org/licenses/lgpl.html
25  import schmitzm.jfree.chart.selection.DatasetSelectionListener;   *
26  import schmitzm.jfree.chart.selection.DatasetSelectionModel;   * Contributors:
27  import schmitzm.jfree.chart.selection.SelectionChangeEvent;   *     Martin O. J. Schmitz - initial API and implementation
28     *     Stefan A. Krüger - additional utility classes
29  /**   ******************************************************************************/
30   * This class keeps the selection of a {@link Dataset} (based on feature  package skrueger.geotools.selection;
31   * attributes) synchronized with the {@link StyledLayerSelectionModel} of a layer.  
32   * This is done by implementing:  import java.beans.PropertyChangeEvent;
33   * <ul>  import java.beans.PropertyChangeListener;
34   * <li>a {@link PropertyChangeListener} which listens to the  import java.util.Vector;
35   * {@link StyledLayerSelectionModel} and accordingly changes the {@link SelectionRenderer}  
36   * selection</li>  import org.jfree.data.general.Dataset;
37   * <li>a {@link DatasetSelectionModel} which listens to the {@link SelectionRenderer} and  
38   * accordingly changes the {@link StyledLayerSelectionModel} selection</li>  import schmitzm.jfree.chart.renderer.SelectionRenderer;
39   * </ul>  import schmitzm.jfree.chart.selection.DatasetSelectionChangeEvent;
40   * After creating, the instance of this synchronizer must be added as listener  import schmitzm.jfree.chart.selection.DatasetSelectionListener;
41   * to both, the {@link StyledLayerSelectionModel} and the chart's  import schmitzm.jfree.chart.selection.DatasetSelectionModel;
42   * {@link SelectionRenderer}.  import schmitzm.jfree.chart.selection.DatasetSelectionModelProvider;
43   *  import schmitzm.jfree.feature.FeatureDatasetSelectionModel;
44   * @author <a href="mailto:[email protected]">Martin Schmitz</a>  
45   */  /**
46  public class ChartSelectionSynchronizer extends StyledLayerSelectionModelSynchronizer<StyledFeatureLayerSelectionModel>   * This class keeps the selection of a {@link Dataset} (based on feature
47                                          implements DatasetSelectionListener   * 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     * Creates a new synchronizer.   * {@link StyledLayerSelectionModel} and accordingly changes the {@link SelectionRenderer}
52     * @param layerSelModel   * selection</li>
53     */   * <li>a {@link DatasetSelectionModel} which listens to the {@link SelectionRenderer} and
54    public ChartSelectionSynchronizer(StyledFeatureLayerSelectionModel layerSelModel) {   * accordingly changes the {@link StyledLayerSelectionModel} selection</li>
55      super(layerSelModel);   * </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    @Override   * {@link DatasetSelectionModel} (e.g. the renderer).
59    public void propertyChange(PropertyChangeEvent evt) {   * @see DatasetSelectionModelProvider
60      // TODO apply selection changes to the ChartSelectionModel   * @author <a href="mailto:[email protected]">Martin Schmitz</a>
61    }   */
62    public class ChartSelectionSynchronizer extends StyledLayerSelectionModelSynchronizer<StyledFeatureLayerSelectionModel>
63    @Override                                          implements DatasetSelectionListener {
64    public void selectionChanged(SelectionChangeEvent e) {  
65      // TODO Auto-generated method stub    /** Holds the chart datset to keep synchronized with the layer selection model. */
66          protected FeatureDatasetSelectionModel<?,?,?> datasetSelModel = null;
67    }  
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      public ChartSelectionSynchronizer(StyledFeatureLayerSelectionModel layerSelModel, FeatureDatasetSelectionModel<?,?,?> datasetSelModel) {
78        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            
92            if (!isEnabled())
93                    return;
94              
95        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    }

Legend:
Removed from v.130  
changed lines
  Added in v.621

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26