1
|
/*
|
2
|
License: LGPL as per: http://www.gnu.org/copyleft/lesser.html
|
3
|
Dependancies: Context
|
4
|
$Id$
|
5
|
*/
|
6
|
|
7
|
// Ensure this object's dependancies are loaded.
|
8
|
mapbuilder.loadScript(baseDir+"/tool/ToolBase.js");
|
9
|
mapbuilder.loadScript(baseDir+"/model/Proj.js");
|
10
|
|
11
|
/**
|
12
|
* Controller for the locator map widget.
|
13
|
* Specify the context that this widget follows by setting the targetModel
|
14
|
* property in config.
|
15
|
* This will display the AOI of the target model using the AoiBox tool.
|
16
|
* This will also process mouse events (click and dragbox) to recenter the
|
17
|
* target model and includes coordinate projection transformations if required.
|
18
|
* Checking for extent limits is not yet implemented.
|
19
|
* @constructor
|
20
|
* @base ToolBase
|
21
|
* @author Adair
|
22
|
* @param toolNode The tool node from the config document for this tool
|
23
|
* @param model Reference to the widget object that creates this tool
|
24
|
*/
|
25
|
function ZoomToAoi(toolNode, model) {
|
26
|
ToolBase.apply(this, new Array(toolNode, model));
|
27
|
|
28
|
/**
|
29
|
* Target model loadModel change listener. This resets the projection objects
|
30
|
* if the target model changes.
|
31
|
* @param tool Pointer to this ZoomToAoi object.
|
32
|
*/
|
33
|
this.initProj = function( toolRef ) {
|
34
|
if( toolRef.model.doc && toolRef.targetModel.doc ) {
|
35
|
if ( toolRef.model.getSRS() != toolRef.targetModel.getSRS() ) {
|
36
|
toolRef.model.proj = new Proj( toolRef.model.getSRS() );
|
37
|
toolRef.targetModel.proj = new Proj( toolRef.targetModel.getSRS() );
|
38
|
}
|
39
|
}
|
40
|
}
|
41
|
this.setListeners = function( toolRef ) {
|
42
|
toolRef.model.addListener( "loadModel", toolRef.initProj, toolRef );
|
43
|
toolRef.targetModel.addListener( "loadModel", toolRef.initProj, toolRef );
|
44
|
toolRef.initProj( toolRef );
|
45
|
}
|
46
|
this.model.addListener( "loadModel", this.setListeners, this);
|
47
|
|
48
|
/**
|
49
|
* Target model bbox change listener. This sets this model's AOI to be the
|
50
|
* same as the target model bounding box.
|
51
|
* @param tool Pointer to this ZoomToAoi object.
|
52
|
*/
|
53
|
this.showTargetAoi = function( tool ) {
|
54
|
if( tool.targetModel.doc ) {
|
55
|
var bbox = tool.targetModel.getBoundingBox();
|
56
|
var ul = new Array(bbox[0],bbox[3]);
|
57
|
var lr = new Array(bbox[2],bbox[1]);
|
58
|
if ( tool.model.getSRS() != tool.targetModel.getSRS() ) {
|
59
|
ul = tool.targetModel.proj.Inverse( ul ); //to lat-long
|
60
|
lr = tool.targetModel.proj.Inverse( lr );
|
61
|
if (ul[0]>lr[0]) ul[0] = ul[0]-360.0; //make sure ul is left of lr
|
62
|
ul = tool.model.proj.Forward( ul ); //back to XY
|
63
|
lr = tool.model.proj.Forward( lr );
|
64
|
}
|
65
|
tool.model.setParam("aoi", new Array(ul, lr) );
|
66
|
}
|
67
|
}
|
68
|
this.firstInit = function(tool) {
|
69
|
tool.targetModel.addListener( "loadModel", tool.showTargetAoi, tool );
|
70
|
tool.targetModel.addListener( "bbox", tool.showTargetAoi, tool );
|
71
|
tool.showTargetAoi(tool);
|
72
|
}
|
73
|
this.model.addListener( "loadModel", this.firstInit, this );
|
74
|
|
75
|
|
76
|
/**
|
77
|
* Process a mouse up action. This will recenter the target model's bbox
|
78
|
* to be equal to this model's AOI.
|
79
|
* @param tool Pointer to this ZoomToAoi object.
|
80
|
* @param targetNode The node for the enclosing HTML tag for this widget, not used.
|
81
|
*/
|
82
|
this.mouseUpHandler = function(tool,targetNode) {
|
83
|
var bbox = tool.model.getParam("aoi");
|
84
|
var ul = bbox[0];
|
85
|
var lr = bbox[1];
|
86
|
if ( tool.model.getSRS() != tool.targetModel.getSRS() ) {
|
87
|
//TBD: convert XY to lat/long first
|
88
|
ul = tool.targetModel.proj.Forward( ul ); //to target XY
|
89
|
lr = tool.targetModel.proj.Forward( lr );
|
90
|
}
|
91
|
if ( ( ul[0]==lr[0] ) && ( ul[1]==lr[1] ) ) {
|
92
|
tool.targetModel.extent.centerAt( ul, tool.targetModel.extent.res[0] );
|
93
|
} else {
|
94
|
tool.targetModel.extent.zoomToBox( ul, lr );
|
95
|
}
|
96
|
}
|
97
|
this.model.addListener('mouseup',this.mouseUpHandler,this);
|
98
|
}
|