Statistics
| Revision:

root / trunk / extensions / extCAD / src / com / iver / cit / gvsig / gui / cad / tools / SelectionCADTool.java @ 6117

History | View | Annotate | Download (15.7 KB)

1 3832 caballero
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
4
 *
5
 * This program is free software; you can redistribute it and/or
6
 * modify it under the terms of the GNU General Public License
7
 * as published by the Free Software Foundation; either version 2
8
 * of the License, or (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, write to the Free Software
17
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
18
 *
19
 * For more information, contact:
20
 *
21
 *  Generalitat Valenciana
22
 *   Conselleria d'Infraestructures i Transport
23
 *   Av. Blasco Ib??ez, 50
24
 *   46010 VALENCIA
25
 *   SPAIN
26
 *
27
 *      +34 963862235
28
 *   gvsig@gva.es
29
 *      www.gvsig.gva.es
30
 *
31
 *    or
32
 *
33
 *   IVER T.I. S.A
34
 *   Salamanca 50
35
 *   46005 Valencia
36
 *   Spain
37
 *
38
 *   +34 963163400
39
 *   dac@iver.es
40
 */
41
package com.iver.cit.gvsig.gui.cad.tools;
42
43 4522 caballero
import java.awt.Color;
44
import java.awt.Graphics;
45
import java.awt.Graphics2D;
46 4637 caballero
import java.awt.Image;
47 4522 caballero
import java.awt.event.InputEvent;
48 5105 caballero
import java.awt.event.MouseEvent;
49 4522 caballero
import java.awt.geom.Point2D;
50 4637 caballero
import java.io.IOException;
51 4522 caballero
import java.util.ArrayList;
52 4365 caballero
53 5105 caballero
import com.hardcode.driverManager.DriverLoadException;
54 4522 caballero
import com.iver.andami.PluginServices;
55 3883 caballero
import com.iver.cit.gvsig.CADExtension;
56 5105 caballero
import com.iver.cit.gvsig.fmap.MapControl;
57 4637 caballero
import com.iver.cit.gvsig.fmap.ViewPort;
58 3832 caballero
import com.iver.cit.gvsig.fmap.core.GeneralPathX;
59
import com.iver.cit.gvsig.fmap.core.Handler;
60 4016 caballero
import com.iver.cit.gvsig.fmap.core.IFeature;
61 3832 caballero
import com.iver.cit.gvsig.fmap.core.IGeometry;
62
import com.iver.cit.gvsig.fmap.core.ShapeFactory;
63 5105 caballero
import com.iver.cit.gvsig.fmap.core.v02.FLabel;
64 4637 caballero
import com.iver.cit.gvsig.fmap.drivers.DriverIOException;
65 5909 caballero
import com.iver.cit.gvsig.fmap.edition.AnnotationEditableAdapter;
66
import com.iver.cit.gvsig.fmap.edition.DefaultRowEdited;
67 4124 fjp
import com.iver.cit.gvsig.fmap.edition.IRowEdited;
68 5909 caballero
import com.iver.cit.gvsig.fmap.edition.UtilFunctions;
69 4124 fjp
import com.iver.cit.gvsig.fmap.edition.VectorialEditableAdapter;
70 5105 caballero
import com.iver.cit.gvsig.fmap.layers.FLayer;
71
import com.iver.cit.gvsig.fmap.layers.FLyrAnnotation;
72
import com.iver.cit.gvsig.fmap.layers.FLyrVect;
73 5205 caballero
import com.iver.cit.gvsig.gui.Table;
74 5105 caballero
import com.iver.cit.gvsig.gui.View;
75 3832 caballero
import com.iver.cit.gvsig.gui.cad.CADTool;
76
import com.iver.cit.gvsig.gui.cad.DefaultCADTool;
77 5735 caballero
import com.iver.cit.gvsig.gui.cad.exception.CommandException;
78 3832 caballero
import com.iver.cit.gvsig.gui.cad.tools.smc.SelectionCADToolContext;
79
import com.iver.cit.gvsig.gui.cad.tools.smc.SelectionCADToolContext.SelectionCADToolState;
80 6117 jaume
import com.iver.cit.gvsig.gui.panels.TextFieldEdit;
81 4365 caballero
import com.iver.cit.gvsig.layers.VectorialLayerEdited;
82 3832 caballero
83
/**
84
 * DOCUMENT ME!
85 4465 caballero
 *
86 3832 caballero
 * @author Vicente Caballero Navarro
87
 */
88
public class SelectionCADTool extends DefaultCADTool {
89 5817 fjp
        public static int tolerance = 4;
90 3832 caballero
91 4016 caballero
        private SelectionCADToolContext _fsm;
92 3832 caballero
93 5207 caballero
        protected Point2D firstPoint;
94 3883 caballero
95 4637 caballero
        //private Point2D lastPoint;
96 3832 caballero
97
98 4708 caballero
99 5207 caballero
        protected String nextState;
100 4637 caballero
// Registros de los que se ha sleccionado alg?n handler.
101 5207 caballero
        protected ArrayList rowselectedHandlers=new ArrayList();
102
        protected String type=PluginServices.getText(this,"simple");
103
        protected ArrayList pointsPolygon=new ArrayList();
104 5908 caballero
105
        protected boolean multipleSelection=false;
106 4016 caballero
        /**
107 5196 caballero
         * Crea un nuevo SelectionCADTool.
108 4016 caballero
         */
109
        public SelectionCADTool() {
110
        }
111
        /**
112
         * M?todo de incio, para poner el c?digo de todo lo que se requiera de una
113
         * carga previa a la utilizaci?n de la herramienta.
114
         */
115
        public void init() {
116
                _fsm = new SelectionCADToolContext(this);
117
                setNextTool("selection");
118 4708 caballero
                setType(PluginServices.getText(this,"simple"));
119 4016 caballero
        }
120 3847 caballero
121 4016 caballero
        /*
122
         * (non-Javadoc)
123 4465 caballero
         *
124 4016 caballero
         * @see com.iver.cit.gvsig.gui.cad.CADTool#transition(com.iver.cit.gvsig.fmap.layers.FBitSet,
125
         *      double, double)
126
         */
127 4313 fjp
        public void transition(double x, double y, InputEvent event) {
128 4448 fjp
                System.out.println("TRANSICION DESDE ESTADO " + _fsm.getState()
129
                                + " x= " + x + " y=" + y);
130 5171 caballero
                try{
131 4324 caballero
                _fsm.addPoint(x, y, event);
132 5171 caballero
                }catch (Exception e) {
133
                        init();
134
                }
135 4445 fjp
                System.out.println("ESTADO ACTUAL: " + getStatus());
136 5196 caballero
137 5174 fjp
                // ESTO LO QUITO POR AHORA, PERO PUEDE QUE LO NECESITEMOS VOLVER A PONER.
138
                // Lo he quitado porque cuando seleccionas algo con CAD, molesta que
139
                // te hagan un redibujado.
140 5205 caballero
                FLyrVect lv=(FLyrVect)((VectorialLayerEdited)CADExtension.getEditionManager().getActiveLayerEdited()).getLayer();
141
                //lv.getSource().getRecordset().getSelectionSupport().fireSelectionEvents();
142
                com.iver.andami.ui.mdiManager.View[] views = (com.iver.andami.ui.mdiManager.View[]) PluginServices.getMDIManager().getAllViews();
143
144
                for (int i=0 ; i<views.length ; i++){
145
                        if (views[i] instanceof Table){
146
                                Table table=(Table)views[i];
147
                                if (table.getModel().getAssociatedTable()!=null && table.getModel().getAssociatedTable().equals(lv))
148
                                        table.updateSelection();
149
                        }
150
                }
151 4016 caballero
        }
152 3847 caballero
153 4016 caballero
        /*
154
         * (non-Javadoc)
155 4465 caballero
         *
156 4016 caballero
         * @see com.iver.cit.gvsig.gui.cad.CADTool#transition(com.iver.cit.gvsig.fmap.layers.FBitSet,
157
         *      double)
158
         */
159
        public void transition(double d) {
160 5735 caballero
                _fsm.addValue(d);
161 4016 caballero
        }
162 3847 caballero
163 4016 caballero
        /*
164
         * (non-Javadoc)
165 4465 caballero
         *
166 4016 caballero
         * @see com.iver.cit.gvsig.gui.cad.CADTool#transition(com.iver.cit.gvsig.fmap.layers.FBitSet,
167
         *      java.lang.String)
168
         */
169 5735 caballero
        public void transition(String s) throws CommandException {
170 4892 caballero
                if (!super.changeCommand(s)){
171 5171 caballero
                        _fsm.addOption(s);
172 4892 caballero
            }
173 4016 caballero
        }
174 4144 fjp
175 4445 fjp
        public String getNextState() {
176
                return nextState;
177 4058 caballero
        }
178 4144 fjp
179 5196 caballero
        protected void pointDoubleClick(MapControl map) {
180 5105 caballero
                try {
181
                        FLayer[] actives = map.getMapContext()
182
            .getLayers().getActives();
183
            for (int i=0; i < actives.length; i++){
184
                if (actives[i] instanceof FLyrAnnotation && actives[i].isEditing()) {
185
                    FLyrAnnotation lyrAnnotation = (FLyrAnnotation) actives[i];
186
187
                            lyrAnnotation.setSelectedEditing();
188
                            lyrAnnotation.setInEdition(lyrAnnotation.getRecordset().getSelection().nextSetBit(0));
189
                            FLabel fl=lyrAnnotation.getLabel(lyrAnnotation.getInEdition());
190
                                        if (fl!=null){
191
192
                                                View vista=(View)PluginServices.getMDIManager().getActiveView();
193
                                                TextFieldEdit tfe=new TextFieldEdit(lyrAnnotation);
194
195
                                                tfe.show(vista.getMapControl().getViewPort().fromMapPoint(fl.getOrig()),vista.getMapControl());
196
                                        }
197
                }
198
            }
199
200
                } catch (DriverLoadException e) {
201
                        e.printStackTrace();
202
                } catch (com.iver.cit.gvsig.fmap.DriverException e) {
203
                        e.printStackTrace();
204
                }
205
206
}
207 4016 caballero
        /**
208 4118 caballero
         * Equivale al transition del prototipo pero sin pasarle como par? metro el
209 4016 caballero
         * editableFeatureSource que ya estar? creado.
210 4465 caballero
         *
211 4016 caballero
         * @param selection
212
         *            Bitset con las geometr?as que est?n seleccionadas.
213
         * @param x
214
         *            par?metro x del punto que se pase en esta transici?n.
215
         * @param y
216
         *            par?metro y del punto que se pase en esta transici?n.
217
         */
218 4365 caballero
        public void addPoint(double x, double y, InputEvent event) {
219 5225 caballero
                if (event!=null && ((MouseEvent)event).getClickCount()==2){
220 5105 caballero
                        pointDoubleClick((MapControl)event.getComponent());
221
                        return;
222
                }
223 4016 caballero
                SelectionCADToolState actualState = (SelectionCADToolState) _fsm
224
                                .getPreviousState();
225
                String status = actualState.getName();
226 4448 fjp
                System.out.println("PREVIOUSSTATE =" + status); // + "ESTADO ACTUAL: " +
227
                                                                                                                // _fsm.getState());
228 4637 caballero
                VectorialLayerEdited vle = getVLE();
229
                VectorialEditableAdapter vea=vle.getVEA();
230 4365 caballero
                ArrayList selectedHandler = vle.getSelectedHandler();
231
                ArrayList selectedRow = vle.getSelectedRow();
232 4491 fjp
                System.out.println("STATUS ACTUAL = " + _fsm.getTransition());
233 4448 fjp
                if (status.equals("Selection.FirstPoint")) {
234 4708 caballero
                        firstPoint=new Point2D.Double(x,y);
235
                        pointsPolygon.add(firstPoint);
236 4448 fjp
                } else if (status.equals("Selection.SecondPoint")) {
237 4491 fjp
                } else if (status.equals("Selection.WithFeatures")) {
238 4448 fjp
                } else if (status.equals("Selection.WithHandlers")) {
239 4637 caballero
                        vea.startComplexRow();
240 5909 caballero
                        ArrayList selectedRowsAux=new ArrayList();
241 4448 fjp
                        for (int i = 0; i < selectedRow.size(); i++) {
242
                                IRowEdited row = (IRowEdited) selectedRow.get(i);
243 5909 caballero
                                IFeature feat = (IFeature) row.getLinkedRow().cloneRow();
244
                                if (vea instanceof AnnotationEditableAdapter) {
245
246
                                IGeometry ig = feat.getGeometry();
247
                                        // Movemos la geometr?a
248
                    UtilFunctions.moveGeom(ig, x -
249
                            firstPoint.getX(), y - firstPoint.getY());
250
                                }else {
251
                                        // Movemos los handlers que hemos seleccionado
252
                                        // previamente dentro del m?todo select()
253
                                        for (int k = 0; k < selectedHandler.size(); k++) {
254
                                                Handler h = (Handler) selectedHandler.get(k);
255
                                                h.set(x, y);
256
                                        }
257 4016 caballero
                                }
258 5909 caballero
                                modifyFeature(row.getIndex(), feat);
259
                                selectedRowsAux.add(new DefaultRowEdited(feat,IRowEdited.STATUS_MODIFIED,row.getIndex()));
260 4448 fjp
                        }
261 5909 caballero
                        firstPoint=new Point2D.Double(x,y);
262 5985 caballero
                        vle.setSelectionCache(selectedRowsAux);
263
                        //clearSelection();
264
                        //selectedRow.addAll(selectedRowsAux);
265 4637 caballero
                        try {
266 6071 caballero
                                String description=PluginServices.getText(this,"move_handlers");
267
                                vea.endComplexRow(description);
268 4637 caballero
                        } catch (IOException e) {
269
                                e.printStackTrace();
270
                        } catch (DriverIOException e) {
271
                                e.printStackTrace();
272
                        }
273 4448 fjp
                }
274
        }
275 3832 caballero
276 4448 fjp
        /**
277
         * Receives second point
278
         * @param x
279
         * @param y
280
         * @return numFeatures selected
281
         */
282 4491 fjp
        public int selectWithSecondPoint(double x, double y, InputEvent event) {
283 4637 caballero
                VectorialLayerEdited vle = getVLE();
284
                PluginServices.getMDIManager().setWaitCursor();
285
                vle.selectWithSecondPoint(x,y);
286 4448 fjp
                ArrayList selectedRow = vle.getSelectedRow();
287
                PluginServices.getMDIManager().restoreCursor();
288
                if (selectedRow.size() > 0) {
289
                        nextState = "Selection.WithSelectedFeatures";
290
                } else
291
                        nextState = "Selection.FirstPoint";
292
                return selectedRow.size();
293 4016 caballero
        }
294 3832 caballero
295 4016 caballero
        /**
296
         * M?todo para dibujar la lo necesario para el estado en el que nos
297
         * encontremos.
298 4465 caballero
         *
299 4016 caballero
         * @param g
300
         *            Graphics sobre el que dibujar.
301
         * @param selectedGeometries
302
         *            BitSet con las geometr?as seleccionadas.
303
         * @param x
304
         *            par?metro x del punto que se pase para dibujar.
305
         * @param y
306
         *            par?metro x del punto que se pase para dibujar.
307
         */
308
        public void drawOperation(Graphics g, double x, double y) {
309
                SelectionCADToolState actualState = _fsm.getState();
310
                String status = actualState.getName();
311 4637 caballero
                VectorialLayerEdited vle = getVLE();
312 5595 fjp
                if (vle == null) return;
313 4365 caballero
                ArrayList selectedHandler = vle.getSelectedHandler();
314 4637 caballero
                ViewPort vp=vle.getLayer().getFMap().getViewPort();
315 5207 caballero
                if (status.equals("Selection.SecondPoint")) {
316 4144 fjp
                        // Dibuja el rect?ngulo de selecci?n
317 4016 caballero
                        GeneralPathX elShape = new GeneralPathX(GeneralPathX.WIND_EVEN_ODD,
318
                                        4);
319
                        elShape.moveTo(firstPoint.getX(), firstPoint.getY());
320
                        elShape.lineTo(x, firstPoint.getY());
321
                        elShape.lineTo(x, y);
322
                        elShape.lineTo(firstPoint.getX(), y);
323
                        elShape.lineTo(firstPoint.getX(), firstPoint.getY());
324
                        ShapeFactory.createPolyline2D(elShape).draw((Graphics2D) g,
325 4637 caballero
                                        vp,
326 4016 caballero
                                        CADTool.selectSymbol);
327 4637 caballero
                        Image img = vle.getSelectionImage();
328
                g.drawImage(img, 0, 0, null);
329
                return;
330 4708 caballero
                }else if (status.equals("Selection.WithHandlers")) {
331 4144 fjp
                        // Movemos los handlers que hemos seleccionado
332
                        // previamente dentro del m?todo select()
333
                        for (int k = 0; k < selectedHandler.size(); k++) {
334
                                Handler h = (Handler) selectedHandler.get(k);
335
                                h.set(x, y);
336
                        }
337
                        // Y una vez movidos los v?rtices (handles)
338
                        // redibujamos la nueva geometr?a.
339 4637 caballero
                        for (int i = 0; i < rowselectedHandlers.size(); i++) {
340
                                IRowEdited rowEd = (IRowEdited) rowselectedHandlers.get(i);
341 4448 fjp
                                IGeometry geom = ((IFeature) rowEd.getLinkedRow())
342
                                                .getGeometry().cloneGeometry();
343 4016 caballero
                                g.setColor(Color.gray);
344 4637 caballero
                                geom.draw((Graphics2D) g, vp, CADTool.modifySymbol);
345 4016 caballero
                        }
346 4637 caballero
                        return;
347
                }else{
348
                        try{
349
                        Image imgSel = vle.getSelectionImage();
350
                if (imgSel!=null)
351
                        g.drawImage(imgSel, 0, 0, null);
352
                Image imgHand = vle.getHandlersImage();
353
                if (imgHand!=null)
354
                        g.drawImage(imgHand, 0, 0, null);
355
                        }catch (Exception e) {
356
                        }
357 4016 caballero
                }
358
        }
359 3832 caballero
360 4016 caballero
        /**
361
         * Add a diferent option.
362 4465 caballero
         *
363 4016 caballero
         * @param sel
364
         *            DOCUMENT ME!
365
         * @param s
366
         *            Diferent option.
367
         */
368
        public void addOption(String s) {
369 4708 caballero
                SelectionCADToolState actualState = (SelectionCADToolState) _fsm
370
                                .getPreviousState();
371
                String status = actualState.getName();
372
                System.out.println("PREVIOUSSTATE =" + status); // + "ESTADO ACTUAL: " +
373
                // _fsm.getState());
374
                System.out.println("STATUS ACTUAL = " + _fsm.getTransition());
375
                if (s.equals(PluginServices.getText(this,"cancel"))){
376
                        init();
377
                        return;
378
                }
379
                if (status.equals("Selection.FirstPoint")) {
380
                        setType(s);
381 5171 caballero
                        return;
382 4708 caballero
                }
383 5171 caballero
                init();
384 4016 caballero
        }
385
386 4708 caballero
387 5207 caballero
388
389 4016 caballero
        /*
390
         * (non-Javadoc)
391 4465 caballero
         *
392 4016 caballero
         * @see com.iver.cit.gvsig.gui.cad.CADTool#addvalue(double)
393
         */
394
        public void addValue(double d) {
395
        }
396
397
        public String getStatus() {
398
                try {
399
                        SelectionCADToolState actualState = (SelectionCADToolState) _fsm
400
                                        .getPreviousState();
401
                        String status = actualState.getName();
402 4365 caballero
403 4016 caballero
                        return status;
404
                } catch (NullPointerException e) {
405 5196 caballero
                        return "Selection.FirstPoint";
406 3883 caballero
                }
407 4016 caballero
        }
408 3832 caballero
409 3883 caballero
410 4016 caballero
411 3883 caballero
        public void end() {
412 4708 caballero
                if (!getNextTool().equals("selection"))
413 4892 caballero
                        CADExtension.setCADTool(getNextTool(),false);
414 4016 caballero
        }
415 3883 caballero
416 4118 caballero
        public String getName() {
417 4584 caballero
                return PluginServices.getText(this,"selection_");
418 4118 caballero
        }
419 4445 fjp
420 4491 fjp
        public boolean selectFeatures(double x, double y, InputEvent event) {
421 4445 fjp
                SelectionCADToolState actualState = (SelectionCADToolState) _fsm
422 4448 fjp
                                .getState();
423 4445 fjp
424
                String status = actualState.getName();
425 4637 caballero
                VectorialLayerEdited vle = getVLE();
426 4445 fjp
427 4637 caballero
428 4448 fjp
                if ((status.equals("Selection.FirstPoint"))
429
                                || (status.equals("Selection.WithSelectedFeatures"))) {
430
                        PluginServices.getMDIManager().setWaitCursor();
431 4637 caballero
                        firstPoint = new Point2D.Double(x, y);
432 5908 caballero
                        vle.selectWithPoint(x,y,multipleSelection);
433 4448 fjp
                        PluginServices.getMDIManager().restoreCursor();
434
                }
435 4637 caballero
                ArrayList selectedRow = vle.getSelectedRow();
436 4448 fjp
                if (selectedRow.size() > 0) {
437 4445 fjp
                        nextState = "Selection.WithSelectedFeatures";
438
                        return true;
439 4448 fjp
                } else {
440
                        {
441
                                nextState = "Selection.SecondPoint";
442
                                return true;
443
                        }
444 4445 fjp
                }
445
        }
446
447 4491 fjp
        public int selectHandlers(double x, double y, InputEvent event) {
448 4445 fjp
                Point2D auxPoint = new Point2D.Double(x, y);
449
450 4637 caballero
                VectorialLayerEdited vle = getVLE();
451 4445 fjp
                ArrayList selectedHandler = vle.getSelectedHandler();
452
                ArrayList selectedRow = vle.getSelectedRow();
453 4448 fjp
                System.out.println("DENTRO DE selectHandlers. selectedRow.size= "
454
                                + selectedRow.size());
455 4445 fjp
                selectedHandler.clear();
456 4448 fjp
457 4445 fjp
                // Se comprueba si se pincha en una gemometr?a
458
                PluginServices.getMDIManager().setWaitCursor();
459
460
                double tam = getCadToolAdapter().getMapControl().getViewPort()
461
                                .toMapDistance(tolerance);
462 4448 fjp
463 4445 fjp
                Handler[] handlers = null;
464 4637 caballero
                rowselectedHandlers.clear();
465 4448 fjp
                for (int i = 0; i < selectedRow.size(); i++) {
466 4445 fjp
                        IRowEdited rowEd = (IRowEdited) selectedRow.get(i);
467 4448 fjp
468 4445 fjp
                        IFeature fea = (IFeature) rowEd.getLinkedRow();
469
                        handlers = fea.getGeometry().getHandlers(IGeometry.SELECTHANDLER);
470
                        // y miramos los handlers de cada entidad seleccionada
471
                        double min = tam;
472
                        // int hSel = -1;
473 4637 caballero
474 4445 fjp
                        for (int j = 0; j < handlers.length; j++) {
475
                                Point2D handlerPoint = handlers[j].getPoint();
476
                                double distance = auxPoint.distance(handlerPoint);
477
                                if (distance <= min) {
478
                                        min = distance;
479 4448 fjp
                                        // hSel = j;
480 4445 fjp
                                        selectedHandler.add(handlers[j]);
481 4637 caballero
                                        rowselectedHandlers.add(rowEd);
482 4445 fjp
                                }
483
                        }
484
                }
485
                PluginServices.getMDIManager().restoreCursor();
486 4448 fjp
487 4445 fjp
                int numHandlesSelected = selectedHandler.size();
488
489 4448 fjp
                /*
490
                 * if (numHandlesSelected == 0) selectFeatures(x,y);
491
                 */
492
493 4445 fjp
                return numHandlesSelected;
494
        }
495 4708 caballero
496
        public String getType() {
497
                return type;
498
        }
499
500
        public void setType(String type) {
501
                if (type.equals("S") || type.equals("s")){
502
                        this.type=PluginServices.getText(this,"simple");
503
                }else{
504
                        this.type = type;
505
                }
506
                pointsPolygon.clear();
507
        }
508 4892 caballero
509
        public String toString() {
510
                return "_selection";
511
        }
512 5908 caballero
        public void multipleSelection(boolean b) {
513
                multipleSelection=b;
514 5171 caballero
515 5908 caballero
        }
516
517 3832 caballero
}