Revision 38514

View differences:

branches/v2_0_0_prep/libraries/libFMap_controls/src/org/gvsig/fmap/mapcontrol/MapControl.java
105 105
import org.gvsig.fmap.mapcontrol.tools.snapping.snappers.ISnapperGeometriesVectorial;
106 106
import org.gvsig.fmap.mapcontrol.tools.snapping.snappers.ISnapperRaster;
107 107
import org.gvsig.fmap.mapcontrol.tools.snapping.snappers.ISnapperVectorial;
108
import org.gvsig.tools.ToolsLocator;
109
import org.gvsig.tools.dispose.Disposable;
110
import org.gvsig.tools.dispose.impl.AbstractDisposable;
111
import org.gvsig.tools.exception.BaseException;
108 112
import org.gvsig.tools.observer.Observable;
109 113
import org.gvsig.tools.observer.Observer;
110 114
import org.gvsig.tools.task.Cancellable;
......
272 276
 * @author Pablo Piqueras Bartolom? (pablo.piqueras@iver.es)
273 277
 */
274 278
public class MapControl extends JComponent implements ComponentListener,
275
    Observer {
279
    Observer, Disposable {
276 280

  
277 281
    protected static final GeometryManager geomManager =
278 282
        GeometryLocator.getGeometryManager();
279
    protected static final Logger logger =
283
    private static final Logger LOG =
280 284
        LoggerFactory.getLogger(GeometryManager.class);
281 285

  
282 286
    /**
......
585 589
     */
586 590
    private MapControlDrawer mapControlDrawer = null;
587 591
	private Cursor transparentCursor;
592
	
593
	private boolean disposed = false;
588 594

  
589 595
    /**
590 596
     * <p>
......
654 660
                    }
655 661
                });
656 662
        initializeGrid();
663
        
664
        if(ToolsLocator.getDisposableManager() != null) {
665
			ToolsLocator.getDisposableManager().bind(this);
666
		} else {
667
			LOG.warn("Can't retrieve the disposable manager,");
668
		}
657 669
    }
658 670

  
659 671
    /**
......
1099 1111
        try {
1100 1112
            mapControlDrawer.startDrawing(this);
1101 1113
        } catch (InterruptedException e) {
1102
            logger.error("Error locking the MapControlDrawer", e);
1114
            LOG.error("Error locking the MapControlDrawer", e);
1103 1115
        }
1104 1116
        mapControlDrawer.setGraphics(g);
1105 1117
        mapControlDrawer.stopDrawing(this);
......
1429 1441
         */
1430 1442
        private boolean shutdown;
1431 1443

  
1444
		private Thread worker;
1445

  
1432 1446
        /**
1433 1447
         * <p>
1434 1448
         * Sets this <code>Drawer2</code>'s worker to finish or continue with
......
1440 1454
         */
1441 1455
        public void setShutdown(boolean isShutdown) {
1442 1456
            shutdown = isShutdown;
1457
            if (shutdown) {
1458
            	worker.interrupt();
1459
            }
1443 1460
        }
1444 1461

  
1445 1462
        /**
......
1466 1483
            waitingRequest = null;
1467 1484
            waiting = false;
1468 1485
            shutdown = false;
1469
            new Thread(new Worker(), "MapControl Drawer Worker").start();
1486
            worker = new Thread(new Worker(), "MapControl Drawer Worker");
1487
            worker.start();
1470 1488
        }
1471 1489

  
1472 1490
        /**
......
1552 1570
                    // System.out.println("Pintando");
1553 1571
                    if (image != null) {
1554 1572
                        cancelDrawing();
1555
                        p.paint();
1573
                        if (p != null) {
1574
                        	p.paint();
1575
                        }
1556 1576
                    } else {
1557 1577
                        status = DESACTUALIZADO;
1558 1578
                    }
......
1806 1826
                            vp.setEnvelope(geomManager.createEnvelope(x, y, x
1807 1827
                                + width, y + height, SUBTYPES.GEOM2D));
1808 1828
                        } catch (CreateEnvelopeException e1) {
1809
                            logger.error("Error creating the envelope", e);
1829
                            LOG.error("Error creating the envelope", e);
1810 1830
                        }
1811 1831
                    }
1812 1832

  
......
2430 2450

  
2431 2451
            e = Converter.convertEnvelopeToJTS(r);
2432 2452
        } catch (CreateEnvelopeException e1) {
2433
            logger.error("Error creating the envelope", e1);
2453
            LOG.error("Error creating the envelope", e1);
2434 2454
        }
2435 2455

  
2436 2456
        usedSnap = null;
......
2630 2650
            return getViewPort().toMapPoint(adjustedPoint);
2631 2651
        }
2632 2652
    }
2653

  
2654
	public synchronized void dispose() {
2655
		// Check if we have already been disposed, and don't do it again
2656
		if (!disposed && ToolsLocator.getDisposableManager().release(this)) {
2657
			drawer.setShutdown(true);
2658
			disposed = true;
2659
		}
2660
	}
2633 2661
}
branches/v2_0_0_prep/applications/appgvSIG/src/org/gvsig/app/project/documents/view/gui/AbstractViewPanel.java
29 29

  
30 30
import java.awt.Graphics;
31 31
import java.awt.image.BufferedImage;
32
import java.beans.PropertyChangeEvent;
33
import java.beans.PropertyChangeListener;
32 34

  
33 35
import javax.swing.JPanel;
34 36
import javax.swing.JSplitPane;
......
39 41
import org.gvsig.andami.messages.NotificationManager;
40 42
import org.gvsig.andami.ui.mdiManager.IWindowTransform;
41 43
import org.gvsig.andami.ui.mdiManager.WindowInfo;
44
import org.gvsig.app.project.ProjectManager;
42 45
import org.gvsig.app.project.documents.gui.WindowLayout;
43 46
import org.gvsig.app.project.documents.view.MapOverview;
44 47
import org.gvsig.app.project.documents.view.ViewDocument;
......
54 57
 */
55 58

  
56 59
public abstract class AbstractViewPanel extends JPanel implements IView,
57
    IWindowTransform {
60
    IWindowTransform, PropertyChangeListener {
58 61

  
59 62
    private static final long serialVersionUID = -259620280790490262L;
60 63

  
......
118 121
     * @see initialize()
119 122
     */
120 123
    public AbstractViewPanel() {
121
        // Do nothing
124
    	ProjectManager.getInstance().getCurrentProject().addPropertyChangeListener(this);
122 125
    }
123 126

  
124 127
    /**
......
305 308
    public void setWindowLayout(WindowLayout data) {
306 309
        windowLayout = data;
307 310
    }
311
    
312
	public void propertyChange(PropertyChangeEvent evt) {
313
		// Detect when the related document has been removed
314
		// and close or dispose whatever is needed
315
		if ("delDocument".equals(evt.getPropertyName())) {
316
			if (evt.getOldValue() != null
317
					&& evt.getOldValue() instanceof ViewDocument) {
318
				ViewDocument viewDocument = (ViewDocument) evt.getOldValue();
319
				ViewDocument myViewDocument = getViewDocument();
320
				if (myViewDocument != null
321
						&& myViewDocument.equals(viewDocument)) {
322
					m_MapControl.dispose();
323
					m_MapLoc.dispose();
324
				}
325
			}
326
		}
327
	}
308 328
}

Also available in: Unified diff