Re: [Gvsig_desarrolladores] Propagar evento de eliminación de capa

Francisco José fpenarru en iver.es
Lun Ene 29 08:35:46 CET 2007


Hola a todos.

Lo que propones tiene sentido (sobre todo, para alguien que como yo, viene del C++).

Sin embargo, sin cambiar nada también se puede hacer lo que apuntas, y de una forma algo más adecuada, creo yo. (Lo mismo pasaría con el wakeUp, que no sería necesario si se hiciese lo siguiente (salvo que alguien diga lo contrario, yo no lo he probado):

Existe un interfaz llamado LayerCollectionListener. Una clase que implemente esto, se pone como escucha de la colección de layers que desee monitorizar: FLayers.

Si haces una clase dentro de tu extensión (o donde sea) que implemente LayerCollectionListener (o herede de LayerListenerAdapter y reimplemente solo las funciones que quieras), verás que recibes un evento (layerRemoving) con un parámetro LayerCollectionEvent al que le puedes pedir la capa que origina el evento (getAffectedLayer).

Ese evento se dispara justo antes de ir a borrar una capa. Si generas una excepción de tipo CancelationException, deberías abortar el borrado de la capa, si lo necesitas.

También tienes el evento layerRemoved, para cuando una capa ya ha sido borrada de la colección.

De esta forma, se evita meter en una clase código del tipo if ... instanceof .... porque suele dar problemas a la hora de tener un modelo extensible.

De todas formas, si no te sirve esta solución, o se estima oportuno por la gente de raster, que son los que metieron wakeUp, pues nada, se pone esa llamada y sin problemas.

Saludos.


-- 
Francisco José Peñarrubia
Equipo gvSIG

IVER T.I. S.A.
c/Salamanca 50
46005 Valencia
Spain





Más información sobre la lista de distribución gvSIG_desarrolladores