NCCOOS Trac Projects: Top | Web | Platforms | Processing | Viz | Sprints | Sandbox | (Wind)

root/Chameleon/trunk/Chameleon/ROIRectangleTool/ROIRectangleTool.widget.php

Revision 13 (checked in by jcleary, 17 years ago)

Latest Chameleon code checkout from previous repository

Line 
1 <?php
2 /**
3  * ROIRectangleTool Widget class
4  *
5  * @project     CWC2
6  * @revision    $Id: ROIRectangleTool.widget.php,v 1.9 2004/12/03 03:31:56 pspencer Exp $
7  * @purpose     ROI Rectangle Tool Widget class.  Allows the user to select
8  * a rectangular region of interest on the map. 
9  * @author      DM Solutions Group (spencer@dmsolutions.ca)
10  * @copyright
11  * <b>Copyright (c) 2002, DM Solutions Group Inc.</b>
12  * Permission is hereby granted, free of charge, to any person obtaining a
13  * copy of this software and associated documentation files (the "Software"),
14  * to deal in the Software without restriction, including without limitation
15  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
16  * and/or sell copies of the Software, and to permit persons to whom the
17  * Software is furnished to do so, subject to the following conditions:
18  *
19  * The above copyright notice and this permission notice shall be included
20  * in all copies or substantial portions of the Software.
21  *
22  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
25  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
26  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
27  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
28  * DEALINGS IN THE SOFTWARE.
29  */
30
31 include_once(dirname(__FILE__)."/../Widget.php");
32 include_once(dirname(__FILE__)."/../Button.php");
33
34 /**
35  * ROIRectangleTool
36  *
37  * @desc A widget to draw a rectangular Region of Interest
38  */
39 class ROIRectangleTool extends CWCWidget
40 {
41
42     
43     /* the button that is the interface for this widget */
44     var $moButton;
45     
46     /**
47      * construct a new ROI Rectangle Tool widget
48      */
49     function ROIRectangleTool()
50     {
51         // invoke constructor of parent
52         parent::CWCWidget();
53         
54         // set the description for this widget
55         $this->szWidgetDescription = <<<EOT
56 The ROIRectangleTool widget allows the user to draw a rectangular region
57 of interest on the map interface.
58 EOT;
59         $this->moButton = new CWCButton( $this );
60         
61         $this->mnMaturityLevel = MATURITY_BETA;
62         
63     }
64     
65     /**
66      *
67      */
68     function InitDefaults()
69     {
70         parent::InitDefaults();
71         
72         $this->moButton->InitDefaults();
73         $this->moButton->SetOnClick('ROIRectTool'.$this->mnId);
74
75     }
76
77     /**
78      * pass URL to button
79      */
80     function  ParseURL()
81     {
82         return $this->moButton->ParseURL();
83     }
84
85     function GetHTMLHiddenVariables()
86     {
87         $aReturn = $this->moButton->GetHTMLHiddenVariables();
88                 
89         $szCmd = '';
90         if ($this->isVarSet('NAV_CMD'))
91             $szCmd = $this->getVar('NAV_CMD');
92         $szVariable = "NAV_CMD";
93         $szValue = " <INPUT TYPE=HIDDEN NAME=$szVariable VALUE=\"\">\n";
94         $aReturn[$szVariable] = $szValue;
95         
96         return $aReturn;
97     }
98     
99     /**
100      * GetJavascriptInitFunctions
101      *
102      * Functions to be called at the end of the load.
103      */
104     function GetJavascriptInitFunctions()
105     {
106         $aReturn = $this->moButton->GetJavascriptInitFunctions();
107
108         $szJsFunctionName = "ROIRectToolInit";
109         $szFunction = "$szJsFunctionName();\n";
110         $aReturn[$szJsFunctionName] = $szFunction;
111
112         $aReturn['InitCWCROIManagerForm'] = 'goCWCROIManager.SetFormObject('.$this->mszHTMLForm.');';
113         
114         return $aReturn;
115     }
116
117     /**
118      * javascript include files
119      */
120     function GetJavascriptIncludeFunctions()
121     {
122         $aReturn = parent::GetJavascriptIncludeFunctions();
123         
124         $szVar = "cwc_roi.js";
125         $aReturn[$szVar] = '<script src="'.$_SESSION['gszCoreWebPath'].
126                             '/widgets/js/cwc_roi.js" type="text/javascript"></script>';
127         
128         $szVar = "cwc_dhtml.js";
129         $aReturn[$szVar] = '<script src="'.$_SESSION['gszCoreWebPath'].
130                             '/widgets/js/cwc_dhtml.js" type="text/javascript"></script>';
131         return $aReturn;
132     }
133
134     /**
135      * @desc javascript mousemove functions
136      */
137     function GetJavascriptOnMouseMoveFunctions()
138     {
139         $aReturn = parent::GetJavascriptOnMouseMoveFunctions();
140         
141         $aReturn['ROIRectTool'] = 'ROIRectToolMouseMove(e);';
142
143         return $aReturn;
144     }
145
146     /**
147      * @desc general javascript functions
148      */
149     function GetJavascriptFunctions()
150     {
151         $aReturn = parent::GetJavascriptFunctions();
152
153         if (isset($this->maSharedResourceWidgets["CWCJSAPI"]))
154           $bCWCJSAPI = 1;
155         else
156           $bCWCJSAPI = 0;
157           
158         // add JSAPI mode functions 
159         if ($bCWCJSAPI)
160         {
161             $szJsFunctionName = "ROIRectangleToolWRegisterForEvent";
162             $szFunction = <<<EOT
163 /**
164  * {$szJsFunctionName}
165  * called to register events when the layers change (JSAPI)
166  */
167 function {$szJsFunctionName}()
168 {
169     goCWCJSAPI.RegisterEvent(MAP_EXTENT_CHANGED, "ROIRectangleToolWExtentChanged");
170     goCWCJSAPI.RegisterEvent(MAP_PROJECTION_CHANGED, "ROIRectangleToolWExtentChanged");
171 }
172 EOT;
173
174            $aReturn[$szJsFunctionName] = $szFunction;
175            $szJsFunctionName = "ROIRectangleToolWExtentChanged";
176            $szFunction = <<<EOT
177 /**
178  * {$szJsFunctionName}
179  * called when the extent is changed (JSAPI)
180  */
181 function {$szJsFunctionName}()
182 {
183     // re-draw the ROI
184     goCWCROIManager.SetGeoExtents( goCWCJSAPI.oMap.minx, goCWCJSAPI.oMap.miny,
185                                     goCWCJSAPI.oMap.maxx, goCWCJSAPI.oMap.maxy );
186     goCWCROIManager.Redraw();
187 }
188 EOT;
189             $aReturn[$szJsFunctionName] = $szFunction;
190
191         }
192         
193         $nId = $this->mnId;
194         $szName = 'ROIRectTool'.$nId;
195         $szFunction = <<<EOT
196 function {$szName}()
197 {
198     goCWCROIManager.SetROITool('{$nId}');
199 }
200 EOT;
201         $aReturn[$szName] = $szFunction;
202
203         $szName = 'ROIRectToolInit';
204         $szFunction = <<<EOT
205 function {$szName}()
206 {
207
208     ROIRectToolCreateDHTMLLayers();
209 }
210 EOT;
211         $aReturn[$szName] = $szFunction;
212         
213         $szName = 'ROIRectToolCreateDHTMLLayers';
214         $szFunction = <<<EOT
215 function {$szName}()
216 {
217     var content = "";
218
219     content = '<img name="ROIRectImgTop" src="images/a_pixel.gif" border="1">';
220     CWCDHTML_CreateLayer(gROIRectBoxTop, gMapWhspc, gMapWvspc, gMapWiWidth, gMapWiHeight,
221                          false, content);
222     CWCDHTML_SetLayerZOrder( gROIRectBoxTop, 20 );
223     content = '<img name="ROIRectImgLeft" src="images/a_pixel.gif" border="1">';
224     CWCDHTML_CreateLayer(gROIRectBoxLeft, gMapWhspc, gMapWvspc, gMapWiWidth, gMapWiHeight,
225                          false, content);
226     CWCDHTML_SetLayerZOrder( gROIRectBoxLeft, 20 );
227     
228     content = '<img name="ROIRectImgBottom" src="images/a_pixel.gif" border="1">';
229     CWCDHTML_CreateLayer(gROIRectBoxBottom, gMapWhspc, gMapWvspc, gMapWiWidth, gMapWiHeight,
230                          false, content);
231     CWCDHTML_SetLayerZOrder( gROIRectBoxBottom, 20 );
232     
233     content = '<img name="ROIRectImgRight" src="images/a_pixel.gif" border="1">';
234     CWCDHTML_CreateLayer(gROIRectBoxRight, gMapWhspc, gMapWvspc, gMapWiWidth, gMapWiHeight,
235                          false, content);
236     CWCDHTML_SetLayerZOrder( gROIRectBoxRight, 20 );
237
238     content = '<img name="ROIRectImgFill" src="images/a_pixel.gif" border="1">';
239     CWCDHTML_CreateLayer(gROIRectBoxFill, gMapWhspc, gMapWvspc, gMapWiWidth, gMapWiHeight,
240                          false, content);
241     CWCDHTML_SetLayerZOrder( gROIRectBoxFill, 20 );
242
243 }
244 EOT;
245         $aReturn[$szName] = $szFunction;
246         
247         $szObjectJS = "    var jsObj;\n";
248
249         /**
250          * TODO: this does not reconstitute the points associated with the
251          * ROI tool because this is complicated ;)  In reality, the points may
252          * not be at valid locations.  The only reason to reconstitute the points
253          * would be to enable editing, which can't happen
254          */
255         
256         if (isset($_SESSION['ROIRENDERER']))
257         {
258             $nROI = count($_SESSION['ROIRENDERER']);
259             for ($i=0; $i<$nROI; $i++)
260             {
261                 $aROI = $_SESSION['ROIRENDERER'][$i];
262                 if ($aROI['type'] == 'rectangle')
263                 {
264                     $szObjectJS .= "    goCWCROIManager.SetMode(".
265                                    $aROI['mode'] . ");\n";
266                     $szObjectJS .= "    jsObj = new CWCRectangleROI();\n";
267                     $szObjectJS .= "    jsObj.edgeColor = \"".$aROI['edgecolor']."\";\n";
268                     $szObjectJS .= "    jsObj.edgeWidth = ".$aROI['edgewidth'].";\n";
269                     $szObjectJS .= "    jsObj.fillLayer = goCWCROIManager.bUseFill;\n";
270                     $szObjectJS .= "    jsObj.fillColor = \"".$aROI['fillcolor']."\";\n";
271                     $szObjectJS .= "    jsObj.fillOpacity = ".$aROI['fillopacity'].";\n";
272                     $szObjectJS .= "    jsObj.leftLayer = gROIRectBoxLeft;\n";
273                     $szObjectJS .= "    jsObj.topLayer = gROIRectBoxTop;\n";
274                     $szObjectJS .= "    jsObj.rightLayer = gROIRectBoxRight;\n";
275                     $szObjectJS .= "    jsObj.bottomLayer = gROIRectBoxBottom;\n";
276                     $szObjectJS .= "    jsObj.fillLayer = gROIRectBoxFill;\n";
277                     $szObjectJS .= "    goCWCROIManager.Insert( jsObj, $i );\n";
278                 }
279             }
280             if (strlen( $szObjectJS ) > 0)
281             {
282                 $szObjectJS .= "    goCWCROIManager.UpdateLayerVisibility();\n";
283             }
284         }
285         
286         
287         $szName = 'ROIRectToolInitObjects';
288         $szFunction = <<<EOT
289 function {$szName}()
290 {
291 {$szObjectJS}
292 }
293 EOT;
294         $aReturn[$szName] = $szFunction;
295         
296         $szName = 'ROIRectToolStartZoomBox';
297         $szFunction = <<<EOT
298 function {$szName}()
299 {
300     goROIRectObj = new CWCRectangleROI();
301     goROIRectObj.edgeColor = goCWCROIManager.szEdgeColor;
302     goROIRectObj.edgeWidth = goCWCROIManager.nEdgeWidth;
303     goROIRectObj.fillLayer = goCWCROIManager.bUseFill;
304     goROIRectObj.fillColor = goCWCROIManager.szFillColor;
305     goROIRectObj.fillOpacity = goCWCROIManager.nFillOpacity;
306     goROIRectObj.leftLayer = gROIRectBoxLeft;
307     goROIRectObj.topLayer = gROIRectBoxTop;
308     goROIRectObj.rightLayer = gROIRectBoxRight;
309     goROIRectObj.bottomLayer = gROIRectBoxBottom;
310     goROIRectObj.fillLayer = gROIRectBoxFill;
311     
312     goROIRectObj.Show();
313     
314     gROIRectToolx2 = gROIRectToolx1 + 1;
315     gROIRectTooly2 = gROIRectTooly1 + 1;
316     
317     ROIRectToolUpdateZoomBox();
318     
319     return true;
320 }
321 EOT;
322         $aReturn[$szName] = $szFunction;
323         
324         $szName = 'ROIRectToolUpdateZoomBox';
325         $szFunction = <<<EOT
326 function {$szName}()
327 {
328     var right  = Math.max(gROIRectToolx1, gROIRectToolx2);
329     var left   = Math.min(gROIRectToolx1, gROIRectToolx2);
330     var bottom = Math.max(gROIRectTooly1, gROIRectTooly2);
331     var top    = Math.min(gROIRectTooly1, gROIRectTooly2);
332     
333     goROIRectObj.Set( left, top, right, bottom )
334     //window.status = "goROIRectObj set to " + left + ", " + top + ", " + right + ", " + bottom;
335         
336 }
337 EOT;
338         $aReturn[$szName] = $szFunction;
339         
340         $szName = 'ROIRectToolStopZoomBox';
341         $szFunction = <<<EOT
342 function {$szName}()
343 {
344     if ( goROIRectObj == null )
345     {
346         return;
347     }
348     goCWCROIManager.Add( goROIRectObj );
349     goROIRectObj.Hide();
350     goROIRectObj = null;
351     return true;
352 }
353 EOT;
354         $aReturn[$szName] = $szFunction;
355         
356         $szName = 'ROIRectToolMouseDown';
357         $szFunction = <<<EOT
358 function {$szName}(e)
359 {
360     ROIRectToolGetMousePosition(e);
361
362     if (gROIToolmouseX >=0 && gROIToolmouseY >=0)
363     {
364         gROIRectToolx1 = gROIToolmouseX;
365         gROIRectTooly1 = gROIToolmouseY;
366         
367         ROIRectToolStartZoomBox();
368         gROIRectDragging = true;
369     }
370     return false;
371 }
372 EOT;
373         $aReturn[$szName] = $szFunction;
374         
375         $szName = 'ROIRectToolMouseUp';
376         $szFunction = <<<EOT
377 function {$szName}(e)
378 {
379     ROIRectToolGetMousePosition(e);
380
381     if (gROIToolmouseX >=0 && gROIToolmouseY >=0)
382     {
383         gROIRectToolx2 = gROIToolmouseX;
384         gROIRectTooly2 = gROIToolmouseY;
385         ROIRectToolStopZoomBox();
386         
387         gROIRectDragging = false;
388     }
389     
390     // return
391     return false;
392 }
393 EOT;
394         $aReturn[$szName] = $szFunction;
395         
396         $szName = 'ROIRectToolGetMousePosition';
397         $szFunction = <<<EOT
398 function {$szName}(e)
399 {
400     if (CWCIsNav4 || CWCIsNav6) // Netscape
401     {               
402         gROIToolmouseX = e.pageX;
403         gROIToolmouseY = e.pageY;
404     }
405     else if (CWCIsIE) // IE
406     {           
407         gROIToolmouseX = event.clientX + document.body.scrollLeft;
408         gROIToolmouseY = event.clientY + document.body.scrollTop;
409     }
410     else
411     {                              // Don't know
412         gROIToolmouseX = gROIToolmouseY = 0;
413     }
414     var oImage = CWCDHTML_GetImage('mapimage');
415     
416     if (oImage == null)
417     {
418         gROIToolmouseX = -1;
419         gROIToolmouseY = -1
420         return false;
421     }
422     var left = CWCDHTML_FindObjectPosX( oImage );
423     var top = CWCDHTML_FindObjectPosY( oImage );
424     
425     var width = oImage.width;
426     var height = oImage.height;
427     
428     // subtract offsets from page left and top
429     gROIToolmouseX = gROIToolmouseX - left;
430     gROIToolmouseY = gROIToolmouseY - top;
431     
432     if (gROIToolmouseX < 0 || gROIToolmouseX > width ||
433         gROIToolmouseY < 0 || gROIToolmouseY > height)
434     {
435         gROIToolmouseX = -1;
436         gROIToolmouseY = -1
437     }
438     return true;
439 }
440 EOT;
441         $aReturn[$szName] = $szFunction;
442         $szName = 'ROIRectToolMouseMove';
443         $szFunction = <<<EOT
444 function {$szName}(e)
445 {
446     ROIRectToolGetMousePosition(e);
447
448     if (gROIToolmouseX >=0 && gROIToolmouseY >=0 &&
449         {$this->mszHTMLForm}.NAV_CMD != null &&
450         {$this->mszHTMLForm}.NAV_CMD.value == "ROI_TOOL" &&
451         {$this->mnId} == goCWCROIManager.GetROITool())
452     {
453         document.onmousedown = ROIRectToolMouseDown;
454         document.onmouseup = ROIRectToolMouseUp;
455         if (gROIRectDragging)
456         {
457             gROIRectToolx2 = gROIToolmouseX;
458             gROIRectTooly2 = gROIToolmouseY;
459             ROIRectToolUpdateZoomBox();
460         }   
461     }
462     else
463     {
464     }
465     return false;
466 }
467 EOT;
468         $aReturn[$szName] = $szFunction;
469
470         return $aReturn;
471     }
472
473     /**
474      * GetJavascriptVariables
475      *
476      * Return JS global variables and global code.
477      */
478     function GetJavascriptVariables()
479     {
480         $aReturn = array();
481
482         $szVariable = "gROIToolmouseX";
483         $szValue = " var $szVariable = 0;\n";
484         $aReturn[$szVariable] = $szValue;
485
486         $szVariable = "gROIToolmouseY";
487         $szValue = " var $szVariable = 0;\n";
488         $aReturn[$szVariable] = $szValue;
489
490         $szVariable = "gROIRectToolx1";
491         $szValue = " var $szVariable = 0;\n";
492         $aReturn[$szVariable] = $szValue;
493
494         $szVariable = "gROIRectTooly1";
495         $szValue = " var $szVariable = 0;\n";
496         $aReturn[$szVariable] = $szValue;
497
498         $szVariable = "gROIRectToolx2";
499         $szValue = " var $szVariable = 0;\n";
500         $aReturn[$szVariable] = $szValue;
501
502         $szVariable = "gROIRectTooly2";
503         $szValue = " var $szVariable = 0;\n";
504         $aReturn[$szVariable] = $szValue;
505
506         $szVariable = "gROIRectDragging";
507         $szValue = " var $szVariable = false;\n";
508         $aReturn[$szVariable] = $szValue;
509
510         $szVariable = "goROIRectObj";
511         $szValue = " var $szVariable = null;\n";
512         $aReturn[$szVariable] = $szValue;
513
514         $szVariable = "gROIRectBoxTop";
515         $szValue = " var $szVariable = \"gROIRectBoxTop\";\n";
516         $aReturn[$szVariable] = $szValue;
517
518         $szVariable = "gROIRectBoxLeft";
519         $szValue = " var $szVariable = \"gROIRectBoxLeft\";\n";
520         $aReturn[$szVariable] = $szValue;
521
522         $szVariable = "gROIRectBoxBottom";
523         $szValue = " var $szVariable = \"gROIRectBoxBottom\";\n";
524         $aReturn[$szVariable] = $szValue;
525
526         $szVariable = "gROIRectBoxRight";
527         $szValue = " var $szVariable = \"gROIRectBoxRight\";\n";
528         $aReturn[$szVariable] = $szValue;
529
530         $szVariable = "gROIRectBoxFill";
531         $szValue = " var $szVariable = \"gROIRectBoxFill\";\n";
532         $aReturn[$szVariable] = $szValue;
533
534         return $aReturn;
535     }
536     
537     /**
538      * return an array of javascript functions needed by the Ruler widget
539      * and called when the page is loaded.
540      * @return array of name = function values
541      */
542     function GetJavascriptOnLoadFunctions()
543     {
544         $aReturn = parent::GetJavascriptOnLoadFunctions();
545
546         $aReturn["ROIRectToolInitObjects"] = "    ROIRectToolInitObjects();\n";
547         if (isset($this->maSharedResourceWidgets["CWCJSAPI"]))
548         {
549             $szJsFunctionName = "ROIRectangleToolWRegisterForEvent";
550             $szFunction = "$szJsFunctionName();\n";
551             $aReturn[$szJsFunctionName] = $szFunction;
552         }       
553
554         return $aReturn;
555     }
556     
557     /**
558      * draw this widget on the page
559      */
560     function DrawPublish($szPostEvent = "")
561     {
562         if (isset($this->maSharedResourceWidgets["CWCJSAPI"]))
563           $bCWCJSAPI = 1;
564         else
565           $bCWCJSAPI = 0;
566
567         if (!$this->mbVisible)
568             return "<!-- ROIRectTool hidden -->";
569
570         $szReturn = $this->moButton->DrawPublish();
571
572         return $szReturn;
573     }
574 }
575 ?>
576
Note: See TracBrowser for help on using the browser.