Revision 38514
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