From d9a00c8082140c336d89e0a840375d155e73864a Mon Sep 17 00:00:00 2001 From: Dasa Paddock Date: Mon, 14 Jan 2013 16:09:45 -0800 Subject: [PATCH 001/178] Add .gitattributes file --- .gitattributes | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..f679f40 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,25 @@ +# Set default behavior, in case users don't have core.autocrlf set. +* text=auto + +# Explicitly declare text files we want to always be normalized and converted to native line endings on checkout. +*.as text +*.css text +*.js text +*.md text +*.mxml text +*.properties text +*.txt text +*.xml text + +# Declare files that will always have CRLF line endings on checkout. +*.bat text eol=crlf + +# Declare files that will always have LF line endings on checkout. +*.sh text eol=lf + +# Denote all files that are truly binary and should not be modified. +*.gif binary +*.jpg binary +*.png binary +*.swc binary +*.swf binary From b67aff4625beb4de81f33a9e34346396ab9fcb8a Mon Sep 17 00:00:00 2001 From: Dasa Paddock Date: Mon, 14 Jan 2013 16:14:20 -0800 Subject: [PATCH 002/178] Normalize line endings --- .actionScriptProperties | 98 +- .flexProperties | 4 +- .project | 36 +- html-template/index.template.html | 214 +- html-template/swfobject.js | 1554 +++---- libs/HowToDownloadSWC.txt | 6 +- license.txt | 98 +- locale/ar/ViewerStrings.properties | 698 +-- locale/de_DE/ViewerStrings.properties | 698 +-- locale/en_US/ViewerStrings.properties | 698 +-- locale/es_ES/ViewerStrings.properties | 698 +-- locale/fr_FR/ViewerStrings.properties | 698 +-- locale/it_IT/ViewerStrings.properties | 698 +-- locale/ja_JP/ViewerStrings.properties | 698 +-- locale/ko_KR/ViewerStrings.properties | 698 +-- locale/nb_NO/ViewerStrings.properties | 698 +-- locale/nl_NL/ViewerStrings.properties | 698 +-- locale/pl_PL/ViewerStrings.properties | 698 +-- locale/pt_BR/ViewerStrings.properties | 698 +-- locale/ro_RO/ViewerStrings.properties | 698 +-- locale/ru_RU/ViewerStrings.properties | 698 +-- locale/sv_SE/ViewerStrings.properties | 698 +-- locale/zh_CN/ViewerStrings.properties | 698 +-- src/apps/ar/HeaderControllerWidget.xml | 48 +- src/apps/ar/config.xml | 92 +- src/apps/de_DE/BookmarkWidget.xml | 32 +- src/apps/de_DE/HeaderControllerWidget.xml | 48 +- src/apps/de_DE/config.xml | 90 +- src/apps/es_ES/BookmarkWidget.xml | 32 +- src/apps/es_ES/HeaderControllerWidget.xml | 48 +- src/apps/es_ES/config.xml | 90 +- src/apps/fr_FR/BookmarkWidget.xml | 32 +- src/apps/fr_FR/HeaderControllerWidget.xml | 48 +- src/apps/fr_FR/config.xml | 90 +- src/apps/it_IT/HeaderControllerWidget.xml | 48 +- src/apps/it_IT/config.xml | 90 +- src/apps/ja_JP/BookmarkWidget.xml | 32 +- src/apps/ja_JP/CoordinateWidget.xml | 20 +- src/apps/ja_JP/HeaderControllerWidget.xml | 48 +- src/apps/ja_JP/config.xml | 92 +- src/apps/ko_KR/BookmarkWidget.xml | 34 +- src/apps/ko_KR/HeaderControllerWidget.xml | 48 +- src/apps/ko_KR/config.xml | 90 +- src/apps/nb_NO/BookmarkWidget.xml | 34 +- src/apps/nb_NO/HeaderControllerWidget.xml | 48 +- src/apps/nb_NO/config.xml | 90 +- src/apps/nl_NL/BookmarkWidget.xml | 34 +- src/apps/nl_NL/HeaderControllerWidget.xml | 48 +- src/apps/nl_NL/config.xml | 90 +- src/apps/pl_PL/BookmarkWidget.xml | 34 +- src/apps/pl_PL/HeaderControllerWidget.xml | 48 +- src/apps/pl_PL/config.xml | 90 +- src/apps/pt_BR/HeaderControllerWidget.xml | 48 +- src/apps/pt_BR/config.xml | 90 +- src/apps/ro_RO/BookmarkWidget.xml | 34 +- src/apps/ro_RO/HeaderControllerWidget.xml | 48 +- src/apps/ro_RO/config.xml | 90 +- src/apps/ru_RU/HeaderControllerWidget.xml | 48 +- src/apps/ru_RU/config.xml | 90 +- src/apps/sv_SE/BookmarkWidget.xml | 34 +- src/apps/sv_SE/HeaderControllerWidget.xml | 48 +- src/apps/sv_SE/config.xml | 90 +- src/apps/zh_CN/BookmarkWidget.xml | 32 +- src/apps/zh_CN/CoordinateWidget.xml | 20 +- src/apps/zh_CN/HeaderControllerWidget.xml | 48 +- src/apps/zh_CN/config.xml | 92 +- src/com/esri/viewer/AppEvent.as | 782 ++-- src/com/esri/viewer/BaseWidget.as | 1300 +++--- src/com/esri/viewer/ConfigData.as | 120 +- src/com/esri/viewer/ErrorMessage.as | 58 +- src/com/esri/viewer/ForcedImports.as | 60 +- src/com/esri/viewer/IBaseWidget.as | 292 +- src/com/esri/viewer/IInfowindowTemplate.as | 60 +- src/com/esri/viewer/IWidgetContainer.as | 54 +- src/com/esri/viewer/IWidgetTemplate.as | 66 +- src/com/esri/viewer/ViewerContainer.mxml | 850 ++-- src/com/esri/viewer/WidgetStates.as | 80 +- src/com/esri/viewer/WidgetTemplate.as | 1176 ++--- .../esri/viewer/components/ErrorWindow.mxml | 132 +- src/com/esri/viewer/components/HTMLPopup.mxml | 294 +- .../viewer/components/HTMLPopupManager.as | 106 +- src/com/esri/viewer/components/InfoPopup.mxml | 646 +-- .../esri/viewer/components/TitlebarButton.as | 348 +- src/com/esri/viewer/components/toc/TOC.as | 1574 +++---- .../toc/controls/CheckBoxIndeterminate.as | 144 +- .../toc/controls/CheckBoxIndeterminateIcon.as | 106 +- .../components/toc/tocClasses/TocItem.as | 608 +-- .../toc/tocClasses/TocItemRenderer.as | 702 +-- .../toc/tocClasses/TocKmlFolderItem.as | 192 +- .../toc/tocClasses/TocKmlNetworkLinkItem.as | 300 +- .../toc/tocClasses/TocLayerInfoItem.as | 110 +- .../toc/tocClasses/TocLayerMenu.mxml | 904 ++-- .../toc/tocClasses/TocMapLayerItem.as | 1272 +++--- .../toc/tocClasses/TransparencyMenuItem.mxml | 176 +- .../viewer/components/toc/utils/MapUtil.as | 298 +- src/com/esri/viewer/managers/ConfigManager.as | 2404 +++++----- src/com/esri/viewer/managers/DataManager.as | 180 +- src/com/esri/viewer/managers/EventBus.as | 130 +- .../managers/LayerCreationProperties.as | 252 +- src/com/esri/viewer/managers/LayerCreator.as | 1162 ++--- src/com/esri/viewer/managers/MapManager.mxml | 3054 ++++++------- .../esri/viewer/managers/ScriptingManager.as | 80 +- .../esri/viewer/managers/SecurityManager.as | 72 +- src/com/esri/viewer/managers/UIManager.as | 930 ++-- .../esri/viewer/managers/WidgetManager.mxml | 2952 ++++++------- .../esri/viewer/skins/BasemapsButtonSkin.mxml | 560 +-- .../skins/GraphicalWidgetTemplateSkin.mxml | 342 +- src/com/esri/viewer/skins/HScrollBarSkin.mxml | 124 +- .../viewer/skins/HScrollBarThumbSkin.mxml | 92 +- .../viewer/skins/HScrollBarTrackSkin.mxml | 94 +- src/com/esri/viewer/skins/MapManagerSkin.mxml | 108 +- .../viewer/skins/ScrollBarDownButtonSkin.mxml | 80 +- .../viewer/skins/ScrollBarLeftButtonSkin.mxml | 80 +- .../skins/ScrollBarRightButtonSkin.mxml | 80 +- .../viewer/skins/ScrollBarUpButtonSkin.mxml | 74 +- .../esri/viewer/skins/TitlebarButtonSkin.mxml | 106 +- src/com/esri/viewer/skins/VScrollBarSkin.mxml | 122 +- .../viewer/skins/VScrollBarThumbSkin.mxml | 90 +- .../viewer/skins/VScrollBarTrackSkin.mxml | 90 +- .../esri/viewer/skins/WidgetTemplateSkin.mxml | 600 +-- src/com/esri/viewer/utils/ClustererParser.as | 578 +-- src/com/esri/viewer/utils/ErrorMessageUtil.as | 188 +- src/com/esri/viewer/utils/GeoRSSUtil.as | 274 +- src/com/esri/viewer/utils/Hashtable.as | 554 +-- src/com/esri/viewer/utils/LayerObjectUtil.as | 554 +-- src/com/esri/viewer/utils/Namespaces.as | 100 +- src/com/esri/viewer/utils/PopUpInfoParser.as | 340 +- .../viewer/utils/PortalBasemapAppender.as | 876 ++-- src/config-all.xml | 264 +- src/config.xml | 152 +- src/defaults.css | 110 +- src/index.mxml | 98 +- src/license.txt | 212 +- src/popups/PopUp_311.xml | 40 +- src/popups/PopUp_Demographics_BlockGroups.xml | 76 +- src/popups/PopUp_Demographics_Counties.xml | 76 +- src/popups/PopUp_Demographics_States.xml | 122 +- src/popups/PopUp_Demographics_Tracts.xml | 76 +- src/popups/PopUp_Fires.xml | 30 +- src/popups/PopUp_Hurricanes.xml | 48 +- src/popups/PopUp_IncidentAreas.xml | 36 +- src/popups/PopUp_IncidentPoints.xml | 34 +- src/version.xml | 4 +- src/widgets/Bookmark/Bookmark.as | 76 +- src/widgets/Bookmark/BookmarkDataGroup.as | 258 +- .../Bookmark/BookmarkItemRenderer.mxml | 232 +- src/widgets/Bookmark/BookmarkWidget.mxml | 708 +-- src/widgets/Bookmark/BookmarkWidget.xml | 34 +- src/widgets/Chart/ChartBrowser.as | 184 +- src/widgets/Chart/ChartBrowserSkin.mxml | 498 +-- src/widgets/Chart/ChartLayerDefinition.as | 58 +- src/widgets/Chart/ChartWidget.mxml | 1480 +++---- src/widgets/Chart/ChartWidget.xml | 128 +- src/widgets/Coordinate/CoordinateWidget.mxml | 360 +- src/widgets/Coordinate/CoordinateWidget.xml | 20 +- src/widgets/Coordinate/DegToDMS.as | 128 +- .../DataExtract/DataExtractWidget.mxml | 1766 ++++---- src/widgets/DataExtract/DataExtractWidget.xml | 38 +- src/widgets/Draw/DrawWidget.mxml | 3892 ++++++++--------- src/widgets/Draw/DrawWidget.xml | 48 +- src/widgets/Edit/EditWidget.mxml | 2930 ++++++------- src/widgets/Edit/EditWidget.xml | 42 +- .../EditWidgetAttachmentInspectorSkin.mxml | 506 +-- .../EditWidgetAttributeInspectorSkin.mxml | 382 +- ...tWidgetTemplatePickerListItemRenderer.mxml | 182 +- .../Edit/EditWidgetTemplatePickerSkin.mxml | 758 ++-- src/widgets/GeoRSS/GeoRSSFeedDataGroup.as | 76 +- .../GeoRSS/GeoRSSFeedItemRenderer.mxml | 370 +- src/widgets/GeoRSS/GeoRSSWidget.mxml | 1112 ++--- src/widgets/GeoRSS/GeoRSSWidget.xml | 32 +- .../Geoprocessing/GeoprocessingWidget.mxml | 2136 ++++----- .../GeoprocessingWidget_CalculateViewshed.xml | 112 +- .../GeoprocessingWidget_DriveTimes.xml | 142 +- .../GeoprocessingWidget_ExtractData.xml | 128 +- .../GeoprocessingWidget_MessageInABottle.xml | 98 +- .../GeoprocessingWidget_PopulationSummary.xml | 70 +- .../GeoprocessingWidget_SurfaceProfile.xml | 140 +- .../parameters/BaseParamParser.as | 628 +-- .../Geoprocessing/parameters/BaseParameter.as | 382 +- .../parameters/BooleanParameter.as | 138 +- .../parameters/DataFileParameter.as | 202 +- .../Geoprocessing/parameters/DateParameter.as | 136 +- .../parameters/DoubleParameter.as | 146 +- .../parameters/FeatureLayerParameter.as | 568 +-- .../parameters/GPParameterFactory.as | 176 +- .../parameters/GPParameterTypes.as | 92 +- .../parameters/IGPFeatureParameter.as | 98 +- .../Geoprocessing/parameters/IGPParameter.as | 86 +- .../parameters/InputParamParser.as | 252 +- .../parameters/LinearUnitParameter.as | 160 +- .../Geoprocessing/parameters/LongParameter.as | 138 +- .../parameters/MultiValueItem.as | 62 +- .../parameters/MultiValueStringParameter.as | 188 +- .../parameters/OutputParamParser.as | 116 +- .../parameters/RasterDataLayerParam.as | 132 +- .../parameters/RecordSetParameter.as | 132 +- .../parameters/StringParameter.as | 106 +- .../GPInputBooleanParamItemRenderer.mxml | 52 +- .../GPInputDataFileParamItemRenderer.mxml | 128 +- .../input/GPInputDateParamItemRenderer.mxml | 84 +- .../input/GPInputDoubleParamItemRenderer.mxml | 86 +- .../GPInputFeatureParamItemRenderer.mxml | 970 ++-- .../GPInputLinearUnitParamItemRenderer.mxml | 178 +- .../input/GPInputLongParamItemRenderer.mxml | 86 +- ...InputRasterDataLayerParamItemRenderer.mxml | 66 +- .../GPInputRecordSetParamItemRenderer.mxml | 66 +- .../input/GPInputStringParamItemRenderer.mxml | 162 +- ...nputMultiValueStringParamItemRenderer.mxml | 160 +- .../multivalue/MultiValueItemRenderer.mxml | 54 +- .../GPOutputLinearUnitParamItemRenderer.mxml | 78 +- .../output/GPOutputParamItemRenderer.mxml | 70 +- .../GPOutputRasterDataParamItemRenderer.mxml | 110 +- .../GPOutputRecordSetParamItemRenderer.mxml | 316 +- .../supportClasses/FeatureInputParamEvent.as | 88 +- .../supportClasses/FileDownloader.as | 148 +- .../supportClasses/GPParamHandler.as | 824 ++-- .../supportClasses/GraphicEditor.as | 488 +-- .../supportClasses/InputParamDataGroup.mxml | 262 +- .../supportClasses/LayerOrderer.as | 128 +- .../supportClasses/OutputParamDataGroup.mxml | 140 +- .../supportClasses/UnitMappingUtil.as | 192 +- .../VisibleGraphicsLayersWatcher.as | 364 +- .../GroupWidgetItemDataGroupRenderer.mxml | 278 +- .../HeaderControllerWidget.mxml | 1110 ++--- .../HeaderControllerWidget.xml | 60 +- src/widgets/HeaderController/HeaderGroup.mxml | 46 +- .../HeaderController/HeaderGroupSkin.mxml | 72 +- src/widgets/HeaderController/WidgetItem.as | 68 +- .../HeaderController/WidgetItemDataGroup.as | 150 +- .../WidgetItemDataGroupRenderer.mxml | 304 +- .../HeaderController/WidgetListDataGroup.as | 72 +- .../WidgetListItemRenderer.mxml | 218 +- .../HeaderController/WidgetUnderline.mxml | 84 +- .../InfoContentItemRenderer.mxml | 92 +- .../InfoTemplates/InfoPopupWidget.mxml | 326 +- .../InfoTemplates/SimpleInfoWinWidget.mxml | 366 +- src/widgets/LayerList/LayerListWidget.mxml | 242 +- src/widgets/LayerList/LayerListWidget.xml | 18 +- src/widgets/Legend/LegendWidget.mxml | 376 +- src/widgets/Legend/LegendWidget.xml | 22 +- src/widgets/Locate/AddressField.as | 66 +- src/widgets/Locate/LocateResult.as | 82 +- src/widgets/Locate/LocateResultDataGroup.as | 74 +- .../Locate/LocateResultItemRenderer.mxml | 276 +- src/widgets/Locate/LocateWidget.mxml | 2540 +++++------ src/widgets/Locate/LocateWidget.xml | 18 +- src/widgets/MapSwitcher/Basemap.as | 38 +- .../MapSwitcher/BasemapItemRenderer.mxml | 116 +- .../MapSwitcher/MapSwitcherWidget.mxml | 952 ++-- src/widgets/MapSwitcher/MapSwitcherWidget.xml | 22 +- src/widgets/Navigation/IconButton.as | 82 +- src/widgets/Navigation/IconButtonSkin.mxml | 182 +- src/widgets/Navigation/InnerButtonSkin.mxml | 210 +- src/widgets/Navigation/NavToolItem.as | 76 +- src/widgets/Navigation/Navigation.mxml | 446 +- src/widgets/Navigation/NavigationSkin.mxml | 198 +- src/widgets/Navigation/NavigationWidget.mxml | 198 +- src/widgets/Navigation/NavigationWidget.xml | 28 +- .../Navigation/VerticalButtonBarSkin.mxml | 124 +- src/widgets/Navigation/eButtonSkin.mxml | 116 +- src/widgets/Navigation/nButtonSkin.mxml | 118 +- src/widgets/Navigation/neButtonSkin.mxml | 90 +- src/widgets/Navigation/nwButtonSkin.mxml | 90 +- src/widgets/Navigation/sButtonSkin.mxml | 118 +- src/widgets/Navigation/seButtonSkin.mxml | 90 +- src/widgets/Navigation/swButtonSkin.mxml | 90 +- src/widgets/Navigation/wButtonSkin.mxml | 116 +- src/widgets/OverviewMap/ExpansionDirection.as | 54 +- .../OverviewMap/OverviewMapComponent.mxml | 1290 +++--- .../OverviewMap/OverviewMapWidget.mxml | 162 +- src/widgets/OverviewMap/OverviewMapWidget.xml | 32 +- src/widgets/Print/ExportWebMapForm.mxml | 1040 ++--- src/widgets/Print/IPrintWidgetComponent.as | 32 +- src/widgets/Print/PrintWidget.mxml | 118 +- src/widgets/Print/PrintWidget.xml | 20 +- src/widgets/Print/ScreenPrintForm.mxml | 342 +- src/widgets/Query/QueryResultDataGroup.as | 76 +- .../Query/QueryResultItemRenderer.mxml | 374 +- src/widgets/Query/QueryWidget.mxml | 1424 +++--- src/widgets/Query/QueryWidget_Earthquakes.xml | 48 +- .../QueryWidget_Louisville_PoliceStations.xml | 44 +- .../QueryWidget_Louisville_TrafficCams.xml | 46 +- .../Samples/HelloWorld/HelloWorldWidget.mxml | 96 +- .../Samples/HelloWorld/HelloWorldWidget.xml | 8 +- .../TestOpenClose/TestOpenCloseWidget.mxml | 438 +- .../TestOpenClose/TestOpenCloseWidget.xml | 2 +- .../InfoColumnChartItemRenderer.mxml | 126 +- .../ThematicQuery/InfoColumnChartWidget.mxml | 382 +- .../MapSwitcherWidget_Thematic.xml | 16 +- .../ThematicQuery/ThematicDataGroup.as | 72 +- .../ThematicQuery/ThematicItemRenderer.mxml | 206 +- .../ThematicQuery/ThematicQueryResult.as | 82 +- .../ThematicQuery/ThematicQueryWidget.mxml | 1038 ++--- .../ThematicQuery/ThematicQueryWidget.xml | 178 +- src/widgets/Search/SearchResultDataGroup.as | 76 +- .../Search/SearchResultItemRenderer.mxml | 374 +- src/widgets/Search/SearchWidget.mxml | 2322 +++++----- .../Search/SearchWidget_Louisville.xml | 68 +- src/widgets/Splash/SplashWidget.mxml | 94 +- src/widgets/Splash/SplashWidget.xml | 42 +- .../StaticImage/StaticImageWidget.mxml | 176 +- src/widgets/StaticImage/StaticImageWidget.xml | 22 +- src/widgets/Time/TimeWidget.mxml | 492 +-- src/widgets/Time/TimeWidget.xml | 46 +- .../Time/TimeWidget_QuakesSince1970.xml | 32 +- .../WidgetContainer/WidgetContainer.mxml | 1610 +++---- .../WidgetContainerWidget.mxml | 146 +- .../supportClasses/ResultAttributes.as | 584 +-- src/widgets/supportClasses/ResultItem.as | 222 +- 309 files changed, 50021 insertions(+), 50021 deletions(-) diff --git a/.actionScriptProperties b/.actionScriptProperties index 029eac6..eb43d28 100644 --- a/.actionScriptProperties +++ b/.actionScriptProperties @@ -1,49 +1,49 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.flexProperties b/.flexProperties index 0f603b0..f207211 100644 --- a/.flexProperties +++ b/.flexProperties @@ -1,2 +1,2 @@ - - + + diff --git a/.project b/.project index 8533441..dabb70b 100644 --- a/.project +++ b/.project @@ -1,18 +1,18 @@ - - - FlexViewer - - - - - - com.adobe.flexbuilder.project.flexbuilder - - - - - - com.adobe.flexbuilder.project.flexnature - com.adobe.flexbuilder.project.actionscriptnature - - + + + FlexViewer + + + + + + com.adobe.flexbuilder.project.flexbuilder + + + + + + com.adobe.flexbuilder.project.flexnature + com.adobe.flexbuilder.project.actionscriptnature + + diff --git a/html-template/index.template.html b/html-template/index.template.html index b986dad..505045c 100644 --- a/html-template/index.template.html +++ b/html-template/index.template.html @@ -1,107 +1,107 @@ - - - - ${title} - - - - - - - - - - - - - - - - - -
-

- To view this page ensure that Adobe Flash Player version - ${version_major}.${version_minor}.${version_revision} or greater is installed. -

- -
- - - - + + + + ${title} + + + + + + + + + + + + + + + + + +
+

+ To view this page ensure that Adobe Flash Player version + ${version_major}.${version_minor}.${version_revision} or greater is installed. +

+ +
+ + + + diff --git a/html-template/swfobject.js b/html-template/swfobject.js index 7a9d26f..bf35c07 100644 --- a/html-template/swfobject.js +++ b/html-template/swfobject.js @@ -1,777 +1,777 @@ -/*! SWFObject v2.2 - is released under the MIT License -*/ - -var swfobject = function() { - - var UNDEF = "undefined", - OBJECT = "object", - SHOCKWAVE_FLASH = "Shockwave Flash", - SHOCKWAVE_FLASH_AX = "ShockwaveFlash.ShockwaveFlash", - FLASH_MIME_TYPE = "application/x-shockwave-flash", - EXPRESS_INSTALL_ID = "SWFObjectExprInst", - ON_READY_STATE_CHANGE = "onreadystatechange", - - win = window, - doc = document, - nav = navigator, - - plugin = false, - domLoadFnArr = [main], - regObjArr = [], - objIdArr = [], - listenersArr = [], - storedAltContent, - storedAltContentId, - storedCallbackFn, - storedCallbackObj, - isDomLoaded = false, - isExpressInstallActive = false, - dynamicStylesheet, - dynamicStylesheetMedia, - autoHideShow = true, - - /* Centralized function for browser feature detection - - User agent string detection is only used when no good alternative is possible - - Is executed directly for optimal performance - */ - ua = function() { - var w3cdom = typeof doc.getElementById != UNDEF && typeof doc.getElementsByTagName != UNDEF && typeof doc.createElement != UNDEF, - u = nav.userAgent.toLowerCase(), - p = nav.platform.toLowerCase(), - windows = p ? /win/.test(p) : /win/.test(u), - mac = p ? /mac/.test(p) : /mac/.test(u), - webkit = /webkit/.test(u) ? parseFloat(u.replace(/^.*webkit\/(\d+(\.\d+)?).*$/, "$1")) : false, // returns either the webkit version or false if not webkit - ie = !+"\v1", // feature detection based on Andrea Giammarchi's solution: http://webreflection.blogspot.com/2009/01/32-bytes-to-know-if-your-browser-is-ie.html - playerVersion = [0,0,0], - d = null; - if (typeof nav.plugins != UNDEF && typeof nav.plugins[SHOCKWAVE_FLASH] == OBJECT) { - d = nav.plugins[SHOCKWAVE_FLASH].description; - if (d && !(typeof nav.mimeTypes != UNDEF && nav.mimeTypes[FLASH_MIME_TYPE] && !nav.mimeTypes[FLASH_MIME_TYPE].enabledPlugin)) { // navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin indicates whether plug-ins are enabled or disabled in Safari 3+ - plugin = true; - ie = false; // cascaded feature detection for Internet Explorer - d = d.replace(/^.*\s+(\S+\s+\S+$)/, "$1"); - playerVersion[0] = parseInt(d.replace(/^(.*)\..*$/, "$1"), 10); - playerVersion[1] = parseInt(d.replace(/^.*\.(.*)\s.*$/, "$1"), 10); - playerVersion[2] = /[a-zA-Z]/.test(d) ? parseInt(d.replace(/^.*[a-zA-Z]+(.*)$/, "$1"), 10) : 0; - } - } - else if (typeof win.ActiveXObject != UNDEF) { - try { - var a = new ActiveXObject(SHOCKWAVE_FLASH_AX); - if (a) { // a will return null when ActiveX is disabled - d = a.GetVariable("$version"); - if (d) { - ie = true; // cascaded feature detection for Internet Explorer - d = d.split(" ")[1].split(","); - playerVersion = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)]; - } - } - } - catch(e) {} - } - return { w3:w3cdom, pv:playerVersion, wk:webkit, ie:ie, win:windows, mac:mac }; - }(), - - /* Cross-browser onDomLoad - - Will fire an event as soon as the DOM of a web page is loaded - - Internet Explorer workaround based on Diego Perini's solution: http://javascript.nwbox.com/IEContentLoaded/ - - Regular onload serves as fallback - */ - onDomLoad = function() { - if (!ua.w3) { return; } - if ((typeof doc.readyState != UNDEF && doc.readyState == "complete") || (typeof doc.readyState == UNDEF && (doc.getElementsByTagName("body")[0] || doc.body))) { // function is fired after onload, e.g. when script is inserted dynamically - callDomLoadFunctions(); - } - if (!isDomLoaded) { - if (typeof doc.addEventListener != UNDEF) { - doc.addEventListener("DOMContentLoaded", callDomLoadFunctions, false); - } - if (ua.ie && ua.win) { - doc.attachEvent(ON_READY_STATE_CHANGE, function() { - if (doc.readyState == "complete") { - doc.detachEvent(ON_READY_STATE_CHANGE, arguments.callee); - callDomLoadFunctions(); - } - }); - if (win == top) { // if not inside an iframe - (function(){ - if (isDomLoaded) { return; } - try { - doc.documentElement.doScroll("left"); - } - catch(e) { - setTimeout(arguments.callee, 0); - return; - } - callDomLoadFunctions(); - })(); - } - } - if (ua.wk) { - (function(){ - if (isDomLoaded) { return; } - if (!/loaded|complete/.test(doc.readyState)) { - setTimeout(arguments.callee, 0); - return; - } - callDomLoadFunctions(); - })(); - } - addLoadEvent(callDomLoadFunctions); - } - }(); - - function callDomLoadFunctions() { - if (isDomLoaded) { return; } - try { // test if we can really add/remove elements to/from the DOM; we don't want to fire it too early - var t = doc.getElementsByTagName("body")[0].appendChild(createElement("span")); - t.parentNode.removeChild(t); - } - catch (e) { return; } - isDomLoaded = true; - var dl = domLoadFnArr.length; - for (var i = 0; i < dl; i++) { - domLoadFnArr[i](); - } - } - - function addDomLoadEvent(fn) { - if (isDomLoaded) { - fn(); - } - else { - domLoadFnArr[domLoadFnArr.length] = fn; // Array.push() is only available in IE5.5+ - } - } - - /* Cross-browser onload - - Based on James Edwards' solution: http://brothercake.com/site/resources/scripts/onload/ - - Will fire an event as soon as a web page including all of its assets are loaded - */ - function addLoadEvent(fn) { - if (typeof win.addEventListener != UNDEF) { - win.addEventListener("load", fn, false); - } - else if (typeof doc.addEventListener != UNDEF) { - doc.addEventListener("load", fn, false); - } - else if (typeof win.attachEvent != UNDEF) { - addListener(win, "onload", fn); - } - else if (typeof win.onload == "function") { - var fnOld = win.onload; - win.onload = function() { - fnOld(); - fn(); - }; - } - else { - win.onload = fn; - } - } - - /* Main function - - Will preferably execute onDomLoad, otherwise onload (as a fallback) - */ - function main() { - if (plugin) { - testPlayerVersion(); - } - else { - matchVersions(); - } - } - - /* Detect the Flash Player version for non-Internet Explorer browsers - - Detecting the plug-in version via the object element is more precise than using the plugins collection item's description: - a. Both release and build numbers can be detected - b. Avoid wrong descriptions by corrupt installers provided by Adobe - c. Avoid wrong descriptions by multiple Flash Player entries in the plugin Array, caused by incorrect browser imports - - Disadvantage of this method is that it depends on the availability of the DOM, while the plugins collection is immediately available - */ - function testPlayerVersion() { - var b = doc.getElementsByTagName("body")[0]; - var o = createElement(OBJECT); - o.setAttribute("type", FLASH_MIME_TYPE); - var t = b.appendChild(o); - if (t) { - var counter = 0; - (function(){ - if (typeof t.GetVariable != UNDEF) { - var d = t.GetVariable("$version"); - if (d) { - d = d.split(" ")[1].split(","); - ua.pv = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)]; - } - } - else if (counter < 10) { - counter++; - setTimeout(arguments.callee, 10); - return; - } - b.removeChild(o); - t = null; - matchVersions(); - })(); - } - else { - matchVersions(); - } - } - - /* Perform Flash Player and SWF version matching; static publishing only - */ - function matchVersions() { - var rl = regObjArr.length; - if (rl > 0) { - for (var i = 0; i < rl; i++) { // for each registered object element - var id = regObjArr[i].id; - var cb = regObjArr[i].callbackFn; - var cbObj = {success:false, id:id}; - if (ua.pv[0] > 0) { - var obj = getElementById(id); - if (obj) { - if (hasPlayerVersion(regObjArr[i].swfVersion) && !(ua.wk && ua.wk < 312)) { // Flash Player version >= published SWF version: Houston, we have a match! - setVisibility(id, true); - if (cb) { - cbObj.success = true; - cbObj.ref = getObjectById(id); - cb(cbObj); - } - } - else if (regObjArr[i].expressInstall && canExpressInstall()) { // show the Adobe Express Install dialog if set by the web page author and if supported - var att = {}; - att.data = regObjArr[i].expressInstall; - att.width = obj.getAttribute("width") || "0"; - att.height = obj.getAttribute("height") || "0"; - if (obj.getAttribute("class")) { att.styleclass = obj.getAttribute("class"); } - if (obj.getAttribute("align")) { att.align = obj.getAttribute("align"); } - // parse HTML object param element's name-value pairs - var par = {}; - var p = obj.getElementsByTagName("param"); - var pl = p.length; - for (var j = 0; j < pl; j++) { - if (p[j].getAttribute("name").toLowerCase() != "movie") { - par[p[j].getAttribute("name")] = p[j].getAttribute("value"); - } - } - showExpressInstall(att, par, id, cb); - } - else { // Flash Player and SWF version mismatch or an older Webkit engine that ignores the HTML object element's nested param elements: display alternative content instead of SWF - displayAltContent(obj); - if (cb) { cb(cbObj); } - } - } - } - else { // if no Flash Player is installed or the fp version cannot be detected we let the HTML object element do its job (either show a SWF or alternative content) - setVisibility(id, true); - if (cb) { - var o = getObjectById(id); // test whether there is an HTML object element or not - if (o && typeof o.SetVariable != UNDEF) { - cbObj.success = true; - cbObj.ref = o; - } - cb(cbObj); - } - } - } - } - } - - function getObjectById(objectIdStr) { - var r = null; - var o = getElementById(objectIdStr); - if (o && o.nodeName == "OBJECT") { - if (typeof o.SetVariable != UNDEF) { - r = o; - } - else { - var n = o.getElementsByTagName(OBJECT)[0]; - if (n) { - r = n; - } - } - } - return r; - } - - /* Requirements for Adobe Express Install - - only one instance can be active at a time - - fp 6.0.65 or higher - - Win/Mac OS only - - no Webkit engines older than version 312 - */ - function canExpressInstall() { - return !isExpressInstallActive && hasPlayerVersion("6.0.65") && (ua.win || ua.mac) && !(ua.wk && ua.wk < 312); - } - - /* Show the Adobe Express Install dialog - - Reference: http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=6a253b75 - */ - function showExpressInstall(att, par, replaceElemIdStr, callbackFn) { - isExpressInstallActive = true; - storedCallbackFn = callbackFn || null; - storedCallbackObj = {success:false, id:replaceElemIdStr}; - var obj = getElementById(replaceElemIdStr); - if (obj) { - if (obj.nodeName == "OBJECT") { // static publishing - storedAltContent = abstractAltContent(obj); - storedAltContentId = null; - } - else { // dynamic publishing - storedAltContent = obj; - storedAltContentId = replaceElemIdStr; - } - att.id = EXPRESS_INSTALL_ID; - if (typeof att.width == UNDEF || (!/%$/.test(att.width) && parseInt(att.width, 10) < 310)) { att.width = "310"; } - if (typeof att.height == UNDEF || (!/%$/.test(att.height) && parseInt(att.height, 10) < 137)) { att.height = "137"; } - doc.title = doc.title.slice(0, 47) + " - Flash Player Installation"; - var pt = ua.ie && ua.win ? "ActiveX" : "PlugIn", - fv = "MMredirectURL=" + encodeURI(window.location).toString().replace(/&/g,"%26") + "&MMplayerType=" + pt + "&MMdoctitle=" + doc.title; - if (typeof par.flashvars != UNDEF) { - par.flashvars += "&" + fv; - } - else { - par.flashvars = fv; - } - // IE only: when a SWF is loading (AND: not available in cache) wait for the readyState of the object element to become 4 before removing it, - // because you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work - if (ua.ie && ua.win && obj.readyState != 4) { - var newObj = createElement("div"); - replaceElemIdStr += "SWFObjectNew"; - newObj.setAttribute("id", replaceElemIdStr); - obj.parentNode.insertBefore(newObj, obj); // insert placeholder div that will be replaced by the object element that loads expressinstall.swf - obj.style.display = "none"; - (function(){ - if (obj.readyState == 4) { - obj.parentNode.removeChild(obj); - } - else { - setTimeout(arguments.callee, 10); - } - })(); - } - createSWF(att, par, replaceElemIdStr); - } - } - - /* Functions to abstract and display alternative content - */ - function displayAltContent(obj) { - if (ua.ie && ua.win && obj.readyState != 4) { - // IE only: when a SWF is loading (AND: not available in cache) wait for the readyState of the object element to become 4 before removing it, - // because you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work - var el = createElement("div"); - obj.parentNode.insertBefore(el, obj); // insert placeholder div that will be replaced by the alternative content - el.parentNode.replaceChild(abstractAltContent(obj), el); - obj.style.display = "none"; - (function(){ - if (obj.readyState == 4) { - obj.parentNode.removeChild(obj); - } - else { - setTimeout(arguments.callee, 10); - } - })(); - } - else { - obj.parentNode.replaceChild(abstractAltContent(obj), obj); - } - } - - function abstractAltContent(obj) { - var ac = createElement("div"); - if (ua.win && ua.ie) { - ac.innerHTML = obj.innerHTML; - } - else { - var nestedObj = obj.getElementsByTagName(OBJECT)[0]; - if (nestedObj) { - var c = nestedObj.childNodes; - if (c) { - var cl = c.length; - for (var i = 0; i < cl; i++) { - if (!(c[i].nodeType == 1 && c[i].nodeName == "PARAM") && !(c[i].nodeType == 8)) { - ac.appendChild(c[i].cloneNode(true)); - } - } - } - } - } - return ac; - } - - /* Cross-browser dynamic SWF creation - */ - function createSWF(attObj, parObj, id) { - var r, el = getElementById(id); - if (ua.wk && ua.wk < 312) { return r; } - if (el) { - if (typeof attObj.id == UNDEF) { // if no 'id' is defined for the object element, it will inherit the 'id' from the alternative content - attObj.id = id; - } - if (ua.ie && ua.win) { // Internet Explorer + the HTML object element + W3C DOM methods do not combine: fall back to outerHTML - var att = ""; - for (var i in attObj) { - if (attObj[i] != Object.prototype[i]) { // filter out prototype additions from other potential libraries - if (i.toLowerCase() == "data") { - parObj.movie = attObj[i]; - } - else if (i.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword - att += ' class="' + attObj[i] + '"'; - } - else if (i.toLowerCase() != "classid") { - att += ' ' + i + '="' + attObj[i] + '"'; - } - } - } - var par = ""; - for (var j in parObj) { - if (parObj[j] != Object.prototype[j]) { // filter out prototype additions from other potential libraries - par += ''; - } - } - el.outerHTML = '' + par + ''; - objIdArr[objIdArr.length] = attObj.id; // stored to fix object 'leaks' on unload (dynamic publishing only) - r = getElementById(attObj.id); - } - else { // well-behaving browsers - var o = createElement(OBJECT); - o.setAttribute("type", FLASH_MIME_TYPE); - for (var m in attObj) { - if (attObj[m] != Object.prototype[m]) { // filter out prototype additions from other potential libraries - if (m.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword - o.setAttribute("class", attObj[m]); - } - else if (m.toLowerCase() != "classid") { // filter out IE specific attribute - o.setAttribute(m, attObj[m]); - } - } - } - for (var n in parObj) { - if (parObj[n] != Object.prototype[n] && n.toLowerCase() != "movie") { // filter out prototype additions from other potential libraries and IE specific param element - createObjParam(o, n, parObj[n]); - } - } - el.parentNode.replaceChild(o, el); - r = o; - } - } - return r; - } - - function createObjParam(el, pName, pValue) { - var p = createElement("param"); - p.setAttribute("name", pName); - p.setAttribute("value", pValue); - el.appendChild(p); - } - - /* Cross-browser SWF removal - - Especially needed to safely and completely remove a SWF in Internet Explorer - */ - function removeSWF(id) { - var obj = getElementById(id); - if (obj && obj.nodeName == "OBJECT") { - if (ua.ie && ua.win) { - obj.style.display = "none"; - (function(){ - if (obj.readyState == 4) { - removeObjectInIE(id); - } - else { - setTimeout(arguments.callee, 10); - } - })(); - } - else { - obj.parentNode.removeChild(obj); - } - } - } - - function removeObjectInIE(id) { - var obj = getElementById(id); - if (obj) { - for (var i in obj) { - if (typeof obj[i] == "function") { - obj[i] = null; - } - } - obj.parentNode.removeChild(obj); - } - } - - /* Functions to optimize JavaScript compression - */ - function getElementById(id) { - var el = null; - try { - el = doc.getElementById(id); - } - catch (e) {} - return el; - } - - function createElement(el) { - return doc.createElement(el); - } - - /* Updated attachEvent function for Internet Explorer - - Stores attachEvent information in an Array, so on unload the detachEvent functions can be called to avoid memory leaks - */ - function addListener(target, eventType, fn) { - target.attachEvent(eventType, fn); - listenersArr[listenersArr.length] = [target, eventType, fn]; - } - - /* Flash Player and SWF content version matching - */ - function hasPlayerVersion(rv) { - var pv = ua.pv, v = rv.split("."); - v[0] = parseInt(v[0], 10); - v[1] = parseInt(v[1], 10) || 0; // supports short notation, e.g. "9" instead of "9.0.0" - v[2] = parseInt(v[2], 10) || 0; - return (pv[0] > v[0] || (pv[0] == v[0] && pv[1] > v[1]) || (pv[0] == v[0] && pv[1] == v[1] && pv[2] >= v[2])) ? true : false; - } - - /* Cross-browser dynamic CSS creation - - Based on Bobby van der Sluis' solution: http://www.bobbyvandersluis.com/articles/dynamicCSS.php - */ - function createCSS(sel, decl, media, newStyle) { - if (ua.ie && ua.mac) { return; } - var h = doc.getElementsByTagName("head")[0]; - if (!h) { return; } // to also support badly authored HTML pages that lack a head element - var m = (media && typeof media == "string") ? media : "screen"; - if (newStyle) { - dynamicStylesheet = null; - dynamicStylesheetMedia = null; - } - if (!dynamicStylesheet || dynamicStylesheetMedia != m) { - // create dynamic stylesheet + get a global reference to it - var s = createElement("style"); - s.setAttribute("type", "text/css"); - s.setAttribute("media", m); - dynamicStylesheet = h.appendChild(s); - if (ua.ie && ua.win && typeof doc.styleSheets != UNDEF && doc.styleSheets.length > 0) { - dynamicStylesheet = doc.styleSheets[doc.styleSheets.length - 1]; - } - dynamicStylesheetMedia = m; - } - // add style rule - if (ua.ie && ua.win) { - if (dynamicStylesheet && typeof dynamicStylesheet.addRule == OBJECT) { - dynamicStylesheet.addRule(sel, decl); - } - } - else { - if (dynamicStylesheet && typeof doc.createTextNode != UNDEF) { - dynamicStylesheet.appendChild(doc.createTextNode(sel + " {" + decl + "}")); - } - } - } - - function setVisibility(id, isVisible) { - if (!autoHideShow) { return; } - var v = isVisible ? "visible" : "hidden"; - if (isDomLoaded && getElementById(id)) { - getElementById(id).style.visibility = v; - } - else { - createCSS("#" + id, "visibility:" + v); - } - } - - /* Filter to avoid XSS attacks - */ - function urlEncodeIfNecessary(s) { - var regex = /[\\\"<>\.;]/; - var hasBadChars = regex.exec(s) != null; - return hasBadChars && typeof encodeURIComponent != UNDEF ? encodeURIComponent(s) : s; - } - - /* Release memory to avoid memory leaks caused by closures, fix hanging audio/video threads and force open sockets/NetConnections to disconnect (Internet Explorer only) - */ - var cleanup = function() { - if (ua.ie && ua.win) { - window.attachEvent("onunload", function() { - // remove listeners to avoid memory leaks - var ll = listenersArr.length; - for (var i = 0; i < ll; i++) { - listenersArr[i][0].detachEvent(listenersArr[i][1], listenersArr[i][2]); - } - // cleanup dynamically embedded objects to fix audio/video threads and force open sockets and NetConnections to disconnect - var il = objIdArr.length; - for (var j = 0; j < il; j++) { - removeSWF(objIdArr[j]); - } - // cleanup library's main closures to avoid memory leaks - for (var k in ua) { - ua[k] = null; - } - ua = null; - for (var l in swfobject) { - swfobject[l] = null; - } - swfobject = null; - }); - } - }(); - - return { - /* Public API - - Reference: http://code.google.com/p/swfobject/wiki/documentation - */ - registerObject: function(objectIdStr, swfVersionStr, xiSwfUrlStr, callbackFn) { - if (ua.w3 && objectIdStr && swfVersionStr) { - var regObj = {}; - regObj.id = objectIdStr; - regObj.swfVersion = swfVersionStr; - regObj.expressInstall = xiSwfUrlStr; - regObj.callbackFn = callbackFn; - regObjArr[regObjArr.length] = regObj; - setVisibility(objectIdStr, false); - } - else if (callbackFn) { - callbackFn({success:false, id:objectIdStr}); - } - }, - - getObjectById: function(objectIdStr) { - if (ua.w3) { - return getObjectById(objectIdStr); - } - }, - - embedSWF: function(swfUrlStr, replaceElemIdStr, widthStr, heightStr, swfVersionStr, xiSwfUrlStr, flashvarsObj, parObj, attObj, callbackFn) { - var callbackObj = {success:false, id:replaceElemIdStr}; - if (ua.w3 && !(ua.wk && ua.wk < 312) && swfUrlStr && replaceElemIdStr && widthStr && heightStr && swfVersionStr) { - setVisibility(replaceElemIdStr, false); - addDomLoadEvent(function() { - widthStr += ""; // auto-convert to string - heightStr += ""; - var att = {}; - if (attObj && typeof attObj === OBJECT) { - for (var i in attObj) { // copy object to avoid the use of references, because web authors often reuse attObj for multiple SWFs - att[i] = attObj[i]; - } - } - att.data = swfUrlStr; - att.width = widthStr; - att.height = heightStr; - var par = {}; - if (parObj && typeof parObj === OBJECT) { - for (var j in parObj) { // copy object to avoid the use of references, because web authors often reuse parObj for multiple SWFs - par[j] = parObj[j]; - } - } - if (flashvarsObj && typeof flashvarsObj === OBJECT) { - for (var k in flashvarsObj) { // copy object to avoid the use of references, because web authors often reuse flashvarsObj for multiple SWFs - if (typeof par.flashvars != UNDEF) { - par.flashvars += "&" + k + "=" + flashvarsObj[k]; - } - else { - par.flashvars = k + "=" + flashvarsObj[k]; - } - } - } - if (hasPlayerVersion(swfVersionStr)) { // create SWF - var obj = createSWF(att, par, replaceElemIdStr); - if (att.id == replaceElemIdStr) { - setVisibility(replaceElemIdStr, true); - } - callbackObj.success = true; - callbackObj.ref = obj; - } - else if (xiSwfUrlStr && canExpressInstall()) { // show Adobe Express Install - att.data = xiSwfUrlStr; - showExpressInstall(att, par, replaceElemIdStr, callbackFn); - return; - } - else { // show alternative content - setVisibility(replaceElemIdStr, true); - } - if (callbackFn) { callbackFn(callbackObj); } - }); - } - else if (callbackFn) { callbackFn(callbackObj); } - }, - - switchOffAutoHideShow: function() { - autoHideShow = false; - }, - - ua: ua, - - getFlashPlayerVersion: function() { - return { major:ua.pv[0], minor:ua.pv[1], release:ua.pv[2] }; - }, - - hasFlashPlayerVersion: hasPlayerVersion, - - createSWF: function(attObj, parObj, replaceElemIdStr) { - if (ua.w3) { - return createSWF(attObj, parObj, replaceElemIdStr); - } - else { - return undefined; - } - }, - - showExpressInstall: function(att, par, replaceElemIdStr, callbackFn) { - if (ua.w3 && canExpressInstall()) { - showExpressInstall(att, par, replaceElemIdStr, callbackFn); - } - }, - - removeSWF: function(objElemIdStr) { - if (ua.w3) { - removeSWF(objElemIdStr); - } - }, - - createCSS: function(selStr, declStr, mediaStr, newStyleBoolean) { - if (ua.w3) { - createCSS(selStr, declStr, mediaStr, newStyleBoolean); - } - }, - - addDomLoadEvent: addDomLoadEvent, - - addLoadEvent: addLoadEvent, - - getQueryParamValue: function(param) { - var q = doc.location.search || doc.location.hash; - if (q) { - if (/\?/.test(q)) { q = q.split("?")[1]; } // strip question mark - if (param == null) { - return urlEncodeIfNecessary(q); - } - var pairs = q.split("&"); - for (var i = 0; i < pairs.length; i++) { - if (pairs[i].substring(0, pairs[i].indexOf("=")) == param) { - return urlEncodeIfNecessary(pairs[i].substring((pairs[i].indexOf("=") + 1))); - } - } - } - return ""; - }, - - // For internal usage only - expressInstallCallback: function() { - if (isExpressInstallActive) { - var obj = getElementById(EXPRESS_INSTALL_ID); - if (obj && storedAltContent) { - obj.parentNode.replaceChild(storedAltContent, obj); - if (storedAltContentId) { - setVisibility(storedAltContentId, true); - if (ua.ie && ua.win) { storedAltContent.style.display = "block"; } - } - if (storedCallbackFn) { storedCallbackFn(storedCallbackObj); } - } - isExpressInstallActive = false; - } - } - }; -}(); +/*! SWFObject v2.2 + is released under the MIT License +*/ + +var swfobject = function() { + + var UNDEF = "undefined", + OBJECT = "object", + SHOCKWAVE_FLASH = "Shockwave Flash", + SHOCKWAVE_FLASH_AX = "ShockwaveFlash.ShockwaveFlash", + FLASH_MIME_TYPE = "application/x-shockwave-flash", + EXPRESS_INSTALL_ID = "SWFObjectExprInst", + ON_READY_STATE_CHANGE = "onreadystatechange", + + win = window, + doc = document, + nav = navigator, + + plugin = false, + domLoadFnArr = [main], + regObjArr = [], + objIdArr = [], + listenersArr = [], + storedAltContent, + storedAltContentId, + storedCallbackFn, + storedCallbackObj, + isDomLoaded = false, + isExpressInstallActive = false, + dynamicStylesheet, + dynamicStylesheetMedia, + autoHideShow = true, + + /* Centralized function for browser feature detection + - User agent string detection is only used when no good alternative is possible + - Is executed directly for optimal performance + */ + ua = function() { + var w3cdom = typeof doc.getElementById != UNDEF && typeof doc.getElementsByTagName != UNDEF && typeof doc.createElement != UNDEF, + u = nav.userAgent.toLowerCase(), + p = nav.platform.toLowerCase(), + windows = p ? /win/.test(p) : /win/.test(u), + mac = p ? /mac/.test(p) : /mac/.test(u), + webkit = /webkit/.test(u) ? parseFloat(u.replace(/^.*webkit\/(\d+(\.\d+)?).*$/, "$1")) : false, // returns either the webkit version or false if not webkit + ie = !+"\v1", // feature detection based on Andrea Giammarchi's solution: http://webreflection.blogspot.com/2009/01/32-bytes-to-know-if-your-browser-is-ie.html + playerVersion = [0,0,0], + d = null; + if (typeof nav.plugins != UNDEF && typeof nav.plugins[SHOCKWAVE_FLASH] == OBJECT) { + d = nav.plugins[SHOCKWAVE_FLASH].description; + if (d && !(typeof nav.mimeTypes != UNDEF && nav.mimeTypes[FLASH_MIME_TYPE] && !nav.mimeTypes[FLASH_MIME_TYPE].enabledPlugin)) { // navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin indicates whether plug-ins are enabled or disabled in Safari 3+ + plugin = true; + ie = false; // cascaded feature detection for Internet Explorer + d = d.replace(/^.*\s+(\S+\s+\S+$)/, "$1"); + playerVersion[0] = parseInt(d.replace(/^(.*)\..*$/, "$1"), 10); + playerVersion[1] = parseInt(d.replace(/^.*\.(.*)\s.*$/, "$1"), 10); + playerVersion[2] = /[a-zA-Z]/.test(d) ? parseInt(d.replace(/^.*[a-zA-Z]+(.*)$/, "$1"), 10) : 0; + } + } + else if (typeof win.ActiveXObject != UNDEF) { + try { + var a = new ActiveXObject(SHOCKWAVE_FLASH_AX); + if (a) { // a will return null when ActiveX is disabled + d = a.GetVariable("$version"); + if (d) { + ie = true; // cascaded feature detection for Internet Explorer + d = d.split(" ")[1].split(","); + playerVersion = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)]; + } + } + } + catch(e) {} + } + return { w3:w3cdom, pv:playerVersion, wk:webkit, ie:ie, win:windows, mac:mac }; + }(), + + /* Cross-browser onDomLoad + - Will fire an event as soon as the DOM of a web page is loaded + - Internet Explorer workaround based on Diego Perini's solution: http://javascript.nwbox.com/IEContentLoaded/ + - Regular onload serves as fallback + */ + onDomLoad = function() { + if (!ua.w3) { return; } + if ((typeof doc.readyState != UNDEF && doc.readyState == "complete") || (typeof doc.readyState == UNDEF && (doc.getElementsByTagName("body")[0] || doc.body))) { // function is fired after onload, e.g. when script is inserted dynamically + callDomLoadFunctions(); + } + if (!isDomLoaded) { + if (typeof doc.addEventListener != UNDEF) { + doc.addEventListener("DOMContentLoaded", callDomLoadFunctions, false); + } + if (ua.ie && ua.win) { + doc.attachEvent(ON_READY_STATE_CHANGE, function() { + if (doc.readyState == "complete") { + doc.detachEvent(ON_READY_STATE_CHANGE, arguments.callee); + callDomLoadFunctions(); + } + }); + if (win == top) { // if not inside an iframe + (function(){ + if (isDomLoaded) { return; } + try { + doc.documentElement.doScroll("left"); + } + catch(e) { + setTimeout(arguments.callee, 0); + return; + } + callDomLoadFunctions(); + })(); + } + } + if (ua.wk) { + (function(){ + if (isDomLoaded) { return; } + if (!/loaded|complete/.test(doc.readyState)) { + setTimeout(arguments.callee, 0); + return; + } + callDomLoadFunctions(); + })(); + } + addLoadEvent(callDomLoadFunctions); + } + }(); + + function callDomLoadFunctions() { + if (isDomLoaded) { return; } + try { // test if we can really add/remove elements to/from the DOM; we don't want to fire it too early + var t = doc.getElementsByTagName("body")[0].appendChild(createElement("span")); + t.parentNode.removeChild(t); + } + catch (e) { return; } + isDomLoaded = true; + var dl = domLoadFnArr.length; + for (var i = 0; i < dl; i++) { + domLoadFnArr[i](); + } + } + + function addDomLoadEvent(fn) { + if (isDomLoaded) { + fn(); + } + else { + domLoadFnArr[domLoadFnArr.length] = fn; // Array.push() is only available in IE5.5+ + } + } + + /* Cross-browser onload + - Based on James Edwards' solution: http://brothercake.com/site/resources/scripts/onload/ + - Will fire an event as soon as a web page including all of its assets are loaded + */ + function addLoadEvent(fn) { + if (typeof win.addEventListener != UNDEF) { + win.addEventListener("load", fn, false); + } + else if (typeof doc.addEventListener != UNDEF) { + doc.addEventListener("load", fn, false); + } + else if (typeof win.attachEvent != UNDEF) { + addListener(win, "onload", fn); + } + else if (typeof win.onload == "function") { + var fnOld = win.onload; + win.onload = function() { + fnOld(); + fn(); + }; + } + else { + win.onload = fn; + } + } + + /* Main function + - Will preferably execute onDomLoad, otherwise onload (as a fallback) + */ + function main() { + if (plugin) { + testPlayerVersion(); + } + else { + matchVersions(); + } + } + + /* Detect the Flash Player version for non-Internet Explorer browsers + - Detecting the plug-in version via the object element is more precise than using the plugins collection item's description: + a. Both release and build numbers can be detected + b. Avoid wrong descriptions by corrupt installers provided by Adobe + c. Avoid wrong descriptions by multiple Flash Player entries in the plugin Array, caused by incorrect browser imports + - Disadvantage of this method is that it depends on the availability of the DOM, while the plugins collection is immediately available + */ + function testPlayerVersion() { + var b = doc.getElementsByTagName("body")[0]; + var o = createElement(OBJECT); + o.setAttribute("type", FLASH_MIME_TYPE); + var t = b.appendChild(o); + if (t) { + var counter = 0; + (function(){ + if (typeof t.GetVariable != UNDEF) { + var d = t.GetVariable("$version"); + if (d) { + d = d.split(" ")[1].split(","); + ua.pv = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)]; + } + } + else if (counter < 10) { + counter++; + setTimeout(arguments.callee, 10); + return; + } + b.removeChild(o); + t = null; + matchVersions(); + })(); + } + else { + matchVersions(); + } + } + + /* Perform Flash Player and SWF version matching; static publishing only + */ + function matchVersions() { + var rl = regObjArr.length; + if (rl > 0) { + for (var i = 0; i < rl; i++) { // for each registered object element + var id = regObjArr[i].id; + var cb = regObjArr[i].callbackFn; + var cbObj = {success:false, id:id}; + if (ua.pv[0] > 0) { + var obj = getElementById(id); + if (obj) { + if (hasPlayerVersion(regObjArr[i].swfVersion) && !(ua.wk && ua.wk < 312)) { // Flash Player version >= published SWF version: Houston, we have a match! + setVisibility(id, true); + if (cb) { + cbObj.success = true; + cbObj.ref = getObjectById(id); + cb(cbObj); + } + } + else if (regObjArr[i].expressInstall && canExpressInstall()) { // show the Adobe Express Install dialog if set by the web page author and if supported + var att = {}; + att.data = regObjArr[i].expressInstall; + att.width = obj.getAttribute("width") || "0"; + att.height = obj.getAttribute("height") || "0"; + if (obj.getAttribute("class")) { att.styleclass = obj.getAttribute("class"); } + if (obj.getAttribute("align")) { att.align = obj.getAttribute("align"); } + // parse HTML object param element's name-value pairs + var par = {}; + var p = obj.getElementsByTagName("param"); + var pl = p.length; + for (var j = 0; j < pl; j++) { + if (p[j].getAttribute("name").toLowerCase() != "movie") { + par[p[j].getAttribute("name")] = p[j].getAttribute("value"); + } + } + showExpressInstall(att, par, id, cb); + } + else { // Flash Player and SWF version mismatch or an older Webkit engine that ignores the HTML object element's nested param elements: display alternative content instead of SWF + displayAltContent(obj); + if (cb) { cb(cbObj); } + } + } + } + else { // if no Flash Player is installed or the fp version cannot be detected we let the HTML object element do its job (either show a SWF or alternative content) + setVisibility(id, true); + if (cb) { + var o = getObjectById(id); // test whether there is an HTML object element or not + if (o && typeof o.SetVariable != UNDEF) { + cbObj.success = true; + cbObj.ref = o; + } + cb(cbObj); + } + } + } + } + } + + function getObjectById(objectIdStr) { + var r = null; + var o = getElementById(objectIdStr); + if (o && o.nodeName == "OBJECT") { + if (typeof o.SetVariable != UNDEF) { + r = o; + } + else { + var n = o.getElementsByTagName(OBJECT)[0]; + if (n) { + r = n; + } + } + } + return r; + } + + /* Requirements for Adobe Express Install + - only one instance can be active at a time + - fp 6.0.65 or higher + - Win/Mac OS only + - no Webkit engines older than version 312 + */ + function canExpressInstall() { + return !isExpressInstallActive && hasPlayerVersion("6.0.65") && (ua.win || ua.mac) && !(ua.wk && ua.wk < 312); + } + + /* Show the Adobe Express Install dialog + - Reference: http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=6a253b75 + */ + function showExpressInstall(att, par, replaceElemIdStr, callbackFn) { + isExpressInstallActive = true; + storedCallbackFn = callbackFn || null; + storedCallbackObj = {success:false, id:replaceElemIdStr}; + var obj = getElementById(replaceElemIdStr); + if (obj) { + if (obj.nodeName == "OBJECT") { // static publishing + storedAltContent = abstractAltContent(obj); + storedAltContentId = null; + } + else { // dynamic publishing + storedAltContent = obj; + storedAltContentId = replaceElemIdStr; + } + att.id = EXPRESS_INSTALL_ID; + if (typeof att.width == UNDEF || (!/%$/.test(att.width) && parseInt(att.width, 10) < 310)) { att.width = "310"; } + if (typeof att.height == UNDEF || (!/%$/.test(att.height) && parseInt(att.height, 10) < 137)) { att.height = "137"; } + doc.title = doc.title.slice(0, 47) + " - Flash Player Installation"; + var pt = ua.ie && ua.win ? "ActiveX" : "PlugIn", + fv = "MMredirectURL=" + encodeURI(window.location).toString().replace(/&/g,"%26") + "&MMplayerType=" + pt + "&MMdoctitle=" + doc.title; + if (typeof par.flashvars != UNDEF) { + par.flashvars += "&" + fv; + } + else { + par.flashvars = fv; + } + // IE only: when a SWF is loading (AND: not available in cache) wait for the readyState of the object element to become 4 before removing it, + // because you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work + if (ua.ie && ua.win && obj.readyState != 4) { + var newObj = createElement("div"); + replaceElemIdStr += "SWFObjectNew"; + newObj.setAttribute("id", replaceElemIdStr); + obj.parentNode.insertBefore(newObj, obj); // insert placeholder div that will be replaced by the object element that loads expressinstall.swf + obj.style.display = "none"; + (function(){ + if (obj.readyState == 4) { + obj.parentNode.removeChild(obj); + } + else { + setTimeout(arguments.callee, 10); + } + })(); + } + createSWF(att, par, replaceElemIdStr); + } + } + + /* Functions to abstract and display alternative content + */ + function displayAltContent(obj) { + if (ua.ie && ua.win && obj.readyState != 4) { + // IE only: when a SWF is loading (AND: not available in cache) wait for the readyState of the object element to become 4 before removing it, + // because you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work + var el = createElement("div"); + obj.parentNode.insertBefore(el, obj); // insert placeholder div that will be replaced by the alternative content + el.parentNode.replaceChild(abstractAltContent(obj), el); + obj.style.display = "none"; + (function(){ + if (obj.readyState == 4) { + obj.parentNode.removeChild(obj); + } + else { + setTimeout(arguments.callee, 10); + } + })(); + } + else { + obj.parentNode.replaceChild(abstractAltContent(obj), obj); + } + } + + function abstractAltContent(obj) { + var ac = createElement("div"); + if (ua.win && ua.ie) { + ac.innerHTML = obj.innerHTML; + } + else { + var nestedObj = obj.getElementsByTagName(OBJECT)[0]; + if (nestedObj) { + var c = nestedObj.childNodes; + if (c) { + var cl = c.length; + for (var i = 0; i < cl; i++) { + if (!(c[i].nodeType == 1 && c[i].nodeName == "PARAM") && !(c[i].nodeType == 8)) { + ac.appendChild(c[i].cloneNode(true)); + } + } + } + } + } + return ac; + } + + /* Cross-browser dynamic SWF creation + */ + function createSWF(attObj, parObj, id) { + var r, el = getElementById(id); + if (ua.wk && ua.wk < 312) { return r; } + if (el) { + if (typeof attObj.id == UNDEF) { // if no 'id' is defined for the object element, it will inherit the 'id' from the alternative content + attObj.id = id; + } + if (ua.ie && ua.win) { // Internet Explorer + the HTML object element + W3C DOM methods do not combine: fall back to outerHTML + var att = ""; + for (var i in attObj) { + if (attObj[i] != Object.prototype[i]) { // filter out prototype additions from other potential libraries + if (i.toLowerCase() == "data") { + parObj.movie = attObj[i]; + } + else if (i.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword + att += ' class="' + attObj[i] + '"'; + } + else if (i.toLowerCase() != "classid") { + att += ' ' + i + '="' + attObj[i] + '"'; + } + } + } + var par = ""; + for (var j in parObj) { + if (parObj[j] != Object.prototype[j]) { // filter out prototype additions from other potential libraries + par += ''; + } + } + el.outerHTML = '' + par + ''; + objIdArr[objIdArr.length] = attObj.id; // stored to fix object 'leaks' on unload (dynamic publishing only) + r = getElementById(attObj.id); + } + else { // well-behaving browsers + var o = createElement(OBJECT); + o.setAttribute("type", FLASH_MIME_TYPE); + for (var m in attObj) { + if (attObj[m] != Object.prototype[m]) { // filter out prototype additions from other potential libraries + if (m.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword + o.setAttribute("class", attObj[m]); + } + else if (m.toLowerCase() != "classid") { // filter out IE specific attribute + o.setAttribute(m, attObj[m]); + } + } + } + for (var n in parObj) { + if (parObj[n] != Object.prototype[n] && n.toLowerCase() != "movie") { // filter out prototype additions from other potential libraries and IE specific param element + createObjParam(o, n, parObj[n]); + } + } + el.parentNode.replaceChild(o, el); + r = o; + } + } + return r; + } + + function createObjParam(el, pName, pValue) { + var p = createElement("param"); + p.setAttribute("name", pName); + p.setAttribute("value", pValue); + el.appendChild(p); + } + + /* Cross-browser SWF removal + - Especially needed to safely and completely remove a SWF in Internet Explorer + */ + function removeSWF(id) { + var obj = getElementById(id); + if (obj && obj.nodeName == "OBJECT") { + if (ua.ie && ua.win) { + obj.style.display = "none"; + (function(){ + if (obj.readyState == 4) { + removeObjectInIE(id); + } + else { + setTimeout(arguments.callee, 10); + } + })(); + } + else { + obj.parentNode.removeChild(obj); + } + } + } + + function removeObjectInIE(id) { + var obj = getElementById(id); + if (obj) { + for (var i in obj) { + if (typeof obj[i] == "function") { + obj[i] = null; + } + } + obj.parentNode.removeChild(obj); + } + } + + /* Functions to optimize JavaScript compression + */ + function getElementById(id) { + var el = null; + try { + el = doc.getElementById(id); + } + catch (e) {} + return el; + } + + function createElement(el) { + return doc.createElement(el); + } + + /* Updated attachEvent function for Internet Explorer + - Stores attachEvent information in an Array, so on unload the detachEvent functions can be called to avoid memory leaks + */ + function addListener(target, eventType, fn) { + target.attachEvent(eventType, fn); + listenersArr[listenersArr.length] = [target, eventType, fn]; + } + + /* Flash Player and SWF content version matching + */ + function hasPlayerVersion(rv) { + var pv = ua.pv, v = rv.split("."); + v[0] = parseInt(v[0], 10); + v[1] = parseInt(v[1], 10) || 0; // supports short notation, e.g. "9" instead of "9.0.0" + v[2] = parseInt(v[2], 10) || 0; + return (pv[0] > v[0] || (pv[0] == v[0] && pv[1] > v[1]) || (pv[0] == v[0] && pv[1] == v[1] && pv[2] >= v[2])) ? true : false; + } + + /* Cross-browser dynamic CSS creation + - Based on Bobby van der Sluis' solution: http://www.bobbyvandersluis.com/articles/dynamicCSS.php + */ + function createCSS(sel, decl, media, newStyle) { + if (ua.ie && ua.mac) { return; } + var h = doc.getElementsByTagName("head")[0]; + if (!h) { return; } // to also support badly authored HTML pages that lack a head element + var m = (media && typeof media == "string") ? media : "screen"; + if (newStyle) { + dynamicStylesheet = null; + dynamicStylesheetMedia = null; + } + if (!dynamicStylesheet || dynamicStylesheetMedia != m) { + // create dynamic stylesheet + get a global reference to it + var s = createElement("style"); + s.setAttribute("type", "text/css"); + s.setAttribute("media", m); + dynamicStylesheet = h.appendChild(s); + if (ua.ie && ua.win && typeof doc.styleSheets != UNDEF && doc.styleSheets.length > 0) { + dynamicStylesheet = doc.styleSheets[doc.styleSheets.length - 1]; + } + dynamicStylesheetMedia = m; + } + // add style rule + if (ua.ie && ua.win) { + if (dynamicStylesheet && typeof dynamicStylesheet.addRule == OBJECT) { + dynamicStylesheet.addRule(sel, decl); + } + } + else { + if (dynamicStylesheet && typeof doc.createTextNode != UNDEF) { + dynamicStylesheet.appendChild(doc.createTextNode(sel + " {" + decl + "}")); + } + } + } + + function setVisibility(id, isVisible) { + if (!autoHideShow) { return; } + var v = isVisible ? "visible" : "hidden"; + if (isDomLoaded && getElementById(id)) { + getElementById(id).style.visibility = v; + } + else { + createCSS("#" + id, "visibility:" + v); + } + } + + /* Filter to avoid XSS attacks + */ + function urlEncodeIfNecessary(s) { + var regex = /[\\\"<>\.;]/; + var hasBadChars = regex.exec(s) != null; + return hasBadChars && typeof encodeURIComponent != UNDEF ? encodeURIComponent(s) : s; + } + + /* Release memory to avoid memory leaks caused by closures, fix hanging audio/video threads and force open sockets/NetConnections to disconnect (Internet Explorer only) + */ + var cleanup = function() { + if (ua.ie && ua.win) { + window.attachEvent("onunload", function() { + // remove listeners to avoid memory leaks + var ll = listenersArr.length; + for (var i = 0; i < ll; i++) { + listenersArr[i][0].detachEvent(listenersArr[i][1], listenersArr[i][2]); + } + // cleanup dynamically embedded objects to fix audio/video threads and force open sockets and NetConnections to disconnect + var il = objIdArr.length; + for (var j = 0; j < il; j++) { + removeSWF(objIdArr[j]); + } + // cleanup library's main closures to avoid memory leaks + for (var k in ua) { + ua[k] = null; + } + ua = null; + for (var l in swfobject) { + swfobject[l] = null; + } + swfobject = null; + }); + } + }(); + + return { + /* Public API + - Reference: http://code.google.com/p/swfobject/wiki/documentation + */ + registerObject: function(objectIdStr, swfVersionStr, xiSwfUrlStr, callbackFn) { + if (ua.w3 && objectIdStr && swfVersionStr) { + var regObj = {}; + regObj.id = objectIdStr; + regObj.swfVersion = swfVersionStr; + regObj.expressInstall = xiSwfUrlStr; + regObj.callbackFn = callbackFn; + regObjArr[regObjArr.length] = regObj; + setVisibility(objectIdStr, false); + } + else if (callbackFn) { + callbackFn({success:false, id:objectIdStr}); + } + }, + + getObjectById: function(objectIdStr) { + if (ua.w3) { + return getObjectById(objectIdStr); + } + }, + + embedSWF: function(swfUrlStr, replaceElemIdStr, widthStr, heightStr, swfVersionStr, xiSwfUrlStr, flashvarsObj, parObj, attObj, callbackFn) { + var callbackObj = {success:false, id:replaceElemIdStr}; + if (ua.w3 && !(ua.wk && ua.wk < 312) && swfUrlStr && replaceElemIdStr && widthStr && heightStr && swfVersionStr) { + setVisibility(replaceElemIdStr, false); + addDomLoadEvent(function() { + widthStr += ""; // auto-convert to string + heightStr += ""; + var att = {}; + if (attObj && typeof attObj === OBJECT) { + for (var i in attObj) { // copy object to avoid the use of references, because web authors often reuse attObj for multiple SWFs + att[i] = attObj[i]; + } + } + att.data = swfUrlStr; + att.width = widthStr; + att.height = heightStr; + var par = {}; + if (parObj && typeof parObj === OBJECT) { + for (var j in parObj) { // copy object to avoid the use of references, because web authors often reuse parObj for multiple SWFs + par[j] = parObj[j]; + } + } + if (flashvarsObj && typeof flashvarsObj === OBJECT) { + for (var k in flashvarsObj) { // copy object to avoid the use of references, because web authors often reuse flashvarsObj for multiple SWFs + if (typeof par.flashvars != UNDEF) { + par.flashvars += "&" + k + "=" + flashvarsObj[k]; + } + else { + par.flashvars = k + "=" + flashvarsObj[k]; + } + } + } + if (hasPlayerVersion(swfVersionStr)) { // create SWF + var obj = createSWF(att, par, replaceElemIdStr); + if (att.id == replaceElemIdStr) { + setVisibility(replaceElemIdStr, true); + } + callbackObj.success = true; + callbackObj.ref = obj; + } + else if (xiSwfUrlStr && canExpressInstall()) { // show Adobe Express Install + att.data = xiSwfUrlStr; + showExpressInstall(att, par, replaceElemIdStr, callbackFn); + return; + } + else { // show alternative content + setVisibility(replaceElemIdStr, true); + } + if (callbackFn) { callbackFn(callbackObj); } + }); + } + else if (callbackFn) { callbackFn(callbackObj); } + }, + + switchOffAutoHideShow: function() { + autoHideShow = false; + }, + + ua: ua, + + getFlashPlayerVersion: function() { + return { major:ua.pv[0], minor:ua.pv[1], release:ua.pv[2] }; + }, + + hasFlashPlayerVersion: hasPlayerVersion, + + createSWF: function(attObj, parObj, replaceElemIdStr) { + if (ua.w3) { + return createSWF(attObj, parObj, replaceElemIdStr); + } + else { + return undefined; + } + }, + + showExpressInstall: function(att, par, replaceElemIdStr, callbackFn) { + if (ua.w3 && canExpressInstall()) { + showExpressInstall(att, par, replaceElemIdStr, callbackFn); + } + }, + + removeSWF: function(objElemIdStr) { + if (ua.w3) { + removeSWF(objElemIdStr); + } + }, + + createCSS: function(selStr, declStr, mediaStr, newStyleBoolean) { + if (ua.w3) { + createCSS(selStr, declStr, mediaStr, newStyleBoolean); + } + }, + + addDomLoadEvent: addDomLoadEvent, + + addLoadEvent: addLoadEvent, + + getQueryParamValue: function(param) { + var q = doc.location.search || doc.location.hash; + if (q) { + if (/\?/.test(q)) { q = q.split("?")[1]; } // strip question mark + if (param == null) { + return urlEncodeIfNecessary(q); + } + var pairs = q.split("&"); + for (var i = 0; i < pairs.length; i++) { + if (pairs[i].substring(0, pairs[i].indexOf("=")) == param) { + return urlEncodeIfNecessary(pairs[i].substring((pairs[i].indexOf("=") + 1))); + } + } + } + return ""; + }, + + // For internal usage only + expressInstallCallback: function() { + if (isExpressInstallActive) { + var obj = getElementById(EXPRESS_INSTALL_ID); + if (obj && storedAltContent) { + obj.parentNode.replaceChild(storedAltContent, obj); + if (storedAltContentId) { + setVisibility(storedAltContentId, true); + if (ua.ie && ua.win) { storedAltContent.style.display = "block"; } + } + if (storedCallbackFn) { storedCallbackFn(storedCallbackObj); } + } + isExpressInstallActive = false; + } + } + }; +}(); diff --git a/libs/HowToDownloadSWC.txt b/libs/HowToDownloadSWC.txt index fe52445..24bc47e 100644 --- a/libs/HowToDownloadSWC.txt +++ b/libs/HowToDownloadSWC.txt @@ -1,3 +1,3 @@ -Download the SWC (the API Library) from http://links.esri.com/flex-api/latest-download - -More information on ArcGIS API for Flex: http://links.esri.com/flex-api +Download the SWC (the API Library) from http://links.esri.com/flex-api/latest-download + +More information on ArcGIS API for Flex: http://links.esri.com/flex-api diff --git a/license.txt b/license.txt index 581f19a..7df6c22 100644 --- a/license.txt +++ b/license.txt @@ -1,49 +1,49 @@ -Apache License - 2.0 - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - -1. You must give any other recipients of the Work or Derivative Works a copy of this License; and -2. You must cause any modified files to carry prominent notices stating that You changed the files; and -3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and -4. If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - +Apache License - 2.0 + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + +1. You must give any other recipients of the Work or Derivative Works a copy of this License; and +2. You must cause any modified files to carry prominent notices stating that You changed the files; and +3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and +4. If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + diff --git a/locale/ar/ViewerStrings.properties b/locale/ar/ViewerStrings.properties index db728a5..abeea0a 100644 --- a/locale/ar/ViewerStrings.properties +++ b/locale/ar/ViewerStrings.properties @@ -1,350 +1,350 @@ - - -contextMenuText=حول ArcGIS Viewer for Flex... -aboutText=هذا التطبيق يستخدم الإصدار 3.1 من ArcGIS Viewer for Flex. تاريخ الإصدار 2012-12-12 . -aboutLearnMoreBtn=تعلم المزيد -aboutCloseBtn=إغلاق - - - -close=إغلاق -minimize=تصغير - - -locateExampleValueX=31.1311 -locateExampleValueY=29.9761 - - -clearLabel=مسح -deleteLabel=حذف -loadingLabel=جاري التحميل... -okLabel=موافق -errorLabel=خطأ -problemLabel=مشكلة -noFeatures=لم يتم العثور على معالم. -resultsLabel=النتائج -saveLabel=حفظ - - -unitsFeet=قدم -unitsFeetAbbr=ق -unitsKilometers=كيلومتر -unitsKilometersAbbr=كم -unitsMeters=متر -unitsMetersAbbr=م -unitsMiles=أميال -unitsMilesAbbr=ميل -unitsYards=ياردات -unitsYardsAbbr=ي - -unitsAcres=فدان -unitsAcresAbbr=ac -unitsHectares=هكتار -unitsHectaresAbbr=ha -unitsSquareFeet=قدم مربع -unitsSquareFeetAbbr=ق2 -unitsSquareKilometers=كيلومتر مربع -unitsSquareKilometersAbbr=كم2 -unitsSquareMeters=متر مربع -unitsSquareMetersAbbr=م2 -unitsSquareMiles=ميل مربع -unitsSquareMilesAbbr=ميل مربع -unitsSquareYards=ياردة مربعة -unitsSquareYardsAbbr=ي2 - - -tocMapLayerZoomToLabel=تقريب إلى -tocMapLayerTransparencyLabel=الشفافية -tocMapLayerOpaqueLabel=غير شفاف -tocMapLayerTransparentLabel=شفاف -tocMapLayerMoveUpLabel=تنقل لأعلى -tocMapLayerMoveDownLabel=تنقل لأسفل -tocMapLayerRemoveLabel=إزالة -tocMapLayerDescriptionLabel=الوصف -tocMapLayerDownloadLabel=تحميل - - -incorrectLayerTypeText={0} ليس نوع طبقة معتمد. استخدم "arcims" أو "bing" أو "csv" أو "dynamic" أو "feature" أو "georss" أو "image" أو "kml" أو "osm" أو "tiled" أو "wms" أو "wmts" بدلاً منه. - - -missingConfigFileText=تعذر العثور على {0} -httpResponseStatus=حالة استجابة http: {0} -faultCode=رمز الخطأ: {0} -faultInfo=معلومات الخطأ: {0} -faultDetail=تفاصيل الخطأ: {0} - - -parseConfigErrorText=حدثت مشكلة أثناء تحليل ملف تكوين {0} -standalonePlayerExternalInterfaceErrorText=حدث خطأ ما. لا يعمل ExternalInterface في مشغل مستقل. -layerFailedToLoad:فشل تحميل الطبقة {0}: {1} -couldNotFetchBasemapData=تعذر إحضار بيانات خريطة الأساس:\n{0} -couldNotConnectToPortal=تعذر الاتصال بالمدخل. -couldNotQueryPortal=تعذر الاستعلام عن المدخل. -couldNotQueryPortalItems=تعذر الاستعلام عن عناصر المدخل. -serverMissingCrossDomain=يفتقد خادم GIS لملف متداخل في المجال. -serviceIsInaccessible=الخدمة غير موجودة أو متعذر الحصول عليها. -unauthorizedAccess=ليس لديك أذونات للوصول إلى هذه الخدمة. -unknownErrorCause=سبب الخطأ غير معروف. -resourceAccessDenied=لا تتوفر لديك أذونات للوصول إلى هذا المورد. -signInAborted=تم إحباظ تسجيل الدخول. -invalidWidgetId=widgetId غير صالح: {0} -printTaskExecutionError=حدث خطأ أثناء تنفيذ مهمة الطباعة:\n\n{0} -gpServiceConnectionError=يتعذر الاتصال بخدمة GP:\n{0}\n\n{1}\n{2} -locatorServiceConnectionError=يتعذر الاتصال بخدمة محدد الموقع:\n{0}\n\n{1}\n{2} -singleLineGeocodingNotSupportedError=لا تقوم خدمة محدد الموقع بدعم الترميز الجغرافي أحادي السطر. -rssFeedParsingError=حدثت مشكلة أثناء توزيع موجز RSS. {0} -httpResponseNotXMLError=استجابة HTTP ليست بتنسيق XML. -unknownRSSFeedTypeError=يتعذر تحديد نوع موجز RSS. -initializationError=حدثت مشكلة أثناء تهيئة: {0} -unableToDetermineGPExecutionType=تعذر تحديد نوع تنفيذ المعالجة الجغرافية: -projectionError=حدث خطأ أثناء عرض الشكل الهندسي: {0} -cannotRunTaskExecutionTypeUnknownError=يتعذر تشغيل المهمة: نوع التنفيذ غير معروف. -layerDataRetrievalError=تعذر إرجاع بيانات الطبقة. -couldNotDeleteFeature=تعذر حذف المعلم -couldNotUpdateFeatureError=تعذر تحديث المعلم، استعادة القيمة القديمة - - -configFileCrossDomain=مشكلة محتملة عبر المجالات: {0}{1} - - -openToolTip=انقر لفتح خريطة النظرة العامة -closeToolTip=انقر لإغلاق خريطة النظرة العامة - - -layerListLabel=المزيد... -basemap=خريطة الأساس - - -aboutLabel=حول -searchPrompt=إدخال عنوان -searchResultTitleLabel=الموقع -noResultsFoundLabel=لم يتم العثور على نتائج - - -fullExtentLabel=امتداد كامل -panDownLabel=تحريك للأسفل -panLeftLabel=تحريك لليسار -panRightLabel=تحريك لليمين -panUpLabel=تحريك للأعلى -previousExtentLabel=الامتداد السابق -nextExtentLabel=الامتداد التالي -panLabel=تحريك -zoomInLabel=تكبير -zoomOutLabel=تصغير - - - - - - -addTextLabel=إضافة نص -drawPointLabel=رسم نقطة -drawLineLabel=رسم خط -drawFreehandLineLabel=رسم خط يدوي -drawPolygonLabel=رسم مضلع -drawFreehandPolygonLabel=رسم مضلع يدوي -drawRectangleLabel=رسم مستطيل -drawMapExtentLabel=رسم مدى الخريطة -drawCircleLabel=رسم دائرة -drawEllipseLabel=رسم قطع ناقص -drawClearLabel=مسح الرسومات - -markerStyleCircle=دائرة -markerStyleCross=تقاطع -markerStyleDiamond=معين -markerStyleSquare=مربع -markerStyleTriangle=مثلث -markerStyleX=X - -textFont1=هوائي -textFont2=Courier New -textFont3=Broadway -textFont4=Comic Sans MS -textFont5=Algerian -textFont6=Verdana - -lineStyleSolid=ثابت -lineStyleDash=شرطة -lineStyleDot=نقطة -lineStyleDashDot=شرطة ونقطة -lineStyleDashDotDot=شرطة ونقطتين - -fillStyleSolid=ثابت -fillStyleBackwardDiagonal=مضلع للخلف -fillStyleCross=تقاطع -fillStyleForwardDiagonal=مضلع للأمام -fillStyleHorizontal=أفقي -fillStyleVertical=رأسي - - - -markerAlphaLabel=ألفا -markerColorLabel=لون العلامة -markerSizeLabel=الحجم -markerStyleLabel=النمط -markerOutlineColorLabel=لون الحدود -markerOutlineWidthLabel=الاتساع -textLabel=النص -textColorLabel=اللون -textFontLabel=الخط -textSizeLabel=الحجم -textBoldLabel=B -textBoldTooltip=عريض -textItalicLabel=I -textItalicTooltip=مائل -textUnderlineLabel=U -textUnderlineTooltip=تسطير سفلي -lineAlphaLabel=ألفا -lineColorLabel=لون الخط -lineStyleLabel=النمط -lineWidthLabel=الاتساع -fillAlphaLabel=ألفا -fillColorLabel=لون الملء -fillStyleLabel=النمط -fillOutlineColorLabel=لون الحدود -fillOutlineWidthLabel=الاتساع - - - - -showMeasurementsLabel=إظهار القياسات -distanceUnitsLabel=وحدات المسافة -areaUnitsLabel=وحدات المساحة -areaLabel=المساحة: -perimeterLabel=محيط الشكل: -lengthLabel=الطول: - - -bookmarksLabel=الإشارات المرجعية -addbookmarksLabel=إضافة إشارة مرجعية -addLabel=إضافة الامتداد الحالي كإشارة مرجعية مسماة -bookmarkSubmitLabel=إضافة إشارة مرجعية -bookmarkMissingNameLabel=رجاء إدخال اسم للإشارة المرجعية. -deleteBookmarkTooltip=حذف الإشارة المرجعية - - -descLabel=استخراج البيانات وتحميل ملف zip -step1Label=1. اختر مساحة -dataCurrentExtentLabel=1. سيتم استخراج البيانات من المدى الحالي. -step2Label=2. اختر طبقات لاستخراجها -step3Label=3. اختر تنسيق الملف -step4Label=4. اختر تنسيق البيانات النقطية -step5Label=5. الإسناد المكاني -extractButtonLabel=استخراج -step1ErrorLabel=رجاء اختيار المساحة المرغوب فيها. -step2ErrorLabel=رجاء اختيار طبقات لاستخراجها. -emptyResultsLabel=تم إكمال المهمة ولكن لم تظهر أية نتائج. -saveDataFileLabel=تم إنشاء ملف البيانات. هل ترغب في حفظه؟ - - -attributesLabel=البيانات الجدولية -attachmentsLabel=المرفقات -relatedRecordsLabel=السجلات ذات الصلة -featureLayerOutOfScaleText=طبقة المعالم تقع خارج نطاق مقياس الرسم -showAttachmentsText=المرفقات -showRelatedRecordsText=السجلات ذات الصلة -showAttributesText=الرجوع للخلف -selectTemplateText=اختر قالب لإنشاء معلم -noEditableLayersText=لا توجد طبقات قابلة للتحرير. -noCreateCapabilityLayersText=لم تقم أي من الطبقات بإنشاء الإمكانية -layerNotSupportingAttachmentsText=هذه الطبقة لا تدعم المرفقات -noAttachmentsText=لا توجد مرفقات -chooseFileText=اختر ملفَا لإرفاقه -attachmentSubmitLabel=تنفيذ -attachmentCancelLabel=إلغاء -singleAttachmentText=المعلم به {0} مرفق -multipleAttachmentsText=المعلم به {0} مرفق - - -layerListTitle=رؤية الطبقة - - -locateSubmitLabel=تحديد الموقع -addressLabel=العنوان -coordinatesLabel=الإحداثيات -addressTitle=أدخل العنوان -coordinatesTitle=أدخل الإحداثيات -xLabel=خط الطول (X) -yLabel=خط العرض (Y) -locationsLabel=المواقع التي العثور عليها: -bingCulture=ar-SA -requiredFields=الحقول المطلوبة: -requiredField=حقل مطلوب: -deleteResultTooltip=حذف النتيجة -resultScoreText=مجموع النقاط: -bingResultConfidenceText=ثقة: - - -printSubmitLabel=طباعة -printTitle= -printSubtitle= -printCopyright= -printTitleLabel=العنوان -printSubtitleLabel=العنوان الفرعي -printCopyrightLabel=حقوق النشر -printAuthorLabel=المؤلف -printLayoutTemplatesLabel=قوالب التخطيط -printFormatsLabel=التنسيقات -printScaleLabel=استخدام هذا المقياس - - -filterTitleBarTooltip=ترشيح النتائج -showallTitleBarTooltip=إظهار الكل -filterButtonLabel=ترشيح -clearButtonLabel=إظهار الكل -featuresFoundLabel=تم العثور على المعالم: {0} - - -drivingDirectionLabel=اتجاهات القيادة -routeSubmitLabel=التعرف على الاتجاهات -moveUpTooltip=تنقل لأعلى -moveDownTooltip=تنقل لأسفل -addLocationTooltip=انقر على الخريطة لإضافة موقع -optionsLabel=الخيارات -bestSequenceLabel=البحث عن أفضل تسلسل -milesLabel=أميال -metricLabel=كم -changeRouteSymbolLabel=تغيير رمز المسار -editRouteLabel=تحرير المسار - - -graphicalTitleBarTooltip=اختر معالم -textTitleBarTooltip=اختيار حسب البيانات الجدولية -graphicalsearchLabel=اختيار المعالم حسب -textsearchLabel=اختيار حسب البيانات الجدولية -layerLabel=طبقة البحث -nolayerLabel=لم يتم تحديد طبقة بحث. -searchSubmitLabel=بحث -selectionLabel=المعالم المحددة: - - -latitudeLabel=خط العرض -longitudeLabel=خط الطول - - -gpSubmitLabel=تنفيذ -inputLabel=المدخلات -helpLabel=تعليمات -outputLabel=المخرجات -copyToClipboard=نسخ إلى الحافظة -unsupportedInputType=إدخال {0} غير مدعوم -currentExtentWillBeUsedAsInput=سيتم استخدام الحد الحالي كإدخال. - - -zoomLabel=تقريب إلى - - -helloContent=قم بتغيير هذا النص في ملف التكوين. - - -widgetIDWidgetLabelTemplate=معرّف عنصر الواجهة: {0}، تسمية عنصر الواجهة: {1} -widgetIDWidgetStateTemplate=معرّف عنصر الواجهة: {0}، حالة عنصر الواجهة: {1} -itemLabelWidgetIDItemIDTemplate={0} معرّف عنصر الواجهة: {1} - - -layerSelectionLabel=تحديد طبقة -drawToolMenuLabel=تحديد أداة رسم -selectLabel=تحديد -noLayersLabel=لا توجد طبقات -noChartDataToDisplayLabel=لا توجد بيانات مخطط لعرضها + + +contextMenuText=حول ArcGIS Viewer for Flex... +aboutText=هذا التطبيق يستخدم الإصدار 3.1 من ArcGIS Viewer for Flex. تاريخ الإصدار 2012-12-12 . +aboutLearnMoreBtn=تعلم المزيد +aboutCloseBtn=إغلاق + + + +close=إغلاق +minimize=تصغير + + +locateExampleValueX=31.1311 +locateExampleValueY=29.9761 + + +clearLabel=مسح +deleteLabel=حذف +loadingLabel=جاري التحميل... +okLabel=موافق +errorLabel=خطأ +problemLabel=مشكلة +noFeatures=لم يتم العثور على معالم. +resultsLabel=النتائج +saveLabel=حفظ + + +unitsFeet=قدم +unitsFeetAbbr=ق +unitsKilometers=كيلومتر +unitsKilometersAbbr=كم +unitsMeters=متر +unitsMetersAbbr=م +unitsMiles=أميال +unitsMilesAbbr=ميل +unitsYards=ياردات +unitsYardsAbbr=ي + +unitsAcres=فدان +unitsAcresAbbr=ac +unitsHectares=هكتار +unitsHectaresAbbr=ha +unitsSquareFeet=قدم مربع +unitsSquareFeetAbbr=ق2 +unitsSquareKilometers=كيلومتر مربع +unitsSquareKilometersAbbr=كم2 +unitsSquareMeters=متر مربع +unitsSquareMetersAbbr=م2 +unitsSquareMiles=ميل مربع +unitsSquareMilesAbbr=ميل مربع +unitsSquareYards=ياردة مربعة +unitsSquareYardsAbbr=ي2 + + +tocMapLayerZoomToLabel=تقريب إلى +tocMapLayerTransparencyLabel=الشفافية +tocMapLayerOpaqueLabel=غير شفاف +tocMapLayerTransparentLabel=شفاف +tocMapLayerMoveUpLabel=تنقل لأعلى +tocMapLayerMoveDownLabel=تنقل لأسفل +tocMapLayerRemoveLabel=إزالة +tocMapLayerDescriptionLabel=الوصف +tocMapLayerDownloadLabel=تحميل + + +incorrectLayerTypeText={0} ليس نوع طبقة معتمد. استخدم "arcims" أو "bing" أو "csv" أو "dynamic" أو "feature" أو "georss" أو "image" أو "kml" أو "osm" أو "tiled" أو "wms" أو "wmts" بدلاً منه. + + +missingConfigFileText=تعذر العثور على {0} +httpResponseStatus=حالة استجابة http: {0} +faultCode=رمز الخطأ: {0} +faultInfo=معلومات الخطأ: {0} +faultDetail=تفاصيل الخطأ: {0} + + +parseConfigErrorText=حدثت مشكلة أثناء تحليل ملف تكوين {0} +standalonePlayerExternalInterfaceErrorText=حدث خطأ ما. لا يعمل ExternalInterface في مشغل مستقل. +layerFailedToLoad:فشل تحميل الطبقة {0}: {1} +couldNotFetchBasemapData=تعذر إحضار بيانات خريطة الأساس:\n{0} +couldNotConnectToPortal=تعذر الاتصال بالمدخل. +couldNotQueryPortal=تعذر الاستعلام عن المدخل. +couldNotQueryPortalItems=تعذر الاستعلام عن عناصر المدخل. +serverMissingCrossDomain=يفتقد خادم GIS لملف متداخل في المجال. +serviceIsInaccessible=الخدمة غير موجودة أو متعذر الحصول عليها. +unauthorizedAccess=ليس لديك أذونات للوصول إلى هذه الخدمة. +unknownErrorCause=سبب الخطأ غير معروف. +resourceAccessDenied=لا تتوفر لديك أذونات للوصول إلى هذا المورد. +signInAborted=تم إحباظ تسجيل الدخول. +invalidWidgetId=widgetId غير صالح: {0} +printTaskExecutionError=حدث خطأ أثناء تنفيذ مهمة الطباعة:\n\n{0} +gpServiceConnectionError=يتعذر الاتصال بخدمة GP:\n{0}\n\n{1}\n{2} +locatorServiceConnectionError=يتعذر الاتصال بخدمة محدد الموقع:\n{0}\n\n{1}\n{2} +singleLineGeocodingNotSupportedError=لا تقوم خدمة محدد الموقع بدعم الترميز الجغرافي أحادي السطر. +rssFeedParsingError=حدثت مشكلة أثناء توزيع موجز RSS. {0} +httpResponseNotXMLError=استجابة HTTP ليست بتنسيق XML. +unknownRSSFeedTypeError=يتعذر تحديد نوع موجز RSS. +initializationError=حدثت مشكلة أثناء تهيئة: {0} +unableToDetermineGPExecutionType=تعذر تحديد نوع تنفيذ المعالجة الجغرافية: +projectionError=حدث خطأ أثناء عرض الشكل الهندسي: {0} +cannotRunTaskExecutionTypeUnknownError=يتعذر تشغيل المهمة: نوع التنفيذ غير معروف. +layerDataRetrievalError=تعذر إرجاع بيانات الطبقة. +couldNotDeleteFeature=تعذر حذف المعلم +couldNotUpdateFeatureError=تعذر تحديث المعلم، استعادة القيمة القديمة + + +configFileCrossDomain=مشكلة محتملة عبر المجالات: {0}{1} + + +openToolTip=انقر لفتح خريطة النظرة العامة +closeToolTip=انقر لإغلاق خريطة النظرة العامة + + +layerListLabel=المزيد... +basemap=خريطة الأساس + + +aboutLabel=حول +searchPrompt=إدخال عنوان +searchResultTitleLabel=الموقع +noResultsFoundLabel=لم يتم العثور على نتائج + + +fullExtentLabel=امتداد كامل +panDownLabel=تحريك للأسفل +panLeftLabel=تحريك لليسار +panRightLabel=تحريك لليمين +panUpLabel=تحريك للأعلى +previousExtentLabel=الامتداد السابق +nextExtentLabel=الامتداد التالي +panLabel=تحريك +zoomInLabel=تكبير +zoomOutLabel=تصغير + + + + + + +addTextLabel=إضافة نص +drawPointLabel=رسم نقطة +drawLineLabel=رسم خط +drawFreehandLineLabel=رسم خط يدوي +drawPolygonLabel=رسم مضلع +drawFreehandPolygonLabel=رسم مضلع يدوي +drawRectangleLabel=رسم مستطيل +drawMapExtentLabel=رسم مدى الخريطة +drawCircleLabel=رسم دائرة +drawEllipseLabel=رسم قطع ناقص +drawClearLabel=مسح الرسومات + +markerStyleCircle=دائرة +markerStyleCross=تقاطع +markerStyleDiamond=معين +markerStyleSquare=مربع +markerStyleTriangle=مثلث +markerStyleX=X + +textFont1=هوائي +textFont2=Courier New +textFont3=Broadway +textFont4=Comic Sans MS +textFont5=Algerian +textFont6=Verdana + +lineStyleSolid=ثابت +lineStyleDash=شرطة +lineStyleDot=نقطة +lineStyleDashDot=شرطة ونقطة +lineStyleDashDotDot=شرطة ونقطتين + +fillStyleSolid=ثابت +fillStyleBackwardDiagonal=مضلع للخلف +fillStyleCross=تقاطع +fillStyleForwardDiagonal=مضلع للأمام +fillStyleHorizontal=أفقي +fillStyleVertical=رأسي + + + +markerAlphaLabel=ألفا +markerColorLabel=لون العلامة +markerSizeLabel=الحجم +markerStyleLabel=النمط +markerOutlineColorLabel=لون الحدود +markerOutlineWidthLabel=الاتساع +textLabel=النص +textColorLabel=اللون +textFontLabel=الخط +textSizeLabel=الحجم +textBoldLabel=B +textBoldTooltip=عريض +textItalicLabel=I +textItalicTooltip=مائل +textUnderlineLabel=U +textUnderlineTooltip=تسطير سفلي +lineAlphaLabel=ألفا +lineColorLabel=لون الخط +lineStyleLabel=النمط +lineWidthLabel=الاتساع +fillAlphaLabel=ألفا +fillColorLabel=لون الملء +fillStyleLabel=النمط +fillOutlineColorLabel=لون الحدود +fillOutlineWidthLabel=الاتساع + + + + +showMeasurementsLabel=إظهار القياسات +distanceUnitsLabel=وحدات المسافة +areaUnitsLabel=وحدات المساحة +areaLabel=المساحة: +perimeterLabel=محيط الشكل: +lengthLabel=الطول: + + +bookmarksLabel=الإشارات المرجعية +addbookmarksLabel=إضافة إشارة مرجعية +addLabel=إضافة الامتداد الحالي كإشارة مرجعية مسماة +bookmarkSubmitLabel=إضافة إشارة مرجعية +bookmarkMissingNameLabel=رجاء إدخال اسم للإشارة المرجعية. +deleteBookmarkTooltip=حذف الإشارة المرجعية + + +descLabel=استخراج البيانات وتحميل ملف zip +step1Label=1. اختر مساحة +dataCurrentExtentLabel=1. سيتم استخراج البيانات من المدى الحالي. +step2Label=2. اختر طبقات لاستخراجها +step3Label=3. اختر تنسيق الملف +step4Label=4. اختر تنسيق البيانات النقطية +step5Label=5. الإسناد المكاني +extractButtonLabel=استخراج +step1ErrorLabel=رجاء اختيار المساحة المرغوب فيها. +step2ErrorLabel=رجاء اختيار طبقات لاستخراجها. +emptyResultsLabel=تم إكمال المهمة ولكن لم تظهر أية نتائج. +saveDataFileLabel=تم إنشاء ملف البيانات. هل ترغب في حفظه؟ + + +attributesLabel=البيانات الجدولية +attachmentsLabel=المرفقات +relatedRecordsLabel=السجلات ذات الصلة +featureLayerOutOfScaleText=طبقة المعالم تقع خارج نطاق مقياس الرسم +showAttachmentsText=المرفقات +showRelatedRecordsText=السجلات ذات الصلة +showAttributesText=الرجوع للخلف +selectTemplateText=اختر قالب لإنشاء معلم +noEditableLayersText=لا توجد طبقات قابلة للتحرير. +noCreateCapabilityLayersText=لم تقم أي من الطبقات بإنشاء الإمكانية +layerNotSupportingAttachmentsText=هذه الطبقة لا تدعم المرفقات +noAttachmentsText=لا توجد مرفقات +chooseFileText=اختر ملفَا لإرفاقه +attachmentSubmitLabel=تنفيذ +attachmentCancelLabel=إلغاء +singleAttachmentText=المعلم به {0} مرفق +multipleAttachmentsText=المعلم به {0} مرفق + + +layerListTitle=رؤية الطبقة + + +locateSubmitLabel=تحديد الموقع +addressLabel=العنوان +coordinatesLabel=الإحداثيات +addressTitle=أدخل العنوان +coordinatesTitle=أدخل الإحداثيات +xLabel=خط الطول (X) +yLabel=خط العرض (Y) +locationsLabel=المواقع التي العثور عليها: +bingCulture=ar-SA +requiredFields=الحقول المطلوبة: +requiredField=حقل مطلوب: +deleteResultTooltip=حذف النتيجة +resultScoreText=مجموع النقاط: +bingResultConfidenceText=ثقة: + + +printSubmitLabel=طباعة +printTitle= +printSubtitle= +printCopyright= +printTitleLabel=العنوان +printSubtitleLabel=العنوان الفرعي +printCopyrightLabel=حقوق النشر +printAuthorLabel=المؤلف +printLayoutTemplatesLabel=قوالب التخطيط +printFormatsLabel=التنسيقات +printScaleLabel=استخدام هذا المقياس + + +filterTitleBarTooltip=ترشيح النتائج +showallTitleBarTooltip=إظهار الكل +filterButtonLabel=ترشيح +clearButtonLabel=إظهار الكل +featuresFoundLabel=تم العثور على المعالم: {0} + + +drivingDirectionLabel=اتجاهات القيادة +routeSubmitLabel=التعرف على الاتجاهات +moveUpTooltip=تنقل لأعلى +moveDownTooltip=تنقل لأسفل +addLocationTooltip=انقر على الخريطة لإضافة موقع +optionsLabel=الخيارات +bestSequenceLabel=البحث عن أفضل تسلسل +milesLabel=أميال +metricLabel=كم +changeRouteSymbolLabel=تغيير رمز المسار +editRouteLabel=تحرير المسار + + +graphicalTitleBarTooltip=اختر معالم +textTitleBarTooltip=اختيار حسب البيانات الجدولية +graphicalsearchLabel=اختيار المعالم حسب +textsearchLabel=اختيار حسب البيانات الجدولية +layerLabel=طبقة البحث +nolayerLabel=لم يتم تحديد طبقة بحث. +searchSubmitLabel=بحث +selectionLabel=المعالم المحددة: + + +latitudeLabel=خط العرض +longitudeLabel=خط الطول + + +gpSubmitLabel=تنفيذ +inputLabel=المدخلات +helpLabel=تعليمات +outputLabel=المخرجات +copyToClipboard=نسخ إلى الحافظة +unsupportedInputType=إدخال {0} غير مدعوم +currentExtentWillBeUsedAsInput=سيتم استخدام الحد الحالي كإدخال. + + +zoomLabel=تقريب إلى + + +helloContent=قم بتغيير هذا النص في ملف التكوين. + + +widgetIDWidgetLabelTemplate=معرّف عنصر الواجهة: {0}، تسمية عنصر الواجهة: {1} +widgetIDWidgetStateTemplate=معرّف عنصر الواجهة: {0}، حالة عنصر الواجهة: {1} +itemLabelWidgetIDItemIDTemplate={0} معرّف عنصر الواجهة: {1} + + +layerSelectionLabel=تحديد طبقة +drawToolMenuLabel=تحديد أداة رسم +selectLabel=تحديد +noLayersLabel=لا توجد طبقات +noChartDataToDisplayLabel=لا توجد بيانات مخطط لعرضها featureLayerNotVisibleText=طبقة المعلم إما غير مرئية أو تقع خارج نطاق المدى \ No newline at end of file diff --git a/locale/de_DE/ViewerStrings.properties b/locale/de_DE/ViewerStrings.properties index b52a417..8d3d158 100644 --- a/locale/de_DE/ViewerStrings.properties +++ b/locale/de_DE/ViewerStrings.properties @@ -1,350 +1,350 @@ - - -contextMenuText=Info zu ArcGIS Viewer for Flex... -aboutText=Diese Anwendung verwendet ArcGIS Viewer for Flex Version 3.1.\nBuild-Datum: 2012-12-12. -aboutLearnMoreBtn=Weitere Informationen -aboutCloseBtn=Schließen - - - -close=Schließen -minimize=Minimieren - - -locateExampleValueX=13.376 -locateExampleValueY=52.519 - - -clearLabel=Inhalt löschen -deleteLabel=Löschen -loadingLabel=Wird geladen… -okLabel=OK -errorLabel=Fehler -problemLabel=Problem -noFeatures=Keine Features gefunden. -resultsLabel=Ergebnisse -saveLabel=Speichern - - -unitsFeet=Fuß -unitsFeetAbbr=ft -unitsKilometers=Kilometer -unitsKilometersAbbr=km -unitsMeters=Meter -unitsMetersAbbr=m -unitsMiles=Meilen -unitsMilesAbbr=mi -unitsYards=Yard -unitsYardsAbbr=yd - -unitsAcres=Acres -unitsAcresAbbr=ac -unitsHectares=Hektar -unitsHectaresAbbr=ha -unitsSquareFeet=Quadratfuß -unitsSquareFeetAbbr=sq ft -unitsSquareKilometers=Quadratkilometer -unitsSquareKilometersAbbr=sq km -unitsSquareMeters=Quadratmeter -unitsSquareMetersAbbr=sq m -unitsSquareMiles=Quadratmeilen -unitsSquareMilesAbbr=sq mi -unitsSquareYards=Quadratyard -unitsSquareYardsAbbr=sq yd - - -tocMapLayerZoomToLabel=Zoomen auf -tocMapLayerTransparencyLabel=Transparenz -tocMapLayerOpaqueLabel=Nicht transparent -tocMapLayerTransparentLabel=Transparent -tocMapLayerMoveUpLabel=Nach oben verschieben -tocMapLayerMoveDownLabel=Nach unten verschieben -tocMapLayerRemoveLabel=Entfernen -tocMapLayerDescriptionLabel=Beschreibung -tocMapLayerDownloadLabel=Herunterladen - - -incorrectLayerTypeText={0} ist kein unterstützter Layer-Typ. Verwenden Sie stattdessen "arcims", "bing", "csv", "dynamic", "feature", "georss", "image", "kml", "osm", "tiled", "wms" oder "wmts". - - -missingConfigFileText={0} konnte nicht gefunden werden -httpResponseStatus=http-Antwortstatus: {0} -faultCode=Fehlercode: {0} -faultInfo=Fehlerinfo: {0} -faultDetail=Fehlerdetails: {0} - - -parseConfigErrorText=Problem beim Parsen der Konfigurationsdatei {0} -standalonePlayerExternalInterfaceErrorText=Ein Fehler ist aufgetreten. ExternalInterface funktioniert nicht in eigenständigem Player. -layerFailedToLoad:Layer "{0}" konnte nicht geladen werden: {1} -couldNotFetchBasemapData=Grundkartendaten konnten nicht abgerufen werden:\n{0} -couldNotConnectToPortal=Verbindung zum Portal konnte nicht hergestellt werden. -couldNotQueryPortal=Portal konnte nicht abgefragt werden. -couldNotQueryPortalItems=Portalelemente konnten nicht abgefragt werden. -serverMissingCrossDomain=Dem GIS-Server fehlt eine domänenübergreifende Datei. -serviceIsInaccessible=Service ist nicht vorhanden oder Zugriff ist nicht möglich. -unauthorizedAccess=Sie haben keine Berechtigungen, um auf diesen Service zuzugreifen. -unknownErrorCause=Unbekannte Fehlerursache. -resourceAccessDenied=Sie haben keine Berechtigungen, um auf diese Ressource zuzugreifen. -signInAborted=Anmeldung wurde abgebrochen. -invalidWidgetId=Ungültige widgetId: {0} -printTaskExecutionError=Fehler beim Ausführen von Druck-Task:\n\n{0} -gpServiceConnectionError=Verbindung zu GP-Service kann nicht hergestellt werden:\n{0}\n\n{1}\n{2} -locatorServiceConnectionError=Verbindung zu Locator-Service kann nicht hergestellt werden:\n{0}\n\n{1}\n{2} -singleLineGeocodingNotSupportedError=Locator-Service unterstützt keine einzeilige Geokodierung. -rssFeedParsingError=Problem beim Parsen des RSS-Feeds. {0} -httpResponseNotXMLError=HTTP-Antwort ist nicht XML. -unknownRSSFeedTypeError=RSS-Feed-Typ kann nicht bestimmt werden. -initializationError=Problem beim Initialisieren: {0} -unableToDetermineGPExecutionType=Geoverarbeitungs-Ausführungstyp konnte nicht bestimmt werden: -projectionError=Fehler beim Projizieren von Geometrie: {0} -cannotRunTaskExecutionTypeUnknownError=Task kann nicht ausgeführt werden: Ausführungstyp unbekannt. -layerDataRetrievalError=Layer-Daten konnten nicht abgerufen werden. -couldNotDeleteFeature=Feature konnte nicht gelöscht werden -couldNotUpdateFeatureError=Feature konnte nicht aktualisiert werden. Der alte Wert wird wiederhergestellt. - - -configFileCrossDomain=Mögliches domänenübergreifendes Problem: {0} {1} - - -openToolTip=Klicken, um Übersichtskarte zu öffnen -closeToolTip=Klicken, um Übersichtskarte zu schließen - - -layerListLabel=Mehr... -basemap=Grundkarte - - -aboutLabel=Info -searchPrompt=Adresse eingeben -searchResultTitleLabel=Position -noResultsFoundLabel=Keine Ergebnisse gefunden - - -fullExtentLabel=Volle Ausdehnung -panDownLabel=Nach unten schwenken -panLeftLabel=Nach links schwenken -panRightLabel=Nach rechts schwenken -panUpLabel=Nach oben schwenken -previousExtentLabel=Vorherige Ausdehnung -nextExtentLabel=Nächste Ausdehnung -panLabel=Schwenken -zoomInLabel=Vergrößern -zoomOutLabel=Verkleinern - - - - - - -addTextLabel=Text hinzufügen -drawPointLabel=Punkt zeichnen -drawLineLabel=Linie zeichnen -drawFreehandLineLabel=Freihandlinie zeichnen -drawPolygonLabel=Polygon zeichnen -drawFreehandPolygonLabel=Freihandpolygon zeichnen -drawRectangleLabel=Rechteck zeichnen -drawMapExtentLabel=Draw Map Extent -drawCircleLabel=Kreis zeichnen -drawEllipseLabel=Ellipse zeichnen -drawClearLabel=Zeichnungen löschen - -markerStyleCircle=Kreis -markerStyleCross=Kreuz -markerStyleDiamond=Raute -markerStyleSquare=Quadrat -markerStyleTriangle=Dreieck -markerStyleX=X - -textFont1=Arial -textFont2=Courier New -textFont3=Broadway -textFont4=Comic Sans MS -textFont5=Algerian -textFont6=Verdana - -lineStyleSolid=Vollfarbe -lineStyleDash=Gestrichelt -lineStyleDot=Gepunktet -lineStyleDashDot=Strich-Punkt -lineStyleDashDotDot=Strich-Punkt-Punkt - -fillStyleSolid=Vollfarbe -fillStyleBackwardDiagonal=Rückwärts diagonal -fillStyleCross=Kreuz -fillStyleForwardDiagonal=Vorwärts diagonal -fillStyleHorizontal=Horizontal -fillStyleVertical=Vertikal - - - -markerAlphaLabel=Alpha -markerColorLabel=Marker-Farbe -markerSizeLabel=Größe -markerStyleLabel=Style -markerOutlineColorLabel=Umrissfarbe -markerOutlineWidthLabel=Breite -textLabel=Text -textColorLabel=Farbe -textFontLabel=Schriftart -textSizeLabel=Größe -textBoldLabel=F -textBoldTooltip=Fett -textItalicLabel=K -textItalicTooltip=Kursiv -textUnderlineLabel=U -textUnderlineTooltip=Unterstrichen -lineAlphaLabel=Alpha -lineColorLabel=Linienfarbe -lineStyleLabel=Style -lineWidthLabel=Breite -fillAlphaLabel=Alpha -fillColorLabel=Füllfarbe -fillStyleLabel=Style -fillOutlineColorLabel=Umrissfarbe -fillOutlineWidthLabel=Breite - - - - -showMeasurementsLabel=Messwerte anzeigen -distanceUnitsLabel=Entfernungseinheiten -areaUnitsLabel=Flächeneinheiten -areaLabel=Fläche: -perimeterLabel=Umfang: -lengthLabel=Länge: - - -bookmarksLabel=Lesezeichen -addbookmarksLabel=Lesezeichen hinzufügen -addLabel=Aktuelle Ausdehnung als Lesezeichen mit folgendem Namen hinzufügen -bookmarkSubmitLabel=Lesezeichen hinzufügen -bookmarkMissingNameLabel=Geben Sie einen Namen für das Lesezeichen ein. -deleteBookmarkTooltip=Lesezeichen löschen - - -descLabel=Daten extrahieren und ZIP-Datei herunterladen -step1Label=1. Bereich auswählen -dataCurrentExtentLabel=1. Daten werden aus der aktuellen Ausdehnung extrahiert. -step2Label=2. Zu extrahierende Layer auswählen -step3Label=3. Dateiformat auswählen -step4Label=4. Raster-Format auswählen -step5Label=5. Raumbezug -extractButtonLabel=Extrahieren -step1ErrorLabel=Wählen Sie einen Interessensbereich aus. -step2ErrorLabel=Wählen Sie die zu extrahierenden Layer aus. -emptyResultsLabel=Der Task wurde abgeschlossen, hat aber keine Ergebnisse zurückgegeben. -saveDataFileLabel=Die Datendatei wurde erstellt. Möchten Sie sie speichern? - - -attributesLabel=Attribute -attachmentsLabel=Anlagen -relatedRecordsLabel=Zugehörige Datensätze -featureLayerOutOfScaleText=Dieser Feature-Layer liegt außerhalb des Maßstabsbereichs -showAttachmentsText=Anlagen -showRelatedRecordsText=Zugehörige Datensätze -showAttributesText=Zurück -selectTemplateText=Vorlage zur Feature-Erstellung auswählen -noEditableLayersText=Keine editierbaren Layer. -noCreateCapabilityLayersText=Kein Layer verfügt über die Funktion "Erstellen" -layerNotSupportingAttachmentsText=Dieser Layer unterstützt keine Anlagen -noAttachmentsText=Keine Anlagen -chooseFileText=Datei als Anlage wählen -attachmentSubmitLabel=Absenden -attachmentCancelLabel=Abbrechen -singleAttachmentText=Das Feature hat {0} Anlage -multipleAttachmentsText=Das Feature hat {0} Anlagen - - -layerListTitle=Layer-Sichtbarkeit - - -locateSubmitLabel=Suchen -addressLabel=Adresse -coordinatesLabel=Koordinaten -addressTitle=Adresse eingeben -coordinatesTitle=Koordinaten eingeben -xLabel=Längengrad (X) -yLabel=Breitengrad (Y) -locationsLabel=Gefundene Positionen: -bingCulture=de-DE -requiredFields=Erforderliche Felder: -requiredField=Erforderliches Feld: -deleteResultTooltip=Ergebnis löschen -resultScoreText=Punktzahl: -bingResultConfidenceText=Übereinstimmung: - - -printSubmitLabel=Drucken -printTitle= -printSubtitle= -printCopyright= -printTitleLabel=Titel -printSubtitleLabel=Untertitel -printCopyrightLabel=Copyright -printAuthorLabel=Autor -printLayoutTemplatesLabel=Layoutvorlagen -printFormatsLabel=Formate -printScaleLabel=Diesen Maßstab verwenden - - -filterTitleBarTooltip=Ergebnisse filtern -showallTitleBarTooltip=Alle anzeigen -filterButtonLabel=Filter -clearButtonLabel=Alle anzeigen -featuresFoundLabel=Gefundene Features: {0} - - -drivingDirectionLabel=Wegbeschreibung -routeSubmitLabel=Wegbeschreibung abrufen -moveUpTooltip=Nach oben verschieben -moveDownTooltip=Nach unten verschieben -addLocationTooltip=Auf Karte klicken, um Standort hinzuzufügen -optionsLabel=Optionen -bestSequenceLabel=Beste Abfolge suchen -milesLabel=Meilen -metricLabel=km -changeRouteSymbolLabel=Routensymbol ändern -editRouteLabel=Route bearbeiten - - -graphicalTitleBarTooltip=Features selektieren -textTitleBarTooltip=Nach Attributen selektieren -graphicalsearchLabel=Features selektieren nach -textsearchLabel=Nach Attributen selektieren -layerLabel=Such-Layer -nolayerLabel=Kein Such-Layer definiert. -searchSubmitLabel=Suchen -selectionLabel=Selektierte Features: - - -latitudeLabel=Breitengrad -longitudeLabel=Längengrad - - -gpSubmitLabel=Absenden -inputLabel=Eingabe -helpLabel=Hilfe -outputLabel=Ausgabe -copyToClipboard=In die Zwischenablage kopieren -unsupportedInputType={0} Eingabe wird nicht unterstützt -currentExtentWillBeUsedAsInput=Die aktuelle Ausdehnung wird als Eingabe verwendet. - - -zoomLabel=Zoomen auf - - -helloContent=Ändern Sie diesen Text in der Konfigurationsdatei. - - -widgetIDWidgetLabelTemplate=Widget-ID: {0}, Widget-Beschriftung: {1} -widgetIDWidgetStateTemplate=Widget-ID: {0}, Widget-Status: {1} -itemLabelWidgetIDItemIDTemplate={0} Widget-ID: {1} - - -layerSelectionLabel=Layer auswählen -drawToolMenuLabel=Zeichenwerkzeug auswählen -selectLabel=Auswählen -noLayersLabel=Keine Layer verfügbar -noChartDataToDisplayLabel=Keine Diagrammdaten zur Anzeige verfügbar + + +contextMenuText=Info zu ArcGIS Viewer for Flex... +aboutText=Diese Anwendung verwendet ArcGIS Viewer for Flex Version 3.1.\nBuild-Datum: 2012-12-12. +aboutLearnMoreBtn=Weitere Informationen +aboutCloseBtn=Schließen + + + +close=Schließen +minimize=Minimieren + + +locateExampleValueX=13.376 +locateExampleValueY=52.519 + + +clearLabel=Inhalt löschen +deleteLabel=Löschen +loadingLabel=Wird geladen… +okLabel=OK +errorLabel=Fehler +problemLabel=Problem +noFeatures=Keine Features gefunden. +resultsLabel=Ergebnisse +saveLabel=Speichern + + +unitsFeet=Fuß +unitsFeetAbbr=ft +unitsKilometers=Kilometer +unitsKilometersAbbr=km +unitsMeters=Meter +unitsMetersAbbr=m +unitsMiles=Meilen +unitsMilesAbbr=mi +unitsYards=Yard +unitsYardsAbbr=yd + +unitsAcres=Acres +unitsAcresAbbr=ac +unitsHectares=Hektar +unitsHectaresAbbr=ha +unitsSquareFeet=Quadratfuß +unitsSquareFeetAbbr=sq ft +unitsSquareKilometers=Quadratkilometer +unitsSquareKilometersAbbr=sq km +unitsSquareMeters=Quadratmeter +unitsSquareMetersAbbr=sq m +unitsSquareMiles=Quadratmeilen +unitsSquareMilesAbbr=sq mi +unitsSquareYards=Quadratyard +unitsSquareYardsAbbr=sq yd + + +tocMapLayerZoomToLabel=Zoomen auf +tocMapLayerTransparencyLabel=Transparenz +tocMapLayerOpaqueLabel=Nicht transparent +tocMapLayerTransparentLabel=Transparent +tocMapLayerMoveUpLabel=Nach oben verschieben +tocMapLayerMoveDownLabel=Nach unten verschieben +tocMapLayerRemoveLabel=Entfernen +tocMapLayerDescriptionLabel=Beschreibung +tocMapLayerDownloadLabel=Herunterladen + + +incorrectLayerTypeText={0} ist kein unterstützter Layer-Typ. Verwenden Sie stattdessen "arcims", "bing", "csv", "dynamic", "feature", "georss", "image", "kml", "osm", "tiled", "wms" oder "wmts". + + +missingConfigFileText={0} konnte nicht gefunden werden +httpResponseStatus=http-Antwortstatus: {0} +faultCode=Fehlercode: {0} +faultInfo=Fehlerinfo: {0} +faultDetail=Fehlerdetails: {0} + + +parseConfigErrorText=Problem beim Parsen der Konfigurationsdatei {0} +standalonePlayerExternalInterfaceErrorText=Ein Fehler ist aufgetreten. ExternalInterface funktioniert nicht in eigenständigem Player. +layerFailedToLoad:Layer "{0}" konnte nicht geladen werden: {1} +couldNotFetchBasemapData=Grundkartendaten konnten nicht abgerufen werden:\n{0} +couldNotConnectToPortal=Verbindung zum Portal konnte nicht hergestellt werden. +couldNotQueryPortal=Portal konnte nicht abgefragt werden. +couldNotQueryPortalItems=Portalelemente konnten nicht abgefragt werden. +serverMissingCrossDomain=Dem GIS-Server fehlt eine domänenübergreifende Datei. +serviceIsInaccessible=Service ist nicht vorhanden oder Zugriff ist nicht möglich. +unauthorizedAccess=Sie haben keine Berechtigungen, um auf diesen Service zuzugreifen. +unknownErrorCause=Unbekannte Fehlerursache. +resourceAccessDenied=Sie haben keine Berechtigungen, um auf diese Ressource zuzugreifen. +signInAborted=Anmeldung wurde abgebrochen. +invalidWidgetId=Ungültige widgetId: {0} +printTaskExecutionError=Fehler beim Ausführen von Druck-Task:\n\n{0} +gpServiceConnectionError=Verbindung zu GP-Service kann nicht hergestellt werden:\n{0}\n\n{1}\n{2} +locatorServiceConnectionError=Verbindung zu Locator-Service kann nicht hergestellt werden:\n{0}\n\n{1}\n{2} +singleLineGeocodingNotSupportedError=Locator-Service unterstützt keine einzeilige Geokodierung. +rssFeedParsingError=Problem beim Parsen des RSS-Feeds. {0} +httpResponseNotXMLError=HTTP-Antwort ist nicht XML. +unknownRSSFeedTypeError=RSS-Feed-Typ kann nicht bestimmt werden. +initializationError=Problem beim Initialisieren: {0} +unableToDetermineGPExecutionType=Geoverarbeitungs-Ausführungstyp konnte nicht bestimmt werden: +projectionError=Fehler beim Projizieren von Geometrie: {0} +cannotRunTaskExecutionTypeUnknownError=Task kann nicht ausgeführt werden: Ausführungstyp unbekannt. +layerDataRetrievalError=Layer-Daten konnten nicht abgerufen werden. +couldNotDeleteFeature=Feature konnte nicht gelöscht werden +couldNotUpdateFeatureError=Feature konnte nicht aktualisiert werden. Der alte Wert wird wiederhergestellt. + + +configFileCrossDomain=Mögliches domänenübergreifendes Problem: {0} {1} + + +openToolTip=Klicken, um Übersichtskarte zu öffnen +closeToolTip=Klicken, um Übersichtskarte zu schließen + + +layerListLabel=Mehr... +basemap=Grundkarte + + +aboutLabel=Info +searchPrompt=Adresse eingeben +searchResultTitleLabel=Position +noResultsFoundLabel=Keine Ergebnisse gefunden + + +fullExtentLabel=Volle Ausdehnung +panDownLabel=Nach unten schwenken +panLeftLabel=Nach links schwenken +panRightLabel=Nach rechts schwenken +panUpLabel=Nach oben schwenken +previousExtentLabel=Vorherige Ausdehnung +nextExtentLabel=Nächste Ausdehnung +panLabel=Schwenken +zoomInLabel=Vergrößern +zoomOutLabel=Verkleinern + + + + + + +addTextLabel=Text hinzufügen +drawPointLabel=Punkt zeichnen +drawLineLabel=Linie zeichnen +drawFreehandLineLabel=Freihandlinie zeichnen +drawPolygonLabel=Polygon zeichnen +drawFreehandPolygonLabel=Freihandpolygon zeichnen +drawRectangleLabel=Rechteck zeichnen +drawMapExtentLabel=Draw Map Extent +drawCircleLabel=Kreis zeichnen +drawEllipseLabel=Ellipse zeichnen +drawClearLabel=Zeichnungen löschen + +markerStyleCircle=Kreis +markerStyleCross=Kreuz +markerStyleDiamond=Raute +markerStyleSquare=Quadrat +markerStyleTriangle=Dreieck +markerStyleX=X + +textFont1=Arial +textFont2=Courier New +textFont3=Broadway +textFont4=Comic Sans MS +textFont5=Algerian +textFont6=Verdana + +lineStyleSolid=Vollfarbe +lineStyleDash=Gestrichelt +lineStyleDot=Gepunktet +lineStyleDashDot=Strich-Punkt +lineStyleDashDotDot=Strich-Punkt-Punkt + +fillStyleSolid=Vollfarbe +fillStyleBackwardDiagonal=Rückwärts diagonal +fillStyleCross=Kreuz +fillStyleForwardDiagonal=Vorwärts diagonal +fillStyleHorizontal=Horizontal +fillStyleVertical=Vertikal + + + +markerAlphaLabel=Alpha +markerColorLabel=Marker-Farbe +markerSizeLabel=Größe +markerStyleLabel=Style +markerOutlineColorLabel=Umrissfarbe +markerOutlineWidthLabel=Breite +textLabel=Text +textColorLabel=Farbe +textFontLabel=Schriftart +textSizeLabel=Größe +textBoldLabel=F +textBoldTooltip=Fett +textItalicLabel=K +textItalicTooltip=Kursiv +textUnderlineLabel=U +textUnderlineTooltip=Unterstrichen +lineAlphaLabel=Alpha +lineColorLabel=Linienfarbe +lineStyleLabel=Style +lineWidthLabel=Breite +fillAlphaLabel=Alpha +fillColorLabel=Füllfarbe +fillStyleLabel=Style +fillOutlineColorLabel=Umrissfarbe +fillOutlineWidthLabel=Breite + + + + +showMeasurementsLabel=Messwerte anzeigen +distanceUnitsLabel=Entfernungseinheiten +areaUnitsLabel=Flächeneinheiten +areaLabel=Fläche: +perimeterLabel=Umfang: +lengthLabel=Länge: + + +bookmarksLabel=Lesezeichen +addbookmarksLabel=Lesezeichen hinzufügen +addLabel=Aktuelle Ausdehnung als Lesezeichen mit folgendem Namen hinzufügen +bookmarkSubmitLabel=Lesezeichen hinzufügen +bookmarkMissingNameLabel=Geben Sie einen Namen für das Lesezeichen ein. +deleteBookmarkTooltip=Lesezeichen löschen + + +descLabel=Daten extrahieren und ZIP-Datei herunterladen +step1Label=1. Bereich auswählen +dataCurrentExtentLabel=1. Daten werden aus der aktuellen Ausdehnung extrahiert. +step2Label=2. Zu extrahierende Layer auswählen +step3Label=3. Dateiformat auswählen +step4Label=4. Raster-Format auswählen +step5Label=5. Raumbezug +extractButtonLabel=Extrahieren +step1ErrorLabel=Wählen Sie einen Interessensbereich aus. +step2ErrorLabel=Wählen Sie die zu extrahierenden Layer aus. +emptyResultsLabel=Der Task wurde abgeschlossen, hat aber keine Ergebnisse zurückgegeben. +saveDataFileLabel=Die Datendatei wurde erstellt. Möchten Sie sie speichern? + + +attributesLabel=Attribute +attachmentsLabel=Anlagen +relatedRecordsLabel=Zugehörige Datensätze +featureLayerOutOfScaleText=Dieser Feature-Layer liegt außerhalb des Maßstabsbereichs +showAttachmentsText=Anlagen +showRelatedRecordsText=Zugehörige Datensätze +showAttributesText=Zurück +selectTemplateText=Vorlage zur Feature-Erstellung auswählen +noEditableLayersText=Keine editierbaren Layer. +noCreateCapabilityLayersText=Kein Layer verfügt über die Funktion "Erstellen" +layerNotSupportingAttachmentsText=Dieser Layer unterstützt keine Anlagen +noAttachmentsText=Keine Anlagen +chooseFileText=Datei als Anlage wählen +attachmentSubmitLabel=Absenden +attachmentCancelLabel=Abbrechen +singleAttachmentText=Das Feature hat {0} Anlage +multipleAttachmentsText=Das Feature hat {0} Anlagen + + +layerListTitle=Layer-Sichtbarkeit + + +locateSubmitLabel=Suchen +addressLabel=Adresse +coordinatesLabel=Koordinaten +addressTitle=Adresse eingeben +coordinatesTitle=Koordinaten eingeben +xLabel=Längengrad (X) +yLabel=Breitengrad (Y) +locationsLabel=Gefundene Positionen: +bingCulture=de-DE +requiredFields=Erforderliche Felder: +requiredField=Erforderliches Feld: +deleteResultTooltip=Ergebnis löschen +resultScoreText=Punktzahl: +bingResultConfidenceText=Übereinstimmung: + + +printSubmitLabel=Drucken +printTitle= +printSubtitle= +printCopyright= +printTitleLabel=Titel +printSubtitleLabel=Untertitel +printCopyrightLabel=Copyright +printAuthorLabel=Autor +printLayoutTemplatesLabel=Layoutvorlagen +printFormatsLabel=Formate +printScaleLabel=Diesen Maßstab verwenden + + +filterTitleBarTooltip=Ergebnisse filtern +showallTitleBarTooltip=Alle anzeigen +filterButtonLabel=Filter +clearButtonLabel=Alle anzeigen +featuresFoundLabel=Gefundene Features: {0} + + +drivingDirectionLabel=Wegbeschreibung +routeSubmitLabel=Wegbeschreibung abrufen +moveUpTooltip=Nach oben verschieben +moveDownTooltip=Nach unten verschieben +addLocationTooltip=Auf Karte klicken, um Standort hinzuzufügen +optionsLabel=Optionen +bestSequenceLabel=Beste Abfolge suchen +milesLabel=Meilen +metricLabel=km +changeRouteSymbolLabel=Routensymbol ändern +editRouteLabel=Route bearbeiten + + +graphicalTitleBarTooltip=Features selektieren +textTitleBarTooltip=Nach Attributen selektieren +graphicalsearchLabel=Features selektieren nach +textsearchLabel=Nach Attributen selektieren +layerLabel=Such-Layer +nolayerLabel=Kein Such-Layer definiert. +searchSubmitLabel=Suchen +selectionLabel=Selektierte Features: + + +latitudeLabel=Breitengrad +longitudeLabel=Längengrad + + +gpSubmitLabel=Absenden +inputLabel=Eingabe +helpLabel=Hilfe +outputLabel=Ausgabe +copyToClipboard=In die Zwischenablage kopieren +unsupportedInputType={0} Eingabe wird nicht unterstützt +currentExtentWillBeUsedAsInput=Die aktuelle Ausdehnung wird als Eingabe verwendet. + + +zoomLabel=Zoomen auf + + +helloContent=Ändern Sie diesen Text in der Konfigurationsdatei. + + +widgetIDWidgetLabelTemplate=Widget-ID: {0}, Widget-Beschriftung: {1} +widgetIDWidgetStateTemplate=Widget-ID: {0}, Widget-Status: {1} +itemLabelWidgetIDItemIDTemplate={0} Widget-ID: {1} + + +layerSelectionLabel=Layer auswählen +drawToolMenuLabel=Zeichenwerkzeug auswählen +selectLabel=Auswählen +noLayersLabel=Keine Layer verfügbar +noChartDataToDisplayLabel=Keine Diagrammdaten zur Anzeige verfügbar featureLayerNotVisibleText=Feature-Layer ist entweder nicht sichtbar oder liegt außerhalb des Maßstabsbereichs \ No newline at end of file diff --git a/locale/en_US/ViewerStrings.properties b/locale/en_US/ViewerStrings.properties index 1ed1cc0..79163ef 100644 --- a/locale/en_US/ViewerStrings.properties +++ b/locale/en_US/ViewerStrings.properties @@ -1,350 +1,350 @@ -# -- UI related messages for the context menu on the map, in addition to messages from the api -- -# -contextMenuText=About ArcGIS Viewer for Flex... -aboutText=This application is using ArcGIS Viewer for Flex version 3.1.\nBuild date 2012-12-12. -aboutLearnMoreBtn=Learn more -aboutCloseBtn=Close - -# -- Widget Template Strings -- -# -close=Close -minimize=Minimize - -# --- general locale specifics -locateExampleValueX=-77.03655 -locateExampleValueY=38.89767 - -# -- Generic strings -- -clearLabel=Clear -deleteLabel=Delete -loadingLabel=Loading... -okLabel=OK -errorLabel=Error -problemLabel=Problem -noFeatures=No features found. -resultsLabel=Results -saveLabel=Save - -# --- Units Strings -- -unitsFeet=Feet -unitsFeetAbbr=ft -unitsKilometers=Kilometers -unitsKilometersAbbr=km -unitsMeters=Meters -unitsMetersAbbr=m -unitsMiles=Miles -unitsMilesAbbr=mi -unitsYards=Yards -unitsYardsAbbr=yd - -unitsAcres=Acres -unitsAcresAbbr=ac -unitsHectares=Hectares -unitsHectaresAbbr=ha -unitsSquareFeet=Square feet -unitsSquareFeetAbbr=sq ft -unitsSquareKilometers=Square kilometers -unitsSquareKilometersAbbr=sq km -unitsSquareMeters=Square meters -unitsSquareMetersAbbr=sq m -unitsSquareMiles=Square miles -unitsSquareMilesAbbr=sq mi -unitsSquareYards=Square yards -unitsSquareYardsAbbr=sq yd - -########## TOC -tocMapLayerZoomToLabel=Zoom to -tocMapLayerTransparencyLabel=Transparency -tocMapLayerOpaqueLabel=Opaque -tocMapLayerTransparentLabel=Transparent -tocMapLayerMoveUpLabel=Move up -tocMapLayerMoveDownLabel=Move down -tocMapLayerRemoveLabel=Remove -tocMapLayerDescriptionLabel=Description -tocMapLayerDownloadLabel=Download - -########## MapManager -incorrectLayerTypeText={0} is not a supported layer type. Use "arcims", "bing", "csv", "dynamic", "feature", "georss", "image", "kml", "osm", "tiled", "wms" or "wmts" instead. - -########## Base Widget and ConfigManager -missingConfigFileText=Could not find {0} -httpResponseStatus=http response status: {0} -faultCode=Fault code: {0} -faultInfo=Fault info: {0} -faultDetail=Fault details: {0} - -########## Errors -parseConfigErrorText=A problem occurred while parsing the configuration file {0} -standalonePlayerExternalInterfaceErrorText=Some error occurred. ExternalInterface doesn't work in Standalone player. -layerFailedToLoad:{0} layer failed to load: {1} -couldNotFetchBasemapData=Could not fetch basemap data:\n{0} -couldNotConnectToPortal=Could not connect to Portal. -couldNotQueryPortal=Could not query portal. -couldNotQueryPortalItems=Could not query portal items. -serverMissingCrossDomain=GIS Server is missing a crossdomain file. -serviceIsInaccessible=Service does not exist or is inaccessible. -unauthorizedAccess=You don't have permissions to access this service. -unknownErrorCause=Unknown error cause. -resourceAccessDenied=You do not have permissions to access this resource. -signInAborted=Sign in aborted. -invalidWidgetId=Invalid widgetId: {0} -printTaskExecutionError=Error executing print task:\n\n{0} -gpServiceConnectionError=Unable to connect to GP Service:\n{0}\n\n{1}\n{2} -locatorServiceConnectionError=Unable to connect to Locator Service:\n{0}\n\n{1}\n{2} -singleLineGeocodingNotSupportedError=Locator service does not support single-line geocoding. -rssFeedParsingError=A problem occurred while parsing the RSS feed. {0} -httpResponseNotXMLError=HTTP Response is not XML. -unknownRSSFeedTypeError=Unable to determine RSS feed type. -initializationError=A problem ocurred while initializing: {0} -unableToDetermineGPExecutionType=Could not determine geoprocessing execution type: -projectionError=Error projecting geometry: {0} -cannotRunTaskExecutionTypeUnknownError=Cannot run task: execution type unknown. -layerDataRetrievalError=Could not retrieve layer data. -couldNotDeleteFeature=Could not delete feature -couldNotUpdateFeatureError=Could not update feature, Restoring old value - -########## Base Widget and MapManager -configFileCrossDomain=Possible crossdomain issue: {0}{1} - -########## Overview Map "Widget" -openToolTip=Click to open overview map -closeToolTip=Click to close overview map - -########## MapSwitcher Widget -layerListLabel=More... -basemap=Basemap - -########## HeaderController Widget -aboutLabel=About -searchPrompt=Enter address -searchResultTitleLabel=Location -noResultsFoundLabel=No results found - -########## Navigation Widget -fullExtentLabel=Full Extent -panDownLabel=Pan down -panLeftLabel=Pan left -panRightLabel=Pan right -panUpLabel=Pan up -previousExtentLabel=Previous Extent -nextExtentLabel=Next Extent -panLabel=Pan -zoomInLabel=Zoom in -zoomOutLabel=Zoom out - -# -- Common draw strings -- - - -# -- Draw Strings -- -# -addTextLabel=Add Text -drawPointLabel=Draw Point -drawLineLabel=Draw Line -drawFreehandLineLabel=Draw Freehand Line -drawPolygonLabel=Draw Polygon -drawFreehandPolygonLabel=Draw Freehand Polygon -drawRectangleLabel=Draw Rectangle -drawMapExtentLabel=Draw Map Extent -drawCircleLabel=Draw Circle -drawEllipseLabel=Draw Ellipse -drawClearLabel=Clear drawings - -markerStyleCircle=Circle -markerStyleCross=Cross -markerStyleDiamond=Diamond -markerStyleSquare=Square -markerStyleTriangle=Triangle -markerStyleX=X - -textFont1=Arial -textFont2=Courier New -textFont3=Broadway -textFont4=Comic Sans MS -textFont5=Algerian -textFont6=Verdana - -lineStyleSolid=Solid -lineStyleDash=Dash -lineStyleDot=Dot -lineStyleDashDot=Dash Dot -lineStyleDashDotDot=Dash Dot Dot - -fillStyleSolid=Solid -fillStyleBackwardDiagonal=Backward Diagonal -fillStyleCross=Cross -fillStyleForwardDiagonal=Forward Diagonal -fillStyleHorizontal=Horizontal -fillStyleVertical=Vertical - -# -- Symbol Strings -- -# -markerAlphaLabel=Alpha -markerColorLabel=Marker Color -markerSizeLabel=Size -markerStyleLabel=Style -markerOutlineColorLabel=Outline Color -markerOutlineWidthLabel=Width -textLabel=Text -textColorLabel=Color -textFontLabel=Font -textSizeLabel=Size -textBoldLabel=B -textBoldTooltip=Bold -textItalicLabel=I -textItalicTooltip=Italic -textUnderlineLabel=U -textUnderlineTooltip=Underline -lineAlphaLabel=Alpha -lineColorLabel=Line Color -lineStyleLabel=Style -lineWidthLabel=Width -fillAlphaLabel=Alpha -fillColorLabel=Fill Color -fillStyleLabel=Style -fillOutlineColorLabel=Outline Color -fillOutlineWidthLabel=Width - -# -# -- Measurement Strings -- -# -showMeasurementsLabel=Show Measurements -distanceUnitsLabel=Distance Units -areaUnitsLabel=Area Units -areaLabel=Area: -perimeterLabel=Perimeter: -lengthLabel=Length: - -########## Bookmark Widget -bookmarksLabel=Bookmarks -addbookmarksLabel=Add Bookmark -addLabel=Add current extent as a bookmark named -bookmarkSubmitLabel=Add Bookmark -bookmarkMissingNameLabel=Please enter a name for the bookmark. -deleteBookmarkTooltip=Delete bookmark - -########## Data Extract Widget -descLabel=Extract data and download zip file -step1Label=1. Select area -dataCurrentExtentLabel=1. Data will be extracted from your current extent. -step2Label=2. Select layers to extract -step3Label=3. Select file format -step4Label=4. Select raster format -step5Label=5. SpatialReference -extractButtonLabel=Extract -step1ErrorLabel=Please select an area of interest. -step2ErrorLabel=Please select layers to extract. -emptyResultsLabel=Task completed but didn't return any results. -saveDataFileLabel=Data file created. Would you like to save it? - -########## Edit Widget -attributesLabel=Attributes -attachmentsLabel=Attachments -relatedRecordsLabel=Related Records -featureLayerOutOfScaleText=This feature layer is out of scale range -showAttachmentsText=Attachments -showRelatedRecordsText=Related records -showAttributesText=Go back -selectTemplateText=Select template to create feature -noEditableLayersText=No editable layers. -noCreateCapabilityLayersText=None of the layers have create capability -layerNotSupportingAttachmentsText=This layer does not support attachments -noAttachmentsText=No attachments -chooseFileText=Choose a file to attach -attachmentSubmitLabel=Submit -attachmentCancelLabel=Cancel -singleAttachmentText=The feature has {0} attachment -multipleAttachmentsText=The feature has {0} attachments - -########## LayerList Widget -layerListTitle=Layer Visibility - -########## Locate Widget -locateSubmitLabel=Locate -addressLabel=Address -coordinatesLabel=Coordinates -addressTitle=Enter the address -coordinatesTitle=Enter the coordinates -xLabel=Longitude (X) -yLabel=Latitude (Y) -locationsLabel=Locations found: -bingCulture=en-US -requiredFields=Required fields: -requiredField=Required field: -deleteResultTooltip=Delete result -resultScoreText=Score: -bingResultConfidenceText=Confidence: - -########## Print Widget -printSubmitLabel=Print -printTitle= -printSubtitle= -printCopyright= -printTitleLabel=Title -printSubtitleLabel=Subtitle -printCopyrightLabel=Copyright -printAuthorLabel=Author -printLayoutTemplatesLabel=Layout templates -printFormatsLabel=Formats -printScaleLabel=Use this scale - -########## Query Widget -filterTitleBarTooltip=Filter results -showallTitleBarTooltip=Show all -filterButtonLabel=Filter -clearButtonLabel=Show all -featuresFoundLabel=Features found: {0} - -########## Routing Widget -drivingDirectionLabel=Driving Directions -routeSubmitLabel=Get Directions -moveUpTooltip=Move up -moveDownTooltip=Move down -addLocationTooltip=click on map to add location -optionsLabel=Options -bestSequenceLabel=Find best sequence -milesLabel=Miles -metricLabel=Km -changeRouteSymbolLabel=Change route symbol -editRouteLabel=Edit Route - -########## Search Widget -graphicalTitleBarTooltip=Select features -textTitleBarTooltip=Select by attribute -graphicalsearchLabel=Select features by -textsearchLabel=Select by attribute -layerLabel=Search layer -nolayerLabel=No search layer defined. -searchSubmitLabel=Search -selectionLabel=Features selected: - -########## Coordinate Widget -latitudeLabel=Latitude -longitudeLabel=Longitude - -########## GP widget -gpSubmitLabel=Submit -inputLabel=Input -helpLabel=Help -outputLabel=Output -copyToClipboard=Copy to Clipboard -unsupportedInputType={0} input is not supported -currentExtentWillBeUsedAsInput=The current extent will be used as input. - -########## Popups -zoomLabel=Zoom to - -########## Hello Widget -helloContent=Change this text in config file. - -########## Test Open Close Widget -widgetIDWidgetLabelTemplate=Widget Id: {0}, widget label: {1} -widgetIDWidgetStateTemplate=Widget Id: {0}, widget state: {1} -itemLabelWidgetIDItemIDTemplate={0} Widget ID: {1} - -########## Chart Widget -layerSelectionLabel=Select layer -drawToolMenuLabel=Select draw tool -selectLabel=Select -noLayersLabel=No layers -noChartDataToDisplayLabel=No chart data to display +# -- UI related messages for the context menu on the map, in addition to messages from the api -- +# +contextMenuText=About ArcGIS Viewer for Flex... +aboutText=This application is using ArcGIS Viewer for Flex version 3.1.\nBuild date 2012-12-12. +aboutLearnMoreBtn=Learn more +aboutCloseBtn=Close + +# -- Widget Template Strings -- +# +close=Close +minimize=Minimize + +# --- general locale specifics +locateExampleValueX=-77.03655 +locateExampleValueY=38.89767 + +# -- Generic strings -- +clearLabel=Clear +deleteLabel=Delete +loadingLabel=Loading... +okLabel=OK +errorLabel=Error +problemLabel=Problem +noFeatures=No features found. +resultsLabel=Results +saveLabel=Save + +# --- Units Strings -- +unitsFeet=Feet +unitsFeetAbbr=ft +unitsKilometers=Kilometers +unitsKilometersAbbr=km +unitsMeters=Meters +unitsMetersAbbr=m +unitsMiles=Miles +unitsMilesAbbr=mi +unitsYards=Yards +unitsYardsAbbr=yd + +unitsAcres=Acres +unitsAcresAbbr=ac +unitsHectares=Hectares +unitsHectaresAbbr=ha +unitsSquareFeet=Square feet +unitsSquareFeetAbbr=sq ft +unitsSquareKilometers=Square kilometers +unitsSquareKilometersAbbr=sq km +unitsSquareMeters=Square meters +unitsSquareMetersAbbr=sq m +unitsSquareMiles=Square miles +unitsSquareMilesAbbr=sq mi +unitsSquareYards=Square yards +unitsSquareYardsAbbr=sq yd + +########## TOC +tocMapLayerZoomToLabel=Zoom to +tocMapLayerTransparencyLabel=Transparency +tocMapLayerOpaqueLabel=Opaque +tocMapLayerTransparentLabel=Transparent +tocMapLayerMoveUpLabel=Move up +tocMapLayerMoveDownLabel=Move down +tocMapLayerRemoveLabel=Remove +tocMapLayerDescriptionLabel=Description +tocMapLayerDownloadLabel=Download + +########## MapManager +incorrectLayerTypeText={0} is not a supported layer type. Use "arcims", "bing", "csv", "dynamic", "feature", "georss", "image", "kml", "osm", "tiled", "wms" or "wmts" instead. + +########## Base Widget and ConfigManager +missingConfigFileText=Could not find {0} +httpResponseStatus=http response status: {0} +faultCode=Fault code: {0} +faultInfo=Fault info: {0} +faultDetail=Fault details: {0} + +########## Errors +parseConfigErrorText=A problem occurred while parsing the configuration file {0} +standalonePlayerExternalInterfaceErrorText=Some error occurred. ExternalInterface doesn't work in Standalone player. +layerFailedToLoad:{0} layer failed to load: {1} +couldNotFetchBasemapData=Could not fetch basemap data:\n{0} +couldNotConnectToPortal=Could not connect to Portal. +couldNotQueryPortal=Could not query portal. +couldNotQueryPortalItems=Could not query portal items. +serverMissingCrossDomain=GIS Server is missing a crossdomain file. +serviceIsInaccessible=Service does not exist or is inaccessible. +unauthorizedAccess=You don't have permissions to access this service. +unknownErrorCause=Unknown error cause. +resourceAccessDenied=You do not have permissions to access this resource. +signInAborted=Sign in aborted. +invalidWidgetId=Invalid widgetId: {0} +printTaskExecutionError=Error executing print task:\n\n{0} +gpServiceConnectionError=Unable to connect to GP Service:\n{0}\n\n{1}\n{2} +locatorServiceConnectionError=Unable to connect to Locator Service:\n{0}\n\n{1}\n{2} +singleLineGeocodingNotSupportedError=Locator service does not support single-line geocoding. +rssFeedParsingError=A problem occurred while parsing the RSS feed. {0} +httpResponseNotXMLError=HTTP Response is not XML. +unknownRSSFeedTypeError=Unable to determine RSS feed type. +initializationError=A problem ocurred while initializing: {0} +unableToDetermineGPExecutionType=Could not determine geoprocessing execution type: +projectionError=Error projecting geometry: {0} +cannotRunTaskExecutionTypeUnknownError=Cannot run task: execution type unknown. +layerDataRetrievalError=Could not retrieve layer data. +couldNotDeleteFeature=Could not delete feature +couldNotUpdateFeatureError=Could not update feature, Restoring old value + +########## Base Widget and MapManager +configFileCrossDomain=Possible crossdomain issue: {0}{1} + +########## Overview Map "Widget" +openToolTip=Click to open overview map +closeToolTip=Click to close overview map + +########## MapSwitcher Widget +layerListLabel=More... +basemap=Basemap + +########## HeaderController Widget +aboutLabel=About +searchPrompt=Enter address +searchResultTitleLabel=Location +noResultsFoundLabel=No results found + +########## Navigation Widget +fullExtentLabel=Full Extent +panDownLabel=Pan down +panLeftLabel=Pan left +panRightLabel=Pan right +panUpLabel=Pan up +previousExtentLabel=Previous Extent +nextExtentLabel=Next Extent +panLabel=Pan +zoomInLabel=Zoom in +zoomOutLabel=Zoom out + +# -- Common draw strings -- + + +# -- Draw Strings -- +# +addTextLabel=Add Text +drawPointLabel=Draw Point +drawLineLabel=Draw Line +drawFreehandLineLabel=Draw Freehand Line +drawPolygonLabel=Draw Polygon +drawFreehandPolygonLabel=Draw Freehand Polygon +drawRectangleLabel=Draw Rectangle +drawMapExtentLabel=Draw Map Extent +drawCircleLabel=Draw Circle +drawEllipseLabel=Draw Ellipse +drawClearLabel=Clear drawings + +markerStyleCircle=Circle +markerStyleCross=Cross +markerStyleDiamond=Diamond +markerStyleSquare=Square +markerStyleTriangle=Triangle +markerStyleX=X + +textFont1=Arial +textFont2=Courier New +textFont3=Broadway +textFont4=Comic Sans MS +textFont5=Algerian +textFont6=Verdana + +lineStyleSolid=Solid +lineStyleDash=Dash +lineStyleDot=Dot +lineStyleDashDot=Dash Dot +lineStyleDashDotDot=Dash Dot Dot + +fillStyleSolid=Solid +fillStyleBackwardDiagonal=Backward Diagonal +fillStyleCross=Cross +fillStyleForwardDiagonal=Forward Diagonal +fillStyleHorizontal=Horizontal +fillStyleVertical=Vertical + +# -- Symbol Strings -- +# +markerAlphaLabel=Alpha +markerColorLabel=Marker Color +markerSizeLabel=Size +markerStyleLabel=Style +markerOutlineColorLabel=Outline Color +markerOutlineWidthLabel=Width +textLabel=Text +textColorLabel=Color +textFontLabel=Font +textSizeLabel=Size +textBoldLabel=B +textBoldTooltip=Bold +textItalicLabel=I +textItalicTooltip=Italic +textUnderlineLabel=U +textUnderlineTooltip=Underline +lineAlphaLabel=Alpha +lineColorLabel=Line Color +lineStyleLabel=Style +lineWidthLabel=Width +fillAlphaLabel=Alpha +fillColorLabel=Fill Color +fillStyleLabel=Style +fillOutlineColorLabel=Outline Color +fillOutlineWidthLabel=Width + +# +# -- Measurement Strings -- +# +showMeasurementsLabel=Show Measurements +distanceUnitsLabel=Distance Units +areaUnitsLabel=Area Units +areaLabel=Area: +perimeterLabel=Perimeter: +lengthLabel=Length: + +########## Bookmark Widget +bookmarksLabel=Bookmarks +addbookmarksLabel=Add Bookmark +addLabel=Add current extent as a bookmark named +bookmarkSubmitLabel=Add Bookmark +bookmarkMissingNameLabel=Please enter a name for the bookmark. +deleteBookmarkTooltip=Delete bookmark + +########## Data Extract Widget +descLabel=Extract data and download zip file +step1Label=1. Select area +dataCurrentExtentLabel=1. Data will be extracted from your current extent. +step2Label=2. Select layers to extract +step3Label=3. Select file format +step4Label=4. Select raster format +step5Label=5. SpatialReference +extractButtonLabel=Extract +step1ErrorLabel=Please select an area of interest. +step2ErrorLabel=Please select layers to extract. +emptyResultsLabel=Task completed but didn't return any results. +saveDataFileLabel=Data file created. Would you like to save it? + +########## Edit Widget +attributesLabel=Attributes +attachmentsLabel=Attachments +relatedRecordsLabel=Related Records +featureLayerOutOfScaleText=This feature layer is out of scale range +showAttachmentsText=Attachments +showRelatedRecordsText=Related records +showAttributesText=Go back +selectTemplateText=Select template to create feature +noEditableLayersText=No editable layers. +noCreateCapabilityLayersText=None of the layers have create capability +layerNotSupportingAttachmentsText=This layer does not support attachments +noAttachmentsText=No attachments +chooseFileText=Choose a file to attach +attachmentSubmitLabel=Submit +attachmentCancelLabel=Cancel +singleAttachmentText=The feature has {0} attachment +multipleAttachmentsText=The feature has {0} attachments + +########## LayerList Widget +layerListTitle=Layer Visibility + +########## Locate Widget +locateSubmitLabel=Locate +addressLabel=Address +coordinatesLabel=Coordinates +addressTitle=Enter the address +coordinatesTitle=Enter the coordinates +xLabel=Longitude (X) +yLabel=Latitude (Y) +locationsLabel=Locations found: +bingCulture=en-US +requiredFields=Required fields: +requiredField=Required field: +deleteResultTooltip=Delete result +resultScoreText=Score: +bingResultConfidenceText=Confidence: + +########## Print Widget +printSubmitLabel=Print +printTitle= +printSubtitle= +printCopyright= +printTitleLabel=Title +printSubtitleLabel=Subtitle +printCopyrightLabel=Copyright +printAuthorLabel=Author +printLayoutTemplatesLabel=Layout templates +printFormatsLabel=Formats +printScaleLabel=Use this scale + +########## Query Widget +filterTitleBarTooltip=Filter results +showallTitleBarTooltip=Show all +filterButtonLabel=Filter +clearButtonLabel=Show all +featuresFoundLabel=Features found: {0} + +########## Routing Widget +drivingDirectionLabel=Driving Directions +routeSubmitLabel=Get Directions +moveUpTooltip=Move up +moveDownTooltip=Move down +addLocationTooltip=click on map to add location +optionsLabel=Options +bestSequenceLabel=Find best sequence +milesLabel=Miles +metricLabel=Km +changeRouteSymbolLabel=Change route symbol +editRouteLabel=Edit Route + +########## Search Widget +graphicalTitleBarTooltip=Select features +textTitleBarTooltip=Select by attribute +graphicalsearchLabel=Select features by +textsearchLabel=Select by attribute +layerLabel=Search layer +nolayerLabel=No search layer defined. +searchSubmitLabel=Search +selectionLabel=Features selected: + +########## Coordinate Widget +latitudeLabel=Latitude +longitudeLabel=Longitude + +########## GP widget +gpSubmitLabel=Submit +inputLabel=Input +helpLabel=Help +outputLabel=Output +copyToClipboard=Copy to Clipboard +unsupportedInputType={0} input is not supported +currentExtentWillBeUsedAsInput=The current extent will be used as input. + +########## Popups +zoomLabel=Zoom to + +########## Hello Widget +helloContent=Change this text in config file. + +########## Test Open Close Widget +widgetIDWidgetLabelTemplate=Widget Id: {0}, widget label: {1} +widgetIDWidgetStateTemplate=Widget Id: {0}, widget state: {1} +itemLabelWidgetIDItemIDTemplate={0} Widget ID: {1} + +########## Chart Widget +layerSelectionLabel=Select layer +drawToolMenuLabel=Select draw tool +selectLabel=Select +noLayersLabel=No layers +noChartDataToDisplayLabel=No chart data to display featureLayerNotVisibleText=feature layer is either not visible or out of scale range \ No newline at end of file diff --git a/locale/es_ES/ViewerStrings.properties b/locale/es_ES/ViewerStrings.properties index 66d70fb..75f97e7 100644 --- a/locale/es_ES/ViewerStrings.properties +++ b/locale/es_ES/ViewerStrings.properties @@ -1,350 +1,350 @@ - - -contextMenuText=Acerca de ArcGIS Viewer for Flex... -aboutText=Esta aplicación utiliza ArcGIS Viewer for Flex versión 3.1.\nFecha de compilación 2012-12-12. -aboutLearnMoreBtn=Más información -aboutCloseBtn=Cerrar - - - -close=Cerrar -minimize=Minimizar - - -locateExampleValueX=-3.7139 -locateExampleValueY=40.4181 - - -clearLabel=Borrar -deleteLabel=Eliminar -loadingLabel=Cargando... -okLabel=Aceptar -errorLabel=Error -problemLabel=Problema -noFeatures=No se encontraron entidades. -resultsLabel=Resultados -saveLabel=Guardar - - -unitsFeet=Feet -unitsFeetAbbr=ft -unitsKilometers=Kilómetros -unitsKilometersAbbr=km -unitsMeters=Metros -unitsMetersAbbr=m -unitsMiles=Millas -unitsMilesAbbr=mi -unitsYards=Yardas -unitsYardsAbbr=yd - -unitsAcres=Acres -unitsAcresAbbr=ac -unitsHectares=Hectáreas -unitsHectaresAbbr=ha -unitsSquareFeet=Pies cuadrados -unitsSquareFeetAbbr=sq ft -unitsSquareKilometers=Kilómetros cuadrados -unitsSquareKilometersAbbr=sq km -unitsSquareMeters=Metros cuadrados -unitsSquareMetersAbbr=sq m -unitsSquareMiles=Millas cuadradas -unitsSquareMilesAbbr=sq mi -unitsSquareYards=Yardas cuadradas -unitsSquareYardsAbbr=sq yd - - -tocMapLayerZoomToLabel=Acercar a -tocMapLayerTransparencyLabel=Transparencia -tocMapLayerOpaqueLabel=Opaco -tocMapLayerTransparentLabel=Transparente -tocMapLayerMoveUpLabel=Mover hacia arriba -tocMapLayerMoveDownLabel=Mover hacia abajo -tocMapLayerRemoveLabel=Quitar -tocMapLayerDescriptionLabel=Descripción -tocMapLayerDownloadLabel=Descargar - - -incorrectLayerTypeText={0} no es un tipo de capa admitido. Utilice "arcims", "bing", "csv", "dynamic", "feature", "georss", "image", "kml", "osm", "tiled", "wms" o "wmts" en su lugar. - - -missingConfigFileText=No se pudo encontrar {0} -httpResponseStatus=estado de respuesta http: {0} -faultCode=Código del fallo: {0} -faultInfo=Información del fallo: {0} -faultDetail=Detalles del fallo: {0} - - -parseConfigErrorText=Se encontró un problema mientras se analizaba el archivo de configuración {0} -standalonePlayerExternalInterfaceErrorText=Ha ocurrido un error. ExternalInterface no funciona en el reproductor independiente. -layerFailedToLoad:No se pudo cargar la capa {0}: {1} -couldNotFetchBasemapData=No se pudieron recuperar los datos del mapa base:\n{0} -couldNotConnectToPortal=No se pudo conectar con el Portal. -couldNotQueryPortal=No se pudo consultar el portal. -couldNotQueryPortalItems=No se pudieron consultar los elementos del portal. -serverMissingCrossDomain=Falta un archivo crossdomain en el servidor GIS. -serviceIsInaccessible=El servicio no existe o resulta inaccesible. -unauthorizedAccess=No tiene permisos para acceder a este servicio. -unknownErrorCause=Causa de error desconocida. -resourceAccessDenied=No tiene permisos para acceder a este recurso. -signInAborted=Inicio de sesión anulado. -invalidWidgetId=widgetId no válido: {0} -printTaskExecutionError=Error al ejecutar la tarea de impresión:\n\n{0} -gpServiceConnectionError=No se puede conectar con el servicio de geoprocesamiento:\n{0}\n\n{1}\n{2} -locatorServiceConnectionError=No se puede conectar con el servicio de localización:\n{0}\n\n{1}\n{2} -singleLineGeocodingNotSupportedError=El servicio de localización no admite la geocodificación de líneas individuales. -rssFeedParsingError=Se encontró un problema mientras se analizaba la fuente RSS. {0} -httpResponseNotXMLError=La respuesta HTTP no es XML. -unknownRSSFeedTypeError=No se puede determinar el tipo de fuente RSS. -initializationError=Se encontró un problema mientras se inicializaba: {0} -unableToDetermineGPExecutionType=No se pudo determinar el tipo de ejecución del geoprocesamiento: -projectionError=Error al proyectar la geometría: {0} -cannotRunTaskExecutionTypeUnknownError=No se puede ejecutar la tarea: tipo de ejecución desconocido. -layerDataRetrievalError=No se pudieron recuperar los datos de la capa. -couldNotDeleteFeature=No se pudo eliminar la entidad -couldNotUpdateFeatureError=No se pudo actualizar la entidad, restaurando valor anterior - - -configFileCrossDomain=Posible problema de crossdomain: {0}{1} - - -openToolTip=Haga clic para abrir el mapa de vista general -closeToolTip=Haga clic para cerrar el mapa de vista general - - -layerListLabel=Más... -basemap=Mapa base - - -aboutLabel=Acerca de -searchPrompt=Introducir dirección -searchResultTitleLabel=Ubicación -noResultsFoundLabel=No se encontraron resultados - - -fullExtentLabel=Extensión completa -panDownLabel=Desplazamiento panorámico hacia abajo -panLeftLabel=Desplazamiento panorámico hacia la izquierda -panRightLabel=Desplazamiento panorámico hacia la derecha -panUpLabel=Desplazamiento panorámico hacia arriba -previousExtentLabel=Extensión anterior -nextExtentLabel=Extensión siguiente -panLabel=Desplazamiento panorámico -zoomInLabel=Acercar -zoomOutLabel=Alejar - - - - - - -addTextLabel=Agregar texto -drawPointLabel=Dibujar punto -drawLineLabel=Dibujar línea -drawFreehandLineLabel=Dibujar línea a mano alzada -drawPolygonLabel=Dibujar polígono -drawFreehandPolygonLabel=Dibujar polígono a mano alzada -drawRectangleLabel=Trazar Rectángulo -drawMapExtentLabel=Dibujar extensión de mapa -drawCircleLabel=Dibujar círculo -drawEllipseLabel=Dibujar elipse -drawClearLabel=Borrar dibujos - -markerStyleCircle=Círculo -markerStyleCross=Cruz -markerStyleDiamond=Diamante -markerStyleSquare=Cuadrado -markerStyleTriangle=Triángulo -markerStyleX=X - -textFont1=Arial -textFont2=Courier New -textFont3=Broadway -textFont4=Comic Sans MS -textFont5=Algerian -textFont6=Verdana - -lineStyleSolid=Sólido -lineStyleDash=Guión -lineStyleDot=Punto -lineStyleDashDot=Guión-punto -lineStyleDashDotDot=Guión-punto-punto - -fillStyleSolid=Sólido -fillStyleBackwardDiagonal=Diagonal hacia atrás -fillStyleCross=Cruz -fillStyleForwardDiagonal=Diagonal hacia adelante -fillStyleHorizontal=Horizontal -fillStyleVertical=V - - - -markerAlphaLabel=Alfa -markerColorLabel=Color del marcador -markerSizeLabel=Tamaño -markerStyleLabel=Estilo -markerOutlineColorLabel=Color del contorno -markerOutlineWidthLabel=Ancho -textLabel=Texto -textColorLabel=Color -textFontLabel=Fuente -textSizeLabel=Tamaño -textBoldLabel=N -textBoldTooltip=Negrita -textItalicLabel=K -textItalicTooltip=Cursiva -textUnderlineLabel=S -textUnderlineTooltip=Subrayado -lineAlphaLabel=Alfa -lineColorLabel=Color de línea -lineStyleLabel=Estilo -lineWidthLabel=Ancho -fillAlphaLabel=Alfa -fillColorLabel=Color de relleno -fillStyleLabel=Estilo -fillOutlineColorLabel=Color del contorno -fillOutlineWidthLabel=Ancho - - - - -showMeasurementsLabel=Mostrar medidas -distanceUnitsLabel=Unidades de distancia -areaUnitsLabel=Unidades de área -areaLabel=Área: -perimeterLabel=Perímetro: -lengthLabel=Longitud: - - -bookmarksLabel=Marcadores -addbookmarksLabel=Agregar marcador -addLabel=Agregar la extensión actual como un marcador llamado -bookmarkSubmitLabel=Agregar marcador -bookmarkMissingNameLabel=Introduzca un nombre para el marcador. -deleteBookmarkTooltip=Eliminar marcador - - -descLabel=Extraer datos y descargar archivo zip -step1Label=1. Seleccione el área -dataCurrentExtentLabel=1. Los datos se extraerán de la extensión actual. -step2Label=2. Seleccione las capas para extraer -step3Label=3. Seleccione el formato del archivo -step4Label=4. Seleccione el formato del ráster -step5Label=5. Referencia espacial -extractButtonLabel=Extraer -step1ErrorLabel=Seleccione un área de interés. -step2ErrorLabel=Seleccione las capas para extraer. -emptyResultsLabel=La tarea se completó pero no produjo ningún resultado. -saveDataFileLabel=Se creó el archivo de datos. ¿Desea guardarlo? - - -attributesLabel=Atributos -attachmentsLabel=Adjuntos -relatedRecordsLabel=Registros relacionados -featureLayerOutOfScaleText=Esta capa de entidades está fuera del rango de escala -showAttachmentsText=Adjuntos -showRelatedRecordsText=Registros relacionados -showAttributesText=Atrás -selectTemplateText=Seleccione la plantilla para crear la entidad -noEditableLayersText=Capas no editables. -noCreateCapabilityLayersText=Ninguna de las capas tiene capacidad de crear -layerNotSupportingAttachmentsText=Esta capa no es compatible con los archivos adjuntos -noAttachmentsText=Sin adjuntos -chooseFileText=Elija un archivo para adjuntar -attachmentSubmitLabel=Enviar -attachmentCancelLabel=Cancelar -singleAttachmentText=La entidad tiene {0} adjunto -multipleAttachmentsText=La entidad tiene {0} adjuntos - - -layerListTitle=Visibilidad de capa - - -locateSubmitLabel=Localizar -addressLabel=Dirección -coordinatesLabel=Coordenadas -addressTitle=Introduzca la dirección -coordinatesTitle=Introduzca las coordenadas -xLabel=Longitud (X) -yLabel=Latitud (Y) -locationsLabel=Ubicaciones encontradas: -bingCulture=es-es -requiredFields=Campos requeridos: -requiredField=Campo requerido: -deleteResultTooltip=Eliminar resultado -resultScoreText=Puntuación: -bingResultConfidenceText=Confianza: - - -printSubmitLabel=Imprimir -printTitle= -printSubtitle= -printCopyright= -printTitleLabel=Título -printSubtitleLabel=Subtítulo -printCopyrightLabel=Copyright -printAuthorLabel=Autor -printLayoutTemplatesLabel=Plantillas de diseño -printFormatsLabel=Formatos -printScaleLabel=Utilizar esta escala - - -filterTitleBarTooltip=Filtrar resultados -showallTitleBarTooltip=Mostrar todo -filterButtonLabel=Filtro -clearButtonLabel=Mostrar todo -featuresFoundLabel=Entidades encontradas: {0} - - -drivingDirectionLabel=Indicaciones para conducir -routeSubmitLabel=Obtener indicaciones -moveUpTooltip=Mover hacia arriba -moveDownTooltip=Mover hacia abajo -addLocationTooltip=haga clic en el mapa para agregar ubicación -optionsLabel=Opciones -bestSequenceLabel=Buscar la mejor secuencia -milesLabel=Millas -metricLabel=Km -changeRouteSymbolLabel=Cambiar símbolo de ruta -editRouteLabel=Editar ruta - - -graphicalTitleBarTooltip=Seleccionar entidades -textTitleBarTooltip=Seleccionar por atributo -graphicalsearchLabel=Seleccionar entidades por -textsearchLabel=Seleccionar por atributo -layerLabel=Capa de búsqueda -nolayerLabel=No se definió ninguna capa de búsqueda. -searchSubmitLabel=Buscar -selectionLabel=Entidades seleccionadas: - - -latitudeLabel=Latitud -longitudeLabel=Longitud - - -gpSubmitLabel=Enviar -inputLabel=Entrada -helpLabel=Ayuda -outputLabel=Salida -copyToClipboard=Copiar al portapapeles -unsupportedInputType=No se admite la entrada {0} -currentExtentWillBeUsedAsInput=Se usará la extensión actual como entrada. - - -zoomLabel=Acercar a - - -helloContent=Cambie este texto en el archivo de configuración. - - -widgetIDWidgetLabelTemplate=Id. de widget: {0}, etiqueta de widget: {1} -widgetIDWidgetStateTemplate=Id. de widget: {0}, estado de widget: {1} -itemLabelWidgetIDItemIDTemplate=Id. de widget {0}: {1} - - -layerSelectionLabel=Seleccionar capa -drawToolMenuLabel=Seleccionar herramienta de dibujo -selectLabel=Seleccionar -noLayersLabel=No hay capas -noChartDataToDisplayLabel=No hay datos de gráfico para mostrar + + +contextMenuText=Acerca de ArcGIS Viewer for Flex... +aboutText=Esta aplicación utiliza ArcGIS Viewer for Flex versión 3.1.\nFecha de compilación 2012-12-12. +aboutLearnMoreBtn=Más información +aboutCloseBtn=Cerrar + + + +close=Cerrar +minimize=Minimizar + + +locateExampleValueX=-3.7139 +locateExampleValueY=40.4181 + + +clearLabel=Borrar +deleteLabel=Eliminar +loadingLabel=Cargando... +okLabel=Aceptar +errorLabel=Error +problemLabel=Problema +noFeatures=No se encontraron entidades. +resultsLabel=Resultados +saveLabel=Guardar + + +unitsFeet=Feet +unitsFeetAbbr=ft +unitsKilometers=Kilómetros +unitsKilometersAbbr=km +unitsMeters=Metros +unitsMetersAbbr=m +unitsMiles=Millas +unitsMilesAbbr=mi +unitsYards=Yardas +unitsYardsAbbr=yd + +unitsAcres=Acres +unitsAcresAbbr=ac +unitsHectares=Hectáreas +unitsHectaresAbbr=ha +unitsSquareFeet=Pies cuadrados +unitsSquareFeetAbbr=sq ft +unitsSquareKilometers=Kilómetros cuadrados +unitsSquareKilometersAbbr=sq km +unitsSquareMeters=Metros cuadrados +unitsSquareMetersAbbr=sq m +unitsSquareMiles=Millas cuadradas +unitsSquareMilesAbbr=sq mi +unitsSquareYards=Yardas cuadradas +unitsSquareYardsAbbr=sq yd + + +tocMapLayerZoomToLabel=Acercar a +tocMapLayerTransparencyLabel=Transparencia +tocMapLayerOpaqueLabel=Opaco +tocMapLayerTransparentLabel=Transparente +tocMapLayerMoveUpLabel=Mover hacia arriba +tocMapLayerMoveDownLabel=Mover hacia abajo +tocMapLayerRemoveLabel=Quitar +tocMapLayerDescriptionLabel=Descripción +tocMapLayerDownloadLabel=Descargar + + +incorrectLayerTypeText={0} no es un tipo de capa admitido. Utilice "arcims", "bing", "csv", "dynamic", "feature", "georss", "image", "kml", "osm", "tiled", "wms" o "wmts" en su lugar. + + +missingConfigFileText=No se pudo encontrar {0} +httpResponseStatus=estado de respuesta http: {0} +faultCode=Código del fallo: {0} +faultInfo=Información del fallo: {0} +faultDetail=Detalles del fallo: {0} + + +parseConfigErrorText=Se encontró un problema mientras se analizaba el archivo de configuración {0} +standalonePlayerExternalInterfaceErrorText=Ha ocurrido un error. ExternalInterface no funciona en el reproductor independiente. +layerFailedToLoad:No se pudo cargar la capa {0}: {1} +couldNotFetchBasemapData=No se pudieron recuperar los datos del mapa base:\n{0} +couldNotConnectToPortal=No se pudo conectar con el Portal. +couldNotQueryPortal=No se pudo consultar el portal. +couldNotQueryPortalItems=No se pudieron consultar los elementos del portal. +serverMissingCrossDomain=Falta un archivo crossdomain en el servidor GIS. +serviceIsInaccessible=El servicio no existe o resulta inaccesible. +unauthorizedAccess=No tiene permisos para acceder a este servicio. +unknownErrorCause=Causa de error desconocida. +resourceAccessDenied=No tiene permisos para acceder a este recurso. +signInAborted=Inicio de sesión anulado. +invalidWidgetId=widgetId no válido: {0} +printTaskExecutionError=Error al ejecutar la tarea de impresión:\n\n{0} +gpServiceConnectionError=No se puede conectar con el servicio de geoprocesamiento:\n{0}\n\n{1}\n{2} +locatorServiceConnectionError=No se puede conectar con el servicio de localización:\n{0}\n\n{1}\n{2} +singleLineGeocodingNotSupportedError=El servicio de localización no admite la geocodificación de líneas individuales. +rssFeedParsingError=Se encontró un problema mientras se analizaba la fuente RSS. {0} +httpResponseNotXMLError=La respuesta HTTP no es XML. +unknownRSSFeedTypeError=No se puede determinar el tipo de fuente RSS. +initializationError=Se encontró un problema mientras se inicializaba: {0} +unableToDetermineGPExecutionType=No se pudo determinar el tipo de ejecución del geoprocesamiento: +projectionError=Error al proyectar la geometría: {0} +cannotRunTaskExecutionTypeUnknownError=No se puede ejecutar la tarea: tipo de ejecución desconocido. +layerDataRetrievalError=No se pudieron recuperar los datos de la capa. +couldNotDeleteFeature=No se pudo eliminar la entidad +couldNotUpdateFeatureError=No se pudo actualizar la entidad, restaurando valor anterior + + +configFileCrossDomain=Posible problema de crossdomain: {0}{1} + + +openToolTip=Haga clic para abrir el mapa de vista general +closeToolTip=Haga clic para cerrar el mapa de vista general + + +layerListLabel=Más... +basemap=Mapa base + + +aboutLabel=Acerca de +searchPrompt=Introducir dirección +searchResultTitleLabel=Ubicación +noResultsFoundLabel=No se encontraron resultados + + +fullExtentLabel=Extensión completa +panDownLabel=Desplazamiento panorámico hacia abajo +panLeftLabel=Desplazamiento panorámico hacia la izquierda +panRightLabel=Desplazamiento panorámico hacia la derecha +panUpLabel=Desplazamiento panorámico hacia arriba +previousExtentLabel=Extensión anterior +nextExtentLabel=Extensión siguiente +panLabel=Desplazamiento panorámico +zoomInLabel=Acercar +zoomOutLabel=Alejar + + + + + + +addTextLabel=Agregar texto +drawPointLabel=Dibujar punto +drawLineLabel=Dibujar línea +drawFreehandLineLabel=Dibujar línea a mano alzada +drawPolygonLabel=Dibujar polígono +drawFreehandPolygonLabel=Dibujar polígono a mano alzada +drawRectangleLabel=Trazar Rectángulo +drawMapExtentLabel=Dibujar extensión de mapa +drawCircleLabel=Dibujar círculo +drawEllipseLabel=Dibujar elipse +drawClearLabel=Borrar dibujos + +markerStyleCircle=Círculo +markerStyleCross=Cruz +markerStyleDiamond=Diamante +markerStyleSquare=Cuadrado +markerStyleTriangle=Triángulo +markerStyleX=X + +textFont1=Arial +textFont2=Courier New +textFont3=Broadway +textFont4=Comic Sans MS +textFont5=Algerian +textFont6=Verdana + +lineStyleSolid=Sólido +lineStyleDash=Guión +lineStyleDot=Punto +lineStyleDashDot=Guión-punto +lineStyleDashDotDot=Guión-punto-punto + +fillStyleSolid=Sólido +fillStyleBackwardDiagonal=Diagonal hacia atrás +fillStyleCross=Cruz +fillStyleForwardDiagonal=Diagonal hacia adelante +fillStyleHorizontal=Horizontal +fillStyleVertical=V + + + +markerAlphaLabel=Alfa +markerColorLabel=Color del marcador +markerSizeLabel=Tamaño +markerStyleLabel=Estilo +markerOutlineColorLabel=Color del contorno +markerOutlineWidthLabel=Ancho +textLabel=Texto +textColorLabel=Color +textFontLabel=Fuente +textSizeLabel=Tamaño +textBoldLabel=N +textBoldTooltip=Negrita +textItalicLabel=K +textItalicTooltip=Cursiva +textUnderlineLabel=S +textUnderlineTooltip=Subrayado +lineAlphaLabel=Alfa +lineColorLabel=Color de línea +lineStyleLabel=Estilo +lineWidthLabel=Ancho +fillAlphaLabel=Alfa +fillColorLabel=Color de relleno +fillStyleLabel=Estilo +fillOutlineColorLabel=Color del contorno +fillOutlineWidthLabel=Ancho + + + + +showMeasurementsLabel=Mostrar medidas +distanceUnitsLabel=Unidades de distancia +areaUnitsLabel=Unidades de área +areaLabel=Área: +perimeterLabel=Perímetro: +lengthLabel=Longitud: + + +bookmarksLabel=Marcadores +addbookmarksLabel=Agregar marcador +addLabel=Agregar la extensión actual como un marcador llamado +bookmarkSubmitLabel=Agregar marcador +bookmarkMissingNameLabel=Introduzca un nombre para el marcador. +deleteBookmarkTooltip=Eliminar marcador + + +descLabel=Extraer datos y descargar archivo zip +step1Label=1. Seleccione el área +dataCurrentExtentLabel=1. Los datos se extraerán de la extensión actual. +step2Label=2. Seleccione las capas para extraer +step3Label=3. Seleccione el formato del archivo +step4Label=4. Seleccione el formato del ráster +step5Label=5. Referencia espacial +extractButtonLabel=Extraer +step1ErrorLabel=Seleccione un área de interés. +step2ErrorLabel=Seleccione las capas para extraer. +emptyResultsLabel=La tarea se completó pero no produjo ningún resultado. +saveDataFileLabel=Se creó el archivo de datos. ¿Desea guardarlo? + + +attributesLabel=Atributos +attachmentsLabel=Adjuntos +relatedRecordsLabel=Registros relacionados +featureLayerOutOfScaleText=Esta capa de entidades está fuera del rango de escala +showAttachmentsText=Adjuntos +showRelatedRecordsText=Registros relacionados +showAttributesText=Atrás +selectTemplateText=Seleccione la plantilla para crear la entidad +noEditableLayersText=Capas no editables. +noCreateCapabilityLayersText=Ninguna de las capas tiene capacidad de crear +layerNotSupportingAttachmentsText=Esta capa no es compatible con los archivos adjuntos +noAttachmentsText=Sin adjuntos +chooseFileText=Elija un archivo para adjuntar +attachmentSubmitLabel=Enviar +attachmentCancelLabel=Cancelar +singleAttachmentText=La entidad tiene {0} adjunto +multipleAttachmentsText=La entidad tiene {0} adjuntos + + +layerListTitle=Visibilidad de capa + + +locateSubmitLabel=Localizar +addressLabel=Dirección +coordinatesLabel=Coordenadas +addressTitle=Introduzca la dirección +coordinatesTitle=Introduzca las coordenadas +xLabel=Longitud (X) +yLabel=Latitud (Y) +locationsLabel=Ubicaciones encontradas: +bingCulture=es-es +requiredFields=Campos requeridos: +requiredField=Campo requerido: +deleteResultTooltip=Eliminar resultado +resultScoreText=Puntuación: +bingResultConfidenceText=Confianza: + + +printSubmitLabel=Imprimir +printTitle= +printSubtitle= +printCopyright= +printTitleLabel=Título +printSubtitleLabel=Subtítulo +printCopyrightLabel=Copyright +printAuthorLabel=Autor +printLayoutTemplatesLabel=Plantillas de diseño +printFormatsLabel=Formatos +printScaleLabel=Utilizar esta escala + + +filterTitleBarTooltip=Filtrar resultados +showallTitleBarTooltip=Mostrar todo +filterButtonLabel=Filtro +clearButtonLabel=Mostrar todo +featuresFoundLabel=Entidades encontradas: {0} + + +drivingDirectionLabel=Indicaciones para conducir +routeSubmitLabel=Obtener indicaciones +moveUpTooltip=Mover hacia arriba +moveDownTooltip=Mover hacia abajo +addLocationTooltip=haga clic en el mapa para agregar ubicación +optionsLabel=Opciones +bestSequenceLabel=Buscar la mejor secuencia +milesLabel=Millas +metricLabel=Km +changeRouteSymbolLabel=Cambiar símbolo de ruta +editRouteLabel=Editar ruta + + +graphicalTitleBarTooltip=Seleccionar entidades +textTitleBarTooltip=Seleccionar por atributo +graphicalsearchLabel=Seleccionar entidades por +textsearchLabel=Seleccionar por atributo +layerLabel=Capa de búsqueda +nolayerLabel=No se definió ninguna capa de búsqueda. +searchSubmitLabel=Buscar +selectionLabel=Entidades seleccionadas: + + +latitudeLabel=Latitud +longitudeLabel=Longitud + + +gpSubmitLabel=Enviar +inputLabel=Entrada +helpLabel=Ayuda +outputLabel=Salida +copyToClipboard=Copiar al portapapeles +unsupportedInputType=No se admite la entrada {0} +currentExtentWillBeUsedAsInput=Se usará la extensión actual como entrada. + + +zoomLabel=Acercar a + + +helloContent=Cambie este texto en el archivo de configuración. + + +widgetIDWidgetLabelTemplate=Id. de widget: {0}, etiqueta de widget: {1} +widgetIDWidgetStateTemplate=Id. de widget: {0}, estado de widget: {1} +itemLabelWidgetIDItemIDTemplate=Id. de widget {0}: {1} + + +layerSelectionLabel=Seleccionar capa +drawToolMenuLabel=Seleccionar herramienta de dibujo +selectLabel=Seleccionar +noLayersLabel=No hay capas +noChartDataToDisplayLabel=No hay datos de gráfico para mostrar featureLayerNotVisibleText=la capa de entidades no está visible o está fuera del rango de escala \ No newline at end of file diff --git a/locale/fr_FR/ViewerStrings.properties b/locale/fr_FR/ViewerStrings.properties index acb5128..ef6f674 100644 --- a/locale/fr_FR/ViewerStrings.properties +++ b/locale/fr_FR/ViewerStrings.properties @@ -1,350 +1,350 @@ - - -contextMenuText=A propos d’ArcGIS Viewer for Flex... -aboutText=Cette application utilise ArcGIS Viewer for Flex version 3.1.\nDate de la version 2012-12-12. -aboutLearnMoreBtn=En savoir plus -aboutCloseBtn=Fermer - - - -close=Fermer -minimize=Réduire - - -locateExampleValueX=2.2945 -locateExampleValueY=48.8583 - - -clearLabel=Effacer -deleteLabel=Supprimer -loadingLabel=Chargement… -okLabel=OK -errorLabel=Erreur -problemLabel=Problème -noFeatures=Aucune entité n’a été trouvée. -resultsLabel=Résultats -saveLabel=Enregistrer - - -unitsFeet=Feet -unitsFeetAbbr=ft -unitsKilometers=Kilometers -unitsKilometersAbbr=km -unitsMeters=Meters -unitsMetersAbbr=m -unitsMiles=Miles -unitsMilesAbbr=mi -unitsYards=Yards -unitsYardsAbbr=yd - -unitsAcres=Acres -unitsAcresAbbr=ac -unitsHectares=Hectares -unitsHectaresAbbr=ha -unitsSquareFeet=Square feet -unitsSquareFeetAbbr=sq ft -unitsSquareKilometers=Square kilometers -unitsSquareKilometersAbbr=sq km -unitsSquareMeters=Square meters -unitsSquareMetersAbbr=sq m -unitsSquareMiles=Square miles -unitsSquareMilesAbbr=sq mi -unitsSquareYards=Square yards -unitsSquareYardsAbbr=sq yd - - -tocMapLayerZoomToLabel=Zoom sur -tocMapLayerTransparencyLabel=Transparence -tocMapLayerOpaqueLabel=Opaque -tocMapLayerTransparentLabel=Transparent -tocMapLayerMoveUpLabel=Déplacer vers le haut -tocMapLayerMoveDownLabel=Déplacer vers le bas -tocMapLayerRemoveLabel=Supprimer -tocMapLayerDescriptionLabel=Description -tocMapLayerDownloadLabel=Télécharger - - -incorrectLayerTypeText=Le type de couche {0} n’est pas pris en charge. Utilisez plutôt les types "arcims", "bing", "dynamic", "feature", "georss", "image", "kml", "osm", "tiled", "wms" ou "wmts". - - -missingConfigFileText={0} est introuvable -httpResponseStatus=Etat de la réponse http : {0} -faultCode=Code d’erreur : {0} -faultInfo=Informations sur l’erreur : {0} -faultDetail=Détails de l’erreur : {0} - - -parseConfigErrorText=Un problème est survenu lors de l’analyse du fichier de configuration {0} -standalonePlayerExternalInterfaceErrorText=Des erreurs se sont produites. ExternalInterface ne fonctionne pas dans un lecteur autonome. -layerFailedToLoad:La couche {0} n’a pas été chargée : {1} -couldNotFetchBasemapData=Impossible de récupérer les données du fond de carte :\n{0} -couldNotConnectToPortal=Impossible de se connecter au portail. -couldNotQueryPortal=Impossible d’interroger le portail. -couldNotQueryPortalItems=Impossible d’interroger les éléments de portail. -serverMissingCrossDomain=Il manque un fichier crossdomain sur le serveur ArcGIS -serviceIsInaccessible=Le service n’existe pas ou est inaccessible. -unauthorizedAccess=Vous n’êtes pas autorisé à accéder à ce service. -unknownErrorCause=Cause de l’erreur inconnue. -resourceAccessDenied=Vous n’êtes pas autorisé à accéder à cette ressource. -signInAborted=Abandon de la connexion. -invalidWidgetId=ID de widget erroné : {0} -printTaskExecutionError=Erreur lors de l’exécution de la tâche d’impression :\n\n{0} -gpServiceConnectionError=Impossible de se connecter au GP Service :\n{0}\n\n{1}\n{2} -locatorServiceConnectionError=Impossible de se connecter au Locator Service :\n{0}\n\n{1}\n{2} -singleLineGeocodingNotSupportedError=Le service de localisateur ne prend pas en charge le géocodage sur une seule ligne. -rssFeedParsingError=Un problème est survenu lors de l’analyse de la source RSS. {0} -httpResponseNotXMLError=La réponse HTTP n’est pas au format XML. -unknownRSSFeedTypeError=Impossible de déterminer le type de source RSS. -initializationError=Un problème est survenu lors de l’initialisation : {0} -unableToDetermineGPExecutionType=Impossible de déterminer le type d’exécution du géotraitement : -projectionError=Erreur de projection de la géométrie : {0} -cannotRunTaskExecutionTypeUnknownError=Impossible d’exécuter la tâche : type d’exécution inconnu. -layerDataRetrievalError=Impossible d’extraire les données de la couche. -couldNotDeleteFeature=Impossible de supprimer l’entité -couldNotUpdateFeatureError=Impossible de mettre à jour l’entité, rétablissement de l’ancienne valeur - - -configFileCrossDomain=Problème possible de domaines croisés : {0}{1} - - -openToolTip=Cliquez pour ouvrir la carte globale -closeToolTip=Cliquez pour fermer la carte globale - - -layerListLabel=Extras... -basemap=Fond de carte - - -aboutLabel=A propos de -searchPrompt=Entrer l’adresse -searchResultTitleLabel=Emplacement -noResultsFoundLabel=Aucun résultat trouvé - - -fullExtentLabel=Vue générale -panDownLabel=Déplacer vers le bas -panLeftLabel=Déplacer vers la gauche -panRightLabel=Déplacer vers la droite -panUpLabel=Déplacer vers le haut -previousExtentLabel=Cadrage précédent -nextExtentLabel=Cadrage suivant -panLabel=Déplacer -zoomInLabel=Zoom avant -zoomOutLabel=Zoom arrière - - - - - - -addTextLabel=Ajouter du texte -drawPointLabel=Dessiner un point -drawLineLabel=Dessiner une ligne -drawFreehandLineLabel=Dessiner une ligne à main levée -drawPolygonLabel=Dessiner un polygone -drawFreehandPolygonLabel=Dessiner un polygone à main levée -drawRectangleLabel=Dessiner un rectangle -drawMapExtentLabel=Dessiner l’étendue de carte -drawCircleLabel=Dessiner un cercle -drawEllipseLabel=Dessiner une ellipse -drawClearLabel=Effacer les dessins - -markerStyleCircle=Cercle -markerStyleCross=Croix -markerStyleDiamond=Losange -markerStyleSquare=Carré -markerStyleTriangle=Triangle -markerStyleX=X - -textFont1=Arial -textFont2=Courier New -textFont3=Broadway -textFont4=Comic Sans MS -textFont5=Algerian -textFont6=Verdana - -lineStyleSolid=Solide -lineStyleDash=Tiret -lineStyleDot=Point -lineStyleDashDot=Tiret-point -lineStyleDashDotDot=Tiret-point-point - -fillStyleSolid=Solide -fillStyleBackwardDiagonal=Diagonale vers l’arrière -fillStyleCross=Croix -fillStyleForwardDiagonal=Diagonale vers l’avant -fillStyleHorizontal=Horizontal -fillStyleVertical=Vertical - - - -markerAlphaLabel=Alpha -markerColorLabel=Couleur du symbole ponctuel -markerSizeLabel=Taille -markerStyleLabel=Style -markerOutlineColorLabel=Couleur du contour -markerOutlineWidthLabel=Largeur -textLabel=Texte -textColorLabel=Couleur -textFontLabel=Police -textSizeLabel=Taille -textBoldLabel=G -textBoldTooltip=Gras -textItalicLabel=I -textItalicTooltip=Italique -textUnderlineLabel=S -textUnderlineTooltip=Souligné -lineAlphaLabel=Alpha -lineColorLabel=Couleur de ligne -lineStyleLabel=Style -lineWidthLabel=Largeur -fillAlphaLabel=Alpha -fillColorLabel=Couleur de remplissage -fillStyleLabel=Style -fillOutlineColorLabel=Couleur du contour -fillOutlineWidthLabel=Largeur - - - - -showMeasurementsLabel=Afficher les mesures -distanceUnitsLabel=Unités de distance -areaUnitsLabel=Unités de surface -areaLabel=Surface : -perimeterLabel=Périmètre : -lengthLabel=Longueur : - - -bookmarksLabel=Géosignets -addbookmarksLabel=Ajouter un géosignet -addLabel=Ajouter l’étendue courante sous forme de géosignet appelé -bookmarkSubmitLabel=Ajouter un géosignet -bookmarkMissingNameLabel=Entrez le nom du géosignet. -deleteBookmarkTooltip=Supprimer le géosignet - - -descLabel=Extraire les données et télécharger le fichier zip -step1Label=1. Sélectionnez la surface -dataCurrentExtentLabel=1. Les données vont être extraites de l’étendue courante. -step2Label=2. Sélectionnez les couches à extraire -step3Label=3. Sélectionnez le format de fichier -step4Label=4. Sélectionnez le format raster -step5Label=5. Référence spatiale -extractButtonLabel=Extraire -step1ErrorLabel=Sélectionnez la zone qui vous intéresse. -step2ErrorLabel=Sélectionnez les couches à extraire. -emptyResultsLabel=La tâche est terminée, mais elle n’a renvoyé aucun résultat. -saveDataFileLabel=Le fichier de données a été créé. Voulez-vous l’enregistrer ? - - -attributesLabel=Attributs -attachmentsLabel=Pièces jointes -relatedRecordsLabel=Enregistrements liés -featureLayerOutOfScaleText=Cette couche d’entité se trouve en dehors de la plage d’échelle -showAttachmentsText=Pièces jointes -showRelatedRecordsText=Enregistrements liés -showAttributesText=Revenir en arrière -selectTemplateText=Sélectionnez le modèle pour créer l’entité -noEditableLayersText=Aucune couche pouvant être mise à jour. -noCreateCapabilityLayersText=Aucune des couches ne dispose de fonctions de création -layerNotSupportingAttachmentsText=Cette couche ne prend pas en charge les pièces jointes -noAttachmentsText=Aucune pièce jointe -chooseFileText=Choisir un fichier à joindre -attachmentSubmitLabel=Envoyer -attachmentCancelLabel=Annuler -singleAttachmentText=L’entité possède {0} pièce jointe -multipleAttachmentsText=L’entité possède {0} pièces jointes - - -layerListTitle=Visibilité des couches - - -locateSubmitLabel=Localiser -addressLabel=Adresse -coordinatesLabel=Coordonnées -addressTitle=Saisissez l’adresse -coordinatesTitle=Saisissez les coordonnées -xLabel=Longitude (X) -yLabel=Latitude (Y) -locationsLabel=Emplacements trouvés : -bingCulture=fr-FR -requiredFields=Champs requis : -requiredField=Champ requis : -deleteResultTooltip=Supprimer le résultat -resultScoreText=Score : -bingResultConfidenceText=Confiance : - - -printSubmitLabel=Imprimer -printTitle= -printSubtitle= -printCopyright= -printTitleLabel=Titre -printSubtitleLabel=Sous-titre -printCopyrightLabel=Copyright -printAuthorLabel=Auteur -printLayoutTemplatesLabel=Modèles de mise en forme -printFormatsLabel=Formats -printScaleLabel=Utiliser cette échelle - - -filterTitleBarTooltip=Filtrer les résultats -showallTitleBarTooltip=Tout afficher -filterButtonLabel=Filtre -clearButtonLabel=Tout afficher -featuresFoundLabel=Entités trouvées : {0} - - -drivingDirectionLabel=Trajets -routeSubmitLabel=Obtenir la feuille de route -moveUpTooltip=Déplacer vers le haut -moveDownTooltip=Déplacer vers le bas -addLocationTooltip=cliquez sur la carte pour ajouter un emplacement -optionsLabel=Options -bestSequenceLabel=Trouver la meilleure séquence -milesLabel=Miles -metricLabel=Km -changeRouteSymbolLabel=Modifier le symbole d’itinéraire -editRouteLabel=Modifier l’itinéraire - - -graphicalTitleBarTooltip=Sélectionner des entités -textTitleBarTooltip=Sélectionner par attribut -graphicalsearchLabel=Sélectionner les entités par -textsearchLabel=Sélectionner par attribut -layerLabel=Rechercher dans la couche -nolayerLabel=Aucune couche de recherche n’est définie. -searchSubmitLabel=Rechercher -selectionLabel=Entités sélectionnées : - - -latitudeLabel=Latitude -longitudeLabel=Longitude - - -gpSubmitLabel=Envoyer -inputLabel=Entrée -helpLabel=Aide -outputLabel=Sortie -copyToClipboard=Copy to Clipboard -unsupportedInputType={0} l’entrée n’est pas prise en charge -currentExtentWillBeUsedAsInput=L’étendue courante sera utilisée en entrée. - - -zoomLabel=Zoom sur - - -helloContent=Modifiez ce texte dans le fichier de configuration. - - -widgetIDWidgetLabelTemplate=ID de widget : {0}, intitulé de widget : {1} -widgetIDWidgetStateTemplate=ID de widget : {0}, état du widget : {1} -itemLabelWidgetIDItemIDTemplate={0} ID de widget : {1} - - -layerSelectionLabel=Sélectionner une couche -drawToolMenuLabel=Sélectionner un outil de dessin -selectLabel=Sélectionner -noLayersLabel=Aucune couche -noChartDataToDisplayLabel=Aucune données de graphique à afficher + + +contextMenuText=A propos d’ArcGIS Viewer for Flex... +aboutText=Cette application utilise ArcGIS Viewer for Flex version 3.1.\nDate de la version 2012-12-12. +aboutLearnMoreBtn=En savoir plus +aboutCloseBtn=Fermer + + + +close=Fermer +minimize=Réduire + + +locateExampleValueX=2.2945 +locateExampleValueY=48.8583 + + +clearLabel=Effacer +deleteLabel=Supprimer +loadingLabel=Chargement… +okLabel=OK +errorLabel=Erreur +problemLabel=Problème +noFeatures=Aucune entité n’a été trouvée. +resultsLabel=Résultats +saveLabel=Enregistrer + + +unitsFeet=Feet +unitsFeetAbbr=ft +unitsKilometers=Kilometers +unitsKilometersAbbr=km +unitsMeters=Meters +unitsMetersAbbr=m +unitsMiles=Miles +unitsMilesAbbr=mi +unitsYards=Yards +unitsYardsAbbr=yd + +unitsAcres=Acres +unitsAcresAbbr=ac +unitsHectares=Hectares +unitsHectaresAbbr=ha +unitsSquareFeet=Square feet +unitsSquareFeetAbbr=sq ft +unitsSquareKilometers=Square kilometers +unitsSquareKilometersAbbr=sq km +unitsSquareMeters=Square meters +unitsSquareMetersAbbr=sq m +unitsSquareMiles=Square miles +unitsSquareMilesAbbr=sq mi +unitsSquareYards=Square yards +unitsSquareYardsAbbr=sq yd + + +tocMapLayerZoomToLabel=Zoom sur +tocMapLayerTransparencyLabel=Transparence +tocMapLayerOpaqueLabel=Opaque +tocMapLayerTransparentLabel=Transparent +tocMapLayerMoveUpLabel=Déplacer vers le haut +tocMapLayerMoveDownLabel=Déplacer vers le bas +tocMapLayerRemoveLabel=Supprimer +tocMapLayerDescriptionLabel=Description +tocMapLayerDownloadLabel=Télécharger + + +incorrectLayerTypeText=Le type de couche {0} n’est pas pris en charge. Utilisez plutôt les types "arcims", "bing", "dynamic", "feature", "georss", "image", "kml", "osm", "tiled", "wms" ou "wmts". + + +missingConfigFileText={0} est introuvable +httpResponseStatus=Etat de la réponse http : {0} +faultCode=Code d’erreur : {0} +faultInfo=Informations sur l’erreur : {0} +faultDetail=Détails de l’erreur : {0} + + +parseConfigErrorText=Un problème est survenu lors de l’analyse du fichier de configuration {0} +standalonePlayerExternalInterfaceErrorText=Des erreurs se sont produites. ExternalInterface ne fonctionne pas dans un lecteur autonome. +layerFailedToLoad:La couche {0} n’a pas été chargée : {1} +couldNotFetchBasemapData=Impossible de récupérer les données du fond de carte :\n{0} +couldNotConnectToPortal=Impossible de se connecter au portail. +couldNotQueryPortal=Impossible d’interroger le portail. +couldNotQueryPortalItems=Impossible d’interroger les éléments de portail. +serverMissingCrossDomain=Il manque un fichier crossdomain sur le serveur ArcGIS +serviceIsInaccessible=Le service n’existe pas ou est inaccessible. +unauthorizedAccess=Vous n’êtes pas autorisé à accéder à ce service. +unknownErrorCause=Cause de l’erreur inconnue. +resourceAccessDenied=Vous n’êtes pas autorisé à accéder à cette ressource. +signInAborted=Abandon de la connexion. +invalidWidgetId=ID de widget erroné : {0} +printTaskExecutionError=Erreur lors de l’exécution de la tâche d’impression :\n\n{0} +gpServiceConnectionError=Impossible de se connecter au GP Service :\n{0}\n\n{1}\n{2} +locatorServiceConnectionError=Impossible de se connecter au Locator Service :\n{0}\n\n{1}\n{2} +singleLineGeocodingNotSupportedError=Le service de localisateur ne prend pas en charge le géocodage sur une seule ligne. +rssFeedParsingError=Un problème est survenu lors de l’analyse de la source RSS. {0} +httpResponseNotXMLError=La réponse HTTP n’est pas au format XML. +unknownRSSFeedTypeError=Impossible de déterminer le type de source RSS. +initializationError=Un problème est survenu lors de l’initialisation : {0} +unableToDetermineGPExecutionType=Impossible de déterminer le type d’exécution du géotraitement : +projectionError=Erreur de projection de la géométrie : {0} +cannotRunTaskExecutionTypeUnknownError=Impossible d’exécuter la tâche : type d’exécution inconnu. +layerDataRetrievalError=Impossible d’extraire les données de la couche. +couldNotDeleteFeature=Impossible de supprimer l’entité +couldNotUpdateFeatureError=Impossible de mettre à jour l’entité, rétablissement de l’ancienne valeur + + +configFileCrossDomain=Problème possible de domaines croisés : {0}{1} + + +openToolTip=Cliquez pour ouvrir la carte globale +closeToolTip=Cliquez pour fermer la carte globale + + +layerListLabel=Extras... +basemap=Fond de carte + + +aboutLabel=A propos de +searchPrompt=Entrer l’adresse +searchResultTitleLabel=Emplacement +noResultsFoundLabel=Aucun résultat trouvé + + +fullExtentLabel=Vue générale +panDownLabel=Déplacer vers le bas +panLeftLabel=Déplacer vers la gauche +panRightLabel=Déplacer vers la droite +panUpLabel=Déplacer vers le haut +previousExtentLabel=Cadrage précédent +nextExtentLabel=Cadrage suivant +panLabel=Déplacer +zoomInLabel=Zoom avant +zoomOutLabel=Zoom arrière + + + + + + +addTextLabel=Ajouter du texte +drawPointLabel=Dessiner un point +drawLineLabel=Dessiner une ligne +drawFreehandLineLabel=Dessiner une ligne à main levée +drawPolygonLabel=Dessiner un polygone +drawFreehandPolygonLabel=Dessiner un polygone à main levée +drawRectangleLabel=Dessiner un rectangle +drawMapExtentLabel=Dessiner l’étendue de carte +drawCircleLabel=Dessiner un cercle +drawEllipseLabel=Dessiner une ellipse +drawClearLabel=Effacer les dessins + +markerStyleCircle=Cercle +markerStyleCross=Croix +markerStyleDiamond=Losange +markerStyleSquare=Carré +markerStyleTriangle=Triangle +markerStyleX=X + +textFont1=Arial +textFont2=Courier New +textFont3=Broadway +textFont4=Comic Sans MS +textFont5=Algerian +textFont6=Verdana + +lineStyleSolid=Solide +lineStyleDash=Tiret +lineStyleDot=Point +lineStyleDashDot=Tiret-point +lineStyleDashDotDot=Tiret-point-point + +fillStyleSolid=Solide +fillStyleBackwardDiagonal=Diagonale vers l’arrière +fillStyleCross=Croix +fillStyleForwardDiagonal=Diagonale vers l’avant +fillStyleHorizontal=Horizontal +fillStyleVertical=Vertical + + + +markerAlphaLabel=Alpha +markerColorLabel=Couleur du symbole ponctuel +markerSizeLabel=Taille +markerStyleLabel=Style +markerOutlineColorLabel=Couleur du contour +markerOutlineWidthLabel=Largeur +textLabel=Texte +textColorLabel=Couleur +textFontLabel=Police +textSizeLabel=Taille +textBoldLabel=G +textBoldTooltip=Gras +textItalicLabel=I +textItalicTooltip=Italique +textUnderlineLabel=S +textUnderlineTooltip=Souligné +lineAlphaLabel=Alpha +lineColorLabel=Couleur de ligne +lineStyleLabel=Style +lineWidthLabel=Largeur +fillAlphaLabel=Alpha +fillColorLabel=Couleur de remplissage +fillStyleLabel=Style +fillOutlineColorLabel=Couleur du contour +fillOutlineWidthLabel=Largeur + + + + +showMeasurementsLabel=Afficher les mesures +distanceUnitsLabel=Unités de distance +areaUnitsLabel=Unités de surface +areaLabel=Surface : +perimeterLabel=Périmètre : +lengthLabel=Longueur : + + +bookmarksLabel=Géosignets +addbookmarksLabel=Ajouter un géosignet +addLabel=Ajouter l’étendue courante sous forme de géosignet appelé +bookmarkSubmitLabel=Ajouter un géosignet +bookmarkMissingNameLabel=Entrez le nom du géosignet. +deleteBookmarkTooltip=Supprimer le géosignet + + +descLabel=Extraire les données et télécharger le fichier zip +step1Label=1. Sélectionnez la surface +dataCurrentExtentLabel=1. Les données vont être extraites de l’étendue courante. +step2Label=2. Sélectionnez les couches à extraire +step3Label=3. Sélectionnez le format de fichier +step4Label=4. Sélectionnez le format raster +step5Label=5. Référence spatiale +extractButtonLabel=Extraire +step1ErrorLabel=Sélectionnez la zone qui vous intéresse. +step2ErrorLabel=Sélectionnez les couches à extraire. +emptyResultsLabel=La tâche est terminée, mais elle n’a renvoyé aucun résultat. +saveDataFileLabel=Le fichier de données a été créé. Voulez-vous l’enregistrer ? + + +attributesLabel=Attributs +attachmentsLabel=Pièces jointes +relatedRecordsLabel=Enregistrements liés +featureLayerOutOfScaleText=Cette couche d’entité se trouve en dehors de la plage d’échelle +showAttachmentsText=Pièces jointes +showRelatedRecordsText=Enregistrements liés +showAttributesText=Revenir en arrière +selectTemplateText=Sélectionnez le modèle pour créer l’entité +noEditableLayersText=Aucune couche pouvant être mise à jour. +noCreateCapabilityLayersText=Aucune des couches ne dispose de fonctions de création +layerNotSupportingAttachmentsText=Cette couche ne prend pas en charge les pièces jointes +noAttachmentsText=Aucune pièce jointe +chooseFileText=Choisir un fichier à joindre +attachmentSubmitLabel=Envoyer +attachmentCancelLabel=Annuler +singleAttachmentText=L’entité possède {0} pièce jointe +multipleAttachmentsText=L’entité possède {0} pièces jointes + + +layerListTitle=Visibilité des couches + + +locateSubmitLabel=Localiser +addressLabel=Adresse +coordinatesLabel=Coordonnées +addressTitle=Saisissez l’adresse +coordinatesTitle=Saisissez les coordonnées +xLabel=Longitude (X) +yLabel=Latitude (Y) +locationsLabel=Emplacements trouvés : +bingCulture=fr-FR +requiredFields=Champs requis : +requiredField=Champ requis : +deleteResultTooltip=Supprimer le résultat +resultScoreText=Score : +bingResultConfidenceText=Confiance : + + +printSubmitLabel=Imprimer +printTitle= +printSubtitle= +printCopyright= +printTitleLabel=Titre +printSubtitleLabel=Sous-titre +printCopyrightLabel=Copyright +printAuthorLabel=Auteur +printLayoutTemplatesLabel=Modèles de mise en forme +printFormatsLabel=Formats +printScaleLabel=Utiliser cette échelle + + +filterTitleBarTooltip=Filtrer les résultats +showallTitleBarTooltip=Tout afficher +filterButtonLabel=Filtre +clearButtonLabel=Tout afficher +featuresFoundLabel=Entités trouvées : {0} + + +drivingDirectionLabel=Trajets +routeSubmitLabel=Obtenir la feuille de route +moveUpTooltip=Déplacer vers le haut +moveDownTooltip=Déplacer vers le bas +addLocationTooltip=cliquez sur la carte pour ajouter un emplacement +optionsLabel=Options +bestSequenceLabel=Trouver la meilleure séquence +milesLabel=Miles +metricLabel=Km +changeRouteSymbolLabel=Modifier le symbole d’itinéraire +editRouteLabel=Modifier l’itinéraire + + +graphicalTitleBarTooltip=Sélectionner des entités +textTitleBarTooltip=Sélectionner par attribut +graphicalsearchLabel=Sélectionner les entités par +textsearchLabel=Sélectionner par attribut +layerLabel=Rechercher dans la couche +nolayerLabel=Aucune couche de recherche n’est définie. +searchSubmitLabel=Rechercher +selectionLabel=Entités sélectionnées : + + +latitudeLabel=Latitude +longitudeLabel=Longitude + + +gpSubmitLabel=Envoyer +inputLabel=Entrée +helpLabel=Aide +outputLabel=Sortie +copyToClipboard=Copy to Clipboard +unsupportedInputType={0} l’entrée n’est pas prise en charge +currentExtentWillBeUsedAsInput=L’étendue courante sera utilisée en entrée. + + +zoomLabel=Zoom sur + + +helloContent=Modifiez ce texte dans le fichier de configuration. + + +widgetIDWidgetLabelTemplate=ID de widget : {0}, intitulé de widget : {1} +widgetIDWidgetStateTemplate=ID de widget : {0}, état du widget : {1} +itemLabelWidgetIDItemIDTemplate={0} ID de widget : {1} + + +layerSelectionLabel=Sélectionner une couche +drawToolMenuLabel=Sélectionner un outil de dessin +selectLabel=Sélectionner +noLayersLabel=Aucune couche +noChartDataToDisplayLabel=Aucune données de graphique à afficher featureLayerNotVisibleText=la couche d’entités n’est pas visible ou se trouve hors de la plage d’échelle \ No newline at end of file diff --git a/locale/it_IT/ViewerStrings.properties b/locale/it_IT/ViewerStrings.properties index 310276b..83c93a4 100644 --- a/locale/it_IT/ViewerStrings.properties +++ b/locale/it_IT/ViewerStrings.properties @@ -1,350 +1,350 @@ - - -contextMenuText=Informazioni su ArcGIS Viewer for Flex... -aboutText=Questa applicazione utilizza ArcGIS Viewer for Flex versione 3.1.\nData build 2012-12-12. -aboutLearnMoreBtn=Ulteriori informazioni -aboutCloseBtn=Chiudi - - - -close=Chiudi -minimize=Riduci a icona - - -locateExampleValueX=12.4832 -locateExampleValueY=41.9060 - - -clearLabel=Cancella -deleteLabel=Elimina -loadingLabel=Caricamento in corso... -okLabel=OK -errorLabel=Errore -problemLabel=Problema -noFeatures=Nessuna feature trovata. -resultsLabel=Risultati -saveLabel=Salva - - -unitsFeet=Piedi -unitsFeetAbbr=ft -unitsKilometers=Chilometri -unitsKilometersAbbr=km -unitsMeters=Metri -unitsMetersAbbr=m -unitsMiles=Miglia -unitsMilesAbbr=mi -unitsYards=Iarde -unitsYardsAbbr=yd - -unitsAcres=Acri -unitsAcresAbbr=ac -unitsHectares=Ettari -unitsHectaresAbbr=ha -unitsSquareFeet=Piedi quadrati -unitsSquareFeetAbbr=ft² -unitsSquareKilometers=Chilometri quadrati -unitsSquareKilometersAbbr=km² -unitsSquareMeters=Metri quadrati -unitsSquareMetersAbbr=m² -unitsSquareMiles=Miglia quadrate -unitsSquareMilesAbbr=mi² -unitsSquareYards=Iarde quadrate -unitsSquareYardsAbbr=yd² - - -tocMapLayerZoomToLabel=Zoom a -tocMapLayerTransparencyLabel=Trasparenza -tocMapLayerOpaqueLabel=Opaco -tocMapLayerTransparentLabel=Trasparente -tocMapLayerMoveUpLabel=Sposta su -tocMapLayerMoveDownLabel=Sposta giù -tocMapLayerRemoveLabel=Rimuovi -tocMapLayerDescriptionLabel=Descrizione -tocMapLayerDownloadLabel=Scarica - - -incorrectLayerTypeText={0} non è un tipo di layer supportato. Usare "arcims", "bing", "csv", "dynamic", "feature", "georss", "image", "kml", "osm", "tiled", "wms" o "wmts" . - - -missingConfigFileText=Impossibile trovare {0} -httpResponseStatus=Stato risposta http: {0} -faultCode=Codice di errore: {0} -faultInfo=Info errore: {0} -faultDetail=Dettagli errore: {0} - - -parseConfigErrorText=Problema durante l´analisi del file di configurazione {0} -standalonePlayerExternalInterfaceErrorText=Si è verificato un errore. ExternalInterface non funziona nel lettore autonomo. -layerFailedToLoad:Impossibile caricare il layer {0}: {1} -couldNotFetchBasemapData=Impossibile recuperare i dati della mappa di base:\n{0} -couldNotConnectToPortal=Impossibile connettersi al Portale. -couldNotQueryPortal=Impossibile interrogare il Portale. -couldNotQueryPortalItems=Impossibile interrogare gli elementi del Portale. -serverMissingCrossDomain=File crossdomain mancante in Server GIS. -serviceIsInaccessible=Servizio non esistente o inaccessibile. -unauthorizedAccess=Non si dispone delle autorizzazioni per accedere al servizio. -unknownErrorCause=Causa dell´errore sconosciuta. -resourceAccessDenied=Non si dispone delle autorizzazioni per accedere alla risorsa. -signInAborted=Accesso annullato. -invalidWidgetId=widgetId non valido: {0} -printTaskExecutionError=Errore durante l´esecuzione dell´attività di stampa:\n\n{0} -gpServiceConnectionError=Impossibile connettersi a Servizio GP:\n{0}\n\n{1}\n{2} -locatorServiceConnectionError=Impossibile connettersi a Servizio localizzatore:\n{0}\n\n{1}\n{2} -singleLineGeocodingNotSupportedError=Il servizio localizzatore non supporta la geocodifica a riga singola. -rssFeedParsingError=Problema durante l´analisi del feed RSS. {0} -httpResponseNotXMLError=La risposta HTTP non è XML. -unknownRSSFeedTypeError=Impossibile determinare il tipo di feed RSS. -initializationError=Problema durante l´inizializzazione di: {0} -unableToDetermineGPExecutionType=Impossibile determinare il tipo di esecuzione per il geoprocessing: -projectionError=Errore durante la proiezione della geometria: {0} -cannotRunTaskExecutionTypeUnknownError=Impossibile eseguire l´attività: tipo di esecuzione sconosciuto. -layerDataRetrievalError=Impossibile recuperare i dati del layer. -couldNotDeleteFeature=Impossibile eliminare la feature -couldNotUpdateFeatureError=Impossibile aggiornare la feature. Verrà ripristinato il vecchio valore. - - -configFileCrossDomain=Possibile problema di crossdomain: {0}{1} - - -openToolTip=Fare clic per aprire la mappa d´insieme -closeToolTip=Fare clic per chiudere la mappa d´insieme - - -layerListLabel=Altro... -basemap=Mappa di base - - -aboutLabel=Informazioni su -searchPrompt=Immetti indirizzo -searchResultTitleLabel=Località -noResultsFoundLabel=Nessun risultato trovato - - -fullExtentLabel=Estensione completa -panDownLabel=Scorri verso il basso -panLeftLabel=Scorri a sinistra -panRightLabel=Scorri a destra -panUpLabel=Scorri verso l´alto -previousExtentLabel=Limiti precedenti -nextExtentLabel=Limiti successivi -panLabel=Scorri -zoomInLabel=Zoom avanti -zoomOutLabel=Zoom indietro - - - - - - -addTextLabel=Aggiungi testo -drawPointLabel=Disegna punto -drawLineLabel=Disegna linea -drawFreehandLineLabel=Disegna linea a mano libera -drawPolygonLabel=Disegna poligono -drawFreehandPolygonLabel=Disegna poligono a mano libera -drawRectangleLabel=Disegna rettangolo -drawMapExtentLabel=Disegna estensione mappa -drawCircleLabel=Disegna cerchio -drawEllipseLabel=Disegna ellisse -drawClearLabel=Cancella disegni - -markerStyleCircle=Cerchio -markerStyleCross=Croce -markerStyleDiamond=Rombo -markerStyleSquare=Quadrato -markerStyleTriangle=Triangolo -markerStyleX=X - -textFont1=Arial -textFont2=Courier New -textFont3=Broadway -textFont4=Comic Sans MS -textFont5=Algerian -textFont6=Verdana - -lineStyleSolid=Tinta unita -lineStyleDash=Tratteggiata -lineStyleDot=Punteggiata -lineStyleDashDot=Trattino Punto -lineStyleDashDotDot=Trattino Punto Punto - -fillStyleSolid=Tinta unita -fillStyleBackwardDiagonal=Diagonale all´indietro -fillStyleCross=Croce -fillStyleForwardDiagonal=Diagonale in avanti -fillStyleHorizontal=Orizzontale -fillStyleVertical=Verticale - - - -markerAlphaLabel=Alfa -markerColorLabel=Colore marcatore -markerSizeLabel=Dimensioni -markerStyleLabel=Stile -markerOutlineColorLabel=Colore contorno -markerOutlineWidthLabel=Larghezza -textLabel=Testo -textColorLabel=Colore -textFontLabel=Carattere -textSizeLabel=Dimensioni -textBoldLabel=G -textBoldTooltip=Grassetto -textItalicLabel=C -textItalicTooltip=Corsivo -textUnderlineLabel=S -textUnderlineTooltip=Sottolineato -lineAlphaLabel=Alfa -lineColorLabel=Colore linea -lineStyleLabel=Stile -lineWidthLabel=Larghezza -fillAlphaLabel=Alfa -fillColorLabel=Colore riempimento -fillStyleLabel=Stile -fillOutlineColorLabel=Colore contorno -fillOutlineWidthLabel=Larghezza - - - - -showMeasurementsLabel=Mostra misurazioni -distanceUnitsLabel=Unità di lunghezza -areaUnitsLabel=Unità di superficie -areaLabel=Area: -perimeterLabel=Perimetro: -lengthLabel=Lunghezza: - - -bookmarksLabel=Segnalibri -addbookmarksLabel=Aggiungi segnalibro -addLabel=Aggiungi limiti correnti come segnalibro denominato -bookmarkSubmitLabel=Aggiungi segnalibro -bookmarkMissingNameLabel=Specificare un nome per il segnalibro. -deleteBookmarkTooltip=Elimina segnalibro - - -descLabel=Estrai i dati e scarica il file zip -step1Label=1. Selezionare l´area -dataCurrentExtentLabel=1. I dati verranno estratti dall'estensione corrente. -step2Label=2. Selezionare i layer da estrarre -step3Label=3. Selezionare il formato di file -step4Label=4. Selezionare il formato raster -step5Label=5. Riferimento spaziale -extractButtonLabel=Estrai -step1ErrorLabel=Selezionare un´area di interesse. -step2ErrorLabel=Selezionare i layer da estrarre. -emptyResultsLabel=Attività completata, ma non sono stati restituiti risultati. -saveDataFileLabel=File di dati creato. Salvarlo? - - -attributesLabel=Attributi -attachmentsLabel=Allegati -relatedRecordsLabel=Record correlati -featureLayerOutOfScaleText=Feature layer non compreso nell´intervallo della scala -showAttachmentsText=Allegati -showRelatedRecordsText=Record correlati -showAttributesText=Indietro -selectTemplateText=Selezionare il modello per creare la feature -noEditableLayersText=Nessun layer modificabile. -noCreateCapabilityLayersText=Nessuno dei layer supporta la funzionalità di creazione -layerNotSupportingAttachmentsText=Questo layer non supporta gli allegati -noAttachmentsText=Nessun allegato -chooseFileText=Scegliere un file da allegare -attachmentSubmitLabel=Invia -attachmentCancelLabel=Annulla -singleAttachmentText=La feature ha {0} allegato -multipleAttachmentsText=La feature ha {0} allegati - - -layerListTitle=Visibilità layer - - -locateSubmitLabel=Individua -addressLabel=Indirizzo -coordinatesLabel=Coordinate -addressTitle=Specificare l´indirizzo -coordinatesTitle=Specificare le coordinate -xLabel=Longitudine (X) -yLabel=Latitudine (Y) -locationsLabel=Posizioni trovate: -bingCulture=it-IT -requiredFields=Campi obbligatori: -requiredField=Campo obbligatorio: -deleteResultTooltip=Elimina risultato -resultScoreText=Punteggio: -bingResultConfidenceText=Sicurezza: - - -printSubmitLabel=Stampa -printTitle= -printSubtitle= -printCopyright= -printTitleLabel=Titolo -printSubtitleLabel=Sottotitolo -printCopyrightLabel=Copyright -printAuthorLabel=Autore -printLayoutTemplatesLabel=Modelli di layout -printFormatsLabel=Formati -printScaleLabel=Utilizza questa scala - - -filterTitleBarTooltip=Filtra risultati -showallTitleBarTooltip=Mostra tutto -filterButtonLabel=Filtra -clearButtonLabel=Mostra tutto -featuresFoundLabel=Feature trovate: {0} - - -drivingDirectionLabel=Direzioni di guida -routeSubmitLabel=Ottieni direzioni -moveUpTooltip=Sposta su -moveDownTooltip=Sposta giù -addLocationTooltip=Fare clic sulla mappa per aggiungere una posizione -optionsLabel=Opzioni -bestSequenceLabel=Trova sequenza migliore -milesLabel=Miglia -metricLabel=Km -changeRouteSymbolLabel=Modifica simbolo percorso -editRouteLabel=Modifica percorso - - -graphicalTitleBarTooltip=Seleziona feature -textTitleBarTooltip=Seleziona per attributo -graphicalsearchLabel=Seleziona feature per -textsearchLabel=Seleziona per attributo -layerLabel=Layer di ricerca -nolayerLabel=Nessun layer di ricerca definito. -searchSubmitLabel=Cerca -selectionLabel=Feature selezionate: - - -latitudeLabel=Latitudine -longitudeLabel=Longitudine - - -gpSubmitLabel=Invia -inputLabel=Input -helpLabel=Guida -outputLabel=Output -copyToClipboard=Copia negli Appunti -unsupportedInputType=Input {0} non supportato -currentExtentWillBeUsedAsInput=Come valore di input verrà utilizzata l´estensione corrente. - - -zoomLabel=Zoom a - - -helloContent=Modifica questo testo in file di configurazione. - - -widgetIDWidgetLabelTemplate=ID widget: {0}. Etichetta widget: {1} -widgetIDWidgetStateTemplate=ID widget: {0}. Stato widget: {1} -itemLabelWidgetIDItemIDTemplate=ID widget {0}: {1} - - -layerSelectionLabel=Seleziona layer -drawToolMenuLabel=Seleziona strumento disegno -selectLabel=Seleziona -noLayersLabel=Nessun layer -noChartDataToDisplayLabel=Non sono disponibili dati grafico da visualizzare + + +contextMenuText=Informazioni su ArcGIS Viewer for Flex... +aboutText=Questa applicazione utilizza ArcGIS Viewer for Flex versione 3.1.\nData build 2012-12-12. +aboutLearnMoreBtn=Ulteriori informazioni +aboutCloseBtn=Chiudi + + + +close=Chiudi +minimize=Riduci a icona + + +locateExampleValueX=12.4832 +locateExampleValueY=41.9060 + + +clearLabel=Cancella +deleteLabel=Elimina +loadingLabel=Caricamento in corso... +okLabel=OK +errorLabel=Errore +problemLabel=Problema +noFeatures=Nessuna feature trovata. +resultsLabel=Risultati +saveLabel=Salva + + +unitsFeet=Piedi +unitsFeetAbbr=ft +unitsKilometers=Chilometri +unitsKilometersAbbr=km +unitsMeters=Metri +unitsMetersAbbr=m +unitsMiles=Miglia +unitsMilesAbbr=mi +unitsYards=Iarde +unitsYardsAbbr=yd + +unitsAcres=Acri +unitsAcresAbbr=ac +unitsHectares=Ettari +unitsHectaresAbbr=ha +unitsSquareFeet=Piedi quadrati +unitsSquareFeetAbbr=ft² +unitsSquareKilometers=Chilometri quadrati +unitsSquareKilometersAbbr=km² +unitsSquareMeters=Metri quadrati +unitsSquareMetersAbbr=m² +unitsSquareMiles=Miglia quadrate +unitsSquareMilesAbbr=mi² +unitsSquareYards=Iarde quadrate +unitsSquareYardsAbbr=yd² + + +tocMapLayerZoomToLabel=Zoom a +tocMapLayerTransparencyLabel=Trasparenza +tocMapLayerOpaqueLabel=Opaco +tocMapLayerTransparentLabel=Trasparente +tocMapLayerMoveUpLabel=Sposta su +tocMapLayerMoveDownLabel=Sposta giù +tocMapLayerRemoveLabel=Rimuovi +tocMapLayerDescriptionLabel=Descrizione +tocMapLayerDownloadLabel=Scarica + + +incorrectLayerTypeText={0} non è un tipo di layer supportato. Usare "arcims", "bing", "csv", "dynamic", "feature", "georss", "image", "kml", "osm", "tiled", "wms" o "wmts" . + + +missingConfigFileText=Impossibile trovare {0} +httpResponseStatus=Stato risposta http: {0} +faultCode=Codice di errore: {0} +faultInfo=Info errore: {0} +faultDetail=Dettagli errore: {0} + + +parseConfigErrorText=Problema durante l´analisi del file di configurazione {0} +standalonePlayerExternalInterfaceErrorText=Si è verificato un errore. ExternalInterface non funziona nel lettore autonomo. +layerFailedToLoad:Impossibile caricare il layer {0}: {1} +couldNotFetchBasemapData=Impossibile recuperare i dati della mappa di base:\n{0} +couldNotConnectToPortal=Impossibile connettersi al Portale. +couldNotQueryPortal=Impossibile interrogare il Portale. +couldNotQueryPortalItems=Impossibile interrogare gli elementi del Portale. +serverMissingCrossDomain=File crossdomain mancante in Server GIS. +serviceIsInaccessible=Servizio non esistente o inaccessibile. +unauthorizedAccess=Non si dispone delle autorizzazioni per accedere al servizio. +unknownErrorCause=Causa dell´errore sconosciuta. +resourceAccessDenied=Non si dispone delle autorizzazioni per accedere alla risorsa. +signInAborted=Accesso annullato. +invalidWidgetId=widgetId non valido: {0} +printTaskExecutionError=Errore durante l´esecuzione dell´attività di stampa:\n\n{0} +gpServiceConnectionError=Impossibile connettersi a Servizio GP:\n{0}\n\n{1}\n{2} +locatorServiceConnectionError=Impossibile connettersi a Servizio localizzatore:\n{0}\n\n{1}\n{2} +singleLineGeocodingNotSupportedError=Il servizio localizzatore non supporta la geocodifica a riga singola. +rssFeedParsingError=Problema durante l´analisi del feed RSS. {0} +httpResponseNotXMLError=La risposta HTTP non è XML. +unknownRSSFeedTypeError=Impossibile determinare il tipo di feed RSS. +initializationError=Problema durante l´inizializzazione di: {0} +unableToDetermineGPExecutionType=Impossibile determinare il tipo di esecuzione per il geoprocessing: +projectionError=Errore durante la proiezione della geometria: {0} +cannotRunTaskExecutionTypeUnknownError=Impossibile eseguire l´attività: tipo di esecuzione sconosciuto. +layerDataRetrievalError=Impossibile recuperare i dati del layer. +couldNotDeleteFeature=Impossibile eliminare la feature +couldNotUpdateFeatureError=Impossibile aggiornare la feature. Verrà ripristinato il vecchio valore. + + +configFileCrossDomain=Possibile problema di crossdomain: {0}{1} + + +openToolTip=Fare clic per aprire la mappa d´insieme +closeToolTip=Fare clic per chiudere la mappa d´insieme + + +layerListLabel=Altro... +basemap=Mappa di base + + +aboutLabel=Informazioni su +searchPrompt=Immetti indirizzo +searchResultTitleLabel=Località +noResultsFoundLabel=Nessun risultato trovato + + +fullExtentLabel=Estensione completa +panDownLabel=Scorri verso il basso +panLeftLabel=Scorri a sinistra +panRightLabel=Scorri a destra +panUpLabel=Scorri verso l´alto +previousExtentLabel=Limiti precedenti +nextExtentLabel=Limiti successivi +panLabel=Scorri +zoomInLabel=Zoom avanti +zoomOutLabel=Zoom indietro + + + + + + +addTextLabel=Aggiungi testo +drawPointLabel=Disegna punto +drawLineLabel=Disegna linea +drawFreehandLineLabel=Disegna linea a mano libera +drawPolygonLabel=Disegna poligono +drawFreehandPolygonLabel=Disegna poligono a mano libera +drawRectangleLabel=Disegna rettangolo +drawMapExtentLabel=Disegna estensione mappa +drawCircleLabel=Disegna cerchio +drawEllipseLabel=Disegna ellisse +drawClearLabel=Cancella disegni + +markerStyleCircle=Cerchio +markerStyleCross=Croce +markerStyleDiamond=Rombo +markerStyleSquare=Quadrato +markerStyleTriangle=Triangolo +markerStyleX=X + +textFont1=Arial +textFont2=Courier New +textFont3=Broadway +textFont4=Comic Sans MS +textFont5=Algerian +textFont6=Verdana + +lineStyleSolid=Tinta unita +lineStyleDash=Tratteggiata +lineStyleDot=Punteggiata +lineStyleDashDot=Trattino Punto +lineStyleDashDotDot=Trattino Punto Punto + +fillStyleSolid=Tinta unita +fillStyleBackwardDiagonal=Diagonale all´indietro +fillStyleCross=Croce +fillStyleForwardDiagonal=Diagonale in avanti +fillStyleHorizontal=Orizzontale +fillStyleVertical=Verticale + + + +markerAlphaLabel=Alfa +markerColorLabel=Colore marcatore +markerSizeLabel=Dimensioni +markerStyleLabel=Stile +markerOutlineColorLabel=Colore contorno +markerOutlineWidthLabel=Larghezza +textLabel=Testo +textColorLabel=Colore +textFontLabel=Carattere +textSizeLabel=Dimensioni +textBoldLabel=G +textBoldTooltip=Grassetto +textItalicLabel=C +textItalicTooltip=Corsivo +textUnderlineLabel=S +textUnderlineTooltip=Sottolineato +lineAlphaLabel=Alfa +lineColorLabel=Colore linea +lineStyleLabel=Stile +lineWidthLabel=Larghezza +fillAlphaLabel=Alfa +fillColorLabel=Colore riempimento +fillStyleLabel=Stile +fillOutlineColorLabel=Colore contorno +fillOutlineWidthLabel=Larghezza + + + + +showMeasurementsLabel=Mostra misurazioni +distanceUnitsLabel=Unità di lunghezza +areaUnitsLabel=Unità di superficie +areaLabel=Area: +perimeterLabel=Perimetro: +lengthLabel=Lunghezza: + + +bookmarksLabel=Segnalibri +addbookmarksLabel=Aggiungi segnalibro +addLabel=Aggiungi limiti correnti come segnalibro denominato +bookmarkSubmitLabel=Aggiungi segnalibro +bookmarkMissingNameLabel=Specificare un nome per il segnalibro. +deleteBookmarkTooltip=Elimina segnalibro + + +descLabel=Estrai i dati e scarica il file zip +step1Label=1. Selezionare l´area +dataCurrentExtentLabel=1. I dati verranno estratti dall'estensione corrente. +step2Label=2. Selezionare i layer da estrarre +step3Label=3. Selezionare il formato di file +step4Label=4. Selezionare il formato raster +step5Label=5. Riferimento spaziale +extractButtonLabel=Estrai +step1ErrorLabel=Selezionare un´area di interesse. +step2ErrorLabel=Selezionare i layer da estrarre. +emptyResultsLabel=Attività completata, ma non sono stati restituiti risultati. +saveDataFileLabel=File di dati creato. Salvarlo? + + +attributesLabel=Attributi +attachmentsLabel=Allegati +relatedRecordsLabel=Record correlati +featureLayerOutOfScaleText=Feature layer non compreso nell´intervallo della scala +showAttachmentsText=Allegati +showRelatedRecordsText=Record correlati +showAttributesText=Indietro +selectTemplateText=Selezionare il modello per creare la feature +noEditableLayersText=Nessun layer modificabile. +noCreateCapabilityLayersText=Nessuno dei layer supporta la funzionalità di creazione +layerNotSupportingAttachmentsText=Questo layer non supporta gli allegati +noAttachmentsText=Nessun allegato +chooseFileText=Scegliere un file da allegare +attachmentSubmitLabel=Invia +attachmentCancelLabel=Annulla +singleAttachmentText=La feature ha {0} allegato +multipleAttachmentsText=La feature ha {0} allegati + + +layerListTitle=Visibilità layer + + +locateSubmitLabel=Individua +addressLabel=Indirizzo +coordinatesLabel=Coordinate +addressTitle=Specificare l´indirizzo +coordinatesTitle=Specificare le coordinate +xLabel=Longitudine (X) +yLabel=Latitudine (Y) +locationsLabel=Posizioni trovate: +bingCulture=it-IT +requiredFields=Campi obbligatori: +requiredField=Campo obbligatorio: +deleteResultTooltip=Elimina risultato +resultScoreText=Punteggio: +bingResultConfidenceText=Sicurezza: + + +printSubmitLabel=Stampa +printTitle= +printSubtitle= +printCopyright= +printTitleLabel=Titolo +printSubtitleLabel=Sottotitolo +printCopyrightLabel=Copyright +printAuthorLabel=Autore +printLayoutTemplatesLabel=Modelli di layout +printFormatsLabel=Formati +printScaleLabel=Utilizza questa scala + + +filterTitleBarTooltip=Filtra risultati +showallTitleBarTooltip=Mostra tutto +filterButtonLabel=Filtra +clearButtonLabel=Mostra tutto +featuresFoundLabel=Feature trovate: {0} + + +drivingDirectionLabel=Direzioni di guida +routeSubmitLabel=Ottieni direzioni +moveUpTooltip=Sposta su +moveDownTooltip=Sposta giù +addLocationTooltip=Fare clic sulla mappa per aggiungere una posizione +optionsLabel=Opzioni +bestSequenceLabel=Trova sequenza migliore +milesLabel=Miglia +metricLabel=Km +changeRouteSymbolLabel=Modifica simbolo percorso +editRouteLabel=Modifica percorso + + +graphicalTitleBarTooltip=Seleziona feature +textTitleBarTooltip=Seleziona per attributo +graphicalsearchLabel=Seleziona feature per +textsearchLabel=Seleziona per attributo +layerLabel=Layer di ricerca +nolayerLabel=Nessun layer di ricerca definito. +searchSubmitLabel=Cerca +selectionLabel=Feature selezionate: + + +latitudeLabel=Latitudine +longitudeLabel=Longitudine + + +gpSubmitLabel=Invia +inputLabel=Input +helpLabel=Guida +outputLabel=Output +copyToClipboard=Copia negli Appunti +unsupportedInputType=Input {0} non supportato +currentExtentWillBeUsedAsInput=Come valore di input verrà utilizzata l´estensione corrente. + + +zoomLabel=Zoom a + + +helloContent=Modifica questo testo in file di configurazione. + + +widgetIDWidgetLabelTemplate=ID widget: {0}. Etichetta widget: {1} +widgetIDWidgetStateTemplate=ID widget: {0}. Stato widget: {1} +itemLabelWidgetIDItemIDTemplate=ID widget {0}: {1} + + +layerSelectionLabel=Seleziona layer +drawToolMenuLabel=Seleziona strumento disegno +selectLabel=Seleziona +noLayersLabel=Nessun layer +noChartDataToDisplayLabel=Non sono disponibili dati grafico da visualizzare featureLayerNotVisibleText=il feature layer non è visibile o non è compreso nell´intervallo della scala \ No newline at end of file diff --git a/locale/ja_JP/ViewerStrings.properties b/locale/ja_JP/ViewerStrings.properties index e75c782..dca8394 100644 --- a/locale/ja_JP/ViewerStrings.properties +++ b/locale/ja_JP/ViewerStrings.properties @@ -1,350 +1,350 @@ - - -contextMenuText=ArcGIS Viewer for Flex について... -aboutText=このアプリケーションには ArcGIS Viewer for Flex version 3.1 が使用されています。\nビルド日付 2012-12-12 -aboutLearnMoreBtn=詳細 -aboutCloseBtn=閉じる - - - -close=閉じる -minimize=最小化 - - -locateExampleValueX=139.7671 -locateExampleValueY=35.6809 - - -clearLabel=消去 -deleteLabel=削除 -loadingLabel=読み込んでいます... -okLabel=OK -errorLabel=エラー -problemLabel=問題 -noFeatures=フィーチャは見つかりませんでした。 -resultsLabel=結果 -saveLabel=保存 - - -unitsFeet=フィート -unitsFeetAbbr=ft -unitsKilometers=キロメートル -unitsKilometersAbbr=km -unitsMeters=メートル -unitsMetersAbbr=m -unitsMiles=マイル -unitsMilesAbbr=mi -unitsYards=ヤード -unitsYardsAbbr=yd - -unitsAcres=エーカー -unitsAcresAbbr=ac -unitsHectares=ヘクタール -unitsHectaresAbbr=ha -unitsSquareFeet=平方フィート -unitsSquareFeetAbbr=sq ft -unitsSquareKilometers=平方キロメートル -unitsSquareKilometersAbbr=sq km -unitsSquareMeters=平方メートル -unitsSquareMetersAbbr=sq m -unitsSquareMiles=平方マイル -unitsSquareMilesAbbr=sq mi -unitsSquareYards=平方ヤード -unitsSquareYardsAbbr=sq yd - - -tocMapLayerZoomToLabel=ズーム -tocMapLayerTransparencyLabel=透過表示 -tocMapLayerOpaqueLabel=不透過 -tocMapLayerTransparentLabel=透過 -tocMapLayerMoveUpLabel=1 つ上へ移動 -tocMapLayerMoveDownLabel=1 つ下へ移動 -tocMapLayerRemoveLabel=削除 -tocMapLayerDescriptionLabel=説明 -tocMapLayerDownloadLabel=ダウンロード - - -incorrectLayerTypeText={0} はサポートされていないレイヤ タイプです。"arcims"、"bing"、"csv"、"dynamic"、"feature"、"georss"、"image"、"kml"、"osm"、"tiled"、"wms"、または "wmts" を代わりに使用してください。 - - -missingConfigFileText={0} が見つかりませんでした -httpResponseStatus=http 応答ステータス: {0} -faultCode=障害コード: {0} -faultInfo=障害の情報: {0} -faultDetail=障害の詳細: {0} - - -parseConfigErrorText=構成ファイルの解析中に問題が発生しました{0} -standalonePlayerExternalInterfaceErrorText=エラーが発生しました。スタンドアロン版プレイヤーでは ExternalInterface は機能しません。 -layerFailedToLoad:{0} レイヤの読み込みに失敗しました: {1} -couldNotFetchBasemapData=ベースマップ データをフェッチできません:\n{0} -couldNotConnectToPortal=Portal に接続できません。 -couldNotQueryPortal=ポータルのクエリができません。 -couldNotQueryPortalItems=ポータル アイテムのクエリができません。 -serverMissingCrossDomain=GIS サーバにクロスドメイン ファイルがありません。 -serviceIsInaccessible=サービスが存在しないか、アクセスできません。 -unauthorizedAccess=このサービスにアクセスする権限がありません。 -unknownErrorCause=原因不明のエラー -resourceAccessDenied=このリソースにアクセスする権限がありません。 -signInAborted=サインインが中断されました。 -invalidWidgetId=無効なウィジェット ID: {0} -printTaskExecutionError=印刷タスクの実行エラー:\n\n{0} -gpServiceConnectionError=ジオプロセシング サービスに接続できません:\n{0}\n\n{1}\n{2} -locatorServiceConnectionError=ロケータ サービスに接続できません:\n{0}\n\n{1}\n{2} -singleLineGeocodingNotSupportedError=ロケータ サービスはシングルライン ジオコーディングをサポートしていません。 -rssFeedParsingError=RSS フィードの解析中にエラーが発生しました。{0} -httpResponseNotXMLError=HTTP 応答が XML ではありません。 -unknownRSSFeedTypeError=RSS フィード タイプを特定できません。 -initializationError=初期化中に問題が発生しました: {0} -unableToDetermineGPExecutionType=ジオプロセッサの実行タイプを特定できません: -projectionError=ジオメトリ投影エラー: {0} -cannotRunTaskExecutionTypeUnknownError=タスクを実行できません: 実行タイプが不明です。 -layerDataRetrievalError=レイヤ データを取得できません。 -couldNotDeleteFeature=フィーチャを削除できません。 -couldNotUpdateFeatureError=フィーチャを更新できません。古い値を復元します。 - - -configFileCrossDomain=考えられるクロスドメインの問題: {0}{1} - - -openToolTip=クリックして概観図を開きます -closeToolTip=クリックして概観図を閉じます - - -layerListLabel=その他... -basemap=ベースマップ - - -aboutLabel=このアプリケーションについて -searchPrompt=住所を入力 -searchResultTitleLabel=場所 -noResultsFoundLabel=結果が見つかりませんでした。 - - -fullExtentLabel=全体表示 -panDownLabel=下へ移動 -panLeftLabel=左へ移動 -panRightLabel=右へ移動 -panUpLabel=上へ移動 -previousExtentLabel=前の範囲 -nextExtentLabel=次の範囲 -panLabel=画面移動 -zoomInLabel=拡大 -zoomOutLabel=縮小 - - - - - - -addTextLabel=テキストの追加 -drawPointLabel=ポイントの描画 -drawLineLabel=ラインの描画 -drawFreehandLineLabel=フリーハンド ラインの描画 -drawPolygonLabel=ポリゴンの描画 -drawFreehandPolygonLabel=フリーハンド ポリゴンの描画 -drawRectangleLabel=四角形の描画 -drawMapExtentLabel=マップ範囲の描画 -drawCircleLabel=円の描画 -drawEllipseLabel=楕円の描画 -drawClearLabel=描画の消去 - -markerStyleCircle=円 -markerStyleCross=格子 -markerStyleDiamond=ひし形 -markerStyleSquare=四角形 -markerStyleTriangle=三角形 -markerStyleX=X - -textFont1=MS Pゴシック -textFont2=MS ゴシック -textFont3=MS 明朝 -textFont4=MS P明朝 -textFont5=MS UI Gothic -textFont6=メイリオ - -lineStyleSolid=塗りつぶし -lineStyleDash=破線 -lineStyleDot=点線 -lineStyleDashDot=1 点鎖線 -lineStyleDashDotDot=2 点鎖線 - -fillStyleSolid=塗りつぶし -fillStyleBackwardDiagonal=右上がり対角線 -fillStyleCross=格子 -fillStyleForwardDiagonal=右下がり対角線 -fillStyleHorizontal=横線 -fillStyleVertical=縦線 - - - -markerAlphaLabel=透過表示 -markerColorLabel=マーカー色 -markerSizeLabel=サイズ -markerStyleLabel=スタイル -markerOutlineColorLabel=アウトライン色 -markerOutlineWidthLabel=幅 -textLabel=テキスト -textColorLabel=色 -textFontLabel=フォント -textSizeLabel=サイズ -textBoldLabel=B -textBoldTooltip=太字 -textItalicLabel=I -textItalicTooltip=斜体 -textUnderlineLabel=U -textUnderlineTooltip=下線 -lineAlphaLabel=透過表示 -lineColorLabel=ライン色 -lineStyleLabel=スタイル -lineWidthLabel=幅 -fillAlphaLabel=透過表示 -fillColorLabel=塗りつぶし色 -fillStyleLabel=スタイル -fillOutlineColorLabel=アウトライン色 -fillOutlineWidthLabel=幅 - - - - -showMeasurementsLabel=計測値の表示 -distanceUnitsLabel=距離単位 -areaUnitsLabel=面積単位 -areaLabel=面積: -perimeterLabel=周長: -lengthLabel=長さ: - - -bookmarksLabel=ブックマーク -addbookmarksLabel=ブックマークの追加 -addLabel=現在の範囲に名前を付けてブックマークとして追加 -bookmarkSubmitLabel=ブックマークの追加 -bookmarkMissingNameLabel=ブックマークの名前を入力してください。 -deleteBookmarkTooltip=ブックマークの削除 - - -descLabel=データの抽出および zip ファイルのダウンロード -step1Label=1. エリアの選択 -dataCurrentExtentLabel=1. データは現在の範囲から抽出されます。 -step2Label=2. 抽出するレイヤの選択 -step3Label=3. ファイル形式の選択 -step4Label=4. ラスタ形式の選択 -step5Label=5. 空間参照 -extractButtonLabel=抽出 -step1ErrorLabel=対象エリアを選択してください。 -step2ErrorLabel=抽出するレイヤを選択してください。 -emptyResultsLabel=タスクは完了しましたが、返される結果がありませんでした。 -saveDataFileLabel=データ ファイルが作成されました。保存しますか? - - -attributesLabel=属性 -attachmentsLabel=添付ファイル -relatedRecordsLabel=関連データ -featureLayerOutOfScaleText=このフィーチャ レイヤは縮尺の範囲外にあります -showAttachmentsText=添付ファイル -showRelatedRecordsText=関連データ -showAttributesText=前の表示範囲に戻る -selectTemplateText=フィーチャを作成するテンプレートの選択 -noEditableLayersText=編集可能なレイヤがありません。 -noCreateCapabilityLayersText=ケーパビリティを作成しているレイヤがありません -layerNotSupportingAttachmentsText=このレイヤは添付ファイルをサポートしていません -noAttachmentsText=添付ファイルはありません -chooseFileText=添付するファイルの選択 -attachmentSubmitLabel=送信 -attachmentCancelLabel=キャンセル -singleAttachmentText=フィーチャには {0} 個の添付ファイルがあります -multipleAttachmentsText=フィーチャには {0} 個の添付ファイルがあります - - -layerListTitle=レイヤの表示設定 - - -locateSubmitLabel=検索 -addressLabel=住所 -coordinatesLabel=座標 -addressTitle=住所を入力 -coordinatesTitle=座標を入力 -xLabel=経度 (X) -yLabel=緯度 (Y) -locationsLabel=場所が見つかりました: -bingCulture=ja-JP -requiredFields=必須フィールド: -requiredField=必須フィールド: -deleteResultTooltip=結果の削除 -resultScoreText=スコア: -bingResultConfidenceText=信頼度: - - -printSubmitLabel=印刷 -printTitle= -printSubtitle= -printCopyright= -printTitleLabel=タイトル -printSubtitleLabel=サブタイトル -printCopyrightLabel=著作権 -printAuthorLabel=作成者 -printLayoutTemplatesLabel=レイアウト テンプレート -printFormatsLabel=フォーマット -printScaleLabel=この縮尺を使用 - - -filterTitleBarTooltip=結果のフィルタ -showallTitleBarTooltip=すべて表示 -filterButtonLabel=フィルタ -clearButtonLabel=すべて表示 -featuresFoundLabel=フィーチャが見つかりました: {0} - - -drivingDirectionLabel=ルート案内 -routeSubmitLabel=ルート案内の取得 -moveUpTooltip=1 つ上へ移動 -moveDownTooltip=1 つ下へ移動 -addLocationTooltip=マップ上をクリックしてロケーションを追加 -optionsLabel=オプション -bestSequenceLabel=最適な順序を検索 -milesLabel=マイル -metricLabel=キロメートル -changeRouteSymbolLabel=ルート シンボルの変更 -editRouteLabel=ルートの編集 - - -graphicalTitleBarTooltip=フィーチャ選択 -textTitleBarTooltip=属性検索 -graphicalsearchLabel=フィーチャの選択 -textsearchLabel=属性検索 -layerLabel=検索するレイヤ -nolayerLabel=検索するレイヤが定義されていません。 -searchSubmitLabel=検索 -selectionLabel=選択されたフィーチャ: - - -latitudeLabel=緯度 -longitudeLabel=経度 - - -gpSubmitLabel=送信 -inputLabel=入力 -helpLabel=ヘルプ -outputLabel=出力 -copyToClipboard=クリップボードにコピー -unsupportedInputType={0} の入力はサポートされていません -currentExtentWillBeUsedAsInput=現在の範囲が入力として使用されます。 - - -zoomLabel=ズーム - - -helloContent=構成ファイル内のこのテキストを変更します。 - - -widgetIDWidgetLabelTemplate=ウィジェット ID: {0}、ウィジェットのラベル: {1} -widgetIDWidgetStateTemplate=ウィジェット ID: {0}、ウィジェットの状態: {1} -itemLabelWidgetIDItemIDTemplate={0} ウィジェット ID: {1} - - -layerSelectionLabel=レイヤを選択 -drawToolMenuLabel=描画ツールを選択 -selectLabel=選択 -noLayersLabel=レイヤがありません -noChartDataToDisplayLabel=表示するチャート データがありません + + +contextMenuText=ArcGIS Viewer for Flex について... +aboutText=このアプリケーションには ArcGIS Viewer for Flex version 3.1 が使用されています。\nビルド日付 2012-12-12 +aboutLearnMoreBtn=詳細 +aboutCloseBtn=閉じる + + + +close=閉じる +minimize=最小化 + + +locateExampleValueX=139.7671 +locateExampleValueY=35.6809 + + +clearLabel=消去 +deleteLabel=削除 +loadingLabel=読み込んでいます... +okLabel=OK +errorLabel=エラー +problemLabel=問題 +noFeatures=フィーチャは見つかりませんでした。 +resultsLabel=結果 +saveLabel=保存 + + +unitsFeet=フィート +unitsFeetAbbr=ft +unitsKilometers=キロメートル +unitsKilometersAbbr=km +unitsMeters=メートル +unitsMetersAbbr=m +unitsMiles=マイル +unitsMilesAbbr=mi +unitsYards=ヤード +unitsYardsAbbr=yd + +unitsAcres=エーカー +unitsAcresAbbr=ac +unitsHectares=ヘクタール +unitsHectaresAbbr=ha +unitsSquareFeet=平方フィート +unitsSquareFeetAbbr=sq ft +unitsSquareKilometers=平方キロメートル +unitsSquareKilometersAbbr=sq km +unitsSquareMeters=平方メートル +unitsSquareMetersAbbr=sq m +unitsSquareMiles=平方マイル +unitsSquareMilesAbbr=sq mi +unitsSquareYards=平方ヤード +unitsSquareYardsAbbr=sq yd + + +tocMapLayerZoomToLabel=ズーム +tocMapLayerTransparencyLabel=透過表示 +tocMapLayerOpaqueLabel=不透過 +tocMapLayerTransparentLabel=透過 +tocMapLayerMoveUpLabel=1 つ上へ移動 +tocMapLayerMoveDownLabel=1 つ下へ移動 +tocMapLayerRemoveLabel=削除 +tocMapLayerDescriptionLabel=説明 +tocMapLayerDownloadLabel=ダウンロード + + +incorrectLayerTypeText={0} はサポートされていないレイヤ タイプです。"arcims"、"bing"、"csv"、"dynamic"、"feature"、"georss"、"image"、"kml"、"osm"、"tiled"、"wms"、または "wmts" を代わりに使用してください。 + + +missingConfigFileText={0} が見つかりませんでした +httpResponseStatus=http 応答ステータス: {0} +faultCode=障害コード: {0} +faultInfo=障害の情報: {0} +faultDetail=障害の詳細: {0} + + +parseConfigErrorText=構成ファイルの解析中に問題が発生しました{0} +standalonePlayerExternalInterfaceErrorText=エラーが発生しました。スタンドアロン版プレイヤーでは ExternalInterface は機能しません。 +layerFailedToLoad:{0} レイヤの読み込みに失敗しました: {1} +couldNotFetchBasemapData=ベースマップ データをフェッチできません:\n{0} +couldNotConnectToPortal=Portal に接続できません。 +couldNotQueryPortal=ポータルのクエリができません。 +couldNotQueryPortalItems=ポータル アイテムのクエリができません。 +serverMissingCrossDomain=GIS サーバにクロスドメイン ファイルがありません。 +serviceIsInaccessible=サービスが存在しないか、アクセスできません。 +unauthorizedAccess=このサービスにアクセスする権限がありません。 +unknownErrorCause=原因不明のエラー +resourceAccessDenied=このリソースにアクセスする権限がありません。 +signInAborted=サインインが中断されました。 +invalidWidgetId=無効なウィジェット ID: {0} +printTaskExecutionError=印刷タスクの実行エラー:\n\n{0} +gpServiceConnectionError=ジオプロセシング サービスに接続できません:\n{0}\n\n{1}\n{2} +locatorServiceConnectionError=ロケータ サービスに接続できません:\n{0}\n\n{1}\n{2} +singleLineGeocodingNotSupportedError=ロケータ サービスはシングルライン ジオコーディングをサポートしていません。 +rssFeedParsingError=RSS フィードの解析中にエラーが発生しました。{0} +httpResponseNotXMLError=HTTP 応答が XML ではありません。 +unknownRSSFeedTypeError=RSS フィード タイプを特定できません。 +initializationError=初期化中に問題が発生しました: {0} +unableToDetermineGPExecutionType=ジオプロセッサの実行タイプを特定できません: +projectionError=ジオメトリ投影エラー: {0} +cannotRunTaskExecutionTypeUnknownError=タスクを実行できません: 実行タイプが不明です。 +layerDataRetrievalError=レイヤ データを取得できません。 +couldNotDeleteFeature=フィーチャを削除できません。 +couldNotUpdateFeatureError=フィーチャを更新できません。古い値を復元します。 + + +configFileCrossDomain=考えられるクロスドメインの問題: {0}{1} + + +openToolTip=クリックして概観図を開きます +closeToolTip=クリックして概観図を閉じます + + +layerListLabel=その他... +basemap=ベースマップ + + +aboutLabel=このアプリケーションについて +searchPrompt=住所を入力 +searchResultTitleLabel=場所 +noResultsFoundLabel=結果が見つかりませんでした。 + + +fullExtentLabel=全体表示 +panDownLabel=下へ移動 +panLeftLabel=左へ移動 +panRightLabel=右へ移動 +panUpLabel=上へ移動 +previousExtentLabel=前の範囲 +nextExtentLabel=次の範囲 +panLabel=画面移動 +zoomInLabel=拡大 +zoomOutLabel=縮小 + + + + + + +addTextLabel=テキストの追加 +drawPointLabel=ポイントの描画 +drawLineLabel=ラインの描画 +drawFreehandLineLabel=フリーハンド ラインの描画 +drawPolygonLabel=ポリゴンの描画 +drawFreehandPolygonLabel=フリーハンド ポリゴンの描画 +drawRectangleLabel=四角形の描画 +drawMapExtentLabel=マップ範囲の描画 +drawCircleLabel=円の描画 +drawEllipseLabel=楕円の描画 +drawClearLabel=描画の消去 + +markerStyleCircle=円 +markerStyleCross=格子 +markerStyleDiamond=ひし形 +markerStyleSquare=四角形 +markerStyleTriangle=三角形 +markerStyleX=X + +textFont1=MS Pゴシック +textFont2=MS ゴシック +textFont3=MS 明朝 +textFont4=MS P明朝 +textFont5=MS UI Gothic +textFont6=メイリオ + +lineStyleSolid=塗りつぶし +lineStyleDash=破線 +lineStyleDot=点線 +lineStyleDashDot=1 点鎖線 +lineStyleDashDotDot=2 点鎖線 + +fillStyleSolid=塗りつぶし +fillStyleBackwardDiagonal=右上がり対角線 +fillStyleCross=格子 +fillStyleForwardDiagonal=右下がり対角線 +fillStyleHorizontal=横線 +fillStyleVertical=縦線 + + + +markerAlphaLabel=透過表示 +markerColorLabel=マーカー色 +markerSizeLabel=サイズ +markerStyleLabel=スタイル +markerOutlineColorLabel=アウトライン色 +markerOutlineWidthLabel=幅 +textLabel=テキスト +textColorLabel=色 +textFontLabel=フォント +textSizeLabel=サイズ +textBoldLabel=B +textBoldTooltip=太字 +textItalicLabel=I +textItalicTooltip=斜体 +textUnderlineLabel=U +textUnderlineTooltip=下線 +lineAlphaLabel=透過表示 +lineColorLabel=ライン色 +lineStyleLabel=スタイル +lineWidthLabel=幅 +fillAlphaLabel=透過表示 +fillColorLabel=塗りつぶし色 +fillStyleLabel=スタイル +fillOutlineColorLabel=アウトライン色 +fillOutlineWidthLabel=幅 + + + + +showMeasurementsLabel=計測値の表示 +distanceUnitsLabel=距離単位 +areaUnitsLabel=面積単位 +areaLabel=面積: +perimeterLabel=周長: +lengthLabel=長さ: + + +bookmarksLabel=ブックマーク +addbookmarksLabel=ブックマークの追加 +addLabel=現在の範囲に名前を付けてブックマークとして追加 +bookmarkSubmitLabel=ブックマークの追加 +bookmarkMissingNameLabel=ブックマークの名前を入力してください。 +deleteBookmarkTooltip=ブックマークの削除 + + +descLabel=データの抽出および zip ファイルのダウンロード +step1Label=1. エリアの選択 +dataCurrentExtentLabel=1. データは現在の範囲から抽出されます。 +step2Label=2. 抽出するレイヤの選択 +step3Label=3. ファイル形式の選択 +step4Label=4. ラスタ形式の選択 +step5Label=5. 空間参照 +extractButtonLabel=抽出 +step1ErrorLabel=対象エリアを選択してください。 +step2ErrorLabel=抽出するレイヤを選択してください。 +emptyResultsLabel=タスクは完了しましたが、返される結果がありませんでした。 +saveDataFileLabel=データ ファイルが作成されました。保存しますか? + + +attributesLabel=属性 +attachmentsLabel=添付ファイル +relatedRecordsLabel=関連データ +featureLayerOutOfScaleText=このフィーチャ レイヤは縮尺の範囲外にあります +showAttachmentsText=添付ファイル +showRelatedRecordsText=関連データ +showAttributesText=前の表示範囲に戻る +selectTemplateText=フィーチャを作成するテンプレートの選択 +noEditableLayersText=編集可能なレイヤがありません。 +noCreateCapabilityLayersText=ケーパビリティを作成しているレイヤがありません +layerNotSupportingAttachmentsText=このレイヤは添付ファイルをサポートしていません +noAttachmentsText=添付ファイルはありません +chooseFileText=添付するファイルの選択 +attachmentSubmitLabel=送信 +attachmentCancelLabel=キャンセル +singleAttachmentText=フィーチャには {0} 個の添付ファイルがあります +multipleAttachmentsText=フィーチャには {0} 個の添付ファイルがあります + + +layerListTitle=レイヤの表示設定 + + +locateSubmitLabel=検索 +addressLabel=住所 +coordinatesLabel=座標 +addressTitle=住所を入力 +coordinatesTitle=座標を入力 +xLabel=経度 (X) +yLabel=緯度 (Y) +locationsLabel=場所が見つかりました: +bingCulture=ja-JP +requiredFields=必須フィールド: +requiredField=必須フィールド: +deleteResultTooltip=結果の削除 +resultScoreText=スコア: +bingResultConfidenceText=信頼度: + + +printSubmitLabel=印刷 +printTitle= +printSubtitle= +printCopyright= +printTitleLabel=タイトル +printSubtitleLabel=サブタイトル +printCopyrightLabel=著作権 +printAuthorLabel=作成者 +printLayoutTemplatesLabel=レイアウト テンプレート +printFormatsLabel=フォーマット +printScaleLabel=この縮尺を使用 + + +filterTitleBarTooltip=結果のフィルタ +showallTitleBarTooltip=すべて表示 +filterButtonLabel=フィルタ +clearButtonLabel=すべて表示 +featuresFoundLabel=フィーチャが見つかりました: {0} + + +drivingDirectionLabel=ルート案内 +routeSubmitLabel=ルート案内の取得 +moveUpTooltip=1 つ上へ移動 +moveDownTooltip=1 つ下へ移動 +addLocationTooltip=マップ上をクリックしてロケーションを追加 +optionsLabel=オプション +bestSequenceLabel=最適な順序を検索 +milesLabel=マイル +metricLabel=キロメートル +changeRouteSymbolLabel=ルート シンボルの変更 +editRouteLabel=ルートの編集 + + +graphicalTitleBarTooltip=フィーチャ選択 +textTitleBarTooltip=属性検索 +graphicalsearchLabel=フィーチャの選択 +textsearchLabel=属性検索 +layerLabel=検索するレイヤ +nolayerLabel=検索するレイヤが定義されていません。 +searchSubmitLabel=検索 +selectionLabel=選択されたフィーチャ: + + +latitudeLabel=緯度 +longitudeLabel=経度 + + +gpSubmitLabel=送信 +inputLabel=入力 +helpLabel=ヘルプ +outputLabel=出力 +copyToClipboard=クリップボードにコピー +unsupportedInputType={0} の入力はサポートされていません +currentExtentWillBeUsedAsInput=現在の範囲が入力として使用されます。 + + +zoomLabel=ズーム + + +helloContent=構成ファイル内のこのテキストを変更します。 + + +widgetIDWidgetLabelTemplate=ウィジェット ID: {0}、ウィジェットのラベル: {1} +widgetIDWidgetStateTemplate=ウィジェット ID: {0}、ウィジェットの状態: {1} +itemLabelWidgetIDItemIDTemplate={0} ウィジェット ID: {1} + + +layerSelectionLabel=レイヤを選択 +drawToolMenuLabel=描画ツールを選択 +selectLabel=選択 +noLayersLabel=レイヤがありません +noChartDataToDisplayLabel=表示するチャート データがありません featureLayerNotVisibleText=フィーチャ レイヤは非表示か、縮尺の範囲外にあります \ No newline at end of file diff --git a/locale/ko_KR/ViewerStrings.properties b/locale/ko_KR/ViewerStrings.properties index 259ba22..d7b576c 100644 --- a/locale/ko_KR/ViewerStrings.properties +++ b/locale/ko_KR/ViewerStrings.properties @@ -1,350 +1,350 @@ - - -contextMenuText=ArcGIS Viewer for Flex 정보... -aboutText=이 응용프로그램은 ArcGIS Viewer for Flex 버전 3.1을(를) 사용 중입니다.\n빌드 날짜 2012-12-12. -aboutLearnMoreBtn=자세히 보기 -aboutCloseBtn=닫기 - - - -close=닫기 -minimize=최소화 - - -locateExampleValueX=126.9779 -locateExampleValueY=37.5665 - - -clearLabel=지우기 -deleteLabel=삭제 -loadingLabel=로드 중... -okLabel=확인 -errorLabel=오류 -problemLabel=문제 -noFeatures=피처가 없습니다. -resultsLabel=결과 -saveLabel=저장 - - -unitsFeet=피트 -unitsFeetAbbr=ft -unitsKilometers=킬로미터 -unitsKilometersAbbr=km -unitsMeters=미터 -unitsMetersAbbr=m -unitsMiles=마일 -unitsMilesAbbr=mi -unitsYards=야드 -unitsYardsAbbr=yd - -unitsAcres=에이커 -unitsAcresAbbr=ac -unitsHectares=헥타르 -unitsHectaresAbbr=ha -unitsSquareFeet=제곱피트 -unitsSquareFeetAbbr=sq ft -unitsSquareKilometers=제곱킬로미터 -unitsSquareKilometersAbbr=sq km -unitsSquareMeters=제곱미터 -unitsSquareMetersAbbr=sq m -unitsSquareMiles=제곱마일 -unitsSquareMilesAbbr=sq mi -unitsSquareYards=제곱야드 -unitsSquareYardsAbbr=sq yd - - -tocMapLayerZoomToLabel=확대 -tocMapLayerTransparencyLabel=투명도 -tocMapLayerOpaqueLabel=불투명 -tocMapLayerTransparentLabel=투명 -tocMapLayerMoveUpLabel=위로 이동 -tocMapLayerMoveDownLabel=아래로 이동 -tocMapLayerRemoveLabel=제거 -tocMapLayerDescriptionLabel=설명 -tocMapLayerDownloadLabel=다운로드 - - -incorrectLayerTypeText={0}은(는) 지원되는 레이어 유형이 아닙니다. 대신 "arcims", "bing", "csv", "dynamic", "feature", "georss", "image", "kml", "osm", "tiled", "wms" 또는 "wmts"를 사용하세요. - - -missingConfigFileText={0}을(를) 찾을 수 없습니다. -httpResponseStatus=http 응답 상태: {0} -faultCode=오류 코드: {0} -faultInfo=오류 정보: {0} -faultDetail=오류 설명: {0} - - -parseConfigErrorText=구성 파일 {0}을(를) 구문 분석하는 동안 문제가 발생했습니다. -standalonePlayerExternalInterfaceErrorText=일부 오류가 발생했습니다. ExternalInterface는 Standalone 플레이어에서 작동하지 않습니다. -layerFailedToLoad:{0} 레이어를 로드하지 못했습니다. {1} -couldNotFetchBasemapData=베이스맵 데이터를 가져올 수 없습니다.\n{0} -couldNotConnectToPortal=포털에 연결할 수 없습니다. -couldNotQueryPortal=포털을 쿼리할 수 없습니다. -couldNotQueryPortalItems=포털 항목을 쿼리할 수 없습니다. -serverMissingCrossDomain=GIS Server에 교차 도메인 파일이 없습니다. -serviceIsInaccessible=서비스가 없거나 서비스에 액세스할 수 없습니다. -unauthorizedAccess=이 서비스에 액세스할 수 있는 권한이 없습니다. -unknownErrorCause=알 수 없는 오류 원인입니다. -resourceAccessDenied=이 리소스에 액세스할 수 있는 권한이 없습니다. -signInAborted=로그인이 중단되었습니다. -invalidWidgetId=잘못된 위젯 ID입니다. {0} -printTaskExecutionError=인쇄 작업을 실행하는 도중 오류가 발생했습니다.\n\n{0} -gpServiceConnectionError=GP 서비스에 연결할 수 없습니다.\n{0}\n\n{1}\n{2} -locatorServiceConnectionError=로케이터 서비스에 연결할 수 없습니다.\n{0}\n\n{1}\n{2} -singleLineGeocodingNotSupportedError=로케이터 서비스에서는 한 줄 지오코딩을 지원하지 않습니다. -rssFeedParsingError=RSS 피드를 구문 분석하는 도중 문제가 발생했습니다. {0} -httpResponseNotXMLError=HTTP 응답이 XML이 아닙니다. -unknownRSSFeedTypeError=RSS 피드 유형을 확인할 수 없습니다. -initializationError=초기화하는 도중 문제가 발생했습니다. {0} -unableToDetermineGPExecutionType=지오프로세싱 실행 유형을 확인할 수 없습니다. -projectionError=지오메트리를 반영하는 도중 오류가 발생했습니다. {0} -cannotRunTaskExecutionTypeUnknownError=작업을 실행할 수 없습니다. 알 수 없는 실행 유형입니다. -layerDataRetrievalError=레이어 데이터를 검색할 수 없습니다. -couldNotDeleteFeature=피처를 삭제할 수 없음 -couldNotUpdateFeatureError=피처를 업데이트할 수 없습니다. 이전 값을 복원합니다. - - -configFileCrossDomain=가능한 교차 도메인 문제: {0}{1} - - -openToolTip=개요 맵을 열려면 클릭 -closeToolTip=개요 맵을 닫으려면 클릭 - - -layerListLabel=추가... -basemap=베이스맵 - - -aboutLabel=정보 -searchPrompt=주소 입력 -searchResultTitleLabel=위치 -noResultsFoundLabel=결과가 없습니다. - - -fullExtentLabel=전체 범위 -panDownLabel=아래로 이동 -panLeftLabel=왼쪽으로 이동 -panRightLabel=오른쪽으로 이동 -panUpLabel=위로 이동 -previousExtentLabel=이전 범위 -nextExtentLabel=다음 범위 -panLabel=이동 -zoomInLabel=확대 -zoomOutLabel=축소 - - - - - - -addTextLabel=텍스트 추가 -drawPointLabel=포인트 그리기 -drawLineLabel=라인 그리기 -drawFreehandLineLabel=자유 곡선 그리기 -drawPolygonLabel=폴리곤 그리기 -drawFreehandPolygonLabel=자유 폴리곤 그리기 -drawRectangleLabel=사각형 그리기 -drawMapExtentLabel=맵 범위 그리기 -drawCircleLabel=원 그리기 -drawEllipseLabel=타원 그리기 -drawClearLabel=그림 지우기 - -markerStyleCircle=원 -markerStyleCross=십자형 -markerStyleDiamond=다이아몬드 -markerStyleSquare=사각형 -markerStyleTriangle=삼각형 -markerStyleX=X - -textFont1=Arial -textFont2=Courier New -textFont3=Broadway -textFont4=Comic Sans MS -textFont5=Algerian -textFont6=Verdana - -lineStyleSolid=단선 -lineStyleDash=파선 -lineStyleDot=점선 -lineStyleDashDot=일점 쇄선 -lineStyleDashDotDot=이점 쇄선 - -fillStyleSolid=단선 -fillStyleBackwardDiagonal=역방향 대각선 -fillStyleCross=십자형 -fillStyleForwardDiagonal=정방향 대각선 -fillStyleHorizontal=수평 -fillStyleVertical=수직 - - - -markerAlphaLabel=알파 -markerColorLabel=표식 색상 -markerSizeLabel=크기 -markerStyleLabel=스타일 -markerOutlineColorLabel=윤곽선 색상 -markerOutlineWidthLabel=너비 -textLabel=텍스트 -textColorLabel=색상 -textFontLabel=글꼴 -textSizeLabel=크기 -textBoldLabel=B -textBoldTooltip=굵게 -textItalicLabel=I -textItalicTooltip=기울임꼴 -textUnderlineLabel=U -textUnderlineTooltip=밑줄 -lineAlphaLabel=알파 -lineColorLabel=선 색 -lineStyleLabel=스타일 -lineWidthLabel=너비 -fillAlphaLabel=알파 -fillColorLabel=채우기 색 -fillStyleLabel=스타일 -fillOutlineColorLabel=윤곽선 색상 -fillOutlineWidthLabel=너비 - - - - -showMeasurementsLabel=단위 표시 -distanceUnitsLabel=거리 단위 -areaUnitsLabel=면적 단위 -areaLabel=영역: -perimeterLabel=둘레: -lengthLabel=길이: - - -bookmarksLabel=책갈피 -addbookmarksLabel=책갈피 추가 -addLabel=현재 범위를 지정된 책갈피로 추가 -bookmarkSubmitLabel=책갈피 추가 -bookmarkMissingNameLabel=책갈피 이름을 입력하세요. -deleteBookmarkTooltip=북마크 삭제 - - -descLabel=데이터 추출 및 zip 파일 다운로드 -step1Label=1. 영역 선택 -dataCurrentExtentLabel=1. 현재 범위에서 데이터가 추출됩니다. -step2Label=2. 추출할 레이어 선택 -step3Label=3. 파일 형식 선택 -step4Label=4. 래스터 형식 선택 -step5Label=5. 공간 참조 -extractButtonLabel=추출 -step1ErrorLabel=원하는 영역을 선택하세요. -step2ErrorLabel=추출할 레이어를 선택하세요. -emptyResultsLabel=작업이 완료되었으나 결과를 반환하지 않았습니다. -saveDataFileLabel=데이터 파일이 생성되었습니다. 저장하시겠습니까? - - -attributesLabel=속성 -attachmentsLabel=첨부 -relatedRecordsLabel=관련 레코드 -featureLayerOutOfScaleText=이 피처 레이어는 배율 범위를 벗어났습니다. -showAttachmentsText=첨부 -showRelatedRecordsText=관련 레코드 -showAttributesText=뒤로 이동 -selectTemplateText=피처를 생성할 템플릿 선택 -noEditableLayersText=편집 가능한 레이어가 없습니다. -noCreateCapabilityLayersText=레이어에 생성 기능 없음 -layerNotSupportingAttachmentsText=이 레이어는 첨부 파일을 지원하지 않습니다. -noAttachmentsText=첨부 파일 없음 -chooseFileText=첨부할 파일 선택 -attachmentSubmitLabel=보고 -attachmentCancelLabel=취소 -singleAttachmentText=피처에 {0} 첨부 파일이 있습니다. -multipleAttachmentsText=피처에 {0} 첨부 파일이 있습니다. - - -layerListTitle=레이어 표시 여부 - - -locateSubmitLabel=항목보기 -addressLabel=주소 -coordinatesLabel=좌표 -addressTitle=주소 입력 -coordinatesTitle=좌표 입력 -xLabel=경도(X) -yLabel=위도(Y) -locationsLabel=찾은 위치: -bingCulture=ko-KR -requiredFields=필수 필드: -requiredField=필수 필드: -deleteResultTooltip=결과 삭제 -resultScoreText=점수: -bingResultConfidenceText=신뢰도: - - -printSubmitLabel=인쇄 -printTitle= -printSubtitle= -printCopyright= -printTitleLabel=제목 -printSubtitleLabel=부제목 -printCopyrightLabel=저작권 -printAuthorLabel=작성자 -printLayoutTemplatesLabel=레이아웃 템플릿 -printFormatsLabel=형식 -printScaleLabel=이 배율 사용 - - -filterTitleBarTooltip=필터 결과 -showallTitleBarTooltip=모두 표시 -filterButtonLabel=필터 -clearButtonLabel=모두 표시 -featuresFoundLabel=찾은 피처: {0} - - -drivingDirectionLabel=운전 방향 -routeSubmitLabel=방향 가져오기 -moveUpTooltip=위로 이동 -moveDownTooltip=아래로 이동 -addLocationTooltip=맵을 클릭하여 위치 추가 -optionsLabel=옵션 -bestSequenceLabel=최적의 시퀀스 찾기 -milesLabel=마일 -metricLabel=Km -changeRouteSymbolLabel=경로 심볼 변경 -editRouteLabel=경로 편집 - - -graphicalTitleBarTooltip=피처 선택 -textTitleBarTooltip=속성으로 선택 -graphicalsearchLabel=피처 선택 기준 -textsearchLabel=속성으로 선택 -layerLabel=레이어 검색 -nolayerLabel=정의된 검색 레이어가 없습니다. -searchSubmitLabel=검색 -selectionLabel=피처 선택됨: - - -latitudeLabel=위도 -longitudeLabel=경도 - - -gpSubmitLabel=보고 -inputLabel=입력 -helpLabel=도움말 -outputLabel=출력 -copyToClipboard=클립보드로 복사 -unsupportedInputType={0} 입력은 지원되지 않습니다. -currentExtentWillBeUsedAsInput=현재 익스텐트가 입력으로 사용됩니다. - - -zoomLabel=확대 - - -helloContent=구성 파일에서 이 텍스트를 변경합니다. - - -widgetIDWidgetLabelTemplate=위젯 Id: {0}, 위젯 레이블: {1} -widgetIDWidgetStateTemplate=위젯 Id: {0}, 위젯 상태: {1} -itemLabelWidgetIDItemIDTemplate={0} 위젯 ID: {1} - - -layerSelectionLabel=레이어 선택 -drawToolMenuLabel=그리기 도구 선택 -selectLabel=선택 -noLayersLabel=레이어 없음 -noChartDataToDisplayLabel=디스플레이할 차트 데이터 없음 + + +contextMenuText=ArcGIS Viewer for Flex 정보... +aboutText=이 응용프로그램은 ArcGIS Viewer for Flex 버전 3.1을(를) 사용 중입니다.\n빌드 날짜 2012-12-12. +aboutLearnMoreBtn=자세히 보기 +aboutCloseBtn=닫기 + + + +close=닫기 +minimize=최소화 + + +locateExampleValueX=126.9779 +locateExampleValueY=37.5665 + + +clearLabel=지우기 +deleteLabel=삭제 +loadingLabel=로드 중... +okLabel=확인 +errorLabel=오류 +problemLabel=문제 +noFeatures=피처가 없습니다. +resultsLabel=결과 +saveLabel=저장 + + +unitsFeet=피트 +unitsFeetAbbr=ft +unitsKilometers=킬로미터 +unitsKilometersAbbr=km +unitsMeters=미터 +unitsMetersAbbr=m +unitsMiles=마일 +unitsMilesAbbr=mi +unitsYards=야드 +unitsYardsAbbr=yd + +unitsAcres=에이커 +unitsAcresAbbr=ac +unitsHectares=헥타르 +unitsHectaresAbbr=ha +unitsSquareFeet=제곱피트 +unitsSquareFeetAbbr=sq ft +unitsSquareKilometers=제곱킬로미터 +unitsSquareKilometersAbbr=sq km +unitsSquareMeters=제곱미터 +unitsSquareMetersAbbr=sq m +unitsSquareMiles=제곱마일 +unitsSquareMilesAbbr=sq mi +unitsSquareYards=제곱야드 +unitsSquareYardsAbbr=sq yd + + +tocMapLayerZoomToLabel=확대 +tocMapLayerTransparencyLabel=투명도 +tocMapLayerOpaqueLabel=불투명 +tocMapLayerTransparentLabel=투명 +tocMapLayerMoveUpLabel=위로 이동 +tocMapLayerMoveDownLabel=아래로 이동 +tocMapLayerRemoveLabel=제거 +tocMapLayerDescriptionLabel=설명 +tocMapLayerDownloadLabel=다운로드 + + +incorrectLayerTypeText={0}은(는) 지원되는 레이어 유형이 아닙니다. 대신 "arcims", "bing", "csv", "dynamic", "feature", "georss", "image", "kml", "osm", "tiled", "wms" 또는 "wmts"를 사용하세요. + + +missingConfigFileText={0}을(를) 찾을 수 없습니다. +httpResponseStatus=http 응답 상태: {0} +faultCode=오류 코드: {0} +faultInfo=오류 정보: {0} +faultDetail=오류 설명: {0} + + +parseConfigErrorText=구성 파일 {0}을(를) 구문 분석하는 동안 문제가 발생했습니다. +standalonePlayerExternalInterfaceErrorText=일부 오류가 발생했습니다. ExternalInterface는 Standalone 플레이어에서 작동하지 않습니다. +layerFailedToLoad:{0} 레이어를 로드하지 못했습니다. {1} +couldNotFetchBasemapData=베이스맵 데이터를 가져올 수 없습니다.\n{0} +couldNotConnectToPortal=포털에 연결할 수 없습니다. +couldNotQueryPortal=포털을 쿼리할 수 없습니다. +couldNotQueryPortalItems=포털 항목을 쿼리할 수 없습니다. +serverMissingCrossDomain=GIS Server에 교차 도메인 파일이 없습니다. +serviceIsInaccessible=서비스가 없거나 서비스에 액세스할 수 없습니다. +unauthorizedAccess=이 서비스에 액세스할 수 있는 권한이 없습니다. +unknownErrorCause=알 수 없는 오류 원인입니다. +resourceAccessDenied=이 리소스에 액세스할 수 있는 권한이 없습니다. +signInAborted=로그인이 중단되었습니다. +invalidWidgetId=잘못된 위젯 ID입니다. {0} +printTaskExecutionError=인쇄 작업을 실행하는 도중 오류가 발생했습니다.\n\n{0} +gpServiceConnectionError=GP 서비스에 연결할 수 없습니다.\n{0}\n\n{1}\n{2} +locatorServiceConnectionError=로케이터 서비스에 연결할 수 없습니다.\n{0}\n\n{1}\n{2} +singleLineGeocodingNotSupportedError=로케이터 서비스에서는 한 줄 지오코딩을 지원하지 않습니다. +rssFeedParsingError=RSS 피드를 구문 분석하는 도중 문제가 발생했습니다. {0} +httpResponseNotXMLError=HTTP 응답이 XML이 아닙니다. +unknownRSSFeedTypeError=RSS 피드 유형을 확인할 수 없습니다. +initializationError=초기화하는 도중 문제가 발생했습니다. {0} +unableToDetermineGPExecutionType=지오프로세싱 실행 유형을 확인할 수 없습니다. +projectionError=지오메트리를 반영하는 도중 오류가 발생했습니다. {0} +cannotRunTaskExecutionTypeUnknownError=작업을 실행할 수 없습니다. 알 수 없는 실행 유형입니다. +layerDataRetrievalError=레이어 데이터를 검색할 수 없습니다. +couldNotDeleteFeature=피처를 삭제할 수 없음 +couldNotUpdateFeatureError=피처를 업데이트할 수 없습니다. 이전 값을 복원합니다. + + +configFileCrossDomain=가능한 교차 도메인 문제: {0}{1} + + +openToolTip=개요 맵을 열려면 클릭 +closeToolTip=개요 맵을 닫으려면 클릭 + + +layerListLabel=추가... +basemap=베이스맵 + + +aboutLabel=정보 +searchPrompt=주소 입력 +searchResultTitleLabel=위치 +noResultsFoundLabel=결과가 없습니다. + + +fullExtentLabel=전체 범위 +panDownLabel=아래로 이동 +panLeftLabel=왼쪽으로 이동 +panRightLabel=오른쪽으로 이동 +panUpLabel=위로 이동 +previousExtentLabel=이전 범위 +nextExtentLabel=다음 범위 +panLabel=이동 +zoomInLabel=확대 +zoomOutLabel=축소 + + + + + + +addTextLabel=텍스트 추가 +drawPointLabel=포인트 그리기 +drawLineLabel=라인 그리기 +drawFreehandLineLabel=자유 곡선 그리기 +drawPolygonLabel=폴리곤 그리기 +drawFreehandPolygonLabel=자유 폴리곤 그리기 +drawRectangleLabel=사각형 그리기 +drawMapExtentLabel=맵 범위 그리기 +drawCircleLabel=원 그리기 +drawEllipseLabel=타원 그리기 +drawClearLabel=그림 지우기 + +markerStyleCircle=원 +markerStyleCross=십자형 +markerStyleDiamond=다이아몬드 +markerStyleSquare=사각형 +markerStyleTriangle=삼각형 +markerStyleX=X + +textFont1=Arial +textFont2=Courier New +textFont3=Broadway +textFont4=Comic Sans MS +textFont5=Algerian +textFont6=Verdana + +lineStyleSolid=단선 +lineStyleDash=파선 +lineStyleDot=점선 +lineStyleDashDot=일점 쇄선 +lineStyleDashDotDot=이점 쇄선 + +fillStyleSolid=단선 +fillStyleBackwardDiagonal=역방향 대각선 +fillStyleCross=십자형 +fillStyleForwardDiagonal=정방향 대각선 +fillStyleHorizontal=수평 +fillStyleVertical=수직 + + + +markerAlphaLabel=알파 +markerColorLabel=표식 색상 +markerSizeLabel=크기 +markerStyleLabel=스타일 +markerOutlineColorLabel=윤곽선 색상 +markerOutlineWidthLabel=너비 +textLabel=텍스트 +textColorLabel=색상 +textFontLabel=글꼴 +textSizeLabel=크기 +textBoldLabel=B +textBoldTooltip=굵게 +textItalicLabel=I +textItalicTooltip=기울임꼴 +textUnderlineLabel=U +textUnderlineTooltip=밑줄 +lineAlphaLabel=알파 +lineColorLabel=선 색 +lineStyleLabel=스타일 +lineWidthLabel=너비 +fillAlphaLabel=알파 +fillColorLabel=채우기 색 +fillStyleLabel=스타일 +fillOutlineColorLabel=윤곽선 색상 +fillOutlineWidthLabel=너비 + + + + +showMeasurementsLabel=단위 표시 +distanceUnitsLabel=거리 단위 +areaUnitsLabel=면적 단위 +areaLabel=영역: +perimeterLabel=둘레: +lengthLabel=길이: + + +bookmarksLabel=책갈피 +addbookmarksLabel=책갈피 추가 +addLabel=현재 범위를 지정된 책갈피로 추가 +bookmarkSubmitLabel=책갈피 추가 +bookmarkMissingNameLabel=책갈피 이름을 입력하세요. +deleteBookmarkTooltip=북마크 삭제 + + +descLabel=데이터 추출 및 zip 파일 다운로드 +step1Label=1. 영역 선택 +dataCurrentExtentLabel=1. 현재 범위에서 데이터가 추출됩니다. +step2Label=2. 추출할 레이어 선택 +step3Label=3. 파일 형식 선택 +step4Label=4. 래스터 형식 선택 +step5Label=5. 공간 참조 +extractButtonLabel=추출 +step1ErrorLabel=원하는 영역을 선택하세요. +step2ErrorLabel=추출할 레이어를 선택하세요. +emptyResultsLabel=작업이 완료되었으나 결과를 반환하지 않았습니다. +saveDataFileLabel=데이터 파일이 생성되었습니다. 저장하시겠습니까? + + +attributesLabel=속성 +attachmentsLabel=첨부 +relatedRecordsLabel=관련 레코드 +featureLayerOutOfScaleText=이 피처 레이어는 배율 범위를 벗어났습니다. +showAttachmentsText=첨부 +showRelatedRecordsText=관련 레코드 +showAttributesText=뒤로 이동 +selectTemplateText=피처를 생성할 템플릿 선택 +noEditableLayersText=편집 가능한 레이어가 없습니다. +noCreateCapabilityLayersText=레이어에 생성 기능 없음 +layerNotSupportingAttachmentsText=이 레이어는 첨부 파일을 지원하지 않습니다. +noAttachmentsText=첨부 파일 없음 +chooseFileText=첨부할 파일 선택 +attachmentSubmitLabel=보고 +attachmentCancelLabel=취소 +singleAttachmentText=피처에 {0} 첨부 파일이 있습니다. +multipleAttachmentsText=피처에 {0} 첨부 파일이 있습니다. + + +layerListTitle=레이어 표시 여부 + + +locateSubmitLabel=항목보기 +addressLabel=주소 +coordinatesLabel=좌표 +addressTitle=주소 입력 +coordinatesTitle=좌표 입력 +xLabel=경도(X) +yLabel=위도(Y) +locationsLabel=찾은 위치: +bingCulture=ko-KR +requiredFields=필수 필드: +requiredField=필수 필드: +deleteResultTooltip=결과 삭제 +resultScoreText=점수: +bingResultConfidenceText=신뢰도: + + +printSubmitLabel=인쇄 +printTitle= +printSubtitle= +printCopyright= +printTitleLabel=제목 +printSubtitleLabel=부제목 +printCopyrightLabel=저작권 +printAuthorLabel=작성자 +printLayoutTemplatesLabel=레이아웃 템플릿 +printFormatsLabel=형식 +printScaleLabel=이 배율 사용 + + +filterTitleBarTooltip=필터 결과 +showallTitleBarTooltip=모두 표시 +filterButtonLabel=필터 +clearButtonLabel=모두 표시 +featuresFoundLabel=찾은 피처: {0} + + +drivingDirectionLabel=운전 방향 +routeSubmitLabel=방향 가져오기 +moveUpTooltip=위로 이동 +moveDownTooltip=아래로 이동 +addLocationTooltip=맵을 클릭하여 위치 추가 +optionsLabel=옵션 +bestSequenceLabel=최적의 시퀀스 찾기 +milesLabel=마일 +metricLabel=Km +changeRouteSymbolLabel=경로 심볼 변경 +editRouteLabel=경로 편집 + + +graphicalTitleBarTooltip=피처 선택 +textTitleBarTooltip=속성으로 선택 +graphicalsearchLabel=피처 선택 기준 +textsearchLabel=속성으로 선택 +layerLabel=레이어 검색 +nolayerLabel=정의된 검색 레이어가 없습니다. +searchSubmitLabel=검색 +selectionLabel=피처 선택됨: + + +latitudeLabel=위도 +longitudeLabel=경도 + + +gpSubmitLabel=보고 +inputLabel=입력 +helpLabel=도움말 +outputLabel=출력 +copyToClipboard=클립보드로 복사 +unsupportedInputType={0} 입력은 지원되지 않습니다. +currentExtentWillBeUsedAsInput=현재 익스텐트가 입력으로 사용됩니다. + + +zoomLabel=확대 + + +helloContent=구성 파일에서 이 텍스트를 변경합니다. + + +widgetIDWidgetLabelTemplate=위젯 Id: {0}, 위젯 레이블: {1} +widgetIDWidgetStateTemplate=위젯 Id: {0}, 위젯 상태: {1} +itemLabelWidgetIDItemIDTemplate={0} 위젯 ID: {1} + + +layerSelectionLabel=레이어 선택 +drawToolMenuLabel=그리기 도구 선택 +selectLabel=선택 +noLayersLabel=레이어 없음 +noChartDataToDisplayLabel=디스플레이할 차트 데이터 없음 featureLayerNotVisibleText=피처 레이어가 표시되지 않거나 배율 범위를 벗어났습니다. \ No newline at end of file diff --git a/locale/nb_NO/ViewerStrings.properties b/locale/nb_NO/ViewerStrings.properties index 9491cf0..6a149cb 100644 --- a/locale/nb_NO/ViewerStrings.properties +++ b/locale/nb_NO/ViewerStrings.properties @@ -1,350 +1,350 @@ - - -contextMenuText=Om ArcGIS Viewer for Flex... -aboutText=Dette programmet bruker ArcGIS Viewer for Flex versjon 3.1.\nByggdato 2012-12-12. -aboutLearnMoreBtn=Lær mer -aboutCloseBtn=Lukk - - - -close=Lukk -minimize=Minimer - - -locateExampleValueX=10.7276 -locateExampleValueY=59.9169 - - -clearLabel=Fjern -deleteLabel=Slett -loadingLabel=Laster inn... -okLabel=OK -errorLabel=Feil -problemLabel=Problem -noFeatures=Fant ingen geoobjekter. -resultsLabel=Resultater -saveLabel=Lagre - - -unitsFeet=Fot -unitsFeetAbbr=ft -unitsKilometers=Kilometer -unitsKilometersAbbr=km -unitsMeters=Meter -unitsMetersAbbr=m -unitsMiles=Miles -unitsMilesAbbr=mi -unitsYards=Yard -unitsYardsAbbr=yd - -unitsAcres=Acres -unitsAcresAbbr=ac -unitsHectares=Hektar -unitsHectaresAbbr=ha -unitsSquareFeet=Kvadratfot -unitsSquareFeetAbbr=ft² -unitsSquareKilometers=Kvadratkilometer -unitsSquareKilometersAbbr=km² -unitsSquareMeters=Kvadratmeter -unitsSquareMetersAbbr=m² -unitsSquareMiles=Kvadratmiles -unitsSquareMilesAbbr=mi² -unitsSquareYards=Kvadratyard -unitsSquareYardsAbbr=yd² - - -tocMapLayerZoomToLabel=Zoom til -tocMapLayerTransparencyLabel=Gjennomsiktighet -tocMapLayerOpaqueLabel=Ugjennomsiktig -tocMapLayerTransparentLabel=Gjennomsiktig -tocMapLayerMoveUpLabel=Flytt opp -tocMapLayerMoveDownLabel=Flytt ned -tocMapLayerRemoveLabel=Fjern -tocMapLayerDescriptionLabel=Beskrivelse -tocMapLayerDownloadLabel=Last ned - - -incorrectLayerTypeText={0} er ikke en støttet kartlagtype. Bruk i stedet "arcims", "bing", "csv", "dynamic", "feature", "georss", "image", "kml", "osm", "tiled", "wms" eller "wmts". - - -missingConfigFileText=Fant ikke {0} -httpResponseStatus=http-responsstatus: {0} -faultCode=Feilkode: {0} -faultInfo=Feilinfo: {0} -faultDetail=Feildetaljer: {0} - - -parseConfigErrorText=Det oppstod et problem under lesing av konfigurasjonsfilen {0} -standalonePlayerExternalInterfaceErrorText=Det oppstod en feil. ExternalInterface fungerer ikke i frittstående spiller. -layerFailedToLoad:{0} kartlag kunne ikke lastes inn: {1} -couldNotFetchBasemapData=Kunne ikke hente bakgrunnskartdata:\n{0} -couldNotConnectToPortal=Kunne ikke koble til portalen. -couldNotQueryPortal=Kunne ikke spørre portalen. -couldNotQueryPortalItems=Kunne ikke spørre portalelementer. -serverMissingCrossDomain=GIS Server mangler en kryssdomenefil. -serviceIsInaccessible=Tjenesten finnes ikke eller er ikke tilgjengelig. -unauthorizedAccess=Du har ikke tilstrekkelige tillatelser for tilgang til denne tjenesten. -unknownErrorCause=Ukjent feilårsak. -resourceAccessDenied=Du har ikke tillatelser til tilgang til denne ressursen. -signInAborted=Pålogging avbrutt. -invalidWidgetId=Ugyldig widgetId: {0} -printTaskExecutionError=Feil ved utføring av utskriftsoppgave:\n\n{0} -gpServiceConnectionError=Kan ikke koble til GP-tjeneste:\n{0}\n\n{1}\n{2} -locatorServiceConnectionError=Kan ikke koble til posisjonsindikatortjeneste:\n{0}\n\n{1}\n{2} -singleLineGeocodingNotSupportedError=Posisjonsindikatortjeneste støtter ikke enkeltlinje-geokoding. -rssFeedParsingError=Det oppstod et problem under lesing av RSS-feeden. {0} -httpResponseNotXMLError=HTTP-respons er ikke XML. -unknownRSSFeedTypeError=Kan ikke fastslå typen RSS-feed. -initializationError=Det oppstod et problem under initialisering: {0} -unableToDetermineGPExecutionType=Kunne ikke fastslå geoprosessering-utføringstype: -projectionError=Feil under projisering av geometri: {0} -cannotRunTaskExecutionTypeUnknownError=Kan ikke kjøre oppgave: Ukjent utføringstype. -layerDataRetrievalError=Kunne ikke hente kartlagdata. -couldNotDeleteFeature=Kunne ikke slette geoobjekt -couldNotUpdateFeatureError=Kunne ikke oppdatere geoobjekt, gjenoppretter gammel verdi - - -configFileCrossDomain=Mulig kryssdomeneproblem: {0}{1} - - -openToolTip=Klikk for å åpne oversiktskart -closeToolTip=Klikk for å lukke oversiktskart - - -layerListLabel=Mer... -basemap=Bakgrunnskart - - -aboutLabel=Om -searchPrompt=Oppgi adresse -searchResultTitleLabel=Sted -noResultsFoundLabel=Fant ingen resultater - - -fullExtentLabel=Full utstrekning -panDownLabel=Panorer ned -panLeftLabel=Panorer mot venstre -panRightLabel=Panorer mot høyre -panUpLabel=Panorer opp -previousExtentLabel=Forrige utstrekning -nextExtentLabel=Neste utstrekning -panLabel=Panorer -zoomInLabel=Zoom inn -zoomOutLabel=Zoom ut - - - - - - -addTextLabel=Legg til tekst -drawPointLabel=Tegn punkt -drawLineLabel=Tegn linje -drawFreehandLineLabel=Tegn frihåndslinje -drawPolygonLabel=Tegn polygon -drawFreehandPolygonLabel=Tegn frihåndspolygon -drawRectangleLabel=Tegn rektangel -drawMapExtentLabel=Tegn kartutstrekning -drawCircleLabel=Tegn sirkel -drawEllipseLabel=Tegn ellipse -drawClearLabel=Fjern tegninger - -markerStyleCircle=Sirkel -markerStyleCross=Kryss -markerStyleDiamond=Rombe -markerStyleSquare=Kvadrat -markerStyleTriangle=Trekant -markerStyleX=X - -textFont1=Arial -textFont2=Courier New -textFont3=Broadway -textFont4=Comic Sans MS -textFont5=Algerisk -textFont6=Verdana - -lineStyleSolid=Heltrukket -lineStyleDash=Strek -lineStyleDot=Prikk -lineStyleDashDot=Strek prikk -lineStyleDashDotDot=Strek prikk prikk - -fillStyleSolid=Heltrukket -fillStyleBackwardDiagonal=Bakover diagonalt -fillStyleCross=Kryss -fillStyleForwardDiagonal=Fremover diagonalt -fillStyleHorizontal=Vannrett -fillStyleVertical=Loddrett - - - -markerAlphaLabel=Alfa -markerColorLabel=Markørfarge -markerSizeLabel=Størrelse -markerStyleLabel=Stil -markerOutlineColorLabel=Omrissfarge -markerOutlineWidthLabel=Bredde -textLabel=Tekst -textColorLabel=Farge -textFontLabel=Skrift -textSizeLabel=Størrelse -textBoldLabel=F -textBoldTooltip=Fet -textItalicLabel=K -textItalicTooltip=Kursiv -textUnderlineLabel=U -textUnderlineTooltip=Understreking -lineAlphaLabel=Alfa -lineColorLabel=Linjefarge -lineStyleLabel=Stil -lineWidthLabel=Bredde -fillAlphaLabel=Alfa -fillColorLabel=Fyllfarge -fillStyleLabel=Stil -fillOutlineColorLabel=Omrissfarge -fillOutlineWidthLabel=Bredde - - - - -showMeasurementsLabel=Vis målinger -distanceUnitsLabel=Avstandsenheter -areaUnitsLabel=Arealenheter -areaLabel=Areal: -perimeterLabel=Omkrets: -lengthLabel=Lengde: - - -bookmarksLabel=Bokmerker -addbookmarksLabel=Legg til bokmerke -addLabel=Legg til gjeldende utstrekning som et bokmerke med navnet -bookmarkSubmitLabel=Legg til bokmerke -bookmarkMissingNameLabel=Skriv inn et navn for bokmerket. -deleteBookmarkTooltip=Slett bokmerke - - -descLabel=Trekk ut data og last ned zip-fil -step1Label=1. Velg område -dataCurrentExtentLabel=1. Data vil bli trukket ut fra din gjeldende utstrekning. -step2Label=2. Velg kartlag som skal trekkes ut -step3Label=3. Velg filformat -step4Label=4. Velg rasterformat -step5Label=5. Koordinatsystem -extractButtonLabel=Trekk ut -step1ErrorLabel=Velg et område av interesse. -step2ErrorLabel=Velg lag som skal trekkes ut. -emptyResultsLabel=Oppgave fullført, men den returnerte ingen resultater. -saveDataFileLabel=Datafil opprettet. Vil du lagre den? - - -attributesLabel=Attributter -attachmentsLabel=Vedlegg -relatedRecordsLabel=Relaterte poster -featureLayerOutOfScaleText=Dette geoobjektlaget er utenfor målestokken -showAttachmentsText=Vedlegg -showRelatedRecordsText=Relaterte poster -showAttributesText=Gå tilbake -selectTemplateText=Velg mal for å opprette geoobjekt -noEditableLayersText=Ingen redigerbare kartlag. -noCreateCapabilityLayersText=Ingen av kartlagene har mulighet for å opprette -layerNotSupportingAttachmentsText=Dette kartlaget støtter ikke vedlegg -noAttachmentsText=Ingen vedlegg -chooseFileText=Velg en fil som skal legges ved -attachmentSubmitLabel=Send -attachmentCancelLabel=Avbryt -singleAttachmentText=Geoobjektet har {0} vedlegg -multipleAttachmentsText=Geoobjektet har {0} vedlegg - - -layerListTitle=Kartlagsynlighet - - -locateSubmitLabel=Finn -addressLabel=Adresse -coordinatesLabel=Koordinater -addressTitle=Skriv inn adressen -coordinatesTitle=Skriv inn koordinatene -xLabel=Lengdegrad (X) -yLabel=Breddegrad (Y) -locationsLabel=Steder funnet: -bingCulture=en-US -requiredFields=Obligatoriske felter: -requiredField=Obligatorisk felt: -deleteResultTooltip=Slett resultat -resultScoreText=Poengsum: -bingResultConfidenceText=Sikkerhet: - - -printSubmitLabel=Skriv ut -printTitle= -printSubtitle= -printCopyright= -printTitleLabel=Tittel -printSubtitleLabel=Undertittel -printCopyrightLabel=Opphavsrett -printAuthorLabel=Forfatter -printLayoutTemplatesLabel=Oppsettmaler -printFormatsLabel=Formater -printScaleLabel=Bruk denne målestokken - - -filterTitleBarTooltip=Filtrer resultater -showallTitleBarTooltip=Vis alle -filterButtonLabel=Filtrer -clearButtonLabel=Vis alle -featuresFoundLabel=Geoobjekter funnet: {0} - - -drivingDirectionLabel=Ruteangivelser -routeSubmitLabel=Få anvisninger -moveUpTooltip=Flytt opp -moveDownTooltip=Flytt ned -addLocationTooltip=klikk på kart for å legge til sted -optionsLabel=Alternativer -bestSequenceLabel=Finn beste sekvens -milesLabel=Miles -metricLabel=km -changeRouteSymbolLabel=Endre rutesymbol -editRouteLabel=Rediger rute - - -graphicalTitleBarTooltip=Velg geoobjekter -textTitleBarTooltip=Velg etter attributt -graphicalsearchLabel=Velg geoobjekter etter -textsearchLabel=Velg etter attributt -layerLabel=Søkekartlag -nolayerLabel=Ingen søkekartlag definert. -searchSubmitLabel=Søk -selectionLabel=Valgte geoobjekter: - - -latitudeLabel=Breddegrad -longitudeLabel=Lengdegrad - - -gpSubmitLabel=Send -inputLabel=Inndata -helpLabel=Hjelp -outputLabel=Resultat -copyToClipboard=Kopier til utklippstavle -unsupportedInputType={0} inndata støttes ikke -currentExtentWillBeUsedAsInput=Gjeldende utstrekning vil bli brukt som inndata. - - -zoomLabel=Zoom til - - -helloContent=Endre denne teksten i konfigurasjonsfil. - - -widgetIDWidgetLabelTemplate=Widget-ID: {0}, widget-etikett: {1} -widgetIDWidgetStateTemplate=Widget-ID: {0}, widget-tilstand: {1} -itemLabelWidgetIDItemIDTemplate={0} Widget-ID: {1} - - -layerSelectionLabel=Velg lag -drawToolMenuLabel=Velg tegneverktøy -selectLabel=Velg -noLayersLabel=Ingen lag -noChartDataToDisplayLabel=Ingen diagramdata å vise + + +contextMenuText=Om ArcGIS Viewer for Flex... +aboutText=Dette programmet bruker ArcGIS Viewer for Flex versjon 3.1.\nByggdato 2012-12-12. +aboutLearnMoreBtn=Lær mer +aboutCloseBtn=Lukk + + + +close=Lukk +minimize=Minimer + + +locateExampleValueX=10.7276 +locateExampleValueY=59.9169 + + +clearLabel=Fjern +deleteLabel=Slett +loadingLabel=Laster inn... +okLabel=OK +errorLabel=Feil +problemLabel=Problem +noFeatures=Fant ingen geoobjekter. +resultsLabel=Resultater +saveLabel=Lagre + + +unitsFeet=Fot +unitsFeetAbbr=ft +unitsKilometers=Kilometer +unitsKilometersAbbr=km +unitsMeters=Meter +unitsMetersAbbr=m +unitsMiles=Miles +unitsMilesAbbr=mi +unitsYards=Yard +unitsYardsAbbr=yd + +unitsAcres=Acres +unitsAcresAbbr=ac +unitsHectares=Hektar +unitsHectaresAbbr=ha +unitsSquareFeet=Kvadratfot +unitsSquareFeetAbbr=ft² +unitsSquareKilometers=Kvadratkilometer +unitsSquareKilometersAbbr=km² +unitsSquareMeters=Kvadratmeter +unitsSquareMetersAbbr=m² +unitsSquareMiles=Kvadratmiles +unitsSquareMilesAbbr=mi² +unitsSquareYards=Kvadratyard +unitsSquareYardsAbbr=yd² + + +tocMapLayerZoomToLabel=Zoom til +tocMapLayerTransparencyLabel=Gjennomsiktighet +tocMapLayerOpaqueLabel=Ugjennomsiktig +tocMapLayerTransparentLabel=Gjennomsiktig +tocMapLayerMoveUpLabel=Flytt opp +tocMapLayerMoveDownLabel=Flytt ned +tocMapLayerRemoveLabel=Fjern +tocMapLayerDescriptionLabel=Beskrivelse +tocMapLayerDownloadLabel=Last ned + + +incorrectLayerTypeText={0} er ikke en støttet kartlagtype. Bruk i stedet "arcims", "bing", "csv", "dynamic", "feature", "georss", "image", "kml", "osm", "tiled", "wms" eller "wmts". + + +missingConfigFileText=Fant ikke {0} +httpResponseStatus=http-responsstatus: {0} +faultCode=Feilkode: {0} +faultInfo=Feilinfo: {0} +faultDetail=Feildetaljer: {0} + + +parseConfigErrorText=Det oppstod et problem under lesing av konfigurasjonsfilen {0} +standalonePlayerExternalInterfaceErrorText=Det oppstod en feil. ExternalInterface fungerer ikke i frittstående spiller. +layerFailedToLoad:{0} kartlag kunne ikke lastes inn: {1} +couldNotFetchBasemapData=Kunne ikke hente bakgrunnskartdata:\n{0} +couldNotConnectToPortal=Kunne ikke koble til portalen. +couldNotQueryPortal=Kunne ikke spørre portalen. +couldNotQueryPortalItems=Kunne ikke spørre portalelementer. +serverMissingCrossDomain=GIS Server mangler en kryssdomenefil. +serviceIsInaccessible=Tjenesten finnes ikke eller er ikke tilgjengelig. +unauthorizedAccess=Du har ikke tilstrekkelige tillatelser for tilgang til denne tjenesten. +unknownErrorCause=Ukjent feilårsak. +resourceAccessDenied=Du har ikke tillatelser til tilgang til denne ressursen. +signInAborted=Pålogging avbrutt. +invalidWidgetId=Ugyldig widgetId: {0} +printTaskExecutionError=Feil ved utføring av utskriftsoppgave:\n\n{0} +gpServiceConnectionError=Kan ikke koble til GP-tjeneste:\n{0}\n\n{1}\n{2} +locatorServiceConnectionError=Kan ikke koble til posisjonsindikatortjeneste:\n{0}\n\n{1}\n{2} +singleLineGeocodingNotSupportedError=Posisjonsindikatortjeneste støtter ikke enkeltlinje-geokoding. +rssFeedParsingError=Det oppstod et problem under lesing av RSS-feeden. {0} +httpResponseNotXMLError=HTTP-respons er ikke XML. +unknownRSSFeedTypeError=Kan ikke fastslå typen RSS-feed. +initializationError=Det oppstod et problem under initialisering: {0} +unableToDetermineGPExecutionType=Kunne ikke fastslå geoprosessering-utføringstype: +projectionError=Feil under projisering av geometri: {0} +cannotRunTaskExecutionTypeUnknownError=Kan ikke kjøre oppgave: Ukjent utføringstype. +layerDataRetrievalError=Kunne ikke hente kartlagdata. +couldNotDeleteFeature=Kunne ikke slette geoobjekt +couldNotUpdateFeatureError=Kunne ikke oppdatere geoobjekt, gjenoppretter gammel verdi + + +configFileCrossDomain=Mulig kryssdomeneproblem: {0}{1} + + +openToolTip=Klikk for å åpne oversiktskart +closeToolTip=Klikk for å lukke oversiktskart + + +layerListLabel=Mer... +basemap=Bakgrunnskart + + +aboutLabel=Om +searchPrompt=Oppgi adresse +searchResultTitleLabel=Sted +noResultsFoundLabel=Fant ingen resultater + + +fullExtentLabel=Full utstrekning +panDownLabel=Panorer ned +panLeftLabel=Panorer mot venstre +panRightLabel=Panorer mot høyre +panUpLabel=Panorer opp +previousExtentLabel=Forrige utstrekning +nextExtentLabel=Neste utstrekning +panLabel=Panorer +zoomInLabel=Zoom inn +zoomOutLabel=Zoom ut + + + + + + +addTextLabel=Legg til tekst +drawPointLabel=Tegn punkt +drawLineLabel=Tegn linje +drawFreehandLineLabel=Tegn frihåndslinje +drawPolygonLabel=Tegn polygon +drawFreehandPolygonLabel=Tegn frihåndspolygon +drawRectangleLabel=Tegn rektangel +drawMapExtentLabel=Tegn kartutstrekning +drawCircleLabel=Tegn sirkel +drawEllipseLabel=Tegn ellipse +drawClearLabel=Fjern tegninger + +markerStyleCircle=Sirkel +markerStyleCross=Kryss +markerStyleDiamond=Rombe +markerStyleSquare=Kvadrat +markerStyleTriangle=Trekant +markerStyleX=X + +textFont1=Arial +textFont2=Courier New +textFont3=Broadway +textFont4=Comic Sans MS +textFont5=Algerisk +textFont6=Verdana + +lineStyleSolid=Heltrukket +lineStyleDash=Strek +lineStyleDot=Prikk +lineStyleDashDot=Strek prikk +lineStyleDashDotDot=Strek prikk prikk + +fillStyleSolid=Heltrukket +fillStyleBackwardDiagonal=Bakover diagonalt +fillStyleCross=Kryss +fillStyleForwardDiagonal=Fremover diagonalt +fillStyleHorizontal=Vannrett +fillStyleVertical=Loddrett + + + +markerAlphaLabel=Alfa +markerColorLabel=Markørfarge +markerSizeLabel=Størrelse +markerStyleLabel=Stil +markerOutlineColorLabel=Omrissfarge +markerOutlineWidthLabel=Bredde +textLabel=Tekst +textColorLabel=Farge +textFontLabel=Skrift +textSizeLabel=Størrelse +textBoldLabel=F +textBoldTooltip=Fet +textItalicLabel=K +textItalicTooltip=Kursiv +textUnderlineLabel=U +textUnderlineTooltip=Understreking +lineAlphaLabel=Alfa +lineColorLabel=Linjefarge +lineStyleLabel=Stil +lineWidthLabel=Bredde +fillAlphaLabel=Alfa +fillColorLabel=Fyllfarge +fillStyleLabel=Stil +fillOutlineColorLabel=Omrissfarge +fillOutlineWidthLabel=Bredde + + + + +showMeasurementsLabel=Vis målinger +distanceUnitsLabel=Avstandsenheter +areaUnitsLabel=Arealenheter +areaLabel=Areal: +perimeterLabel=Omkrets: +lengthLabel=Lengde: + + +bookmarksLabel=Bokmerker +addbookmarksLabel=Legg til bokmerke +addLabel=Legg til gjeldende utstrekning som et bokmerke med navnet +bookmarkSubmitLabel=Legg til bokmerke +bookmarkMissingNameLabel=Skriv inn et navn for bokmerket. +deleteBookmarkTooltip=Slett bokmerke + + +descLabel=Trekk ut data og last ned zip-fil +step1Label=1. Velg område +dataCurrentExtentLabel=1. Data vil bli trukket ut fra din gjeldende utstrekning. +step2Label=2. Velg kartlag som skal trekkes ut +step3Label=3. Velg filformat +step4Label=4. Velg rasterformat +step5Label=5. Koordinatsystem +extractButtonLabel=Trekk ut +step1ErrorLabel=Velg et område av interesse. +step2ErrorLabel=Velg lag som skal trekkes ut. +emptyResultsLabel=Oppgave fullført, men den returnerte ingen resultater. +saveDataFileLabel=Datafil opprettet. Vil du lagre den? + + +attributesLabel=Attributter +attachmentsLabel=Vedlegg +relatedRecordsLabel=Relaterte poster +featureLayerOutOfScaleText=Dette geoobjektlaget er utenfor målestokken +showAttachmentsText=Vedlegg +showRelatedRecordsText=Relaterte poster +showAttributesText=Gå tilbake +selectTemplateText=Velg mal for å opprette geoobjekt +noEditableLayersText=Ingen redigerbare kartlag. +noCreateCapabilityLayersText=Ingen av kartlagene har mulighet for å opprette +layerNotSupportingAttachmentsText=Dette kartlaget støtter ikke vedlegg +noAttachmentsText=Ingen vedlegg +chooseFileText=Velg en fil som skal legges ved +attachmentSubmitLabel=Send +attachmentCancelLabel=Avbryt +singleAttachmentText=Geoobjektet har {0} vedlegg +multipleAttachmentsText=Geoobjektet har {0} vedlegg + + +layerListTitle=Kartlagsynlighet + + +locateSubmitLabel=Finn +addressLabel=Adresse +coordinatesLabel=Koordinater +addressTitle=Skriv inn adressen +coordinatesTitle=Skriv inn koordinatene +xLabel=Lengdegrad (X) +yLabel=Breddegrad (Y) +locationsLabel=Steder funnet: +bingCulture=en-US +requiredFields=Obligatoriske felter: +requiredField=Obligatorisk felt: +deleteResultTooltip=Slett resultat +resultScoreText=Poengsum: +bingResultConfidenceText=Sikkerhet: + + +printSubmitLabel=Skriv ut +printTitle= +printSubtitle= +printCopyright= +printTitleLabel=Tittel +printSubtitleLabel=Undertittel +printCopyrightLabel=Opphavsrett +printAuthorLabel=Forfatter +printLayoutTemplatesLabel=Oppsettmaler +printFormatsLabel=Formater +printScaleLabel=Bruk denne målestokken + + +filterTitleBarTooltip=Filtrer resultater +showallTitleBarTooltip=Vis alle +filterButtonLabel=Filtrer +clearButtonLabel=Vis alle +featuresFoundLabel=Geoobjekter funnet: {0} + + +drivingDirectionLabel=Ruteangivelser +routeSubmitLabel=Få anvisninger +moveUpTooltip=Flytt opp +moveDownTooltip=Flytt ned +addLocationTooltip=klikk på kart for å legge til sted +optionsLabel=Alternativer +bestSequenceLabel=Finn beste sekvens +milesLabel=Miles +metricLabel=km +changeRouteSymbolLabel=Endre rutesymbol +editRouteLabel=Rediger rute + + +graphicalTitleBarTooltip=Velg geoobjekter +textTitleBarTooltip=Velg etter attributt +graphicalsearchLabel=Velg geoobjekter etter +textsearchLabel=Velg etter attributt +layerLabel=Søkekartlag +nolayerLabel=Ingen søkekartlag definert. +searchSubmitLabel=Søk +selectionLabel=Valgte geoobjekter: + + +latitudeLabel=Breddegrad +longitudeLabel=Lengdegrad + + +gpSubmitLabel=Send +inputLabel=Inndata +helpLabel=Hjelp +outputLabel=Resultat +copyToClipboard=Kopier til utklippstavle +unsupportedInputType={0} inndata støttes ikke +currentExtentWillBeUsedAsInput=Gjeldende utstrekning vil bli brukt som inndata. + + +zoomLabel=Zoom til + + +helloContent=Endre denne teksten i konfigurasjonsfil. + + +widgetIDWidgetLabelTemplate=Widget-ID: {0}, widget-etikett: {1} +widgetIDWidgetStateTemplate=Widget-ID: {0}, widget-tilstand: {1} +itemLabelWidgetIDItemIDTemplate={0} Widget-ID: {1} + + +layerSelectionLabel=Velg lag +drawToolMenuLabel=Velg tegneverktøy +selectLabel=Velg +noLayersLabel=Ingen lag +noChartDataToDisplayLabel=Ingen diagramdata å vise featureLayerNotVisibleText=geoobjektlaget er enten ikke synlig eller utenfor målestokkområdet \ No newline at end of file diff --git a/locale/nl_NL/ViewerStrings.properties b/locale/nl_NL/ViewerStrings.properties index 4d57a88..9b00852 100644 --- a/locale/nl_NL/ViewerStrings.properties +++ b/locale/nl_NL/ViewerStrings.properties @@ -1,350 +1,350 @@ - - -contextMenuText=Informatie over ArcGIS Viewer for Flex... -aboutText=Deze applicatie maakt gebruik van ArcGIS Viewer for Flex-versie 3.1.\nVersiedatum 2012-12-12. -aboutLearnMoreBtn=Meer informatie -aboutCloseBtn=Sluiten - - - -close=Sluiten -minimize=Minimaliseren - - -locateExampleValueX=4.884 -locateExampleValueY=52.3753 - - -clearLabel=Wissen -deleteLabel=Verwijderen -loadingLabel=Bezig met laden... -okLabel=OK -errorLabel=Fout -problemLabel=Probleem -noFeatures=Geen objecten gevonden. -resultsLabel=Resultaten -saveLabel=Opslaan - - -unitsFeet=Voet -unitsFeetAbbr=ft -unitsKilometers=Kilometer -unitsKilometersAbbr=km -unitsMeters=Meter -unitsMetersAbbr=m -unitsMiles=Mijl -unitsMilesAbbr=mi -unitsYards=Yard -unitsYardsAbbr=yd - -unitsAcres=Acre -unitsAcresAbbr=ac -unitsHectares=Hectare -unitsHectaresAbbr=ha -unitsSquareFeet=Vierkante voet -unitsSquareFeetAbbr=sq ft -unitsSquareKilometers=Vierkante kilometer -unitsSquareKilometersAbbr=sq km -unitsSquareMeters=Vierkante meter -unitsSquareMetersAbbr=sq m -unitsSquareMiles=Vierkante mijl -unitsSquareMilesAbbr=sq mi -unitsSquareYards=Vierkante yard -unitsSquareYardsAbbr=sq yd - - -tocMapLayerZoomToLabel=Zoomen naar -tocMapLayerTransparencyLabel=Transparant -tocMapLayerOpaqueLabel=Niet transparant -tocMapLayerTransparentLabel=Transparant -tocMapLayerMoveUpLabel=Naar boven verplaatsen -tocMapLayerMoveDownLabel=Naar beneden verplaatsen -tocMapLayerRemoveLabel=Verwijderen -tocMapLayerDescriptionLabel=Beschrijving -tocMapLayerDownloadLabel=Downloaden - - -incorrectLayerTypeText={0} is geen ondersteund laagtype. Gebruik in plaats daarvan "arcims", "bing", "csv", "dynamic", "feature", "georss", "image", "kml", "osm", "tiled", "wms" of "wmts". - - -missingConfigFileText=Kan {0} niet vinden -httpResponseStatus=HTTP-antwoordstatus: {0} -faultCode=Probleemcode: {0} -faultInfo=Probleeminformatie: {0} -faultDetail=Probleemgegevens: {0} - - -parseConfigErrorText=Er is een probleem opgetreden tijdens het parseren van het configuratiebestand {0} -standalonePlayerExternalInterfaceErrorText=Er is een fout opgetreden. ExternalInterface werkt niet in een zelfstandige speler. -layerFailedToLoad:{0}-laag kan niet worden geladen: {1} -couldNotFetchBasemapData=Kan geen basiskaartgegevens ophalen:\n{0} -couldNotConnectToPortal=Kan geen verbinding maken met het portaal. -couldNotQueryPortal=Kan geen query uitvoeren op het portaal. -couldNotQueryPortalItems=Kan geen query uitvoeren op portaalitems. -serverMissingCrossDomain=Een crossdomain-bestand ontbreekt op GIS Server. -serviceIsInaccessible=Service bestaat niet of is ontoegankelijk. -unauthorizedAccess=U beschikt niet over de nodige machtigingen om toegang te krijgen tot deze service. -unknownErrorCause=Oorzaak van onbekende fout. -resourceAccessDenied=U hebt geen toegangsmachtigingen voor deze bron. -signInAborted=Aanmelding afgebroken. -invalidWidgetId=Ongeldige widgetId: {0} -printTaskExecutionError=Fout bij het uitvoeren van de afdruktaak:\n\n{0} -gpServiceConnectionError=Kan geen verbinding maken met GP Service:\n{0}\n\n{1}\n{2} -locatorServiceConnectionError=Kan geen verbinding maken met Locator Service:\n{0}\n\n{1}\n{2} -singleLineGeocodingNotSupportedError=Locatorservice ondersteunt geocodering met één regel niet. -rssFeedParsingError=Er is een probleem opgetreden bij het parseren van de RSS-feed. {0} -httpResponseNotXMLError=HTTP-antwoord is niet XML. -unknownRSSFeedTypeError=Kan het RSS-feedtype niet bepalen. -initializationError=Er is een probleem opgetreden bij het initialiseren: {0} -unableToDetermineGPExecutionType=Kan het uitvoeringstype voor geoprocessing niet bepalen: -projectionError=Fout bij het projecteren van geometrie: {0} -cannotRunTaskExecutionTypeUnknownError=Kan taak niet uitvoeren: uitvoeringstype onbekend. -layerDataRetrievalError=Kan geen laaggegevens ophalen. -couldNotDeleteFeature=Kan object niet verwijderen -couldNotUpdateFeatureError=Kan object niet bijwerken, oude waarde wordt hersteld - - -configFileCrossDomain=Mogelijk probleem tussen domeinen: {0}{1} - - -openToolTip=Klikken om overzichtskaart te openen -closeToolTip=Klikken om overzichtskaart te sluiten - - -layerListLabel=Meer... -basemap=Basiskaart - - -aboutLabel=Informatie -searchPrompt=Adres invoeren -searchResultTitleLabel=Locatie -noResultsFoundLabel=Geen resultaten gevonden - - -fullExtentLabel=Volledig extent -panDownLabel=Omlaag pannen -panLeftLabel=Naar links pannen -panRightLabel=Naar rechts pannen -panUpLabel=Omhoog pannen -previousExtentLabel=Vorige extent -nextExtentLabel=Volgende extent -panLabel=Pannen -zoomInLabel=Inzoomen -zoomOutLabel=Uitzoomen - - - - - - -addTextLabel=Tekst toevoegen -drawPointLabel=Punt tekenen -drawLineLabel=Lijn tekenen -drawFreehandLineLabel=Lijn in vrije stijl tekenen -drawPolygonLabel=Vlak tekenen -drawFreehandPolygonLabel=Vlak in vrije stijl tekenen -drawRectangleLabel=Rechthoek tekenen -drawMapExtentLabel=Kaartextent tekenen -drawCircleLabel=Cirkel tekenen -drawEllipseLabel=Ellips tekenen -drawClearLabel=Tekeningen wissen - -markerStyleCircle=Cirkel -markerStyleCross=Kruis -markerStyleDiamond=Ruit -markerStyleSquare=Vierkant -markerStyleTriangle=Driehoek -markerStyleX=X - -textFont1=Arial -textFont2=Courier New -textFont3=Broadway -textFont4=Comic Sans MS -textFont5=Algerian -textFont6=Verdana - -lineStyleSolid=Effen -lineStyleDash=Streepje -lineStyleDot=Stip -lineStyleDashDot=Streepje-stip -lineStyleDashDotDot=Streepje-stip-stip - -fillStyleSolid=Effen -fillStyleBackwardDiagonal=Diagonaal achterwaarts -fillStyleCross=Kruis -fillStyleForwardDiagonal=Diagonaal voorwaarts -fillStyleHorizontal=Horizontaal -fillStyleVertical=Verticaal - - - -markerAlphaLabel=Alfa -markerColorLabel=Kleur van markering -markerSizeLabel=Grootte -markerStyleLabel=Stijl -markerOutlineColorLabel=Kleur omtreklijn -markerOutlineWidthLabel=Breedte -textLabel=Tekst -textColorLabel=Kleur -textFontLabel=Lettertype -textSizeLabel=Grootte -textBoldLabel=B -textBoldTooltip=Vet -textItalicLabel=I -textItalicTooltip=Cursief -textUnderlineLabel=U -textUnderlineTooltip=Onderstrepen -lineAlphaLabel=Alfa -lineColorLabel=Lijnkleur -lineStyleLabel=Stijl -lineWidthLabel=Breedte -fillAlphaLabel=Alfa -fillColorLabel=Opvulkleur -fillStyleLabel=Stijl -fillOutlineColorLabel=Kleur omtreklijn -fillOutlineWidthLabel=Breedte - - - - -showMeasurementsLabel=Meeteenheden tonen -distanceUnitsLabel=Afstandseenheden -areaUnitsLabel=Gebiedseenheden -areaLabel=Gebied: -perimeterLabel=Perimeter: -lengthLabel=Lengte: - - -bookmarksLabel=Bladwijzers -addbookmarksLabel=Bladwijzer toevoegen -addLabel=Huidige extent toevoegen als een bladwijzer genaamd -bookmarkSubmitLabel=Bladwijzer toevoegen -bookmarkMissingNameLabel=Voer een naam in voor de bladwijzer. -deleteBookmarkTooltip=Bladwijzer verwijderen - - -descLabel=Gegevens ophalen en ZIP-bestand downloaden -step1Label=1. Gebied selecteren -dataCurrentExtentLabel=1. De gegevens worden opgehaald uit uw huidige extent. -step2Label=2. Lagen selecteren om op te halen -step3Label=3. Bestandsformaat selecteren -step4Label=4. Rasterformaat selecteren -step5Label=5. SpatialReference -extractButtonLabel=Ophalen -step1ErrorLabel=Selecteer een interessegebied. -step2ErrorLabel=Selecteer lagen om op te halen. -emptyResultsLabel=De taak is voltooid, maar er zijn geen resultaten. -saveDataFileLabel=Het gegevensbestand is gemaakt. Wilt u het opslaan? - - -attributesLabel=Attributen -attachmentsLabel=Bijlagen -relatedRecordsLabel=Verwante records -featureLayerOutOfScaleText=Deze objectlaag valt buiten het schaalbereik -showAttachmentsText=Bijlagen -showRelatedRecordsText=Verwante records -showAttributesText=Terug -selectTemplateText=Sjabloon voor het maken van een object selecteren -noEditableLayersText=Geen bewerkbare lagen. -noCreateCapabilityLayersText=Geen van de kaartlagen hebben de mogelijkheid tot maken -layerNotSupportingAttachmentsText=Deze laag ondersteunt geen bijlagen -noAttachmentsText=Geen bijlagen -chooseFileText=Een bestand selecteren om bij te voegen -attachmentSubmitLabel=Verzenden -attachmentCancelLabel=Annuleren -singleAttachmentText=Het object heeft {0} bijlage -multipleAttachmentsText=Het object heeft {0} bijlagen - - -layerListTitle=Lagenzichtbaarheid - - -locateSubmitLabel=Zoom naar -addressLabel=Adres -coordinatesLabel=Coördinaten -addressTitle=Het adres invoeren -coordinatesTitle=De coördinaten invoeren -xLabel=Lengtegraad (X) -yLabel=Breedtegraad (Y) -locationsLabel=Gevonden locaties: -bingCulture=nl-NL -requiredFields=Vereiste velden: -requiredField=Vereist veld: -deleteResultTooltip=Resultaat verwijderen -resultScoreText=Score: -bingResultConfidenceText=Betrouwbaarheid: - - -printSubmitLabel=Afdrukken -printTitle= -printSubtitle= -printCopyright= -printTitleLabel=Titel -printSubtitleLabel=Ondertitel -printCopyrightLabel=Auteursrecht -printAuthorLabel=Auteur -printLayoutTemplatesLabel=Lay-outsjablonen -printFormatsLabel=Formaten -printScaleLabel=Deze schaal gebruiken - - -filterTitleBarTooltip=Resultaten filteren -showallTitleBarTooltip=Alle tonen -filterButtonLabel=Filter -clearButtonLabel=Alle tonen -featuresFoundLabel=Gevonden objecten: {0} - - -drivingDirectionLabel=Routebeschrijving -routeSubmitLabel=Routebeschrijving vragen -moveUpTooltip=Naar boven verplaatsen -moveDownTooltip=Naar beneden verplaatsen -addLocationTooltip=op de kaart klikken om locatie toe te voegen -optionsLabel=Opties -bestSequenceLabel=Beste reeks zoeken -milesLabel=Mijl -metricLabel=Km -changeRouteSymbolLabel=Routesymbool wijzigen -editRouteLabel=Route bewerken - - -graphicalTitleBarTooltip=Objecten selecteren -textTitleBarTooltip=Selecteren op attribuut -graphicalsearchLabel=Objecten selecteren op -textsearchLabel=Selecteren op attribuut -layerLabel=Zoeklaag -nolayerLabel=Geen zoeklaag opgegeven. -searchSubmitLabel=Zoeken -selectionLabel=Geselecteerde objecten: - - -latitudeLabel=Breedtegraad -longitudeLabel=Lengtegraad - - -gpSubmitLabel=Verzenden -inputLabel=Invoer -helpLabel=Help -outputLabel=Uitvoer -copyToClipboard=Kopiëren naar Klembord -unsupportedInputType=Niet-ondersteunde invoer: {0} -currentExtentWillBeUsedAsInput=Het huidige extent wordt gebruikt als invoer. - - -zoomLabel=Zoomen naar - - -helloContent=Wijzig deze tekst in het configuratiebestand. - - -widgetIDWidgetLabelTemplate=Widget-id: {0}, widgetlabel: {1} -widgetIDWidgetStateTemplate=Widget-id: {0}, widgetstatus: {1} -itemLabelWidgetIDItemIDTemplate={0} Widget-id: {1} - - -layerSelectionLabel=Laag selecteren -drawToolMenuLabel=Tekenhulpmiddel selecteren -selectLabel=Selecteren -noLayersLabel=Geen lagen -noChartDataToDisplayLabel=Geen grafiekgegevens weer te geven + + +contextMenuText=Informatie over ArcGIS Viewer for Flex... +aboutText=Deze applicatie maakt gebruik van ArcGIS Viewer for Flex-versie 3.1.\nVersiedatum 2012-12-12. +aboutLearnMoreBtn=Meer informatie +aboutCloseBtn=Sluiten + + + +close=Sluiten +minimize=Minimaliseren + + +locateExampleValueX=4.884 +locateExampleValueY=52.3753 + + +clearLabel=Wissen +deleteLabel=Verwijderen +loadingLabel=Bezig met laden... +okLabel=OK +errorLabel=Fout +problemLabel=Probleem +noFeatures=Geen objecten gevonden. +resultsLabel=Resultaten +saveLabel=Opslaan + + +unitsFeet=Voet +unitsFeetAbbr=ft +unitsKilometers=Kilometer +unitsKilometersAbbr=km +unitsMeters=Meter +unitsMetersAbbr=m +unitsMiles=Mijl +unitsMilesAbbr=mi +unitsYards=Yard +unitsYardsAbbr=yd + +unitsAcres=Acre +unitsAcresAbbr=ac +unitsHectares=Hectare +unitsHectaresAbbr=ha +unitsSquareFeet=Vierkante voet +unitsSquareFeetAbbr=sq ft +unitsSquareKilometers=Vierkante kilometer +unitsSquareKilometersAbbr=sq km +unitsSquareMeters=Vierkante meter +unitsSquareMetersAbbr=sq m +unitsSquareMiles=Vierkante mijl +unitsSquareMilesAbbr=sq mi +unitsSquareYards=Vierkante yard +unitsSquareYardsAbbr=sq yd + + +tocMapLayerZoomToLabel=Zoomen naar +tocMapLayerTransparencyLabel=Transparant +tocMapLayerOpaqueLabel=Niet transparant +tocMapLayerTransparentLabel=Transparant +tocMapLayerMoveUpLabel=Naar boven verplaatsen +tocMapLayerMoveDownLabel=Naar beneden verplaatsen +tocMapLayerRemoveLabel=Verwijderen +tocMapLayerDescriptionLabel=Beschrijving +tocMapLayerDownloadLabel=Downloaden + + +incorrectLayerTypeText={0} is geen ondersteund laagtype. Gebruik in plaats daarvan "arcims", "bing", "csv", "dynamic", "feature", "georss", "image", "kml", "osm", "tiled", "wms" of "wmts". + + +missingConfigFileText=Kan {0} niet vinden +httpResponseStatus=HTTP-antwoordstatus: {0} +faultCode=Probleemcode: {0} +faultInfo=Probleeminformatie: {0} +faultDetail=Probleemgegevens: {0} + + +parseConfigErrorText=Er is een probleem opgetreden tijdens het parseren van het configuratiebestand {0} +standalonePlayerExternalInterfaceErrorText=Er is een fout opgetreden. ExternalInterface werkt niet in een zelfstandige speler. +layerFailedToLoad:{0}-laag kan niet worden geladen: {1} +couldNotFetchBasemapData=Kan geen basiskaartgegevens ophalen:\n{0} +couldNotConnectToPortal=Kan geen verbinding maken met het portaal. +couldNotQueryPortal=Kan geen query uitvoeren op het portaal. +couldNotQueryPortalItems=Kan geen query uitvoeren op portaalitems. +serverMissingCrossDomain=Een crossdomain-bestand ontbreekt op GIS Server. +serviceIsInaccessible=Service bestaat niet of is ontoegankelijk. +unauthorizedAccess=U beschikt niet over de nodige machtigingen om toegang te krijgen tot deze service. +unknownErrorCause=Oorzaak van onbekende fout. +resourceAccessDenied=U hebt geen toegangsmachtigingen voor deze bron. +signInAborted=Aanmelding afgebroken. +invalidWidgetId=Ongeldige widgetId: {0} +printTaskExecutionError=Fout bij het uitvoeren van de afdruktaak:\n\n{0} +gpServiceConnectionError=Kan geen verbinding maken met GP Service:\n{0}\n\n{1}\n{2} +locatorServiceConnectionError=Kan geen verbinding maken met Locator Service:\n{0}\n\n{1}\n{2} +singleLineGeocodingNotSupportedError=Locatorservice ondersteunt geocodering met één regel niet. +rssFeedParsingError=Er is een probleem opgetreden bij het parseren van de RSS-feed. {0} +httpResponseNotXMLError=HTTP-antwoord is niet XML. +unknownRSSFeedTypeError=Kan het RSS-feedtype niet bepalen. +initializationError=Er is een probleem opgetreden bij het initialiseren: {0} +unableToDetermineGPExecutionType=Kan het uitvoeringstype voor geoprocessing niet bepalen: +projectionError=Fout bij het projecteren van geometrie: {0} +cannotRunTaskExecutionTypeUnknownError=Kan taak niet uitvoeren: uitvoeringstype onbekend. +layerDataRetrievalError=Kan geen laaggegevens ophalen. +couldNotDeleteFeature=Kan object niet verwijderen +couldNotUpdateFeatureError=Kan object niet bijwerken, oude waarde wordt hersteld + + +configFileCrossDomain=Mogelijk probleem tussen domeinen: {0}{1} + + +openToolTip=Klikken om overzichtskaart te openen +closeToolTip=Klikken om overzichtskaart te sluiten + + +layerListLabel=Meer... +basemap=Basiskaart + + +aboutLabel=Informatie +searchPrompt=Adres invoeren +searchResultTitleLabel=Locatie +noResultsFoundLabel=Geen resultaten gevonden + + +fullExtentLabel=Volledig extent +panDownLabel=Omlaag pannen +panLeftLabel=Naar links pannen +panRightLabel=Naar rechts pannen +panUpLabel=Omhoog pannen +previousExtentLabel=Vorige extent +nextExtentLabel=Volgende extent +panLabel=Pannen +zoomInLabel=Inzoomen +zoomOutLabel=Uitzoomen + + + + + + +addTextLabel=Tekst toevoegen +drawPointLabel=Punt tekenen +drawLineLabel=Lijn tekenen +drawFreehandLineLabel=Lijn in vrije stijl tekenen +drawPolygonLabel=Vlak tekenen +drawFreehandPolygonLabel=Vlak in vrije stijl tekenen +drawRectangleLabel=Rechthoek tekenen +drawMapExtentLabel=Kaartextent tekenen +drawCircleLabel=Cirkel tekenen +drawEllipseLabel=Ellips tekenen +drawClearLabel=Tekeningen wissen + +markerStyleCircle=Cirkel +markerStyleCross=Kruis +markerStyleDiamond=Ruit +markerStyleSquare=Vierkant +markerStyleTriangle=Driehoek +markerStyleX=X + +textFont1=Arial +textFont2=Courier New +textFont3=Broadway +textFont4=Comic Sans MS +textFont5=Algerian +textFont6=Verdana + +lineStyleSolid=Effen +lineStyleDash=Streepje +lineStyleDot=Stip +lineStyleDashDot=Streepje-stip +lineStyleDashDotDot=Streepje-stip-stip + +fillStyleSolid=Effen +fillStyleBackwardDiagonal=Diagonaal achterwaarts +fillStyleCross=Kruis +fillStyleForwardDiagonal=Diagonaal voorwaarts +fillStyleHorizontal=Horizontaal +fillStyleVertical=Verticaal + + + +markerAlphaLabel=Alfa +markerColorLabel=Kleur van markering +markerSizeLabel=Grootte +markerStyleLabel=Stijl +markerOutlineColorLabel=Kleur omtreklijn +markerOutlineWidthLabel=Breedte +textLabel=Tekst +textColorLabel=Kleur +textFontLabel=Lettertype +textSizeLabel=Grootte +textBoldLabel=B +textBoldTooltip=Vet +textItalicLabel=I +textItalicTooltip=Cursief +textUnderlineLabel=U +textUnderlineTooltip=Onderstrepen +lineAlphaLabel=Alfa +lineColorLabel=Lijnkleur +lineStyleLabel=Stijl +lineWidthLabel=Breedte +fillAlphaLabel=Alfa +fillColorLabel=Opvulkleur +fillStyleLabel=Stijl +fillOutlineColorLabel=Kleur omtreklijn +fillOutlineWidthLabel=Breedte + + + + +showMeasurementsLabel=Meeteenheden tonen +distanceUnitsLabel=Afstandseenheden +areaUnitsLabel=Gebiedseenheden +areaLabel=Gebied: +perimeterLabel=Perimeter: +lengthLabel=Lengte: + + +bookmarksLabel=Bladwijzers +addbookmarksLabel=Bladwijzer toevoegen +addLabel=Huidige extent toevoegen als een bladwijzer genaamd +bookmarkSubmitLabel=Bladwijzer toevoegen +bookmarkMissingNameLabel=Voer een naam in voor de bladwijzer. +deleteBookmarkTooltip=Bladwijzer verwijderen + + +descLabel=Gegevens ophalen en ZIP-bestand downloaden +step1Label=1. Gebied selecteren +dataCurrentExtentLabel=1. De gegevens worden opgehaald uit uw huidige extent. +step2Label=2. Lagen selecteren om op te halen +step3Label=3. Bestandsformaat selecteren +step4Label=4. Rasterformaat selecteren +step5Label=5. SpatialReference +extractButtonLabel=Ophalen +step1ErrorLabel=Selecteer een interessegebied. +step2ErrorLabel=Selecteer lagen om op te halen. +emptyResultsLabel=De taak is voltooid, maar er zijn geen resultaten. +saveDataFileLabel=Het gegevensbestand is gemaakt. Wilt u het opslaan? + + +attributesLabel=Attributen +attachmentsLabel=Bijlagen +relatedRecordsLabel=Verwante records +featureLayerOutOfScaleText=Deze objectlaag valt buiten het schaalbereik +showAttachmentsText=Bijlagen +showRelatedRecordsText=Verwante records +showAttributesText=Terug +selectTemplateText=Sjabloon voor het maken van een object selecteren +noEditableLayersText=Geen bewerkbare lagen. +noCreateCapabilityLayersText=Geen van de kaartlagen hebben de mogelijkheid tot maken +layerNotSupportingAttachmentsText=Deze laag ondersteunt geen bijlagen +noAttachmentsText=Geen bijlagen +chooseFileText=Een bestand selecteren om bij te voegen +attachmentSubmitLabel=Verzenden +attachmentCancelLabel=Annuleren +singleAttachmentText=Het object heeft {0} bijlage +multipleAttachmentsText=Het object heeft {0} bijlagen + + +layerListTitle=Lagenzichtbaarheid + + +locateSubmitLabel=Zoom naar +addressLabel=Adres +coordinatesLabel=Coördinaten +addressTitle=Het adres invoeren +coordinatesTitle=De coördinaten invoeren +xLabel=Lengtegraad (X) +yLabel=Breedtegraad (Y) +locationsLabel=Gevonden locaties: +bingCulture=nl-NL +requiredFields=Vereiste velden: +requiredField=Vereist veld: +deleteResultTooltip=Resultaat verwijderen +resultScoreText=Score: +bingResultConfidenceText=Betrouwbaarheid: + + +printSubmitLabel=Afdrukken +printTitle= +printSubtitle= +printCopyright= +printTitleLabel=Titel +printSubtitleLabel=Ondertitel +printCopyrightLabel=Auteursrecht +printAuthorLabel=Auteur +printLayoutTemplatesLabel=Lay-outsjablonen +printFormatsLabel=Formaten +printScaleLabel=Deze schaal gebruiken + + +filterTitleBarTooltip=Resultaten filteren +showallTitleBarTooltip=Alle tonen +filterButtonLabel=Filter +clearButtonLabel=Alle tonen +featuresFoundLabel=Gevonden objecten: {0} + + +drivingDirectionLabel=Routebeschrijving +routeSubmitLabel=Routebeschrijving vragen +moveUpTooltip=Naar boven verplaatsen +moveDownTooltip=Naar beneden verplaatsen +addLocationTooltip=op de kaart klikken om locatie toe te voegen +optionsLabel=Opties +bestSequenceLabel=Beste reeks zoeken +milesLabel=Mijl +metricLabel=Km +changeRouteSymbolLabel=Routesymbool wijzigen +editRouteLabel=Route bewerken + + +graphicalTitleBarTooltip=Objecten selecteren +textTitleBarTooltip=Selecteren op attribuut +graphicalsearchLabel=Objecten selecteren op +textsearchLabel=Selecteren op attribuut +layerLabel=Zoeklaag +nolayerLabel=Geen zoeklaag opgegeven. +searchSubmitLabel=Zoeken +selectionLabel=Geselecteerde objecten: + + +latitudeLabel=Breedtegraad +longitudeLabel=Lengtegraad + + +gpSubmitLabel=Verzenden +inputLabel=Invoer +helpLabel=Help +outputLabel=Uitvoer +copyToClipboard=Kopiëren naar Klembord +unsupportedInputType=Niet-ondersteunde invoer: {0} +currentExtentWillBeUsedAsInput=Het huidige extent wordt gebruikt als invoer. + + +zoomLabel=Zoomen naar + + +helloContent=Wijzig deze tekst in het configuratiebestand. + + +widgetIDWidgetLabelTemplate=Widget-id: {0}, widgetlabel: {1} +widgetIDWidgetStateTemplate=Widget-id: {0}, widgetstatus: {1} +itemLabelWidgetIDItemIDTemplate={0} Widget-id: {1} + + +layerSelectionLabel=Laag selecteren +drawToolMenuLabel=Tekenhulpmiddel selecteren +selectLabel=Selecteren +noLayersLabel=Geen lagen +noChartDataToDisplayLabel=Geen grafiekgegevens weer te geven featureLayerNotVisibleText=objectlaag is ofwel niet zichtbaar of buiten het schaalbereik \ No newline at end of file diff --git a/locale/pl_PL/ViewerStrings.properties b/locale/pl_PL/ViewerStrings.properties index 50090c2..b73d341 100644 --- a/locale/pl_PL/ViewerStrings.properties +++ b/locale/pl_PL/ViewerStrings.properties @@ -1,350 +1,350 @@ - - -contextMenuText=O aplikacji ArcGIS Viewer for Flex... -aboutText=Ta aplikacja korzysta z produktu ArcGIS Viewer for Flex w wersji 3.1.\nData kompilacji 2012-12-12. -aboutLearnMoreBtn=Dowiedz się więcej -aboutCloseBtn=Zamknij - - - -close=Zamknij -minimize=Minimalizuj - - -locateExampleValueX=21.011 -locateExampleValueY=52.23 - - -clearLabel=Wyczyść -deleteLabel=Usuń -loadingLabel=Wczytywanie... -okLabel=OK -errorLabel=Błąd -problemLabel=Problem -noFeatures=Nie odnaleziono obiektów. -resultsLabel=Wyniki -saveLabel=Zapisz - - -unitsFeet=Stopy -unitsFeetAbbr=ft -unitsKilometers=Kilometry -unitsKilometersAbbr=km -unitsMeters=Metry -unitsMetersAbbr=m -unitsMiles=Mile -unitsMilesAbbr=mi -unitsYards=Jardy -unitsYardsAbbr=yd - -unitsAcres=Akry -unitsAcresAbbr=ac -unitsHectares=Hektary -unitsHectaresAbbr=ha -unitsSquareFeet=Stopy kwadratowe -unitsSquareFeetAbbr=sq ft -unitsSquareKilometers=Kilometry kwadratowe -unitsSquareKilometersAbbr=km kw -unitsSquareMeters=Metry kwadratowe -unitsSquareMetersAbbr=m kw -unitsSquareMiles=Mile kwadratowe -unitsSquareMilesAbbr=sq mi -unitsSquareYards=Jardy kwadratowe -unitsSquareYardsAbbr=sq yd - - -tocMapLayerZoomToLabel=Powiększ do -tocMapLayerTransparencyLabel=Przezroczystość -tocMapLayerOpaqueLabel=Nieprzezroczysty -tocMapLayerTransparentLabel=Przezroczysty -tocMapLayerMoveUpLabel=Przesuń w górę -tocMapLayerMoveDownLabel=Przesuń w dół -tocMapLayerRemoveLabel=Usuń -tocMapLayerDescriptionLabel=Opis -tocMapLayerDownloadLabel=Pobierz - - -incorrectLayerTypeText={0} nie jest obsługiwanym typem warstwy. Zamiast tego użyj „arcims”, „bing”, „csv”, „dynamic”, „feature”, „georss”, „image”, „kml”, „osm”, „tiled”, „wms” lub „wmts”. - - -missingConfigFileText=Nie można było odnaleźć {0} -httpResponseStatus=status odpowiedzi protokołu http: {0} -faultCode=Kod usterki: {0} -faultInfo=Informacje o usterce: {0} -faultDetail=Szczegóły dot. usterki: {0} - - -parseConfigErrorText=Wystąpił problem podczas analizy pliku konfiguracyjnego {0} -standalonePlayerExternalInterfaceErrorText=Wystąpił błąd. ExternalInterface nie działa w autonomicznym odtwarzaczu. -layerFailedToLoad:Ładowanie warstwy {0} nie powiodło się: {1} -couldNotFetchBasemapData=Pobieranie danych mapy bazowej nie powiodło się:\n{0} -couldNotConnectToPortal=Połączenie z portalem nie powiodło się. -couldNotQueryPortal=Nie można wywołać portalu. -couldNotQueryPortalItems=Nie można wywołać elementów portalu. -serverMissingCrossDomain=Brak pliku crossdomain na serwerze GIS. -serviceIsInaccessible=Usługa nie istnieje lub jest niedostępna. -unauthorizedAccess=Nie masz uprawnień dostępu do tej usługi. -unknownErrorCause=Nieznana przyczyna błędu. -resourceAccessDenied=Nie masz uprawnień dostępu do tego zasobu. -signInAborted=Logowanie przerwane. -invalidWidgetId=Nieprawidłowy parametr widgetId: {0} -printTaskExecutionError=Błąd podczas zadania drukowania:\n\n{0} -gpServiceConnectionError=Nie można połączyć z usługą GP:\n{0}\n\n{1}\n{2} -locatorServiceConnectionError=Nie można połączyć z usługą lokalizatora:\n{0}\n\n{1}\n{2} -singleLineGeocodingNotSupportedError=Lokalizator nie obsługuje geokodowania jednowierszowego. -rssFeedParsingError=Wystąpił błąd podczas analizowania źródła RSS. {0} -httpResponseNotXMLError=Odpowiedź HTTP nie jest w postaci XML. -unknownRSSFeedTypeError=Nie można określić typu źródła RSS. -initializationError=Wystąpił błąd podczas inicjowania: {0} -unableToDetermineGPExecutionType=Określenie typu realizacji geoprzetwarzania nie powiodło się: -projectionError=Błąd podczas odwzorowania geometrii: {0} -cannotRunTaskExecutionTypeUnknownError=Nie można uruchomić zadania: nieznany typ wykonania. -layerDataRetrievalError=Pobieranie danych warstw nie powiodło się. -couldNotDeleteFeature=Usunięcie obiektu nie powiodło się -couldNotUpdateFeatureError=Aktualizacja obiektu nie powiodła się, przywracanie poprzedniej wartości - - -configFileCrossDomain=Możliwy problem z ruchem międzydomenowym: {0}{1} - - -openToolTip=Kliknij, aby wyświetlić podgląd mapy -closeToolTip=Kliknij, aby zamknąć podgląd mapy - - -layerListLabel=Więcej... -basemap=Mapa bazowa - - -aboutLabel=Informacje -searchPrompt=Wpisz adres -searchResultTitleLabel=Lokalizacja -noResultsFoundLabel=Nie znaleziono wyników - - -fullExtentLabel=Pełny Zasięg -panDownLabel=Przesuń w dół -panLeftLabel=Przesuń w lewo -panRightLabel=Przesuń w prawo -panUpLabel=Przesuń w górę -previousExtentLabel=Poprzedni zasięg -nextExtentLabel=Następny zasięg -panLabel=Przesuń -zoomInLabel=Powiększenie -zoomOutLabel=Pomniejszenie - - - - - - -addTextLabel=Dodaj tekst -drawPointLabel=Rysuj punkt -drawLineLabel=Rysuj linię -drawFreehandLineLabel=Rysuj dowolną linię -drawPolygonLabel=Rysuj poligon -drawFreehandPolygonLabel=Rysuj dowolny poligon -drawRectangleLabel=Rysuj prostokąt -drawMapExtentLabel=Rysuj zasięg mapy -drawCircleLabel=Rysuj okrąg -drawEllipseLabel=Rysuj elipsę -drawClearLabel=Wyczyść rysunki - -markerStyleCircle=Koło -markerStyleCross=Krzyż -markerStyleDiamond=Romb -markerStyleSquare=Kwadrat -markerStyleTriangle=Trójkąt -markerStyleX=X - -textFont1=Arial -textFont2=Courier New -textFont3=Broadway -textFont4=Comic Sans MS -textFont5=Algerian -textFont6=Verdana - -lineStyleSolid=Pełna -lineStyleDash=Przerywana -lineStyleDot=Kropkowana -lineStyleDashDot=Kreska-kropka -lineStyleDashDotDot=Kreska-kropka-kropka - -fillStyleSolid=Pełna -fillStyleBackwardDiagonal=Ukośnie odwrotnie -fillStyleCross=Krzyż -fillStyleForwardDiagonal=Ukośnie -fillStyleHorizontal=Poziomo -fillStyleVertical=Pionowo - - - -markerAlphaLabel=Alfa -markerColorLabel=Kolor znacznika -markerSizeLabel=Rozmiar -markerStyleLabel=Styl -markerOutlineColorLabel=Kolor obrysu -markerOutlineWidthLabel=Szerokość -textLabel=Tekst -textColorLabel=Kolor -textFontLabel=Czcionka -textSizeLabel=Rozmiar -textBoldLabel=B -textBoldTooltip=Pogrubiony -textItalicLabel=I -textItalicTooltip=Kursywa -textUnderlineLabel=U -textUnderlineTooltip=Podkreślenie -lineAlphaLabel=Alfa -lineColorLabel=Kolor linii -lineStyleLabel=Styl -lineWidthLabel=Szerokość -fillAlphaLabel=Alfa -fillColorLabel=Kolor wypełnienia -fillStyleLabel=Styl -fillOutlineColorLabel=Kolor obrysu -fillOutlineWidthLabel=Szerokość - - - - -showMeasurementsLabel=Pokaż jednostki miary -distanceUnitsLabel=Jednostki odległości -areaUnitsLabel=Jednostka powierzchni -areaLabel=Powierzchnia: -perimeterLabel=Obwód: -lengthLabel=Długość: - - -bookmarksLabel=Zakładki -addbookmarksLabel=Dodaj zakładkę -addLabel=Dodaj bieżący zasięg jako zakładkę o nazwie -bookmarkSubmitLabel=Dodaj zakładkę -bookmarkMissingNameLabel=Wpisz nazwę zakładki. -deleteBookmarkTooltip=Usuń zakładkę - - -descLabel=Wyodrębnij dane i pobierz plik zip -step1Label=1. Zaznacz obszar -dataCurrentExtentLabel=1. Dane zostaną wyodrębnione z bieżącego zasięgu. -step2Label=2. Wybierz warstwy tematyczne do wyodrębnienia -step3Label=3. Wybierz format pliku -step4Label=4. Wybierz format obrazu rastrowego -step5Label=5. Odniesienie przestrzenne -extractButtonLabel=Wyodrębnij -step1ErrorLabel=Wybierz obszar zainteresowania. -step2ErrorLabel=Wybierz warstwy tematyczne do wyodrębnienia. -emptyResultsLabel=Zadanie zostało zakończone, ale nie zwróciło żadnych wyników. -saveDataFileLabel=Plik danych został utworzony. Czy chcesz go zapisać? - - -attributesLabel=Atrybuty -attachmentsLabel=Załączniki -relatedRecordsLabel=Powiązane rekordy -featureLayerOutOfScaleText=Ta warstwa tematyczna obiektu znajduje się poza zakresem skali -showAttachmentsText=Załączniki -showRelatedRecordsText=Powiązane rekordy -showAttributesText=Wróć -selectTemplateText=Wybierz szablon, aby utworzyć obiekt -noEditableLayersText=Brak edytowalnych warstw tematycznych. -noCreateCapabilityLayersText=Żadna z tych warstw tematycznych nie ma możliwości tworzenia -layerNotSupportingAttachmentsText=Ta warstwa tematyczna nie obsługuje załączników -noAttachmentsText=Brak załączników -chooseFileText=Wybierz plik, który chcesz załączyć -attachmentSubmitLabel=Prześlij -attachmentCancelLabel=Anuluj -singleAttachmentText=Obiekt ma {0} załącznik -multipleAttachmentsText=Obiekt ma {0} załączników - - -layerListTitle=Widoczność warstwy tematycznej - - -locateSubmitLabel=Lokalizuj -addressLabel=Adres -coordinatesLabel=Współrzędne -addressTitle=Wprowadź adres -coordinatesTitle=Wprowadź współrzędne -xLabel=Długość geograficzna (X) -yLabel=Szerokość geograficzna (Y) -locationsLabel=Znalezione lokalizacje: -bingCulture=pl-PL -requiredFields=Wymagane pola: -requiredField=Wymagane pole: -deleteResultTooltip=Usuń wynik -resultScoreText=Wynik: -bingResultConfidenceText=Poziom ufności: - - -printSubmitLabel=Drukuj -printTitle= -printSubtitle= -printCopyright= -printTitleLabel=Tytuł -printSubtitleLabel=Podtytuł -printCopyrightLabel=Prawa autorskie -printAuthorLabel=Autor -printLayoutTemplatesLabel=Szablony układu -printFormatsLabel=Formaty -printScaleLabel=Użyj tej skali - - -filterTitleBarTooltip=Filtruj wyniki -showallTitleBarTooltip=Pokaż wszystkie -filterButtonLabel=Filtr -clearButtonLabel=Pokaż wszystkie -featuresFoundLabel=Znalezione obiekty: {0} - - -drivingDirectionLabel=Informacje dla kierowców -routeSubmitLabel=Wyznacz trasę -moveUpTooltip=Przesuń w górę -moveDownTooltip=Przesuń w dół -addLocationTooltip=kliknij obszar na mapie, aby dodać lokalizację -optionsLabel=Opcje -bestSequenceLabel=Znajdź najlepszą trasę -milesLabel=Mile -metricLabel=Km -changeRouteSymbolLabel=Zmień symbol trasy -editRouteLabel=Edytuj trasę - - -graphicalTitleBarTooltip=Wybierz obiekty -textTitleBarTooltip=Wybierz według atrybutu -graphicalsearchLabel=Wybierz obiekty według -textsearchLabel=Wybierz według atrybutu -layerLabel=Przeszukaj warstwę tematyczną -nolayerLabel=Nie zdefiniowano warstwy tematycznej do przeszukania. -searchSubmitLabel=Wyszukaj -selectionLabel=Wybrane obiekty: - - -latitudeLabel=Szerokość geograficzna -longitudeLabel=Długość geograficzna - - -gpSubmitLabel=Prześlij -inputLabel=Dane wejściowe -helpLabel=Pomoc -outputLabel=Dane wynikowe -copyToClipboard=Kopiuj do schowka -unsupportedInputType={0} dane wejściowe nie są obsługiwane -currentExtentWillBeUsedAsInput=Bieżący zasięg zostanie użyty jako wejściowy. - - -zoomLabel=Powiększ do - - -helloContent=Zmień ten tekst w pliku konfiguracyjnym. - - -widgetIDWidgetLabelTemplate=Identyfikator widżetu: {0}, etykieta widżetu: {1} -widgetIDWidgetStateTemplate=Identyfikator widżetu: {0}, stan widżetu: {1} -itemLabelWidgetIDItemIDTemplate={0} identyfikator widżetu: {1} - - -layerSelectionLabel=Wybierz warstwę -drawToolMenuLabel=Wybierz narzędzie do kreślenia -selectLabel=Wybierz -noLayersLabel=Brak warstw tematycznych -noChartDataToDisplayLabel=Brak danych diagramu do wyświetlenia + + +contextMenuText=O aplikacji ArcGIS Viewer for Flex... +aboutText=Ta aplikacja korzysta z produktu ArcGIS Viewer for Flex w wersji 3.1.\nData kompilacji 2012-12-12. +aboutLearnMoreBtn=Dowiedz się więcej +aboutCloseBtn=Zamknij + + + +close=Zamknij +minimize=Minimalizuj + + +locateExampleValueX=21.011 +locateExampleValueY=52.23 + + +clearLabel=Wyczyść +deleteLabel=Usuń +loadingLabel=Wczytywanie... +okLabel=OK +errorLabel=Błąd +problemLabel=Problem +noFeatures=Nie odnaleziono obiektów. +resultsLabel=Wyniki +saveLabel=Zapisz + + +unitsFeet=Stopy +unitsFeetAbbr=ft +unitsKilometers=Kilometry +unitsKilometersAbbr=km +unitsMeters=Metry +unitsMetersAbbr=m +unitsMiles=Mile +unitsMilesAbbr=mi +unitsYards=Jardy +unitsYardsAbbr=yd + +unitsAcres=Akry +unitsAcresAbbr=ac +unitsHectares=Hektary +unitsHectaresAbbr=ha +unitsSquareFeet=Stopy kwadratowe +unitsSquareFeetAbbr=sq ft +unitsSquareKilometers=Kilometry kwadratowe +unitsSquareKilometersAbbr=km kw +unitsSquareMeters=Metry kwadratowe +unitsSquareMetersAbbr=m kw +unitsSquareMiles=Mile kwadratowe +unitsSquareMilesAbbr=sq mi +unitsSquareYards=Jardy kwadratowe +unitsSquareYardsAbbr=sq yd + + +tocMapLayerZoomToLabel=Powiększ do +tocMapLayerTransparencyLabel=Przezroczystość +tocMapLayerOpaqueLabel=Nieprzezroczysty +tocMapLayerTransparentLabel=Przezroczysty +tocMapLayerMoveUpLabel=Przesuń w górę +tocMapLayerMoveDownLabel=Przesuń w dół +tocMapLayerRemoveLabel=Usuń +tocMapLayerDescriptionLabel=Opis +tocMapLayerDownloadLabel=Pobierz + + +incorrectLayerTypeText={0} nie jest obsługiwanym typem warstwy. Zamiast tego użyj „arcims”, „bing”, „csv”, „dynamic”, „feature”, „georss”, „image”, „kml”, „osm”, „tiled”, „wms” lub „wmts”. + + +missingConfigFileText=Nie można było odnaleźć {0} +httpResponseStatus=status odpowiedzi protokołu http: {0} +faultCode=Kod usterki: {0} +faultInfo=Informacje o usterce: {0} +faultDetail=Szczegóły dot. usterki: {0} + + +parseConfigErrorText=Wystąpił problem podczas analizy pliku konfiguracyjnego {0} +standalonePlayerExternalInterfaceErrorText=Wystąpił błąd. ExternalInterface nie działa w autonomicznym odtwarzaczu. +layerFailedToLoad:Ładowanie warstwy {0} nie powiodło się: {1} +couldNotFetchBasemapData=Pobieranie danych mapy bazowej nie powiodło się:\n{0} +couldNotConnectToPortal=Połączenie z portalem nie powiodło się. +couldNotQueryPortal=Nie można wywołać portalu. +couldNotQueryPortalItems=Nie można wywołać elementów portalu. +serverMissingCrossDomain=Brak pliku crossdomain na serwerze GIS. +serviceIsInaccessible=Usługa nie istnieje lub jest niedostępna. +unauthorizedAccess=Nie masz uprawnień dostępu do tej usługi. +unknownErrorCause=Nieznana przyczyna błędu. +resourceAccessDenied=Nie masz uprawnień dostępu do tego zasobu. +signInAborted=Logowanie przerwane. +invalidWidgetId=Nieprawidłowy parametr widgetId: {0} +printTaskExecutionError=Błąd podczas zadania drukowania:\n\n{0} +gpServiceConnectionError=Nie można połączyć z usługą GP:\n{0}\n\n{1}\n{2} +locatorServiceConnectionError=Nie można połączyć z usługą lokalizatora:\n{0}\n\n{1}\n{2} +singleLineGeocodingNotSupportedError=Lokalizator nie obsługuje geokodowania jednowierszowego. +rssFeedParsingError=Wystąpił błąd podczas analizowania źródła RSS. {0} +httpResponseNotXMLError=Odpowiedź HTTP nie jest w postaci XML. +unknownRSSFeedTypeError=Nie można określić typu źródła RSS. +initializationError=Wystąpił błąd podczas inicjowania: {0} +unableToDetermineGPExecutionType=Określenie typu realizacji geoprzetwarzania nie powiodło się: +projectionError=Błąd podczas odwzorowania geometrii: {0} +cannotRunTaskExecutionTypeUnknownError=Nie można uruchomić zadania: nieznany typ wykonania. +layerDataRetrievalError=Pobieranie danych warstw nie powiodło się. +couldNotDeleteFeature=Usunięcie obiektu nie powiodło się +couldNotUpdateFeatureError=Aktualizacja obiektu nie powiodła się, przywracanie poprzedniej wartości + + +configFileCrossDomain=Możliwy problem z ruchem międzydomenowym: {0}{1} + + +openToolTip=Kliknij, aby wyświetlić podgląd mapy +closeToolTip=Kliknij, aby zamknąć podgląd mapy + + +layerListLabel=Więcej... +basemap=Mapa bazowa + + +aboutLabel=Informacje +searchPrompt=Wpisz adres +searchResultTitleLabel=Lokalizacja +noResultsFoundLabel=Nie znaleziono wyników + + +fullExtentLabel=Pełny Zasięg +panDownLabel=Przesuń w dół +panLeftLabel=Przesuń w lewo +panRightLabel=Przesuń w prawo +panUpLabel=Przesuń w górę +previousExtentLabel=Poprzedni zasięg +nextExtentLabel=Następny zasięg +panLabel=Przesuń +zoomInLabel=Powiększenie +zoomOutLabel=Pomniejszenie + + + + + + +addTextLabel=Dodaj tekst +drawPointLabel=Rysuj punkt +drawLineLabel=Rysuj linię +drawFreehandLineLabel=Rysuj dowolną linię +drawPolygonLabel=Rysuj poligon +drawFreehandPolygonLabel=Rysuj dowolny poligon +drawRectangleLabel=Rysuj prostokąt +drawMapExtentLabel=Rysuj zasięg mapy +drawCircleLabel=Rysuj okrąg +drawEllipseLabel=Rysuj elipsę +drawClearLabel=Wyczyść rysunki + +markerStyleCircle=Koło +markerStyleCross=Krzyż +markerStyleDiamond=Romb +markerStyleSquare=Kwadrat +markerStyleTriangle=Trójkąt +markerStyleX=X + +textFont1=Arial +textFont2=Courier New +textFont3=Broadway +textFont4=Comic Sans MS +textFont5=Algerian +textFont6=Verdana + +lineStyleSolid=Pełna +lineStyleDash=Przerywana +lineStyleDot=Kropkowana +lineStyleDashDot=Kreska-kropka +lineStyleDashDotDot=Kreska-kropka-kropka + +fillStyleSolid=Pełna +fillStyleBackwardDiagonal=Ukośnie odwrotnie +fillStyleCross=Krzyż +fillStyleForwardDiagonal=Ukośnie +fillStyleHorizontal=Poziomo +fillStyleVertical=Pionowo + + + +markerAlphaLabel=Alfa +markerColorLabel=Kolor znacznika +markerSizeLabel=Rozmiar +markerStyleLabel=Styl +markerOutlineColorLabel=Kolor obrysu +markerOutlineWidthLabel=Szerokość +textLabel=Tekst +textColorLabel=Kolor +textFontLabel=Czcionka +textSizeLabel=Rozmiar +textBoldLabel=B +textBoldTooltip=Pogrubiony +textItalicLabel=I +textItalicTooltip=Kursywa +textUnderlineLabel=U +textUnderlineTooltip=Podkreślenie +lineAlphaLabel=Alfa +lineColorLabel=Kolor linii +lineStyleLabel=Styl +lineWidthLabel=Szerokość +fillAlphaLabel=Alfa +fillColorLabel=Kolor wypełnienia +fillStyleLabel=Styl +fillOutlineColorLabel=Kolor obrysu +fillOutlineWidthLabel=Szerokość + + + + +showMeasurementsLabel=Pokaż jednostki miary +distanceUnitsLabel=Jednostki odległości +areaUnitsLabel=Jednostka powierzchni +areaLabel=Powierzchnia: +perimeterLabel=Obwód: +lengthLabel=Długość: + + +bookmarksLabel=Zakładki +addbookmarksLabel=Dodaj zakładkę +addLabel=Dodaj bieżący zasięg jako zakładkę o nazwie +bookmarkSubmitLabel=Dodaj zakładkę +bookmarkMissingNameLabel=Wpisz nazwę zakładki. +deleteBookmarkTooltip=Usuń zakładkę + + +descLabel=Wyodrębnij dane i pobierz plik zip +step1Label=1. Zaznacz obszar +dataCurrentExtentLabel=1. Dane zostaną wyodrębnione z bieżącego zasięgu. +step2Label=2. Wybierz warstwy tematyczne do wyodrębnienia +step3Label=3. Wybierz format pliku +step4Label=4. Wybierz format obrazu rastrowego +step5Label=5. Odniesienie przestrzenne +extractButtonLabel=Wyodrębnij +step1ErrorLabel=Wybierz obszar zainteresowania. +step2ErrorLabel=Wybierz warstwy tematyczne do wyodrębnienia. +emptyResultsLabel=Zadanie zostało zakończone, ale nie zwróciło żadnych wyników. +saveDataFileLabel=Plik danych został utworzony. Czy chcesz go zapisać? + + +attributesLabel=Atrybuty +attachmentsLabel=Załączniki +relatedRecordsLabel=Powiązane rekordy +featureLayerOutOfScaleText=Ta warstwa tematyczna obiektu znajduje się poza zakresem skali +showAttachmentsText=Załączniki +showRelatedRecordsText=Powiązane rekordy +showAttributesText=Wróć +selectTemplateText=Wybierz szablon, aby utworzyć obiekt +noEditableLayersText=Brak edytowalnych warstw tematycznych. +noCreateCapabilityLayersText=Żadna z tych warstw tematycznych nie ma możliwości tworzenia +layerNotSupportingAttachmentsText=Ta warstwa tematyczna nie obsługuje załączników +noAttachmentsText=Brak załączników +chooseFileText=Wybierz plik, który chcesz załączyć +attachmentSubmitLabel=Prześlij +attachmentCancelLabel=Anuluj +singleAttachmentText=Obiekt ma {0} załącznik +multipleAttachmentsText=Obiekt ma {0} załączników + + +layerListTitle=Widoczność warstwy tematycznej + + +locateSubmitLabel=Lokalizuj +addressLabel=Adres +coordinatesLabel=Współrzędne +addressTitle=Wprowadź adres +coordinatesTitle=Wprowadź współrzędne +xLabel=Długość geograficzna (X) +yLabel=Szerokość geograficzna (Y) +locationsLabel=Znalezione lokalizacje: +bingCulture=pl-PL +requiredFields=Wymagane pola: +requiredField=Wymagane pole: +deleteResultTooltip=Usuń wynik +resultScoreText=Wynik: +bingResultConfidenceText=Poziom ufności: + + +printSubmitLabel=Drukuj +printTitle= +printSubtitle= +printCopyright= +printTitleLabel=Tytuł +printSubtitleLabel=Podtytuł +printCopyrightLabel=Prawa autorskie +printAuthorLabel=Autor +printLayoutTemplatesLabel=Szablony układu +printFormatsLabel=Formaty +printScaleLabel=Użyj tej skali + + +filterTitleBarTooltip=Filtruj wyniki +showallTitleBarTooltip=Pokaż wszystkie +filterButtonLabel=Filtr +clearButtonLabel=Pokaż wszystkie +featuresFoundLabel=Znalezione obiekty: {0} + + +drivingDirectionLabel=Informacje dla kierowców +routeSubmitLabel=Wyznacz trasę +moveUpTooltip=Przesuń w górę +moveDownTooltip=Przesuń w dół +addLocationTooltip=kliknij obszar na mapie, aby dodać lokalizację +optionsLabel=Opcje +bestSequenceLabel=Znajdź najlepszą trasę +milesLabel=Mile +metricLabel=Km +changeRouteSymbolLabel=Zmień symbol trasy +editRouteLabel=Edytuj trasę + + +graphicalTitleBarTooltip=Wybierz obiekty +textTitleBarTooltip=Wybierz według atrybutu +graphicalsearchLabel=Wybierz obiekty według +textsearchLabel=Wybierz według atrybutu +layerLabel=Przeszukaj warstwę tematyczną +nolayerLabel=Nie zdefiniowano warstwy tematycznej do przeszukania. +searchSubmitLabel=Wyszukaj +selectionLabel=Wybrane obiekty: + + +latitudeLabel=Szerokość geograficzna +longitudeLabel=Długość geograficzna + + +gpSubmitLabel=Prześlij +inputLabel=Dane wejściowe +helpLabel=Pomoc +outputLabel=Dane wynikowe +copyToClipboard=Kopiuj do schowka +unsupportedInputType={0} dane wejściowe nie są obsługiwane +currentExtentWillBeUsedAsInput=Bieżący zasięg zostanie użyty jako wejściowy. + + +zoomLabel=Powiększ do + + +helloContent=Zmień ten tekst w pliku konfiguracyjnym. + + +widgetIDWidgetLabelTemplate=Identyfikator widżetu: {0}, etykieta widżetu: {1} +widgetIDWidgetStateTemplate=Identyfikator widżetu: {0}, stan widżetu: {1} +itemLabelWidgetIDItemIDTemplate={0} identyfikator widżetu: {1} + + +layerSelectionLabel=Wybierz warstwę +drawToolMenuLabel=Wybierz narzędzie do kreślenia +selectLabel=Wybierz +noLayersLabel=Brak warstw tematycznych +noChartDataToDisplayLabel=Brak danych diagramu do wyświetlenia featureLayerNotVisibleText=Warstwa tematyczna obiektu jest niewidoczna lub znajduje się poza zakresem skali \ No newline at end of file diff --git a/locale/pt_BR/ViewerStrings.properties b/locale/pt_BR/ViewerStrings.properties index a31dfc3..0a6f63f 100644 --- a/locale/pt_BR/ViewerStrings.properties +++ b/locale/pt_BR/ViewerStrings.properties @@ -1,350 +1,350 @@ - - -contextMenuText=Sobre o ArcGIS Viewer for Flex... -aboutText=Este aplicativo utiliza a versão 3.1 do ArcGIS Viewer for Flex.\nData de desenvolvimento 2012-12-12. -aboutLearnMoreBtn=Obter mais informações -aboutCloseBtn=Fechar - - - -close=Fechar -minimize=Minimizar - - -locateExampleValueX=-43.1807 -locateExampleValueY=-22.9670 - - -clearLabel=Limpar -deleteLabel=Excluir -loadingLabel=Carregando... -okLabel=OK -errorLabel=Erro -problemLabel=Problema -noFeatures=Nenhuma feição foi encontrada. -resultsLabel=Resultados -saveLabel=Salvar - - -unitsFeet=Pés -unitsFeetAbbr=ft -unitsKilometers=Quilômetros -unitsKilometersAbbr=km -unitsMeters=Metros -unitsMetersAbbr=m -unitsMiles=Milhas -unitsMilesAbbr=mi -unitsYards=Jardas -unitsYardsAbbr=yd - -unitsAcres=Acres -unitsAcresAbbr=ac -unitsHectares=Hectares -unitsHectaresAbbr=ha -unitsSquareFeet=Pés Quadrados -unitsSquareFeetAbbr=sq ft -unitsSquareKilometers=Quilômetros Quadrados -unitsSquareKilometersAbbr=sq km -unitsSquareMeters=Metros Quadrados -unitsSquareMetersAbbr=sq m -unitsSquareMiles=Milhas Quadradas -unitsSquareMilesAbbr=sq mi -unitsSquareYards=Jardas Quadradas -unitsSquareYardsAbbr=sq yd - - -tocMapLayerZoomToLabel=Zoom para -tocMapLayerTransparencyLabel=Transparência -tocMapLayerOpaqueLabel=Opaco -tocMapLayerTransparentLabel=Transparente -tocMapLayerMoveUpLabel=Mover para cima -tocMapLayerMoveDownLabel=Mover para baixo -tocMapLayerRemoveLabel=Remover -tocMapLayerDescriptionLabel=Descrição -tocMapLayerDownloadLabel=Download - - -incorrectLayerTypeText={0} não é um tipo de camada suportado. Use "arcims", "bing", "csv", "dynamic", "feature", "georss", "image", "kml", "osm", "tiled", "wms" ou "wmts" - - -missingConfigFileText=Não foi possível encontrar {0} -httpResponseStatus=Status de resposta http: {0} -faultCode=Código de falha: {0} -faultInfo=Informações sobre a falha: {0} -faultDetail=Detalhes da falha: {0} - - -parseConfigErrorText=Ocorreu um problema ao analisar o arquivo de configuração {0} -standalonePlayerExternalInterfaceErrorText=Ocorreu algum erro . O ExternalInterface não funciona na reprodução Standalone. -layerFailedToLoad:{0} falha ao carregar camada: {1} -couldNotFetchBasemapData=Não foi possível obter os dados do mapa base:\n{0} -couldNotConnectToPortal=Não foi possível conectar ao Portal. -couldNotQueryPortal=Não foi possível consultar o portal. -couldNotQueryPortalItems=Não foi possível consultar os itens do portal. -serverMissingCrossDomain=O GIS Server não tem um arquivo de domínio cruzado. -serviceIsInaccessible=O serviço não existe ou está inacessível. -unauthorizedAccess=Você não tem permissões para acessar este serviço. -unknownErrorCause=Causa de erro desconhecida. -resourceAccessDenied=Você não tem permissões para acessar este recurso. -signInAborted=Registro cancelado. -invalidWidgetId=Id de widget inválido: {0} -printTaskExecutionError=Erro ao executar a tarefa de impressão:\n\n{0} -gpServiceConnectionError=Não foi possível conectar ao Serviço GP:\n{0}\n\n{1}\n{2} -locatorServiceConnectionError=Não foi possível conectar ao Serviço do Localizador:\n{0}\n\n{1}\n{2} -singleLineGeocodingNotSupportedError=O serviço do localizador não tem suporte para geocodificação de única linha. -rssFeedParsingError=Ocorreu um problema ao analisar o ficheiro RSS. {0} -httpResponseNotXMLError=A resposta de HTTP não é XML. -unknownRSSFeedTypeError=Não foi possível determinar o tipo de ficheiro RSS. -initializationError=Ocorreu um problema ao inicializar: {0} -unableToDetermineGPExecutionType=Não foi possível determinar o tipo da execução de geoprocessamento: -projectionError=Erro ao projetar geometria: {0} -cannotRunTaskExecutionTypeUnknownError=Não é possível executar a tarefa: tipo de execução desconhecido. -layerDataRetrievalError=Não foi possível recuperar os dados da camada. -couldNotDeleteFeature=Não foi possível excluir a feição -couldNotUpdateFeatureError=Não foi possível atualizar a feição, Restaurando valor antigo - - -configFileCrossDomain=Possível problema de inter-domínio: {0}{1} - - -openToolTip=Clique para abrir um mapa de visão geral -closeToolTip=Clique para fechar um mapa de visão geral - - -layerListLabel=Mais... -basemap=Mapa Base - - -aboutLabel=Sobre -searchPrompt=Inserir endereço -searchResultTitleLabel=Local -noResultsFoundLabel=Nenhum resultado encontrado - - -fullExtentLabel=Extensão Total -panDownLabel=Mover para baixo -panLeftLabel=Mover para esquerda -panRightLabel=Mover para direita -panUpLabel=Mover para cima -previousExtentLabel=Extensão Anterior -nextExtentLabel=Próxima Extensão -panLabel=Mover -zoomInLabel=Mais zoom -zoomOutLabel=Menos zoom - - - - - - -addTextLabel=Adicionar Texto -drawPointLabel=Desenhar Ponto -drawLineLabel=Desenhar Linha -drawFreehandLineLabel=Desenhar Linha à Mão Livre -drawPolygonLabel=Desenhar Polígono -drawFreehandPolygonLabel=Desenhar Polígono à Mão Livre -drawRectangleLabel=Desenhar Retângulo -drawMapExtentLabel=Desenhar Extensão do Mapa -drawCircleLabel=Desenhar Círculo -drawEllipseLabel=Desenhar Eclipse -drawClearLabel=Limpar desenhos - -markerStyleCircle=Círculo -markerStyleCross=Cruz -markerStyleDiamond=Diamante -markerStyleSquare=Quadrado -markerStyleTriangle=Triângulo -markerStyleX=X - -textFont1=Arial -textFont2=Courier New -textFont3=Broadway -textFont4=Comic Sans MS -textFont5=Algerian -textFont6=Verdana - -lineStyleSolid=Sólido -lineStyleDash=Traço -lineStyleDot=Ponto -lineStyleDashDot=Traço e Ponto -lineStyleDashDotDot=Traço, Ponto e Ponto - -fillStyleSolid=Sólido -fillStyleBackwardDiagonal=Diagonal Posterior -fillStyleCross=Cruz -fillStyleForwardDiagonal=Diagonal Frontal -fillStyleHorizontal=Horizontal -fillStyleVertical=Vertical - - - -markerAlphaLabel=Alfa -markerColorLabel=Cor do Marcador -markerSizeLabel=Tamanho -markerStyleLabel=Estilo -markerOutlineColorLabel=Cor de Contorno -markerOutlineWidthLabel=Largura -textLabel=Texto -textColorLabel=Cor -textFontLabel=Fonte -textSizeLabel=Tamanho -textBoldLabel=N -textBoldTooltip=Negrito -textItalicLabel=I -textItalicTooltip=Itálico -textUnderlineLabel=S -textUnderlineTooltip=Sublinhado -lineAlphaLabel=Alfa -lineColorLabel=Cor da Linha -lineStyleLabel=Estilo -lineWidthLabel=Largura -fillAlphaLabel=Alfa -fillColorLabel=Cor de Preenchimento -fillStyleLabel=Estilo -fillOutlineColorLabel=Cor de Contorno -fillOutlineWidthLabel=Largura - - - - -showMeasurementsLabel=Exibir Medidas -distanceUnitsLabel=Unidades de Distância -areaUnitsLabel=Unidades de Área -areaLabel=Área: -perimeterLabel=Perímetro: -lengthLabel=Comprimento: - - -bookmarksLabel=Marcadores -addbookmarksLabel=Adicionar Marcador -addLabel=Adiciona a extensão atual como um marcador nomeado -bookmarkSubmitLabel=Adicionar Marcador -bookmarkMissingNameLabel=Insira um nome para o marcador. -deleteBookmarkTooltip=Excluir marcador - - -descLabel=Extrair dados e fazer download do arquivo zip -step1Label=1. Selecionar área -dataCurrentExtentLabel=1. Os dados serão extraídos da extensão atual. -step2Label=2. Selecionar camadas para extrair -step3Label=3. Selecionar formato de arquivo -step4Label=4. Selecionar o formato raster -step5Label=5. SpatialReference -extractButtonLabel=Extrair -step1ErrorLabel=Selecione uma área de interesse. -step2ErrorLabel=Selecione as camadas para extrair. -emptyResultsLabel=Tarefa concluída, mas não retornou nenhum resultado. -saveDataFileLabel=Arquivo de dados criado. Deseja salvá-lo? - - -attributesLabel=Atributos -attachmentsLabel=Anexos -relatedRecordsLabel=Registros Relacionados -featureLayerOutOfScaleText=Esta camada de feição está fora da faixa de escala -showAttachmentsText=Anexos -showRelatedRecordsText=Registros relacionados -showAttributesText=Voltar -selectTemplateText=Selecione o modelo para criar a feição -noEditableLayersText=Nenhuma camada pode ser editada. -noCreateCapabilityLayersText=Nenhuma das camadas criou o recurso -layerNotSupportingAttachmentsText=Esta camada não suporta anexos -noAttachmentsText=Sem anexos -chooseFileText=Escolha um arquivo para anexar -attachmentSubmitLabel=Enviar -attachmentCancelLabel=Cancelar -singleAttachmentText=A feição tem {0} anexo -multipleAttachmentsText=A feição tem {0} anexos - - -layerListTitle=Visibilidade da Camada - - -locateSubmitLabel=Localizar -addressLabel=Endereço -coordinatesLabel=Coordenadas -addressTitle=Insira o endereço -coordinatesTitle=Insira as coordenadas -xLabel=Longitude (X) -yLabel=Latitude (Y) -locationsLabel=Locais encontrados: -bingCulture=pt-BR -requiredFields=Campos obrigatórios: -requiredField=Campo obrigatório: -deleteResultTooltip=Excluir resultado -resultScoreText=Pontuação: -bingResultConfidenceText=Confiança: - - -printSubmitLabel=Imprimir -printTitle= -printSubtitle= -printCopyright= -printTitleLabel=Título -printSubtitleLabel=Subtítulo -printCopyrightLabel=Direitos Autorais -printAuthorLabel=Autor -printLayoutTemplatesLabel=Modelos de layout -printFormatsLabel=Formatos -printScaleLabel=Utilize esta escala - - -filterTitleBarTooltip=Filtrar resultados -showallTitleBarTooltip=Mostrar Todos -filterButtonLabel=Filtro -clearButtonLabel=Mostrar Todos -featuresFoundLabel=Feições encontradas: {0} - - -drivingDirectionLabel=Direção -routeSubmitLabel=Obter Direção -moveUpTooltip=Mover para cima -moveDownTooltip=Mover para baixo -addLocationTooltip=clique no mapa para adicionar a localização -optionsLabel=Opções -bestSequenceLabel=Encontrar a melhor sequência -milesLabel=Milhas -metricLabel=Km -changeRouteSymbolLabel=Alterar símbolo da rota -editRouteLabel=Editar rota - - -graphicalTitleBarTooltip=Selecionar feições -textTitleBarTooltip=Selecionar por atributo -graphicalsearchLabel=Selecionar feições por -textsearchLabel=Selecionar por atributo -layerLabel=Pesquisar camada -nolayerLabel=Nenhuma camada de pesquisa definida. -searchSubmitLabel=Pesquisar -selectionLabel=Feições selecionadas: - - -latitudeLabel=Latitude -longitudeLabel=Longitude - - -gpSubmitLabel=Enviar -inputLabel=Entrada -helpLabel=Ajuda -outputLabel=Saída -copyToClipboard=Copiar para Área de Transferência -unsupportedInputType=A entrada {0} não é suportada -currentExtentWillBeUsedAsInput=A extensão atual será utilizada como entrada. - - -zoomLabel=Zoom para - - -helloContent=Altere este texto no arquivo de configuração. - - -widgetIDWidgetLabelTemplate=Id do Widget: {0}, rótulo do widget: {1} -widgetIDWidgetStateTemplate=Id do Widget: {0}, status do widget: {1} -itemLabelWidgetIDItemIDTemplate={0} ID do Widget: {1} - - -layerSelectionLabel=Selecionar camada -drawToolMenuLabel=Selecionar ferramenta de desenho -selectLabel=Selecionar -noLayersLabel=Nenhum camada -noChartDataToDisplayLabel=Nenhum dado de gráfico para exibir + + +contextMenuText=Sobre o ArcGIS Viewer for Flex... +aboutText=Este aplicativo utiliza a versão 3.1 do ArcGIS Viewer for Flex.\nData de desenvolvimento 2012-12-12. +aboutLearnMoreBtn=Obter mais informações +aboutCloseBtn=Fechar + + + +close=Fechar +minimize=Minimizar + + +locateExampleValueX=-43.1807 +locateExampleValueY=-22.9670 + + +clearLabel=Limpar +deleteLabel=Excluir +loadingLabel=Carregando... +okLabel=OK +errorLabel=Erro +problemLabel=Problema +noFeatures=Nenhuma feição foi encontrada. +resultsLabel=Resultados +saveLabel=Salvar + + +unitsFeet=Pés +unitsFeetAbbr=ft +unitsKilometers=Quilômetros +unitsKilometersAbbr=km +unitsMeters=Metros +unitsMetersAbbr=m +unitsMiles=Milhas +unitsMilesAbbr=mi +unitsYards=Jardas +unitsYardsAbbr=yd + +unitsAcres=Acres +unitsAcresAbbr=ac +unitsHectares=Hectares +unitsHectaresAbbr=ha +unitsSquareFeet=Pés Quadrados +unitsSquareFeetAbbr=sq ft +unitsSquareKilometers=Quilômetros Quadrados +unitsSquareKilometersAbbr=sq km +unitsSquareMeters=Metros Quadrados +unitsSquareMetersAbbr=sq m +unitsSquareMiles=Milhas Quadradas +unitsSquareMilesAbbr=sq mi +unitsSquareYards=Jardas Quadradas +unitsSquareYardsAbbr=sq yd + + +tocMapLayerZoomToLabel=Zoom para +tocMapLayerTransparencyLabel=Transparência +tocMapLayerOpaqueLabel=Opaco +tocMapLayerTransparentLabel=Transparente +tocMapLayerMoveUpLabel=Mover para cima +tocMapLayerMoveDownLabel=Mover para baixo +tocMapLayerRemoveLabel=Remover +tocMapLayerDescriptionLabel=Descrição +tocMapLayerDownloadLabel=Download + + +incorrectLayerTypeText={0} não é um tipo de camada suportado. Use "arcims", "bing", "csv", "dynamic", "feature", "georss", "image", "kml", "osm", "tiled", "wms" ou "wmts" + + +missingConfigFileText=Não foi possível encontrar {0} +httpResponseStatus=Status de resposta http: {0} +faultCode=Código de falha: {0} +faultInfo=Informações sobre a falha: {0} +faultDetail=Detalhes da falha: {0} + + +parseConfigErrorText=Ocorreu um problema ao analisar o arquivo de configuração {0} +standalonePlayerExternalInterfaceErrorText=Ocorreu algum erro . O ExternalInterface não funciona na reprodução Standalone. +layerFailedToLoad:{0} falha ao carregar camada: {1} +couldNotFetchBasemapData=Não foi possível obter os dados do mapa base:\n{0} +couldNotConnectToPortal=Não foi possível conectar ao Portal. +couldNotQueryPortal=Não foi possível consultar o portal. +couldNotQueryPortalItems=Não foi possível consultar os itens do portal. +serverMissingCrossDomain=O GIS Server não tem um arquivo de domínio cruzado. +serviceIsInaccessible=O serviço não existe ou está inacessível. +unauthorizedAccess=Você não tem permissões para acessar este serviço. +unknownErrorCause=Causa de erro desconhecida. +resourceAccessDenied=Você não tem permissões para acessar este recurso. +signInAborted=Registro cancelado. +invalidWidgetId=Id de widget inválido: {0} +printTaskExecutionError=Erro ao executar a tarefa de impressão:\n\n{0} +gpServiceConnectionError=Não foi possível conectar ao Serviço GP:\n{0}\n\n{1}\n{2} +locatorServiceConnectionError=Não foi possível conectar ao Serviço do Localizador:\n{0}\n\n{1}\n{2} +singleLineGeocodingNotSupportedError=O serviço do localizador não tem suporte para geocodificação de única linha. +rssFeedParsingError=Ocorreu um problema ao analisar o ficheiro RSS. {0} +httpResponseNotXMLError=A resposta de HTTP não é XML. +unknownRSSFeedTypeError=Não foi possível determinar o tipo de ficheiro RSS. +initializationError=Ocorreu um problema ao inicializar: {0} +unableToDetermineGPExecutionType=Não foi possível determinar o tipo da execução de geoprocessamento: +projectionError=Erro ao projetar geometria: {0} +cannotRunTaskExecutionTypeUnknownError=Não é possível executar a tarefa: tipo de execução desconhecido. +layerDataRetrievalError=Não foi possível recuperar os dados da camada. +couldNotDeleteFeature=Não foi possível excluir a feição +couldNotUpdateFeatureError=Não foi possível atualizar a feição, Restaurando valor antigo + + +configFileCrossDomain=Possível problema de inter-domínio: {0}{1} + + +openToolTip=Clique para abrir um mapa de visão geral +closeToolTip=Clique para fechar um mapa de visão geral + + +layerListLabel=Mais... +basemap=Mapa Base + + +aboutLabel=Sobre +searchPrompt=Inserir endereço +searchResultTitleLabel=Local +noResultsFoundLabel=Nenhum resultado encontrado + + +fullExtentLabel=Extensão Total +panDownLabel=Mover para baixo +panLeftLabel=Mover para esquerda +panRightLabel=Mover para direita +panUpLabel=Mover para cima +previousExtentLabel=Extensão Anterior +nextExtentLabel=Próxima Extensão +panLabel=Mover +zoomInLabel=Mais zoom +zoomOutLabel=Menos zoom + + + + + + +addTextLabel=Adicionar Texto +drawPointLabel=Desenhar Ponto +drawLineLabel=Desenhar Linha +drawFreehandLineLabel=Desenhar Linha à Mão Livre +drawPolygonLabel=Desenhar Polígono +drawFreehandPolygonLabel=Desenhar Polígono à Mão Livre +drawRectangleLabel=Desenhar Retângulo +drawMapExtentLabel=Desenhar Extensão do Mapa +drawCircleLabel=Desenhar Círculo +drawEllipseLabel=Desenhar Eclipse +drawClearLabel=Limpar desenhos + +markerStyleCircle=Círculo +markerStyleCross=Cruz +markerStyleDiamond=Diamante +markerStyleSquare=Quadrado +markerStyleTriangle=Triângulo +markerStyleX=X + +textFont1=Arial +textFont2=Courier New +textFont3=Broadway +textFont4=Comic Sans MS +textFont5=Algerian +textFont6=Verdana + +lineStyleSolid=Sólido +lineStyleDash=Traço +lineStyleDot=Ponto +lineStyleDashDot=Traço e Ponto +lineStyleDashDotDot=Traço, Ponto e Ponto + +fillStyleSolid=Sólido +fillStyleBackwardDiagonal=Diagonal Posterior +fillStyleCross=Cruz +fillStyleForwardDiagonal=Diagonal Frontal +fillStyleHorizontal=Horizontal +fillStyleVertical=Vertical + + + +markerAlphaLabel=Alfa +markerColorLabel=Cor do Marcador +markerSizeLabel=Tamanho +markerStyleLabel=Estilo +markerOutlineColorLabel=Cor de Contorno +markerOutlineWidthLabel=Largura +textLabel=Texto +textColorLabel=Cor +textFontLabel=Fonte +textSizeLabel=Tamanho +textBoldLabel=N +textBoldTooltip=Negrito +textItalicLabel=I +textItalicTooltip=Itálico +textUnderlineLabel=S +textUnderlineTooltip=Sublinhado +lineAlphaLabel=Alfa +lineColorLabel=Cor da Linha +lineStyleLabel=Estilo +lineWidthLabel=Largura +fillAlphaLabel=Alfa +fillColorLabel=Cor de Preenchimento +fillStyleLabel=Estilo +fillOutlineColorLabel=Cor de Contorno +fillOutlineWidthLabel=Largura + + + + +showMeasurementsLabel=Exibir Medidas +distanceUnitsLabel=Unidades de Distância +areaUnitsLabel=Unidades de Área +areaLabel=Área: +perimeterLabel=Perímetro: +lengthLabel=Comprimento: + + +bookmarksLabel=Marcadores +addbookmarksLabel=Adicionar Marcador +addLabel=Adiciona a extensão atual como um marcador nomeado +bookmarkSubmitLabel=Adicionar Marcador +bookmarkMissingNameLabel=Insira um nome para o marcador. +deleteBookmarkTooltip=Excluir marcador + + +descLabel=Extrair dados e fazer download do arquivo zip +step1Label=1. Selecionar área +dataCurrentExtentLabel=1. Os dados serão extraídos da extensão atual. +step2Label=2. Selecionar camadas para extrair +step3Label=3. Selecionar formato de arquivo +step4Label=4. Selecionar o formato raster +step5Label=5. SpatialReference +extractButtonLabel=Extrair +step1ErrorLabel=Selecione uma área de interesse. +step2ErrorLabel=Selecione as camadas para extrair. +emptyResultsLabel=Tarefa concluída, mas não retornou nenhum resultado. +saveDataFileLabel=Arquivo de dados criado. Deseja salvá-lo? + + +attributesLabel=Atributos +attachmentsLabel=Anexos +relatedRecordsLabel=Registros Relacionados +featureLayerOutOfScaleText=Esta camada de feição está fora da faixa de escala +showAttachmentsText=Anexos +showRelatedRecordsText=Registros relacionados +showAttributesText=Voltar +selectTemplateText=Selecione o modelo para criar a feição +noEditableLayersText=Nenhuma camada pode ser editada. +noCreateCapabilityLayersText=Nenhuma das camadas criou o recurso +layerNotSupportingAttachmentsText=Esta camada não suporta anexos +noAttachmentsText=Sem anexos +chooseFileText=Escolha um arquivo para anexar +attachmentSubmitLabel=Enviar +attachmentCancelLabel=Cancelar +singleAttachmentText=A feição tem {0} anexo +multipleAttachmentsText=A feição tem {0} anexos + + +layerListTitle=Visibilidade da Camada + + +locateSubmitLabel=Localizar +addressLabel=Endereço +coordinatesLabel=Coordenadas +addressTitle=Insira o endereço +coordinatesTitle=Insira as coordenadas +xLabel=Longitude (X) +yLabel=Latitude (Y) +locationsLabel=Locais encontrados: +bingCulture=pt-BR +requiredFields=Campos obrigatórios: +requiredField=Campo obrigatório: +deleteResultTooltip=Excluir resultado +resultScoreText=Pontuação: +bingResultConfidenceText=Confiança: + + +printSubmitLabel=Imprimir +printTitle= +printSubtitle= +printCopyright= +printTitleLabel=Título +printSubtitleLabel=Subtítulo +printCopyrightLabel=Direitos Autorais +printAuthorLabel=Autor +printLayoutTemplatesLabel=Modelos de layout +printFormatsLabel=Formatos +printScaleLabel=Utilize esta escala + + +filterTitleBarTooltip=Filtrar resultados +showallTitleBarTooltip=Mostrar Todos +filterButtonLabel=Filtro +clearButtonLabel=Mostrar Todos +featuresFoundLabel=Feições encontradas: {0} + + +drivingDirectionLabel=Direção +routeSubmitLabel=Obter Direção +moveUpTooltip=Mover para cima +moveDownTooltip=Mover para baixo +addLocationTooltip=clique no mapa para adicionar a localização +optionsLabel=Opções +bestSequenceLabel=Encontrar a melhor sequência +milesLabel=Milhas +metricLabel=Km +changeRouteSymbolLabel=Alterar símbolo da rota +editRouteLabel=Editar rota + + +graphicalTitleBarTooltip=Selecionar feições +textTitleBarTooltip=Selecionar por atributo +graphicalsearchLabel=Selecionar feições por +textsearchLabel=Selecionar por atributo +layerLabel=Pesquisar camada +nolayerLabel=Nenhuma camada de pesquisa definida. +searchSubmitLabel=Pesquisar +selectionLabel=Feições selecionadas: + + +latitudeLabel=Latitude +longitudeLabel=Longitude + + +gpSubmitLabel=Enviar +inputLabel=Entrada +helpLabel=Ajuda +outputLabel=Saída +copyToClipboard=Copiar para Área de Transferência +unsupportedInputType=A entrada {0} não é suportada +currentExtentWillBeUsedAsInput=A extensão atual será utilizada como entrada. + + +zoomLabel=Zoom para + + +helloContent=Altere este texto no arquivo de configuração. + + +widgetIDWidgetLabelTemplate=Id do Widget: {0}, rótulo do widget: {1} +widgetIDWidgetStateTemplate=Id do Widget: {0}, status do widget: {1} +itemLabelWidgetIDItemIDTemplate={0} ID do Widget: {1} + + +layerSelectionLabel=Selecionar camada +drawToolMenuLabel=Selecionar ferramenta de desenho +selectLabel=Selecionar +noLayersLabel=Nenhum camada +noChartDataToDisplayLabel=Nenhum dado de gráfico para exibir featureLayerNotVisibleText=a camada de feição não está visível ou está fora da faixa de escala \ No newline at end of file diff --git a/locale/ro_RO/ViewerStrings.properties b/locale/ro_RO/ViewerStrings.properties index 54680ba..6f3389e 100644 --- a/locale/ro_RO/ViewerStrings.properties +++ b/locale/ro_RO/ViewerStrings.properties @@ -1,350 +1,350 @@ - - -contextMenuText=Despre ArcGIS Viewer for Flex... -aboutText=Această aplicaţie utilizează ArcGIS Viewer for Flex versiunea 3.1.\nData creării 2012-12-12. -aboutLearnMoreBtn=Aflaţi mai multe -aboutCloseBtn=Închidere - - - -close=Închidere -minimize=Minimizare - - -locateExampleValueX=26.0875 -locateExampleValueY=44.4275 - - -clearLabel=Golire -deleteLabel=Ştergere -loadingLabel=Încărcare... -okLabel=OK -errorLabel=Eroare -problemLabel=Problemă -noFeatures=Nu a fost găsit niciun obiect spaţial. -resultsLabel=Rezultate -saveLabel=Salvare - - -unitsFeet=Ft -unitsFeetAbbr=ft -unitsKilometers=Kilometri -unitsKilometersAbbr=km -unitsMeters=Metri -unitsMetersAbbr=m -unitsMiles=Mile -unitsMilesAbbr=mi. -unitsYards=Yarzi -unitsYardsAbbr=yd - -unitsAcres=Acri -unitsAcresAbbr=ac -unitsHectares=Hectare -unitsHectaresAbbr=ha -unitsSquareFeet=Ft pătraţi -unitsSquareFeetAbbr=ft pătraţi -unitsSquareKilometers=Kilometri pătraţi -unitsSquareKilometersAbbr=km pătraţi -unitsSquareMeters=Metri pătraţi -unitsSquareMetersAbbr=m pătraţi -unitsSquareMiles=Mile pătrate -unitsSquareMilesAbbr=mi pătrate -unitsSquareYards=Yarzi pătraţi -unitsSquareYardsAbbr=yd pătraţi - - -tocMapLayerZoomToLabel=Transfocare la -tocMapLayerTransparencyLabel=Transparenţă -tocMapLayerOpaqueLabel=Opac -tocMapLayerTransparentLabel=Transparent -tocMapLayerMoveUpLabel=Deplasare în sus -tocMapLayerMoveDownLabel=Deplasare în jos -tocMapLayerRemoveLabel=Eliminare -tocMapLayerDescriptionLabel=Descriere -tocMapLayerDownloadLabel=Descărcare - - -incorrectLayerTypeText={0} nu este un tip de strat tematic acceptat. În loc, utilizaţi "arcims", "bing", "csv", "dynamic", "feature", "georss", "image", "kml", "osm", "tiled", "wms" sau "wmts". - - -missingConfigFileText={0} nu a putut fi găsit -httpResponseStatus=Stare răspuns http: {0} -faultCode=Cod defecţiune: {0} -faultInfo=Informaţii defecţiune: {0} -faultDetail=Detalii defecţiune: {0} - - -parseConfigErrorText=A survenit o eroare la analiza fişierului de configurare {0} -standalonePlayerExternalInterfaceErrorText=A survenit o eroare. Interfaţa externă nu funcţionează în playerul independent. -layerFailedToLoad:Încărcarea stratului tematic {0} a eşuat: {1} -couldNotFetchBasemapData=Nu au putut fi preluate date pentru harta fundal:\n{0} -couldNotConnectToPortal=Nu a putut fi efectuată conectarea la Portal. -couldNotQueryPortal=Nu s-a putut interoga portalul. -couldNotQueryPortalItems=Nu s-au putut interoga elemente din portal. -serverMissingCrossDomain=Din serverul GIS lipseşte un fişier crossdomain. -serviceIsInaccessible=Serviciul nu există sau este inaccesibil. -unauthorizedAccess=Nu aveţi permisiuni pentru a accesa acest serviciu. -unknownErrorCause=Cauză eroare necunoscută. -resourceAccessDenied=Nu aveţi permisiuni pentru a accesa această resursă. -signInAborted=S-a renunţat la autentificare. -invalidWidgetId=ID widget nevalid: {0} -printTaskExecutionError=Eroare la executarea procesului de imprimare:\n\n{0} -gpServiceConnectionError=Conectarea la serviciul GP nu a putut fi efectuată:\n{0}\n\n{1}\n{2} -locatorServiceConnectionError=Conectarea la serviciul Locator nu a putut fi efectuată:\n{0}\n\n{1}\n{2} -singleLineGeocodingNotSupportedError=Serviciul Locator nu suportă geocodificare pe o singură linie. -rssFeedParsingError=A survenit o problemă la analizarea feedului RSS. {0} -httpResponseNotXMLError=Răspunsul HTTP nu este XML. -unknownRSSFeedTypeError=Nu se poate determina tipul feedului RSS. -initializationError=A survenit o problemă la iniţializare: {0} -unableToDetermineGPExecutionType=Nu a putut fi determinat tipul de execuţie a geoprocesorului: -projectionError=Eroare la proiectarea geometriei: {0} -cannotRunTaskExecutionTypeUnknownError=Nu se poate executa procesul de lucru: tip execuţie necunoscut. -layerDataRetrievalError=Nu au putut fi preluate date pentru stratul tematic. -couldNotDeleteFeature=Obiectul spaţial nu a putut fi şters -couldNotUpdateFeatureError=Obiectul spaţial nu a putut fi actualizat, se restaurează valoarea veche - - -configFileCrossDomain=Posibilă problemă interdomenii: {0}{1} - - -openToolTip=Faceţi clic pentru a deschide harta de verificare -closeToolTip=Faceţi clic pentru a închide harta de verificare - - -layerListLabel=Mai mult... -basemap=Hartă fundal - - -aboutLabel=Despre -searchPrompt=Introducere adresă -searchResultTitleLabel=Locaţie -noResultsFoundLabel=Niciun rezultat găsit - - -fullExtentLabel=Extindere completă -panDownLabel=Panoramare în jos -panLeftLabel=Panoramare la stânga -panRightLabel=Panoramare la dreapta -panUpLabel=Panoramare în sus -previousExtentLabel=Extinderea anterioară -nextExtentLabel=Extinderea următoare -panLabel=Panoramare -zoomInLabel=Apropiere -zoomOutLabel=Îndepărtare - - - - - - -addTextLabel=Adăugare text -drawPointLabel=Trasare punct -drawLineLabel=Trasare linie -drawFreehandLineLabel=Trasare linie liberă -drawPolygonLabel=Trasare poligon -drawFreehandPolygonLabel=Trasare poligon liber -drawRectangleLabel=Trasare dreptunghi -drawMapExtentLabel=Trasare extindere hartă -drawCircleLabel=Trasare cerc -drawEllipseLabel=Trasare elipsă -drawClearLabel=Ştergere desene - -markerStyleCircle=Cerc -markerStyleCross=Cruce -markerStyleDiamond=Diamant -markerStyleSquare=Pătrat -markerStyleTriangle=Triunghi -markerStyleX=X - -textFont1=Arial -textFont2=Courier New -textFont3=Broadway -textFont4=Comic Sans MS -textFont5=Algerian -textFont6=Verdana - -lineStyleSolid=Linie continuă -lineStyleDash=Linie întreruptă -lineStyleDot=Linie punctată -lineStyleDashDot=Linie punct -lineStyleDashDotDot=Linie punct punct - -fillStyleSolid=Linie continuă -fillStyleBackwardDiagonal=Diagonală înapoi -fillStyleCross=Cruce -fillStyleForwardDiagonal=Diagonală înainte -fillStyleHorizontal=Orizontal -fillStyleVertical=Vertical - - - -markerAlphaLabel=Alfa -markerColorLabel=Culoare marcator -markerSizeLabel=Dimensiune -markerStyleLabel=Stil -markerOutlineColorLabel=Culoare contur -markerOutlineWidthLabel=Lăţime -textLabel=Text -textColorLabel=Culoare -textFontLabel=Font -textSizeLabel=Dimensiune -textBoldLabel=B -textBoldTooltip=Aldin -textItalicLabel=I -textItalicTooltip=Cursiv -textUnderlineLabel=U -textUnderlineTooltip=Subliniere -lineAlphaLabel=Alfa -lineColorLabel=Culoare linie -lineStyleLabel=Stil -lineWidthLabel=Lăţime -fillAlphaLabel=Alfa -fillColorLabel=Culoare de umplere -fillStyleLabel=Stil -fillOutlineColorLabel=Culoare contur -fillOutlineWidthLabel=Lăţime - - - - -showMeasurementsLabel=Afişare măsurători -distanceUnitsLabel=Unităţi pentru distanţă -areaUnitsLabel=Unităţi pentru suprafaţă -areaLabel=Suprafaţă: -perimeterLabel=Perimetru: -lengthLabel=Lungime: - - -bookmarksLabel=Semne de carte -addbookmarksLabel=Adăugare semn de carte -addLabel=Adăugare extindere curentă ca semn de carte denumit -bookmarkSubmitLabel=Adăugare semn de carte -bookmarkMissingNameLabel=Introduceţi un nume pentru semnul de carte. -deleteBookmarkTooltip=Ştergere semn de carte - - -descLabel=Extrageţi date şi descărcaţi fişierul zip -step1Label=1. Selectare suprafaţă -dataCurrentExtentLabel=1. Datele vor fi extrase din extinderea dvs. curentă. -step2Label=2. Selectare straturi tematice de extras -step3Label=3. Selectare format de fişiere -step4Label=4. Selectare format raster -step5Label=5. Referinţă spaţială -extractButtonLabel=Extragere -step1ErrorLabel=Selectaţi o suprafaţă de interes. -step2ErrorLabel=Selectaţi straturi tematice de extras. -emptyResultsLabel=Operaţia a fost finalizată, însă nu a returnat niciun rezultat. -saveDataFileLabel=Fişier de date creat. Doriţi să îl salvaţi? - - -attributesLabel=Atribute -attachmentsLabel=Ataşări -relatedRecordsLabel=Înregistrări corelate -featureLayerOutOfScaleText=Acest strat tematic de obiecte spaţiale nu se încadrează în intervalul de scară -showAttachmentsText=Ataşări -showRelatedRecordsText=Înregistrări corelate -showAttributesText=Revenire -selectTemplateText=Selectare şablon pentru a crea obiectul spaţial -noEditableLayersText=Niciun strat tematic editabil. -noCreateCapabilityLayersText=Niciunul din straturile tematice nu a creat o capabilitate -layerNotSupportingAttachmentsText=Acest strat tematic nu acceptă ataşări -noAttachmentsText=Nicio ataşare -chooseFileText=Alegeţi un fişier pentru ataşare -attachmentSubmitLabel=Trimitere -attachmentCancelLabel=Anulare -singleAttachmentText=Obiectul spaţial are {0} ataşare -multipleAttachmentsText=Obiectul spaţial are {0} ataşări - - -layerListTitle=Vizibilitate strat tematic - - -locateSubmitLabel=Localizare -addressLabel=Adresă -coordinatesLabel=Coordonate -addressTitle=Introducere adresă -coordinatesTitle=Introducere coordonate -xLabel=Longitudine (X) -yLabel=Latitudine (Y) -locationsLabel=Locaţii găsite: -bingCulture=ro-RO -requiredFields=Câmpuri obligatorii: -requiredField=Câmp obligatoriu: -deleteResultTooltip=Ştergere rezultat -resultScoreText=Scor: -bingResultConfidenceText=Încredere: - - -printSubmitLabel=Imprimare -printTitle= -printSubtitle= -printCopyright= -printTitleLabel=Titlu -printSubtitleLabel=Subtitlu -printCopyrightLabel=Drepturi de autor -printAuthorLabel=Autor -printLayoutTemplatesLabel=Şabloane de configuraţii -printFormatsLabel=Formate -printScaleLabel=Utilizare această scară - - -filterTitleBarTooltip=Filtrare rezultate -showallTitleBarTooltip=Afişare toate -filterButtonLabel=Filtru -clearButtonLabel=Afişare toate -featuresFoundLabel=Obiecte spaţiale găsite: {0} - - -drivingDirectionLabel=Indicaţii pentru conducători auto -routeSubmitLabel=Obţinere indicaţii -moveUpTooltip=Deplasare în sus -moveDownTooltip=Deplasare în jos -addLocationTooltip=clic pe hartă pentru a adăuga o locaţie -optionsLabel=Opţiuni -bestSequenceLabel=Găsire ordine optimă -milesLabel=Mile -metricLabel=Km -changeRouteSymbolLabel=Modificare simbol rută -editRouteLabel=Editare rută - - -graphicalTitleBarTooltip=Selectare obiecte spaţiale -textTitleBarTooltip=Selectare după atribut -graphicalsearchLabel=Selectare obiecte spaţiale după -textsearchLabel=Selectare după atribut -layerLabel=Căutare strat tematic -nolayerLabel=Nu a fost definit niciun strat tematic de căutare. -searchSubmitLabel=Căutare -selectionLabel=Obiecte spaţiale selectate: - - -latitudeLabel=Latitudine -longitudeLabel=Longitudine - - -gpSubmitLabel=Trimitere -inputLabel=Intrare -helpLabel=Ajutor -outputLabel=Ieşire -copyToClipboard=Copiere în Clipboard -unsupportedInputType=Intrarea {0} nu este acceptată -currentExtentWillBeUsedAsInput=Extinderea curentă va fi utilizată ca parametru de intrare. - - -zoomLabel=Transfocare la - - -helloContent=Modificaţi acest text în fişierul de configurare. - - -widgetIDWidgetLabelTemplate=ID widget: {0}, etichetă widget: {1} -widgetIDWidgetStateTemplate=ID widget: {0}, stare widget: {1} -itemLabelWidgetIDItemIDTemplate=ID widget {0}: {1} - - -layerSelectionLabel=Selectare strat tematic -drawToolMenuLabel=Selectare instrument de trasare -selectLabel=Selectare -noLayersLabel=Niciun strat tematic -noChartDataToDisplayLabel=Nu există date de afişat pentru diagramă + + +contextMenuText=Despre ArcGIS Viewer for Flex... +aboutText=Această aplicaţie utilizează ArcGIS Viewer for Flex versiunea 3.1.\nData creării 2012-12-12. +aboutLearnMoreBtn=Aflaţi mai multe +aboutCloseBtn=Închidere + + + +close=Închidere +minimize=Minimizare + + +locateExampleValueX=26.0875 +locateExampleValueY=44.4275 + + +clearLabel=Golire +deleteLabel=Ştergere +loadingLabel=Încărcare... +okLabel=OK +errorLabel=Eroare +problemLabel=Problemă +noFeatures=Nu a fost găsit niciun obiect spaţial. +resultsLabel=Rezultate +saveLabel=Salvare + + +unitsFeet=Ft +unitsFeetAbbr=ft +unitsKilometers=Kilometri +unitsKilometersAbbr=km +unitsMeters=Metri +unitsMetersAbbr=m +unitsMiles=Mile +unitsMilesAbbr=mi. +unitsYards=Yarzi +unitsYardsAbbr=yd + +unitsAcres=Acri +unitsAcresAbbr=ac +unitsHectares=Hectare +unitsHectaresAbbr=ha +unitsSquareFeet=Ft pătraţi +unitsSquareFeetAbbr=ft pătraţi +unitsSquareKilometers=Kilometri pătraţi +unitsSquareKilometersAbbr=km pătraţi +unitsSquareMeters=Metri pătraţi +unitsSquareMetersAbbr=m pătraţi +unitsSquareMiles=Mile pătrate +unitsSquareMilesAbbr=mi pătrate +unitsSquareYards=Yarzi pătraţi +unitsSquareYardsAbbr=yd pătraţi + + +tocMapLayerZoomToLabel=Transfocare la +tocMapLayerTransparencyLabel=Transparenţă +tocMapLayerOpaqueLabel=Opac +tocMapLayerTransparentLabel=Transparent +tocMapLayerMoveUpLabel=Deplasare în sus +tocMapLayerMoveDownLabel=Deplasare în jos +tocMapLayerRemoveLabel=Eliminare +tocMapLayerDescriptionLabel=Descriere +tocMapLayerDownloadLabel=Descărcare + + +incorrectLayerTypeText={0} nu este un tip de strat tematic acceptat. În loc, utilizaţi "arcims", "bing", "csv", "dynamic", "feature", "georss", "image", "kml", "osm", "tiled", "wms" sau "wmts". + + +missingConfigFileText={0} nu a putut fi găsit +httpResponseStatus=Stare răspuns http: {0} +faultCode=Cod defecţiune: {0} +faultInfo=Informaţii defecţiune: {0} +faultDetail=Detalii defecţiune: {0} + + +parseConfigErrorText=A survenit o eroare la analiza fişierului de configurare {0} +standalonePlayerExternalInterfaceErrorText=A survenit o eroare. Interfaţa externă nu funcţionează în playerul independent. +layerFailedToLoad:Încărcarea stratului tematic {0} a eşuat: {1} +couldNotFetchBasemapData=Nu au putut fi preluate date pentru harta fundal:\n{0} +couldNotConnectToPortal=Nu a putut fi efectuată conectarea la Portal. +couldNotQueryPortal=Nu s-a putut interoga portalul. +couldNotQueryPortalItems=Nu s-au putut interoga elemente din portal. +serverMissingCrossDomain=Din serverul GIS lipseşte un fişier crossdomain. +serviceIsInaccessible=Serviciul nu există sau este inaccesibil. +unauthorizedAccess=Nu aveţi permisiuni pentru a accesa acest serviciu. +unknownErrorCause=Cauză eroare necunoscută. +resourceAccessDenied=Nu aveţi permisiuni pentru a accesa această resursă. +signInAborted=S-a renunţat la autentificare. +invalidWidgetId=ID widget nevalid: {0} +printTaskExecutionError=Eroare la executarea procesului de imprimare:\n\n{0} +gpServiceConnectionError=Conectarea la serviciul GP nu a putut fi efectuată:\n{0}\n\n{1}\n{2} +locatorServiceConnectionError=Conectarea la serviciul Locator nu a putut fi efectuată:\n{0}\n\n{1}\n{2} +singleLineGeocodingNotSupportedError=Serviciul Locator nu suportă geocodificare pe o singură linie. +rssFeedParsingError=A survenit o problemă la analizarea feedului RSS. {0} +httpResponseNotXMLError=Răspunsul HTTP nu este XML. +unknownRSSFeedTypeError=Nu se poate determina tipul feedului RSS. +initializationError=A survenit o problemă la iniţializare: {0} +unableToDetermineGPExecutionType=Nu a putut fi determinat tipul de execuţie a geoprocesorului: +projectionError=Eroare la proiectarea geometriei: {0} +cannotRunTaskExecutionTypeUnknownError=Nu se poate executa procesul de lucru: tip execuţie necunoscut. +layerDataRetrievalError=Nu au putut fi preluate date pentru stratul tematic. +couldNotDeleteFeature=Obiectul spaţial nu a putut fi şters +couldNotUpdateFeatureError=Obiectul spaţial nu a putut fi actualizat, se restaurează valoarea veche + + +configFileCrossDomain=Posibilă problemă interdomenii: {0}{1} + + +openToolTip=Faceţi clic pentru a deschide harta de verificare +closeToolTip=Faceţi clic pentru a închide harta de verificare + + +layerListLabel=Mai mult... +basemap=Hartă fundal + + +aboutLabel=Despre +searchPrompt=Introducere adresă +searchResultTitleLabel=Locaţie +noResultsFoundLabel=Niciun rezultat găsit + + +fullExtentLabel=Extindere completă +panDownLabel=Panoramare în jos +panLeftLabel=Panoramare la stânga +panRightLabel=Panoramare la dreapta +panUpLabel=Panoramare în sus +previousExtentLabel=Extinderea anterioară +nextExtentLabel=Extinderea următoare +panLabel=Panoramare +zoomInLabel=Apropiere +zoomOutLabel=Îndepărtare + + + + + + +addTextLabel=Adăugare text +drawPointLabel=Trasare punct +drawLineLabel=Trasare linie +drawFreehandLineLabel=Trasare linie liberă +drawPolygonLabel=Trasare poligon +drawFreehandPolygonLabel=Trasare poligon liber +drawRectangleLabel=Trasare dreptunghi +drawMapExtentLabel=Trasare extindere hartă +drawCircleLabel=Trasare cerc +drawEllipseLabel=Trasare elipsă +drawClearLabel=Ştergere desene + +markerStyleCircle=Cerc +markerStyleCross=Cruce +markerStyleDiamond=Diamant +markerStyleSquare=Pătrat +markerStyleTriangle=Triunghi +markerStyleX=X + +textFont1=Arial +textFont2=Courier New +textFont3=Broadway +textFont4=Comic Sans MS +textFont5=Algerian +textFont6=Verdana + +lineStyleSolid=Linie continuă +lineStyleDash=Linie întreruptă +lineStyleDot=Linie punctată +lineStyleDashDot=Linie punct +lineStyleDashDotDot=Linie punct punct + +fillStyleSolid=Linie continuă +fillStyleBackwardDiagonal=Diagonală înapoi +fillStyleCross=Cruce +fillStyleForwardDiagonal=Diagonală înainte +fillStyleHorizontal=Orizontal +fillStyleVertical=Vertical + + + +markerAlphaLabel=Alfa +markerColorLabel=Culoare marcator +markerSizeLabel=Dimensiune +markerStyleLabel=Stil +markerOutlineColorLabel=Culoare contur +markerOutlineWidthLabel=Lăţime +textLabel=Text +textColorLabel=Culoare +textFontLabel=Font +textSizeLabel=Dimensiune +textBoldLabel=B +textBoldTooltip=Aldin +textItalicLabel=I +textItalicTooltip=Cursiv +textUnderlineLabel=U +textUnderlineTooltip=Subliniere +lineAlphaLabel=Alfa +lineColorLabel=Culoare linie +lineStyleLabel=Stil +lineWidthLabel=Lăţime +fillAlphaLabel=Alfa +fillColorLabel=Culoare de umplere +fillStyleLabel=Stil +fillOutlineColorLabel=Culoare contur +fillOutlineWidthLabel=Lăţime + + + + +showMeasurementsLabel=Afişare măsurători +distanceUnitsLabel=Unităţi pentru distanţă +areaUnitsLabel=Unităţi pentru suprafaţă +areaLabel=Suprafaţă: +perimeterLabel=Perimetru: +lengthLabel=Lungime: + + +bookmarksLabel=Semne de carte +addbookmarksLabel=Adăugare semn de carte +addLabel=Adăugare extindere curentă ca semn de carte denumit +bookmarkSubmitLabel=Adăugare semn de carte +bookmarkMissingNameLabel=Introduceţi un nume pentru semnul de carte. +deleteBookmarkTooltip=Ştergere semn de carte + + +descLabel=Extrageţi date şi descărcaţi fişierul zip +step1Label=1. Selectare suprafaţă +dataCurrentExtentLabel=1. Datele vor fi extrase din extinderea dvs. curentă. +step2Label=2. Selectare straturi tematice de extras +step3Label=3. Selectare format de fişiere +step4Label=4. Selectare format raster +step5Label=5. Referinţă spaţială +extractButtonLabel=Extragere +step1ErrorLabel=Selectaţi o suprafaţă de interes. +step2ErrorLabel=Selectaţi straturi tematice de extras. +emptyResultsLabel=Operaţia a fost finalizată, însă nu a returnat niciun rezultat. +saveDataFileLabel=Fişier de date creat. Doriţi să îl salvaţi? + + +attributesLabel=Atribute +attachmentsLabel=Ataşări +relatedRecordsLabel=Înregistrări corelate +featureLayerOutOfScaleText=Acest strat tematic de obiecte spaţiale nu se încadrează în intervalul de scară +showAttachmentsText=Ataşări +showRelatedRecordsText=Înregistrări corelate +showAttributesText=Revenire +selectTemplateText=Selectare şablon pentru a crea obiectul spaţial +noEditableLayersText=Niciun strat tematic editabil. +noCreateCapabilityLayersText=Niciunul din straturile tematice nu a creat o capabilitate +layerNotSupportingAttachmentsText=Acest strat tematic nu acceptă ataşări +noAttachmentsText=Nicio ataşare +chooseFileText=Alegeţi un fişier pentru ataşare +attachmentSubmitLabel=Trimitere +attachmentCancelLabel=Anulare +singleAttachmentText=Obiectul spaţial are {0} ataşare +multipleAttachmentsText=Obiectul spaţial are {0} ataşări + + +layerListTitle=Vizibilitate strat tematic + + +locateSubmitLabel=Localizare +addressLabel=Adresă +coordinatesLabel=Coordonate +addressTitle=Introducere adresă +coordinatesTitle=Introducere coordonate +xLabel=Longitudine (X) +yLabel=Latitudine (Y) +locationsLabel=Locaţii găsite: +bingCulture=ro-RO +requiredFields=Câmpuri obligatorii: +requiredField=Câmp obligatoriu: +deleteResultTooltip=Ştergere rezultat +resultScoreText=Scor: +bingResultConfidenceText=Încredere: + + +printSubmitLabel=Imprimare +printTitle= +printSubtitle= +printCopyright= +printTitleLabel=Titlu +printSubtitleLabel=Subtitlu +printCopyrightLabel=Drepturi de autor +printAuthorLabel=Autor +printLayoutTemplatesLabel=Şabloane de configuraţii +printFormatsLabel=Formate +printScaleLabel=Utilizare această scară + + +filterTitleBarTooltip=Filtrare rezultate +showallTitleBarTooltip=Afişare toate +filterButtonLabel=Filtru +clearButtonLabel=Afişare toate +featuresFoundLabel=Obiecte spaţiale găsite: {0} + + +drivingDirectionLabel=Indicaţii pentru conducători auto +routeSubmitLabel=Obţinere indicaţii +moveUpTooltip=Deplasare în sus +moveDownTooltip=Deplasare în jos +addLocationTooltip=clic pe hartă pentru a adăuga o locaţie +optionsLabel=Opţiuni +bestSequenceLabel=Găsire ordine optimă +milesLabel=Mile +metricLabel=Km +changeRouteSymbolLabel=Modificare simbol rută +editRouteLabel=Editare rută + + +graphicalTitleBarTooltip=Selectare obiecte spaţiale +textTitleBarTooltip=Selectare după atribut +graphicalsearchLabel=Selectare obiecte spaţiale după +textsearchLabel=Selectare după atribut +layerLabel=Căutare strat tematic +nolayerLabel=Nu a fost definit niciun strat tematic de căutare. +searchSubmitLabel=Căutare +selectionLabel=Obiecte spaţiale selectate: + + +latitudeLabel=Latitudine +longitudeLabel=Longitudine + + +gpSubmitLabel=Trimitere +inputLabel=Intrare +helpLabel=Ajutor +outputLabel=Ieşire +copyToClipboard=Copiere în Clipboard +unsupportedInputType=Intrarea {0} nu este acceptată +currentExtentWillBeUsedAsInput=Extinderea curentă va fi utilizată ca parametru de intrare. + + +zoomLabel=Transfocare la + + +helloContent=Modificaţi acest text în fişierul de configurare. + + +widgetIDWidgetLabelTemplate=ID widget: {0}, etichetă widget: {1} +widgetIDWidgetStateTemplate=ID widget: {0}, stare widget: {1} +itemLabelWidgetIDItemIDTemplate=ID widget {0}: {1} + + +layerSelectionLabel=Selectare strat tematic +drawToolMenuLabel=Selectare instrument de trasare +selectLabel=Selectare +noLayersLabel=Niciun strat tematic +noChartDataToDisplayLabel=Nu există date de afişat pentru diagramă featureLayerNotVisibleText=stratul tematic fie nu este vizibil, fie depăşeşte intervalul scării \ No newline at end of file diff --git a/locale/ru_RU/ViewerStrings.properties b/locale/ru_RU/ViewerStrings.properties index 7718555..e07c14d 100644 --- a/locale/ru_RU/ViewerStrings.properties +++ b/locale/ru_RU/ViewerStrings.properties @@ -1,350 +1,350 @@ - - -contextMenuText=О программе ArcGIS Viewer for Flex... -aboutText=Это приложение использует ArcGIS Viewer for Flex версии 3.1.\nДата сборки: 2012-12-12. -aboutLearnMoreBtn=См. Справку -aboutCloseBtn=Закрыть - - - -close=Закрыть -minimize=Свернуть - - -locateExampleValueX=37.6178 -locateExampleValueY=55.7517 - - -clearLabel=Очистить -deleteLabel=Удалить -loadingLabel=Загрузка... -okLabel=OK -errorLabel=Ошибка -problemLabel=Проблема -noFeatures=Объекты не найдены. -resultsLabel=Результаты -saveLabel=Сохранить - - -unitsFeet=Футы -unitsFeetAbbr=фт -unitsKilometers=Километры -unitsKilometersAbbr=км -unitsMeters=Метры -unitsMetersAbbr=м -unitsMiles=Мили -unitsMilesAbbr=М -unitsYards=Ярды -unitsYardsAbbr=яр. - -unitsAcres=Акры -unitsAcresAbbr=ак. -unitsHectares=Гектары -unitsHectaresAbbr=га -unitsSquareFeet=Квадратные футы -unitsSquareFeetAbbr=кв. фт. -unitsSquareKilometers=Квадратные километры -unitsSquareKilometersAbbr=кв. км. -unitsSquareMeters=Квадратные метры -unitsSquareMetersAbbr=кв. м. -unitsSquareMiles=Квадратные мили -unitsSquareMilesAbbr=кв. миль -unitsSquareYards=Квадратные ярды -unitsSquareYardsAbbr=кв. яр. - - -tocMapLayerZoomToLabel=Приблизить к -tocMapLayerTransparencyLabel=Прозрачность -tocMapLayerOpaqueLabel=Непрозрачность -tocMapLayerTransparentLabel=Прозрачный -tocMapLayerMoveUpLabel=Переместить вверх -tocMapLayerMoveDownLabel=Переместить вниз -tocMapLayerRemoveLabel=Удалить -tocMapLayerDescriptionLabel=Описание -tocMapLayerDownloadLabel=Скачать - - -incorrectLayerTypeText={0} не является поддерживаемым типом слоя. Используйте значение "arcims", "bing", "csv", "dynamic", "feature", "georss", "image", "kml", "osm", "tiled" или "wms". - - -missingConfigFileText=Не удалось найти {0} -httpResponseStatus=Статус отклика HTTP: {0} -faultCode=Код сбоя: {0} -faultInfo=Информация о сбое: {0} -faultDetail=Сведения о сбое: {0} - - -parseConfigErrorText=Возникла проблема при синтаксическом анализе файла конфигурации {0} -standalonePlayerExternalInterfaceErrorText=Произошла ошибка. ExternalInterface не работает в автономном проигрывателе. -layerFailedToLoad:{0} слою не удалось загрузить: {1} -couldNotFetchBasemapData=Не удалось получить данные базовой карты:\n{0} -couldNotConnectToPortal=Не удалось подключиться к порталу. -couldNotQueryPortal=Не удалось запросить портал. -couldNotQueryPortalItems=Не удалось запросить элементы портала. -serverMissingCrossDomain=На сервере GIS отсутствует файл политики междоменных запросов. -serviceIsInaccessible=Сервис не существует или не доступен. -unauthorizedAccess=Отсутствие прав доступа к этому сервису. -unknownErrorCause=Неизвестная причина ошибки. -resourceAccessDenied=Отсутствие прав доступа к этому сервису. -signInAborted=Выполнение входа прервано. -invalidWidgetId=Недопустимый идентификатор виджета: {0} -printTaskExecutionError=Ошибка выполнения задания печати:\n\n{0} -gpServiceConnectionError=Не удалось выполнить подключение к сервису геообработки:\n{0}\n\n{1}\n{2} -locatorServiceConnectionError=Не удалось выполнить подключение к сервису локатора:\n{0}\n\n{1}\n{2} -singleLineGeocodingNotSupportedError=Сервис локатора не поддерживает однострочного геокодирования. -rssFeedParsingError=Возникла проблема при синтаксическом анализе RSS-канала. {0} -httpResponseNotXMLError=Ответ HTTP не является XML. -unknownRSSFeedTypeError=Не удалось определить тип RSS-канала. -initializationError=Возникла проблема при инициализации: {0} -unableToDetermineGPExecutionType=Не удалось определить тип выполнения геообработки: -projectionError=Ошибка проектирования геометрии: {0} -cannotRunTaskExecutionTypeUnknownError=Не удается запустить задание: неизвестный тип выполнения. -layerDataRetrievalError=Не удалось извлечь данные из слоя. -couldNotDeleteFeature=Не удалось удалить объект -couldNotUpdateFeatureError=Не удалось обновить объект, восстановление старого значения - - -configFileCrossDomain=Возможная ошибка междоменного запроса: {0}{1} - - -openToolTip=Щелкните, чтобы открыть обзорную карту -closeToolTip=Щелкните, чтобы закрыть обзорную карту - - -layerListLabel=Дополнительно... -basemap=Базовая карта - - -aboutLabel=О программе -searchPrompt=Ввести адрес -searchResultTitleLabel=Местоположение -noResultsFoundLabel=Результатов не найдено - - -fullExtentLabel=Полный экстент -panDownLabel=Переместить вниз -panLeftLabel=Переместить влево -panRightLabel=Переместить вправо -panUpLabel=Переместить вверх -previousExtentLabel=Предыдущий экстент -nextExtentLabel=Следующий экстент -panLabel=Переместить -zoomInLabel=Увеличить -zoomOutLabel=Уменьшить - - - - - - -addTextLabel=Добавить текст -drawPointLabel=Нарисовать точку -drawLineLabel=Нарисовать линию -drawFreehandLineLabel=Нарисовать произвольную линию -drawPolygonLabel=Нарисовать полигон -drawFreehandPolygonLabel=Нарисовать полигон произвольной формы -drawRectangleLabel=Нарисовать прямоугольник -drawMapExtentLabel=Экстент отображения карты -drawCircleLabel=Нарисовать круг -drawEllipseLabel=Нарисовать эллипс -drawClearLabel=Очистить рисунки - -markerStyleCircle=Круг -markerStyleCross=Крест -markerStyleDiamond=Ромб -markerStyleSquare=Квадрат -markerStyleTriangle=Треугольник -markerStyleX=X - -textFont1=Arial -textFont2=Courier New -textFont3=Broadway -textFont4=Comic Sans MS -textFont5=Algerian -textFont6=Verdana - -lineStyleSolid=Сплошной -lineStyleDash=Тире -lineStyleDot=Точка -lineStyleDashDot=Тире и точка -lineStyleDashDotDot=Тире и две точки - -fillStyleSolid=Сплошной -fillStyleBackwardDiagonal=С наклоном назад -fillStyleCross=Крест -fillStyleForwardDiagonal=С наклоном вперед -fillStyleHorizontal=Горизонтальная штриховка -fillStyleVertical=Вертикальная штриховка - - - -markerAlphaLabel=Прозрачность -markerColorLabel=Цвет маркера -markerSizeLabel=Размер -markerStyleLabel=Стиль -markerOutlineColorLabel=Цвет контура -markerOutlineWidthLabel=Ширина -textLabel=Текст -textColorLabel=Цвет -textFontLabel=Шрифт -textSizeLabel=Размер -textBoldLabel=Ж -textBoldTooltip=Полужирный -textItalicLabel=К -textItalicTooltip=Курсив -textUnderlineLabel=Ч -textUnderlineTooltip=Подчеркнутый -lineAlphaLabel=Прозрачность -lineColorLabel=Цвет линии -lineStyleLabel=Стиль -lineWidthLabel=Ширина -fillAlphaLabel=Прозрачность -fillColorLabel=Цвет заливки -fillStyleLabel=Стиль -fillOutlineColorLabel=Цвет контура -fillOutlineWidthLabel=Ширина - - - - -showMeasurementsLabel=Показать измерения -distanceUnitsLabel=Единицы расстояния -areaUnitsLabel=Единицы площади -areaLabel=Площадь: -perimeterLabel=Периметр: -lengthLabel=Длина: - - -bookmarksLabel=Закладки -addbookmarksLabel=Добавить закладку -addLabel=Добавить закладку для текущего экстента с именем -bookmarkSubmitLabel=Добавить закладку -bookmarkMissingNameLabel=Введите имя закладки. -deleteBookmarkTooltip=Удалить закладку - - -descLabel=Извлечь данные и загрузить ZIP-файл -step1Label=1. Выберите область -dataCurrentExtentLabel=1. Данные будут извлечены из текущего экстента. -step2Label=2. Выберите слои для извлечения -step3Label=3. Выберите формат файла -step4Label=4. Выберите формат растра -step5Label=5. Пространственная привязка -extractButtonLabel=Извлечь -step1ErrorLabel=Выберите область интереса. -step2ErrorLabel=Выберите слои для извлечения. -emptyResultsLabel=Задание выполнено, но результатов не получено. -saveDataFileLabel=Файл данных создан. Сохранить его? - - -attributesLabel=Атрибуты -attachmentsLabel=Вложения -relatedRecordsLabel=Связанные записи -featureLayerOutOfScaleText=Векторный слой находится вне диапазона масштабирования -showAttachmentsText=Вложения -showRelatedRecordsText=Связанные записи -showAttributesText=Назад -selectTemplateText=Выберите шаблон для создания объекта -noEditableLayersText=Отсутствуют доступные для редактирования слои. -noCreateCapabilityLayersText=Ни один из слоев не поддерживает возможность создания -layerNotSupportingAttachmentsText=Этот слой не поддерживает вложения -noAttachmentsText=Без вложений -chooseFileText=Выберите файл для вложения -attachmentSubmitLabel=Отправить -attachmentCancelLabel=Отмена -singleAttachmentText=У объекта имеется вложение: ({0}) -multipleAttachmentsText=У объекта имеются вложения: ({0}) - - -layerListTitle=Видимость слоя - - -locateSubmitLabel=Найти -addressLabel=Адрес -coordinatesLabel=Координаты -addressTitle=Введите адрес -coordinatesTitle=Введите координаты -xLabel=Долгота (X) -yLabel=Широта (Y) -locationsLabel=Найденные местоположения: -bingCulture=ru-RU -requiredFields=Необходимые поля: -requiredField=Необходимое поле: -deleteResultTooltip=Удалить результат -resultScoreText=Баллов: -bingResultConfidenceText=Надежность: - - -printSubmitLabel=Печать -printTitle= -printSubtitle= -printCopyright= -printTitleLabel=Заголовок -printSubtitleLabel=Подзаголовок -printCopyrightLabel=Авторское право -printAuthorLabel=Автор -printLayoutTemplatesLabel=Шаблоны компоновок -printFormatsLabel=Форматы -printScaleLabel=Использовать эту шкалу - - -filterTitleBarTooltip=Результаты поиска -showallTitleBarTooltip=Показать все -filterButtonLabel=Фильтр -clearButtonLabel=Показать все -featuresFoundLabel=Найденные объекты: {0} - - -drivingDirectionLabel=Путевой лист -routeSubmitLabel=Получить путевой лист -moveUpTooltip=Переместить вверх -moveDownTooltip=Переместить вниз -addLocationTooltip=щелкните на карте, чтобы добавить местоположение -optionsLabel=Параметры -bestSequenceLabel=Найти лучшую последовательность -milesLabel=Мили -metricLabel=Км -changeRouteSymbolLabel=Изменить символ маршрута -editRouteLabel=Изменить маршрут - - -graphicalTitleBarTooltip=Выбрать объекты -textTitleBarTooltip=Выбрать по атрибуту -graphicalsearchLabel=Выбрать объекты по -textsearchLabel=Выбрать по атрибуту -layerLabel=Поиск слоя -nolayerLabel=Слой поиска не задан. -searchSubmitLabel=Поиск -selectionLabel=Выбранные объекты: - - -latitudeLabel=Широта -longitudeLabel=Долгота - - -gpSubmitLabel=Отправить -inputLabel=Входные данные -helpLabel=Справка -outputLabel=Выходные данные -copyToClipboard=Копировать в буфер обмена -unsupportedInputType={0} Входные данные не поддерживаются -currentExtentWillBeUsedAsInput=Текущий экстент будет использоваться в качестве входных данных. - - -zoomLabel=Приблизить к - - -helloContent=Измените этот текст в файле конфигурации. - - -widgetIDWidgetLabelTemplate=Идентификатор виджета: {0}, надпись виджета: {1} -widgetIDWidgetStateTemplate=Идентификатор виджета: {0}, состояние виджета: {1} -itemLabelWidgetIDItemIDTemplate={0} Идентификатор виджета: {1} - - -layerSelectionLabel=Выберите слой -drawToolMenuLabel=Выберите инструмент для рисования -selectLabel=Выбрать -noLayersLabel=Отсутствуют слои -noChartDataToDisplayLabel=Отсутствуют данные диаграммы для отображения + + +contextMenuText=О программе ArcGIS Viewer for Flex... +aboutText=Это приложение использует ArcGIS Viewer for Flex версии 3.1.\nДата сборки: 2012-12-12. +aboutLearnMoreBtn=См. Справку +aboutCloseBtn=Закрыть + + + +close=Закрыть +minimize=Свернуть + + +locateExampleValueX=37.6178 +locateExampleValueY=55.7517 + + +clearLabel=Очистить +deleteLabel=Удалить +loadingLabel=Загрузка... +okLabel=OK +errorLabel=Ошибка +problemLabel=Проблема +noFeatures=Объекты не найдены. +resultsLabel=Результаты +saveLabel=Сохранить + + +unitsFeet=Футы +unitsFeetAbbr=фт +unitsKilometers=Километры +unitsKilometersAbbr=км +unitsMeters=Метры +unitsMetersAbbr=м +unitsMiles=Мили +unitsMilesAbbr=М +unitsYards=Ярды +unitsYardsAbbr=яр. + +unitsAcres=Акры +unitsAcresAbbr=ак. +unitsHectares=Гектары +unitsHectaresAbbr=га +unitsSquareFeet=Квадратные футы +unitsSquareFeetAbbr=кв. фт. +unitsSquareKilometers=Квадратные километры +unitsSquareKilometersAbbr=кв. км. +unitsSquareMeters=Квадратные метры +unitsSquareMetersAbbr=кв. м. +unitsSquareMiles=Квадратные мили +unitsSquareMilesAbbr=кв. миль +unitsSquareYards=Квадратные ярды +unitsSquareYardsAbbr=кв. яр. + + +tocMapLayerZoomToLabel=Приблизить к +tocMapLayerTransparencyLabel=Прозрачность +tocMapLayerOpaqueLabel=Непрозрачность +tocMapLayerTransparentLabel=Прозрачный +tocMapLayerMoveUpLabel=Переместить вверх +tocMapLayerMoveDownLabel=Переместить вниз +tocMapLayerRemoveLabel=Удалить +tocMapLayerDescriptionLabel=Описание +tocMapLayerDownloadLabel=Скачать + + +incorrectLayerTypeText={0} не является поддерживаемым типом слоя. Используйте значение "arcims", "bing", "csv", "dynamic", "feature", "georss", "image", "kml", "osm", "tiled" или "wms". + + +missingConfigFileText=Не удалось найти {0} +httpResponseStatus=Статус отклика HTTP: {0} +faultCode=Код сбоя: {0} +faultInfo=Информация о сбое: {0} +faultDetail=Сведения о сбое: {0} + + +parseConfigErrorText=Возникла проблема при синтаксическом анализе файла конфигурации {0} +standalonePlayerExternalInterfaceErrorText=Произошла ошибка. ExternalInterface не работает в автономном проигрывателе. +layerFailedToLoad:{0} слою не удалось загрузить: {1} +couldNotFetchBasemapData=Не удалось получить данные базовой карты:\n{0} +couldNotConnectToPortal=Не удалось подключиться к порталу. +couldNotQueryPortal=Не удалось запросить портал. +couldNotQueryPortalItems=Не удалось запросить элементы портала. +serverMissingCrossDomain=На сервере GIS отсутствует файл политики междоменных запросов. +serviceIsInaccessible=Сервис не существует или не доступен. +unauthorizedAccess=Отсутствие прав доступа к этому сервису. +unknownErrorCause=Неизвестная причина ошибки. +resourceAccessDenied=Отсутствие прав доступа к этому сервису. +signInAborted=Выполнение входа прервано. +invalidWidgetId=Недопустимый идентификатор виджета: {0} +printTaskExecutionError=Ошибка выполнения задания печати:\n\n{0} +gpServiceConnectionError=Не удалось выполнить подключение к сервису геообработки:\n{0}\n\n{1}\n{2} +locatorServiceConnectionError=Не удалось выполнить подключение к сервису локатора:\n{0}\n\n{1}\n{2} +singleLineGeocodingNotSupportedError=Сервис локатора не поддерживает однострочного геокодирования. +rssFeedParsingError=Возникла проблема при синтаксическом анализе RSS-канала. {0} +httpResponseNotXMLError=Ответ HTTP не является XML. +unknownRSSFeedTypeError=Не удалось определить тип RSS-канала. +initializationError=Возникла проблема при инициализации: {0} +unableToDetermineGPExecutionType=Не удалось определить тип выполнения геообработки: +projectionError=Ошибка проектирования геометрии: {0} +cannotRunTaskExecutionTypeUnknownError=Не удается запустить задание: неизвестный тип выполнения. +layerDataRetrievalError=Не удалось извлечь данные из слоя. +couldNotDeleteFeature=Не удалось удалить объект +couldNotUpdateFeatureError=Не удалось обновить объект, восстановление старого значения + + +configFileCrossDomain=Возможная ошибка междоменного запроса: {0}{1} + + +openToolTip=Щелкните, чтобы открыть обзорную карту +closeToolTip=Щелкните, чтобы закрыть обзорную карту + + +layerListLabel=Дополнительно... +basemap=Базовая карта + + +aboutLabel=О программе +searchPrompt=Ввести адрес +searchResultTitleLabel=Местоположение +noResultsFoundLabel=Результатов не найдено + + +fullExtentLabel=Полный экстент +panDownLabel=Переместить вниз +panLeftLabel=Переместить влево +panRightLabel=Переместить вправо +panUpLabel=Переместить вверх +previousExtentLabel=Предыдущий экстент +nextExtentLabel=Следующий экстент +panLabel=Переместить +zoomInLabel=Увеличить +zoomOutLabel=Уменьшить + + + + + + +addTextLabel=Добавить текст +drawPointLabel=Нарисовать точку +drawLineLabel=Нарисовать линию +drawFreehandLineLabel=Нарисовать произвольную линию +drawPolygonLabel=Нарисовать полигон +drawFreehandPolygonLabel=Нарисовать полигон произвольной формы +drawRectangleLabel=Нарисовать прямоугольник +drawMapExtentLabel=Экстент отображения карты +drawCircleLabel=Нарисовать круг +drawEllipseLabel=Нарисовать эллипс +drawClearLabel=Очистить рисунки + +markerStyleCircle=Круг +markerStyleCross=Крест +markerStyleDiamond=Ромб +markerStyleSquare=Квадрат +markerStyleTriangle=Треугольник +markerStyleX=X + +textFont1=Arial +textFont2=Courier New +textFont3=Broadway +textFont4=Comic Sans MS +textFont5=Algerian +textFont6=Verdana + +lineStyleSolid=Сплошной +lineStyleDash=Тире +lineStyleDot=Точка +lineStyleDashDot=Тире и точка +lineStyleDashDotDot=Тире и две точки + +fillStyleSolid=Сплошной +fillStyleBackwardDiagonal=С наклоном назад +fillStyleCross=Крест +fillStyleForwardDiagonal=С наклоном вперед +fillStyleHorizontal=Горизонтальная штриховка +fillStyleVertical=Вертикальная штриховка + + + +markerAlphaLabel=Прозрачность +markerColorLabel=Цвет маркера +markerSizeLabel=Размер +markerStyleLabel=Стиль +markerOutlineColorLabel=Цвет контура +markerOutlineWidthLabel=Ширина +textLabel=Текст +textColorLabel=Цвет +textFontLabel=Шрифт +textSizeLabel=Размер +textBoldLabel=Ж +textBoldTooltip=Полужирный +textItalicLabel=К +textItalicTooltip=Курсив +textUnderlineLabel=Ч +textUnderlineTooltip=Подчеркнутый +lineAlphaLabel=Прозрачность +lineColorLabel=Цвет линии +lineStyleLabel=Стиль +lineWidthLabel=Ширина +fillAlphaLabel=Прозрачность +fillColorLabel=Цвет заливки +fillStyleLabel=Стиль +fillOutlineColorLabel=Цвет контура +fillOutlineWidthLabel=Ширина + + + + +showMeasurementsLabel=Показать измерения +distanceUnitsLabel=Единицы расстояния +areaUnitsLabel=Единицы площади +areaLabel=Площадь: +perimeterLabel=Периметр: +lengthLabel=Длина: + + +bookmarksLabel=Закладки +addbookmarksLabel=Добавить закладку +addLabel=Добавить закладку для текущего экстента с именем +bookmarkSubmitLabel=Добавить закладку +bookmarkMissingNameLabel=Введите имя закладки. +deleteBookmarkTooltip=Удалить закладку + + +descLabel=Извлечь данные и загрузить ZIP-файл +step1Label=1. Выберите область +dataCurrentExtentLabel=1. Данные будут извлечены из текущего экстента. +step2Label=2. Выберите слои для извлечения +step3Label=3. Выберите формат файла +step4Label=4. Выберите формат растра +step5Label=5. Пространственная привязка +extractButtonLabel=Извлечь +step1ErrorLabel=Выберите область интереса. +step2ErrorLabel=Выберите слои для извлечения. +emptyResultsLabel=Задание выполнено, но результатов не получено. +saveDataFileLabel=Файл данных создан. Сохранить его? + + +attributesLabel=Атрибуты +attachmentsLabel=Вложения +relatedRecordsLabel=Связанные записи +featureLayerOutOfScaleText=Векторный слой находится вне диапазона масштабирования +showAttachmentsText=Вложения +showRelatedRecordsText=Связанные записи +showAttributesText=Назад +selectTemplateText=Выберите шаблон для создания объекта +noEditableLayersText=Отсутствуют доступные для редактирования слои. +noCreateCapabilityLayersText=Ни один из слоев не поддерживает возможность создания +layerNotSupportingAttachmentsText=Этот слой не поддерживает вложения +noAttachmentsText=Без вложений +chooseFileText=Выберите файл для вложения +attachmentSubmitLabel=Отправить +attachmentCancelLabel=Отмена +singleAttachmentText=У объекта имеется вложение: ({0}) +multipleAttachmentsText=У объекта имеются вложения: ({0}) + + +layerListTitle=Видимость слоя + + +locateSubmitLabel=Найти +addressLabel=Адрес +coordinatesLabel=Координаты +addressTitle=Введите адрес +coordinatesTitle=Введите координаты +xLabel=Долгота (X) +yLabel=Широта (Y) +locationsLabel=Найденные местоположения: +bingCulture=ru-RU +requiredFields=Необходимые поля: +requiredField=Необходимое поле: +deleteResultTooltip=Удалить результат +resultScoreText=Баллов: +bingResultConfidenceText=Надежность: + + +printSubmitLabel=Печать +printTitle= +printSubtitle= +printCopyright= +printTitleLabel=Заголовок +printSubtitleLabel=Подзаголовок +printCopyrightLabel=Авторское право +printAuthorLabel=Автор +printLayoutTemplatesLabel=Шаблоны компоновок +printFormatsLabel=Форматы +printScaleLabel=Использовать эту шкалу + + +filterTitleBarTooltip=Результаты поиска +showallTitleBarTooltip=Показать все +filterButtonLabel=Фильтр +clearButtonLabel=Показать все +featuresFoundLabel=Найденные объекты: {0} + + +drivingDirectionLabel=Путевой лист +routeSubmitLabel=Получить путевой лист +moveUpTooltip=Переместить вверх +moveDownTooltip=Переместить вниз +addLocationTooltip=щелкните на карте, чтобы добавить местоположение +optionsLabel=Параметры +bestSequenceLabel=Найти лучшую последовательность +milesLabel=Мили +metricLabel=Км +changeRouteSymbolLabel=Изменить символ маршрута +editRouteLabel=Изменить маршрут + + +graphicalTitleBarTooltip=Выбрать объекты +textTitleBarTooltip=Выбрать по атрибуту +graphicalsearchLabel=Выбрать объекты по +textsearchLabel=Выбрать по атрибуту +layerLabel=Поиск слоя +nolayerLabel=Слой поиска не задан. +searchSubmitLabel=Поиск +selectionLabel=Выбранные объекты: + + +latitudeLabel=Широта +longitudeLabel=Долгота + + +gpSubmitLabel=Отправить +inputLabel=Входные данные +helpLabel=Справка +outputLabel=Выходные данные +copyToClipboard=Копировать в буфер обмена +unsupportedInputType={0} Входные данные не поддерживаются +currentExtentWillBeUsedAsInput=Текущий экстент будет использоваться в качестве входных данных. + + +zoomLabel=Приблизить к + + +helloContent=Измените этот текст в файле конфигурации. + + +widgetIDWidgetLabelTemplate=Идентификатор виджета: {0}, надпись виджета: {1} +widgetIDWidgetStateTemplate=Идентификатор виджета: {0}, состояние виджета: {1} +itemLabelWidgetIDItemIDTemplate={0} Идентификатор виджета: {1} + + +layerSelectionLabel=Выберите слой +drawToolMenuLabel=Выберите инструмент для рисования +selectLabel=Выбрать +noLayersLabel=Отсутствуют слои +noChartDataToDisplayLabel=Отсутствуют данные диаграммы для отображения featureLayerNotVisibleText=векторный слой невидим или находится за пределами измерения \ No newline at end of file diff --git a/locale/sv_SE/ViewerStrings.properties b/locale/sv_SE/ViewerStrings.properties index bce5e01..f1d03d9 100644 --- a/locale/sv_SE/ViewerStrings.properties +++ b/locale/sv_SE/ViewerStrings.properties @@ -1,350 +1,350 @@ - - -contextMenuText=Om ArcGIS Viewer for Flex... -aboutText=Det här programmet använder ArcGIS Viewer for Flex version 3.1.\nKompileringsdatum 2012-12-12. -aboutLearnMoreBtn=Läs mer -aboutCloseBtn=Stäng - - - -close=Stäng -minimize=Minimera - - -locateExampleValueX=13.1933 -locateExampleValueY=55.7058 - - -clearLabel=Radera -deleteLabel=Ta bort -loadingLabel=Läser in... -okLabel=OK -errorLabel=Fel -problemLabel=Problem -noFeatures=Hittade inga objekt. -resultsLabel=Resultat -saveLabel=Spara - - -unitsFeet=Fot -unitsFeetAbbr=ft -unitsKilometers=Kilometer -unitsKilometersAbbr=km -unitsMeters=Meter -unitsMetersAbbr=m -unitsMiles=Mile -unitsMilesAbbr=mi -unitsYards=Yard -unitsYardsAbbr=yd - -unitsAcres=Acres -unitsAcresAbbr=ac -unitsHectares=Hektar -unitsHectaresAbbr=ha -unitsSquareFeet=Square feet -unitsSquareFeetAbbr=sq ft -unitsSquareKilometers=Kvadratkilometer -unitsSquareKilometersAbbr=km2 -unitsSquareMeters=Kvadratmeter -unitsSquareMetersAbbr=m2 -unitsSquareMiles=Square miles -unitsSquareMilesAbbr=sq mi -unitsSquareYards=Square yards -unitsSquareYardsAbbr=sq yd - - -tocMapLayerZoomToLabel=Zooma till -tocMapLayerTransparencyLabel=Transparens -tocMapLayerOpaqueLabel=Opak -tocMapLayerTransparentLabel=Transparent -tocMapLayerMoveUpLabel=Flytta uppåt -tocMapLayerMoveDownLabel=Flytta nedåt -tocMapLayerRemoveLabel=Ta bort -tocMapLayerDescriptionLabel=Beskrivning -tocMapLayerDownloadLabel=Hämta - - -incorrectLayerTypeText={0} är inte en lagertyp som stöds. Använd "arcims", "bing", "csv", "dynamic", "feature", "georss", "image", "kml", "osm", "tiled", "wms" eller "wms" i stället. - - -missingConfigFileText=Det gick inte att hitta {0} -httpResponseStatus=http-svarsstatus: {0} -faultCode=Felkod: {0} -faultInfo=Felinformation: {0} -faultDetail=Feldetaljer: {0} - - -parseConfigErrorText=Det uppstod ett problem när konfigurationsfilen {0} skulle parsas -standalonePlayerExternalInterfaceErrorText=Ett fel har inträffat. ExternalInterface fungerar inte i den fristående mediespelaren. -layerFailedToLoad:Det gick inte att läsa in {0} lager: {1} -couldNotFetchBasemapData=Det gick inte att hämta data för baskartan:\n{0} -couldNotConnectToPortal=Det gick inte att ansluta till portalen. -couldNotQueryPortal=Det gick inte att söka i portalen. -couldNotQueryPortalItems=Det gick inte att söka efter objekt i portalen. -serverMissingCrossDomain=Det saknas en korsdomänfil för GIS Server. -serviceIsInaccessible=Tjänsten finns inte, eller också är den inte tillgänglig. -unauthorizedAccess=Du saknar behörighet för att komma åt tjänsten. -unknownErrorCause=Okänd felorsak. -resourceAccessDenied=Du har inte åtkomstbehörighet till den här resursen. -signInAborted=Inloggningen avbröts. -invalidWidgetId=Ogiltigt widgetId: {0} -printTaskExecutionError=Fel när utskriftsåtgärden skulle utföras:\n\n{0} -gpServiceConnectionError=Det går inte att ansluta till GP-tjänsten:\n{0}\n\n{1}\n{2} -locatorServiceConnectionError=Det går inte att ansluta till lokaliseringstjänsten:\n{0}\n\n{1}\n{2} -singleLineGeocodingNotSupportedError=Lokaliseringstjänsten har inte stöd för enradsgeokodning. -rssFeedParsingError=Det uppstod ett problem när RSS-feeden skulle parsas. {0} -httpResponseNotXMLError=HTTP-svaret är inte i XML. -unknownRSSFeedTypeError=Det går inte att fastställa RSS-feedens typ. -initializationError=Det uppstod ett problem vid initieringen: {0} -unableToDetermineGPExecutionType=Det gick inte att fastställa körningstypen för geoprocessorn: -projectionError=Fel när geometrin skulle projekteras: {0} -cannotRunTaskExecutionTypeUnknownError=Det går inte att köra åtgärden: okänd körningstyp. -layerDataRetrievalError=Det gick inte att hämta lagerdata. -couldNotDeleteFeature=Det gick inte att ta bort objektet -couldNotUpdateFeatureError=Det gick inte att uppdatera objektet: det gamla värdet återställs - - -configFileCrossDomain=Möjligt korsdomänproblem: {0}{1} - - -openToolTip=Klicka för att öppna översiktskarta -closeToolTip=Klicka för att stänga översiktskarta - - -layerListLabel=Mer... -basemap=Baskarta - - -aboutLabel=Om -searchPrompt=Ange adress -searchResultTitleLabel=Plats -noResultsFoundLabel=Hittade inga resultat - - -fullExtentLabel=Full utsträckning -panDownLabel=Panorera nedåt -panLeftLabel=Panorera vänster -panRightLabel=Panorera höger -panUpLabel=Panorera uppåt -previousExtentLabel=Föregående utsträckning -nextExtentLabel=Nästa utsträckning -panLabel=Panorera -zoomInLabel=Zooma in -zoomOutLabel=Zooma ut - - - - - - -addTextLabel=Lägg till text -drawPointLabel=Rita punkt -drawLineLabel=Rita linje -drawFreehandLineLabel=Rita frihandslinje -drawPolygonLabel=Rita polygon -drawFreehandPolygonLabel=Rita frihandspolygon -drawRectangleLabel=Rita rektangel -drawMapExtentLabel=Rita kartutsträckning -drawCircleLabel=Rita cirkel -drawEllipseLabel=Rita ellips -drawClearLabel=Rensa ritobjekt - -markerStyleCircle=Cirkel -markerStyleCross=Kors -markerStyleDiamond=Romb -markerStyleSquare=Fyrkant -markerStyleTriangle=Triangel -markerStyleX=X - -textFont1=Arial -textFont2=Courier New -textFont3=Broadway -textFont4=Comic Sans MS -textFont5=Algerian -textFont6=Verdana - -lineStyleSolid=Heldragen -lineStyleDash=Streck -lineStyleDot=Punkt -lineStyleDashDot=Streck punkt -lineStyleDashDotDot=Streck punkt punkt - -fillStyleSolid=Heldragen -fillStyleBackwardDiagonal=Bakåtvänd diagonal -fillStyleCross=Kors -fillStyleForwardDiagonal=Framåtvänd diagonal -fillStyleHorizontal=Horisontell -fillStyleVertical=Vertikal - - - -markerAlphaLabel=Alfa -markerColorLabel=Markeringsfärg -markerSizeLabel=Storlek -markerStyleLabel=Format -markerOutlineColorLabel=Konturfärg -markerOutlineWidthLabel=Bredd -textLabel=Text -textColorLabel=Färg -textFontLabel=Teckensnitt -textSizeLabel=Storlek -textBoldLabel=F -textBoldTooltip=Fet -textItalicLabel=K -textItalicTooltip=Kursiv -textUnderlineLabel=U -textUnderlineTooltip=Understruken -lineAlphaLabel=Alfa -lineColorLabel=Linjefärg -lineStyleLabel=Format -lineWidthLabel=Bredd -fillAlphaLabel=Alfa -fillColorLabel=Fyllningsfärg -fillStyleLabel=Format -fillOutlineColorLabel=Konturfärg -fillOutlineWidthLabel=Bredd - - - - -showMeasurementsLabel=Visa mått -distanceUnitsLabel=Distansenheter -areaUnitsLabel=Areaenheter -areaLabel=Area: -perimeterLabel=Perimeter: -lengthLabel=Längd: - - -bookmarksLabel=Bokmärken -addbookmarksLabel=Lägg till bokmärke -addLabel=Lägg till aktuell utsträckning som ett bokmärke med namnet -bookmarkSubmitLabel=Lägg till bokmärke -bookmarkMissingNameLabel=Ange ett namn på bokmärket. -deleteBookmarkTooltip=Ta bort bokmärke - - -descLabel=Extrahera data och hämta zip-fil -step1Label=1. Markera område -dataCurrentExtentLabel=1. Data kommer att extraheras från din nuvarande utsträckning. -step2Label=2. Välj vilka lager som ska extraheras -step3Label=3. Välj ett filformat -step4Label=4. Välj rastreringsformat -step5Label=5. Rumsreferens -extractButtonLabel=Extrahera -step1ErrorLabel=Markera det område du är intresserad av. -step2ErrorLabel=Välj vilka lager som ska extraheras. -emptyResultsLabel=Åtgärden slutfördes, men inga resultat returnerades. -saveDataFileLabel=Datafilen har skapats. Vill du spara den? - - -attributesLabel=Attribut -attachmentsLabel=Bilagor -relatedRecordsLabel=Relaterade poster -featureLayerOutOfScaleText=Det här objektlagret är utanför skalans räckvidd -showAttachmentsText=Bilagor -showRelatedRecordsText=Relaterade poster -showAttributesText=Gå tillbaka -selectTemplateText=Välj mall för att skapa objekt -noEditableLayersText=Inga redigerbara lager. -noCreateCapabilityLayersText=Inga av lagren kan skapa objekt -layerNotSupportingAttachmentsText=Det här lagret stöder inte bilagor -noAttachmentsText=Inga bilagor -chooseFileText=Välj en fil som ska bifogas -attachmentSubmitLabel=Utför -attachmentCancelLabel=Avbryt -singleAttachmentText=Objektet har {0} bilaga -multipleAttachmentsText=Objektet har {0} bilagor - - -layerListTitle=Lagersynlighet - - -locateSubmitLabel=Leta upp -addressLabel=Adress -coordinatesLabel=Koordinater -addressTitle=Ange adress -coordinatesTitle=Ange koordinater -xLabel=Longitud (X) -yLabel=Latitud (Y) -locationsLabel=Hittade platser: -bingCulture=sv-SE -requiredFields=Obligatoriska fält: -requiredField=Obligatoriskt fält: -deleteResultTooltip=Ta bort resultat -resultScoreText=Poäng: -bingResultConfidenceText=Konfidens: - - -printSubmitLabel=Skriv ut -printTitle= -printSubtitle= -printCopyright= -printTitleLabel=Titel -printSubtitleLabel=Underrubrik -printCopyrightLabel=Copyright -printAuthorLabel=Upphovsman -printLayoutTemplatesLabel=Layoutmallar -printFormatsLabel=Format -printScaleLabel=Använd den här skalan - - -filterTitleBarTooltip=Filtrera resultat -showallTitleBarTooltip=Visa alla -filterButtonLabel=Filter -clearButtonLabel=Visa alla -featuresFoundLabel=Hittade objekt: {0} - - -drivingDirectionLabel=Vägbeskrivningar -routeSubmitLabel=Hämta vägbeskrivningar -moveUpTooltip=Flytta uppåt -moveDownTooltip=Flytta nedåt -addLocationTooltip=klicka på kartan för att lägga till plats -optionsLabel=Alternativ -bestSequenceLabel=Hitta bästa sekvens -milesLabel=Mile -metricLabel=km -changeRouteSymbolLabel=Ändra vägsymbol -editRouteLabel=Redigera väg - - -graphicalTitleBarTooltip=Välj objekt -textTitleBarTooltip=Välj efter attribut -graphicalsearchLabel=Välj objekt efter -textsearchLabel=Välj efter attribut -layerLabel=Söklager -nolayerLabel=Inget söklager har definierats. -searchSubmitLabel=Sök -selectionLabel=Markerade objekt: - - -latitudeLabel=Latitud -longitudeLabel=Longitud - - -gpSubmitLabel=Utför -inputLabel=Indata -helpLabel=Hjälp -outputLabel=Utdata -copyToClipboard=Kopiera till Urklipp -unsupportedInputType={0} indata stöds inte -currentExtentWillBeUsedAsInput=Den aktuella utsträckningen kommer att användas som indata. - - -zoomLabel=Zooma till - - -helloContent=Ändra den här texten i konfigurationsfilen. - - -widgetIDWidgetLabelTemplate=Widget-ID: {0}, widgetetikett: {1} -widgetIDWidgetStateTemplate=Widget-ID: {0}, widgettillstånd: {1} -itemLabelWidgetIDItemIDTemplate={0} Widget-ID: {1} - - -layerSelectionLabel=Välj lager -drawToolMenuLabel=Välj ritverktyg -selectLabel=Välj -noLayersLabel=Inga lager -noChartDataToDisplayLabel=Det finns inga diagramdata att visa + + +contextMenuText=Om ArcGIS Viewer for Flex... +aboutText=Det här programmet använder ArcGIS Viewer for Flex version 3.1.\nKompileringsdatum 2012-12-12. +aboutLearnMoreBtn=Läs mer +aboutCloseBtn=Stäng + + + +close=Stäng +minimize=Minimera + + +locateExampleValueX=13.1933 +locateExampleValueY=55.7058 + + +clearLabel=Radera +deleteLabel=Ta bort +loadingLabel=Läser in... +okLabel=OK +errorLabel=Fel +problemLabel=Problem +noFeatures=Hittade inga objekt. +resultsLabel=Resultat +saveLabel=Spara + + +unitsFeet=Fot +unitsFeetAbbr=ft +unitsKilometers=Kilometer +unitsKilometersAbbr=km +unitsMeters=Meter +unitsMetersAbbr=m +unitsMiles=Mile +unitsMilesAbbr=mi +unitsYards=Yard +unitsYardsAbbr=yd + +unitsAcres=Acres +unitsAcresAbbr=ac +unitsHectares=Hektar +unitsHectaresAbbr=ha +unitsSquareFeet=Square feet +unitsSquareFeetAbbr=sq ft +unitsSquareKilometers=Kvadratkilometer +unitsSquareKilometersAbbr=km2 +unitsSquareMeters=Kvadratmeter +unitsSquareMetersAbbr=m2 +unitsSquareMiles=Square miles +unitsSquareMilesAbbr=sq mi +unitsSquareYards=Square yards +unitsSquareYardsAbbr=sq yd + + +tocMapLayerZoomToLabel=Zooma till +tocMapLayerTransparencyLabel=Transparens +tocMapLayerOpaqueLabel=Opak +tocMapLayerTransparentLabel=Transparent +tocMapLayerMoveUpLabel=Flytta uppåt +tocMapLayerMoveDownLabel=Flytta nedåt +tocMapLayerRemoveLabel=Ta bort +tocMapLayerDescriptionLabel=Beskrivning +tocMapLayerDownloadLabel=Hämta + + +incorrectLayerTypeText={0} är inte en lagertyp som stöds. Använd "arcims", "bing", "csv", "dynamic", "feature", "georss", "image", "kml", "osm", "tiled", "wms" eller "wms" i stället. + + +missingConfigFileText=Det gick inte att hitta {0} +httpResponseStatus=http-svarsstatus: {0} +faultCode=Felkod: {0} +faultInfo=Felinformation: {0} +faultDetail=Feldetaljer: {0} + + +parseConfigErrorText=Det uppstod ett problem när konfigurationsfilen {0} skulle parsas +standalonePlayerExternalInterfaceErrorText=Ett fel har inträffat. ExternalInterface fungerar inte i den fristående mediespelaren. +layerFailedToLoad:Det gick inte att läsa in {0} lager: {1} +couldNotFetchBasemapData=Det gick inte att hämta data för baskartan:\n{0} +couldNotConnectToPortal=Det gick inte att ansluta till portalen. +couldNotQueryPortal=Det gick inte att söka i portalen. +couldNotQueryPortalItems=Det gick inte att söka efter objekt i portalen. +serverMissingCrossDomain=Det saknas en korsdomänfil för GIS Server. +serviceIsInaccessible=Tjänsten finns inte, eller också är den inte tillgänglig. +unauthorizedAccess=Du saknar behörighet för att komma åt tjänsten. +unknownErrorCause=Okänd felorsak. +resourceAccessDenied=Du har inte åtkomstbehörighet till den här resursen. +signInAborted=Inloggningen avbröts. +invalidWidgetId=Ogiltigt widgetId: {0} +printTaskExecutionError=Fel när utskriftsåtgärden skulle utföras:\n\n{0} +gpServiceConnectionError=Det går inte att ansluta till GP-tjänsten:\n{0}\n\n{1}\n{2} +locatorServiceConnectionError=Det går inte att ansluta till lokaliseringstjänsten:\n{0}\n\n{1}\n{2} +singleLineGeocodingNotSupportedError=Lokaliseringstjänsten har inte stöd för enradsgeokodning. +rssFeedParsingError=Det uppstod ett problem när RSS-feeden skulle parsas. {0} +httpResponseNotXMLError=HTTP-svaret är inte i XML. +unknownRSSFeedTypeError=Det går inte att fastställa RSS-feedens typ. +initializationError=Det uppstod ett problem vid initieringen: {0} +unableToDetermineGPExecutionType=Det gick inte att fastställa körningstypen för geoprocessorn: +projectionError=Fel när geometrin skulle projekteras: {0} +cannotRunTaskExecutionTypeUnknownError=Det går inte att köra åtgärden: okänd körningstyp. +layerDataRetrievalError=Det gick inte att hämta lagerdata. +couldNotDeleteFeature=Det gick inte att ta bort objektet +couldNotUpdateFeatureError=Det gick inte att uppdatera objektet: det gamla värdet återställs + + +configFileCrossDomain=Möjligt korsdomänproblem: {0}{1} + + +openToolTip=Klicka för att öppna översiktskarta +closeToolTip=Klicka för att stänga översiktskarta + + +layerListLabel=Mer... +basemap=Baskarta + + +aboutLabel=Om +searchPrompt=Ange adress +searchResultTitleLabel=Plats +noResultsFoundLabel=Hittade inga resultat + + +fullExtentLabel=Full utsträckning +panDownLabel=Panorera nedåt +panLeftLabel=Panorera vänster +panRightLabel=Panorera höger +panUpLabel=Panorera uppåt +previousExtentLabel=Föregående utsträckning +nextExtentLabel=Nästa utsträckning +panLabel=Panorera +zoomInLabel=Zooma in +zoomOutLabel=Zooma ut + + + + + + +addTextLabel=Lägg till text +drawPointLabel=Rita punkt +drawLineLabel=Rita linje +drawFreehandLineLabel=Rita frihandslinje +drawPolygonLabel=Rita polygon +drawFreehandPolygonLabel=Rita frihandspolygon +drawRectangleLabel=Rita rektangel +drawMapExtentLabel=Rita kartutsträckning +drawCircleLabel=Rita cirkel +drawEllipseLabel=Rita ellips +drawClearLabel=Rensa ritobjekt + +markerStyleCircle=Cirkel +markerStyleCross=Kors +markerStyleDiamond=Romb +markerStyleSquare=Fyrkant +markerStyleTriangle=Triangel +markerStyleX=X + +textFont1=Arial +textFont2=Courier New +textFont3=Broadway +textFont4=Comic Sans MS +textFont5=Algerian +textFont6=Verdana + +lineStyleSolid=Heldragen +lineStyleDash=Streck +lineStyleDot=Punkt +lineStyleDashDot=Streck punkt +lineStyleDashDotDot=Streck punkt punkt + +fillStyleSolid=Heldragen +fillStyleBackwardDiagonal=Bakåtvänd diagonal +fillStyleCross=Kors +fillStyleForwardDiagonal=Framåtvänd diagonal +fillStyleHorizontal=Horisontell +fillStyleVertical=Vertikal + + + +markerAlphaLabel=Alfa +markerColorLabel=Markeringsfärg +markerSizeLabel=Storlek +markerStyleLabel=Format +markerOutlineColorLabel=Konturfärg +markerOutlineWidthLabel=Bredd +textLabel=Text +textColorLabel=Färg +textFontLabel=Teckensnitt +textSizeLabel=Storlek +textBoldLabel=F +textBoldTooltip=Fet +textItalicLabel=K +textItalicTooltip=Kursiv +textUnderlineLabel=U +textUnderlineTooltip=Understruken +lineAlphaLabel=Alfa +lineColorLabel=Linjefärg +lineStyleLabel=Format +lineWidthLabel=Bredd +fillAlphaLabel=Alfa +fillColorLabel=Fyllningsfärg +fillStyleLabel=Format +fillOutlineColorLabel=Konturfärg +fillOutlineWidthLabel=Bredd + + + + +showMeasurementsLabel=Visa mått +distanceUnitsLabel=Distansenheter +areaUnitsLabel=Areaenheter +areaLabel=Area: +perimeterLabel=Perimeter: +lengthLabel=Längd: + + +bookmarksLabel=Bokmärken +addbookmarksLabel=Lägg till bokmärke +addLabel=Lägg till aktuell utsträckning som ett bokmärke med namnet +bookmarkSubmitLabel=Lägg till bokmärke +bookmarkMissingNameLabel=Ange ett namn på bokmärket. +deleteBookmarkTooltip=Ta bort bokmärke + + +descLabel=Extrahera data och hämta zip-fil +step1Label=1. Markera område +dataCurrentExtentLabel=1. Data kommer att extraheras från din nuvarande utsträckning. +step2Label=2. Välj vilka lager som ska extraheras +step3Label=3. Välj ett filformat +step4Label=4. Välj rastreringsformat +step5Label=5. Rumsreferens +extractButtonLabel=Extrahera +step1ErrorLabel=Markera det område du är intresserad av. +step2ErrorLabel=Välj vilka lager som ska extraheras. +emptyResultsLabel=Åtgärden slutfördes, men inga resultat returnerades. +saveDataFileLabel=Datafilen har skapats. Vill du spara den? + + +attributesLabel=Attribut +attachmentsLabel=Bilagor +relatedRecordsLabel=Relaterade poster +featureLayerOutOfScaleText=Det här objektlagret är utanför skalans räckvidd +showAttachmentsText=Bilagor +showRelatedRecordsText=Relaterade poster +showAttributesText=Gå tillbaka +selectTemplateText=Välj mall för att skapa objekt +noEditableLayersText=Inga redigerbara lager. +noCreateCapabilityLayersText=Inga av lagren kan skapa objekt +layerNotSupportingAttachmentsText=Det här lagret stöder inte bilagor +noAttachmentsText=Inga bilagor +chooseFileText=Välj en fil som ska bifogas +attachmentSubmitLabel=Utför +attachmentCancelLabel=Avbryt +singleAttachmentText=Objektet har {0} bilaga +multipleAttachmentsText=Objektet har {0} bilagor + + +layerListTitle=Lagersynlighet + + +locateSubmitLabel=Leta upp +addressLabel=Adress +coordinatesLabel=Koordinater +addressTitle=Ange adress +coordinatesTitle=Ange koordinater +xLabel=Longitud (X) +yLabel=Latitud (Y) +locationsLabel=Hittade platser: +bingCulture=sv-SE +requiredFields=Obligatoriska fält: +requiredField=Obligatoriskt fält: +deleteResultTooltip=Ta bort resultat +resultScoreText=Poäng: +bingResultConfidenceText=Konfidens: + + +printSubmitLabel=Skriv ut +printTitle= +printSubtitle= +printCopyright= +printTitleLabel=Titel +printSubtitleLabel=Underrubrik +printCopyrightLabel=Copyright +printAuthorLabel=Upphovsman +printLayoutTemplatesLabel=Layoutmallar +printFormatsLabel=Format +printScaleLabel=Använd den här skalan + + +filterTitleBarTooltip=Filtrera resultat +showallTitleBarTooltip=Visa alla +filterButtonLabel=Filter +clearButtonLabel=Visa alla +featuresFoundLabel=Hittade objekt: {0} + + +drivingDirectionLabel=Vägbeskrivningar +routeSubmitLabel=Hämta vägbeskrivningar +moveUpTooltip=Flytta uppåt +moveDownTooltip=Flytta nedåt +addLocationTooltip=klicka på kartan för att lägga till plats +optionsLabel=Alternativ +bestSequenceLabel=Hitta bästa sekvens +milesLabel=Mile +metricLabel=km +changeRouteSymbolLabel=Ändra vägsymbol +editRouteLabel=Redigera väg + + +graphicalTitleBarTooltip=Välj objekt +textTitleBarTooltip=Välj efter attribut +graphicalsearchLabel=Välj objekt efter +textsearchLabel=Välj efter attribut +layerLabel=Söklager +nolayerLabel=Inget söklager har definierats. +searchSubmitLabel=Sök +selectionLabel=Markerade objekt: + + +latitudeLabel=Latitud +longitudeLabel=Longitud + + +gpSubmitLabel=Utför +inputLabel=Indata +helpLabel=Hjälp +outputLabel=Utdata +copyToClipboard=Kopiera till Urklipp +unsupportedInputType={0} indata stöds inte +currentExtentWillBeUsedAsInput=Den aktuella utsträckningen kommer att användas som indata. + + +zoomLabel=Zooma till + + +helloContent=Ändra den här texten i konfigurationsfilen. + + +widgetIDWidgetLabelTemplate=Widget-ID: {0}, widgetetikett: {1} +widgetIDWidgetStateTemplate=Widget-ID: {0}, widgettillstånd: {1} +itemLabelWidgetIDItemIDTemplate={0} Widget-ID: {1} + + +layerSelectionLabel=Välj lager +drawToolMenuLabel=Välj ritverktyg +selectLabel=Välj +noLayersLabel=Inga lager +noChartDataToDisplayLabel=Det finns inga diagramdata att visa featureLayerNotVisibleText=objektlagret är inte synligt, eller så är det utanför skalan \ No newline at end of file diff --git a/locale/zh_CN/ViewerStrings.properties b/locale/zh_CN/ViewerStrings.properties index 750632e..10b5c86 100644 --- a/locale/zh_CN/ViewerStrings.properties +++ b/locale/zh_CN/ViewerStrings.properties @@ -1,350 +1,350 @@ - - -contextMenuText=关于 ArcGIS Viewer for Flex... -aboutText=此应用程序是使用 ArcGIS Viewer for Flex 3.1 版本构建而成的。\n创建日期 2012-12-12。 -aboutLearnMoreBtn=了解更多信息 -aboutCloseBtn=关闭 - - - -close=关闭 -minimize=最小化 - - -locateExampleValueX=116.3906 -locateExampleValueY=39.9147 - - -clearLabel=清除 -deleteLabel=删除 -loadingLabel=正在加载... -okLabel=确定 -errorLabel=错误 -problemLabel=问题 -noFeatures=未找到任何要素。 -resultsLabel=结果 -saveLabel=保存 - - -unitsFeet=英尺 -unitsFeetAbbr=ft -unitsKilometers=公里 -unitsKilometersAbbr=km -unitsMeters=米 -unitsMetersAbbr=m -unitsMiles=英里 -unitsMilesAbbr=mi -unitsYards=码 -unitsYardsAbbr=yd - -unitsAcres=英亩 -unitsAcresAbbr=ac -unitsHectares=公顷 -unitsHectaresAbbr=ha -unitsSquareFeet=平方英尺 -unitsSquareFeetAbbr=sq ft -unitsSquareKilometers=平方公里 -unitsSquareKilometersAbbr=sq km -unitsSquareMeters=平方米 -unitsSquareMetersAbbr=sq m -unitsSquareMiles=平方英里 -unitsSquareMilesAbbr=sq mi -unitsSquareYards=平方码 -unitsSquareYardsAbbr=sq yd - - -tocMapLayerZoomToLabel=缩放至 -tocMapLayerTransparencyLabel=透明度 -tocMapLayerOpaqueLabel=不透明 -tocMapLayerTransparentLabel=透明 -tocMapLayerMoveUpLabel=上移 -tocMapLayerMoveDownLabel=下移 -tocMapLayerRemoveLabel=移除 -tocMapLayerDescriptionLabel=描述 -tocMapLayerDownloadLabel=下载 - - -incorrectLayerTypeText={0} 不是受支持的图层类型。请改用“arcims”、“bing”、“csv”“dynamic”、“feature”、“georss”、“image”、“kml”、“osm”、“tiled”、“wms”或“wmts”。 - - -missingConfigFileText=无法找到 {0} -httpResponseStatus=http 响应状态: {0} -faultCode=错误代码: {0} -faultInfo=错误信息: {0} -faultDetail=详细的错误信息: {0} - - -parseConfigErrorText=解析配置文件 {0} 时出现问题 -standalonePlayerExternalInterfaceErrorText=出现了某个错误。ExternalInterface 在单独的播放器中无法正常运行。 -layerFailedToLoad:{0} 图层加载失败:{1} -couldNotFetchBasemapData=无法取得底图数据:{0} -couldNotConnectToPortal=无法连接到门户。 -couldNotQueryPortal=无法查询门户。 -couldNotQueryPortalItems=无法查询门户项。 -serverMissingCrossDomain=GIS Server 缺少跨域文件。 -serviceIsInaccessible=服务不存在或不可访问。 -unauthorizedAccess=您没有访问此服务的权限。 -unknownErrorCause=未知错误原因。 -resourceAccessDenied=您没有访问此资源的权限。 -signInAborted=登录已终止。 -invalidWidgetId=无效的微件 ID:{0} -printTaskExecutionError=执行打印任务时出错:\n\n{0} -gpServiceConnectionError=无法连接到 GP 服务:\n{0}\n\n{1}\n{2} -locatorServiceConnectionError=无法连接到定位器服务:\n{0}\n\n{1}\n{2} -singleLineGeocodingNotSupportedError=定位器服务不支持单行。 -rssFeedParsingError=解析 RSS feed 时出现问题。{0} -httpResponseNotXMLError=HTTP 响应不是 XML。 -unknownRSSFeedTypeError=无法确定 RSS feed 类型。 -initializationError=初始化 {0} 时出现问题 -unableToDetermineGPExecutionType=无法确定 Geoprocessing 执行类型: -projectionError=投影几何形状 {0} 时出错 -cannotRunTaskExecutionTypeUnknownError=无法运行任务:未知的执行类型。 -layerDataRetrievalError=无法检索图层数据。 -couldNotDeleteFeature=无法删除要素 -couldNotUpdateFeatureError=无法更新要素,正在恢复旧值 - - -configFileCrossDomain=可能发生跨域问题: {0}{1} - - -openToolTip=单击打开鹰眼图 -closeToolTip=单击关闭鹰眼图 - - -layerListLabel=详细信息... -basemap=基础底图 - - -aboutLabel=关于 -searchPrompt=输入地址 -searchResultTitleLabel=位置 -noResultsFoundLabel=未找到任何结果 - - -fullExtentLabel=全图 -panDownLabel=向下平移 -panLeftLabel=向左平移 -panRightLabel=向右平移 -panUpLabel=向上平移 -previousExtentLabel=前一视图 -nextExtentLabel=后一视图 -panLabel=平移 -zoomInLabel=放大 -zoomOutLabel=缩小 - - - - - - -addTextLabel=添加文本 -drawPointLabel=绘制点 -drawLineLabel=绘制线 -drawFreehandLineLabel=绘制手绘线 -drawPolygonLabel=绘制面 -drawFreehandPolygonLabel=绘制手绘面 -drawRectangleLabel=绘制矩形 -drawMapExtentLabel=绘制地图范围 -drawCircleLabel=绘制圆 -drawEllipseLabel=绘制椭圆 -drawClearLabel=清除绘图 - -markerStyleCircle=圆形 -markerStyleCross=十字形 -markerStyleDiamond=菱形 -markerStyleSquare=方形 -markerStyleTriangle=三角形 -markerStyleX=X - -textFont1=Arial -textFont2=SimSun -textFont3=SIMHEI -textFont4=Comic Sans MS -textFont5=FangSong -textFont6=Verdana - -lineStyleSolid=实线 -lineStyleDash=虚线 -lineStyleDot=点线 -lineStyleDashDot=点划线 -lineStyleDashDotDot=双点划线 - -fillStyleSolid=实体 -fillStyleBackwardDiagonal=反向对角线 -fillStyleCross=十字形 -fillStyleForwardDiagonal=正向对角线 -fillStyleHorizontal=水平 -fillStyleVertical=垂直 - - - -markerAlphaLabel=透明度 -markerColorLabel=标记颜色 -markerSizeLabel=大小 -markerStyleLabel=样式 -markerOutlineColorLabel=轮廓颜色 -markerOutlineWidthLabel=宽度 -textLabel=文本 -textColorLabel=颜色 -textFontLabel=字体 -textSizeLabel=大小 -textBoldLabel=B -textBoldTooltip=粗体 -textItalicLabel=I -textItalicTooltip=斜体 -textUnderlineLabel=U -textUnderlineTooltip=下划线 -lineAlphaLabel=透明度 -lineColorLabel=线颜色 -lineStyleLabel=样式 -lineWidthLabel=宽度 -fillAlphaLabel=透明度 -fillColorLabel=填充颜色 -fillStyleLabel=样式 -fillOutlineColorLabel=轮廓颜色 -fillOutlineWidthLabel=宽度 - - - - -showMeasurementsLabel=显示测量结果 -distanceUnitsLabel=距离单位 -areaUnitsLabel=面积单位 -areaLabel=面积: -perimeterLabel=周长: -lengthLabel=长度: - - -bookmarksLabel=书签 -addbookmarksLabel=添加书签 -addLabel=将当前范围作为书签添加,并赋予名称 -bookmarkSubmitLabel=添加书签 -bookmarkMissingNameLabel=请输入书签的名称。 -deleteBookmarkTooltip=删除书签 - - -descLabel=提取数据并下载 zip 文件 -step1Label=1. 选择区域 -dataCurrentExtentLabel=1. 将从当前范围提取数据。 -step2Label=2. 选择要提取的图层 -step3Label=3. 选择文件格式 -step4Label=4. 选择栅格格式 -step5Label=5. 空间参考 -extractButtonLabel=提取 -step1ErrorLabel=请选择一个感兴趣的区域。 -step2ErrorLabel=请选择要提取的图层。 -emptyResultsLabel=任务已完成但未返回任何结果。 -saveDataFileLabel=数据文件已创建。是否要保存它? - - -attributesLabel=属性 -attachmentsLabel=附件 -relatedRecordsLabel=相关记录 -featureLayerOutOfScaleText=此要素图层超出比例范围 -showAttachmentsText=附件 -showRelatedRecordsText=相关记录 -showAttributesText=返回 -selectTemplateText=选择用于创建要素的模板 -noEditableLayersText=没有可编辑的图层。 -noCreateCapabilityLayersText=没有任何图层具有创建功能。 -layerNotSupportingAttachmentsText=此图层不支持附件 -noAttachmentsText=不包含附件 -chooseFileText=选择一个附件 -attachmentSubmitLabel=提交 -attachmentCancelLabel=取消 -singleAttachmentText=要素包含 {0} 个附件 -multipleAttachmentsText=要素包含 {0} 个附件 - - -layerListTitle=图层可见性 - - -locateSubmitLabel=定位 -addressLabel=地址 -coordinatesLabel=坐标 -addressTitle=输入地址 -coordinatesTitle=输入坐标 -xLabel=经度(X) -yLabel=纬度(Y) -locationsLabel=找到的位置: -bingCulture=zh-CN -requiredFields=必填字段: -requiredField=必填字段: -deleteResultTooltip=删除结果 -resultScoreText=得分: -bingResultConfidenceText=可信度: - - -printSubmitLabel=打印 -printTitle= -printSubtitle= -printCopyright= -printTitleLabel=标题 -printSubtitleLabel=子标题 -printCopyrightLabel=版权 -printAuthorLabel=作者 -printLayoutTemplatesLabel=布局模板 -printFormatsLabel=格式 -printScaleLabel=使用此比例 - - -filterTitleBarTooltip=过滤结果 -showallTitleBarTooltip=显示全部 -filterButtonLabel=过滤 -clearButtonLabel=显示全部 -featuresFoundLabel=找到的要素: {0} - - -drivingDirectionLabel=驾车指示 -routeSubmitLabel=获取方向 -moveUpTooltip=上移 -moveDownTooltip=下移 -addLocationTooltip=单击地图添加位置 -optionsLabel=选项 -bestSequenceLabel=查找最佳顺序 -milesLabel=英里 -metricLabel=千米 -changeRouteSymbolLabel=更改路径符号 -editRouteLabel=编辑路径 - - -graphicalTitleBarTooltip=选择要素 -textTitleBarTooltip=按属性选择 -graphicalsearchLabel=按以下方式选择要素 -textsearchLabel=按属性选择 -layerLabel=搜索图层 -nolayerLabel=未定义搜索图层。 -searchSubmitLabel=搜索 -selectionLabel=所选要素: - - -latitudeLabel=纬度 -longitudeLabel=经度 - - -gpSubmitLabel=提交 -inputLabel=输入 -helpLabel=帮助 -outputLabel=输出 -copyToClipboard=复制到剪贴板 -unsupportedInputType=不支持 {0} 输入 -currentExtentWillBeUsedAsInput=当前范围将用作输入。 - - -zoomLabel=缩放至 - - -helloContent=在配置文件中更改此文本。 - - -widgetIDWidgetLabelTemplate=微件 ID:{0},微件标签:{1} -widgetIDWidgetStateTemplate=微件 ID:{0},微件状态:{1} -itemLabelWidgetIDItemIDTemplate={0} 微件 ID:{1} - - -layerSelectionLabel=选择图层 -drawToolMenuLabel=选择绘制工具 -selectLabel=选择 -noLayersLabel=无图层 -noChartDataToDisplayLabel=不显示任何图表数据 + + +contextMenuText=关于 ArcGIS Viewer for Flex... +aboutText=此应用程序是使用 ArcGIS Viewer for Flex 3.1 版本构建而成的。\n创建日期 2012-12-12。 +aboutLearnMoreBtn=了解更多信息 +aboutCloseBtn=关闭 + + + +close=关闭 +minimize=最小化 + + +locateExampleValueX=116.3906 +locateExampleValueY=39.9147 + + +clearLabel=清除 +deleteLabel=删除 +loadingLabel=正在加载... +okLabel=确定 +errorLabel=错误 +problemLabel=问题 +noFeatures=未找到任何要素。 +resultsLabel=结果 +saveLabel=保存 + + +unitsFeet=英尺 +unitsFeetAbbr=ft +unitsKilometers=公里 +unitsKilometersAbbr=km +unitsMeters=米 +unitsMetersAbbr=m +unitsMiles=英里 +unitsMilesAbbr=mi +unitsYards=码 +unitsYardsAbbr=yd + +unitsAcres=英亩 +unitsAcresAbbr=ac +unitsHectares=公顷 +unitsHectaresAbbr=ha +unitsSquareFeet=平方英尺 +unitsSquareFeetAbbr=sq ft +unitsSquareKilometers=平方公里 +unitsSquareKilometersAbbr=sq km +unitsSquareMeters=平方米 +unitsSquareMetersAbbr=sq m +unitsSquareMiles=平方英里 +unitsSquareMilesAbbr=sq mi +unitsSquareYards=平方码 +unitsSquareYardsAbbr=sq yd + + +tocMapLayerZoomToLabel=缩放至 +tocMapLayerTransparencyLabel=透明度 +tocMapLayerOpaqueLabel=不透明 +tocMapLayerTransparentLabel=透明 +tocMapLayerMoveUpLabel=上移 +tocMapLayerMoveDownLabel=下移 +tocMapLayerRemoveLabel=移除 +tocMapLayerDescriptionLabel=描述 +tocMapLayerDownloadLabel=下载 + + +incorrectLayerTypeText={0} 不是受支持的图层类型。请改用“arcims”、“bing”、“csv”“dynamic”、“feature”、“georss”、“image”、“kml”、“osm”、“tiled”、“wms”或“wmts”。 + + +missingConfigFileText=无法找到 {0} +httpResponseStatus=http 响应状态: {0} +faultCode=错误代码: {0} +faultInfo=错误信息: {0} +faultDetail=详细的错误信息: {0} + + +parseConfigErrorText=解析配置文件 {0} 时出现问题 +standalonePlayerExternalInterfaceErrorText=出现了某个错误。ExternalInterface 在单独的播放器中无法正常运行。 +layerFailedToLoad:{0} 图层加载失败:{1} +couldNotFetchBasemapData=无法取得底图数据:{0} +couldNotConnectToPortal=无法连接到门户。 +couldNotQueryPortal=无法查询门户。 +couldNotQueryPortalItems=无法查询门户项。 +serverMissingCrossDomain=GIS Server 缺少跨域文件。 +serviceIsInaccessible=服务不存在或不可访问。 +unauthorizedAccess=您没有访问此服务的权限。 +unknownErrorCause=未知错误原因。 +resourceAccessDenied=您没有访问此资源的权限。 +signInAborted=登录已终止。 +invalidWidgetId=无效的微件 ID:{0} +printTaskExecutionError=执行打印任务时出错:\n\n{0} +gpServiceConnectionError=无法连接到 GP 服务:\n{0}\n\n{1}\n{2} +locatorServiceConnectionError=无法连接到定位器服务:\n{0}\n\n{1}\n{2} +singleLineGeocodingNotSupportedError=定位器服务不支持单行。 +rssFeedParsingError=解析 RSS feed 时出现问题。{0} +httpResponseNotXMLError=HTTP 响应不是 XML。 +unknownRSSFeedTypeError=无法确定 RSS feed 类型。 +initializationError=初始化 {0} 时出现问题 +unableToDetermineGPExecutionType=无法确定 Geoprocessing 执行类型: +projectionError=投影几何形状 {0} 时出错 +cannotRunTaskExecutionTypeUnknownError=无法运行任务:未知的执行类型。 +layerDataRetrievalError=无法检索图层数据。 +couldNotDeleteFeature=无法删除要素 +couldNotUpdateFeatureError=无法更新要素,正在恢复旧值 + + +configFileCrossDomain=可能发生跨域问题: {0}{1} + + +openToolTip=单击打开鹰眼图 +closeToolTip=单击关闭鹰眼图 + + +layerListLabel=详细信息... +basemap=基础底图 + + +aboutLabel=关于 +searchPrompt=输入地址 +searchResultTitleLabel=位置 +noResultsFoundLabel=未找到任何结果 + + +fullExtentLabel=全图 +panDownLabel=向下平移 +panLeftLabel=向左平移 +panRightLabel=向右平移 +panUpLabel=向上平移 +previousExtentLabel=前一视图 +nextExtentLabel=后一视图 +panLabel=平移 +zoomInLabel=放大 +zoomOutLabel=缩小 + + + + + + +addTextLabel=添加文本 +drawPointLabel=绘制点 +drawLineLabel=绘制线 +drawFreehandLineLabel=绘制手绘线 +drawPolygonLabel=绘制面 +drawFreehandPolygonLabel=绘制手绘面 +drawRectangleLabel=绘制矩形 +drawMapExtentLabel=绘制地图范围 +drawCircleLabel=绘制圆 +drawEllipseLabel=绘制椭圆 +drawClearLabel=清除绘图 + +markerStyleCircle=圆形 +markerStyleCross=十字形 +markerStyleDiamond=菱形 +markerStyleSquare=方形 +markerStyleTriangle=三角形 +markerStyleX=X + +textFont1=Arial +textFont2=SimSun +textFont3=SIMHEI +textFont4=Comic Sans MS +textFont5=FangSong +textFont6=Verdana + +lineStyleSolid=实线 +lineStyleDash=虚线 +lineStyleDot=点线 +lineStyleDashDot=点划线 +lineStyleDashDotDot=双点划线 + +fillStyleSolid=实体 +fillStyleBackwardDiagonal=反向对角线 +fillStyleCross=十字形 +fillStyleForwardDiagonal=正向对角线 +fillStyleHorizontal=水平 +fillStyleVertical=垂直 + + + +markerAlphaLabel=透明度 +markerColorLabel=标记颜色 +markerSizeLabel=大小 +markerStyleLabel=样式 +markerOutlineColorLabel=轮廓颜色 +markerOutlineWidthLabel=宽度 +textLabel=文本 +textColorLabel=颜色 +textFontLabel=字体 +textSizeLabel=大小 +textBoldLabel=B +textBoldTooltip=粗体 +textItalicLabel=I +textItalicTooltip=斜体 +textUnderlineLabel=U +textUnderlineTooltip=下划线 +lineAlphaLabel=透明度 +lineColorLabel=线颜色 +lineStyleLabel=样式 +lineWidthLabel=宽度 +fillAlphaLabel=透明度 +fillColorLabel=填充颜色 +fillStyleLabel=样式 +fillOutlineColorLabel=轮廓颜色 +fillOutlineWidthLabel=宽度 + + + + +showMeasurementsLabel=显示测量结果 +distanceUnitsLabel=距离单位 +areaUnitsLabel=面积单位 +areaLabel=面积: +perimeterLabel=周长: +lengthLabel=长度: + + +bookmarksLabel=书签 +addbookmarksLabel=添加书签 +addLabel=将当前范围作为书签添加,并赋予名称 +bookmarkSubmitLabel=添加书签 +bookmarkMissingNameLabel=请输入书签的名称。 +deleteBookmarkTooltip=删除书签 + + +descLabel=提取数据并下载 zip 文件 +step1Label=1. 选择区域 +dataCurrentExtentLabel=1. 将从当前范围提取数据。 +step2Label=2. 选择要提取的图层 +step3Label=3. 选择文件格式 +step4Label=4. 选择栅格格式 +step5Label=5. 空间参考 +extractButtonLabel=提取 +step1ErrorLabel=请选择一个感兴趣的区域。 +step2ErrorLabel=请选择要提取的图层。 +emptyResultsLabel=任务已完成但未返回任何结果。 +saveDataFileLabel=数据文件已创建。是否要保存它? + + +attributesLabel=属性 +attachmentsLabel=附件 +relatedRecordsLabel=相关记录 +featureLayerOutOfScaleText=此要素图层超出比例范围 +showAttachmentsText=附件 +showRelatedRecordsText=相关记录 +showAttributesText=返回 +selectTemplateText=选择用于创建要素的模板 +noEditableLayersText=没有可编辑的图层。 +noCreateCapabilityLayersText=没有任何图层具有创建功能。 +layerNotSupportingAttachmentsText=此图层不支持附件 +noAttachmentsText=不包含附件 +chooseFileText=选择一个附件 +attachmentSubmitLabel=提交 +attachmentCancelLabel=取消 +singleAttachmentText=要素包含 {0} 个附件 +multipleAttachmentsText=要素包含 {0} 个附件 + + +layerListTitle=图层可见性 + + +locateSubmitLabel=定位 +addressLabel=地址 +coordinatesLabel=坐标 +addressTitle=输入地址 +coordinatesTitle=输入坐标 +xLabel=经度(X) +yLabel=纬度(Y) +locationsLabel=找到的位置: +bingCulture=zh-CN +requiredFields=必填字段: +requiredField=必填字段: +deleteResultTooltip=删除结果 +resultScoreText=得分: +bingResultConfidenceText=可信度: + + +printSubmitLabel=打印 +printTitle= +printSubtitle= +printCopyright= +printTitleLabel=标题 +printSubtitleLabel=子标题 +printCopyrightLabel=版权 +printAuthorLabel=作者 +printLayoutTemplatesLabel=布局模板 +printFormatsLabel=格式 +printScaleLabel=使用此比例 + + +filterTitleBarTooltip=过滤结果 +showallTitleBarTooltip=显示全部 +filterButtonLabel=过滤 +clearButtonLabel=显示全部 +featuresFoundLabel=找到的要素: {0} + + +drivingDirectionLabel=驾车指示 +routeSubmitLabel=获取方向 +moveUpTooltip=上移 +moveDownTooltip=下移 +addLocationTooltip=单击地图添加位置 +optionsLabel=选项 +bestSequenceLabel=查找最佳顺序 +milesLabel=英里 +metricLabel=千米 +changeRouteSymbolLabel=更改路径符号 +editRouteLabel=编辑路径 + + +graphicalTitleBarTooltip=选择要素 +textTitleBarTooltip=按属性选择 +graphicalsearchLabel=按以下方式选择要素 +textsearchLabel=按属性选择 +layerLabel=搜索图层 +nolayerLabel=未定义搜索图层。 +searchSubmitLabel=搜索 +selectionLabel=所选要素: + + +latitudeLabel=纬度 +longitudeLabel=经度 + + +gpSubmitLabel=提交 +inputLabel=输入 +helpLabel=帮助 +outputLabel=输出 +copyToClipboard=复制到剪贴板 +unsupportedInputType=不支持 {0} 输入 +currentExtentWillBeUsedAsInput=当前范围将用作输入。 + + +zoomLabel=缩放至 + + +helloContent=在配置文件中更改此文本。 + + +widgetIDWidgetLabelTemplate=微件 ID:{0},微件标签:{1} +widgetIDWidgetStateTemplate=微件 ID:{0},微件状态:{1} +itemLabelWidgetIDItemIDTemplate={0} 微件 ID:{1} + + +layerSelectionLabel=选择图层 +drawToolMenuLabel=选择绘制工具 +selectLabel=选择 +noLayersLabel=无图层 +noChartDataToDisplayLabel=不显示任何图表数据 featureLayerNotVisibleText=要素图层不可见或超出比例范围 \ No newline at end of file diff --git a/src/apps/ar/HeaderControllerWidget.xml b/src/apps/ar/HeaderControllerWidget.xml index cadc024..80bcf24 100644 --- a/src/apps/ar/HeaderControllerWidget.xml +++ b/src/apps/ar/HeaderControllerWidget.xml @@ -1,25 +1,25 @@ - - - - - http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer - - - - - - - -
- ArcGIS Viewer for Flex -

- ]]> -
- -
-
- \ No newline at end of file diff --git a/src/apps/ar/config.xml b/src/apps/ar/config.xml index 7c6f954..74ee333 100644 --- a/src/apps/ar/config.xml +++ b/src/apps/ar/config.xml @@ -1,46 +1,46 @@ - - - - ArcGIS Viewer for Flex - rtl - assets/images/logo.png - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + ArcGIS Viewer for Flex + rtl + assets/images/logo.png + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/apps/de_DE/BookmarkWidget.xml b/src/apps/de_DE/BookmarkWidget.xml index eb092f2..006dc52 100644 --- a/src/apps/de_DE/BookmarkWidget.xml +++ b/src/apps/de_DE/BookmarkWidget.xml @@ -1,16 +1,16 @@ - - - - -13934000 2699500 -8034300 6710900 - -13638000 4541000 -13632000 4551000 - -9559973 4601704 -9529513 4621654 - -13211400 3993400 -13119200 4056100 - 13917200 3452300 16908700 5477600 - -1039800 4665500 -993700 4696800 - -8732266 -8111526 -6810170 -1859588 - - - + + + + -13934000 2699500 -8034300 6710900 + -13638000 4541000 -13632000 4551000 + -9559973 4601704 -9529513 4621654 + -13211400 3993400 -13119200 4056100 + 13917200 3452300 16908700 5477600 + -1039800 4665500 -993700 4696800 + -8732266 -8111526 -6810170 -1859588 + + + diff --git a/src/apps/de_DE/HeaderControllerWidget.xml b/src/apps/de_DE/HeaderControllerWidget.xml index c682af4..d9d2bc3 100644 --- a/src/apps/de_DE/HeaderControllerWidget.xml +++ b/src/apps/de_DE/HeaderControllerWidget.xml @@ -1,25 +1,25 @@ - - - - - http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer - - - - - - - -
- ArcGIS Viewer for Flex -

- ]]> -
- -
-
- \ No newline at end of file diff --git a/src/apps/de_DE/config.xml b/src/apps/de_DE/config.xml index ff960a9..081800a 100644 --- a/src/apps/de_DE/config.xml +++ b/src/apps/de_DE/config.xml @@ -1,45 +1,45 @@ - - - - ArcGIS Viewer for Flex - assets/images/logo.png - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + ArcGIS Viewer for Flex + assets/images/logo.png + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/apps/es_ES/BookmarkWidget.xml b/src/apps/es_ES/BookmarkWidget.xml index c4b214f..80eeb33 100644 --- a/src/apps/es_ES/BookmarkWidget.xml +++ b/src/apps/es_ES/BookmarkWidget.xml @@ -1,16 +1,16 @@ - - - - -13934000 2699500 -8034300 6710900 - -13638000 4541000 -13632000 4551000 - -9559973 4601704 -9529513 4621654 - -13211400 3993400 -13119200 4056100 - 13917200 3452300 16908700 5477600 - -1039800 4665500 -993700 4696800 - -8732266 -8111526 -6810170 -1859588 - - - + + + + -13934000 2699500 -8034300 6710900 + -13638000 4541000 -13632000 4551000 + -9559973 4601704 -9529513 4621654 + -13211400 3993400 -13119200 4056100 + 13917200 3452300 16908700 5477600 + -1039800 4665500 -993700 4696800 + -8732266 -8111526 -6810170 -1859588 + + + diff --git a/src/apps/es_ES/HeaderControllerWidget.xml b/src/apps/es_ES/HeaderControllerWidget.xml index 28a36cf..845c4ff 100644 --- a/src/apps/es_ES/HeaderControllerWidget.xml +++ b/src/apps/es_ES/HeaderControllerWidget.xml @@ -1,25 +1,25 @@ - - - - - http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer - - - - - - - -
- ArcGIS Viewer for Flex -

- ]]> -
- -
-
- \ No newline at end of file diff --git a/src/apps/es_ES/config.xml b/src/apps/es_ES/config.xml index f4c73ee..003fa04 100644 --- a/src/apps/es_ES/config.xml +++ b/src/apps/es_ES/config.xml @@ -1,45 +1,45 @@ - - - - ArcGIS Viewer for Flex - assets/images/logo.png - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + ArcGIS Viewer for Flex + assets/images/logo.png + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/apps/fr_FR/BookmarkWidget.xml b/src/apps/fr_FR/BookmarkWidget.xml index f19e6f7..6267eaf 100644 --- a/src/apps/fr_FR/BookmarkWidget.xml +++ b/src/apps/fr_FR/BookmarkWidget.xml @@ -1,16 +1,16 @@ - - - - -13934000 2699500 -8034300 6710900 - -13638000 4541000 -13632000 4551000 - -9559973 4601704 -9529513 4621654 - -13211400 3993400 -13119200 4056100 - 13917200 3452300 16908700 5477600 - -1039800 4665500 -993700 4696800 - -8732266 -8111526 -6810170 -1859588 - - - + + + + -13934000 2699500 -8034300 6710900 + -13638000 4541000 -13632000 4551000 + -9559973 4601704 -9529513 4621654 + -13211400 3993400 -13119200 4056100 + 13917200 3452300 16908700 5477600 + -1039800 4665500 -993700 4696800 + -8732266 -8111526 -6810170 -1859588 + + + diff --git a/src/apps/fr_FR/HeaderControllerWidget.xml b/src/apps/fr_FR/HeaderControllerWidget.xml index a073514..13baebe 100644 --- a/src/apps/fr_FR/HeaderControllerWidget.xml +++ b/src/apps/fr_FR/HeaderControllerWidget.xml @@ -1,25 +1,25 @@ - - - - - http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer - - - - - - - -
- ArcGIS Viewer for Flex -

- ]]> -
- -
-
- \ No newline at end of file diff --git a/src/apps/fr_FR/config.xml b/src/apps/fr_FR/config.xml index 9a450ea..db6a338 100644 --- a/src/apps/fr_FR/config.xml +++ b/src/apps/fr_FR/config.xml @@ -1,45 +1,45 @@ - - - - ArcGIS Viewer for Flex - assets/images/logo.png - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + ArcGIS Viewer for Flex + assets/images/logo.png + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/apps/it_IT/HeaderControllerWidget.xml b/src/apps/it_IT/HeaderControllerWidget.xml index 8787e50..70711e0 100644 --- a/src/apps/it_IT/HeaderControllerWidget.xml +++ b/src/apps/it_IT/HeaderControllerWidget.xml @@ -1,25 +1,25 @@ - - - - - http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer - - - - - - - -
- ArcGIS Viewer for Flex -

- ]]> -
- -
-
- \ No newline at end of file diff --git a/src/apps/it_IT/config.xml b/src/apps/it_IT/config.xml index 926bdf1..698b724 100644 --- a/src/apps/it_IT/config.xml +++ b/src/apps/it_IT/config.xml @@ -1,45 +1,45 @@ - - - - ArcGIS Viewer for Flex - assets/images/logo.png - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + ArcGIS Viewer for Flex + assets/images/logo.png + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/apps/ja_JP/BookmarkWidget.xml b/src/apps/ja_JP/BookmarkWidget.xml index b8f6c46..6f287ae 100644 --- a/src/apps/ja_JP/BookmarkWidget.xml +++ b/src/apps/ja_JP/BookmarkWidget.xml @@ -1,16 +1,16 @@ - - - - -13934000 2699500 -8034300 6710900 - -13638000 4541000 -13632000 4551000 - -9559973 4601704 -9529513 4621654 - -13211400 3993400 -13119200 4056100 - 13917200 3452300 16908700 5477600 - -1039800 4665500 -993700 4696800 - -8732266 -8111526 -6810170 -1859588 - - - + + + + -13934000 2699500 -8034300 6710900 + -13638000 4541000 -13632000 4551000 + -9559973 4601704 -9529513 4621654 + -13211400 3993400 -13119200 4056100 + 13917200 3452300 16908700 5477600 + -1039800 4665500 -993700 4696800 + -8732266 -8111526 -6810170 -1859588 + + + diff --git a/src/apps/ja_JP/CoordinateWidget.xml b/src/apps/ja_JP/CoordinateWidget.xml index a6feecd..9c511d6 100644 --- a/src/apps/ja_JP/CoordinateWidget.xml +++ b/src/apps/ja_JP/CoordinateWidget.xml @@ -1,10 +1,10 @@ - - - - geo - - + + + + geo + + diff --git a/src/apps/ja_JP/HeaderControllerWidget.xml b/src/apps/ja_JP/HeaderControllerWidget.xml index 9962b8b..815b117 100644 --- a/src/apps/ja_JP/HeaderControllerWidget.xml +++ b/src/apps/ja_JP/HeaderControllerWidget.xml @@ -1,25 +1,25 @@ - - - - - http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer - - - - - - - -
- ArcGIS Viewer for Flex -

- ]]> -
- -
-
- \ No newline at end of file diff --git a/src/apps/ja_JP/config.xml b/src/apps/ja_JP/config.xml index 6b4fc2e..4355847 100644 --- a/src/apps/ja_JP/config.xml +++ b/src/apps/ja_JP/config.xml @@ -1,46 +1,46 @@ - - - - ArcGIS Viewer for Flex - assets/images/logo.png - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + ArcGIS Viewer for Flex + assets/images/logo.png + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/apps/ko_KR/BookmarkWidget.xml b/src/apps/ko_KR/BookmarkWidget.xml index 992ffc8..c52ac41 100644 --- a/src/apps/ko_KR/BookmarkWidget.xml +++ b/src/apps/ko_KR/BookmarkWidget.xml @@ -1,17 +1,17 @@ - - - - -13934000 2699500 -8034300 6710900 - -13638000 4541000 -13632000 4551000 - -9559973 4601704 -9529513 4621654 - -13211400 3993400 -13119200 4056100 - 13917200 3452300 16908700 5477600 - -1039800 4665500 -993700 4696800 - -8732266 -8111526 -6810170 -1859588 - - - - + + + + -13934000 2699500 -8034300 6710900 + -13638000 4541000 -13632000 4551000 + -9559973 4601704 -9529513 4621654 + -13211400 3993400 -13119200 4056100 + 13917200 3452300 16908700 5477600 + -1039800 4665500 -993700 4696800 + -8732266 -8111526 -6810170 -1859588 + + + + diff --git a/src/apps/ko_KR/HeaderControllerWidget.xml b/src/apps/ko_KR/HeaderControllerWidget.xml index 2f45dd2..58c954c 100644 --- a/src/apps/ko_KR/HeaderControllerWidget.xml +++ b/src/apps/ko_KR/HeaderControllerWidget.xml @@ -1,25 +1,25 @@ - - - - - http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer - - - - - - - -
- ArcGIS Viewer for Flex -

- ]]> -
- -
-
- \ No newline at end of file diff --git a/src/apps/ko_KR/config.xml b/src/apps/ko_KR/config.xml index 5c5bf61..4ad6090 100644 --- a/src/apps/ko_KR/config.xml +++ b/src/apps/ko_KR/config.xml @@ -1,45 +1,45 @@ - - - - ArcGIS Viewer for Flex - assets/images/logo.png - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + ArcGIS Viewer for Flex + assets/images/logo.png + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/apps/nb_NO/BookmarkWidget.xml b/src/apps/nb_NO/BookmarkWidget.xml index 992ffc8..c52ac41 100644 --- a/src/apps/nb_NO/BookmarkWidget.xml +++ b/src/apps/nb_NO/BookmarkWidget.xml @@ -1,17 +1,17 @@ - - - - -13934000 2699500 -8034300 6710900 - -13638000 4541000 -13632000 4551000 - -9559973 4601704 -9529513 4621654 - -13211400 3993400 -13119200 4056100 - 13917200 3452300 16908700 5477600 - -1039800 4665500 -993700 4696800 - -8732266 -8111526 -6810170 -1859588 - - - - + + + + -13934000 2699500 -8034300 6710900 + -13638000 4541000 -13632000 4551000 + -9559973 4601704 -9529513 4621654 + -13211400 3993400 -13119200 4056100 + 13917200 3452300 16908700 5477600 + -1039800 4665500 -993700 4696800 + -8732266 -8111526 -6810170 -1859588 + + + + diff --git a/src/apps/nb_NO/HeaderControllerWidget.xml b/src/apps/nb_NO/HeaderControllerWidget.xml index 04423d8..892d2bf 100644 --- a/src/apps/nb_NO/HeaderControllerWidget.xml +++ b/src/apps/nb_NO/HeaderControllerWidget.xml @@ -1,25 +1,25 @@ - - - - - http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer - - - - - - - -
- ArcGIS Viewer for Flex -

- ]]> -
- -
-
- \ No newline at end of file diff --git a/src/apps/nb_NO/config.xml b/src/apps/nb_NO/config.xml index 0b78f3c..fa9eed3 100644 --- a/src/apps/nb_NO/config.xml +++ b/src/apps/nb_NO/config.xml @@ -1,45 +1,45 @@ - - - - ArcGIS Viewer for Flex - assets/images/logo.png - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + ArcGIS Viewer for Flex + assets/images/logo.png + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/apps/nl_NL/BookmarkWidget.xml b/src/apps/nl_NL/BookmarkWidget.xml index 992ffc8..c52ac41 100644 --- a/src/apps/nl_NL/BookmarkWidget.xml +++ b/src/apps/nl_NL/BookmarkWidget.xml @@ -1,17 +1,17 @@ - - - - -13934000 2699500 -8034300 6710900 - -13638000 4541000 -13632000 4551000 - -9559973 4601704 -9529513 4621654 - -13211400 3993400 -13119200 4056100 - 13917200 3452300 16908700 5477600 - -1039800 4665500 -993700 4696800 - -8732266 -8111526 -6810170 -1859588 - - - - + + + + -13934000 2699500 -8034300 6710900 + -13638000 4541000 -13632000 4551000 + -9559973 4601704 -9529513 4621654 + -13211400 3993400 -13119200 4056100 + 13917200 3452300 16908700 5477600 + -1039800 4665500 -993700 4696800 + -8732266 -8111526 -6810170 -1859588 + + + + diff --git a/src/apps/nl_NL/HeaderControllerWidget.xml b/src/apps/nl_NL/HeaderControllerWidget.xml index 98ee832..f587b7f 100644 --- a/src/apps/nl_NL/HeaderControllerWidget.xml +++ b/src/apps/nl_NL/HeaderControllerWidget.xml @@ -1,25 +1,25 @@ - - - - - http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer - - - - - - - -
- ArcGIS Viewer for Flex -

- ]]> -
- -
-
- \ No newline at end of file diff --git a/src/apps/nl_NL/config.xml b/src/apps/nl_NL/config.xml index 8eb1858..87b342f 100644 --- a/src/apps/nl_NL/config.xml +++ b/src/apps/nl_NL/config.xml @@ -1,45 +1,45 @@ - - - - ArcGIS Viewer for Flex - assets/images/logo.png - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + ArcGIS Viewer for Flex + assets/images/logo.png + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/apps/pl_PL/BookmarkWidget.xml b/src/apps/pl_PL/BookmarkWidget.xml index 992ffc8..c52ac41 100644 --- a/src/apps/pl_PL/BookmarkWidget.xml +++ b/src/apps/pl_PL/BookmarkWidget.xml @@ -1,17 +1,17 @@ - - - - -13934000 2699500 -8034300 6710900 - -13638000 4541000 -13632000 4551000 - -9559973 4601704 -9529513 4621654 - -13211400 3993400 -13119200 4056100 - 13917200 3452300 16908700 5477600 - -1039800 4665500 -993700 4696800 - -8732266 -8111526 -6810170 -1859588 - - - - + + + + -13934000 2699500 -8034300 6710900 + -13638000 4541000 -13632000 4551000 + -9559973 4601704 -9529513 4621654 + -13211400 3993400 -13119200 4056100 + 13917200 3452300 16908700 5477600 + -1039800 4665500 -993700 4696800 + -8732266 -8111526 -6810170 -1859588 + + + + diff --git a/src/apps/pl_PL/HeaderControllerWidget.xml b/src/apps/pl_PL/HeaderControllerWidget.xml index 54e05a5..2d3443d 100644 --- a/src/apps/pl_PL/HeaderControllerWidget.xml +++ b/src/apps/pl_PL/HeaderControllerWidget.xml @@ -1,25 +1,25 @@ - - - - - http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer - - - - - - - -
- ArcGIS Viewer for Flex -

- ]]> -
- -
-
- \ No newline at end of file diff --git a/src/apps/pl_PL/config.xml b/src/apps/pl_PL/config.xml index c8d6aa7..5dda8ee 100644 --- a/src/apps/pl_PL/config.xml +++ b/src/apps/pl_PL/config.xml @@ -1,45 +1,45 @@ - - - - ArcGIS Viewer for Flex - assets/images/logo.png - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + ArcGIS Viewer for Flex + assets/images/logo.png + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/apps/pt_BR/HeaderControllerWidget.xml b/src/apps/pt_BR/HeaderControllerWidget.xml index 92b0339..7adc2cc 100644 --- a/src/apps/pt_BR/HeaderControllerWidget.xml +++ b/src/apps/pt_BR/HeaderControllerWidget.xml @@ -1,25 +1,25 @@ - - - - - http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer - - - - - - - -
- ArcGIS Viewer for Flex -

- ]]> -
- -
-
- \ No newline at end of file diff --git a/src/apps/pt_BR/config.xml b/src/apps/pt_BR/config.xml index a28e1c6..4c0bf61 100644 --- a/src/apps/pt_BR/config.xml +++ b/src/apps/pt_BR/config.xml @@ -1,45 +1,45 @@ - - - - ArcGIS Viewer for Flex - assets/images/logo.png - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + ArcGIS Viewer for Flex + assets/images/logo.png + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/apps/ro_RO/BookmarkWidget.xml b/src/apps/ro_RO/BookmarkWidget.xml index 992ffc8..c52ac41 100644 --- a/src/apps/ro_RO/BookmarkWidget.xml +++ b/src/apps/ro_RO/BookmarkWidget.xml @@ -1,17 +1,17 @@ - - - - -13934000 2699500 -8034300 6710900 - -13638000 4541000 -13632000 4551000 - -9559973 4601704 -9529513 4621654 - -13211400 3993400 -13119200 4056100 - 13917200 3452300 16908700 5477600 - -1039800 4665500 -993700 4696800 - -8732266 -8111526 -6810170 -1859588 - - - - + + + + -13934000 2699500 -8034300 6710900 + -13638000 4541000 -13632000 4551000 + -9559973 4601704 -9529513 4621654 + -13211400 3993400 -13119200 4056100 + 13917200 3452300 16908700 5477600 + -1039800 4665500 -993700 4696800 + -8732266 -8111526 -6810170 -1859588 + + + + diff --git a/src/apps/ro_RO/HeaderControllerWidget.xml b/src/apps/ro_RO/HeaderControllerWidget.xml index aabb284..8514dc7 100644 --- a/src/apps/ro_RO/HeaderControllerWidget.xml +++ b/src/apps/ro_RO/HeaderControllerWidget.xml @@ -1,25 +1,25 @@ - - - - - http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer - - - - - - - -
- ArcGIS Viewer for Flex -

- ]]> -
- -
-
- \ No newline at end of file diff --git a/src/apps/ro_RO/config.xml b/src/apps/ro_RO/config.xml index c1ce5a7..0a1d822 100644 --- a/src/apps/ro_RO/config.xml +++ b/src/apps/ro_RO/config.xml @@ -1,45 +1,45 @@ - - - - ArcGIS Viewer for Flex - assets/images/logo.png - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + ArcGIS Viewer for Flex + assets/images/logo.png + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/apps/ru_RU/HeaderControllerWidget.xml b/src/apps/ru_RU/HeaderControllerWidget.xml index b73b8d7..6ec4cfe 100644 --- a/src/apps/ru_RU/HeaderControllerWidget.xml +++ b/src/apps/ru_RU/HeaderControllerWidget.xml @@ -1,25 +1,25 @@ - - - - - http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer - - - - - - - -
- ArcGIS Viewer for Flex -

- ]]> -
- -
-
- \ No newline at end of file diff --git a/src/apps/ru_RU/config.xml b/src/apps/ru_RU/config.xml index 99fc920..9f0bcc0 100644 --- a/src/apps/ru_RU/config.xml +++ b/src/apps/ru_RU/config.xml @@ -1,45 +1,45 @@ - - - - ArcGIS Viewer for Flex - assets/images/logo.png - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + ArcGIS Viewer for Flex + assets/images/logo.png + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/apps/sv_SE/BookmarkWidget.xml b/src/apps/sv_SE/BookmarkWidget.xml index 992ffc8..c52ac41 100644 --- a/src/apps/sv_SE/BookmarkWidget.xml +++ b/src/apps/sv_SE/BookmarkWidget.xml @@ -1,17 +1,17 @@ - - - - -13934000 2699500 -8034300 6710900 - -13638000 4541000 -13632000 4551000 - -9559973 4601704 -9529513 4621654 - -13211400 3993400 -13119200 4056100 - 13917200 3452300 16908700 5477600 - -1039800 4665500 -993700 4696800 - -8732266 -8111526 -6810170 -1859588 - - - - + + + + -13934000 2699500 -8034300 6710900 + -13638000 4541000 -13632000 4551000 + -9559973 4601704 -9529513 4621654 + -13211400 3993400 -13119200 4056100 + 13917200 3452300 16908700 5477600 + -1039800 4665500 -993700 4696800 + -8732266 -8111526 -6810170 -1859588 + + + + diff --git a/src/apps/sv_SE/HeaderControllerWidget.xml b/src/apps/sv_SE/HeaderControllerWidget.xml index 04423d8..892d2bf 100644 --- a/src/apps/sv_SE/HeaderControllerWidget.xml +++ b/src/apps/sv_SE/HeaderControllerWidget.xml @@ -1,25 +1,25 @@ - - - - - http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer - - - - - - - -
- ArcGIS Viewer for Flex -

- ]]> -
- -
-
- \ No newline at end of file diff --git a/src/apps/sv_SE/config.xml b/src/apps/sv_SE/config.xml index 6fcafc8..e45b0ac 100644 --- a/src/apps/sv_SE/config.xml +++ b/src/apps/sv_SE/config.xml @@ -1,45 +1,45 @@ - - - - ArcGIS Viewer for Flex - assets/images/logo.png - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + ArcGIS Viewer for Flex + assets/images/logo.png + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/apps/zh_CN/BookmarkWidget.xml b/src/apps/zh_CN/BookmarkWidget.xml index 88641e7..b77643c 100644 --- a/src/apps/zh_CN/BookmarkWidget.xml +++ b/src/apps/zh_CN/BookmarkWidget.xml @@ -1,16 +1,16 @@ - - - - -13934000 2699500 -8034300 6710900 - -13638000 4541000 -13632000 4551000 - -9559973 4601704 -9529513 4621654 - -13211400 3993400 -13119200 4056100 - 13917200 3452300 16908700 5477600 - -1039800 4665500 -993700 4696800 - -8732266 -8111526 -6810170 -1859588 - - - + + + + -13934000 2699500 -8034300 6710900 + -13638000 4541000 -13632000 4551000 + -9559973 4601704 -9529513 4621654 + -13211400 3993400 -13119200 4056100 + 13917200 3452300 16908700 5477600 + -1039800 4665500 -993700 4696800 + -8732266 -8111526 -6810170 -1859588 + + + diff --git a/src/apps/zh_CN/CoordinateWidget.xml b/src/apps/zh_CN/CoordinateWidget.xml index a6feecd..9c511d6 100644 --- a/src/apps/zh_CN/CoordinateWidget.xml +++ b/src/apps/zh_CN/CoordinateWidget.xml @@ -1,10 +1,10 @@ - - - - geo - - + + + + geo + + diff --git a/src/apps/zh_CN/HeaderControllerWidget.xml b/src/apps/zh_CN/HeaderControllerWidget.xml index 78ae75f..8fb0cb1 100644 --- a/src/apps/zh_CN/HeaderControllerWidget.xml +++ b/src/apps/zh_CN/HeaderControllerWidget.xml @@ -1,25 +1,25 @@ - - - - - http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer - - - - - - - -
- ArcGIS Viewer for Flex -

- ]]> -
- -
-
- \ No newline at end of file diff --git a/src/apps/zh_CN/config.xml b/src/apps/zh_CN/config.xml index 0b8ca7c..3bf4230 100644 --- a/src/apps/zh_CN/config.xml +++ b/src/apps/zh_CN/config.xml @@ -1,46 +1,46 @@ - - - - ArcGIS Viewer for Flex - assets/images/logo.png - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + ArcGIS Viewer for Flex + assets/images/logo.png + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/com/esri/viewer/AppEvent.as b/src/com/esri/viewer/AppEvent.as index b2c821e..311edb4 100644 --- a/src/com/esri/viewer/AppEvent.as +++ b/src/com/esri/viewer/AppEvent.as @@ -1,391 +1,391 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2010-2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package com.esri.viewer -{ - -import com.esri.viewer.managers.EventBus; - -import flash.events.Event; - -/** - * AppEvent is used within the application to send messages among components - * through the EventBus. All event driven messaging in the Flex Viewer is - * using the AppEvent. - * - *

The typical way of sending a message via the AppEvent is, for example:

- * - * - * AppEvent.dispatch(AppEvent.DATA_OPT_LAYERS, null, getOplayers)); - * - * - *

The typical way of receiving a message via the AppEvent is, for example:

- * - * AppEvent.addListener(AppEvent.DATA_PUBLISH, sharedDataUpdated); - * - * - * @see EventBus - */ -public class AppEvent extends Event -{ - //-------------------------------------------------------------------------- - // - // Class constants - // - //-------------------------------------------------------------------------- - - /** - * The error event type. This event type is used to send a user friendly - * error message via the event bus. A error window will display the error - * message. - * - *

When sending the error message, the data sent with the AppEvent is the - * error string. For example:

- * - * - * AppEvent.dispatch(AppEvent.APP_ERROR, "An Error Message")); - * - * - * @see components.ErrorWindow - */ - public static const APP_ERROR:String = "appError"; - - /** - * This event type indicates that the Flex Viewer application has completed loading the - * configuration file. The ConfigManager sends this event so that other components that - * are interested in obtaining configuration data can listen to this event. - * - * @see ConfigManager - */ - public static const CONFIG_LOADED:String = "configLoaded"; - - /** - * This event type indicates that the map is loaded. The MapManager sends this event so - * that other components such as the Controller can start working with the map. - * - * @see MapManager - * @see Controller - */ - public static const MAP_LOADED:String = "mapLoaded"; - - public static const MAP_RESIZE:String = "mapResize"; - - public static const MAP_LAYER_VISIBLE:String = "mapLayerVisibleChange"; - - /** - * This event type indicates a dynamic layer is loaded. - */ - public static const LAYER_LOADED:String = "layerLoaded"; - - //public static const LAYER_VISIBLE_CHANGED:String = "layerVisibilityChanged"; - /** - * This event type is used by the Controller to indicate the base map has changed. - * - * @see Controller - */ - public static const BASEMAP_SWITCH:String = "basemapSwitch"; - - - /** - * This event type is used by either Flex Viewer components or a widget to - * request set the map naviation method. The map navigation method could be - * pan, zoomin, zoomout, etc. - * - *

The navigation methods supported are:

- * - * pan (Navigation.PAN) - * zoomin (Navigation.ZOOM_IN) - * zoomout (Navigation.ZOOM_OUT) - * zoomfull (ViewerContainer.NAVIGATION_ZOOM_FULL) - * zoomprevious (ViewerContainer.NAVIGATION_ZOOM_PREVIOUS) - * zoomnext (ViewerContainer.NAVIGATION_ZOOM_NEXT) - * - * - *

The navigation request can be sent as such:

- * - * var data:Object = - * { - * tool: Navigation.PAN, - * status: status - * } - * AppEvent.dispatch(AppEvent.SET_MAP_NAVIGATION, false, false, data)); - * - * - */ - public static const SET_MAP_NAVIGATION:String = "setMapNavigation"; - - /** - * This event type is used to set the status text shown at the controller bar. to AppEvent - * to set the status string, for example: - * - * - * dispatchEvent(new AppEvent(AppEvent.SET_STATUS, false, false, status)); - * - */ - public static const SET_STATUS:String = "setStatus"; - - /** - * Used to show the info windows on the map through the AppEvent via EventBus. - * - * - * AppEvent.dispatch(AppEvent.SHOW_INFOWINDOW, infoData); - * - * - * The infoData is a dynamic object structure as, for example: - * - * var infoData:Object = - * { - * icon: icon, //a Image object - * title: "a title string", - * content: "a string", - * link: "http://a.url.com", - * point: point, //a Point object - * geometry: geom //a Geometry object - * }; - * - */ - public static const SHOW_INFOWINDOW:String = "widgetShowInfo"; - - /** - * Used to set map's interactive mode, such as Draw point, line, etc. To - * use AppEvent via EventBus: - * - * - * AppEvent.dispatch(AppEvent.SET_MAP_ACTION, data)); - * - * - * Where data is a dynamic data structure: - * - * - * var data:Object = - * { - * tool: action, //an action string token - * status: "status string", - * handler: callback //a callback Function - * } - * - * Please refer to the Developer's Guide for details. - */ - public static const SET_MAP_ACTION:String = "setMapAction"; - - /** - * For widget chain and data manager to manage the session generated data. - */ - public static const DATA_PUBLISH:String = "dataPublishing"; - - /** - * For widget chain. TBD - */ - public static const DATA_NEW_PUBLISHED:String = "dataPublished"; - - /** - * for widget chain. TBD - */ - public static const DATA_FETCH_ALL:String = "dataFetchAll"; - - public static const DATA_FETCH:String = "dataFetch"; - - public static const DATA_SENT:String = "dataFetched"; - - public static const DATA_OPT_LAYERS:String = "dataOperationalLayers"; - - public static const DATA_CREATE_INFOWIDGET:String = "createInfoWidget"; - - /** - * for widget layout - */ - public static const CHANGE_LAYOUT:String = "changeLayout"; - - /** - * This event type is used by the Controller to indicate a widget run request - */ - public static const WIDGET_RUN:String = "widgetRunRequested"; - - /** - * used to send message to widget to change its state such as close, min and max - * var data:Object { - * id: widgetId, //as Number - * state: stateString //as String - * } - * AppEvent.publish(AppEvent.WIDGET_CHANGE_STATE, data); - */ - public static const WIDGET_CHANGE_STATE:String = "widgetChangeState"; - - public static const WIDGET_STATE_CHANGED:String = "widgetStateChanged"; - - /** - * for widget layout - */ - public static const WIDGET_FOCUS:String = "focusWidget"; - - public static const WIDGET_CHAIN_NEXT:String = "widgetChainNextRequested"; - - public static const WIDGET_CHAIN_START:String = "widgetChainStartRequested" - - public static const WIDGET_MGR_RESIZE:String = "widgetManagerResize"; - - public static const WIDGET_ADD:String = "addWidget"; - - public static const WIDGET_ADDED:String = "widgetAdded"; - - public static const WIDGET_CLOSE:String = "closeWidget"; - - public static const INFOWIDGET_REQUEST:String = "requestInfoWidget"; - - public static const INFOWIDGET_READY:String = "infoWidgetReady"; - - /** - * Builder events. - */ - public static const SET_TITLES:String = 'setTitles'; - - public static const SET_LOGO:String = 'setLogo'; - - public static const SET_TITLE_COLOR:String = 'setTitleColor'; - - public static const SET_TEXT_COLOR:String = 'setTextColor'; - - public static const SET_BACKGROUND_COLOR:String = 'setBackgroundColor'; - - public static const SET_ROLLOVER_COLOR:String = 'setRolloverColor'; - - public static const SET_SELECTION_COLOR:String = 'setSelectionColor'; - - public static const SET_APPLICATION_BACKGROUND_COLOR:String = 'setApplicationBackgroundColor'; - - public static const SET_ALPHA:String = 'setAlpha'; - - public static const SET_FONT_NAME:String = 'setFontName'; - - public static const SET_APP_TITLE_FONT_NAME:String = 'setAppTitleFontName'; - - public static const SET_SUB_TITLE_FONT_NAME:String = 'setSubTitleFontName'; - - public static const SET_PREDEFINED_STYLES:String = 'setPredefinedStyles'; - - public static const TOC_HIDDEN:String = "tocHidden"; - - public static const SUSPEND_TOC_HIDE_TIMER:String = "suspendTOCHideTimer"; - - public static const LAUNCHING_TOC_LAYER_MENU:String = "launchingTocLayerMenu"; - - /** - * Legend(Widget) Refresh - */ - public static const REFRESH_LEGEND:String = "refreshLegend"; - - //-------------------------------------------------------------------------- - // - // Constructor - // - //-------------------------------------------------------------------------- - - public function AppEvent(type:String, data:Object = null, callback:Function = null) - { - super(type); - _data = data; - _callback = callback; - } - - //-------------------------------------------------------------------------- - // - // Properties - // - //-------------------------------------------------------------------------- - - private var _data:Object; - - private var _callback:Function; - - /** - * The data will be passed via the event. It allows the event dispatcher to publish - * data to event listener(s). - */ - public function get data():Object - { - return _data; - } - - /** - * @private - */ - public function set data(value:Object):void - { - _data = value; - } - - /** - * The callback function associated with this event. - */ - public function get callback():Function - { - return _callback; - } - - /** - * @private - */ - public function set callback(value:Function):void - { - _callback = value; - } - - /** - * Override clone - */ - public override function clone():Event - { - return new AppEvent(this.type, this.data, this.callback); - } - - /** - * Dispatch this event. - */ - public function dispatch():Boolean - { - return EventBus.instance.dispatchEvent(this); - } - - /** - * Dispatch an AppEvent for specified type and with optional data and callback reference. - */ - public static function dispatch(type:String, data:Object = null, callback:Function = null):Boolean - { - return EventBus.instance.dispatchEvent(new AppEvent(type, data, callback)); - } - - public static function addListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void - { - EventBus.instance.addEventListener(type, listener, useCapture, priority, useWeakReference); - } - - public static function removeListener(type:String, listener:Function, useCapture:Boolean = false):void - { - EventBus.instance.removeEventListener(type, listener, useCapture); - } - - public static function setStatus(status:String):void - { - dispatch(AppEvent.SET_STATUS, status); - } - - public static function showError(content:String, title:String):void - { - var errorMessage:ErrorMessage = new ErrorMessage(content, title); - dispatch(AppEvent.APP_ERROR, errorMessage); - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2010-2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package com.esri.viewer +{ + +import com.esri.viewer.managers.EventBus; + +import flash.events.Event; + +/** + * AppEvent is used within the application to send messages among components + * through the EventBus. All event driven messaging in the Flex Viewer is + * using the AppEvent. + * + *

The typical way of sending a message via the AppEvent is, for example:

+ * + * + * AppEvent.dispatch(AppEvent.DATA_OPT_LAYERS, null, getOplayers)); + * + * + *

The typical way of receiving a message via the AppEvent is, for example:

+ * + * AppEvent.addListener(AppEvent.DATA_PUBLISH, sharedDataUpdated); + * + * + * @see EventBus + */ +public class AppEvent extends Event +{ + //-------------------------------------------------------------------------- + // + // Class constants + // + //-------------------------------------------------------------------------- + + /** + * The error event type. This event type is used to send a user friendly + * error message via the event bus. A error window will display the error + * message. + * + *

When sending the error message, the data sent with the AppEvent is the + * error string. For example:

+ * + * + * AppEvent.dispatch(AppEvent.APP_ERROR, "An Error Message")); + * + * + * @see components.ErrorWindow + */ + public static const APP_ERROR:String = "appError"; + + /** + * This event type indicates that the Flex Viewer application has completed loading the + * configuration file. The ConfigManager sends this event so that other components that + * are interested in obtaining configuration data can listen to this event. + * + * @see ConfigManager + */ + public static const CONFIG_LOADED:String = "configLoaded"; + + /** + * This event type indicates that the map is loaded. The MapManager sends this event so + * that other components such as the Controller can start working with the map. + * + * @see MapManager + * @see Controller + */ + public static const MAP_LOADED:String = "mapLoaded"; + + public static const MAP_RESIZE:String = "mapResize"; + + public static const MAP_LAYER_VISIBLE:String = "mapLayerVisibleChange"; + + /** + * This event type indicates a dynamic layer is loaded. + */ + public static const LAYER_LOADED:String = "layerLoaded"; + + //public static const LAYER_VISIBLE_CHANGED:String = "layerVisibilityChanged"; + /** + * This event type is used by the Controller to indicate the base map has changed. + * + * @see Controller + */ + public static const BASEMAP_SWITCH:String = "basemapSwitch"; + + + /** + * This event type is used by either Flex Viewer components or a widget to + * request set the map naviation method. The map navigation method could be + * pan, zoomin, zoomout, etc. + * + *

The navigation methods supported are:

+ * + * pan (Navigation.PAN) + * zoomin (Navigation.ZOOM_IN) + * zoomout (Navigation.ZOOM_OUT) + * zoomfull (ViewerContainer.NAVIGATION_ZOOM_FULL) + * zoomprevious (ViewerContainer.NAVIGATION_ZOOM_PREVIOUS) + * zoomnext (ViewerContainer.NAVIGATION_ZOOM_NEXT) + * + * + *

The navigation request can be sent as such:

+ * + * var data:Object = + * { + * tool: Navigation.PAN, + * status: status + * } + * AppEvent.dispatch(AppEvent.SET_MAP_NAVIGATION, false, false, data)); + * + * + */ + public static const SET_MAP_NAVIGATION:String = "setMapNavigation"; + + /** + * This event type is used to set the status text shown at the controller bar. to AppEvent + * to set the status string, for example: + * + * + * dispatchEvent(new AppEvent(AppEvent.SET_STATUS, false, false, status)); + * + */ + public static const SET_STATUS:String = "setStatus"; + + /** + * Used to show the info windows on the map through the AppEvent via EventBus. + * + * + * AppEvent.dispatch(AppEvent.SHOW_INFOWINDOW, infoData); + * + * + * The infoData is a dynamic object structure as, for example: + * + * var infoData:Object = + * { + * icon: icon, //a Image object + * title: "a title string", + * content: "a string", + * link: "http://a.url.com", + * point: point, //a Point object + * geometry: geom //a Geometry object + * }; + * + */ + public static const SHOW_INFOWINDOW:String = "widgetShowInfo"; + + /** + * Used to set map's interactive mode, such as Draw point, line, etc. To + * use AppEvent via EventBus: + * + * + * AppEvent.dispatch(AppEvent.SET_MAP_ACTION, data)); + * + * + * Where data is a dynamic data structure: + * + * + * var data:Object = + * { + * tool: action, //an action string token + * status: "status string", + * handler: callback //a callback Function + * } + * + * Please refer to the Developer's Guide for details. + */ + public static const SET_MAP_ACTION:String = "setMapAction"; + + /** + * For widget chain and data manager to manage the session generated data. + */ + public static const DATA_PUBLISH:String = "dataPublishing"; + + /** + * For widget chain. TBD + */ + public static const DATA_NEW_PUBLISHED:String = "dataPublished"; + + /** + * for widget chain. TBD + */ + public static const DATA_FETCH_ALL:String = "dataFetchAll"; + + public static const DATA_FETCH:String = "dataFetch"; + + public static const DATA_SENT:String = "dataFetched"; + + public static const DATA_OPT_LAYERS:String = "dataOperationalLayers"; + + public static const DATA_CREATE_INFOWIDGET:String = "createInfoWidget"; + + /** + * for widget layout + */ + public static const CHANGE_LAYOUT:String = "changeLayout"; + + /** + * This event type is used by the Controller to indicate a widget run request + */ + public static const WIDGET_RUN:String = "widgetRunRequested"; + + /** + * used to send message to widget to change its state such as close, min and max + * var data:Object { + * id: widgetId, //as Number + * state: stateString //as String + * } + * AppEvent.publish(AppEvent.WIDGET_CHANGE_STATE, data); + */ + public static const WIDGET_CHANGE_STATE:String = "widgetChangeState"; + + public static const WIDGET_STATE_CHANGED:String = "widgetStateChanged"; + + /** + * for widget layout + */ + public static const WIDGET_FOCUS:String = "focusWidget"; + + public static const WIDGET_CHAIN_NEXT:String = "widgetChainNextRequested"; + + public static const WIDGET_CHAIN_START:String = "widgetChainStartRequested" + + public static const WIDGET_MGR_RESIZE:String = "widgetManagerResize"; + + public static const WIDGET_ADD:String = "addWidget"; + + public static const WIDGET_ADDED:String = "widgetAdded"; + + public static const WIDGET_CLOSE:String = "closeWidget"; + + public static const INFOWIDGET_REQUEST:String = "requestInfoWidget"; + + public static const INFOWIDGET_READY:String = "infoWidgetReady"; + + /** + * Builder events. + */ + public static const SET_TITLES:String = 'setTitles'; + + public static const SET_LOGO:String = 'setLogo'; + + public static const SET_TITLE_COLOR:String = 'setTitleColor'; + + public static const SET_TEXT_COLOR:String = 'setTextColor'; + + public static const SET_BACKGROUND_COLOR:String = 'setBackgroundColor'; + + public static const SET_ROLLOVER_COLOR:String = 'setRolloverColor'; + + public static const SET_SELECTION_COLOR:String = 'setSelectionColor'; + + public static const SET_APPLICATION_BACKGROUND_COLOR:String = 'setApplicationBackgroundColor'; + + public static const SET_ALPHA:String = 'setAlpha'; + + public static const SET_FONT_NAME:String = 'setFontName'; + + public static const SET_APP_TITLE_FONT_NAME:String = 'setAppTitleFontName'; + + public static const SET_SUB_TITLE_FONT_NAME:String = 'setSubTitleFontName'; + + public static const SET_PREDEFINED_STYLES:String = 'setPredefinedStyles'; + + public static const TOC_HIDDEN:String = "tocHidden"; + + public static const SUSPEND_TOC_HIDE_TIMER:String = "suspendTOCHideTimer"; + + public static const LAUNCHING_TOC_LAYER_MENU:String = "launchingTocLayerMenu"; + + /** + * Legend(Widget) Refresh + */ + public static const REFRESH_LEGEND:String = "refreshLegend"; + + //-------------------------------------------------------------------------- + // + // Constructor + // + //-------------------------------------------------------------------------- + + public function AppEvent(type:String, data:Object = null, callback:Function = null) + { + super(type); + _data = data; + _callback = callback; + } + + //-------------------------------------------------------------------------- + // + // Properties + // + //-------------------------------------------------------------------------- + + private var _data:Object; + + private var _callback:Function; + + /** + * The data will be passed via the event. It allows the event dispatcher to publish + * data to event listener(s). + */ + public function get data():Object + { + return _data; + } + + /** + * @private + */ + public function set data(value:Object):void + { + _data = value; + } + + /** + * The callback function associated with this event. + */ + public function get callback():Function + { + return _callback; + } + + /** + * @private + */ + public function set callback(value:Function):void + { + _callback = value; + } + + /** + * Override clone + */ + public override function clone():Event + { + return new AppEvent(this.type, this.data, this.callback); + } + + /** + * Dispatch this event. + */ + public function dispatch():Boolean + { + return EventBus.instance.dispatchEvent(this); + } + + /** + * Dispatch an AppEvent for specified type and with optional data and callback reference. + */ + public static function dispatch(type:String, data:Object = null, callback:Function = null):Boolean + { + return EventBus.instance.dispatchEvent(new AppEvent(type, data, callback)); + } + + public static function addListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void + { + EventBus.instance.addEventListener(type, listener, useCapture, priority, useWeakReference); + } + + public static function removeListener(type:String, listener:Function, useCapture:Boolean = false):void + { + EventBus.instance.removeEventListener(type, listener, useCapture); + } + + public static function setStatus(status:String):void + { + dispatch(AppEvent.SET_STATUS, status); + } + + public static function showError(content:String, title:String):void + { + var errorMessage:ErrorMessage = new ErrorMessage(content, title); + dispatch(AppEvent.APP_ERROR, errorMessage); + } +} + +} diff --git a/src/com/esri/viewer/BaseWidget.as b/src/com/esri/viewer/BaseWidget.as index 7e70336..3fda7a4 100644 --- a/src/com/esri/viewer/BaseWidget.as +++ b/src/com/esri/viewer/BaseWidget.as @@ -1,650 +1,650 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2010-2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package com.esri.viewer -{ - -import com.esri.ags.Map; -import com.esri.ags.symbols.Symbol; -import com.esri.viewer.utils.LocalizationUtil; - -import flash.events.Event; -import flash.events.IOErrorEvent; -import flash.events.SecurityErrorEvent; - -import mx.collections.ArrayCollection; -import mx.events.FlexEvent; -import mx.modules.Module; -import mx.rpc.events.FaultEvent; -import mx.rpc.events.ResultEvent; -import mx.rpc.http.HTTPService; -import mx.utils.StringUtil; - -[Event(name="widgetConfigLoaded", type="flash.events.Event")] -[Event(name="onChainRequest", type="com.esri.viewer.AppEvent")] - -/** - * BaseWidget is the foundation of all widgets. All widgets need to be derived from this BaseWidget class. - * - *

NOTE: Once a new widget class is created by extending this BaseWidget class, - * the developer is responsible for adding the new widget class to the Flash Builder project properties's module table. - * This allows the new widget to be compiled into a separate SWF file.

- */ -public class BaseWidget extends Module implements IBaseWidget -{ - //-------------------------------------------------------------------------- - // - // Constants - // - //-------------------------------------------------------------------------- - - private static const WIDGET_CONFIG_LOADED:String = "widgetConfigLoaded"; - - //-------------------------------------------------------------------------- - // - // Constructor - // - //-------------------------------------------------------------------------- - - public function BaseWidget() - { - this.autoLayout = true; - - addEventListener(FlexEvent.CREATION_COMPLETE, creationCompleteHandler); - AppEvent.addListener(AppEvent.WIDGET_CHANGE_STATE, widgetChangeStateHandler); - } - - //-------------------------------------------------------------------------- - // - // Variables - // - //-------------------------------------------------------------------------- - - /** - * The data structure that holds the configuration information parsed by the ConfigManager from config.xml. - * A widget can access top level configuration information through this property. - * The WidgetManager will set it when the widget is initialized. - * - * @see configData - * @see ConfigManager - */ - private var _configData:ConfigData; - - /** - * Current active map that the container shows. - * The WidgetManager will set its value when a widget is initialized. - */ - private var _map:Map; - - /** - * The default widget icon. - */ - private var _widgetIcon:String = "assets/images/i_widget.png"; - - private var _widgetTitle:String = ""; - - [Bindable] - private var _widgetId:Number; - - private var _configURL:String; - - private var _widgetPreload:String; - - private var _widgetState:String; - - private var _widgetTemplate:IWidgetTemplate; - - private var _isDraggable:Boolean = true; - - private var _isResizeable:Boolean = true; - - private var _initialWidth:Number = 0; - - private var _initialHeight:Number = 0; - - private var _waitForCreationComplete:Boolean = true; - - private var _isPartOfPanel:Boolean = false; - - //-------------------------------------------------------------------------- - // - // Properties - // - //-------------------------------------------------------------------------- - - //---------------------------------- - // configXML - //---------------------------------- - - private var _configXML:XML; - - /** - * The XML type of configuration data. - * @see configData - */ - public function get configXML():XML - { - return _configXML; - } - - /** - * @private - */ - public function set configXML(value:XML):void - { - _configXML = value; - } - - //---------------------------------- - // config - //---------------------------------- - - public function get config():String - { - return _configURL; - } - - /** - * Set configuration file URL. A widget can have its own configuration file. - * The URL of the widget configuration file is specified in the main config.xml. - * The WidgetManager will pass the URL for the configuration file to the actual widget. - * - * @param value the configuration file URL. - */ - public function set config(value:String):void - { - _configURL = value; - } - - //---------------------------------- - // config data - //---------------------------------- - - public function get configData():ConfigData - { - return _configData; - } - - /** - * Pass in application level configuration data parsed from config.xml. - * - * @param value the configuration data structure object. - * @see ConfigData - */ - public function set configData(value:ConfigData):void - { - _configData = value; - } - - //---------------------------------- - // proxy url - //---------------------------------- - - public function get proxyUrl():String - { - return _configData ? _configData.proxyUrl : null; - } - - //---------------------------------- - // Map - //---------------------------------- - - [Bindable] - /** - * Set a map object reference. Used by WidgetManager to pass in the current map. - * - * @param value the map reference object. - */ - public function get map():Map - { - return _map; - } - - public function set map(value:Map):void - { - _map = value; - } - - //---------------------------------- - // isDraggable - //---------------------------------- - - public function get isDraggable():Boolean - { - return _isDraggable; - } - - public function set isDraggable(value:Boolean):void - { - _isDraggable = value; - setWidgetTemplateControl(); - } - - //---------------------------------- - // isResizable - //---------------------------------- - - public function get isResizeable():Boolean - { - return _isResizeable; - } - - public function set isResizeable(value:Boolean):void - { - _isResizeable = value; - setWidgetTemplateControl(); - } - - //---------------------------------- - // widget id - //---------------------------------- - - /** - * Get the widget ID. A widget ID is an internally generated number. - */ - public function get widgetId():Number - { - return _widgetId; - } - - /** - * Set the widget ID. A widget ID is an internally generated number. - * - * @param value the Number id. - */ - public function set widgetId(value:Number):void - { - _widgetId = value; - } - - //---------------------------------- - // widget title - //---------------------------------- - - public function get widgetTitle():String - { - return _widgetTitle; - } - - /** - * Set the widget title. A widget title can be configured in the config.xml. - * - * @param value the title text. - */ - public function set widgetTitle(value:String):void - { - _widgetTitle = value; - } - - //---------------------------------- - // widget icon - //---------------------------------- - - public function get widgetIcon():String - { - return _widgetIcon; - } - - /** - * Set widget icon. - * A widget icon is usually a JPG or PNG file in 40x40 size and set in the config.xml. - * - * @param value the icon URL. - */ - public function set widgetIcon(value:String):void - { - _widgetIcon = value; - } - - //---------------------------------- - // isPartOfPanel - //---------------------------------- - [Bindable] - public function get isPartOfPanel():Boolean - { - return _isPartOfPanel; - } - - public function set isPartOfPanel(value:Boolean):void - { - _isPartOfPanel = value; - } - - //-------------------------------------------------------------------------- - // - // Methods - // - //-------------------------------------------------------------------------- - - private function creationCompleteHandler(event:Event):void - { - var children:Array = this.getChildren(); - for each (var child:Object in children) - { - if (child is IWidgetTemplate) - { - _widgetTemplate = child as IWidgetTemplate; - - _widgetTemplate.baseWidget = this; - - if (_widgetState) - { - _widgetTemplate.widgetState = _widgetState; - } - - if (_widgetPreload == WidgetStates.WIDGET_MINIMIZED) - { - _widgetTemplate.widgetState = WidgetStates.WIDGET_MINIMIZED; - } - } - } - if (_waitForCreationComplete) // by default wait for creationComplete before loading the config - { - loadConfigXML(); - } - } - - private function setWidgetTemplateControl():void - { - var children:Array = this.getChildren(); - for each (var child:Object in children) - { - if (child is IWidgetTemplate) - { - _widgetTemplate = child as IWidgetTemplate; - _widgetTemplate.resizable = isResizeable; - _widgetTemplate.draggable = isDraggable; - } - } - } - - private function widgetChangeStateHandler(event:AppEvent):void - { - var data:Object = event.data; - var reqId:Number = data.id as Number; - var reqState:String = data.state as String; - - if (reqId == this.widgetId) - { - this.setState(reqState); - } - } - - /** - * Set configuration file URL(infoconfig) for the info widget on operational layer. - * - * @param value the configuration file URL. - * @param waitForCreationComplete specifies whether to wait for creationComplete before loading the config. - */ - public function setInfoConfig(value:String, waitForCreationComplete:Boolean = true):void - { - this.config = value; - - _waitForCreationComplete = waitForCreationComplete; - if (!_waitForCreationComplete) - { - loadConfigXML(); //false for info widget, do not wait for creation complete to load the config - } - } - - public function setPreload(value:String):void - { - _widgetPreload = value; - } - - /** - * Get the widget state. - */ - public function getState():String - { - return _widgetState; - } - - /** - * Set the widget state. - * @param value the state string defined in BaseWidget. - */ - public function setState(value:String):void - { - _widgetState = value; - if (_widgetTemplate) - { - _widgetTemplate.widgetState = value; - } - notifyStateChanged(value); - } - - private function notifyStateChanged(widgetState:String):void - { - var data:Object = - { - id: this._widgetId, - state: widgetState - }; - AppEvent.dispatch(AppEvent.WIDGET_STATE_CHANGED, data); - } - - /** - * Add information from a widget to the DataManager so that it can be shared between widgets. - * - * @param key the widget name - * @param arrayCollection the list of object in infoData structure. - */ - public function addSharedData(key:String, arrayCollection:ArrayCollection):void - { - var data:Object = - { - key: key, - collection: arrayCollection - }; - AppEvent.dispatch(AppEvent.DATA_PUBLISH, data); - } - - public function fetchSharedData():void - { - AppEvent.dispatch(AppEvent.DATA_FETCH_ALL); - } - - public function showInfoWindow(infoData:Object):void - { - AppEvent.dispatch(AppEvent.SHOW_INFOWINDOW, infoData); - } - - public function setMapAction(action:String, status:String, symbol:Symbol, callback:Function, callback2:Function = null, showDrawTips:Boolean = true, enableGraphicsLayerMouseEvents:Boolean = false):void - { - var data:Object = - { - tool: action, - status: status, - symbol: symbol, - handler: callback, - showDrawTips: showDrawTips, - enableGraphicsLayerMouseEvents: enableGraphicsLayerMouseEvents, - handler2: callback2 - }; - AppEvent.dispatch(AppEvent.SET_MAP_ACTION, data); - } - - /** - * Set map navigation mode, such a pan, zoomin, etc. - *

The navigation methods supported are:

- * - * pan (Navigation.PAN) - * zoomin (Navigation.ZOOM_IN) - * zoomout (Navigation.ZOOM_OUT) - * zoomfull (ViewerContainer.NAVIGATION_ZOOM_FULL) - * zoomprevious (ViewerContainer.NAVIGATION_ZOOM_PREVIOUS) - * zoomnext (ViewerContainer.NAVIGATION_ZOOM_NEXT) - * - */ - public function setMapNavigation(navMethod:String, status:String):void - { - var data:Object = - { - tool: navMethod, - status: status - }; - AppEvent.dispatch(AppEvent.SET_MAP_NAVIGATION, data); - } - - public function showError(message:String, title:String = null):void - { - var errorTitle:String = title ? title : widgetTitle; - var errorMessage:ErrorMessage = new ErrorMessage(message, errorTitle); - AppEvent.dispatch(AppEvent.APP_ERROR, errorMessage); - } - - private function loadConfigXML():void - { - if (_configXML) - { - dispatchEvent(new Event(WIDGET_CONFIG_LOADED)); - } - else if (_configURL) - { - var configService:HTTPService = new HTTPService(); - configService.url = _configURL; - configService.resultFormat = HTTPService.RESULT_FORMAT_TEXT; - configService.addEventListener(ResultEvent.RESULT, configResultHandler); - configService.addEventListener(FaultEvent.FAULT, configFaultHandler); - configService.send(); - } - } - - private function configFaultHandler(event:mx.rpc.events.FaultEvent):void - { - // happens if for example a widget file is missing or have crossdomain problem - - var sInfo:String = ""; - - // Missing file - if (event.fault.rootCause is IOErrorEvent) - { - var ioe:IOErrorEvent = event.fault.rootCause as IOErrorEvent; - if (ioe.text.indexOf("2032: Stream Error. URL:") > -1) - { - sInfo += StringUtil.substitute(getDefaultString('missingConfigFileText'), ioe.text.substring(32)) + "\n\n"; - } - else - { - // some other IOError - sInfo += event.fault.rootCause + "\n\n"; - } - } - - // config file with crossdomain issue - if (event.fault.rootCause is SecurityErrorEvent) - { - var sec:SecurityErrorEvent = event.fault.rootCause as SecurityErrorEvent; - if (sec.text.indexOf("Error #2048: ") > -1) // debug player - { - sInfo += StringUtil.substitute(getDefaultString('configFileCrossDomain'), "\n", sec.text) + "\n\n"; - } - else if (sec.text.indexOf("Error #2048") > -1) // non-debug player - { - sInfo += StringUtil.substitute(getDefaultString('configFileCrossDomain'), "\n", sec.toString()) + "\n\n"; - } - else - { - // some other Security error - sInfo += event.fault.rootCause + "\n\n"; - } - } - - if (event.statusCode) // e.g. 404 - Not Found - http://en.wikipedia.org/wiki/List_of_HTTP_status_codes - { - sInfo += StringUtil.substitute(getDefaultString('httpResponseStatus'), event.statusCode) + "\n\n"; - } - - sInfo += StringUtil.substitute(getDefaultString('faultCode'), event.fault.faultCode) + "\n\n"; - sInfo += StringUtil.substitute(getDefaultString('faultInfo'), event.fault.faultString) + "\n\n"; - sInfo += StringUtil.substitute(getDefaultString('faultDetail'), event.fault.faultDetail); - - showError(sInfo); - } - - private function configResultHandler(event:ResultEvent):void - { - try - { - configXML = XML(event.result); - dispatchEvent(new Event(WIDGET_CONFIG_LOADED)); - } - catch (error:Error) - { - showError(StringUtil.substitute(getDefaultString("parseConfigErrorText"), _configURL + "\n" + error.message)); - } - } - - public function get initialWidth():Number - { - return _initialWidth; - } - - public function set initialWidth(value:Number):void - { - _initialWidth = value; - } - - public function get initialHeight():Number - { - return _initialHeight; - } - - public function set initialHeight(value:Number):void - { - _initialHeight = value; - } - - public function setXYPosition(x:Number, y:Number):void - { - this.setLayoutBoundsPosition(x, y); - } - - public function setRelativePosition(left:String, right:String, top:String, bottom:String):void - { - if (left) - { - this.left = Number(left); - } - if (right) - { - this.right = Number(right); - } - if (top) - { - this.top = Number(top); - } - if (bottom) - { - this.bottom = Number(bottom); - } - } - - public function run():void - { - //TODO: need a better way of doing it - //This is to disable a widget's move and resize when it's loaded as a controller - isDraggable = true; - } - - public function getDefaultString(resourceName:String, ... params):String - { - //use Function#apply to avoid passing rest argument as Array - return LocalizationUtil.getDefaultString.apply(null, [ resourceName ].concat(params)); - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2010-2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package com.esri.viewer +{ + +import com.esri.ags.Map; +import com.esri.ags.symbols.Symbol; +import com.esri.viewer.utils.LocalizationUtil; + +import flash.events.Event; +import flash.events.IOErrorEvent; +import flash.events.SecurityErrorEvent; + +import mx.collections.ArrayCollection; +import mx.events.FlexEvent; +import mx.modules.Module; +import mx.rpc.events.FaultEvent; +import mx.rpc.events.ResultEvent; +import mx.rpc.http.HTTPService; +import mx.utils.StringUtil; + +[Event(name="widgetConfigLoaded", type="flash.events.Event")] +[Event(name="onChainRequest", type="com.esri.viewer.AppEvent")] + +/** + * BaseWidget is the foundation of all widgets. All widgets need to be derived from this BaseWidget class. + * + *

NOTE: Once a new widget class is created by extending this BaseWidget class, + * the developer is responsible for adding the new widget class to the Flash Builder project properties's module table. + * This allows the new widget to be compiled into a separate SWF file.

+ */ +public class BaseWidget extends Module implements IBaseWidget +{ + //-------------------------------------------------------------------------- + // + // Constants + // + //-------------------------------------------------------------------------- + + private static const WIDGET_CONFIG_LOADED:String = "widgetConfigLoaded"; + + //-------------------------------------------------------------------------- + // + // Constructor + // + //-------------------------------------------------------------------------- + + public function BaseWidget() + { + this.autoLayout = true; + + addEventListener(FlexEvent.CREATION_COMPLETE, creationCompleteHandler); + AppEvent.addListener(AppEvent.WIDGET_CHANGE_STATE, widgetChangeStateHandler); + } + + //-------------------------------------------------------------------------- + // + // Variables + // + //-------------------------------------------------------------------------- + + /** + * The data structure that holds the configuration information parsed by the ConfigManager from config.xml. + * A widget can access top level configuration information through this property. + * The WidgetManager will set it when the widget is initialized. + * + * @see configData + * @see ConfigManager + */ + private var _configData:ConfigData; + + /** + * Current active map that the container shows. + * The WidgetManager will set its value when a widget is initialized. + */ + private var _map:Map; + + /** + * The default widget icon. + */ + private var _widgetIcon:String = "assets/images/i_widget.png"; + + private var _widgetTitle:String = ""; + + [Bindable] + private var _widgetId:Number; + + private var _configURL:String; + + private var _widgetPreload:String; + + private var _widgetState:String; + + private var _widgetTemplate:IWidgetTemplate; + + private var _isDraggable:Boolean = true; + + private var _isResizeable:Boolean = true; + + private var _initialWidth:Number = 0; + + private var _initialHeight:Number = 0; + + private var _waitForCreationComplete:Boolean = true; + + private var _isPartOfPanel:Boolean = false; + + //-------------------------------------------------------------------------- + // + // Properties + // + //-------------------------------------------------------------------------- + + //---------------------------------- + // configXML + //---------------------------------- + + private var _configXML:XML; + + /** + * The XML type of configuration data. + * @see configData + */ + public function get configXML():XML + { + return _configXML; + } + + /** + * @private + */ + public function set configXML(value:XML):void + { + _configXML = value; + } + + //---------------------------------- + // config + //---------------------------------- + + public function get config():String + { + return _configURL; + } + + /** + * Set configuration file URL. A widget can have its own configuration file. + * The URL of the widget configuration file is specified in the main config.xml. + * The WidgetManager will pass the URL for the configuration file to the actual widget. + * + * @param value the configuration file URL. + */ + public function set config(value:String):void + { + _configURL = value; + } + + //---------------------------------- + // config data + //---------------------------------- + + public function get configData():ConfigData + { + return _configData; + } + + /** + * Pass in application level configuration data parsed from config.xml. + * + * @param value the configuration data structure object. + * @see ConfigData + */ + public function set configData(value:ConfigData):void + { + _configData = value; + } + + //---------------------------------- + // proxy url + //---------------------------------- + + public function get proxyUrl():String + { + return _configData ? _configData.proxyUrl : null; + } + + //---------------------------------- + // Map + //---------------------------------- + + [Bindable] + /** + * Set a map object reference. Used by WidgetManager to pass in the current map. + * + * @param value the map reference object. + */ + public function get map():Map + { + return _map; + } + + public function set map(value:Map):void + { + _map = value; + } + + //---------------------------------- + // isDraggable + //---------------------------------- + + public function get isDraggable():Boolean + { + return _isDraggable; + } + + public function set isDraggable(value:Boolean):void + { + _isDraggable = value; + setWidgetTemplateControl(); + } + + //---------------------------------- + // isResizable + //---------------------------------- + + public function get isResizeable():Boolean + { + return _isResizeable; + } + + public function set isResizeable(value:Boolean):void + { + _isResizeable = value; + setWidgetTemplateControl(); + } + + //---------------------------------- + // widget id + //---------------------------------- + + /** + * Get the widget ID. A widget ID is an internally generated number. + */ + public function get widgetId():Number + { + return _widgetId; + } + + /** + * Set the widget ID. A widget ID is an internally generated number. + * + * @param value the Number id. + */ + public function set widgetId(value:Number):void + { + _widgetId = value; + } + + //---------------------------------- + // widget title + //---------------------------------- + + public function get widgetTitle():String + { + return _widgetTitle; + } + + /** + * Set the widget title. A widget title can be configured in the config.xml. + * + * @param value the title text. + */ + public function set widgetTitle(value:String):void + { + _widgetTitle = value; + } + + //---------------------------------- + // widget icon + //---------------------------------- + + public function get widgetIcon():String + { + return _widgetIcon; + } + + /** + * Set widget icon. + * A widget icon is usually a JPG or PNG file in 40x40 size and set in the config.xml. + * + * @param value the icon URL. + */ + public function set widgetIcon(value:String):void + { + _widgetIcon = value; + } + + //---------------------------------- + // isPartOfPanel + //---------------------------------- + [Bindable] + public function get isPartOfPanel():Boolean + { + return _isPartOfPanel; + } + + public function set isPartOfPanel(value:Boolean):void + { + _isPartOfPanel = value; + } + + //-------------------------------------------------------------------------- + // + // Methods + // + //-------------------------------------------------------------------------- + + private function creationCompleteHandler(event:Event):void + { + var children:Array = this.getChildren(); + for each (var child:Object in children) + { + if (child is IWidgetTemplate) + { + _widgetTemplate = child as IWidgetTemplate; + + _widgetTemplate.baseWidget = this; + + if (_widgetState) + { + _widgetTemplate.widgetState = _widgetState; + } + + if (_widgetPreload == WidgetStates.WIDGET_MINIMIZED) + { + _widgetTemplate.widgetState = WidgetStates.WIDGET_MINIMIZED; + } + } + } + if (_waitForCreationComplete) // by default wait for creationComplete before loading the config + { + loadConfigXML(); + } + } + + private function setWidgetTemplateControl():void + { + var children:Array = this.getChildren(); + for each (var child:Object in children) + { + if (child is IWidgetTemplate) + { + _widgetTemplate = child as IWidgetTemplate; + _widgetTemplate.resizable = isResizeable; + _widgetTemplate.draggable = isDraggable; + } + } + } + + private function widgetChangeStateHandler(event:AppEvent):void + { + var data:Object = event.data; + var reqId:Number = data.id as Number; + var reqState:String = data.state as String; + + if (reqId == this.widgetId) + { + this.setState(reqState); + } + } + + /** + * Set configuration file URL(infoconfig) for the info widget on operational layer. + * + * @param value the configuration file URL. + * @param waitForCreationComplete specifies whether to wait for creationComplete before loading the config. + */ + public function setInfoConfig(value:String, waitForCreationComplete:Boolean = true):void + { + this.config = value; + + _waitForCreationComplete = waitForCreationComplete; + if (!_waitForCreationComplete) + { + loadConfigXML(); //false for info widget, do not wait for creation complete to load the config + } + } + + public function setPreload(value:String):void + { + _widgetPreload = value; + } + + /** + * Get the widget state. + */ + public function getState():String + { + return _widgetState; + } + + /** + * Set the widget state. + * @param value the state string defined in BaseWidget. + */ + public function setState(value:String):void + { + _widgetState = value; + if (_widgetTemplate) + { + _widgetTemplate.widgetState = value; + } + notifyStateChanged(value); + } + + private function notifyStateChanged(widgetState:String):void + { + var data:Object = + { + id: this._widgetId, + state: widgetState + }; + AppEvent.dispatch(AppEvent.WIDGET_STATE_CHANGED, data); + } + + /** + * Add information from a widget to the DataManager so that it can be shared between widgets. + * + * @param key the widget name + * @param arrayCollection the list of object in infoData structure. + */ + public function addSharedData(key:String, arrayCollection:ArrayCollection):void + { + var data:Object = + { + key: key, + collection: arrayCollection + }; + AppEvent.dispatch(AppEvent.DATA_PUBLISH, data); + } + + public function fetchSharedData():void + { + AppEvent.dispatch(AppEvent.DATA_FETCH_ALL); + } + + public function showInfoWindow(infoData:Object):void + { + AppEvent.dispatch(AppEvent.SHOW_INFOWINDOW, infoData); + } + + public function setMapAction(action:String, status:String, symbol:Symbol, callback:Function, callback2:Function = null, showDrawTips:Boolean = true, enableGraphicsLayerMouseEvents:Boolean = false):void + { + var data:Object = + { + tool: action, + status: status, + symbol: symbol, + handler: callback, + showDrawTips: showDrawTips, + enableGraphicsLayerMouseEvents: enableGraphicsLayerMouseEvents, + handler2: callback2 + }; + AppEvent.dispatch(AppEvent.SET_MAP_ACTION, data); + } + + /** + * Set map navigation mode, such a pan, zoomin, etc. + *

The navigation methods supported are:

+ * + * pan (Navigation.PAN) + * zoomin (Navigation.ZOOM_IN) + * zoomout (Navigation.ZOOM_OUT) + * zoomfull (ViewerContainer.NAVIGATION_ZOOM_FULL) + * zoomprevious (ViewerContainer.NAVIGATION_ZOOM_PREVIOUS) + * zoomnext (ViewerContainer.NAVIGATION_ZOOM_NEXT) + * + */ + public function setMapNavigation(navMethod:String, status:String):void + { + var data:Object = + { + tool: navMethod, + status: status + }; + AppEvent.dispatch(AppEvent.SET_MAP_NAVIGATION, data); + } + + public function showError(message:String, title:String = null):void + { + var errorTitle:String = title ? title : widgetTitle; + var errorMessage:ErrorMessage = new ErrorMessage(message, errorTitle); + AppEvent.dispatch(AppEvent.APP_ERROR, errorMessage); + } + + private function loadConfigXML():void + { + if (_configXML) + { + dispatchEvent(new Event(WIDGET_CONFIG_LOADED)); + } + else if (_configURL) + { + var configService:HTTPService = new HTTPService(); + configService.url = _configURL; + configService.resultFormat = HTTPService.RESULT_FORMAT_TEXT; + configService.addEventListener(ResultEvent.RESULT, configResultHandler); + configService.addEventListener(FaultEvent.FAULT, configFaultHandler); + configService.send(); + } + } + + private function configFaultHandler(event:mx.rpc.events.FaultEvent):void + { + // happens if for example a widget file is missing or have crossdomain problem + + var sInfo:String = ""; + + // Missing file + if (event.fault.rootCause is IOErrorEvent) + { + var ioe:IOErrorEvent = event.fault.rootCause as IOErrorEvent; + if (ioe.text.indexOf("2032: Stream Error. URL:") > -1) + { + sInfo += StringUtil.substitute(getDefaultString('missingConfigFileText'), ioe.text.substring(32)) + "\n\n"; + } + else + { + // some other IOError + sInfo += event.fault.rootCause + "\n\n"; + } + } + + // config file with crossdomain issue + if (event.fault.rootCause is SecurityErrorEvent) + { + var sec:SecurityErrorEvent = event.fault.rootCause as SecurityErrorEvent; + if (sec.text.indexOf("Error #2048: ") > -1) // debug player + { + sInfo += StringUtil.substitute(getDefaultString('configFileCrossDomain'), "\n", sec.text) + "\n\n"; + } + else if (sec.text.indexOf("Error #2048") > -1) // non-debug player + { + sInfo += StringUtil.substitute(getDefaultString('configFileCrossDomain'), "\n", sec.toString()) + "\n\n"; + } + else + { + // some other Security error + sInfo += event.fault.rootCause + "\n\n"; + } + } + + if (event.statusCode) // e.g. 404 - Not Found - http://en.wikipedia.org/wiki/List_of_HTTP_status_codes + { + sInfo += StringUtil.substitute(getDefaultString('httpResponseStatus'), event.statusCode) + "\n\n"; + } + + sInfo += StringUtil.substitute(getDefaultString('faultCode'), event.fault.faultCode) + "\n\n"; + sInfo += StringUtil.substitute(getDefaultString('faultInfo'), event.fault.faultString) + "\n\n"; + sInfo += StringUtil.substitute(getDefaultString('faultDetail'), event.fault.faultDetail); + + showError(sInfo); + } + + private function configResultHandler(event:ResultEvent):void + { + try + { + configXML = XML(event.result); + dispatchEvent(new Event(WIDGET_CONFIG_LOADED)); + } + catch (error:Error) + { + showError(StringUtil.substitute(getDefaultString("parseConfigErrorText"), _configURL + "\n" + error.message)); + } + } + + public function get initialWidth():Number + { + return _initialWidth; + } + + public function set initialWidth(value:Number):void + { + _initialWidth = value; + } + + public function get initialHeight():Number + { + return _initialHeight; + } + + public function set initialHeight(value:Number):void + { + _initialHeight = value; + } + + public function setXYPosition(x:Number, y:Number):void + { + this.setLayoutBoundsPosition(x, y); + } + + public function setRelativePosition(left:String, right:String, top:String, bottom:String):void + { + if (left) + { + this.left = Number(left); + } + if (right) + { + this.right = Number(right); + } + if (top) + { + this.top = Number(top); + } + if (bottom) + { + this.bottom = Number(bottom); + } + } + + public function run():void + { + //TODO: need a better way of doing it + //This is to disable a widget's move and resize when it's loaded as a controller + isDraggable = true; + } + + public function getDefaultString(resourceName:String, ... params):String + { + //use Function#apply to avoid passing rest argument as Array + return LocalizationUtil.getDefaultString.apply(null, [ resourceName ].concat(params)); + } +} + +} diff --git a/src/com/esri/viewer/ConfigData.as b/src/com/esri/viewer/ConfigData.as index 8956596..ca0fd55 100644 --- a/src/com/esri/viewer/ConfigData.as +++ b/src/com/esri/viewer/ConfigData.as @@ -1,60 +1,60 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2010-2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package com.esri.viewer -{ - -/** - * ConfigData class is used to store configuration information from the config.xml file. - */ -public class ConfigData -{ - public var configXML:XML; // Reference to the main config.xml - public var viewerUI:Array; - public var controls:Array; - public var mapAttrs:Array; - public var basemaps:Array; - public var opLayers:Array; - public var widgetContainers:Array; - public var widgets:Array; - public var widgetIndex:Array; - public var styleAlpha:Number; - public var styleColors:Array; - public var font:Object; - public var titleFont:Object; - public var subTitleFont:Object; - public var geometryService:Object; - public var bingKey:String; - public var proxyUrl:String; - public var layoutDirection:String; - public var webMapData:Object; - - public function ConfigData() - { - viewerUI = []; - controls = []; - mapAttrs = []; - basemaps = []; - opLayers = []; - widgets = []; - widgetContainers = []; //[i]={container, widgets] - widgetIndex = []; //[i]={container, inx} - styleAlpha = 0.8; - styleColors = []; - geometryService = {}; // { url: "foo", token: "123", useproxy: false } - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2010-2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package com.esri.viewer +{ + +/** + * ConfigData class is used to store configuration information from the config.xml file. + */ +public class ConfigData +{ + public var configXML:XML; // Reference to the main config.xml + public var viewerUI:Array; + public var controls:Array; + public var mapAttrs:Array; + public var basemaps:Array; + public var opLayers:Array; + public var widgetContainers:Array; + public var widgets:Array; + public var widgetIndex:Array; + public var styleAlpha:Number; + public var styleColors:Array; + public var font:Object; + public var titleFont:Object; + public var subTitleFont:Object; + public var geometryService:Object; + public var bingKey:String; + public var proxyUrl:String; + public var layoutDirection:String; + public var webMapData:Object; + + public function ConfigData() + { + viewerUI = []; + controls = []; + mapAttrs = []; + basemaps = []; + opLayers = []; + widgets = []; + widgetContainers = []; //[i]={container, widgets] + widgetIndex = []; //[i]={container, inx} + styleAlpha = 0.8; + styleColors = []; + geometryService = {}; // { url: "foo", token: "123", useproxy: false } + } +} + +} diff --git a/src/com/esri/viewer/ErrorMessage.as b/src/com/esri/viewer/ErrorMessage.as index f1c76c8..72fa683 100644 --- a/src/com/esri/viewer/ErrorMessage.as +++ b/src/com/esri/viewer/ErrorMessage.as @@ -1,29 +1,29 @@ -package com.esri.viewer -{ - -/** - * The content of an error message window. - */ -public class ErrorMessage -{ - public function ErrorMessage(content:String, title:String) - { - _content = content; - _title = title; - } - - private var _content:String; - - public function get content():String - { - return _content; - } - - private var _title:String; - - public function get title():String - { - return _title; - } -} -} +package com.esri.viewer +{ + +/** + * The content of an error message window. + */ +public class ErrorMessage +{ + public function ErrorMessage(content:String, title:String) + { + _content = content; + _title = title; + } + + private var _content:String; + + public function get content():String + { + return _content; + } + + private var _title:String; + + public function get title():String + { + return _title; + } +} +} diff --git a/src/com/esri/viewer/ForcedImports.as b/src/com/esri/viewer/ForcedImports.as index d317b74..5e6d240 100644 --- a/src/com/esri/viewer/ForcedImports.as +++ b/src/com/esri/viewer/ForcedImports.as @@ -1,30 +1,30 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2010-2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package com.esri.viewer -{ - -// Make sure these classes are defined in root Viewer application -// so that they will be shared by all the widgets. - -import com.esri.ags.tasks.PrintTask; - -PrintTask; - -public class ForcedImports -{ -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2010-2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package com.esri.viewer +{ + +// Make sure these classes are defined in root Viewer application +// so that they will be shared by all the widgets. + +import com.esri.ags.tasks.PrintTask; + +PrintTask; + +public class ForcedImports +{ +} + +} diff --git a/src/com/esri/viewer/IBaseWidget.as b/src/com/esri/viewer/IBaseWidget.as index d82f5f4..33eb96f 100644 --- a/src/com/esri/viewer/IBaseWidget.as +++ b/src/com/esri/viewer/IBaseWidget.as @@ -1,146 +1,146 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2010-2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package com.esri.viewer -{ - -import com.esri.ags.Map; - -import flash.events.IEventDispatcher; - -/** - * IBaseWidget defines the messages between WidgetManager and BaseWidget. It enables - * Dependency Injection (DI) implementation that allows loss coupling the - * detail widget logics. - * - *

Once a widget module is loaded into the container, the WidgetManager will - * cast the instance of the module into IBaseWidget.

- */ -public interface IBaseWidget extends IEventDispatcher -{ - /** - * Give a session generated ID to the widget so that the widget can be - * identified during inter-component communication. - * - * @param value a number generated by the session. - */ - function set widgetId(value:Number):void; - function get widgetId():Number; - - /** - * Widget title is coming from the configuration file. The title text is passed - * into the widget implementation. - * - * @param value the title string from configuration file, config.xml - */ - function set widgetTitle(value:String):void; - function get widgetTitle():String; - - /** - * A widget can have 40x40 icon image. The URL of the icon image file is specified - * in the config.xml file. - * - * @param value the URL string of the icon image file. Flex supports JPG and PNG. - */ - function set widgetIcon(value:String):void; - function get widgetIcon():String; - - /** - * A widget can have its own configuration file. The container and widget manager don't - * have the knowledge of the configuration content. The URL of the configuration file is - * specified in the config.xml. The widget is responsible for handling the configuration - * file. This file can be in any formate the widget developer perfers. - * - * @param value The URL of the configuration file. - */ - function set config(value:String):void; - function get config():String; - - /** - * The XML type of configuration data. - * @see configData - */ - function set configXML(value:XML):void; - function get configXML():XML; - - /** - * For advanced widget developer, the global configuration data is available for use. - * - * @param value the global configuration data - * @see ConfigData - */ - function set configData(value:ConfigData):void; - function get configData():ConfigData; - - /** - * The widget manager can set the preload state of the widget. - * - * @param value the preload token string. - */ - function setPreload(value:String):void; - - /** - * Get the widget state. - */ - function getState():String; - - /** - * The widget manager can change the state of the widget, such as close the widget. - * TODO: define standard state. - * - * @param value the state token string. - */ - function setState(value:String):void; - - /** - * Pass the map reference to the widget. - * - * @para value the map instance reference. - */ - function set map(value:Map):void; - function get map():Map; - - function get initialWidth():Number; - function set initialWidth(value:Number):void; - - function get initialHeight():Number; - function set initialHeight(value:Number):void; - - function setXYPosition(x:Number, y:Number):void; - function setRelativePosition(left:String, right:String, top:String, bottom:String):void; - - function get horizontalCenter():Object; - function set horizontalCenter(value:Object):void; - - function get verticalCenter():Object; - function set verticalCenter(value:Object):void; - - function get isDraggable():Boolean; - function set isDraggable(value:Boolean):void; - - function get isResizeable():Boolean; - function set isResizeable(value:Boolean):void; - - function get isPartOfPanel():Boolean; - function set isPartOfPanel(value:Boolean):void; - - function get proxyUrl():String; - - function run():void; - - function setInfoConfig(value:String, waitForCreationComplete:Boolean = true):void -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2010-2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package com.esri.viewer +{ + +import com.esri.ags.Map; + +import flash.events.IEventDispatcher; + +/** + * IBaseWidget defines the messages between WidgetManager and BaseWidget. It enables + * Dependency Injection (DI) implementation that allows loss coupling the + * detail widget logics. + * + *

Once a widget module is loaded into the container, the WidgetManager will + * cast the instance of the module into IBaseWidget.

+ */ +public interface IBaseWidget extends IEventDispatcher +{ + /** + * Give a session generated ID to the widget so that the widget can be + * identified during inter-component communication. + * + * @param value a number generated by the session. + */ + function set widgetId(value:Number):void; + function get widgetId():Number; + + /** + * Widget title is coming from the configuration file. The title text is passed + * into the widget implementation. + * + * @param value the title string from configuration file, config.xml + */ + function set widgetTitle(value:String):void; + function get widgetTitle():String; + + /** + * A widget can have 40x40 icon image. The URL of the icon image file is specified + * in the config.xml file. + * + * @param value the URL string of the icon image file. Flex supports JPG and PNG. + */ + function set widgetIcon(value:String):void; + function get widgetIcon():String; + + /** + * A widget can have its own configuration file. The container and widget manager don't + * have the knowledge of the configuration content. The URL of the configuration file is + * specified in the config.xml. The widget is responsible for handling the configuration + * file. This file can be in any formate the widget developer perfers. + * + * @param value The URL of the configuration file. + */ + function set config(value:String):void; + function get config():String; + + /** + * The XML type of configuration data. + * @see configData + */ + function set configXML(value:XML):void; + function get configXML():XML; + + /** + * For advanced widget developer, the global configuration data is available for use. + * + * @param value the global configuration data + * @see ConfigData + */ + function set configData(value:ConfigData):void; + function get configData():ConfigData; + + /** + * The widget manager can set the preload state of the widget. + * + * @param value the preload token string. + */ + function setPreload(value:String):void; + + /** + * Get the widget state. + */ + function getState():String; + + /** + * The widget manager can change the state of the widget, such as close the widget. + * TODO: define standard state. + * + * @param value the state token string. + */ + function setState(value:String):void; + + /** + * Pass the map reference to the widget. + * + * @para value the map instance reference. + */ + function set map(value:Map):void; + function get map():Map; + + function get initialWidth():Number; + function set initialWidth(value:Number):void; + + function get initialHeight():Number; + function set initialHeight(value:Number):void; + + function setXYPosition(x:Number, y:Number):void; + function setRelativePosition(left:String, right:String, top:String, bottom:String):void; + + function get horizontalCenter():Object; + function set horizontalCenter(value:Object):void; + + function get verticalCenter():Object; + function set verticalCenter(value:Object):void; + + function get isDraggable():Boolean; + function set isDraggable(value:Boolean):void; + + function get isResizeable():Boolean; + function set isResizeable(value:Boolean):void; + + function get isPartOfPanel():Boolean; + function set isPartOfPanel(value:Boolean):void; + + function get proxyUrl():String; + + function run():void; + + function setInfoConfig(value:String, waitForCreationComplete:Boolean = true):void +} + +} diff --git a/src/com/esri/viewer/IInfowindowTemplate.as b/src/com/esri/viewer/IInfowindowTemplate.as index d608bc1..4046112 100644 --- a/src/com/esri/viewer/IInfowindowTemplate.as +++ b/src/com/esri/viewer/IInfowindowTemplate.as @@ -1,30 +1,30 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2010-2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package com.esri.viewer -{ - -import com.esri.ags.Map; - -public interface IInfowindowTemplate -{ - function set data(value:Object):void; - function get data():Object; - function set infoClass(value:Class):void; - function get infoClass():Class; - function set infoConfig(value:XML):void; -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2010-2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package com.esri.viewer +{ + +import com.esri.ags.Map; + +public interface IInfowindowTemplate +{ + function set data(value:Object):void; + function get data():Object; + function set infoClass(value:Class):void; + function get infoClass():Class; + function set infoConfig(value:XML):void; +} + +} diff --git a/src/com/esri/viewer/IWidgetContainer.as b/src/com/esri/viewer/IWidgetContainer.as index d586eec..1b05a77 100644 --- a/src/com/esri/viewer/IWidgetContainer.as +++ b/src/com/esri/viewer/IWidgetContainer.as @@ -1,27 +1,27 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2010-2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package com.esri.viewer -{ - -public interface IWidgetContainer -{ - function isBasicLayout():Boolean; - function addWidget(value:IBaseWidget):void; - function focusWidget(id:Number):void; - function set configParams(value:Object):void; -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2010-2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package com.esri.viewer +{ + +public interface IWidgetContainer +{ + function isBasicLayout():Boolean; + function addWidget(value:IBaseWidget):void; + function focusWidget(id:Number):void; + function set configParams(value:Object):void; +} + +} diff --git a/src/com/esri/viewer/IWidgetTemplate.as b/src/com/esri/viewer/IWidgetTemplate.as index 24bb3ec..2565322 100644 --- a/src/com/esri/viewer/IWidgetTemplate.as +++ b/src/com/esri/viewer/IWidgetTemplate.as @@ -1,33 +1,33 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2010-2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package com.esri.viewer -{ - -public interface IWidgetTemplate -{ - function set baseWidget(value:IBaseWidget):void; - - /** - * Set the widget state in the template implementation. - * - * @param value the state string - */ - function set widgetState(value:String):void; - function set draggable(value:Boolean):void; - function set resizable(value:Boolean):void; -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2010-2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package com.esri.viewer +{ + +public interface IWidgetTemplate +{ + function set baseWidget(value:IBaseWidget):void; + + /** + * Set the widget state in the template implementation. + * + * @param value the state string + */ + function set widgetState(value:String):void; + function set draggable(value:Boolean):void; + function set resizable(value:Boolean):void; +} + +} diff --git a/src/com/esri/viewer/ViewerContainer.mxml b/src/com/esri/viewer/ViewerContainer.mxml index 8cdfff8..82e4041 100644 --- a/src/com/esri/viewer/ViewerContainer.mxml +++ b/src/com/esri/viewer/ViewerContainer.mxml @@ -1,425 +1,425 @@ - - - - - - 0) - { - var key:String = kvPair.substring(0, index); - var value:String = kvPair.substring(index + 1); - if (key) - { - urlConfigParams[key] = decodeURIComponent(value); - } - } - } - } - } - catch (error:Error) - { - AppEvent.showError(LocalizationUtil.getDefaultString("standalonePlayerExternalInterfaceErrorText"), VIEWER_CONTAINER); - } - } - - private function setConfigFile():void - { - //retrieve FlashVars. - var flashvarConfig:String = FlexGlobals.topLevelApplication.parameters.config; - if (flashvarConfig) - { - configFile = flashvarConfig; - } - - //retrieve config from URL and override FlashVar - if (urlConfigParams.config) - { - configFile = urlConfigParams.config; - } - } - - private function configLoadedHandler(event:AppEvent):void - { - configData = event.data as ConfigData; - var ui:Array = configData.viewerUI; - var splash:Object = {}; - - for (var i:int = 0; i < ui.length; i++) - { - if (ui[i].id === "splashpage") - { - splash.url = ui[i].value; - splash.config = ui[i].config; - splash.configXML = ui[i].configXML; - splash.title = ui[i].title; - break; - } - } - - if (splash.url) - { - loadSplash(splash); - } - } - - private var m_moduleInfo:IModuleInfo; - - private function loadSplash(splash:Object):void - { - // setting securityDomain is not allowed on non-REMOTE sandboxes - var securityDomain:SecurityDomain = - Security.sandboxType == Security.REMOTE ? SecurityDomain.currentDomain : null; - - m_moduleInfo = ModuleManager.getModule(splash.url); - m_moduleInfo.data = splash; - m_moduleInfo.addEventListener(ModuleEvent.READY, splashModule_readyHandler); - m_moduleInfo.addEventListener(ModuleEvent.ERROR, splashModule_errorHandler); - m_moduleInfo.load(null, securityDomain); - - this.cursorManager.setBusyCursor(); - } - - private function splashModule_errorHandler(event:ModuleEvent):void - { - this.cursorManager.removeBusyCursor(); - - AppEvent.showError(event.errorText, VIEWER_CONTAINER); - } - - private function splashModule_readyHandler(event:ModuleEvent):void - { - this.cursorManager.removeBusyCursor(); - - var moduleInfo:IModuleInfo = event.module; - var moduleData:Object = moduleInfo.data; - var config:String = moduleData.config as String; - var configXML:XML = moduleData.configXML; - var title:String = moduleData.title as String; - - var widget:IBaseWidget = moduleInfo.factory.create() as IBaseWidget; - widget.config = config; - widget.configXML = configXML; - widget.widgetTitle = title; - addElement(widget as IVisualElement); - } - - //to make sure the the children are visible. - private var isAddChild:Boolean = true; - - protected override function commitProperties():void - { - super.commitProperties(); - - if (isAddChild) - { - widgetManager.mapManager = this.mapManager; - addElement(widgetManager); - - isAddChild = false; - } - } - - /** - * Initialize the logging. As an example, the logging is set up to only - * log the fatal event during the RPC related network communication, - * such as HTTP call to obtain configuration file. - */ - private function initLogging():void - { - // Create a target. - var logTarget:TraceTarget = new TraceTarget(); - - // Log only messages for the classes in the mx.rpc.* and - // mx.messaging packages. - logTarget.filters = [ "mx.rpc.*", "mx.messaging.*" ]; - - // Log on fatal levels. - logTarget.level = LogEventLevel.FATAL; - - // Add date, time, category, and log level to the output. - logTarget.includeDate = true; - logTarget.includeTime = true; - logTarget.includeCategory = true; - logTarget.includeLevel = true; - - // Begin logging. - Log.addTarget(logTarget); - } - - private function errorHandler(event:AppEvent):void - { - var errorWindow:ErrorWindow = ErrorWindow(PopUpManager.createPopUp(this, ErrorWindow, true)); - var errorMessage:ErrorMessage = event.data as ErrorMessage; - if (errorMessage) - { - errorWindow.title = errorMessage.title; - errorWindow.errorMessage = errorMessage.content; - } - else - { - errorWindow.errorMessage = event.data as String; - } - } - - //the following are the methods to allow modules access event bus via the contains. - [Deprecated(replacement="AppEvent.addListener")] - public static function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void - { - EventBus.instance.addEventListener(type, listener, useCapture, priority, useWeakReference); - } - - [Deprecated(replacement="AppEvent.removeListener")] - public static function removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void - { - EventBus.instance.removeEventListener(type, listener, useCapture); - } - - //this is the simplest way of communicate. Just use a string. - [Deprecated(replacement="AppEvent.dispatch")] - public static function dispatch(message:String):Boolean - { - return AppEvent.dispatch(message); - } - - [Deprecated(replacement="appEvent.dispatch")] - public static function dispatchEvent(event:Event):Boolean - { - return EventBus.instance.dispatchEvent(event); - } - - [Deprecated(replacement="AppEvent.setStatus")] - public static function setStatus(status:String):void - { - AppEvent.dispatch(AppEvent.SET_STATUS, status); - } - - [Deprecated(replacement="AppEvent.showError")] - public static function showError(value:String):void - { - AppEvent.showError(value, VIEWER_CONTAINER); - } - - private var m_localConnection:LocalConnection; - - private function startLocalConnection():void - { - const builderParam:String = FlexGlobals.topLevelApplication.parameters.builder; - const builderURL:String = urlConfigParams.builder; - if (builderParam === null && builderURL === null) - { - return; - } - - // Force a flashvar parameter - FlexGlobals.topLevelApplication.parameters.builder = true; - - m_localConnection = new LocalConnection(); - m_localConnection.allowDomain('*'); - m_localConnection.client = { - setPredefinedStyles: function(value:Object):void - { - AppEvent.dispatch(AppEvent.SET_PREDEFINED_STYLES, value); - }, - setTextColor: function(value:uint):void - { - AppEvent.dispatch(AppEvent.SET_TEXT_COLOR, value); - }, - setBackgroundColor: function(value:uint):void - { - AppEvent.dispatch(AppEvent.SET_BACKGROUND_COLOR, value); - }, - setRolloverColor: function(value:uint):void - { - AppEvent.dispatch(AppEvent.SET_ROLLOVER_COLOR, value); - }, - setSelectionColor: function(value:uint):void - { - AppEvent.dispatch(AppEvent.SET_SELECTION_COLOR, value); - }, - setTitleColor: function(value:uint):void - { - AppEvent.dispatch(AppEvent.SET_TITLE_COLOR, value); - }, - setApplicationBackgroundColor: function(value:uint):void - { - AppEvent.dispatch(AppEvent.SET_APPLICATION_BACKGROUND_COLOR, value); - }, - setAlpha: function(value:Number):void - { - AppEvent.dispatch(AppEvent.SET_ALPHA, value); - }, - setFontName: function(value:String):void - { - AppEvent.dispatch(AppEvent.SET_FONT_NAME, value); - }, - setAppTitleFontName: function(value:String):void - { - AppEvent.dispatch(AppEvent.SET_APP_TITLE_FONT_NAME, value); - }, - setSubTitleFontName: function(value:String):void - { - AppEvent.dispatch(AppEvent.SET_SUB_TITLE_FONT_NAME, value); - }, - setTitles: function(title:String, subtitle:String):void - { - AppEvent.dispatch(AppEvent.SET_TITLES, { title: title, subtitle: subtitle }); - }, - setLogo: function(value:String):void - { - AppEvent.dispatch(AppEvent.SET_LOGO, value); - }, - setLocale: function(value:String):void - { - resourceManager.localeChain = value.split(','); - } - }; - m_localConnection.connect('_flexViewer'); - } - ]]> - - + + + + + + 0) + { + var key:String = kvPair.substring(0, index); + var value:String = kvPair.substring(index + 1); + if (key) + { + urlConfigParams[key] = decodeURIComponent(value); + } + } + } + } + } + catch (error:Error) + { + AppEvent.showError(LocalizationUtil.getDefaultString("standalonePlayerExternalInterfaceErrorText"), VIEWER_CONTAINER); + } + } + + private function setConfigFile():void + { + //retrieve FlashVars. + var flashvarConfig:String = FlexGlobals.topLevelApplication.parameters.config; + if (flashvarConfig) + { + configFile = flashvarConfig; + } + + //retrieve config from URL and override FlashVar + if (urlConfigParams.config) + { + configFile = urlConfigParams.config; + } + } + + private function configLoadedHandler(event:AppEvent):void + { + configData = event.data as ConfigData; + var ui:Array = configData.viewerUI; + var splash:Object = {}; + + for (var i:int = 0; i < ui.length; i++) + { + if (ui[i].id === "splashpage") + { + splash.url = ui[i].value; + splash.config = ui[i].config; + splash.configXML = ui[i].configXML; + splash.title = ui[i].title; + break; + } + } + + if (splash.url) + { + loadSplash(splash); + } + } + + private var m_moduleInfo:IModuleInfo; + + private function loadSplash(splash:Object):void + { + // setting securityDomain is not allowed on non-REMOTE sandboxes + var securityDomain:SecurityDomain = + Security.sandboxType == Security.REMOTE ? SecurityDomain.currentDomain : null; + + m_moduleInfo = ModuleManager.getModule(splash.url); + m_moduleInfo.data = splash; + m_moduleInfo.addEventListener(ModuleEvent.READY, splashModule_readyHandler); + m_moduleInfo.addEventListener(ModuleEvent.ERROR, splashModule_errorHandler); + m_moduleInfo.load(null, securityDomain); + + this.cursorManager.setBusyCursor(); + } + + private function splashModule_errorHandler(event:ModuleEvent):void + { + this.cursorManager.removeBusyCursor(); + + AppEvent.showError(event.errorText, VIEWER_CONTAINER); + } + + private function splashModule_readyHandler(event:ModuleEvent):void + { + this.cursorManager.removeBusyCursor(); + + var moduleInfo:IModuleInfo = event.module; + var moduleData:Object = moduleInfo.data; + var config:String = moduleData.config as String; + var configXML:XML = moduleData.configXML; + var title:String = moduleData.title as String; + + var widget:IBaseWidget = moduleInfo.factory.create() as IBaseWidget; + widget.config = config; + widget.configXML = configXML; + widget.widgetTitle = title; + addElement(widget as IVisualElement); + } + + //to make sure the the children are visible. + private var isAddChild:Boolean = true; + + protected override function commitProperties():void + { + super.commitProperties(); + + if (isAddChild) + { + widgetManager.mapManager = this.mapManager; + addElement(widgetManager); + + isAddChild = false; + } + } + + /** + * Initialize the logging. As an example, the logging is set up to only + * log the fatal event during the RPC related network communication, + * such as HTTP call to obtain configuration file. + */ + private function initLogging():void + { + // Create a target. + var logTarget:TraceTarget = new TraceTarget(); + + // Log only messages for the classes in the mx.rpc.* and + // mx.messaging packages. + logTarget.filters = [ "mx.rpc.*", "mx.messaging.*" ]; + + // Log on fatal levels. + logTarget.level = LogEventLevel.FATAL; + + // Add date, time, category, and log level to the output. + logTarget.includeDate = true; + logTarget.includeTime = true; + logTarget.includeCategory = true; + logTarget.includeLevel = true; + + // Begin logging. + Log.addTarget(logTarget); + } + + private function errorHandler(event:AppEvent):void + { + var errorWindow:ErrorWindow = ErrorWindow(PopUpManager.createPopUp(this, ErrorWindow, true)); + var errorMessage:ErrorMessage = event.data as ErrorMessage; + if (errorMessage) + { + errorWindow.title = errorMessage.title; + errorWindow.errorMessage = errorMessage.content; + } + else + { + errorWindow.errorMessage = event.data as String; + } + } + + //the following are the methods to allow modules access event bus via the contains. + [Deprecated(replacement="AppEvent.addListener")] + public static function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void + { + EventBus.instance.addEventListener(type, listener, useCapture, priority, useWeakReference); + } + + [Deprecated(replacement="AppEvent.removeListener")] + public static function removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void + { + EventBus.instance.removeEventListener(type, listener, useCapture); + } + + //this is the simplest way of communicate. Just use a string. + [Deprecated(replacement="AppEvent.dispatch")] + public static function dispatch(message:String):Boolean + { + return AppEvent.dispatch(message); + } + + [Deprecated(replacement="appEvent.dispatch")] + public static function dispatchEvent(event:Event):Boolean + { + return EventBus.instance.dispatchEvent(event); + } + + [Deprecated(replacement="AppEvent.setStatus")] + public static function setStatus(status:String):void + { + AppEvent.dispatch(AppEvent.SET_STATUS, status); + } + + [Deprecated(replacement="AppEvent.showError")] + public static function showError(value:String):void + { + AppEvent.showError(value, VIEWER_CONTAINER); + } + + private var m_localConnection:LocalConnection; + + private function startLocalConnection():void + { + const builderParam:String = FlexGlobals.topLevelApplication.parameters.builder; + const builderURL:String = urlConfigParams.builder; + if (builderParam === null && builderURL === null) + { + return; + } + + // Force a flashvar parameter + FlexGlobals.topLevelApplication.parameters.builder = true; + + m_localConnection = new LocalConnection(); + m_localConnection.allowDomain('*'); + m_localConnection.client = { + setPredefinedStyles: function(value:Object):void + { + AppEvent.dispatch(AppEvent.SET_PREDEFINED_STYLES, value); + }, + setTextColor: function(value:uint):void + { + AppEvent.dispatch(AppEvent.SET_TEXT_COLOR, value); + }, + setBackgroundColor: function(value:uint):void + { + AppEvent.dispatch(AppEvent.SET_BACKGROUND_COLOR, value); + }, + setRolloverColor: function(value:uint):void + { + AppEvent.dispatch(AppEvent.SET_ROLLOVER_COLOR, value); + }, + setSelectionColor: function(value:uint):void + { + AppEvent.dispatch(AppEvent.SET_SELECTION_COLOR, value); + }, + setTitleColor: function(value:uint):void + { + AppEvent.dispatch(AppEvent.SET_TITLE_COLOR, value); + }, + setApplicationBackgroundColor: function(value:uint):void + { + AppEvent.dispatch(AppEvent.SET_APPLICATION_BACKGROUND_COLOR, value); + }, + setAlpha: function(value:Number):void + { + AppEvent.dispatch(AppEvent.SET_ALPHA, value); + }, + setFontName: function(value:String):void + { + AppEvent.dispatch(AppEvent.SET_FONT_NAME, value); + }, + setAppTitleFontName: function(value:String):void + { + AppEvent.dispatch(AppEvent.SET_APP_TITLE_FONT_NAME, value); + }, + setSubTitleFontName: function(value:String):void + { + AppEvent.dispatch(AppEvent.SET_SUB_TITLE_FONT_NAME, value); + }, + setTitles: function(title:String, subtitle:String):void + { + AppEvent.dispatch(AppEvent.SET_TITLES, { title: title, subtitle: subtitle }); + }, + setLogo: function(value:String):void + { + AppEvent.dispatch(AppEvent.SET_LOGO, value); + }, + setLocale: function(value:String):void + { + resourceManager.localeChain = value.split(','); + } + }; + m_localConnection.connect('_flexViewer'); + } + ]]> + + diff --git a/src/com/esri/viewer/WidgetStates.as b/src/com/esri/viewer/WidgetStates.as index 5e4f581..b2652b3 100644 --- a/src/com/esri/viewer/WidgetStates.as +++ b/src/com/esri/viewer/WidgetStates.as @@ -1,40 +1,40 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2010-2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package com.esri.viewer -{ - -/** - * Contains widget state constants. - */ -public final class WidgetStates -{ - /** - * Indicates the widget is opened. - */ - public static const WIDGET_OPENED:String = "open"; - - /** - * Indicates the widget is minimized. - */ - public static const WIDGET_MINIMIZED:String = "minimized"; - - /** - * Indicates the widget is closed. - */ - public static const WIDGET_CLOSED:String = "closed"; -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2010-2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package com.esri.viewer +{ + +/** + * Contains widget state constants. + */ +public final class WidgetStates +{ + /** + * Indicates the widget is opened. + */ + public static const WIDGET_OPENED:String = "open"; + + /** + * Indicates the widget is minimized. + */ + public static const WIDGET_MINIMIZED:String = "minimized"; + + /** + * Indicates the widget is closed. + */ + public static const WIDGET_CLOSED:String = "closed"; +} + +} diff --git a/src/com/esri/viewer/WidgetTemplate.as b/src/com/esri/viewer/WidgetTemplate.as index fba1050..a040c06 100644 --- a/src/com/esri/viewer/WidgetTemplate.as +++ b/src/com/esri/viewer/WidgetTemplate.as @@ -1,588 +1,588 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2010-2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package com.esri.viewer -{ - -import com.esri.viewer.components.FocusableImage; -import com.esri.viewer.components.TitlebarButton; -import com.esri.viewer.utils.LocalizationUtil; - -import flash.events.Event; -import flash.events.MouseEvent; - -import mx.controls.Image; -import mx.core.FlexGlobals; -import mx.core.UIComponent; -import mx.events.FlexEvent; -import mx.managers.CursorManager; -import mx.managers.DragManager; - -import spark.components.Application; -import spark.components.Group; -import spark.components.SkinnableContainer; - -[Event(name="open", type="flash.events.Event")] -[Event(name="minimized", type="flash.events.Event")] -[Event(name="closed", type="flash.events.Event")] - -[SkinState("open")] -[SkinState("minimized")] -[SkinState("closed")] - -public class WidgetTemplate extends SkinnableContainer implements IWidgetTemplate -{ - [SkinPart(required="false")] - public var widgetFrame:Group; - - [SkinPart(required="false")] - public var header:Group; - - [SkinPart(required="false")] - public var headerToolGroup:Group; - - [SkinPart(required="false")] - public var icon:FocusableImage; - - [SkinPart(required="false")] - public var closeButton:FocusableImage; - - [SkinPart(required="false")] - public var minimizeButton:FocusableImage; - - [SkinPart(required="false")] - public var resizeButton:Image; - - [Bindable] - public var enableCloseButton:Boolean = true; - - [Bindable] - public var enableMinimizeButton:Boolean = true; - - [Bindable] - public var enableDraging:Boolean = true; - - [Bindable] - public var widgetWidth:Number; - - [Bindable] - public var widgetHeight:Number; - - [Embed(source="/assets/images/w_resizecursor.png")] - public var resizeCursor:Class; - - [Embed(source="/assets/images/w_resizecursor_rtl.png")] - public var resizeCursor_rtl:Class; - - [Bindable] - public var enableIcon:Boolean = true; - - private static const WIDGET_OPENED:String = "open"; - - private static const WIDGET_MINIMIZED:String = "minimized"; - - private static const WIDGET_CLOSED:String = "closed"; - - private var _widgetId:Number; - - private var _widgetState:String = WIDGET_OPENED; - - private var _cursorID:int = 0; - - private var _widgetTitle:String = ""; - - private var _widgetIcon:String = "assets/images/i_widget.png"; - - [Bindable] - private var _draggable:Boolean = true; - - private var _resizable:Boolean = true; - - private var _baseWidget:IBaseWidget; - - public function set baseWidget(value:IBaseWidget):void - { - _baseWidget = value; - - if (value.isPartOfPanel) - { - this.enableIcon = this.enableCloseButton = this.enableMinimizeButton = this.enableDraging = false; - } - this.resizable = value.isResizeable; - this.draggable = value.isDraggable; - this.widgetId = value.widgetId; - this.widgetTitle = value.widgetTitle; - this.widgetIcon = value.widgetIcon; - if (value.initialWidth != 0) - { - if (this.minWidth == 0 || isNaN(this.minWidth) || value.initialWidth > this.minWidth) - { - this.width = value.initialWidth; - this.widgetWidth = value.initialWidth; - } - } - if (value.initialHeight != 0) - { - if (this.minHeight == 0 || isNaN(this.minHeight) || value.initialHeight > this.minHeight) - { - this.height = value.initialHeight; - this.widgetHeight = value.initialHeight; - } - } - } - - public function get baseWidget():IBaseWidget - { - return _baseWidget; - } - - public function set resizable(value:Boolean):void - { - _resizable = value; - resizeButton.visible = _resizable; - } - - [Bindable] - public function get resizable():Boolean - { - return _resizable; - } - - public function set draggable(value:Boolean):void - { - if (enableDraging) - { - _draggable = value; - } - else - { - _draggable = false; - } - } - - public function get widgetId():Number - { - return _widgetId; - } - - public function set widgetId(value:Number):void - { - _widgetId = value; - } - - [Bindable] - public function get widgetTitle():String - { - return _widgetTitle; - } - - public function set widgetTitle(value:String):void - { - _widgetTitle = value; - } - - [Bindable] - public function get widgetIcon():String - { - return _widgetIcon; - } - - public function set widgetIcon(value:String):void - { - _widgetIcon = value; - } - - public function set widgetState(value:String):void - { - this.widgetFrame.toolTip = ""; - this.icon.toolTip = ""; - _widgetState = value; - if (_widgetState == WIDGET_MINIMIZED) - { - this.widgetFrame.toolTip = this.widgetTitle; - this.icon.toolTip = this.widgetTitle; - } - invalidateSkinState(); - - dispatchEvent(new Event(value)); - } - - public function get widgetState():String - { - return _widgetState; - } - - private var _selectedTitlebarButtonIndex:int = -1; - - private var _selectedTitlebarButtonIndexChanged:Boolean = false; - - public function get selectedTitlebarButtonIndex():int - { - return _selectedTitlebarButtonIndex; - } - - public function set selectedTitlebarButtonIndex(value:int):void - { - if (_selectedTitlebarButtonIndex != value) - { - _selectedTitlebarButtonIndex = value; - _selectedTitlebarButtonIndexChanged = true; - invalidateProperties(); - } - } - - public function WidgetTemplate() - { - super(); - - this.width = 300; - this.height = 300; - - this.hasFocusableChildren = true; - - this.addEventListener(FlexEvent.CREATION_COMPLETE, creationCompleteHandler); - } - - private function creationCompleteHandler(event:Event):void - { - widgetWidth = width; - widgetHeight = height; - - this.closeButton.toolTip = LocalizationUtil.getDefaultString("close"); - this.minimizeButton.toolTip = LocalizationUtil.getDefaultString("minimize"); - } - - protected override function partAdded(partName:String, instance:Object):void - { - super.partAdded(partName, instance); - if (instance == icon) - { - icon.addEventListener(MouseEvent.CLICK, icon_clickHandler); - } - if (instance == widgetFrame) - { - widgetFrame.addEventListener(MouseEvent.MOUSE_DOWN, mouse_downHandler); - widgetFrame.addEventListener(MouseEvent.MOUSE_UP, mouse_upHandler); - - widgetFrame.stage.addEventListener(MouseEvent.MOUSE_UP, mouse_upHandler); - widgetFrame.stage.addEventListener(Event.MOUSE_LEAVE, stageout_Handler); - } - if (instance == header) - { - header.addEventListener(MouseEvent.MOUSE_DOWN, mouse_downHandler); - header.addEventListener(MouseEvent.MOUSE_UP, mouse_upHandler); - } - if (instance == closeButton) - { - closeButton.addEventListener(MouseEvent.CLICK, close_clickHandler); - } - if (instance == minimizeButton) - { - minimizeButton.addEventListener(MouseEvent.CLICK, minimize_clickHandler); - } - if (instance == resizeButton) - { - resizeButton.addEventListener(MouseEvent.MOUSE_OVER, resize_overHandler); - resizeButton.addEventListener(MouseEvent.MOUSE_OUT, resize_outHandler); - resizeButton.addEventListener(MouseEvent.MOUSE_DOWN, resize_downHandler); - } - } - - override protected function getCurrentSkinState():String - { - return _widgetState; - } - - override protected function commitProperties():void - { - super.commitProperties(); - - if (_selectedTitlebarButtonIndexChanged) - { - _selectedTitlebarButtonIndexChanged = false; - for (var i:int = 0, n:int = headerToolGroup.numElements; i < n; i++) - { - var btn:TitlebarButton = TitlebarButton(headerToolGroup.getElementAt(i)); - if (i == _selectedTitlebarButtonIndex) - { - btn.selected = true; - } - else - { - btn.selected = false; - } - } - } - } - - public function mouse_downHandler(event:MouseEvent):void - { - if (_draggable && enableDraging) - { - header.addEventListener(MouseEvent.MOUSE_MOVE, mouse_moveHandler); - widgetFrame.addEventListener(MouseEvent.MOUSE_MOVE, mouse_moveHandler); - } - } - - private var widgetMoveStarted:Boolean = false; - - private function mouse_moveHandler(event:MouseEvent):void - { - if (!widgetMoveStarted) - { - widgetMoveStarted = true; - - //TODO: not for V2.0 - //AppEvent.dispatch(AppEvent.CHANGE_LAYOUT, LAYOUT_BASIC)); - if (_widgetState != WIDGET_MINIMIZED) - { - this.alpha = 0.7; - } - var widget:UIComponent = parent as UIComponent; - - if (!DragManager.isDragging) - { - widget.startDrag(); - } - - if (_resizable) - { - AppEvent.dispatch(AppEvent.WIDGET_FOCUS, widgetId); - } - } - } - - private function mouse_upHandler(event:MouseEvent):void - { - header.removeEventListener(MouseEvent.MOUSE_MOVE, mouse_moveHandler); - widgetFrame.removeEventListener(MouseEvent.MOUSE_MOVE, mouse_moveHandler); - - if (_widgetState != WIDGET_MINIMIZED) - { - this.alpha = 1; - } - var widget:UIComponent = parent as UIComponent; - - widget.stopDrag(); - - var appHeight:Number = FlexGlobals.topLevelApplication.height; - var appWidth:Number = FlexGlobals.topLevelApplication.width; - - if (widget.y < 0) - { - widget.y = 0; - } - if (widget.y > (appHeight - 40)) - { - widget.y = appHeight - 40; - } - if (widget.x < 0) - { - widget.x = 20; - } - - if (widget.x > (appWidth - 40)) - { - widget.x = appWidth - 40; - } - - // clear constraints since x and y have been set - widget.left = widget.right = widget.top = widget.bottom = undefined; - - widgetMoveStarted = false; - } - - private function stageout_Handler(event:Event):void - { - if (widgetMoveStarted) - { - mouse_upHandler(null); - } - } - - protected function icon_clickHandler(event:MouseEvent):void - { - if (_baseWidget) - { - _baseWidget.setState(WIDGET_OPENED); - } - - this.widgetFrame.toolTip = ""; - this.icon.toolTip = ""; - } - - protected function close_clickHandler(event:MouseEvent):void - { - if (_baseWidget) - { - _baseWidget.setState(WIDGET_CLOSED); - } - } - - protected function minimize_clickHandler(event:MouseEvent):void - { - if (_baseWidget) - { - _baseWidget.setState(WIDGET_MINIMIZED); - } - - this.widgetFrame.toolTip = this.widgetTitle; - this.icon.toolTip = this.widgetTitle; - } - - private function resize_overHandler(event:MouseEvent):void - { - if (isRtl()) - { - _cursorID = CursorManager.setCursor(resizeCursor_rtl, 2, -10, -10); - } - else - { - _cursorID = CursorManager.setCursor(resizeCursor, 2, -10, -10); - } - } - - private function resize_outHandler(event:MouseEvent):void - { - CursorManager.removeCursor(_cursorID); - } - - private function resize_downHandler(event:MouseEvent):void - { - if (_resizable) - { - /*TODO: for now, it can't be resized when is not basic layout*/ - stage.addEventListener(MouseEvent.MOUSE_MOVE, resize_moveHandler); - stage.addEventListener(MouseEvent.MOUSE_UP, resize_upHandler); - } - } - - public function isRtl():Boolean - { - var result:Boolean = false; - try - { - result = (FlexGlobals.topLevelApplication as Application).layoutDirection == "rtl"; - } - catch (error:Error) - { - result = false; - } - return result; - } - - private function resize_moveHandler(event:MouseEvent):void - { - if (isRtl()) - { - resize_moveHandler_rtl(); - } - else - { - resize_moveHandler_normal(); - } - } - - private function resize_moveHandler_normal():void - { - // if there is minWidth and minHeight specified on the container, use them while resizing - const minimumResizeWidth:Number = minWidth ? minWidth : 200; - const minimumResizeHeight:Number = minHeight ? minHeight : 100; - - if ((stage.mouseX < stage.width - 20) && (stage.mouseY < stage.height - 20)) - { - if ((stage.mouseX - parent.x) > minimumResizeWidth) - { - width = (stage.mouseX - parent.x); - } - if ((stage.mouseY - parent.y) > minimumResizeHeight) - { - height = (stage.mouseY - parent.y); - } - } - } - - private function resize_moveHandler_rtl():void - { - // if there is minWidth and minHeight specified on the container, use them while resizing - const minimumResizeWidth:Number = minWidth ? minWidth : 200; - const minimumResizeHeight:Number = minHeight ? minHeight : 100; - - var nextWidth:Number = stage.stageWidth - (stage.mouseX + parent.x); - var nextHeight:Number = (stage.mouseY - parent.y); - - if (stage.mouseX > 20 && (stage.mouseY < stage.height - 20)) - { - if (nextWidth > minimumResizeWidth) - { - width = nextWidth; - } - if (nextHeight > minimumResizeHeight) - { - height = nextHeight; - } - } - } - - private function resize_upHandler(event:MouseEvent):void - { - widgetWidth = width; - widgetHeight = height; - - stage.removeEventListener(MouseEvent.MOUSE_MOVE, resize_moveHandler); - stage.removeEventListener(MouseEvent.MOUSE_UP, resize_upHandler); - - var p:UIComponent = parent as UIComponent; - p.stopDrag(); - } - - /** - * Adds a new titlebar button - which usually represent a "state" or "view" within the widget. - * For example, the Search widget has three titlebar buttons: one for "Select features" (interactively), - * one for "Select by attribute", and one for "Results". - * Each button corresponds to a function - * - * @param btnIcon URL to icon to use for this button. - * @param btnTip Tooltip for this button. - * @param btnFunction The function to call when this button is clicked. - * @param selectable Boolean. - */ - public function addTitlebarButton(btnIcon:String, btnTip:String, btnFunction:Function, selectable:Boolean = true):void - { - var btn:TitlebarButton = new TitlebarButton(); - btn.callback = btnFunction; - btn.selectable = selectable; - btn.source = btnIcon; - btn.toolTip = btnTip; - - if (selectable) - { - btn.addEventListener(MouseEvent.CLICK, titlebarButton_clickHandler); - if (headerToolGroup.numElements == 0) - { - selectedTitlebarButtonIndex = 0; // automatically select the first button added - } - } - - headerToolGroup.addElement(btn); - } - - private function titlebarButton_clickHandler(event:MouseEvent):void - { - selectedTitlebarButtonIndex = headerToolGroup.getElementIndex(TitlebarButton(event.currentTarget)); - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2010-2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package com.esri.viewer +{ + +import com.esri.viewer.components.FocusableImage; +import com.esri.viewer.components.TitlebarButton; +import com.esri.viewer.utils.LocalizationUtil; + +import flash.events.Event; +import flash.events.MouseEvent; + +import mx.controls.Image; +import mx.core.FlexGlobals; +import mx.core.UIComponent; +import mx.events.FlexEvent; +import mx.managers.CursorManager; +import mx.managers.DragManager; + +import spark.components.Application; +import spark.components.Group; +import spark.components.SkinnableContainer; + +[Event(name="open", type="flash.events.Event")] +[Event(name="minimized", type="flash.events.Event")] +[Event(name="closed", type="flash.events.Event")] + +[SkinState("open")] +[SkinState("minimized")] +[SkinState("closed")] + +public class WidgetTemplate extends SkinnableContainer implements IWidgetTemplate +{ + [SkinPart(required="false")] + public var widgetFrame:Group; + + [SkinPart(required="false")] + public var header:Group; + + [SkinPart(required="false")] + public var headerToolGroup:Group; + + [SkinPart(required="false")] + public var icon:FocusableImage; + + [SkinPart(required="false")] + public var closeButton:FocusableImage; + + [SkinPart(required="false")] + public var minimizeButton:FocusableImage; + + [SkinPart(required="false")] + public var resizeButton:Image; + + [Bindable] + public var enableCloseButton:Boolean = true; + + [Bindable] + public var enableMinimizeButton:Boolean = true; + + [Bindable] + public var enableDraging:Boolean = true; + + [Bindable] + public var widgetWidth:Number; + + [Bindable] + public var widgetHeight:Number; + + [Embed(source="/assets/images/w_resizecursor.png")] + public var resizeCursor:Class; + + [Embed(source="/assets/images/w_resizecursor_rtl.png")] + public var resizeCursor_rtl:Class; + + [Bindable] + public var enableIcon:Boolean = true; + + private static const WIDGET_OPENED:String = "open"; + + private static const WIDGET_MINIMIZED:String = "minimized"; + + private static const WIDGET_CLOSED:String = "closed"; + + private var _widgetId:Number; + + private var _widgetState:String = WIDGET_OPENED; + + private var _cursorID:int = 0; + + private var _widgetTitle:String = ""; + + private var _widgetIcon:String = "assets/images/i_widget.png"; + + [Bindable] + private var _draggable:Boolean = true; + + private var _resizable:Boolean = true; + + private var _baseWidget:IBaseWidget; + + public function set baseWidget(value:IBaseWidget):void + { + _baseWidget = value; + + if (value.isPartOfPanel) + { + this.enableIcon = this.enableCloseButton = this.enableMinimizeButton = this.enableDraging = false; + } + this.resizable = value.isResizeable; + this.draggable = value.isDraggable; + this.widgetId = value.widgetId; + this.widgetTitle = value.widgetTitle; + this.widgetIcon = value.widgetIcon; + if (value.initialWidth != 0) + { + if (this.minWidth == 0 || isNaN(this.minWidth) || value.initialWidth > this.minWidth) + { + this.width = value.initialWidth; + this.widgetWidth = value.initialWidth; + } + } + if (value.initialHeight != 0) + { + if (this.minHeight == 0 || isNaN(this.minHeight) || value.initialHeight > this.minHeight) + { + this.height = value.initialHeight; + this.widgetHeight = value.initialHeight; + } + } + } + + public function get baseWidget():IBaseWidget + { + return _baseWidget; + } + + public function set resizable(value:Boolean):void + { + _resizable = value; + resizeButton.visible = _resizable; + } + + [Bindable] + public function get resizable():Boolean + { + return _resizable; + } + + public function set draggable(value:Boolean):void + { + if (enableDraging) + { + _draggable = value; + } + else + { + _draggable = false; + } + } + + public function get widgetId():Number + { + return _widgetId; + } + + public function set widgetId(value:Number):void + { + _widgetId = value; + } + + [Bindable] + public function get widgetTitle():String + { + return _widgetTitle; + } + + public function set widgetTitle(value:String):void + { + _widgetTitle = value; + } + + [Bindable] + public function get widgetIcon():String + { + return _widgetIcon; + } + + public function set widgetIcon(value:String):void + { + _widgetIcon = value; + } + + public function set widgetState(value:String):void + { + this.widgetFrame.toolTip = ""; + this.icon.toolTip = ""; + _widgetState = value; + if (_widgetState == WIDGET_MINIMIZED) + { + this.widgetFrame.toolTip = this.widgetTitle; + this.icon.toolTip = this.widgetTitle; + } + invalidateSkinState(); + + dispatchEvent(new Event(value)); + } + + public function get widgetState():String + { + return _widgetState; + } + + private var _selectedTitlebarButtonIndex:int = -1; + + private var _selectedTitlebarButtonIndexChanged:Boolean = false; + + public function get selectedTitlebarButtonIndex():int + { + return _selectedTitlebarButtonIndex; + } + + public function set selectedTitlebarButtonIndex(value:int):void + { + if (_selectedTitlebarButtonIndex != value) + { + _selectedTitlebarButtonIndex = value; + _selectedTitlebarButtonIndexChanged = true; + invalidateProperties(); + } + } + + public function WidgetTemplate() + { + super(); + + this.width = 300; + this.height = 300; + + this.hasFocusableChildren = true; + + this.addEventListener(FlexEvent.CREATION_COMPLETE, creationCompleteHandler); + } + + private function creationCompleteHandler(event:Event):void + { + widgetWidth = width; + widgetHeight = height; + + this.closeButton.toolTip = LocalizationUtil.getDefaultString("close"); + this.minimizeButton.toolTip = LocalizationUtil.getDefaultString("minimize"); + } + + protected override function partAdded(partName:String, instance:Object):void + { + super.partAdded(partName, instance); + if (instance == icon) + { + icon.addEventListener(MouseEvent.CLICK, icon_clickHandler); + } + if (instance == widgetFrame) + { + widgetFrame.addEventListener(MouseEvent.MOUSE_DOWN, mouse_downHandler); + widgetFrame.addEventListener(MouseEvent.MOUSE_UP, mouse_upHandler); + + widgetFrame.stage.addEventListener(MouseEvent.MOUSE_UP, mouse_upHandler); + widgetFrame.stage.addEventListener(Event.MOUSE_LEAVE, stageout_Handler); + } + if (instance == header) + { + header.addEventListener(MouseEvent.MOUSE_DOWN, mouse_downHandler); + header.addEventListener(MouseEvent.MOUSE_UP, mouse_upHandler); + } + if (instance == closeButton) + { + closeButton.addEventListener(MouseEvent.CLICK, close_clickHandler); + } + if (instance == minimizeButton) + { + minimizeButton.addEventListener(MouseEvent.CLICK, minimize_clickHandler); + } + if (instance == resizeButton) + { + resizeButton.addEventListener(MouseEvent.MOUSE_OVER, resize_overHandler); + resizeButton.addEventListener(MouseEvent.MOUSE_OUT, resize_outHandler); + resizeButton.addEventListener(MouseEvent.MOUSE_DOWN, resize_downHandler); + } + } + + override protected function getCurrentSkinState():String + { + return _widgetState; + } + + override protected function commitProperties():void + { + super.commitProperties(); + + if (_selectedTitlebarButtonIndexChanged) + { + _selectedTitlebarButtonIndexChanged = false; + for (var i:int = 0, n:int = headerToolGroup.numElements; i < n; i++) + { + var btn:TitlebarButton = TitlebarButton(headerToolGroup.getElementAt(i)); + if (i == _selectedTitlebarButtonIndex) + { + btn.selected = true; + } + else + { + btn.selected = false; + } + } + } + } + + public function mouse_downHandler(event:MouseEvent):void + { + if (_draggable && enableDraging) + { + header.addEventListener(MouseEvent.MOUSE_MOVE, mouse_moveHandler); + widgetFrame.addEventListener(MouseEvent.MOUSE_MOVE, mouse_moveHandler); + } + } + + private var widgetMoveStarted:Boolean = false; + + private function mouse_moveHandler(event:MouseEvent):void + { + if (!widgetMoveStarted) + { + widgetMoveStarted = true; + + //TODO: not for V2.0 + //AppEvent.dispatch(AppEvent.CHANGE_LAYOUT, LAYOUT_BASIC)); + if (_widgetState != WIDGET_MINIMIZED) + { + this.alpha = 0.7; + } + var widget:UIComponent = parent as UIComponent; + + if (!DragManager.isDragging) + { + widget.startDrag(); + } + + if (_resizable) + { + AppEvent.dispatch(AppEvent.WIDGET_FOCUS, widgetId); + } + } + } + + private function mouse_upHandler(event:MouseEvent):void + { + header.removeEventListener(MouseEvent.MOUSE_MOVE, mouse_moveHandler); + widgetFrame.removeEventListener(MouseEvent.MOUSE_MOVE, mouse_moveHandler); + + if (_widgetState != WIDGET_MINIMIZED) + { + this.alpha = 1; + } + var widget:UIComponent = parent as UIComponent; + + widget.stopDrag(); + + var appHeight:Number = FlexGlobals.topLevelApplication.height; + var appWidth:Number = FlexGlobals.topLevelApplication.width; + + if (widget.y < 0) + { + widget.y = 0; + } + if (widget.y > (appHeight - 40)) + { + widget.y = appHeight - 40; + } + if (widget.x < 0) + { + widget.x = 20; + } + + if (widget.x > (appWidth - 40)) + { + widget.x = appWidth - 40; + } + + // clear constraints since x and y have been set + widget.left = widget.right = widget.top = widget.bottom = undefined; + + widgetMoveStarted = false; + } + + private function stageout_Handler(event:Event):void + { + if (widgetMoveStarted) + { + mouse_upHandler(null); + } + } + + protected function icon_clickHandler(event:MouseEvent):void + { + if (_baseWidget) + { + _baseWidget.setState(WIDGET_OPENED); + } + + this.widgetFrame.toolTip = ""; + this.icon.toolTip = ""; + } + + protected function close_clickHandler(event:MouseEvent):void + { + if (_baseWidget) + { + _baseWidget.setState(WIDGET_CLOSED); + } + } + + protected function minimize_clickHandler(event:MouseEvent):void + { + if (_baseWidget) + { + _baseWidget.setState(WIDGET_MINIMIZED); + } + + this.widgetFrame.toolTip = this.widgetTitle; + this.icon.toolTip = this.widgetTitle; + } + + private function resize_overHandler(event:MouseEvent):void + { + if (isRtl()) + { + _cursorID = CursorManager.setCursor(resizeCursor_rtl, 2, -10, -10); + } + else + { + _cursorID = CursorManager.setCursor(resizeCursor, 2, -10, -10); + } + } + + private function resize_outHandler(event:MouseEvent):void + { + CursorManager.removeCursor(_cursorID); + } + + private function resize_downHandler(event:MouseEvent):void + { + if (_resizable) + { + /*TODO: for now, it can't be resized when is not basic layout*/ + stage.addEventListener(MouseEvent.MOUSE_MOVE, resize_moveHandler); + stage.addEventListener(MouseEvent.MOUSE_UP, resize_upHandler); + } + } + + public function isRtl():Boolean + { + var result:Boolean = false; + try + { + result = (FlexGlobals.topLevelApplication as Application).layoutDirection == "rtl"; + } + catch (error:Error) + { + result = false; + } + return result; + } + + private function resize_moveHandler(event:MouseEvent):void + { + if (isRtl()) + { + resize_moveHandler_rtl(); + } + else + { + resize_moveHandler_normal(); + } + } + + private function resize_moveHandler_normal():void + { + // if there is minWidth and minHeight specified on the container, use them while resizing + const minimumResizeWidth:Number = minWidth ? minWidth : 200; + const minimumResizeHeight:Number = minHeight ? minHeight : 100; + + if ((stage.mouseX < stage.width - 20) && (stage.mouseY < stage.height - 20)) + { + if ((stage.mouseX - parent.x) > minimumResizeWidth) + { + width = (stage.mouseX - parent.x); + } + if ((stage.mouseY - parent.y) > minimumResizeHeight) + { + height = (stage.mouseY - parent.y); + } + } + } + + private function resize_moveHandler_rtl():void + { + // if there is minWidth and minHeight specified on the container, use them while resizing + const minimumResizeWidth:Number = minWidth ? minWidth : 200; + const minimumResizeHeight:Number = minHeight ? minHeight : 100; + + var nextWidth:Number = stage.stageWidth - (stage.mouseX + parent.x); + var nextHeight:Number = (stage.mouseY - parent.y); + + if (stage.mouseX > 20 && (stage.mouseY < stage.height - 20)) + { + if (nextWidth > minimumResizeWidth) + { + width = nextWidth; + } + if (nextHeight > minimumResizeHeight) + { + height = nextHeight; + } + } + } + + private function resize_upHandler(event:MouseEvent):void + { + widgetWidth = width; + widgetHeight = height; + + stage.removeEventListener(MouseEvent.MOUSE_MOVE, resize_moveHandler); + stage.removeEventListener(MouseEvent.MOUSE_UP, resize_upHandler); + + var p:UIComponent = parent as UIComponent; + p.stopDrag(); + } + + /** + * Adds a new titlebar button - which usually represent a "state" or "view" within the widget. + * For example, the Search widget has three titlebar buttons: one for "Select features" (interactively), + * one for "Select by attribute", and one for "Results". + * Each button corresponds to a function + * + * @param btnIcon URL to icon to use for this button. + * @param btnTip Tooltip for this button. + * @param btnFunction The function to call when this button is clicked. + * @param selectable Boolean. + */ + public function addTitlebarButton(btnIcon:String, btnTip:String, btnFunction:Function, selectable:Boolean = true):void + { + var btn:TitlebarButton = new TitlebarButton(); + btn.callback = btnFunction; + btn.selectable = selectable; + btn.source = btnIcon; + btn.toolTip = btnTip; + + if (selectable) + { + btn.addEventListener(MouseEvent.CLICK, titlebarButton_clickHandler); + if (headerToolGroup.numElements == 0) + { + selectedTitlebarButtonIndex = 0; // automatically select the first button added + } + } + + headerToolGroup.addElement(btn); + } + + private function titlebarButton_clickHandler(event:MouseEvent):void + { + selectedTitlebarButtonIndex = headerToolGroup.getElementIndex(TitlebarButton(event.currentTarget)); + } +} + +} diff --git a/src/com/esri/viewer/components/ErrorWindow.mxml b/src/com/esri/viewer/components/ErrorWindow.mxml index 296b590..4e36046 100644 --- a/src/com/esri/viewer/components/ErrorWindow.mxml +++ b/src/com/esri/viewer/components/ErrorWindow.mxml @@ -1,66 +1,66 @@ - - - - - - - "); // replace newlines - return TextConverter.importToFlow(value, TextConverter.TEXT_FIELD_HTML_FORMAT); - } - ]]> - - - - - - - + + + + + + + "); // replace newlines + return TextConverter.importToFlow(value, TextConverter.TEXT_FIELD_HTML_FORMAT); + } + ]]> + + + + + + + diff --git a/src/com/esri/viewer/components/HTMLPopup.mxml b/src/com/esri/viewer/components/HTMLPopup.mxml index 8a1f2e4..0a2b7e2 100644 --- a/src/com/esri/viewer/components/HTMLPopup.mxml +++ b/src/com/esri/viewer/components/HTMLPopup.mxml @@ -1,147 +1,147 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + diff --git a/src/com/esri/viewer/components/HTMLPopupManager.as b/src/com/esri/viewer/components/HTMLPopupManager.as index c994e96..62aba3c 100644 --- a/src/com/esri/viewer/components/HTMLPopupManager.as +++ b/src/com/esri/viewer/components/HTMLPopupManager.as @@ -1,53 +1,53 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2010-2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package com.esri.viewer.components -{ - -import flash.display.DisplayObject; -import flash.display.DisplayObjectContainer; - -import mx.core.IFlexDisplayObject; -import mx.managers.PopUpManager; - -/** - * Manager class used to control HTML pop-up component location and content. - */ -public class HTMLPopupManager -{ - public static function addPopUp(window:IFlexDisplayObject, - parent:DisplayObject, - modal:Boolean = false, - childList:String = null):void - { - PopUpManager.addPopUp(window, parent, modal, childList); - showSplash(window, parent as DisplayObjectContainer); - } - - private static function showSplash(window:IFlexDisplayObject, parent:DisplayObjectContainer):void - { - var x:Number = (parent.width - window.width) / 2; - var y:Number = (parent.height - window.height) / 2; - - window.move(Math.ceil(x), Math.ceil(y)); - } - - public static function removePopUp(window:IFlexDisplayObject):void - { - PopUpManager.removePopUp(window); - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2010-2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package com.esri.viewer.components +{ + +import flash.display.DisplayObject; +import flash.display.DisplayObjectContainer; + +import mx.core.IFlexDisplayObject; +import mx.managers.PopUpManager; + +/** + * Manager class used to control HTML pop-up component location and content. + */ +public class HTMLPopupManager +{ + public static function addPopUp(window:IFlexDisplayObject, + parent:DisplayObject, + modal:Boolean = false, + childList:String = null):void + { + PopUpManager.addPopUp(window, parent, modal, childList); + showSplash(window, parent as DisplayObjectContainer); + } + + private static function showSplash(window:IFlexDisplayObject, parent:DisplayObjectContainer):void + { + var x:Number = (parent.width - window.width) / 2; + var y:Number = (parent.height - window.height) / 2; + + window.move(Math.ceil(x), Math.ceil(y)); + } + + public static function removePopUp(window:IFlexDisplayObject):void + { + PopUpManager.removePopUp(window); + } +} + +} diff --git a/src/com/esri/viewer/components/InfoPopup.mxml b/src/com/esri/viewer/components/InfoPopup.mxml index 2543e25..abd65f8 100644 --- a/src/com/esri/viewer/components/InfoPopup.mxml +++ b/src/com/esri/viewer/components/InfoPopup.mxml @@ -1,323 +1,323 @@ - - - - - - - map.width / 2) - { - reg = "regRight"; - } - currentState = reg; - this.x = infoPt.x - (infoIconCanvas.x + 20); - this.y = infoPt.y - (infoIconCanvas.y + 20); - } - } - - public function repositionInfo(event:Event):void - { - if ((map.extent) && (infoData)) - { - var pt:MapPoint = infoData.point; - var infoPt:Point = map.toScreen(pt); - var reg:String = "regLeft"; - if (infoPt.x > map.width / 2) - { - reg = "regRight"; - } - currentState = reg; - this.x = infoPt.x - (infoIconCanvas.x + 20); - this.y = infoPt.y - (infoIconCanvas.y + 20); - } - } - - private function closeInfo():void - { - infoData = null; - } - - private function showLink():void - { - navigateToURL(new URLRequest(infoData.link)); - } - - private function flipIcon(dir:String):void - { - var invertMatrix:Matrix = new Matrix(1, 0, 0); - // set matrix to invert horizontally - - if (dir == "RIGHT") - { - invertMatrix.scale(-1, 1); - // move matrix, so right is at left, and vice versa - invertMatrix.translate(40, 0); - } - - var iconTrans:Transform = new Transform(infoIcon); - iconTrans.matrix = invertMatrix; - } - - protected function infoLink_preinitializeHandler(event:FlexEvent):void - { - if (isRtl()) - { - infoLink.source = "assets/images/w_link_rtl.png"; - } - else - { - infoLink.source = "assets/images/w_link.png"; - } - } - - public function isRtl():Boolean - { - var result:Boolean = false; - try - { - result = (FlexGlobals.topLevelApplication as Application).layoutDirection == "rtl"; - } - catch (error:Error) - { - result = false; - } - return result; - } - ]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + map.width / 2) + { + reg = "regRight"; + } + currentState = reg; + this.x = infoPt.x - (infoIconCanvas.x + 20); + this.y = infoPt.y - (infoIconCanvas.y + 20); + } + } + + public function repositionInfo(event:Event):void + { + if ((map.extent) && (infoData)) + { + var pt:MapPoint = infoData.point; + var infoPt:Point = map.toScreen(pt); + var reg:String = "regLeft"; + if (infoPt.x > map.width / 2) + { + reg = "regRight"; + } + currentState = reg; + this.x = infoPt.x - (infoIconCanvas.x + 20); + this.y = infoPt.y - (infoIconCanvas.y + 20); + } + } + + private function closeInfo():void + { + infoData = null; + } + + private function showLink():void + { + navigateToURL(new URLRequest(infoData.link)); + } + + private function flipIcon(dir:String):void + { + var invertMatrix:Matrix = new Matrix(1, 0, 0); + // set matrix to invert horizontally + + if (dir == "RIGHT") + { + invertMatrix.scale(-1, 1); + // move matrix, so right is at left, and vice versa + invertMatrix.translate(40, 0); + } + + var iconTrans:Transform = new Transform(infoIcon); + iconTrans.matrix = invertMatrix; + } + + protected function infoLink_preinitializeHandler(event:FlexEvent):void + { + if (isRtl()) + { + infoLink.source = "assets/images/w_link_rtl.png"; + } + else + { + infoLink.source = "assets/images/w_link.png"; + } + } + + public function isRtl():Boolean + { + var result:Boolean = false; + try + { + result = (FlexGlobals.topLevelApplication as Application).layoutDirection == "rtl"; + } + catch (error:Error) + { + result = false; + } + return result; + } + ]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/com/esri/viewer/components/TitlebarButton.as b/src/com/esri/viewer/components/TitlebarButton.as index bb676c3..39f11d9 100644 --- a/src/com/esri/viewer/components/TitlebarButton.as +++ b/src/com/esri/viewer/components/TitlebarButton.as @@ -1,174 +1,174 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2010-2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package com.esri.viewer.components -{ - -import flash.events.KeyboardEvent; -import flash.events.MouseEvent; -import flash.ui.Keyboard; - -import mx.controls.Image; -import mx.managers.IFocusManagerComponent; - -import spark.components.supportClasses.SkinnableComponent; - -[SkinState("normal")] -[SkinState("selected")] - -/** - * TitlebarButton... - * - * @private - */ -public class TitlebarButton extends SkinnableComponent implements IFocusManagerComponent -{ - - //-------------------------------------------------------------------------- - // - // Properties - // - //-------------------------------------------------------------------------- - - //---------------------------------- - // icon - //---------------------------------- - - [SkinPart(required="false")] - public var icon:Image; - - //---------------------------------- - // source - //---------------------------------- - - [Bindable] - public var source:Object; - - //---------------------------------- - // callback - //---------------------------------- - - public var callback:Function; - - //---------------------------------- - // selectable - //---------------------------------- - - public var selectable:Boolean = true; - - //---------------------------------- - // selected - //---------------------------------- - - private var _selected:Boolean = false; - - public function get selected():Boolean - { - return _selected; - } - - public function set selected(value:Boolean):void - { - if (selectable && _selected != value) - { - _selected = value; - invalidateSkinState(); - } - } - - - //-------------------------------------------------------------------------- - // - // Skin Management - // - //-------------------------------------------------------------------------- - - override protected function getCurrentSkinState():String - { - return selected ? "selected" : "normal"; - } - - override protected function partAdded(partName:String, instance:Object):void - { - super.partAdded(partName, instance); - - if (instance == icon) - { - icon.addEventListener(MouseEvent.CLICK, icon_clickHandler); - } - } - - override protected function partRemoved(partName:String, instance:Object):void - { - super.partRemoved(partName, instance); - - if (instance == icon) - { - icon.removeEventListener(MouseEvent.CLICK, icon_clickHandler); - } - } - - //-------------------------------------------------------------------------- - // - // Focus Management - // - //-------------------------------------------------------------------------- - - private var keyboardPressed:Boolean = false; - - override protected function keyDownHandler(event:KeyboardEvent):void - { - if (event.keyCode != Keyboard.SPACE) - { - return; - } - - keyboardPressed = true; - event.updateAfterEvent(); - } - - override protected function keyUpHandler(event:KeyboardEvent):void - { - if (event.keyCode != Keyboard.SPACE) - { - return; - } - - if (enabled && keyboardPressed) - { - // Mimic mouse click on the button. - keyboardPressed = false; - if (icon) - { - icon.dispatchEvent(new MouseEvent(MouseEvent.CLICK, true)); - } - } - event.updateAfterEvent(); - } - - //-------------------------------------------------------------------------- - // - // Event listeners - // - //-------------------------------------------------------------------------- - - private function icon_clickHandler(event:MouseEvent):void - { - selected = true; - callback(); - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2010-2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package com.esri.viewer.components +{ + +import flash.events.KeyboardEvent; +import flash.events.MouseEvent; +import flash.ui.Keyboard; + +import mx.controls.Image; +import mx.managers.IFocusManagerComponent; + +import spark.components.supportClasses.SkinnableComponent; + +[SkinState("normal")] +[SkinState("selected")] + +/** + * TitlebarButton... + * + * @private + */ +public class TitlebarButton extends SkinnableComponent implements IFocusManagerComponent +{ + + //-------------------------------------------------------------------------- + // + // Properties + // + //-------------------------------------------------------------------------- + + //---------------------------------- + // icon + //---------------------------------- + + [SkinPart(required="false")] + public var icon:Image; + + //---------------------------------- + // source + //---------------------------------- + + [Bindable] + public var source:Object; + + //---------------------------------- + // callback + //---------------------------------- + + public var callback:Function; + + //---------------------------------- + // selectable + //---------------------------------- + + public var selectable:Boolean = true; + + //---------------------------------- + // selected + //---------------------------------- + + private var _selected:Boolean = false; + + public function get selected():Boolean + { + return _selected; + } + + public function set selected(value:Boolean):void + { + if (selectable && _selected != value) + { + _selected = value; + invalidateSkinState(); + } + } + + + //-------------------------------------------------------------------------- + // + // Skin Management + // + //-------------------------------------------------------------------------- + + override protected function getCurrentSkinState():String + { + return selected ? "selected" : "normal"; + } + + override protected function partAdded(partName:String, instance:Object):void + { + super.partAdded(partName, instance); + + if (instance == icon) + { + icon.addEventListener(MouseEvent.CLICK, icon_clickHandler); + } + } + + override protected function partRemoved(partName:String, instance:Object):void + { + super.partRemoved(partName, instance); + + if (instance == icon) + { + icon.removeEventListener(MouseEvent.CLICK, icon_clickHandler); + } + } + + //-------------------------------------------------------------------------- + // + // Focus Management + // + //-------------------------------------------------------------------------- + + private var keyboardPressed:Boolean = false; + + override protected function keyDownHandler(event:KeyboardEvent):void + { + if (event.keyCode != Keyboard.SPACE) + { + return; + } + + keyboardPressed = true; + event.updateAfterEvent(); + } + + override protected function keyUpHandler(event:KeyboardEvent):void + { + if (event.keyCode != Keyboard.SPACE) + { + return; + } + + if (enabled && keyboardPressed) + { + // Mimic mouse click on the button. + keyboardPressed = false; + if (icon) + { + icon.dispatchEvent(new MouseEvent(MouseEvent.CLICK, true)); + } + } + event.updateAfterEvent(); + } + + //-------------------------------------------------------------------------- + // + // Event listeners + // + //-------------------------------------------------------------------------- + + private function icon_clickHandler(event:MouseEvent):void + { + selected = true; + callback(); + } +} + +} diff --git a/src/com/esri/viewer/components/toc/TOC.as b/src/com/esri/viewer/components/toc/TOC.as index d31efd5..d557a86 100644 --- a/src/com/esri/viewer/components/toc/TOC.as +++ b/src/com/esri/viewer/components/toc/TOC.as @@ -1,787 +1,787 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2010-2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package com.esri.viewer.components.toc -{ - -import com.esri.ags.Map; -import com.esri.ags.events.MapEvent; -import com.esri.ags.layers.FeatureLayer; -import com.esri.ags.layers.GraphicsLayer; -import com.esri.ags.layers.Layer; -import com.esri.viewer.components.toc.tocClasses.TocItem; -import com.esri.viewer.components.toc.tocClasses.TocItemRenderer; -import com.esri.viewer.components.toc.tocClasses.TocMapLayerItem; -import com.esri.viewer.components.toc.utils.MapUtil; - -import flash.events.Event; - -import mx.collections.ArrayCollection; -import mx.controls.Tree; -import mx.core.ClassFactory; -import mx.effects.Effect; -import mx.effects.Fade; -import mx.events.CollectionEvent; -import mx.events.CollectionEventKind; -import mx.events.ListEvent; - -//-------------------------------------- -// Other metadata -//-------------------------------------- - -/** - * A tree-based Table of Contents component for a Map. - * - * @private - */ -public class TOC extends Tree -{ - /** - * Creates a new TOC object. - * - * @param map The map that is linked to this TOC. - */ - public function TOC(map:Map = null) - { - super(); - - dataProvider = _tocRoots; - itemRenderer = new ClassFactory(TocItemRenderer); - iconFunction = tocItemIcon; - - this.map = map; - - // Double click support for expanding/collapsing tree branches - doubleClickEnabled = true; - addEventListener(ListEvent.ITEM_DOUBLE_CLICK, onItemDoubleClick); - - // Set default styles - setStyle("borderStyle", "none"); - - } - - //-------------------------------------------------------------------------- - // - // Variables - // - //-------------------------------------------------------------------------- - - // The tree data provider - private var _tocRoots:ArrayCollection = new ArrayCollection(); // of TocItem - - private var _map:Map; - private var _mapChanged:Boolean = false; - - //toc style - private var _isMapServiceOnly:Boolean = false; - - // Layer list filters - private var _includeLayers:ArrayCollection; - private var _excludeLayers:ArrayCollection; - private var _excludeGraphicsLayers:Boolean = false; - - private var _layerFiltersChanged:Boolean = false; - - private var _basemapLayers:ArrayCollection; - - // Label function for TocMapLayerItem - private var _labelFunction:Function = null; - private var _labelFunctionChanged:Boolean = false; - - // The effect used on layer show/hide - private var _fade:Effect; - private var _fadeDuration:Number = 250; // milliseconds - private var _useLayerFadeEffect:Boolean = false; - private var _useLayerFadeEffectChanged:Boolean = false; - - // show layer menu - private var _showLayerMenu:Boolean = true; - - //-------------------------------------------------------------------------- - // - // Properties - // - //-------------------------------------------------------------------------- - - //-------------------------------------------------------------------------- - // map - //-------------------------------------------------------------------------- - - [Bindable("mapChanged")] - /** - * The Map to which this TOC is attached. - */ - public function get map():Map - { - return _map; - } - - /** - * @private - */ - public function set map(value:Map):void - { - if (value != _map) - { - removeMapListeners(); - _map = value; - addMapListeners(); - - _mapChanged = true; - invalidateProperties(); - - dispatchEvent(new Event("mapChanged")); - } - } - - [Bindable("mapServiceOnlyChanged")] - public function get isMapServiceOnly():Boolean - { - return _isMapServiceOnly; - } - - public function set isMapServiceOnly(value:Boolean):void - { - _isMapServiceOnly = value; - dispatchEvent(new Event("mapServiceOnlyChanged")); - } - - //-------------------------------------------------------------------------- - // includeLayers - //-------------------------------------------------------------------------- - - [Bindable("includeLayersChanged")] - /** - * A list of layer objects and/or layer IDs to include in the TOC. - */ - public function get includeLayers():Object - { - return _includeLayers; - } - - /** - * @private - */ - public function set includeLayers(value:Object):void - { - removeLayerFilterListeners(_includeLayers); - _includeLayers = normalizeLayerFilter(value); - addLayerFilterListeners(_includeLayers); - onFilterChange(); - dispatchEvent(new Event("includeLayersChanged")); - } - - //-------------------------------------------------------------------------- - // excludeLayers - //-------------------------------------------------------------------------- - - [Bindable("excludeLayersChanged")] - /** - * A list of layer objects and/or layer IDs to exclude from the TOC. - */ - public function get excludeLayers():Object - { - return _excludeLayers; - } - - /** - * @private - */ - public function set excludeLayers(value:Object):void - { - removeLayerFilterListeners(_excludeLayers); - _excludeLayers = normalizeLayerFilter(value); - addLayerFilterListeners(_excludeLayers); - - onFilterChange(); - dispatchEvent(new Event("excludeLayersChanged")); - } - - //-------------------------------------------------------------------------- - // excludeGraphicsLayers - //-------------------------------------------------------------------------- - - [Bindable] - [Inspectable(category="Mapping", defaultValue="false")] - /** - * Whether to exclude all GraphicsLayer map layers from the TOC. - * - * @default false - */ - public function get excludeGraphicsLayers():Boolean - { - return _excludeGraphicsLayers; - } - - /** - * @private - */ - public function set excludeGraphicsLayers(value:Boolean):void - { - _excludeGraphicsLayers = value; - - onFilterChange(); - } - - //-------------------------------------------------------------------------- - // basemapLayers - //-------------------------------------------------------------------------- - - /** - * A list of basemap layer objects and/or layer IDs. - */ - public function get basemapLayers():Object - { - return _basemapLayers; - } - - /** - * @private - */ - public function set basemapLayers(value:Object):void - { - _basemapLayers = normalizeLayerFilter(value); - } - - //-------------------------------------------------------------------------- - // labelFunction - //-------------------------------------------------------------------------- - - /** - * A label function for map layers. - * - * The function signature must be: labelFunc( layer : Layer ) : String - */ - override public function set labelFunction(value:Function):void - { - // CAUTION: We are overriding the semantics and method signature of the - // super Tree's labelFunction, so do not set the super.labelFunction property. - // - // Also, we must reference the function using "_labelFunction" instead of - // "labelFunction" since the latter will call the getter method on Tree, - // rather than grabbing this TOC's instance variable. - - _labelFunction = value; - - _labelFunctionChanged = true; - invalidateProperties(); - } - - //-------------------------------------------------------------------------- - // useLayerFadeEffect - //-------------------------------------------------------------------------- - - [Bindable("useLayerFadeEffectChanged")] - [Inspectable(category="Mapping", defaultValue="false")] - /** - * Whether to use a Fade effect when the map layers are shown or hidden. - * - * @default false - */ - public function get useLayerFadeEffect():Boolean - { - return _useLayerFadeEffect; - } - - /** - * @private - */ - public function set useLayerFadeEffect(value:Boolean):void - { - if (value != _useLayerFadeEffect) - { - _useLayerFadeEffect = value; - - _useLayerFadeEffectChanged = true; - invalidateProperties(); - - dispatchEvent(new Event("useLayerFadeEffectChanged")); - } - } - - //-------------------------------------------------------------------------- - // - // Overriden Methods - // - //-------------------------------------------------------------------------- - - /** - * @private - */ - override protected function commitProperties():void - { - super.commitProperties(); - - if (_mapChanged || _layerFiltersChanged || _labelFunctionChanged) - { - _mapChanged = false; - _layerFiltersChanged = false; - _labelFunctionChanged = false; - - // Repopulate the TOC data provider - registerAllMapLayers(); - } - - if (_useLayerFadeEffectChanged) - { - _useLayerFadeEffectChanged = false; - - MapUtil.forEachMapLayer(map, function(layer:Layer):void - { - setLayerFadeEffect(layer); - }); - } - } - - //-------------------------------------------------------------------------- - // - // Methods - // - //-------------------------------------------------------------------------- - - public function expandLayerItems():void - { - validateNow(); - expandTocItems(_tocRoots); - } - - private function expandTocItems(tocItems:ArrayCollection):void - { - for each (var tocItem:TocItem in tocItems) - { - if (tocItem.isGroupLayer()) - { - expandTocItems(tocItem.children); - expandItem(tocItem, true); - } - } - } - - private function addMapListeners():void - { - if (map) - { - map.addEventListener(MapEvent.LAYER_ADD, onLayerAdd, false, 0, true); - map.addEventListener(MapEvent.LAYER_REMOVE, onLayerRemove, false, 0, true); - map.addEventListener(MapEvent.LAYER_REMOVE_ALL, onLayerRemoveAll, false, 0, true); - map.addEventListener(MapEvent.LAYER_REORDER, onLayerReorder, false, 0, true); - } - } - - private function removeMapListeners():void - { - if (map) - { - map.removeEventListener(MapEvent.LAYER_ADD, onLayerAdd); - map.removeEventListener(MapEvent.LAYER_REMOVE, onLayerRemove); - map.removeEventListener(MapEvent.LAYER_REMOVE_ALL, onLayerRemoveAll); - map.removeEventListener(MapEvent.LAYER_REORDER, onLayerReorder); - } - } - - /** - * Registers the new map layer in the TOC tree. - */ - private function onLayerAdd(event:MapEvent):void - { - registerMapLayer(event.layer); - } - - private function onLayerRemove(event:MapEvent):void - { - unregisterMapLayer(event.layer); - } - - private function onLayerRemoveAll(event:MapEvent):void - { - unregisterAllMapLayers(); - } - - private function onLayerReorder(event:MapEvent):void - { - for each (var item:Object in this.dataProvider) - { - this.expandItem(item, false); - } - - var layer:Layer = event.layer; - var index:int = event.index; - - if (isGraphicsLayer(layer) || isHiddenLayer(layer) || isLayerExcluded(layer)) - { - return; - } - - var i:int; - var currentTOCIndex:int; - var currentItem:Object; - // remove hidden layes, to get the correct layerIds count - var newLayerIds:Array = getNewLayerIds(map.layerIds); - if (index <= (newLayerIds.length - _tocRoots.length)) // move this item to the bottom of toc - { - // index of item to move - currentTOCIndex = getCurrentTOCIndex(); - // item to move - currentItem = _tocRoots.getItemAt(currentTOCIndex); - - for (i = currentTOCIndex; i < _tocRoots.length; i++) - { - if (i == _tocRoots.length - 1) - { - _tocRoots.setItemAt(currentItem, _tocRoots.length - 1); - } - else - { - _tocRoots.setItemAt(_tocRoots.getItemAt(i + 1), i); - } - } - } - else if ((newLayerIds.length - _tocRoots.length) < index < newLayerIds.length) - { - // index of item to move - currentTOCIndex = getCurrentTOCIndex(); - // item to move - currentItem = _tocRoots.getItemAt(currentTOCIndex); - - var newTOCIndex:Number = newLayerIds.length - index - 1; - if (newTOCIndex < currentTOCIndex) - { - for (i = currentTOCIndex; newTOCIndex <= i; i--) - { - if (i == newTOCIndex) - { - _tocRoots.setItemAt(currentItem, newTOCIndex); - } - else - { - _tocRoots.setItemAt(_tocRoots.getItemAt(i - 1), i); - } - } - } - else - { - - for (i = currentTOCIndex; i <= newTOCIndex; i++) - { - if (i == newTOCIndex) - { - _tocRoots.setItemAt(currentItem, newTOCIndex); - } - else - { - _tocRoots.setItemAt(_tocRoots.getItemAt(i + 1), i); - } - } - } - } - - function getCurrentTOCIndex():int - { - var result:int; - for (i = 0; i < _tocRoots.length; i++) - { - if (_tocRoots.getItemAt(i) is TocMapLayerItem && TocMapLayerItem(_tocRoots.getItemAt(i)).layer === layer) - { - result = i; - break; - } - } - return result; - } - } - - private function getNewLayerIds(layerIds:Array):Array - { - var result:Array = []; - var mapLayers:ArrayCollection = ArrayCollection(map.layers); - for (var i:int = 0; i < layerIds.length; i++) - { - var layer:Layer = mapLayers.getItemAt(i) as Layer - if (isHiddenLayer(layer) || isGraphicsLayer(layer) || islayerExcludedAndNotBaseMap(layer)) - { - continue; - } - result.push(layerIds[i]); - } - return result; - } - - private function isGraphicsLayer(layer:Layer):Boolean - { - return (layer is GraphicsLayer) && !(layer is FeatureLayer); - } - - private function isHiddenLayer(layer:Layer):Boolean - { - return layer.name.indexOf("hiddenLayer_") > -1; - } - - private function isLayerExcluded(layer:Layer):Boolean - { - var exclude:Boolean; - for each (var item:* in excludeLayers) - { - if ((item === layer || item == layer.name) || (item == layer.id)) - { - exclude = true; - break; - } - } - return exclude; - } - - private function islayerExcludedAndNotBaseMap(layer:Layer):Boolean - { - var exclude:Boolean; - for each (var item:* in excludeLayers) - { - if ((item === layer || item == layer.name) || (item == layer.id)) - { - exclude = true; - for each (var item1:* in basemapLayers) - { - if (item1 === item) - { - exclude = false; - break; - } - } - if (!exclude) - { - break; - } - } - } - return exclude; - } - - private function unregisterAllMapLayers():void - { - _tocRoots.removeAll(); - } - - private function unregisterMapLayer(layer:Layer):void - { - for (var i:int = 0; i < _tocRoots.length; i++) - { - var item:Object = _tocRoots[i]; - if (item is TocMapLayerItem && TocMapLayerItem(item).layer === layer) - { - _tocRoots.removeItemAt(i); - break; - } - } - } - - /** - * Registers all existing map layers in the TOC tree. - */ - private function registerAllMapLayers():void - { - unregisterAllMapLayers(); - MapUtil.forEachMapLayer(map, function(layer:Layer):void - { - registerMapLayer(layer); - }); - } - - /** - * Creates a new top-level TOC item for the specified map layer. - */ - private function registerMapLayer(layer:Layer):void - { - if (filterOutLayer(layer)) - { - return; - } - - // Init any layer properties, styles, and effects - if (useLayerFadeEffect) - { - setLayerFadeEffect(layer); - } - - var tocItem:TocMapLayerItem = new TocMapLayerItem(layer, _labelFunction, _isMapServiceOnly); - // need to get the true index of this layer in the map, removing any graphics layers from the equation if necessary as well as any exclude layers - var trueMapLayerIndex:Number = 0; - for each (var mapLayer:Layer in this.map.layers) - { - if (mapLayer == layer) - { - break; - } - - if (!filterOutLayer(mapLayer)) // only increase the index if this layer is in the TOC - { - trueMapLayerIndex++; - } - } - // now add at the correct index - _tocRoots.addItemAt(tocItem, _tocRoots.length - trueMapLayerIndex); - } - - private function setLayerFadeEffect(layer:Layer):void - { - if (useLayerFadeEffect) - { - // Lazy load the effect - if (!_fade) - { - _fade = new Fade(); - _fade.duration = _fadeDuration; - } - layer.setStyle("showEffect", _fade); - layer.setStyle("hideEffect", _fade); - } - else - { - layer.clearStyle("showEffect"); - layer.clearStyle("hideEffect"); - } - } - - private function addLayerFilterListeners(filter:ArrayCollection):void - { - if (filter) - { - filter.addEventListener(CollectionEvent.COLLECTION_CHANGE, onFilterChange, false, 0, true); - } - } - - private function removeLayerFilterListeners(filter:ArrayCollection):void - { - if (filter) - { - filter.removeEventListener(CollectionEvent.COLLECTION_CHANGE, onFilterChange); - } - } - - private function onFilterChange(event:CollectionEvent = null):void - { - var isValidChange:Boolean = false; - - if (event == null) - { - // Called directly from the setters - isValidChange = true; - } - else - { - // Only act on certain kinds of collection changes. - // Specifically, avoid acting on the UPDATE kind. - // It causes unwanted refresh of the TOC model. - switch (event.kind) - { - case CollectionEventKind.ADD: - case CollectionEventKind.REMOVE: - case CollectionEventKind.REPLACE: - case CollectionEventKind.REFRESH: - case CollectionEventKind.RESET: - { - isValidChange = true; - } - } - } - - if (isValidChange) - { - _layerFiltersChanged = true; - invalidateProperties(); - } - } - - public function filterOutLayer(layer:Layer):Boolean - { - var exclude:Boolean = false; - if (excludeGraphicsLayers && isGraphicsLayer(layer)) - { - exclude = true; - } - if (isHiddenLayer(layer)) - { - exclude = true; - } - if (!exclude && excludeLayers) - { - exclude = isLayerExcluded(layer); - } - if (includeLayers) - { - exclude = true; - for each (var item:* in includeLayers) - { - if (item === layer || item == layer.id) - { - exclude = false; - break; - } - } - } - return exclude; - } - - private function normalizeLayerFilter(value:Object):ArrayCollection - { - var filter:ArrayCollection; - if (value is ArrayCollection) - { - filter = value as ArrayCollection; - } - else if (value is Array) - { - filter = new ArrayCollection(value as Array); - } - else if (value is String || value is Layer) - { - // Possibly a String (layer id) or Layer object - filter = new ArrayCollection([ value ]); - } - else - { - // Unsupported value type - filter = null; - } - return filter; - } - - /** - * Double click handler for expanding or collapsing a tree branch. - */ - private function onItemDoubleClick(event:ListEvent):void - { - if (event.itemRenderer && event.itemRenderer.data) - { - var item:Object = event.itemRenderer.data; - expandItem(item, !isItemOpen(item), true, true, event); - } - } - - private function tocItemIcon(item:Object):Class - { - if (item is TocMapLayerItem) - { - return getStyle("mapServiceIcon"); - } - if (item is TocItem) - { - return TocItem(item).isGroupLayer() - ? getStyle("groupLayerIcon") - : getStyle("layerIcon"); - } - return getStyle("layerIcon"); - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2010-2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package com.esri.viewer.components.toc +{ + +import com.esri.ags.Map; +import com.esri.ags.events.MapEvent; +import com.esri.ags.layers.FeatureLayer; +import com.esri.ags.layers.GraphicsLayer; +import com.esri.ags.layers.Layer; +import com.esri.viewer.components.toc.tocClasses.TocItem; +import com.esri.viewer.components.toc.tocClasses.TocItemRenderer; +import com.esri.viewer.components.toc.tocClasses.TocMapLayerItem; +import com.esri.viewer.components.toc.utils.MapUtil; + +import flash.events.Event; + +import mx.collections.ArrayCollection; +import mx.controls.Tree; +import mx.core.ClassFactory; +import mx.effects.Effect; +import mx.effects.Fade; +import mx.events.CollectionEvent; +import mx.events.CollectionEventKind; +import mx.events.ListEvent; + +//-------------------------------------- +// Other metadata +//-------------------------------------- + +/** + * A tree-based Table of Contents component for a Map. + * + * @private + */ +public class TOC extends Tree +{ + /** + * Creates a new TOC object. + * + * @param map The map that is linked to this TOC. + */ + public function TOC(map:Map = null) + { + super(); + + dataProvider = _tocRoots; + itemRenderer = new ClassFactory(TocItemRenderer); + iconFunction = tocItemIcon; + + this.map = map; + + // Double click support for expanding/collapsing tree branches + doubleClickEnabled = true; + addEventListener(ListEvent.ITEM_DOUBLE_CLICK, onItemDoubleClick); + + // Set default styles + setStyle("borderStyle", "none"); + + } + + //-------------------------------------------------------------------------- + // + // Variables + // + //-------------------------------------------------------------------------- + + // The tree data provider + private var _tocRoots:ArrayCollection = new ArrayCollection(); // of TocItem + + private var _map:Map; + private var _mapChanged:Boolean = false; + + //toc style + private var _isMapServiceOnly:Boolean = false; + + // Layer list filters + private var _includeLayers:ArrayCollection; + private var _excludeLayers:ArrayCollection; + private var _excludeGraphicsLayers:Boolean = false; + + private var _layerFiltersChanged:Boolean = false; + + private var _basemapLayers:ArrayCollection; + + // Label function for TocMapLayerItem + private var _labelFunction:Function = null; + private var _labelFunctionChanged:Boolean = false; + + // The effect used on layer show/hide + private var _fade:Effect; + private var _fadeDuration:Number = 250; // milliseconds + private var _useLayerFadeEffect:Boolean = false; + private var _useLayerFadeEffectChanged:Boolean = false; + + // show layer menu + private var _showLayerMenu:Boolean = true; + + //-------------------------------------------------------------------------- + // + // Properties + // + //-------------------------------------------------------------------------- + + //-------------------------------------------------------------------------- + // map + //-------------------------------------------------------------------------- + + [Bindable("mapChanged")] + /** + * The Map to which this TOC is attached. + */ + public function get map():Map + { + return _map; + } + + /** + * @private + */ + public function set map(value:Map):void + { + if (value != _map) + { + removeMapListeners(); + _map = value; + addMapListeners(); + + _mapChanged = true; + invalidateProperties(); + + dispatchEvent(new Event("mapChanged")); + } + } + + [Bindable("mapServiceOnlyChanged")] + public function get isMapServiceOnly():Boolean + { + return _isMapServiceOnly; + } + + public function set isMapServiceOnly(value:Boolean):void + { + _isMapServiceOnly = value; + dispatchEvent(new Event("mapServiceOnlyChanged")); + } + + //-------------------------------------------------------------------------- + // includeLayers + //-------------------------------------------------------------------------- + + [Bindable("includeLayersChanged")] + /** + * A list of layer objects and/or layer IDs to include in the TOC. + */ + public function get includeLayers():Object + { + return _includeLayers; + } + + /** + * @private + */ + public function set includeLayers(value:Object):void + { + removeLayerFilterListeners(_includeLayers); + _includeLayers = normalizeLayerFilter(value); + addLayerFilterListeners(_includeLayers); + onFilterChange(); + dispatchEvent(new Event("includeLayersChanged")); + } + + //-------------------------------------------------------------------------- + // excludeLayers + //-------------------------------------------------------------------------- + + [Bindable("excludeLayersChanged")] + /** + * A list of layer objects and/or layer IDs to exclude from the TOC. + */ + public function get excludeLayers():Object + { + return _excludeLayers; + } + + /** + * @private + */ + public function set excludeLayers(value:Object):void + { + removeLayerFilterListeners(_excludeLayers); + _excludeLayers = normalizeLayerFilter(value); + addLayerFilterListeners(_excludeLayers); + + onFilterChange(); + dispatchEvent(new Event("excludeLayersChanged")); + } + + //-------------------------------------------------------------------------- + // excludeGraphicsLayers + //-------------------------------------------------------------------------- + + [Bindable] + [Inspectable(category="Mapping", defaultValue="false")] + /** + * Whether to exclude all GraphicsLayer map layers from the TOC. + * + * @default false + */ + public function get excludeGraphicsLayers():Boolean + { + return _excludeGraphicsLayers; + } + + /** + * @private + */ + public function set excludeGraphicsLayers(value:Boolean):void + { + _excludeGraphicsLayers = value; + + onFilterChange(); + } + + //-------------------------------------------------------------------------- + // basemapLayers + //-------------------------------------------------------------------------- + + /** + * A list of basemap layer objects and/or layer IDs. + */ + public function get basemapLayers():Object + { + return _basemapLayers; + } + + /** + * @private + */ + public function set basemapLayers(value:Object):void + { + _basemapLayers = normalizeLayerFilter(value); + } + + //-------------------------------------------------------------------------- + // labelFunction + //-------------------------------------------------------------------------- + + /** + * A label function for map layers. + * + * The function signature must be: labelFunc( layer : Layer ) : String + */ + override public function set labelFunction(value:Function):void + { + // CAUTION: We are overriding the semantics and method signature of the + // super Tree's labelFunction, so do not set the super.labelFunction property. + // + // Also, we must reference the function using "_labelFunction" instead of + // "labelFunction" since the latter will call the getter method on Tree, + // rather than grabbing this TOC's instance variable. + + _labelFunction = value; + + _labelFunctionChanged = true; + invalidateProperties(); + } + + //-------------------------------------------------------------------------- + // useLayerFadeEffect + //-------------------------------------------------------------------------- + + [Bindable("useLayerFadeEffectChanged")] + [Inspectable(category="Mapping", defaultValue="false")] + /** + * Whether to use a Fade effect when the map layers are shown or hidden. + * + * @default false + */ + public function get useLayerFadeEffect():Boolean + { + return _useLayerFadeEffect; + } + + /** + * @private + */ + public function set useLayerFadeEffect(value:Boolean):void + { + if (value != _useLayerFadeEffect) + { + _useLayerFadeEffect = value; + + _useLayerFadeEffectChanged = true; + invalidateProperties(); + + dispatchEvent(new Event("useLayerFadeEffectChanged")); + } + } + + //-------------------------------------------------------------------------- + // + // Overriden Methods + // + //-------------------------------------------------------------------------- + + /** + * @private + */ + override protected function commitProperties():void + { + super.commitProperties(); + + if (_mapChanged || _layerFiltersChanged || _labelFunctionChanged) + { + _mapChanged = false; + _layerFiltersChanged = false; + _labelFunctionChanged = false; + + // Repopulate the TOC data provider + registerAllMapLayers(); + } + + if (_useLayerFadeEffectChanged) + { + _useLayerFadeEffectChanged = false; + + MapUtil.forEachMapLayer(map, function(layer:Layer):void + { + setLayerFadeEffect(layer); + }); + } + } + + //-------------------------------------------------------------------------- + // + // Methods + // + //-------------------------------------------------------------------------- + + public function expandLayerItems():void + { + validateNow(); + expandTocItems(_tocRoots); + } + + private function expandTocItems(tocItems:ArrayCollection):void + { + for each (var tocItem:TocItem in tocItems) + { + if (tocItem.isGroupLayer()) + { + expandTocItems(tocItem.children); + expandItem(tocItem, true); + } + } + } + + private function addMapListeners():void + { + if (map) + { + map.addEventListener(MapEvent.LAYER_ADD, onLayerAdd, false, 0, true); + map.addEventListener(MapEvent.LAYER_REMOVE, onLayerRemove, false, 0, true); + map.addEventListener(MapEvent.LAYER_REMOVE_ALL, onLayerRemoveAll, false, 0, true); + map.addEventListener(MapEvent.LAYER_REORDER, onLayerReorder, false, 0, true); + } + } + + private function removeMapListeners():void + { + if (map) + { + map.removeEventListener(MapEvent.LAYER_ADD, onLayerAdd); + map.removeEventListener(MapEvent.LAYER_REMOVE, onLayerRemove); + map.removeEventListener(MapEvent.LAYER_REMOVE_ALL, onLayerRemoveAll); + map.removeEventListener(MapEvent.LAYER_REORDER, onLayerReorder); + } + } + + /** + * Registers the new map layer in the TOC tree. + */ + private function onLayerAdd(event:MapEvent):void + { + registerMapLayer(event.layer); + } + + private function onLayerRemove(event:MapEvent):void + { + unregisterMapLayer(event.layer); + } + + private function onLayerRemoveAll(event:MapEvent):void + { + unregisterAllMapLayers(); + } + + private function onLayerReorder(event:MapEvent):void + { + for each (var item:Object in this.dataProvider) + { + this.expandItem(item, false); + } + + var layer:Layer = event.layer; + var index:int = event.index; + + if (isGraphicsLayer(layer) || isHiddenLayer(layer) || isLayerExcluded(layer)) + { + return; + } + + var i:int; + var currentTOCIndex:int; + var currentItem:Object; + // remove hidden layes, to get the correct layerIds count + var newLayerIds:Array = getNewLayerIds(map.layerIds); + if (index <= (newLayerIds.length - _tocRoots.length)) // move this item to the bottom of toc + { + // index of item to move + currentTOCIndex = getCurrentTOCIndex(); + // item to move + currentItem = _tocRoots.getItemAt(currentTOCIndex); + + for (i = currentTOCIndex; i < _tocRoots.length; i++) + { + if (i == _tocRoots.length - 1) + { + _tocRoots.setItemAt(currentItem, _tocRoots.length - 1); + } + else + { + _tocRoots.setItemAt(_tocRoots.getItemAt(i + 1), i); + } + } + } + else if ((newLayerIds.length - _tocRoots.length) < index < newLayerIds.length) + { + // index of item to move + currentTOCIndex = getCurrentTOCIndex(); + // item to move + currentItem = _tocRoots.getItemAt(currentTOCIndex); + + var newTOCIndex:Number = newLayerIds.length - index - 1; + if (newTOCIndex < currentTOCIndex) + { + for (i = currentTOCIndex; newTOCIndex <= i; i--) + { + if (i == newTOCIndex) + { + _tocRoots.setItemAt(currentItem, newTOCIndex); + } + else + { + _tocRoots.setItemAt(_tocRoots.getItemAt(i - 1), i); + } + } + } + else + { + + for (i = currentTOCIndex; i <= newTOCIndex; i++) + { + if (i == newTOCIndex) + { + _tocRoots.setItemAt(currentItem, newTOCIndex); + } + else + { + _tocRoots.setItemAt(_tocRoots.getItemAt(i + 1), i); + } + } + } + } + + function getCurrentTOCIndex():int + { + var result:int; + for (i = 0; i < _tocRoots.length; i++) + { + if (_tocRoots.getItemAt(i) is TocMapLayerItem && TocMapLayerItem(_tocRoots.getItemAt(i)).layer === layer) + { + result = i; + break; + } + } + return result; + } + } + + private function getNewLayerIds(layerIds:Array):Array + { + var result:Array = []; + var mapLayers:ArrayCollection = ArrayCollection(map.layers); + for (var i:int = 0; i < layerIds.length; i++) + { + var layer:Layer = mapLayers.getItemAt(i) as Layer + if (isHiddenLayer(layer) || isGraphicsLayer(layer) || islayerExcludedAndNotBaseMap(layer)) + { + continue; + } + result.push(layerIds[i]); + } + return result; + } + + private function isGraphicsLayer(layer:Layer):Boolean + { + return (layer is GraphicsLayer) && !(layer is FeatureLayer); + } + + private function isHiddenLayer(layer:Layer):Boolean + { + return layer.name.indexOf("hiddenLayer_") > -1; + } + + private function isLayerExcluded(layer:Layer):Boolean + { + var exclude:Boolean; + for each (var item:* in excludeLayers) + { + if ((item === layer || item == layer.name) || (item == layer.id)) + { + exclude = true; + break; + } + } + return exclude; + } + + private function islayerExcludedAndNotBaseMap(layer:Layer):Boolean + { + var exclude:Boolean; + for each (var item:* in excludeLayers) + { + if ((item === layer || item == layer.name) || (item == layer.id)) + { + exclude = true; + for each (var item1:* in basemapLayers) + { + if (item1 === item) + { + exclude = false; + break; + } + } + if (!exclude) + { + break; + } + } + } + return exclude; + } + + private function unregisterAllMapLayers():void + { + _tocRoots.removeAll(); + } + + private function unregisterMapLayer(layer:Layer):void + { + for (var i:int = 0; i < _tocRoots.length; i++) + { + var item:Object = _tocRoots[i]; + if (item is TocMapLayerItem && TocMapLayerItem(item).layer === layer) + { + _tocRoots.removeItemAt(i); + break; + } + } + } + + /** + * Registers all existing map layers in the TOC tree. + */ + private function registerAllMapLayers():void + { + unregisterAllMapLayers(); + MapUtil.forEachMapLayer(map, function(layer:Layer):void + { + registerMapLayer(layer); + }); + } + + /** + * Creates a new top-level TOC item for the specified map layer. + */ + private function registerMapLayer(layer:Layer):void + { + if (filterOutLayer(layer)) + { + return; + } + + // Init any layer properties, styles, and effects + if (useLayerFadeEffect) + { + setLayerFadeEffect(layer); + } + + var tocItem:TocMapLayerItem = new TocMapLayerItem(layer, _labelFunction, _isMapServiceOnly); + // need to get the true index of this layer in the map, removing any graphics layers from the equation if necessary as well as any exclude layers + var trueMapLayerIndex:Number = 0; + for each (var mapLayer:Layer in this.map.layers) + { + if (mapLayer == layer) + { + break; + } + + if (!filterOutLayer(mapLayer)) // only increase the index if this layer is in the TOC + { + trueMapLayerIndex++; + } + } + // now add at the correct index + _tocRoots.addItemAt(tocItem, _tocRoots.length - trueMapLayerIndex); + } + + private function setLayerFadeEffect(layer:Layer):void + { + if (useLayerFadeEffect) + { + // Lazy load the effect + if (!_fade) + { + _fade = new Fade(); + _fade.duration = _fadeDuration; + } + layer.setStyle("showEffect", _fade); + layer.setStyle("hideEffect", _fade); + } + else + { + layer.clearStyle("showEffect"); + layer.clearStyle("hideEffect"); + } + } + + private function addLayerFilterListeners(filter:ArrayCollection):void + { + if (filter) + { + filter.addEventListener(CollectionEvent.COLLECTION_CHANGE, onFilterChange, false, 0, true); + } + } + + private function removeLayerFilterListeners(filter:ArrayCollection):void + { + if (filter) + { + filter.removeEventListener(CollectionEvent.COLLECTION_CHANGE, onFilterChange); + } + } + + private function onFilterChange(event:CollectionEvent = null):void + { + var isValidChange:Boolean = false; + + if (event == null) + { + // Called directly from the setters + isValidChange = true; + } + else + { + // Only act on certain kinds of collection changes. + // Specifically, avoid acting on the UPDATE kind. + // It causes unwanted refresh of the TOC model. + switch (event.kind) + { + case CollectionEventKind.ADD: + case CollectionEventKind.REMOVE: + case CollectionEventKind.REPLACE: + case CollectionEventKind.REFRESH: + case CollectionEventKind.RESET: + { + isValidChange = true; + } + } + } + + if (isValidChange) + { + _layerFiltersChanged = true; + invalidateProperties(); + } + } + + public function filterOutLayer(layer:Layer):Boolean + { + var exclude:Boolean = false; + if (excludeGraphicsLayers && isGraphicsLayer(layer)) + { + exclude = true; + } + if (isHiddenLayer(layer)) + { + exclude = true; + } + if (!exclude && excludeLayers) + { + exclude = isLayerExcluded(layer); + } + if (includeLayers) + { + exclude = true; + for each (var item:* in includeLayers) + { + if (item === layer || item == layer.id) + { + exclude = false; + break; + } + } + } + return exclude; + } + + private function normalizeLayerFilter(value:Object):ArrayCollection + { + var filter:ArrayCollection; + if (value is ArrayCollection) + { + filter = value as ArrayCollection; + } + else if (value is Array) + { + filter = new ArrayCollection(value as Array); + } + else if (value is String || value is Layer) + { + // Possibly a String (layer id) or Layer object + filter = new ArrayCollection([ value ]); + } + else + { + // Unsupported value type + filter = null; + } + return filter; + } + + /** + * Double click handler for expanding or collapsing a tree branch. + */ + private function onItemDoubleClick(event:ListEvent):void + { + if (event.itemRenderer && event.itemRenderer.data) + { + var item:Object = event.itemRenderer.data; + expandItem(item, !isItemOpen(item), true, true, event); + } + } + + private function tocItemIcon(item:Object):Class + { + if (item is TocMapLayerItem) + { + return getStyle("mapServiceIcon"); + } + if (item is TocItem) + { + return TocItem(item).isGroupLayer() + ? getStyle("groupLayerIcon") + : getStyle("layerIcon"); + } + return getStyle("layerIcon"); + } +} + +} diff --git a/src/com/esri/viewer/components/toc/controls/CheckBoxIndeterminate.as b/src/com/esri/viewer/components/toc/controls/CheckBoxIndeterminate.as index 0c1e62f..1d2b7e9 100644 --- a/src/com/esri/viewer/components/toc/controls/CheckBoxIndeterminate.as +++ b/src/com/esri/viewer/components/toc/controls/CheckBoxIndeterminate.as @@ -1,72 +1,72 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2010-2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package com.esri.viewer.components.toc.controls -{ - -import flash.events.Event; - -import mx.controls.CheckBox; - -/** - * CheckBox that supports a tri-state check. In addition to selected and - * unselected, the CheckBox can be in an indeterminate state. - * - * @private - */ -public class CheckBoxIndeterminate extends CheckBox -{ - /** - * Creates a new tri-state CheckBox with custom skin. - */ - public function CheckBoxIndeterminate() - { - setStyle("icon", CheckBoxIndeterminateIcon); - setStyle("indeterminate", _indeterminate); - setStyle("layoutDirection", "ltr"); // fix check mark's direction - https://bugs.adobe.com/jira/browse/SDK-25817 - } - - //-------------------------------------------------------------------------- - // Property: indeterminate - //-------------------------------------------------------------------------- - - private var _indeterminate:Boolean = false; - - [Bindable("indeterminateChanged")] - - /** - * Whether this check box is in the indeterminate state. - */ - public function get indeterminate():Boolean - { - return _indeterminate; - } - - /** - * @private - */ - public function set indeterminate(value:Boolean):void - { - if (value != _indeterminate) - { - _indeterminate = value; - setStyle("indeterminate", _indeterminate); - - dispatchEvent(new Event("indeterminateChanged")); - } - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2010-2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package com.esri.viewer.components.toc.controls +{ + +import flash.events.Event; + +import mx.controls.CheckBox; + +/** + * CheckBox that supports a tri-state check. In addition to selected and + * unselected, the CheckBox can be in an indeterminate state. + * + * @private + */ +public class CheckBoxIndeterminate extends CheckBox +{ + /** + * Creates a new tri-state CheckBox with custom skin. + */ + public function CheckBoxIndeterminate() + { + setStyle("icon", CheckBoxIndeterminateIcon); + setStyle("indeterminate", _indeterminate); + setStyle("layoutDirection", "ltr"); // fix check mark's direction - https://bugs.adobe.com/jira/browse/SDK-25817 + } + + //-------------------------------------------------------------------------- + // Property: indeterminate + //-------------------------------------------------------------------------- + + private var _indeterminate:Boolean = false; + + [Bindable("indeterminateChanged")] + + /** + * Whether this check box is in the indeterminate state. + */ + public function get indeterminate():Boolean + { + return _indeterminate; + } + + /** + * @private + */ + public function set indeterminate(value:Boolean):void + { + if (value != _indeterminate) + { + _indeterminate = value; + setStyle("indeterminate", _indeterminate); + + dispatchEvent(new Event("indeterminateChanged")); + } + } +} + +} diff --git a/src/com/esri/viewer/components/toc/controls/CheckBoxIndeterminateIcon.as b/src/com/esri/viewer/components/toc/controls/CheckBoxIndeterminateIcon.as index d401f16..54ccd2a 100644 --- a/src/com/esri/viewer/components/toc/controls/CheckBoxIndeterminateIcon.as +++ b/src/com/esri/viewer/components/toc/controls/CheckBoxIndeterminateIcon.as @@ -1,53 +1,53 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2010-2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package com.esri.viewer.components.toc.controls -{ - -import mx.skins.halo.CheckBoxIcon; - -/** - * CheckBox skin that supports a tri-state check. In addition to selected and - * unselected, the CheckBox can be in an indeterminate state. - * - * @private - */ -public class CheckBoxIndeterminateIcon extends CheckBoxIcon -{ - /** - * @private - */ - override protected function updateDisplayList(w:Number, h:Number):void - { - super.updateDisplayList(w, h); - - var indet:Boolean = getStyle("indeterminate"); - - if (indet) - { - var cornerRadius:Number = 2; - - var boxFillColors:Array = [ 0xAAAACC, 0x666666 ]; - var boxFillAlphas:Array = [ 1.0, 1.0 ]; - - drawRoundRect( - 3, 3, w - 6, h - 6, cornerRadius, - boxFillColors, boxFillAlphas, - verticalGradientMatrix(1, 1, w - 2, h - 2)); - } - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2010-2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package com.esri.viewer.components.toc.controls +{ + +import mx.skins.halo.CheckBoxIcon; + +/** + * CheckBox skin that supports a tri-state check. In addition to selected and + * unselected, the CheckBox can be in an indeterminate state. + * + * @private + */ +public class CheckBoxIndeterminateIcon extends CheckBoxIcon +{ + /** + * @private + */ + override protected function updateDisplayList(w:Number, h:Number):void + { + super.updateDisplayList(w, h); + + var indet:Boolean = getStyle("indeterminate"); + + if (indet) + { + var cornerRadius:Number = 2; + + var boxFillColors:Array = [ 0xAAAACC, 0x666666 ]; + var boxFillAlphas:Array = [ 1.0, 1.0 ]; + + drawRoundRect( + 3, 3, w - 6, h - 6, cornerRadius, + boxFillColors, boxFillAlphas, + verticalGradientMatrix(1, 1, w - 2, h - 2)); + } + } +} + +} diff --git a/src/com/esri/viewer/components/toc/tocClasses/TocItem.as b/src/com/esri/viewer/components/toc/tocClasses/TocItem.as index 9b10703..d8a0c37 100644 --- a/src/com/esri/viewer/components/toc/tocClasses/TocItem.as +++ b/src/com/esri/viewer/components/toc/tocClasses/TocItem.as @@ -1,304 +1,304 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2010-2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package com.esri.viewer.components.toc.tocClasses -{ - -import flash.events.EventDispatcher; - -import mx.collections.ArrayCollection; -import mx.events.PropertyChangeEvent; -import mx.utils.ObjectUtil; - -/** - * The base TOC item. - * - * @private - */ -public class TocItem extends EventDispatcher -{ - //-------------------------------------------------------------------------- - // - // Constructor - // - //-------------------------------------------------------------------------- - - public function TocItem(parentItem:TocItem = null) - { - _parent = parentItem; - } - - //-------------------------------------------------------------------------- - // - // Properties - // - //-------------------------------------------------------------------------- - - //-------------------------------------------------------------------------- - // parent - //-------------------------------------------------------------------------- - - private var _parent:TocItem; - - /** - * The parent TOC item of this item. - */ - public function get parent():TocItem - { - return _parent; - } - - //-------------------------------------------------------------------------- - // children - //-------------------------------------------------------------------------- - - [Bindable] - /** - * The child items of this TOC item. - */ - public var children:ArrayCollection; // of TocItem - - /** - * Adds a child TOC item to this item. - */ - internal function addChild(item:TocItem):void - { - if (!children) - { - children = new ArrayCollection(); - } - children.addItem(item); - } - - //-------------------------------------------------------------------------- - // label - //-------------------------------------------------------------------------- - - internal static const DEFAULT_LABEL:String = "(?)"; - - private var _label:String = DEFAULT_LABEL; - - [Bindable("propertyChange")] - /** - * The text label for the item renderer. - */ - public function get label():String - { - return _label; - } - - /** - * @private - */ - public function set label(value:String):void - { - var oldValue:Object = _label; - _label = (value ? value : DEFAULT_LABEL); - - // Dispatch a property change event to notify the item renderer - dispatchEvent(PropertyChangeEvent.createUpdateEvent(this, "label", oldValue, _label)); - } - - //-------------------------------------------------------------------------- - // visible - //-------------------------------------------------------------------------- - - internal static const DEFAULT_VISIBLE:Boolean = true; - - private var _visible:Boolean = DEFAULT_VISIBLE; - - [Bindable("propertyChange")] - /** - * Whether the map layer referred to by this TOC item is visible or not. - */ - public function get visible():Boolean - { - return _visible; - } - - /** - * @private - */ - public function set visible(value:Boolean):void - { - setVisible(value, true); - } - - internal static const DEFAULT_IS_IN_SCALE_RANGE:Boolean = true; - - private var _isInScaleRange:Boolean = DEFAULT_IS_IN_SCALE_RANGE; - - [Bindable("propertyChange")] - /** - * Whether the map layer referred to by this TOC item is enabled or not. - */ - public function get isInScaleRange():Boolean - { - return _isInScaleRange; - } - - /** - * @private - */ - public function set isInScaleRange(value:Boolean):void - { - setIsInScaleRange(value, true); - } - - /** - * Allows subclasses to change the visible state without causing a layer refresh. - */ - internal function setVisible(value:Boolean, layerRefresh:Boolean = true):void - { - if (value != _visible) - { - var oldValue:Object = _visible; - _visible = value; - - updateIndeterminateState(); - if (layerRefresh) - { - refreshLayer(); - } - - // Dispatch a property change event to notify the item renderer - dispatchEvent(PropertyChangeEvent.createUpdateEvent(this, "visible", oldValue, value)); - } - } - - /** - * Allows subclasses to change the isInScaleRange state without causing a layer refresh. - */ - internal function setIsInScaleRange(value:Boolean, layerRefresh:Boolean = true):void - { - if (value != _isInScaleRange) - { - var oldValue:Object = _isInScaleRange; - _isInScaleRange = value; - - if (layerRefresh) - { - refreshLayer(); - } - - // Dispatch a property change event to notify the item renderer - dispatchEvent(PropertyChangeEvent.createUpdateEvent(this, "isInScaleRange", oldValue, value)); - } - } - - private function setVisibleDirect(value:Boolean):void - { - if (value != _visible) - { - var oldValue:Object = _visible; - _visible = value; - - // Dispatch a property change event to notify the item renderer - dispatchEvent(PropertyChangeEvent.createUpdateEvent(this, "visible", oldValue, value)); - } - } - - //-------------------------------------------------------------------------- - // indeterminate - //-------------------------------------------------------------------------- - - internal static const DEFAULT_INDETERMINATE:Boolean = false; - - private var _indeterminate:Boolean = DEFAULT_INDETERMINATE; - - [Bindable("propertyChange")] - /** - * Whether the visibility of this TOC item is in a mixed state, - * based on child item visibility or other criteria. - */ - public function get indeterminate():Boolean - { - return _indeterminate; - } - - /** - * @private - */ - public function set indeterminate(value:Boolean):void - { - if (value != _indeterminate) - { - var oldValue:Object = _indeterminate; - _indeterminate = value; - - // Dispatch a property change event to notify the item renderer - dispatchEvent(PropertyChangeEvent.createUpdateEvent(this, "indeterminate", oldValue, value)); - } - } - - //-------------------------------------------------------------------------- - // - // Overriden Methods - // - //-------------------------------------------------------------------------- - - override public function toString():String - { - return ObjectUtil.toString(this); - } - - //-------------------------------------------------------------------------- - // - // Methods - // - //-------------------------------------------------------------------------- - - /** - * Whether this TOC item is at the root level. - */ - public function isTopLevel():Boolean - { - return _parent == null; - } - - /** - * Whether this TOC item contains any child items. - */ - public function isGroupLayer():Boolean - { - return children && children.length > 0; - } - - /** - * Updates the indeterminate visibility state of this TOC item. - */ - internal function updateIndeterminateState(calledFromChild:Boolean = false):void - { - // Recurse up the tree - if (parent) - { - parent.updateIndeterminateState(true); - } - } - - /** - * Invalidates any map layer that is associated with this TOC item. - */ - internal function refreshLayer():void - { - // Recurse up the tree - if (parent) - { - parent.refreshLayer(); - } - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2010-2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package com.esri.viewer.components.toc.tocClasses +{ + +import flash.events.EventDispatcher; + +import mx.collections.ArrayCollection; +import mx.events.PropertyChangeEvent; +import mx.utils.ObjectUtil; + +/** + * The base TOC item. + * + * @private + */ +public class TocItem extends EventDispatcher +{ + //-------------------------------------------------------------------------- + // + // Constructor + // + //-------------------------------------------------------------------------- + + public function TocItem(parentItem:TocItem = null) + { + _parent = parentItem; + } + + //-------------------------------------------------------------------------- + // + // Properties + // + //-------------------------------------------------------------------------- + + //-------------------------------------------------------------------------- + // parent + //-------------------------------------------------------------------------- + + private var _parent:TocItem; + + /** + * The parent TOC item of this item. + */ + public function get parent():TocItem + { + return _parent; + } + + //-------------------------------------------------------------------------- + // children + //-------------------------------------------------------------------------- + + [Bindable] + /** + * The child items of this TOC item. + */ + public var children:ArrayCollection; // of TocItem + + /** + * Adds a child TOC item to this item. + */ + internal function addChild(item:TocItem):void + { + if (!children) + { + children = new ArrayCollection(); + } + children.addItem(item); + } + + //-------------------------------------------------------------------------- + // label + //-------------------------------------------------------------------------- + + internal static const DEFAULT_LABEL:String = "(?)"; + + private var _label:String = DEFAULT_LABEL; + + [Bindable("propertyChange")] + /** + * The text label for the item renderer. + */ + public function get label():String + { + return _label; + } + + /** + * @private + */ + public function set label(value:String):void + { + var oldValue:Object = _label; + _label = (value ? value : DEFAULT_LABEL); + + // Dispatch a property change event to notify the item renderer + dispatchEvent(PropertyChangeEvent.createUpdateEvent(this, "label", oldValue, _label)); + } + + //-------------------------------------------------------------------------- + // visible + //-------------------------------------------------------------------------- + + internal static const DEFAULT_VISIBLE:Boolean = true; + + private var _visible:Boolean = DEFAULT_VISIBLE; + + [Bindable("propertyChange")] + /** + * Whether the map layer referred to by this TOC item is visible or not. + */ + public function get visible():Boolean + { + return _visible; + } + + /** + * @private + */ + public function set visible(value:Boolean):void + { + setVisible(value, true); + } + + internal static const DEFAULT_IS_IN_SCALE_RANGE:Boolean = true; + + private var _isInScaleRange:Boolean = DEFAULT_IS_IN_SCALE_RANGE; + + [Bindable("propertyChange")] + /** + * Whether the map layer referred to by this TOC item is enabled or not. + */ + public function get isInScaleRange():Boolean + { + return _isInScaleRange; + } + + /** + * @private + */ + public function set isInScaleRange(value:Boolean):void + { + setIsInScaleRange(value, true); + } + + /** + * Allows subclasses to change the visible state without causing a layer refresh. + */ + internal function setVisible(value:Boolean, layerRefresh:Boolean = true):void + { + if (value != _visible) + { + var oldValue:Object = _visible; + _visible = value; + + updateIndeterminateState(); + if (layerRefresh) + { + refreshLayer(); + } + + // Dispatch a property change event to notify the item renderer + dispatchEvent(PropertyChangeEvent.createUpdateEvent(this, "visible", oldValue, value)); + } + } + + /** + * Allows subclasses to change the isInScaleRange state without causing a layer refresh. + */ + internal function setIsInScaleRange(value:Boolean, layerRefresh:Boolean = true):void + { + if (value != _isInScaleRange) + { + var oldValue:Object = _isInScaleRange; + _isInScaleRange = value; + + if (layerRefresh) + { + refreshLayer(); + } + + // Dispatch a property change event to notify the item renderer + dispatchEvent(PropertyChangeEvent.createUpdateEvent(this, "isInScaleRange", oldValue, value)); + } + } + + private function setVisibleDirect(value:Boolean):void + { + if (value != _visible) + { + var oldValue:Object = _visible; + _visible = value; + + // Dispatch a property change event to notify the item renderer + dispatchEvent(PropertyChangeEvent.createUpdateEvent(this, "visible", oldValue, value)); + } + } + + //-------------------------------------------------------------------------- + // indeterminate + //-------------------------------------------------------------------------- + + internal static const DEFAULT_INDETERMINATE:Boolean = false; + + private var _indeterminate:Boolean = DEFAULT_INDETERMINATE; + + [Bindable("propertyChange")] + /** + * Whether the visibility of this TOC item is in a mixed state, + * based on child item visibility or other criteria. + */ + public function get indeterminate():Boolean + { + return _indeterminate; + } + + /** + * @private + */ + public function set indeterminate(value:Boolean):void + { + if (value != _indeterminate) + { + var oldValue:Object = _indeterminate; + _indeterminate = value; + + // Dispatch a property change event to notify the item renderer + dispatchEvent(PropertyChangeEvent.createUpdateEvent(this, "indeterminate", oldValue, value)); + } + } + + //-------------------------------------------------------------------------- + // + // Overriden Methods + // + //-------------------------------------------------------------------------- + + override public function toString():String + { + return ObjectUtil.toString(this); + } + + //-------------------------------------------------------------------------- + // + // Methods + // + //-------------------------------------------------------------------------- + + /** + * Whether this TOC item is at the root level. + */ + public function isTopLevel():Boolean + { + return _parent == null; + } + + /** + * Whether this TOC item contains any child items. + */ + public function isGroupLayer():Boolean + { + return children && children.length > 0; + } + + /** + * Updates the indeterminate visibility state of this TOC item. + */ + internal function updateIndeterminateState(calledFromChild:Boolean = false):void + { + // Recurse up the tree + if (parent) + { + parent.updateIndeterminateState(true); + } + } + + /** + * Invalidates any map layer that is associated with this TOC item. + */ + internal function refreshLayer():void + { + // Recurse up the tree + if (parent) + { + parent.refreshLayer(); + } + } +} + +} diff --git a/src/com/esri/viewer/components/toc/tocClasses/TocItemRenderer.as b/src/com/esri/viewer/components/toc/tocClasses/TocItemRenderer.as index 119cb2c..2505bf5 100644 --- a/src/com/esri/viewer/components/toc/tocClasses/TocItemRenderer.as +++ b/src/com/esri/viewer/components/toc/tocClasses/TocItemRenderer.as @@ -1,351 +1,351 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2010-2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package com.esri.viewer.components.toc.tocClasses -{ - -import com.esri.ags.layers.Layer; -import com.esri.ags.layers.TiledMapServiceLayer; -import com.esri.viewer.AppEvent; -import com.esri.viewer.components.toc.TOC; -import com.esri.viewer.components.toc.controls.CheckBoxIndeterminate; - -import flash.events.MouseEvent; -import flash.geom.Point; - -import mx.controls.Image; -import mx.controls.treeClasses.TreeItemRenderer; -import mx.controls.treeClasses.TreeListData; -import mx.core.FlexGlobals; - -/** - * A custom tree item renderer for a map Table of Contents. - * - * @private - */ -public class TocItemRenderer extends TreeItemRenderer -{ - - //-------------------------------------------------------------------------- - // - // Variables - // - //-------------------------------------------------------------------------- - - // Renderer UI components - private var _checkbox:CheckBoxIndeterminate; - - // UI component spacing - private static const PRE_CHECKBOX_GAP:Number = 5; - - private static const POST_CHECKBOX_GAP:Number = 4; - - private var _tocLayerMenu:TocLayerMenu; - - [Embed(source="assets/images/Context_menu11.png")] - [Bindable] - public var contextCls:Class; - - private var _layerMenuImage:Image; - - //-------------------------------------------------------------------------- - // - // Constructor - // - //-------------------------------------------------------------------------- - - public function TocItemRenderer() - { - super(); - - addEventListener(MouseEvent.CLICK, itemClickHandler); - } - - //-------------------------------------------------------------------------- - // - // Overriden Methods - // - //-------------------------------------------------------------------------- - - /** - * @private - */ - override protected function createChildren():void - { - super.createChildren(); - - // Create a checkbox child component for toggling layer visibility. - if (!_checkbox) - { - _checkbox = new CheckBoxIndeterminate(); - _checkbox.addEventListener(MouseEvent.CLICK, onCheckBoxClick); - _checkbox.addEventListener(MouseEvent.DOUBLE_CLICK, onCheckBoxDoubleClick); - _checkbox.addEventListener(MouseEvent.MOUSE_DOWN, onCheckBoxMouseDown); - _checkbox.addEventListener(MouseEvent.MOUSE_UP, onCheckBoxMouseUp); - addChild(_checkbox); - } - - if (!_layerMenuImage) - { - _layerMenuImage = new Image(); - _layerMenuImage.source = contextCls; - _layerMenuImage.height = 11; - _layerMenuImage.width = 11; - _layerMenuImage.setStyle("verticalAlign", "middle"); - _layerMenuImage.buttonMode = true; - addChild(_layerMenuImage); - this._layerMenuImage.addEventListener(MouseEvent.CLICK, onLayerMenuImageClick); - this._layerMenuImage.addEventListener(MouseEvent.DOUBLE_CLICK, onLayerMenuImageDoubleClick); - } - } - - /** - * @private - */ - override protected function commitProperties():void - { - super.commitProperties(); - - if (data is TocItem) - { - var item:TocItem = TocItem(data); - - // Set the checkbox state - _checkbox.indeterminate = item.indeterminate; - // The indeterminate state has visual priority over the selected state - _checkbox.selected = item.visible && !item.indeterminate; - - // Hide the checkbox for child items of tiled map services - var checkboxVisible:Boolean = true; - if (isTiledLayerChild(item)) - { - checkboxVisible = false; - } - _checkbox.visible = checkboxVisible; - - // hide the option button if this is not a layer - if (!isLayerItem(item)) - { - _layerMenuImage.visible = false; - } - else - { - _layerMenuImage.visible = true; - } - - if (item.isTopLevel()) - { - // Apply a bold label style to root nodes - setStyle("fontWeight", "bold"); - } - else - { - setStyle("fontWeight", "normal"); - } - if (item.isInScaleRange) - { - alpha = 1; - setStyle("fontStyle", "normal"); - } - else - { - alpha = 0.5; - setStyle("fontStyle", "italic"); - } - } - } - - /** - * @private - */ - override protected function measure():void - { - super.measure(); - - // Add space for the checkbox and gaps - if (isNaN(explicitWidth) && !isNaN(measuredWidth)) - { - var w:Number = measuredWidth; - w += _checkbox.measuredWidth; - w += _layerMenuImage.measuredWidth; - w += 2 * (PRE_CHECKBOX_GAP + POST_CHECKBOX_GAP); // once for the checkbox and once for the option image - measuredWidth = w; - } - } - - /** - * @private - */ - override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void - { - super.updateDisplayList(unscaledWidth, unscaledHeight); - - var startx:Number = data ? TreeListData(listData).indent : 0; - if (icon) - { - startx = icon.x; - } - else if (disclosureIcon) - { - startx = disclosureIcon.x + disclosureIcon.width; - } - startx += PRE_CHECKBOX_GAP; - - // Position the checkbox between the disclosure icon and the item icon - _checkbox.x = startx; - _checkbox.setActualSize(_checkbox.measuredWidth, _checkbox.measuredHeight); - _checkbox.y = (unscaledHeight - _checkbox.height) / 2; - startx = _checkbox.x + _checkbox.width + POST_CHECKBOX_GAP; - - - if (icon) - { - icon.x = startx; - startx = icon.x + icon.width; - } - - label.x = startx; - var layerMenuImageSpace:Number = POST_CHECKBOX_GAP + _layerMenuImage.width + PRE_CHECKBOX_GAP; - - label.setActualSize(unscaledWidth - startx - layerMenuImageSpace, measuredHeight); - - _layerMenuImage.x = startx + label.width + PRE_CHECKBOX_GAP; - _layerMenuImage.y = (unscaledHeight - _layerMenuImage.height) / 2; - } - - //-------------------------------------------------------------------------- - // - // Methods - // - //-------------------------------------------------------------------------- - - private function onRemovalFromStage(event:AppEvent):void - { - AppEvent.removeListener(AppEvent.TOC_HIDDEN, onRemovalFromStage); - if (_tocLayerMenu) - { - _tocLayerMenu.remove(); - _tocLayerMenu = null; - } - } - - private function onLayerMenuImageClick(event:MouseEvent):void - { - event.stopPropagation(); - - // need to show/hide pop-up with information. - AppEvent.removeListener(AppEvent.TOC_HIDDEN, onRemovalFromStage); - - if (_tocLayerMenu && _tocLayerMenu.isPopUp) - { - _tocLayerMenu.remove(); - _tocLayerMenu = null; - } - else - { - // let any other popups know a popup is about to be created and opened - AppEvent.dispatch(AppEvent.LAUNCHING_TOC_LAYER_MENU); - _tocLayerMenu = new TocLayerMenu(); - var originPoint:Point = new Point(this.x + this.width, this.label.y); - if (FlexGlobals.topLevelApplication.layoutDirection != "rtl") // fix for RTL - { - originPoint.x -= _tocLayerMenu.width; - } - var globalPoint:Point = localToGlobal(originPoint); - _tocLayerMenu.popUpForItem(this.parent.parent, data, TOC(this.parent.parent).map, globalPoint.x, globalPoint.y + this.height); - - AppEvent.addListener(AppEvent.TOC_HIDDEN, onRemovalFromStage); - } - } - - private function onLayerMenuImageDoubleClick(event:MouseEvent):void - { - event.stopPropagation(); - } - - /** - * Whether the specified TOC item is a child of a tiled map service layer. - */ - private function isTiledLayerChild(item:TocItem):Boolean - { - while (item) - { - item = item.parent; - if (item is TocMapLayerItem) - { - if (TocMapLayerItem(item).layer is TiledMapServiceLayer) - { - return true; - } - } - } - return false; - } - - /** - * Whether the specified TOC item is a child of a map service layer. - */ - private function isLayerItem(item:TocItem):Boolean - { - if (item) - { - if (item is TocMapLayerItem) - { - if (TocMapLayerItem(item).layer is Layer) - { - return true; - } - } - } - return false; - } - - private function itemClickHandler(event:MouseEvent):void - { - AppEvent.dispatch(AppEvent.TOC_HIDDEN); // always hide the layer options popup - } - - /** - * Updates the visible property of the underlying TOC item. - */ - private function onCheckBoxClick(event:MouseEvent):void - { - event.stopPropagation(); - - if (data is TocItem) - { - var item:TocItem = TocItem(data); - item.visible = _checkbox.selected; - } - } - - private function onCheckBoxDoubleClick(event:MouseEvent):void - { - event.stopPropagation(); - } - - private function onCheckBoxMouseDown(event:MouseEvent):void - { - event.stopPropagation(); - } - - private function onCheckBoxMouseUp(event:MouseEvent):void - { - event.stopPropagation(); - AppEvent.dispatch(AppEvent.TOC_HIDDEN); // always hide the layer options popup - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2010-2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package com.esri.viewer.components.toc.tocClasses +{ + +import com.esri.ags.layers.Layer; +import com.esri.ags.layers.TiledMapServiceLayer; +import com.esri.viewer.AppEvent; +import com.esri.viewer.components.toc.TOC; +import com.esri.viewer.components.toc.controls.CheckBoxIndeterminate; + +import flash.events.MouseEvent; +import flash.geom.Point; + +import mx.controls.Image; +import mx.controls.treeClasses.TreeItemRenderer; +import mx.controls.treeClasses.TreeListData; +import mx.core.FlexGlobals; + +/** + * A custom tree item renderer for a map Table of Contents. + * + * @private + */ +public class TocItemRenderer extends TreeItemRenderer +{ + + //-------------------------------------------------------------------------- + // + // Variables + // + //-------------------------------------------------------------------------- + + // Renderer UI components + private var _checkbox:CheckBoxIndeterminate; + + // UI component spacing + private static const PRE_CHECKBOX_GAP:Number = 5; + + private static const POST_CHECKBOX_GAP:Number = 4; + + private var _tocLayerMenu:TocLayerMenu; + + [Embed(source="assets/images/Context_menu11.png")] + [Bindable] + public var contextCls:Class; + + private var _layerMenuImage:Image; + + //-------------------------------------------------------------------------- + // + // Constructor + // + //-------------------------------------------------------------------------- + + public function TocItemRenderer() + { + super(); + + addEventListener(MouseEvent.CLICK, itemClickHandler); + } + + //-------------------------------------------------------------------------- + // + // Overriden Methods + // + //-------------------------------------------------------------------------- + + /** + * @private + */ + override protected function createChildren():void + { + super.createChildren(); + + // Create a checkbox child component for toggling layer visibility. + if (!_checkbox) + { + _checkbox = new CheckBoxIndeterminate(); + _checkbox.addEventListener(MouseEvent.CLICK, onCheckBoxClick); + _checkbox.addEventListener(MouseEvent.DOUBLE_CLICK, onCheckBoxDoubleClick); + _checkbox.addEventListener(MouseEvent.MOUSE_DOWN, onCheckBoxMouseDown); + _checkbox.addEventListener(MouseEvent.MOUSE_UP, onCheckBoxMouseUp); + addChild(_checkbox); + } + + if (!_layerMenuImage) + { + _layerMenuImage = new Image(); + _layerMenuImage.source = contextCls; + _layerMenuImage.height = 11; + _layerMenuImage.width = 11; + _layerMenuImage.setStyle("verticalAlign", "middle"); + _layerMenuImage.buttonMode = true; + addChild(_layerMenuImage); + this._layerMenuImage.addEventListener(MouseEvent.CLICK, onLayerMenuImageClick); + this._layerMenuImage.addEventListener(MouseEvent.DOUBLE_CLICK, onLayerMenuImageDoubleClick); + } + } + + /** + * @private + */ + override protected function commitProperties():void + { + super.commitProperties(); + + if (data is TocItem) + { + var item:TocItem = TocItem(data); + + // Set the checkbox state + _checkbox.indeterminate = item.indeterminate; + // The indeterminate state has visual priority over the selected state + _checkbox.selected = item.visible && !item.indeterminate; + + // Hide the checkbox for child items of tiled map services + var checkboxVisible:Boolean = true; + if (isTiledLayerChild(item)) + { + checkboxVisible = false; + } + _checkbox.visible = checkboxVisible; + + // hide the option button if this is not a layer + if (!isLayerItem(item)) + { + _layerMenuImage.visible = false; + } + else + { + _layerMenuImage.visible = true; + } + + if (item.isTopLevel()) + { + // Apply a bold label style to root nodes + setStyle("fontWeight", "bold"); + } + else + { + setStyle("fontWeight", "normal"); + } + if (item.isInScaleRange) + { + alpha = 1; + setStyle("fontStyle", "normal"); + } + else + { + alpha = 0.5; + setStyle("fontStyle", "italic"); + } + } + } + + /** + * @private + */ + override protected function measure():void + { + super.measure(); + + // Add space for the checkbox and gaps + if (isNaN(explicitWidth) && !isNaN(measuredWidth)) + { + var w:Number = measuredWidth; + w += _checkbox.measuredWidth; + w += _layerMenuImage.measuredWidth; + w += 2 * (PRE_CHECKBOX_GAP + POST_CHECKBOX_GAP); // once for the checkbox and once for the option image + measuredWidth = w; + } + } + + /** + * @private + */ + override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void + { + super.updateDisplayList(unscaledWidth, unscaledHeight); + + var startx:Number = data ? TreeListData(listData).indent : 0; + if (icon) + { + startx = icon.x; + } + else if (disclosureIcon) + { + startx = disclosureIcon.x + disclosureIcon.width; + } + startx += PRE_CHECKBOX_GAP; + + // Position the checkbox between the disclosure icon and the item icon + _checkbox.x = startx; + _checkbox.setActualSize(_checkbox.measuredWidth, _checkbox.measuredHeight); + _checkbox.y = (unscaledHeight - _checkbox.height) / 2; + startx = _checkbox.x + _checkbox.width + POST_CHECKBOX_GAP; + + + if (icon) + { + icon.x = startx; + startx = icon.x + icon.width; + } + + label.x = startx; + var layerMenuImageSpace:Number = POST_CHECKBOX_GAP + _layerMenuImage.width + PRE_CHECKBOX_GAP; + + label.setActualSize(unscaledWidth - startx - layerMenuImageSpace, measuredHeight); + + _layerMenuImage.x = startx + label.width + PRE_CHECKBOX_GAP; + _layerMenuImage.y = (unscaledHeight - _layerMenuImage.height) / 2; + } + + //-------------------------------------------------------------------------- + // + // Methods + // + //-------------------------------------------------------------------------- + + private function onRemovalFromStage(event:AppEvent):void + { + AppEvent.removeListener(AppEvent.TOC_HIDDEN, onRemovalFromStage); + if (_tocLayerMenu) + { + _tocLayerMenu.remove(); + _tocLayerMenu = null; + } + } + + private function onLayerMenuImageClick(event:MouseEvent):void + { + event.stopPropagation(); + + // need to show/hide pop-up with information. + AppEvent.removeListener(AppEvent.TOC_HIDDEN, onRemovalFromStage); + + if (_tocLayerMenu && _tocLayerMenu.isPopUp) + { + _tocLayerMenu.remove(); + _tocLayerMenu = null; + } + else + { + // let any other popups know a popup is about to be created and opened + AppEvent.dispatch(AppEvent.LAUNCHING_TOC_LAYER_MENU); + _tocLayerMenu = new TocLayerMenu(); + var originPoint:Point = new Point(this.x + this.width, this.label.y); + if (FlexGlobals.topLevelApplication.layoutDirection != "rtl") // fix for RTL + { + originPoint.x -= _tocLayerMenu.width; + } + var globalPoint:Point = localToGlobal(originPoint); + _tocLayerMenu.popUpForItem(this.parent.parent, data, TOC(this.parent.parent).map, globalPoint.x, globalPoint.y + this.height); + + AppEvent.addListener(AppEvent.TOC_HIDDEN, onRemovalFromStage); + } + } + + private function onLayerMenuImageDoubleClick(event:MouseEvent):void + { + event.stopPropagation(); + } + + /** + * Whether the specified TOC item is a child of a tiled map service layer. + */ + private function isTiledLayerChild(item:TocItem):Boolean + { + while (item) + { + item = item.parent; + if (item is TocMapLayerItem) + { + if (TocMapLayerItem(item).layer is TiledMapServiceLayer) + { + return true; + } + } + } + return false; + } + + /** + * Whether the specified TOC item is a child of a map service layer. + */ + private function isLayerItem(item:TocItem):Boolean + { + if (item) + { + if (item is TocMapLayerItem) + { + if (TocMapLayerItem(item).layer is Layer) + { + return true; + } + } + } + return false; + } + + private function itemClickHandler(event:MouseEvent):void + { + AppEvent.dispatch(AppEvent.TOC_HIDDEN); // always hide the layer options popup + } + + /** + * Updates the visible property of the underlying TOC item. + */ + private function onCheckBoxClick(event:MouseEvent):void + { + event.stopPropagation(); + + if (data is TocItem) + { + var item:TocItem = TocItem(data); + item.visible = _checkbox.selected; + } + } + + private function onCheckBoxDoubleClick(event:MouseEvent):void + { + event.stopPropagation(); + } + + private function onCheckBoxMouseDown(event:MouseEvent):void + { + event.stopPropagation(); + } + + private function onCheckBoxMouseUp(event:MouseEvent):void + { + event.stopPropagation(); + AppEvent.dispatch(AppEvent.TOC_HIDDEN); // always hide the layer options popup + } +} + +} diff --git a/src/com/esri/viewer/components/toc/tocClasses/TocKmlFolderItem.as b/src/com/esri/viewer/components/toc/tocClasses/TocKmlFolderItem.as index cd9b5af..f76f77e 100644 --- a/src/com/esri/viewer/components/toc/tocClasses/TocKmlFolderItem.as +++ b/src/com/esri/viewer/components/toc/tocClasses/TocKmlFolderItem.as @@ -1,96 +1,96 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package com.esri.viewer.components.toc.tocClasses -{ - -import com.esri.ags.layers.KMLLayer; -import com.esri.ags.layers.supportClasses.KMLFolder; - -/** - * A TOC item representing folder of a KML Layer. - * - * @private - */ -public class TocKmlFolderItem extends TocItem -{ - public function TocKmlFolderItem(parentItem:TocItem, folder:KMLFolder, layer:KMLLayer) - { - super(parentItem); - - _folder = folder; - _layer = layer; - label = folder.name; - - setVisible(folder.visible, false); - } - - //-------------------------------------------------------------------------- - // Property: folder - //-------------------------------------------------------------------------- - - private var _folder:KMLFolder; - - /** - * The KML Folder that represents this TOC item. - */ - public function get folder():KMLFolder - { - return _folder; - } - - //-------------------------------------------------------------------------- - // Property: layer - //-------------------------------------------------------------------------- - - private var _layer:KMLLayer; - - /** - * The KML layer associated with this TOC item. - */ - public function get layer():KMLLayer - { - return _layer; - } - - //-------------------------------------------------------------------------- - // - // Methods - // - //-------------------------------------------------------------------------- - - /** - * @private - */ - override internal function setVisible(value:Boolean, layerRefresh:Boolean = true):void - { - // Set the visible state of this item, but defer the folder refresh on the layer - super.setVisible(value, false); - - if (layerRefresh) - { - if (layer.visible) - { - layer.setFolderVisibility(folder, value); // refresh the folder in the layer - } - else - { - layer.setFolderVisibility(folder, false); - } - } - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package com.esri.viewer.components.toc.tocClasses +{ + +import com.esri.ags.layers.KMLLayer; +import com.esri.ags.layers.supportClasses.KMLFolder; + +/** + * A TOC item representing folder of a KML Layer. + * + * @private + */ +public class TocKmlFolderItem extends TocItem +{ + public function TocKmlFolderItem(parentItem:TocItem, folder:KMLFolder, layer:KMLLayer) + { + super(parentItem); + + _folder = folder; + _layer = layer; + label = folder.name; + + setVisible(folder.visible, false); + } + + //-------------------------------------------------------------------------- + // Property: folder + //-------------------------------------------------------------------------- + + private var _folder:KMLFolder; + + /** + * The KML Folder that represents this TOC item. + */ + public function get folder():KMLFolder + { + return _folder; + } + + //-------------------------------------------------------------------------- + // Property: layer + //-------------------------------------------------------------------------- + + private var _layer:KMLLayer; + + /** + * The KML layer associated with this TOC item. + */ + public function get layer():KMLLayer + { + return _layer; + } + + //-------------------------------------------------------------------------- + // + // Methods + // + //-------------------------------------------------------------------------- + + /** + * @private + */ + override internal function setVisible(value:Boolean, layerRefresh:Boolean = true):void + { + // Set the visible state of this item, but defer the folder refresh on the layer + super.setVisible(value, false); + + if (layerRefresh) + { + if (layer.visible) + { + layer.setFolderVisibility(folder, value); // refresh the folder in the layer + } + else + { + layer.setFolderVisibility(folder, false); + } + } + } +} + +} diff --git a/src/com/esri/viewer/components/toc/tocClasses/TocKmlNetworkLinkItem.as b/src/com/esri/viewer/components/toc/tocClasses/TocKmlNetworkLinkItem.as index 0450a79..3688482 100644 --- a/src/com/esri/viewer/components/toc/tocClasses/TocKmlNetworkLinkItem.as +++ b/src/com/esri/viewer/components/toc/tocClasses/TocKmlNetworkLinkItem.as @@ -1,150 +1,150 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package com.esri.viewer.components.toc.tocClasses -{ - -import com.esri.ags.layers.KMLLayer; -import com.esri.ags.layers.supportClasses.KMLFeatureInfo; -import com.esri.ags.layers.supportClasses.KMLFolder; - -/** - * A TOC item representing a NetworkLink within a KML Layer. - * - * @private - */ -public class TocKmlNetworkLinkItem extends TocItem -{ - public function TocKmlNetworkLinkItem(parentItem:TocItem, networkLink:KMLLayer, layer:KMLLayer) - { - super(parentItem); - - _networkLink = networkLink; - _layer = layer; - label = networkLink.name; - - setVisible(networkLink.visible, false); - } - - //-------------------------------------------------------------------------- - // Property: folder - //-------------------------------------------------------------------------- - - private var _networkLink:KMLLayer; - - /** - * The KML Folder that represents this TOC item. - */ - public function get networkLink():KMLLayer - { - return _networkLink; - } - - //-------------------------------------------------------------------------- - // Property: layer - //-------------------------------------------------------------------------- - - private var _layer:KMLLayer; - - /** - * The KML layer associated with this TOC item. - */ - public function get layer():KMLLayer - { - return _layer; - } - - //-------------------------------------------------------------------------- - // - // Methods - // - //-------------------------------------------------------------------------- - - /** - * @private - */ - override internal function setVisible(value:Boolean, layerRefresh:Boolean = true):void - { - // Set the visible state of this item, but defer the folder refresh on the layer - super.setVisible(value, false); - - if (layerRefresh) - { - networkLink.visible = value; - if (value) - { - if (parent is TocKmlFolderItem) - { - networkLink.visible = isNetworkLinkVisibileBasedOnParentFolder(); - } - } - } - } - - private function isNetworkLinkVisibileBasedOnParentFolder():Boolean - { - var result:Boolean; - - // find the immediate parent folder - var parentFolder:KMLFolder = TocKmlFolderItem(parent).folder; - result = parentFolder.visible; - if (parentFolder.visible) - { - var parents:Array = getParentFolders(parentFolder); - if (parents.length > 0) - { - for (var p:int = 0; p < parents.length; ) - { - if (!KMLFolder(parents[p]).visible) - { - result = false; - break; - } - else - { - p++; - } - } - } - } - return result; - } - - private function getParentFolders(folder:KMLFolder, arr:Array = null):Array - { - if (!arr) - { - arr = []; - } - - // Returns the parent folders ids of the given folder - var parentId:Number = folder.parentFolderId; - - if (parentId != -1) - { - var kmlFeatureInfo:KMLFeatureInfo = new KMLFeatureInfo; - kmlFeatureInfo.type = KMLFeatureInfo.FOLDER; - kmlFeatureInfo.id = parentId; - - var parentFolder:KMLFolder = layer.getFeature(kmlFeatureInfo) as KMLFolder; - - arr.push(parentFolder); - return getParentFolders(parentFolder, arr); - } - return arr; - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package com.esri.viewer.components.toc.tocClasses +{ + +import com.esri.ags.layers.KMLLayer; +import com.esri.ags.layers.supportClasses.KMLFeatureInfo; +import com.esri.ags.layers.supportClasses.KMLFolder; + +/** + * A TOC item representing a NetworkLink within a KML Layer. + * + * @private + */ +public class TocKmlNetworkLinkItem extends TocItem +{ + public function TocKmlNetworkLinkItem(parentItem:TocItem, networkLink:KMLLayer, layer:KMLLayer) + { + super(parentItem); + + _networkLink = networkLink; + _layer = layer; + label = networkLink.name; + + setVisible(networkLink.visible, false); + } + + //-------------------------------------------------------------------------- + // Property: folder + //-------------------------------------------------------------------------- + + private var _networkLink:KMLLayer; + + /** + * The KML Folder that represents this TOC item. + */ + public function get networkLink():KMLLayer + { + return _networkLink; + } + + //-------------------------------------------------------------------------- + // Property: layer + //-------------------------------------------------------------------------- + + private var _layer:KMLLayer; + + /** + * The KML layer associated with this TOC item. + */ + public function get layer():KMLLayer + { + return _layer; + } + + //-------------------------------------------------------------------------- + // + // Methods + // + //-------------------------------------------------------------------------- + + /** + * @private + */ + override internal function setVisible(value:Boolean, layerRefresh:Boolean = true):void + { + // Set the visible state of this item, but defer the folder refresh on the layer + super.setVisible(value, false); + + if (layerRefresh) + { + networkLink.visible = value; + if (value) + { + if (parent is TocKmlFolderItem) + { + networkLink.visible = isNetworkLinkVisibileBasedOnParentFolder(); + } + } + } + } + + private function isNetworkLinkVisibileBasedOnParentFolder():Boolean + { + var result:Boolean; + + // find the immediate parent folder + var parentFolder:KMLFolder = TocKmlFolderItem(parent).folder; + result = parentFolder.visible; + if (parentFolder.visible) + { + var parents:Array = getParentFolders(parentFolder); + if (parents.length > 0) + { + for (var p:int = 0; p < parents.length; ) + { + if (!KMLFolder(parents[p]).visible) + { + result = false; + break; + } + else + { + p++; + } + } + } + } + return result; + } + + private function getParentFolders(folder:KMLFolder, arr:Array = null):Array + { + if (!arr) + { + arr = []; + } + + // Returns the parent folders ids of the given folder + var parentId:Number = folder.parentFolderId; + + if (parentId != -1) + { + var kmlFeatureInfo:KMLFeatureInfo = new KMLFeatureInfo; + kmlFeatureInfo.type = KMLFeatureInfo.FOLDER; + kmlFeatureInfo.id = parentId; + + var parentFolder:KMLFolder = layer.getFeature(kmlFeatureInfo) as KMLFolder; + + arr.push(parentFolder); + return getParentFolders(parentFolder, arr); + } + return arr; + } +} + +} diff --git a/src/com/esri/viewer/components/toc/tocClasses/TocLayerInfoItem.as b/src/com/esri/viewer/components/toc/tocClasses/TocLayerInfoItem.as index d6f2505..82b8f44 100644 --- a/src/com/esri/viewer/components/toc/tocClasses/TocLayerInfoItem.as +++ b/src/com/esri/viewer/components/toc/tocClasses/TocLayerInfoItem.as @@ -1,55 +1,55 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2010-2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package com.esri.viewer.components.toc.tocClasses -{ - -import com.esri.ags.layers.supportClasses.LayerInfo; - -/** - * A TOC item representing a member layer of an ArcGIS or ArcIMS map service. - * This includes group layers that contain other member layers. - * - * @private - */ -public class TocLayerInfoItem extends TocItem -{ - public function TocLayerInfoItem(parentItem:TocItem, layerInfo:LayerInfo, isVisible:Boolean, isInScaleRange:Boolean) - { - super(parentItem); - - _layerInfo = layerInfo; - label = layerInfo.name; - - setVisible(isVisible, false); - setIsInScaleRange(isInScaleRange, false); - } - - //-------------------------------------------------------------------------- - // Property: layerInfo - //-------------------------------------------------------------------------- - - private var _layerInfo:LayerInfo; - - /** - * The map layer info that backs this TOC item. - */ - public function get layerInfo():LayerInfo - { - return _layerInfo; - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2010-2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package com.esri.viewer.components.toc.tocClasses +{ + +import com.esri.ags.layers.supportClasses.LayerInfo; + +/** + * A TOC item representing a member layer of an ArcGIS or ArcIMS map service. + * This includes group layers that contain other member layers. + * + * @private + */ +public class TocLayerInfoItem extends TocItem +{ + public function TocLayerInfoItem(parentItem:TocItem, layerInfo:LayerInfo, isVisible:Boolean, isInScaleRange:Boolean) + { + super(parentItem); + + _layerInfo = layerInfo; + label = layerInfo.name; + + setVisible(isVisible, false); + setIsInScaleRange(isInScaleRange, false); + } + + //-------------------------------------------------------------------------- + // Property: layerInfo + //-------------------------------------------------------------------------- + + private var _layerInfo:LayerInfo; + + /** + * The map layer info that backs this TOC item. + */ + public function get layerInfo():LayerInfo + { + return _layerInfo; + } +} + +} diff --git a/src/com/esri/viewer/components/toc/tocClasses/TocLayerMenu.mxml b/src/com/esri/viewer/components/toc/tocClasses/TocLayerMenu.mxml index 38c31d5..4e50c3a 100644 --- a/src/com/esri/viewer/components/toc/tocClasses/TocLayerMenu.mxml +++ b/src/com/esri/viewer/components/toc/tocClasses/TocLayerMenu.mxml @@ -1,452 +1,452 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/com/esri/viewer/components/toc/tocClasses/TocMapLayerItem.as b/src/com/esri/viewer/components/toc/tocClasses/TocMapLayerItem.as index a37f666..62d163e 100644 --- a/src/com/esri/viewer/components/toc/tocClasses/TocMapLayerItem.as +++ b/src/com/esri/viewer/components/toc/tocClasses/TocMapLayerItem.as @@ -1,636 +1,636 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2010-2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package com.esri.viewer.components.toc.tocClasses -{ - -import com.esri.ags.Map; -import com.esri.ags.events.ExtentEvent; -import com.esri.ags.events.LayerEvent; -import com.esri.ags.layers.ArcGISDynamicMapServiceLayer; -import com.esri.ags.layers.ArcGISTiledMapServiceLayer; -import com.esri.ags.layers.ArcIMSMapServiceLayer; -import com.esri.ags.layers.KMLLayer; -import com.esri.ags.layers.Layer; -import com.esri.ags.layers.supportClasses.KMLFeatureInfo; -import com.esri.ags.layers.supportClasses.KMLFolder; -import com.esri.ags.layers.supportClasses.LayerInfo; -import com.esri.viewer.ViewerContainer; -import com.esri.viewer.components.toc.utils.MapUtil; -import com.esri.viewer.utils.MapServiceUtil; - -import flash.events.Event; - -import mx.binding.utils.ChangeWatcher; -import mx.collections.ArrayCollection; -import mx.events.CollectionEvent; -import mx.events.FlexEvent; - -/** - * A TOC item representing a map service or graphics layer. - * - * @private - */ -public class TocMapLayerItem extends TocItem -{ - //-------------------------------------------------------------------------- - // - // Variables - // - //-------------------------------------------------------------------------- - - private var _isMSOnly:Boolean = false; - private var _isVisibleLayersSet:Boolean = false; - private var _layer:Layer; - private var _labelFunction:Function; - private var _visibleLayersChangeWatcher:ChangeWatcher; - private var _dynamicMapServiceLayerInfos:Array; - - //-------------------------------------------------------------------------- - // - // Constructor - // - //-------------------------------------------------------------------------- - - /** - * Creates a new TocMapLayerItem - */ - public function TocMapLayerItem(layer:Layer, labelFunction:Function = null, isMapServiceOnly:Boolean = false) - { - super(); - - _layer = layer; - _isMSOnly = isMapServiceOnly; - // Set the initial visibility without causing a layer refresh - setVisible(layer.visible, false); - // Indicate whether the item is in scale range without causing a layer refresh - setIsInScaleRange(layer.isInScaleRange, false); - - // check if the visiblelayers was set on the dynamic map servicelayer - var opLayers:Array = ViewerContainer.getInstance().configData.opLayers; - for (var i:int = 0; i < opLayers.length; ) - { - if (layer is ArcGISDynamicMapServiceLayer && (layer.id == opLayers[i].label) && opLayers[i].visibleLayers) - { - _isVisibleLayersSet = true; - break; - } - else - { - i++; - } - } - - if (labelFunction == null) - { - // Default label function - labelFunction = MapUtil.labelLayer; - } - _labelFunction = labelFunction; - label = labelFunction(layer); - - if (!isMapServiceOnly) - { - if (layer.loaded) - { - // Process the layer info immediately - createChildren(); - layer.map.addEventListener(ExtentEvent.EXTENT_CHANGE, onExtentChange, false, 0, true); - } - } - - // Listen for future layer load events - layer.addEventListener(LayerEvent.LOAD, onLayerLoad, false, 0, true); - - // Listen for changes in layer visibility - layer.addEventListener(FlexEvent.SHOW, onLayerShow, false, 0, true); - layer.addEventListener(FlexEvent.HIDE, onLayerHide, false, 0, true); - layer.addEventListener(LayerEvent.IS_IN_SCALE_RANGE_CHANGE, onScaleChange, false, 0, true); - } - - //-------------------------------------------------------------------------- - // - // Properties - // - //-------------------------------------------------------------------------- - - //-------------------------------------------------------------------------- - // layer - //-------------------------------------------------------------------------- - - /** - * The map layer to which this TOC item is attached. - */ - public function get layer():Layer - { - return _layer; - } - - //-------------------------------------------------------------------------- - // - // Overriden Methods - // - //-------------------------------------------------------------------------- - - /** - * @private - */ - override internal function updateIndeterminateState(calledFromChild:Boolean = false):void - { - indeterminate = DEFAULT_INDETERMINATE; - - // Recurse up the tree - if (parent) - { - parent.updateIndeterminateState(true); - } - } - - /** - * @private - */ - override internal function refreshLayer():void - { - layer.visible = visible; - - // ArcIMS requires layer names, whereas ArcGIS Server requires layer IDs - var useLayerInfoName:Boolean = (layer is ArcIMSMapServiceLayer); - - var visLayers:Array = []; - for each (var child:TocItem in children) - { - accumVisibleLayers(child, visLayers, useLayerInfoName); - } - - if (layer is ArcGISDynamicMapServiceLayer) - { - if (ArcGISDynamicMapServiceLayer(layer).visibleLayers) - { - ArcGISDynamicMapServiceLayer(layer).visibleLayers.removeEventListener(CollectionEvent.COLLECTION_CHANGE, visibleLayersChangeHandler); - } - ArcGISDynamicMapServiceLayer(layer).visibleLayers = new ArrayCollection(visLayers); - ArcGISDynamicMapServiceLayer(layer).visibleLayers.addEventListener(CollectionEvent.COLLECTION_CHANGE, visibleLayersChangeHandler); - } - else if (layer is ArcIMSMapServiceLayer) - { - ArcIMSMapServiceLayer(layer).visibleLayers = new ArrayCollection(visLayers); - } - } - - //-------------------------------------------------------------------------- - // - // Methods - // - //-------------------------------------------------------------------------- - - private function visibleLayersChange(event:Event = null):void - { - var dynamicMapServiceLayer:ArcGISDynamicMapServiceLayer = ArcGISDynamicMapServiceLayer(event.target); - var actualVisibleLayers:Array; - if (dynamicMapServiceLayer.visibleLayers) - { - dynamicMapServiceLayer.visibleLayers.addEventListener(CollectionEvent.COLLECTION_CHANGE, visibleLayersChangeHandler); - actualVisibleLayers = getActualVisibleLayers(dynamicMapServiceLayer.visibleLayers.toArray(), _dynamicMapServiceLayerInfos); - } - else - { - actualVisibleLayers = getActualVisibleLayers(MapServiceUtil.getVisibleSubLayers(_dynamicMapServiceLayerInfos), _dynamicMapServiceLayerInfos); - } - for each (var child:TocLayerInfoItem in children) - { - updateTOCItemVisibility(child, actualVisibleLayers); - } - } - - private function visibleLayersChangeHandler(event:CollectionEvent):void - { - var actualVisibleLayers:Array = getActualVisibleLayers(ArcGISDynamicMapServiceLayer(layer).visibleLayers.toArray(), _dynamicMapServiceLayerInfos); - for each (var child:TocLayerInfoItem in children) - { - updateTOCItemVisibility(child, ArcGISDynamicMapServiceLayer(layer).visibleLayers.toArray()); - } - } - - private function updateTOCItemVisibility(item:TocLayerInfoItem, actualVisibleLayers:Array):void - { - if (item.isGroupLayer()) - { - item.visible = actualVisibleLayers.indexOf(item.layerInfo.layerId) != -1; - if (item.visible) - { - for each (var child:TocLayerInfoItem in item.children) - { - updateTOCItemVisibility(child, actualVisibleLayers); - } - } - } - else - { - item.visible = actualVisibleLayers.indexOf(item.layerInfo.layerId) != -1; - } - } - - private function accumVisibleLayers(item:TocItem, accum:Array, useLayerInfoName:Boolean = false):void - { - if (item.isGroupLayer()) - { - // Don't include group layer IDs/names in the visible layer list, since the ArcGIS REST API - // implicitly turns on all child layers when the group layer is visible. This goes - // counter to what most users have come to expect from apps, e.g. ArcMap. - - if (item.visible) // only accumulate for a visible group layers - { - for each (var child:TocItem in item.children) - { - accumVisibleLayers(child, accum, useLayerInfoName); - } - } - } - else - { - // Leaf layer - if (item.visible) - { - if (item is TocLayerInfoItem) - { - var layer:TocLayerInfoItem = TocLayerInfoItem(item); - accum.push(useLayerInfoName ? layer.layerInfo.name : layer.layerInfo.layerId); - } - } - } - } - - private function onLayerLoad(event:LayerEvent):void - { - // Relabel this item, since map layer URL or service name might have changed. - label = _labelFunction(layer); - if (!_isMSOnly) - { - createChildren(); - layer.map.addEventListener(ExtentEvent.EXTENT_CHANGE, onExtentChange, false, 0, true); - } - } - - private function onLayerShow(event:FlexEvent):void - { - setVisible(layer.visible, true); - } - - private function onLayerHide(event:FlexEvent):void - { - setVisible(layer.visible, true); - } - - private function onScaleChange(event:LayerEvent):void - { - setIsInScaleRange(layer.isInScaleRange, true); - } - - private function onExtentChange(event:ExtentEvent):void - { - if (layer is ArcGISDynamicMapServiceLayer || layer is ArcGISTiledMapServiceLayer) - { - for each (var tocLayerInfoItem:TocLayerInfoItem in children) - { - updateEnabledBasedOnScale(tocLayerInfoItem, isTocLayerInfoItemInScale(tocLayerInfoItem.layerInfo)); - } - } - } - - private function updateEnabledBasedOnScale(tocLayerInfoItem:TocLayerInfoItem, isInScaleRange:Boolean):void - { - if (tocLayerInfoItem.children && tocLayerInfoItem.children.length) - { - tocLayerInfoItem.isInScaleRange = isInScaleRange; - for each (var childTocLayerInfoItem:TocLayerInfoItem in tocLayerInfoItem.children.toArray()) - { - updateEnabledBasedOnScale(childTocLayerInfoItem, tocLayerInfoItem.isInScaleRange && isTocLayerInfoItemInScale(childTocLayerInfoItem.layerInfo)); - } - } - else - { - tocLayerInfoItem.isInScaleRange = isInScaleRange; - } - } - - private function isTocLayerInfoItemInScale(layerInfo:LayerInfo):Boolean - { - var result:Boolean = true; - var map:Map = layer.map; - - if (map && (layerInfo.maxScale > 0 || layerInfo.minScale > 0)) - { - var scale:Number = map.scale; - if (layerInfo.maxScale > 0 && layerInfo.minScale > 0) - { - result = layerInfo.maxScale <= Math.ceil(scale) && Math.floor(scale) <= layerInfo.minScale; - } - else if (layerInfo.maxScale > 0) - { - result = layerInfo.maxScale <= Math.ceil(scale); - } - else if (layerInfo.minScale > 0) - { - result = Math.floor(scale) <= layerInfo.minScale; - } - } - return result; - } - - /** - * Populates this item's children collection based on any layer info - * of the map service. - */ - private function createChildren():void - { - children = null; - var layerInfos:Array; // of LayerInfo - - if (layer is ArcGISTiledMapServiceLayer) - { - layerInfos = ArcGISTiledMapServiceLayer(layer).layerInfos; - } - else if (layer is ArcGISDynamicMapServiceLayer) - { - var arcGISDynamicMapServiceLayer:ArcGISDynamicMapServiceLayer = ArcGISDynamicMapServiceLayer(layer); - arcGISDynamicMapServiceLayer.visibleLayers.addEventListener(CollectionEvent.COLLECTION_CHANGE, visibleLayersChangeHandler); - _visibleLayersChangeWatcher = ChangeWatcher.watch(arcGISDynamicMapServiceLayer, "visibleLayers", visibleLayersChange); - - _dynamicMapServiceLayerInfos = arcGISDynamicMapServiceLayer.dynamicLayerInfos ? arcGISDynamicMapServiceLayer.dynamicLayerInfos : arcGISDynamicMapServiceLayer.layerInfos; - if (_isVisibleLayersSet) - { - layerInfos = []; - // get the actual visible layers - var actualVisibleLayers:Array = getActualVisibleLayers(arcGISDynamicMapServiceLayer.visibleLayers.toArray(), _dynamicMapServiceLayerInfos); - for each (var layerInfo:LayerInfo in _dynamicMapServiceLayerInfos) - { - if (actualVisibleLayers.indexOf(layerInfo.layerId) != -1) - { - layerInfo.defaultVisibility = true; - } - else - { - layerInfo.defaultVisibility = false; - } - layerInfos.push(layerInfo); - } - } - else - { - layerInfos = _dynamicMapServiceLayerInfos; - } - } - else if (layer is ArcIMSMapServiceLayer) - { - layerInfos = ArcIMSMapServiceLayer(layer).layerInfos; - } - else if (layer is KMLLayer) - { - createKMLLayerTocItems(this, KMLLayer(layer)); - } - - if (layerInfos) - { - var rootLayers:Array = findRootLayers(layerInfos); - for each (var layerInfo1:LayerInfo in rootLayers) - { - addChild(createTocLayer(this, layerInfo1, layerInfos, layerInfo1.defaultVisibility, isTocLayerInfoItemInScale(layerInfo1))); - } - } - } - - private function getActualVisibleLayers(layerIds:Array, layerInfos:Array):Array - { - var result:Array = []; - - layerIds = layerIds ? layerIds.concat() : null; - var layerInfo:LayerInfo; - var layerIdIndex:int; - - if (layerIds) - { - // replace group layers with their sub layers - for each (layerInfo in layerInfos) - { - layerIdIndex = layerIds.indexOf(layerInfo.layerId); - if (layerInfo.subLayerIds && layerIdIndex != -1) - { - layerIds.splice(layerIdIndex, 1); // remove the group layer id - for each (var subLayerId:Number in layerInfo.subLayerIds) - { - layerIds.push(subLayerId); // add subLayerId - } - } - } - - //copying layerInfos as Array#reverse() is destructive. - var reversedLayerInfos:Array = layerInfos.concat(); - reversedLayerInfos.reverse(); - for each (layerInfo in reversedLayerInfos) - { - if (layerIds.indexOf(layerInfo.layerId) != -1 && layerIds.indexOf(layerInfo.parentLayerId) == -1 && layerInfo.parentLayerId != -1) - { - layerIds.push(layerInfo.parentLayerId); - } - } - - result = layerIds; - } - - return result; - } - - private function createKMLLayerTocItems(parentItem:TocItem, layer:KMLLayer, isNetworkLink:Boolean = false):void - { - for each (var folder:KMLFolder in layer.folders) - { - if (folder.parentFolderId == -1) - { - if (isNetworkLink) - { - if (folder.subFolderIds && folder.subFolderIds.length) - { - parentItem.addChild(createKmlFolderTocItem(parentItem, folder, layer.folders, layer)); - } - } - else - { - parentItem.addChild(createKmlFolderTocItem(parentItem, folder, layer.folders, layer)); - } - } - } - - for each (var networkLink:KMLLayer in layer.networkLinks) - { - // If the parent folder exists , do not create NetworkLinkItem as it is already created - if (!(hasParentFolder(Number(networkLink.id), layer.folders))) - { - // add network link - parentItem.addChild(createKmlNetworkLinkTocItem(parentItem, networkLink, layer)); - } - } - } - - private function hasParentFolder(id:Number, folders:Array):Boolean - { - // find the immediate parent folder - var parentFolderFound:Boolean; - - for (var i:int = 0; i < folders.length; ) - { - for (var j:int = 0; j < KMLFolder(folders[i]).featureInfos.length; ) - { - if (id == KMLFolder(folders[i]).featureInfos[j].id) - { - parentFolderFound = true; - break; - } - else - { - j++ - } - } - if (parentFolderFound) - { - break; - } - else - { - i++; - } - } - - return parentFolderFound; - } - - private function findRootLayers(layerInfos:Array):Array // of LayerInfo - { - var roots:Array = []; - for each (var layerInfo:LayerInfo in layerInfos) - { - // ArcGIS: parentLayerId is -1 - // ArcIMS: parentLayerId is NaN - if (isNaN(layerInfo.parentLayerId) || layerInfo.parentLayerId == -1) - { - roots.push(layerInfo); - } - } - return roots; - } - - private function findLayerById(id:Number, layerInfos:Array):LayerInfo - { - for each (var layerInfo:LayerInfo in layerInfos) - { - if (id == layerInfo.layerId) - { - return layerInfo; - } - } - return null; - } - - private function createTocLayer(parentItem:TocItem, layerInfo:LayerInfo, layerInfos:Array, isVisible:Boolean, isInScaleRange:Boolean):TocLayerInfoItem - { - var item:TocLayerInfoItem = new TocLayerInfoItem(parentItem, layerInfo, isVisible, isInScaleRange); - - // Handle any sublayers of a group layer - if (layerInfo.subLayerIds) - { - for each (var childId:Number in layerInfo.subLayerIds) - { - var childLayer:LayerInfo = findLayerById(childId, layerInfos); - if (childLayer) - { - item.addChild(createTocLayer(item, childLayer, layerInfos, childLayer.defaultVisibility, item.isInScaleRange && isTocLayerInfoItemInScale(childLayer))); - } - } - } - return item; - } - - private function createKmlFolderTocItem(parentItem:TocItem, folder:KMLFolder, folders:Array, layer:KMLLayer):TocKmlFolderItem - { - var item:TocKmlFolderItem = new TocKmlFolderItem(parentItem, folder, layer); - - // Handle any sublayers of a group layer - if (folder.subFolderIds && folder.subFolderIds.length > 0) - { - var lookInFeatureInfos:Boolean = true; - for each (var childId:Number in folder.subFolderIds) - { - var childFolder:KMLFolder = findFolderById(childId, folders); - if (childFolder) - { - item.addChild(createKmlFolderTocItem(item, childFolder, folders, layer)); - } - } - } - if (folder.featureInfos && folder.featureInfos.length > 0) - { - for each (var featureInfo:KMLFeatureInfo in folder.featureInfos) - { - if (featureInfo.type == KMLFeatureInfo.NETWORK_LINK) - { - var networkLink:KMLLayer = layer.getFeature(featureInfo) as KMLLayer; - item.addChild(createKmlNetworkLinkTocItem(item, networkLink, layer)); - } - } - } - return item; - } - - private function createKmlNetworkLinkTocItem(item:TocItem, networkLink:KMLLayer, layer:KMLLayer):TocKmlNetworkLinkItem - { - var tocKmlNetworkLinkItem:TocKmlNetworkLinkItem = new TocKmlNetworkLinkItem(item, networkLink, layer); - if (networkLink.loaded) - { - createKMLLayerTocItems(tocKmlNetworkLinkItem, networkLink, true); // as network link is also a type of KMLLayer - } - else - { - networkLink.addEventListener(LayerEvent.LOAD, layerLoadHandler); - } - - function layerLoadHandler(event:LayerEvent):void - { - createKMLLayerTocItems(tocKmlNetworkLinkItem, networkLink, true); - } - - return tocKmlNetworkLinkItem; - } - - private function findFolderById(id:Number, allFolders:Array):KMLFolder - { - var match:KMLFolder; - - for (var i:int = 0; i < allFolders.length; ) - { - if (allFolders[i].id == id) - { - match = allFolders[i] as KMLFolder; - break; - } - else - { - i++; - } - } - - return match; - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2010-2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package com.esri.viewer.components.toc.tocClasses +{ + +import com.esri.ags.Map; +import com.esri.ags.events.ExtentEvent; +import com.esri.ags.events.LayerEvent; +import com.esri.ags.layers.ArcGISDynamicMapServiceLayer; +import com.esri.ags.layers.ArcGISTiledMapServiceLayer; +import com.esri.ags.layers.ArcIMSMapServiceLayer; +import com.esri.ags.layers.KMLLayer; +import com.esri.ags.layers.Layer; +import com.esri.ags.layers.supportClasses.KMLFeatureInfo; +import com.esri.ags.layers.supportClasses.KMLFolder; +import com.esri.ags.layers.supportClasses.LayerInfo; +import com.esri.viewer.ViewerContainer; +import com.esri.viewer.components.toc.utils.MapUtil; +import com.esri.viewer.utils.MapServiceUtil; + +import flash.events.Event; + +import mx.binding.utils.ChangeWatcher; +import mx.collections.ArrayCollection; +import mx.events.CollectionEvent; +import mx.events.FlexEvent; + +/** + * A TOC item representing a map service or graphics layer. + * + * @private + */ +public class TocMapLayerItem extends TocItem +{ + //-------------------------------------------------------------------------- + // + // Variables + // + //-------------------------------------------------------------------------- + + private var _isMSOnly:Boolean = false; + private var _isVisibleLayersSet:Boolean = false; + private var _layer:Layer; + private var _labelFunction:Function; + private var _visibleLayersChangeWatcher:ChangeWatcher; + private var _dynamicMapServiceLayerInfos:Array; + + //-------------------------------------------------------------------------- + // + // Constructor + // + //-------------------------------------------------------------------------- + + /** + * Creates a new TocMapLayerItem + */ + public function TocMapLayerItem(layer:Layer, labelFunction:Function = null, isMapServiceOnly:Boolean = false) + { + super(); + + _layer = layer; + _isMSOnly = isMapServiceOnly; + // Set the initial visibility without causing a layer refresh + setVisible(layer.visible, false); + // Indicate whether the item is in scale range without causing a layer refresh + setIsInScaleRange(layer.isInScaleRange, false); + + // check if the visiblelayers was set on the dynamic map servicelayer + var opLayers:Array = ViewerContainer.getInstance().configData.opLayers; + for (var i:int = 0; i < opLayers.length; ) + { + if (layer is ArcGISDynamicMapServiceLayer && (layer.id == opLayers[i].label) && opLayers[i].visibleLayers) + { + _isVisibleLayersSet = true; + break; + } + else + { + i++; + } + } + + if (labelFunction == null) + { + // Default label function + labelFunction = MapUtil.labelLayer; + } + _labelFunction = labelFunction; + label = labelFunction(layer); + + if (!isMapServiceOnly) + { + if (layer.loaded) + { + // Process the layer info immediately + createChildren(); + layer.map.addEventListener(ExtentEvent.EXTENT_CHANGE, onExtentChange, false, 0, true); + } + } + + // Listen for future layer load events + layer.addEventListener(LayerEvent.LOAD, onLayerLoad, false, 0, true); + + // Listen for changes in layer visibility + layer.addEventListener(FlexEvent.SHOW, onLayerShow, false, 0, true); + layer.addEventListener(FlexEvent.HIDE, onLayerHide, false, 0, true); + layer.addEventListener(LayerEvent.IS_IN_SCALE_RANGE_CHANGE, onScaleChange, false, 0, true); + } + + //-------------------------------------------------------------------------- + // + // Properties + // + //-------------------------------------------------------------------------- + + //-------------------------------------------------------------------------- + // layer + //-------------------------------------------------------------------------- + + /** + * The map layer to which this TOC item is attached. + */ + public function get layer():Layer + { + return _layer; + } + + //-------------------------------------------------------------------------- + // + // Overriden Methods + // + //-------------------------------------------------------------------------- + + /** + * @private + */ + override internal function updateIndeterminateState(calledFromChild:Boolean = false):void + { + indeterminate = DEFAULT_INDETERMINATE; + + // Recurse up the tree + if (parent) + { + parent.updateIndeterminateState(true); + } + } + + /** + * @private + */ + override internal function refreshLayer():void + { + layer.visible = visible; + + // ArcIMS requires layer names, whereas ArcGIS Server requires layer IDs + var useLayerInfoName:Boolean = (layer is ArcIMSMapServiceLayer); + + var visLayers:Array = []; + for each (var child:TocItem in children) + { + accumVisibleLayers(child, visLayers, useLayerInfoName); + } + + if (layer is ArcGISDynamicMapServiceLayer) + { + if (ArcGISDynamicMapServiceLayer(layer).visibleLayers) + { + ArcGISDynamicMapServiceLayer(layer).visibleLayers.removeEventListener(CollectionEvent.COLLECTION_CHANGE, visibleLayersChangeHandler); + } + ArcGISDynamicMapServiceLayer(layer).visibleLayers = new ArrayCollection(visLayers); + ArcGISDynamicMapServiceLayer(layer).visibleLayers.addEventListener(CollectionEvent.COLLECTION_CHANGE, visibleLayersChangeHandler); + } + else if (layer is ArcIMSMapServiceLayer) + { + ArcIMSMapServiceLayer(layer).visibleLayers = new ArrayCollection(visLayers); + } + } + + //-------------------------------------------------------------------------- + // + // Methods + // + //-------------------------------------------------------------------------- + + private function visibleLayersChange(event:Event = null):void + { + var dynamicMapServiceLayer:ArcGISDynamicMapServiceLayer = ArcGISDynamicMapServiceLayer(event.target); + var actualVisibleLayers:Array; + if (dynamicMapServiceLayer.visibleLayers) + { + dynamicMapServiceLayer.visibleLayers.addEventListener(CollectionEvent.COLLECTION_CHANGE, visibleLayersChangeHandler); + actualVisibleLayers = getActualVisibleLayers(dynamicMapServiceLayer.visibleLayers.toArray(), _dynamicMapServiceLayerInfos); + } + else + { + actualVisibleLayers = getActualVisibleLayers(MapServiceUtil.getVisibleSubLayers(_dynamicMapServiceLayerInfos), _dynamicMapServiceLayerInfos); + } + for each (var child:TocLayerInfoItem in children) + { + updateTOCItemVisibility(child, actualVisibleLayers); + } + } + + private function visibleLayersChangeHandler(event:CollectionEvent):void + { + var actualVisibleLayers:Array = getActualVisibleLayers(ArcGISDynamicMapServiceLayer(layer).visibleLayers.toArray(), _dynamicMapServiceLayerInfos); + for each (var child:TocLayerInfoItem in children) + { + updateTOCItemVisibility(child, ArcGISDynamicMapServiceLayer(layer).visibleLayers.toArray()); + } + } + + private function updateTOCItemVisibility(item:TocLayerInfoItem, actualVisibleLayers:Array):void + { + if (item.isGroupLayer()) + { + item.visible = actualVisibleLayers.indexOf(item.layerInfo.layerId) != -1; + if (item.visible) + { + for each (var child:TocLayerInfoItem in item.children) + { + updateTOCItemVisibility(child, actualVisibleLayers); + } + } + } + else + { + item.visible = actualVisibleLayers.indexOf(item.layerInfo.layerId) != -1; + } + } + + private function accumVisibleLayers(item:TocItem, accum:Array, useLayerInfoName:Boolean = false):void + { + if (item.isGroupLayer()) + { + // Don't include group layer IDs/names in the visible layer list, since the ArcGIS REST API + // implicitly turns on all child layers when the group layer is visible. This goes + // counter to what most users have come to expect from apps, e.g. ArcMap. + + if (item.visible) // only accumulate for a visible group layers + { + for each (var child:TocItem in item.children) + { + accumVisibleLayers(child, accum, useLayerInfoName); + } + } + } + else + { + // Leaf layer + if (item.visible) + { + if (item is TocLayerInfoItem) + { + var layer:TocLayerInfoItem = TocLayerInfoItem(item); + accum.push(useLayerInfoName ? layer.layerInfo.name : layer.layerInfo.layerId); + } + } + } + } + + private function onLayerLoad(event:LayerEvent):void + { + // Relabel this item, since map layer URL or service name might have changed. + label = _labelFunction(layer); + if (!_isMSOnly) + { + createChildren(); + layer.map.addEventListener(ExtentEvent.EXTENT_CHANGE, onExtentChange, false, 0, true); + } + } + + private function onLayerShow(event:FlexEvent):void + { + setVisible(layer.visible, true); + } + + private function onLayerHide(event:FlexEvent):void + { + setVisible(layer.visible, true); + } + + private function onScaleChange(event:LayerEvent):void + { + setIsInScaleRange(layer.isInScaleRange, true); + } + + private function onExtentChange(event:ExtentEvent):void + { + if (layer is ArcGISDynamicMapServiceLayer || layer is ArcGISTiledMapServiceLayer) + { + for each (var tocLayerInfoItem:TocLayerInfoItem in children) + { + updateEnabledBasedOnScale(tocLayerInfoItem, isTocLayerInfoItemInScale(tocLayerInfoItem.layerInfo)); + } + } + } + + private function updateEnabledBasedOnScale(tocLayerInfoItem:TocLayerInfoItem, isInScaleRange:Boolean):void + { + if (tocLayerInfoItem.children && tocLayerInfoItem.children.length) + { + tocLayerInfoItem.isInScaleRange = isInScaleRange; + for each (var childTocLayerInfoItem:TocLayerInfoItem in tocLayerInfoItem.children.toArray()) + { + updateEnabledBasedOnScale(childTocLayerInfoItem, tocLayerInfoItem.isInScaleRange && isTocLayerInfoItemInScale(childTocLayerInfoItem.layerInfo)); + } + } + else + { + tocLayerInfoItem.isInScaleRange = isInScaleRange; + } + } + + private function isTocLayerInfoItemInScale(layerInfo:LayerInfo):Boolean + { + var result:Boolean = true; + var map:Map = layer.map; + + if (map && (layerInfo.maxScale > 0 || layerInfo.minScale > 0)) + { + var scale:Number = map.scale; + if (layerInfo.maxScale > 0 && layerInfo.minScale > 0) + { + result = layerInfo.maxScale <= Math.ceil(scale) && Math.floor(scale) <= layerInfo.minScale; + } + else if (layerInfo.maxScale > 0) + { + result = layerInfo.maxScale <= Math.ceil(scale); + } + else if (layerInfo.minScale > 0) + { + result = Math.floor(scale) <= layerInfo.minScale; + } + } + return result; + } + + /** + * Populates this item's children collection based on any layer info + * of the map service. + */ + private function createChildren():void + { + children = null; + var layerInfos:Array; // of LayerInfo + + if (layer is ArcGISTiledMapServiceLayer) + { + layerInfos = ArcGISTiledMapServiceLayer(layer).layerInfos; + } + else if (layer is ArcGISDynamicMapServiceLayer) + { + var arcGISDynamicMapServiceLayer:ArcGISDynamicMapServiceLayer = ArcGISDynamicMapServiceLayer(layer); + arcGISDynamicMapServiceLayer.visibleLayers.addEventListener(CollectionEvent.COLLECTION_CHANGE, visibleLayersChangeHandler); + _visibleLayersChangeWatcher = ChangeWatcher.watch(arcGISDynamicMapServiceLayer, "visibleLayers", visibleLayersChange); + + _dynamicMapServiceLayerInfos = arcGISDynamicMapServiceLayer.dynamicLayerInfos ? arcGISDynamicMapServiceLayer.dynamicLayerInfos : arcGISDynamicMapServiceLayer.layerInfos; + if (_isVisibleLayersSet) + { + layerInfos = []; + // get the actual visible layers + var actualVisibleLayers:Array = getActualVisibleLayers(arcGISDynamicMapServiceLayer.visibleLayers.toArray(), _dynamicMapServiceLayerInfos); + for each (var layerInfo:LayerInfo in _dynamicMapServiceLayerInfos) + { + if (actualVisibleLayers.indexOf(layerInfo.layerId) != -1) + { + layerInfo.defaultVisibility = true; + } + else + { + layerInfo.defaultVisibility = false; + } + layerInfos.push(layerInfo); + } + } + else + { + layerInfos = _dynamicMapServiceLayerInfos; + } + } + else if (layer is ArcIMSMapServiceLayer) + { + layerInfos = ArcIMSMapServiceLayer(layer).layerInfos; + } + else if (layer is KMLLayer) + { + createKMLLayerTocItems(this, KMLLayer(layer)); + } + + if (layerInfos) + { + var rootLayers:Array = findRootLayers(layerInfos); + for each (var layerInfo1:LayerInfo in rootLayers) + { + addChild(createTocLayer(this, layerInfo1, layerInfos, layerInfo1.defaultVisibility, isTocLayerInfoItemInScale(layerInfo1))); + } + } + } + + private function getActualVisibleLayers(layerIds:Array, layerInfos:Array):Array + { + var result:Array = []; + + layerIds = layerIds ? layerIds.concat() : null; + var layerInfo:LayerInfo; + var layerIdIndex:int; + + if (layerIds) + { + // replace group layers with their sub layers + for each (layerInfo in layerInfos) + { + layerIdIndex = layerIds.indexOf(layerInfo.layerId); + if (layerInfo.subLayerIds && layerIdIndex != -1) + { + layerIds.splice(layerIdIndex, 1); // remove the group layer id + for each (var subLayerId:Number in layerInfo.subLayerIds) + { + layerIds.push(subLayerId); // add subLayerId + } + } + } + + //copying layerInfos as Array#reverse() is destructive. + var reversedLayerInfos:Array = layerInfos.concat(); + reversedLayerInfos.reverse(); + for each (layerInfo in reversedLayerInfos) + { + if (layerIds.indexOf(layerInfo.layerId) != -1 && layerIds.indexOf(layerInfo.parentLayerId) == -1 && layerInfo.parentLayerId != -1) + { + layerIds.push(layerInfo.parentLayerId); + } + } + + result = layerIds; + } + + return result; + } + + private function createKMLLayerTocItems(parentItem:TocItem, layer:KMLLayer, isNetworkLink:Boolean = false):void + { + for each (var folder:KMLFolder in layer.folders) + { + if (folder.parentFolderId == -1) + { + if (isNetworkLink) + { + if (folder.subFolderIds && folder.subFolderIds.length) + { + parentItem.addChild(createKmlFolderTocItem(parentItem, folder, layer.folders, layer)); + } + } + else + { + parentItem.addChild(createKmlFolderTocItem(parentItem, folder, layer.folders, layer)); + } + } + } + + for each (var networkLink:KMLLayer in layer.networkLinks) + { + // If the parent folder exists , do not create NetworkLinkItem as it is already created + if (!(hasParentFolder(Number(networkLink.id), layer.folders))) + { + // add network link + parentItem.addChild(createKmlNetworkLinkTocItem(parentItem, networkLink, layer)); + } + } + } + + private function hasParentFolder(id:Number, folders:Array):Boolean + { + // find the immediate parent folder + var parentFolderFound:Boolean; + + for (var i:int = 0; i < folders.length; ) + { + for (var j:int = 0; j < KMLFolder(folders[i]).featureInfos.length; ) + { + if (id == KMLFolder(folders[i]).featureInfos[j].id) + { + parentFolderFound = true; + break; + } + else + { + j++ + } + } + if (parentFolderFound) + { + break; + } + else + { + i++; + } + } + + return parentFolderFound; + } + + private function findRootLayers(layerInfos:Array):Array // of LayerInfo + { + var roots:Array = []; + for each (var layerInfo:LayerInfo in layerInfos) + { + // ArcGIS: parentLayerId is -1 + // ArcIMS: parentLayerId is NaN + if (isNaN(layerInfo.parentLayerId) || layerInfo.parentLayerId == -1) + { + roots.push(layerInfo); + } + } + return roots; + } + + private function findLayerById(id:Number, layerInfos:Array):LayerInfo + { + for each (var layerInfo:LayerInfo in layerInfos) + { + if (id == layerInfo.layerId) + { + return layerInfo; + } + } + return null; + } + + private function createTocLayer(parentItem:TocItem, layerInfo:LayerInfo, layerInfos:Array, isVisible:Boolean, isInScaleRange:Boolean):TocLayerInfoItem + { + var item:TocLayerInfoItem = new TocLayerInfoItem(parentItem, layerInfo, isVisible, isInScaleRange); + + // Handle any sublayers of a group layer + if (layerInfo.subLayerIds) + { + for each (var childId:Number in layerInfo.subLayerIds) + { + var childLayer:LayerInfo = findLayerById(childId, layerInfos); + if (childLayer) + { + item.addChild(createTocLayer(item, childLayer, layerInfos, childLayer.defaultVisibility, item.isInScaleRange && isTocLayerInfoItemInScale(childLayer))); + } + } + } + return item; + } + + private function createKmlFolderTocItem(parentItem:TocItem, folder:KMLFolder, folders:Array, layer:KMLLayer):TocKmlFolderItem + { + var item:TocKmlFolderItem = new TocKmlFolderItem(parentItem, folder, layer); + + // Handle any sublayers of a group layer + if (folder.subFolderIds && folder.subFolderIds.length > 0) + { + var lookInFeatureInfos:Boolean = true; + for each (var childId:Number in folder.subFolderIds) + { + var childFolder:KMLFolder = findFolderById(childId, folders); + if (childFolder) + { + item.addChild(createKmlFolderTocItem(item, childFolder, folders, layer)); + } + } + } + if (folder.featureInfos && folder.featureInfos.length > 0) + { + for each (var featureInfo:KMLFeatureInfo in folder.featureInfos) + { + if (featureInfo.type == KMLFeatureInfo.NETWORK_LINK) + { + var networkLink:KMLLayer = layer.getFeature(featureInfo) as KMLLayer; + item.addChild(createKmlNetworkLinkTocItem(item, networkLink, layer)); + } + } + } + return item; + } + + private function createKmlNetworkLinkTocItem(item:TocItem, networkLink:KMLLayer, layer:KMLLayer):TocKmlNetworkLinkItem + { + var tocKmlNetworkLinkItem:TocKmlNetworkLinkItem = new TocKmlNetworkLinkItem(item, networkLink, layer); + if (networkLink.loaded) + { + createKMLLayerTocItems(tocKmlNetworkLinkItem, networkLink, true); // as network link is also a type of KMLLayer + } + else + { + networkLink.addEventListener(LayerEvent.LOAD, layerLoadHandler); + } + + function layerLoadHandler(event:LayerEvent):void + { + createKMLLayerTocItems(tocKmlNetworkLinkItem, networkLink, true); + } + + return tocKmlNetworkLinkItem; + } + + private function findFolderById(id:Number, allFolders:Array):KMLFolder + { + var match:KMLFolder; + + for (var i:int = 0; i < allFolders.length; ) + { + if (allFolders[i].id == id) + { + match = allFolders[i] as KMLFolder; + break; + } + else + { + i++; + } + } + + return match; + } +} + +} diff --git a/src/com/esri/viewer/components/toc/tocClasses/TransparencyMenuItem.mxml b/src/com/esri/viewer/components/toc/tocClasses/TransparencyMenuItem.mxml index ada9d05..e34b98f 100644 --- a/src/com/esri/viewer/components/toc/tocClasses/TransparencyMenuItem.mxml +++ b/src/com/esri/viewer/components/toc/tocClasses/TransparencyMenuItem.mxml @@ -1,88 +1,88 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + diff --git a/src/com/esri/viewer/components/toc/utils/MapUtil.as b/src/com/esri/viewer/components/toc/utils/MapUtil.as index f0b50ef..a57b241 100644 --- a/src/com/esri/viewer/components/toc/utils/MapUtil.as +++ b/src/com/esri/viewer/components/toc/utils/MapUtil.as @@ -1,149 +1,149 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2010-2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package com.esri.viewer.components.toc.utils -{ - -import com.esri.ags.Map; -import com.esri.ags.layers.ArcGISDynamicMapServiceLayer; -import com.esri.ags.layers.ArcGISImageServiceLayer; -import com.esri.ags.layers.ArcGISTiledMapServiceLayer; -import com.esri.ags.layers.ArcIMSMapServiceLayer; -import com.esri.ags.layers.FeatureLayer; -import com.esri.ags.layers.GPResultImageLayer; -import com.esri.ags.layers.GraphicsLayer; -import com.esri.ags.layers.Layer; - -/** - * Map utilities. - * - * @private - */ -public final class MapUtil -{ - /** - * Iterates over all map layers and passes each one to the given function. - * - * @param func A function with the signature func( layer :Layer ) :void. - */ - public static function forEachMapLayer(map:Map, func:Function):void - { - if (map) - { - for each (var layer:Layer in map.layers) - { - func(layer); - } - } - } - - /** - * Returns a suitable label for the specified map layer. - * Returns null if no label can be determined. - */ - public static function labelLayer(layer:Layer):String - { - var label:String = null; - - if (layer.id == "") - { - // Tiled layers - if (layer is ArcGISTiledMapServiceLayer) - { - label = extractServiceNameFromUrl((layer as ArcGISTiledMapServiceLayer).url); - - // Dynamic layers - } - else if (layer is ArcGISDynamicMapServiceLayer) - { - label = extractServiceNameFromUrl((layer as ArcGISDynamicMapServiceLayer).url); - } - else if (layer is ArcGISImageServiceLayer) - { - label = extractServiceNameFromUrl((layer as ArcGISImageServiceLayer).url); - } - else if (layer is ArcIMSMapServiceLayer) - { - label = (layer as ArcIMSMapServiceLayer).serviceName; - } - else if (layer is FeatureLayer) - { - label = extractServiceNameFromUrl((layer as FeatureLayer).url); - } - else if (layer is GPResultImageLayer) - { - label = "(Task Result) " + extractServiceNameFromUrl((layer as GPResultImageLayer).url); - - // Graphics layers - } - else if (layer is GraphicsLayer) - { - label = "Graphics"; - } - } - else - { - label = layer.name; - } - return label; - } - - // These tokens must be lowercase. - private static const IGNORE_URL_TOKENS:Array = - [ - "mapserver", - "wmsserver", - "imageserver", - "globeserver", - "gpserver", - "http:", - "https:" - ]; - - private static function extractServiceNameFromUrl(url:String):String - { - /* - ArcGIS URL formats: - http:////rest/services//MapServer - http:////rest/services//ImageServer - http:////rest/services//GPServer/ - ... - */ - - // Extract the part of the URL - if (url) - { - // Remove any query params - var queryPos:int = url.indexOf("?"); - if (queryPos != -1) - { - url = url.substring(0, queryPos); - } - - // Search for the service name token - var urlParts:Array = url.split("/").reverse(); - for each (var s:String in urlParts) - { - if (s && s != "" && IGNORE_URL_TOKENS.indexOf(s.toLowerCase()) == -1) - { - return s; - } - } - } - return null; - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2010-2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package com.esri.viewer.components.toc.utils +{ + +import com.esri.ags.Map; +import com.esri.ags.layers.ArcGISDynamicMapServiceLayer; +import com.esri.ags.layers.ArcGISImageServiceLayer; +import com.esri.ags.layers.ArcGISTiledMapServiceLayer; +import com.esri.ags.layers.ArcIMSMapServiceLayer; +import com.esri.ags.layers.FeatureLayer; +import com.esri.ags.layers.GPResultImageLayer; +import com.esri.ags.layers.GraphicsLayer; +import com.esri.ags.layers.Layer; + +/** + * Map utilities. + * + * @private + */ +public final class MapUtil +{ + /** + * Iterates over all map layers and passes each one to the given function. + * + * @param func A function with the signature func( layer :Layer ) :void. + */ + public static function forEachMapLayer(map:Map, func:Function):void + { + if (map) + { + for each (var layer:Layer in map.layers) + { + func(layer); + } + } + } + + /** + * Returns a suitable label for the specified map layer. + * Returns null if no label can be determined. + */ + public static function labelLayer(layer:Layer):String + { + var label:String = null; + + if (layer.id == "") + { + // Tiled layers + if (layer is ArcGISTiledMapServiceLayer) + { + label = extractServiceNameFromUrl((layer as ArcGISTiledMapServiceLayer).url); + + // Dynamic layers + } + else if (layer is ArcGISDynamicMapServiceLayer) + { + label = extractServiceNameFromUrl((layer as ArcGISDynamicMapServiceLayer).url); + } + else if (layer is ArcGISImageServiceLayer) + { + label = extractServiceNameFromUrl((layer as ArcGISImageServiceLayer).url); + } + else if (layer is ArcIMSMapServiceLayer) + { + label = (layer as ArcIMSMapServiceLayer).serviceName; + } + else if (layer is FeatureLayer) + { + label = extractServiceNameFromUrl((layer as FeatureLayer).url); + } + else if (layer is GPResultImageLayer) + { + label = "(Task Result) " + extractServiceNameFromUrl((layer as GPResultImageLayer).url); + + // Graphics layers + } + else if (layer is GraphicsLayer) + { + label = "Graphics"; + } + } + else + { + label = layer.name; + } + return label; + } + + // These tokens must be lowercase. + private static const IGNORE_URL_TOKENS:Array = + [ + "mapserver", + "wmsserver", + "imageserver", + "globeserver", + "gpserver", + "http:", + "https:" + ]; + + private static function extractServiceNameFromUrl(url:String):String + { + /* + ArcGIS URL formats: + http:////rest/services//MapServer + http:////rest/services//ImageServer + http:////rest/services//GPServer/ + ... + */ + + // Extract the part of the URL + if (url) + { + // Remove any query params + var queryPos:int = url.indexOf("?"); + if (queryPos != -1) + { + url = url.substring(0, queryPos); + } + + // Search for the service name token + var urlParts:Array = url.split("/").reverse(); + for each (var s:String in urlParts) + { + if (s && s != "" && IGNORE_URL_TOKENS.indexOf(s.toLowerCase()) == -1) + { + return s; + } + } + } + return null; + } +} + +} diff --git a/src/com/esri/viewer/managers/ConfigManager.as b/src/com/esri/viewer/managers/ConfigManager.as index 8c5db7d..a7e645d 100644 --- a/src/com/esri/viewer/managers/ConfigManager.as +++ b/src/com/esri/viewer/managers/ConfigManager.as @@ -1,1202 +1,1202 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2010-2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package com.esri.viewer.managers -{ - -import com.esri.ags.events.WebMapEvent; -import com.esri.ags.geometry.Extent; -import com.esri.ags.layers.ArcGISDynamicMapServiceLayer; -import com.esri.ags.layers.ArcGISImageServiceLayer; -import com.esri.ags.layers.ArcGISTiledMapServiceLayer; -import com.esri.ags.layers.CSVLayer; -import com.esri.ags.layers.FeatureLayer; -import com.esri.ags.layers.KMLLayer; -import com.esri.ags.layers.Layer; -import com.esri.ags.layers.OpenStreetMapLayer; -import com.esri.ags.layers.WMSLayer; -import com.esri.ags.layers.supportClasses.Field; -import com.esri.ags.layers.supportClasses.LOD; -import com.esri.ags.portal.WebMapUtil; -import com.esri.ags.tasks.GeometryServiceSingleton; -import com.esri.ags.virtualearth.VETiledLayer; -import com.esri.viewer.AppEvent; -import com.esri.viewer.ConfigData; -import com.esri.viewer.ViewerContainer; -import com.esri.viewer.utils.ErrorMessageUtil; -import com.esri.viewer.utils.LayerObjectUtil; -import com.esri.viewer.utils.LocalizationUtil; -import com.esri.viewer.utils.PortalBasemapAppender; - -import flash.events.Event; -import flash.events.EventDispatcher; -import flash.events.IOErrorEvent; -import flash.events.SecurityErrorEvent; - -import mx.collections.ArrayCollection; -import mx.rpc.Fault; -import mx.rpc.Responder; -import mx.rpc.events.FaultEvent; -import mx.rpc.events.ResultEvent; -import mx.rpc.http.HTTPService; - -[Event(name="configLoaded", type="com.esri.viewer.AppEvent")] - -/** - * ConfigManager is used to parse the configuration file and store the information in ConfigData. - * The default configuration file is config.xml, but you can specify an alternative configuration file, - * e.g. http://myserver/flexviewer/index.html?config=myconfig.xml - * - * The name of the default configuration file is specified in ViewerContainer.mxml. - */ -public class ConfigManager extends EventDispatcher -{ - private const CONFIG_MANAGER:String = "ConfigManager"; - private const DEFAULT_GEOMETRY_SERVICE_URL:String = "http://tasks.arcgisonline.com/ArcGIS/rest/services/Geometry/GeometryServer"; - - private var configData:ConfigData; - - public function ConfigManager() - { - //make sure the container is properly initialized and then - //proceed with configuration initialization. - AppEvent.addListener(ViewerContainer.CONTAINER_INITIALIZED, containerInitializedHandler); - } - - private function containerInitializedHandler(event:Event):void - { - loadConfig(); - } - - private function loadConfig():void - { - var configService:HTTPService = new HTTPService(); - configService.url = ViewerContainer.configFile; - configService.resultFormat = HTTPService.RESULT_FORMAT_TEXT; - configService.addEventListener(ResultEvent.RESULT, configService_resultHandler); - configService.addEventListener(FaultEvent.FAULT, configService_faultHandler); - configService.send(); - } - - private function configService_faultHandler(event:FaultEvent):void - { - var sInfo:String = ""; - - if (event.fault.rootCause is IOErrorEvent) - { - var ioe:IOErrorEvent = event.fault.rootCause as IOErrorEvent; - // Missing config file - if (ioe.errorID == 2032) - { - sInfo += LocalizationUtil.getDefaultString('missingConfigFileText', ViewerContainer.configFile) + "\n\n"; - } - else - { - // some other IOError - sInfo += event.fault.rootCause + "\n\n"; - } - } - - if (event.fault.rootCause is SecurityErrorEvent) - { - var sec:SecurityErrorEvent = event.fault.rootCause as SecurityErrorEvent; - // config file with crossdomain issue - if (sec.errorID == 2048) - { - sInfo += LocalizationUtil.getDefaultString('configFileCrossDomain', "\n", sec.toString()) + "\n\n"; - } - // some other Security error - else - { - sInfo += event.fault.rootCause + "\n\n"; - } - } - - if (event.statusCode) // e.g. 404 - Not Found - http://en.wikipedia.org/wiki/List_of_HTTP_status_codes - { - sInfo += LocalizationUtil.getDefaultString('httpResponseStatus', event.statusCode) + "\n\n"; - } - - sInfo += LocalizationUtil.getDefaultString('faultCode', event.fault.faultCode) + "\n\n"; - sInfo += LocalizationUtil.getDefaultString('faultInfo', event.fault.faultString) + "\n\n"; - sInfo += LocalizationUtil.getDefaultString('faultDetail', event.fault.faultDetail); - - AppEvent.showError(sInfo, CONFIG_MANAGER); - } - - private function configService_resultHandler(event:ResultEvent):void - { - try - { - //parse main configuration file to create config data object - configData = new ConfigData(); - var configXML:XML = XML(event.result); - configData.configXML = configXML; - - var i:int; - var j:int; - - //================================================ - //Proxy configuration - //================================================ - var proxyUrl:String = configXML.httpproxy; - if (proxyUrl) - { - configData.proxyUrl = proxyUrl; - } - - //================================================ - //BingKey configuration - //================================================ - var bingKey:String = configXML.bing.@key; - if (bingKey) - { - configData.bingKey = bingKey; - } - - //================================================ - //GeometryService configuration - //================================================ - var geometryService:XML = configXML.geometryservice[0]; - if (geometryService) - { - configData.geometryService.url = geometryService.@url[0] ? String(geometryService.@url[0]) : ""; - configData.geometryService.token = geometryService.@token[0] ? String(geometryService.@token[0]) : ""; - configData.geometryService.useproxy = geometryService.@useproxy[0] == "true"; - - GeometryServiceSingleton.instance.token = configData.geometryService.token; - if (configData.geometryService.useproxy) - { - GeometryServiceSingleton.instance.proxyURL = configData.proxyUrl; - } - var geometryServiceURL:String = configData.geometryService.url ? configData.geometryService.url : DEFAULT_GEOMETRY_SERVICE_URL; - GeometryServiceSingleton.instance.url = geometryServiceURL; - } - - //================================================ - //Style configuration - //================================================ - var styleAlpha:String = (XMLList(configXML.style.alpha).length() > 0) ? configXML.style.alpha : configXML.stylealpha; - if (styleAlpha) - { - configData.styleAlpha = Number(styleAlpha); - } - - var styleColors:Array = String(configXML.style.colors).split(","); - if (styleColors.length == 1) // if style.colors are not specified, then check for stylecolors for backwards compatibility with version 2.1 - { - styleColors = String(configXML.stylecolors).split(","); - } - - var colorStr:String = ""; - for each (colorStr in styleColors) - { - configData.styleColors.push(uint(colorStr)); - } - - var styleFontName:String = configXML.style.font.@name; - var styleFontSize:String = configXML.style.font.@size; - var font:Object = - { - id: "font", - name: styleFontName, - size: int(styleFontSize) - }; - configData.font = font; - - var styleTitleFontName:String = configXML.style.titlefont.@name; - var styleTitleFontSize:String = configXML.style.titlefont.@size; - var titleFont:Object = - { - id: "titleFont", - name: styleTitleFontName, - size: int(styleTitleFontSize) - }; - configData.titleFont = titleFont; - - var styleSubTitleFontName:String = configXML.style.subtitlefont.@name; - var styleSubTitleFontSize:String = configXML.style.subtitlefont.@size; - var subTitleFont:Object = - { - id: "subTitleFont", - name: styleSubTitleFontName, - size: int(styleSubTitleFontSize) - }; - configData.subTitleFont = subTitleFont; - - //================================================ - //layoutDirection configuration - //================================================ - var layoutDirection:String = configXML.layoutdirection; - if (layoutDirection) - { - configData.layoutDirection = layoutDirection; - } - - //================================================ - //user interface - //================================================ - var configUI:Array = []; - var value:String = configXML.title[0]; - var title:Object = - { - id: "title", - value: value - }; - configUI.push(title); - - value = configXML.subtitle[0]; - var subtitle:Object = - { - id: "subtitle", - value: value - }; - configUI.push(subtitle); - - value = configXML.logo[0]; - var logo:Object = - { - id: "logo", - value: value - }; - configUI.push(logo); - - value = configXML.splashpage.@url; - if (value) - { - var splashConfig:String = configXML.splashpage.@config; - var spashConfigXML:XML = null; - if (splashConfig.charAt(0) === "#") - { - spashConfigXML = configXML.configuration.(@id == splashConfig.substr(1))[0]; - } - var splashTitle:String = configXML.splashpage.@label; - var splashPage:Object = - { - id: "splashpage", - value: value, - config: splashConfig, - configXML: spashConfigXML, - title: splashTitle - }; - configUI.push(splashPage); - } - - var wleft:String = configXML.widgetcontainer.@left; - var wright:String = configXML.widgetcontainer.@right; - var wtop:String = configXML.widgetcontainer.@top; - var wbottom:String = configXML.widgetcontainer.@bottom; - var wlayout:String = configXML.widgetcontainer.@layout; - if (!wlayout) - { - wlayout = "horizontal"; - } - - if (wleft || wright || wtop || wbottom || wlayout) - { - var widgetContainer:Object = - { - id: "widgetcontainer", - left: wleft, - right: wright, - top: wtop, - bottom: wbottom, - layout: wlayout - }; - configUI.push(widgetContainer); - } - - configData.viewerUI = configUI; - - //================================================ - //controls - //================================================ - var configControls:Array = []; - var controlList:XMLList = configXML.widget; - var controlIdWeight:Number = 1000; - for (i = 0; i < controlList.length(); i++) - { - var controlIcon:String = controlList[i].@icon; - var controlLabel:String = controlList[i].@label; - var controlLeft:String = controlList[i].@left; - var controlRight:String = controlList[i].@right; - var controlTop:String = controlList[i].@top; - var controlBottom:String = controlList[i].@bottom; - var controlHorizontalCenter:String = controlList[i].@horizontalcenter; - var controlVerticalCenter:String = controlList[i].@verticalcenter; - var controlVisible:String = controlList[i].@visible; - var controlConfig:String = controlList[i].@config; - var controlUrl:String = controlList[i].@url; - - var controlConfigXML:XML = null; - if (controlConfig.charAt(0) === "#") - { - controlConfigXML = configXML.configuration.(@id == controlConfig.substr(1))[0]; - } - - var control:Object = - { - id: controlIdWeight + i, - icon: controlIcon, - label: controlLabel, - left: controlLeft, - right: controlRight, - top: controlTop, - bottom: controlBottom, - horizontalCenter: controlHorizontalCenter, - verticalCenter: controlVerticalCenter, - visible: controlVisible, - config: controlConfig, - configXML: controlConfigXML, - url: controlUrl - }; - configControls.push(control); - } - configData.controls = configControls; - - //================================================= - //map - //================================================ - var mapAttrs:Array = []; - var initialExtent:String = configXML.map.@initialextent; - if (ViewerContainer.urlConfigParams.extent != null) - { - var extentParam:String = ViewerContainer.urlConfigParams.extent; - initialExtent = extentParam.replace(/,/g, " "); - } - if (initialExtent) - { - var iExt:Object = - { - id: "initial", - extent: initialExtent - }; - mapAttrs.push(iExt); - } - var fullExtent:String = configXML.map.@fullextent; - if (fullExtent) - { - var fExt:Object = - { - id: "full", - extent: fullExtent - }; - mapAttrs.push(fExt); - } - var mapCenter:String = configXML.map.@center; - if (ViewerContainer.urlConfigParams.center != null) - { - var centerParam:String = ViewerContainer.urlConfigParams.center; - mapCenter = centerParam.replace(/,/g, " "); - } - if (mapCenter) - { - var centerObj:Object = - { - id: "center", - center: mapCenter - }; - mapAttrs.push(centerObj); - } - var mapLevel:String = configXML.map.@level; - if (ViewerContainer.urlConfigParams.level != null) - { - mapLevel = ViewerContainer.urlConfigParams.level; - } - if (mapLevel) - { - var levelObj:Object = - { - id: "level", - level: mapLevel - }; - mapAttrs.push(levelObj); - } - var mapScale:String = configXML.map.@scale; - if (ViewerContainer.urlConfigParams.scale != null) - { - mapScale = ViewerContainer.urlConfigParams.scale; - } - if (mapScale) - { - var scaleObj:Object = - { - id: "scale", - scale: mapScale - }; - mapAttrs.push(scaleObj); - } - - var mapLeft:Number; - var mapRight:Number; - var mapTop:Number; - var mapBottom:Number; - if (configXML.map.@left) - { - mapLeft = Number(configXML.map.@left); - } - if (configXML.map.@right) - { - mapRight = Number(configXML.map.@right); - } - if (configXML.map.@top) - { - mapTop = Number(configXML.map.@top); - } - if (configXML.map.@bottom) - { - mapBottom = Number(configXML.map.@bottom); - } - - var size:Object = - { - id: "map", - left: mapLeft, - right: mapRight, - top: mapTop, - bottom: mapBottom - }; - mapAttrs.push(size); - - var wkid:Number; - var wkt:String; - if (configXML.map.@wkid[0]) - { - wkid = Number(configXML.map.@wkid); - } - if (configXML.map.@wkt[0]) - { - wkt = configXML.map.@wkt; - } - var ref:Object = - { - id: "spatialref", - wkid: wkid, - wkt: wkt - }; - mapAttrs.push(ref); - - var zoomSliderVisible:Boolean = configXML.map.@zoomslidervisible == "true"; - var zoomSliderVisibility:Object = - { - id: "zoomSlider", - zoomSliderVisible: zoomSliderVisible - }; - mapAttrs.push(zoomSliderVisibility); - - var scaleBarVisible:Boolean = configXML.map.@scalebarvisible[0] ? configXML.map.@scalebarvisible == "true" : true; - var scaleBarStyleName:String = configXML.map.@scalebar[0]; - var scaleBarProperties:Object = - { - id: "scaleBar", - scaleBarVisible: scaleBarVisible, - scaleBarStyleName: scaleBarStyleName - }; - mapAttrs.push(scaleBarProperties); - - var esriLogoVisible:Boolean = configXML.map.@esrilogovisible[0] ? configXML.map.@esrilogovisible == "true" : true; - var esriLogoVisibility:Object = - { - id: "esriLogo", - esriLogoVisible: esriLogoVisible - }; - mapAttrs.push(esriLogoVisibility); - - var openHandCursorVisible:Boolean = configXML.map.@openhandcursorvisible[0] ? configXML.map.@openhandcursorvisible == "true" : false; - var openHandCursorVisiblility:Object = - { - id: "openHandCursor", - openHandCursorVisible: openHandCursorVisible - }; - mapAttrs.push(openHandCursorVisiblility); - - var wrapAround180:Boolean = configXML.map.@wraparound180[0] ? configXML.map.@wraparound180 == "true" : false; - var wrapAround180Attr:Object = - { - id: "wrapAround180", - wrapAround180: wrapAround180 - }; - mapAttrs.push(wrapAround180Attr); - - var mapRotation:Number = parseFloat(configXML.map.@rotation[0]); - if (!isNaN(mapRotation)) - { - var mapRotationAttr:Object = - { - id: "mapRotation", - mapRotation: mapRotation - }; - mapAttrs.push(mapRotationAttr); - } - - var panEasingFactor:Number = parseFloat(configXML.map.@paneasingfactor[0]); - if (!isNaN(panEasingFactor)) - { - var panEasingFactorAttr:Object = - { - id: "panEasingFactor", - panEasingFactor: panEasingFactor - }; - mapAttrs.push(panEasingFactorAttr); - } - - var units:String = configXML.map.@units[0]; - if (units) - { - var unitsAttr:Object = - { - id: "units", - units: units - }; - mapAttrs.push(unitsAttr); - } - - var lodsList:XMLList = configXML.map.lods.lod; - if (lodsList.length() > 0) - { - var lods:Array = []; - for each (var lod:XML in lodsList) - { - var resolution:Number = lod.@resolution; - var scale:Number = lod.@scale; - lods.push(new LOD(NaN, resolution, scale)); - } - mapAttrs.push({ id: "lods", lods: lods }); - } - - if (configXML.map.@attributionvisible[0]) - { - var attributionVisible:Boolean = configXML.map.@attributionvisible[0] != "false"; - var attributionVisibleAttr:Object = - { - id: "attributionVisible", - attributionVisible: attributionVisible - }; - mapAttrs.push(attributionVisibleAttr); - } - - configData.mapAttrs = mapAttrs; - - var configWebMapItemID:String = configXML.map.@webmap[0] || configXML.map.@itemid[0]; - var urlConfigWebMapItemID:String = ViewerContainer.urlConfigParams.webmap || ViewerContainer.urlConfigParams.itemid; - var webMapItemID:String = urlConfigWebMapItemID ? urlConfigWebMapItemID : configWebMapItemID; - - var portalURL:String = configXML.map.@portalurl[0] || configXML.map.@arcgissharingurl[0]; - var addArcGISBasemaps:Boolean = configXML.map.@addarcgisbasemaps[0] == "true"; - - if (webMapItemID) - { - var webMapUtil:WebMapUtil = new WebMapUtil(); - webMapUtil.bingMapsKey = configData.bingKey; - webMapUtil.proxyURL = configData.proxyUrl; - if (GeometryServiceSingleton.instance.url) - { - webMapUtil.geometryService = GeometryServiceSingleton.instance; - } - if (portalURL) - { - webMapUtil.portalURL = portalURL; - } - webMapUtil.createMapById(webMapItemID, new Responder(webMapUtil_createMapByIdResultHandler, webMapUtil_createMapByIdFaultHandler)); - function webMapUtil_createMapByIdResultHandler(result:WebMapEvent):void - { - if (!title.value) - { - title.value = result.item.title; - } - - var baseMapTitle:String; - if (result.itemData.baseMap) - { - baseMapTitle = result.itemData.baseMap.title; - } - - var layers:ArrayCollection = result.map.layers as ArrayCollection; - for (i = 0; i < layers.length; i++) - { - var layer:Layer = layers[i]; - var isOpLayer:Boolean = layer.id.indexOf("base") != 0; - - if (!isOpLayer && !baseMapTitle && i == 0) - { - baseMapTitle = layer.name; - } - - var label:String = baseMapTitle; - if (isOpLayer) - { - label = layer.name; - } - layer.id = label; - - var lyrXML:XML = createLayerXML(layer, label); - if (lyrXML) - { - if (isOpLayer) - { - configData.opLayers.push(LayerObjectUtil.getLayerObject(lyrXML, i, true, bingKey, layer, proxyUrl)); - } - else - { - if (configData.opLayers.length > 0) - { - lyrXML.@reference = true; - } - configData.basemaps.push(LayerObjectUtil.getLayerObject(lyrXML, i, false, bingKey, layer, proxyUrl)); - } - } - } - if (!initialExtent) - { - var extent:Extent = result.map.extent; - if (extent) - { - var extentArr:Array = [ extent.xmin, extent.ymin, extent.xmax, extent.ymax ]; - var iExt:Object = - { - id: "initial", - extent: extentArr.join(" ") - }; - mapAttrs.push(iExt); - } - } - - configData.webMapData = result.itemData; - - if (addArcGISBasemaps) - { - appendPortalBasemaps(portalURL); - } - else - { - AppEvent.dispatch(AppEvent.CONFIG_LOADED, configData); - } - } - - function webMapUtil_createMapByIdFaultHandler(error:Fault):void - { - AppEvent.showError( - ErrorMessageUtil.getKnownErrorCauseMessage(error) - + "\n\n" + ErrorMessageUtil.buildFaultMessage(error), CONFIG_MANAGER); - } - } - else - { - //================================================ - //map:basemaps - //================================================ - var configBasemaps:Array = []; - var maplayerList:XMLList = configXML.map.basemaps.mapservice; // TODO - is this still in use ??? - - if (maplayerList.length() < 1) - { - maplayerList = configXML.map.basemaps.layer; - } - - for (i = 0; i < maplayerList.length(); i++) - { - configBasemaps.push(LayerObjectUtil.getLayerObject(maplayerList[i], i, false, bingKey, null, proxyUrl)); - } - configData.basemaps = configBasemaps; - - //================================================ - //map:operationalLayers - //================================================ - var configOpLayers:Array = []; - var opLayerList:XMLList = configXML.map.operationallayers.layer; - for (i = 0; i < opLayerList.length(); i++) - { - configOpLayers.push(LayerObjectUtil.getLayerObject(opLayerList[i], i, true, bingKey, null, proxyUrl)); - } - configData.opLayers = configOpLayers; - } - - //================================================= - //widgets - //================================================ - var configWidgets:Array = []; - var widgetContainerList:XMLList = configXML.widgetcontainer; - var widgetId:Number = 0; - for (var w:int = 0; w < widgetContainerList.length(); w++) - { - var wContainer:XML = widgetContainerList[w] as XML; - var isPartOfPanel:Boolean = wContainer.@paneltype[0] ? true : false; - for (i = 0; i < wContainer.children().length(); i++) - { - var xmlObject:XML = wContainer.children()[i]; - if (xmlObject.name() == "widgetgroup") - { - var widgetGroupList:XMLList = XMLList(xmlObject); - createWidgets(widgetGroupList.widget, true, isPartOfPanel, widgetGroupList.widget.length(), widgetGroupList.@label, widgetGroupList.@icon); - } - else - { - var widgetList:XMLList = XMLList(xmlObject); - createWidgets(widgetList, false, isPartOfPanel); - } - } - } - - function createWidgets(widgetList:XMLList, grouped:Boolean, isPartOfPanel:Boolean, groupLength:Number = 0, groupLabel:String = null, groupIcon:String = null):void - { - var widgetListLength:int = widgetList.length(); - for (var p:int = 0; p < widgetListLength; p++) - { - // if grouped - var wGrouped:Boolean = grouped; - var wGroupLength:Number = groupLength; - var wGroupIcon:String = groupIcon; - var wGroupLabel:String = groupLabel; - - var wLabel:String = widgetList[p].@label; - var wIcon:String = widgetList[p].@icon; - var wConfig:String = widgetList[p].@config; - var wPreload:String = widgetList[p].@preload; - var wWidth:String = widgetList[p].@width; - var wHeight:String = widgetList[p].@height; - var wUrl:String = widgetList[p].@url; - var wx:String = widgetList[p].@x; - var wy:String = widgetList[p].@y; - var wLeft:String = widgetList[p].@left; - var wTop:String = widgetList[p].@top; - var wRight:String = widgetList[p].@right; - var wBottom:String = widgetList[p].@bottom; - - // Look for embedded configuration - var wConfigXML:XML = null; - if (wConfig.charAt(0) === "#") - { - wConfigXML = configXML.configuration.(@id == wConfig.substr(1))[0]; - } - if (!wGroupIcon) - { - wGroupIcon = ViewerContainer.DEFAULT_WIDGET_GROUP_ICON; - } - if (!wIcon) - { - wIcon = ViewerContainer.DEFAULT_WIDGET_ICON; - } - - var widget:Object = - { - id: widgetId, - grouped: wGrouped, - groupLength: wGroupLength, - groupIcon: wGroupIcon, - groupLabel: wGroupLabel, - label: wLabel, - icon: wIcon, - config: wConfig, - configXML: wConfigXML, // reference to emdedded XML configuration (if any) - preload: wPreload, - width: wWidth, - height: wHeight, - x: wx, - y: wy, - left: wLeft, - top: wTop, - right: wRight, - bottom: wBottom, - url: wUrl, - isPartOfPanel: isPartOfPanel - }; - configWidgets.push(widget); - widgetId++; - } - } - configData.widgets = configWidgets; - - //================================================= - //widgetContainers - // [] ={container, widgets} - //================================================ - - var wContainers:XMLList = configXML.widgetcontainer; - var configWContainers:Array = []; - var wid:uint; - var n:int; - var xmlObj:XML; - for (i = 0; i < wContainers.length(); i++) - { - //get container parameters - var wcPanelType:String = wContainers[i].@paneltype; - - var wgContainer:Object; - var contWidgets:Array = []; - if (wcPanelType) - { - var wcSize:String = wContainers[i].@size; - var wcInitialState:String = "open"; - if (wContainers[i].@initialstate[0]) - { - wcInitialState = wContainers[i].@initialstate; - } - wgContainer = - { - id: i, - panelType: wcPanelType, - initialState: wcInitialState, - size: wcSize, - obj: null - }; - - //get widget for this container - wid = 0; - for (n = 0; n < wContainers[i].children().length(); n++) - { - xmlObj = wContainers[i].children()[n]; - - var wgLabel:String = xmlObj.@label; - var wgConfig:String = xmlObj.@config; - var wgWidth:String = xmlObj.@width; - var wgHeight:String = xmlObj.@height; - var wgUrl:String = xmlObj.@url; - - var wgConfigXML:XML = null; - if (wgConfig.charAt(0) === "#") - { - wgConfigXML = configXML.configuration.(@id == wgConfig.substr(1))[0]; - } - var wg:Object = - { - id: wid, - label: wgLabel, - config: wgConfig, - configXML: wgConfigXML, // reference to enbedded XML configuration (if any) - width: wgWidth, - height: wgHeight, - url: wgUrl, - isPartOfPanel: true - }; - contWidgets.push(wg); - - //indexing - var windex:Object = { container: i, widget: wid }; - configData.widgetIndex.push(windex); - wid++; - } - } - else - { - var wcUrl:String = wContainers[i].@url; - if (!wcUrl) - { - wcUrl = ViewerContainer.DEFAULT_WIDGET_CONTAINER_WIDGET; - } - - var wcLeft:String = wContainers[i].@left; - var wcRight:String = wContainers[i].@right; - var wcTop:String = wContainers[i].@top; - var wcBottom:String = wContainers[i].@bottom; - var wcLayout:String = wContainers[i].@layout; - - if (!wcLayout) - { - wcLayout = ViewerContainer.DEFAULT_WIDGET_LAYOUT; - } - - wgContainer = - { - id: i, - left: wcLeft, - right: wcRight, - top: wcTop, - bottom: wcBottom, - layout: wcLayout, - url: wcUrl, - obj: null - }; - - //get widgets for this container - wid = 0; - for (n = 0; n < wContainers[i].children().length(); n++) - { - xmlObj = wContainers[i].children()[n]; - if (xmlObj.name() == "widgetgroup") - { - var widgetGrpList:XMLList = XMLList(xmlObj); - getWidgetList(widgetGrpList.widget, true, widgetGrpList.widget.length(), widgetGrpList.@label, widgetGrpList.@icon); - } - else - { - var wdgtList:XMLList = XMLList(xmlObj); - getWidgetList(wdgtList, false); - } - } - - function getWidgetList(wgList:XMLList, grouped:Boolean, groupLength:Number = 0, groupLabel:String = null, groupIcon:String = null):void - { - for (j = 0; j < wgList.length(); j++) - { - // if grouped - var wgGrouped:Boolean = grouped; - var wgGroupLength:Number = groupLength; - var wgGroupIcon:String = groupIcon; - var wgGroupLabel:String = groupLabel; - - var wgLabel:String = wgList[j].@label; - var wgIcon:String = wgList[j].@icon; - var wgConfig:String = wgList[j].@config; - var wgPreload:String = wgList[j].@preload; - var wgWidth:String = wgList[j].@width; - var wgHeight:String = wgList[j].@height; - var wgUrl:String = wgList[j].@url; - var wgx:String = wgList[j].@x; - var wgy:String = wgList[j].@y; - var wgLeft:String = wgList[j].@left; - var wgTop:String = wgList[j].@top; - var wgRight:String = wgList[j].@right; - var wgBottom:String = wgList[j].@bottom; - var wHorizontalCenter:String = wgList[j].@horizontalcenter; - var wVerticalCenter:String = wgList[j].@verticalcenter; - - var wgConfigXML:XML = null; - if (wgConfig.charAt(0) === "#") - { - wgConfigXML = configXML.configuration.(@id == wgConfig.substr(1))[0]; - } - if (!wgGroupIcon) - { - wgGroupIcon = ViewerContainer.DEFAULT_WIDGET_GROUP_ICON; - } - if (!wgIcon) - { - wgIcon = ViewerContainer.DEFAULT_WIDGET_ICON; - } - - var wg:Object = - { - id: wid, - grouped: wgGrouped, - groupLength: wgGroupLength, - groupIcon: wgGroupIcon, - groupLabel: wgGroupLabel, - label: wgLabel, - icon: wgIcon, - config: wgConfig, - configXML: wgConfigXML, // reference to enbedded XML configuration (if any) - preload: wgPreload, - width: wgWidth, - height: wgHeight, - x: wgx, - y: wgy, - left: wgLeft, - right: wgRight, - top: wgTop, - bottom: wgBottom, - horizontalCenter: wHorizontalCenter, - verticalCenter: wVerticalCenter, - url: wgUrl, - isPartOfPanel: false - }; - contWidgets.push(wg); - - //indexing - var windex:Object = { container: i, widget: wid }; - configData.widgetIndex.push(windex); - wid++; - } - } - } - - var container:Object = { container: wgContainer, widgets: contWidgets }; - configWContainers.push(container); - } - configData.widgetContainers = configWContainers; - - if (!webMapItemID) - { - //================================================ - //announce configuration is complete - //================================================ - if (addArcGISBasemaps) - { - appendPortalBasemaps(portalURL); - } - else - { - AppEvent.dispatch(AppEvent.CONFIG_LOADED, configData); - } - } - } - catch (error:Error) - { - AppEvent.showError(LocalizationUtil.getDefaultString("parseConfigErrorText", ViewerContainer.configFile + "\n" + error.message), CONFIG_MANAGER); - } - } - - private function createLayerXML(layer:Layer, label:String):XML - { - var lyrXML:XML = null; - if (layer is ArcGISDynamicMapServiceLayer) - { - var dynLyr:ArcGISDynamicMapServiceLayer = layer as ArcGISDynamicMapServiceLayer; - lyrXML = ; - if (dynLyr.visibleLayers) - { - lyrXML.@visiblelayers = dynLyr.visibleLayers.toArray().join(); - } - } - else if (layer is ArcGISImageServiceLayer) - { - var imgLyr:ArcGISImageServiceLayer = layer as ArcGISImageServiceLayer; - lyrXML = ; - if (imgLyr.bandIds) - { - lyrXML.@bandids = imgLyr.bandIds.join(); - } - } - else if (layer is ArcGISTiledMapServiceLayer) - { - var tiledLyr:ArcGISTiledMapServiceLayer = layer as ArcGISTiledMapServiceLayer; - lyrXML = ; - if (tiledLyr.displayLevels) - { - lyrXML.@displaylevels = tiledLyr.displayLevels.join(); - } - } - else if (layer is FeatureLayer && !(layer is CSVLayer)) - { - var feaLyr:FeatureLayer = layer as FeatureLayer; - if (feaLyr.featureCollection) - { - lyrXML = - } - else - { - lyrXML = ; - } - } - else if (layer is OpenStreetMapLayer) - { - var osmLyr:OpenStreetMapLayer = layer as OpenStreetMapLayer; - lyrXML = ; - } - else if (layer is VETiledLayer) - { - var veLyr:VETiledLayer = layer as VETiledLayer; - lyrXML = ; - if (veLyr.displayLevels) - { - lyrXML.@displaylevels = veLyr.displayLevels.join(); - } - } - else if (layer is KMLLayer) - { - var kmlLayer:KMLLayer = layer as KMLLayer; - lyrXML = ; - } - else if (layer is WMSLayer) - { - var wmsLayer:WMSLayer = layer as WMSLayer; - lyrXML = ; - if (wmsLayer.maxImageHeight > 0) - { - lyrXML.@maximageheight = wmsLayer.maxImageHeight; - } - if (wmsLayer.maxImageWidth > 0) - { - lyrXML.@maximagewidth = wmsLayer.maxImageWidth; - } - if (wmsLayer.visibleLayers) - { - lyrXML.@visiblelayers = wmsLayer.visibleLayers.toArray().join(); - } - } - else if (layer is CSVLayer) - { - var csvLyr:CSVLayer = layer as CSVLayer; - lyrXML = ; - if (csvLyr.columnDelimiter != ",") - { - lyrXML.@columndelimiter = csvLyr.columnDelimiter; - } - if (csvLyr.sourceFields) - { - var fields:Array = []; - for each (var field:Field in csvLyr.sourceFields) - { - fields.push(field.name + "|" + field.alias + "|" + field.type); - } - lyrXML.@sourcefields = fields.join(); - } - } - return lyrXML; - } - - private function appendPortalBasemaps(portalURL:String):void - { - var basemapAppender:PortalBasemapAppender = new PortalBasemapAppender(portalURL, configData); - basemapAppender.addEventListener(Event.COMPLETE, basemapAppender_completeHandler); - basemapAppender.fetchAndAppendPortalBasemaps(); - } - - protected function basemapAppender_completeHandler(event:Event):void - { - (event.currentTarget as PortalBasemapAppender).removeEventListener(Event.COMPLETE, basemapAppender_completeHandler); - AppEvent.dispatch(AppEvent.CONFIG_LOADED, configData); - } -} -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2010-2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package com.esri.viewer.managers +{ + +import com.esri.ags.events.WebMapEvent; +import com.esri.ags.geometry.Extent; +import com.esri.ags.layers.ArcGISDynamicMapServiceLayer; +import com.esri.ags.layers.ArcGISImageServiceLayer; +import com.esri.ags.layers.ArcGISTiledMapServiceLayer; +import com.esri.ags.layers.CSVLayer; +import com.esri.ags.layers.FeatureLayer; +import com.esri.ags.layers.KMLLayer; +import com.esri.ags.layers.Layer; +import com.esri.ags.layers.OpenStreetMapLayer; +import com.esri.ags.layers.WMSLayer; +import com.esri.ags.layers.supportClasses.Field; +import com.esri.ags.layers.supportClasses.LOD; +import com.esri.ags.portal.WebMapUtil; +import com.esri.ags.tasks.GeometryServiceSingleton; +import com.esri.ags.virtualearth.VETiledLayer; +import com.esri.viewer.AppEvent; +import com.esri.viewer.ConfigData; +import com.esri.viewer.ViewerContainer; +import com.esri.viewer.utils.ErrorMessageUtil; +import com.esri.viewer.utils.LayerObjectUtil; +import com.esri.viewer.utils.LocalizationUtil; +import com.esri.viewer.utils.PortalBasemapAppender; + +import flash.events.Event; +import flash.events.EventDispatcher; +import flash.events.IOErrorEvent; +import flash.events.SecurityErrorEvent; + +import mx.collections.ArrayCollection; +import mx.rpc.Fault; +import mx.rpc.Responder; +import mx.rpc.events.FaultEvent; +import mx.rpc.events.ResultEvent; +import mx.rpc.http.HTTPService; + +[Event(name="configLoaded", type="com.esri.viewer.AppEvent")] + +/** + * ConfigManager is used to parse the configuration file and store the information in ConfigData. + * The default configuration file is config.xml, but you can specify an alternative configuration file, + * e.g. http://myserver/flexviewer/index.html?config=myconfig.xml + * + * The name of the default configuration file is specified in ViewerContainer.mxml. + */ +public class ConfigManager extends EventDispatcher +{ + private const CONFIG_MANAGER:String = "ConfigManager"; + private const DEFAULT_GEOMETRY_SERVICE_URL:String = "http://tasks.arcgisonline.com/ArcGIS/rest/services/Geometry/GeometryServer"; + + private var configData:ConfigData; + + public function ConfigManager() + { + //make sure the container is properly initialized and then + //proceed with configuration initialization. + AppEvent.addListener(ViewerContainer.CONTAINER_INITIALIZED, containerInitializedHandler); + } + + private function containerInitializedHandler(event:Event):void + { + loadConfig(); + } + + private function loadConfig():void + { + var configService:HTTPService = new HTTPService(); + configService.url = ViewerContainer.configFile; + configService.resultFormat = HTTPService.RESULT_FORMAT_TEXT; + configService.addEventListener(ResultEvent.RESULT, configService_resultHandler); + configService.addEventListener(FaultEvent.FAULT, configService_faultHandler); + configService.send(); + } + + private function configService_faultHandler(event:FaultEvent):void + { + var sInfo:String = ""; + + if (event.fault.rootCause is IOErrorEvent) + { + var ioe:IOErrorEvent = event.fault.rootCause as IOErrorEvent; + // Missing config file + if (ioe.errorID == 2032) + { + sInfo += LocalizationUtil.getDefaultString('missingConfigFileText', ViewerContainer.configFile) + "\n\n"; + } + else + { + // some other IOError + sInfo += event.fault.rootCause + "\n\n"; + } + } + + if (event.fault.rootCause is SecurityErrorEvent) + { + var sec:SecurityErrorEvent = event.fault.rootCause as SecurityErrorEvent; + // config file with crossdomain issue + if (sec.errorID == 2048) + { + sInfo += LocalizationUtil.getDefaultString('configFileCrossDomain', "\n", sec.toString()) + "\n\n"; + } + // some other Security error + else + { + sInfo += event.fault.rootCause + "\n\n"; + } + } + + if (event.statusCode) // e.g. 404 - Not Found - http://en.wikipedia.org/wiki/List_of_HTTP_status_codes + { + sInfo += LocalizationUtil.getDefaultString('httpResponseStatus', event.statusCode) + "\n\n"; + } + + sInfo += LocalizationUtil.getDefaultString('faultCode', event.fault.faultCode) + "\n\n"; + sInfo += LocalizationUtil.getDefaultString('faultInfo', event.fault.faultString) + "\n\n"; + sInfo += LocalizationUtil.getDefaultString('faultDetail', event.fault.faultDetail); + + AppEvent.showError(sInfo, CONFIG_MANAGER); + } + + private function configService_resultHandler(event:ResultEvent):void + { + try + { + //parse main configuration file to create config data object + configData = new ConfigData(); + var configXML:XML = XML(event.result); + configData.configXML = configXML; + + var i:int; + var j:int; + + //================================================ + //Proxy configuration + //================================================ + var proxyUrl:String = configXML.httpproxy; + if (proxyUrl) + { + configData.proxyUrl = proxyUrl; + } + + //================================================ + //BingKey configuration + //================================================ + var bingKey:String = configXML.bing.@key; + if (bingKey) + { + configData.bingKey = bingKey; + } + + //================================================ + //GeometryService configuration + //================================================ + var geometryService:XML = configXML.geometryservice[0]; + if (geometryService) + { + configData.geometryService.url = geometryService.@url[0] ? String(geometryService.@url[0]) : ""; + configData.geometryService.token = geometryService.@token[0] ? String(geometryService.@token[0]) : ""; + configData.geometryService.useproxy = geometryService.@useproxy[0] == "true"; + + GeometryServiceSingleton.instance.token = configData.geometryService.token; + if (configData.geometryService.useproxy) + { + GeometryServiceSingleton.instance.proxyURL = configData.proxyUrl; + } + var geometryServiceURL:String = configData.geometryService.url ? configData.geometryService.url : DEFAULT_GEOMETRY_SERVICE_URL; + GeometryServiceSingleton.instance.url = geometryServiceURL; + } + + //================================================ + //Style configuration + //================================================ + var styleAlpha:String = (XMLList(configXML.style.alpha).length() > 0) ? configXML.style.alpha : configXML.stylealpha; + if (styleAlpha) + { + configData.styleAlpha = Number(styleAlpha); + } + + var styleColors:Array = String(configXML.style.colors).split(","); + if (styleColors.length == 1) // if style.colors are not specified, then check for stylecolors for backwards compatibility with version 2.1 + { + styleColors = String(configXML.stylecolors).split(","); + } + + var colorStr:String = ""; + for each (colorStr in styleColors) + { + configData.styleColors.push(uint(colorStr)); + } + + var styleFontName:String = configXML.style.font.@name; + var styleFontSize:String = configXML.style.font.@size; + var font:Object = + { + id: "font", + name: styleFontName, + size: int(styleFontSize) + }; + configData.font = font; + + var styleTitleFontName:String = configXML.style.titlefont.@name; + var styleTitleFontSize:String = configXML.style.titlefont.@size; + var titleFont:Object = + { + id: "titleFont", + name: styleTitleFontName, + size: int(styleTitleFontSize) + }; + configData.titleFont = titleFont; + + var styleSubTitleFontName:String = configXML.style.subtitlefont.@name; + var styleSubTitleFontSize:String = configXML.style.subtitlefont.@size; + var subTitleFont:Object = + { + id: "subTitleFont", + name: styleSubTitleFontName, + size: int(styleSubTitleFontSize) + }; + configData.subTitleFont = subTitleFont; + + //================================================ + //layoutDirection configuration + //================================================ + var layoutDirection:String = configXML.layoutdirection; + if (layoutDirection) + { + configData.layoutDirection = layoutDirection; + } + + //================================================ + //user interface + //================================================ + var configUI:Array = []; + var value:String = configXML.title[0]; + var title:Object = + { + id: "title", + value: value + }; + configUI.push(title); + + value = configXML.subtitle[0]; + var subtitle:Object = + { + id: "subtitle", + value: value + }; + configUI.push(subtitle); + + value = configXML.logo[0]; + var logo:Object = + { + id: "logo", + value: value + }; + configUI.push(logo); + + value = configXML.splashpage.@url; + if (value) + { + var splashConfig:String = configXML.splashpage.@config; + var spashConfigXML:XML = null; + if (splashConfig.charAt(0) === "#") + { + spashConfigXML = configXML.configuration.(@id == splashConfig.substr(1))[0]; + } + var splashTitle:String = configXML.splashpage.@label; + var splashPage:Object = + { + id: "splashpage", + value: value, + config: splashConfig, + configXML: spashConfigXML, + title: splashTitle + }; + configUI.push(splashPage); + } + + var wleft:String = configXML.widgetcontainer.@left; + var wright:String = configXML.widgetcontainer.@right; + var wtop:String = configXML.widgetcontainer.@top; + var wbottom:String = configXML.widgetcontainer.@bottom; + var wlayout:String = configXML.widgetcontainer.@layout; + if (!wlayout) + { + wlayout = "horizontal"; + } + + if (wleft || wright || wtop || wbottom || wlayout) + { + var widgetContainer:Object = + { + id: "widgetcontainer", + left: wleft, + right: wright, + top: wtop, + bottom: wbottom, + layout: wlayout + }; + configUI.push(widgetContainer); + } + + configData.viewerUI = configUI; + + //================================================ + //controls + //================================================ + var configControls:Array = []; + var controlList:XMLList = configXML.widget; + var controlIdWeight:Number = 1000; + for (i = 0; i < controlList.length(); i++) + { + var controlIcon:String = controlList[i].@icon; + var controlLabel:String = controlList[i].@label; + var controlLeft:String = controlList[i].@left; + var controlRight:String = controlList[i].@right; + var controlTop:String = controlList[i].@top; + var controlBottom:String = controlList[i].@bottom; + var controlHorizontalCenter:String = controlList[i].@horizontalcenter; + var controlVerticalCenter:String = controlList[i].@verticalcenter; + var controlVisible:String = controlList[i].@visible; + var controlConfig:String = controlList[i].@config; + var controlUrl:String = controlList[i].@url; + + var controlConfigXML:XML = null; + if (controlConfig.charAt(0) === "#") + { + controlConfigXML = configXML.configuration.(@id == controlConfig.substr(1))[0]; + } + + var control:Object = + { + id: controlIdWeight + i, + icon: controlIcon, + label: controlLabel, + left: controlLeft, + right: controlRight, + top: controlTop, + bottom: controlBottom, + horizontalCenter: controlHorizontalCenter, + verticalCenter: controlVerticalCenter, + visible: controlVisible, + config: controlConfig, + configXML: controlConfigXML, + url: controlUrl + }; + configControls.push(control); + } + configData.controls = configControls; + + //================================================= + //map + //================================================ + var mapAttrs:Array = []; + var initialExtent:String = configXML.map.@initialextent; + if (ViewerContainer.urlConfigParams.extent != null) + { + var extentParam:String = ViewerContainer.urlConfigParams.extent; + initialExtent = extentParam.replace(/,/g, " "); + } + if (initialExtent) + { + var iExt:Object = + { + id: "initial", + extent: initialExtent + }; + mapAttrs.push(iExt); + } + var fullExtent:String = configXML.map.@fullextent; + if (fullExtent) + { + var fExt:Object = + { + id: "full", + extent: fullExtent + }; + mapAttrs.push(fExt); + } + var mapCenter:String = configXML.map.@center; + if (ViewerContainer.urlConfigParams.center != null) + { + var centerParam:String = ViewerContainer.urlConfigParams.center; + mapCenter = centerParam.replace(/,/g, " "); + } + if (mapCenter) + { + var centerObj:Object = + { + id: "center", + center: mapCenter + }; + mapAttrs.push(centerObj); + } + var mapLevel:String = configXML.map.@level; + if (ViewerContainer.urlConfigParams.level != null) + { + mapLevel = ViewerContainer.urlConfigParams.level; + } + if (mapLevel) + { + var levelObj:Object = + { + id: "level", + level: mapLevel + }; + mapAttrs.push(levelObj); + } + var mapScale:String = configXML.map.@scale; + if (ViewerContainer.urlConfigParams.scale != null) + { + mapScale = ViewerContainer.urlConfigParams.scale; + } + if (mapScale) + { + var scaleObj:Object = + { + id: "scale", + scale: mapScale + }; + mapAttrs.push(scaleObj); + } + + var mapLeft:Number; + var mapRight:Number; + var mapTop:Number; + var mapBottom:Number; + if (configXML.map.@left) + { + mapLeft = Number(configXML.map.@left); + } + if (configXML.map.@right) + { + mapRight = Number(configXML.map.@right); + } + if (configXML.map.@top) + { + mapTop = Number(configXML.map.@top); + } + if (configXML.map.@bottom) + { + mapBottom = Number(configXML.map.@bottom); + } + + var size:Object = + { + id: "map", + left: mapLeft, + right: mapRight, + top: mapTop, + bottom: mapBottom + }; + mapAttrs.push(size); + + var wkid:Number; + var wkt:String; + if (configXML.map.@wkid[0]) + { + wkid = Number(configXML.map.@wkid); + } + if (configXML.map.@wkt[0]) + { + wkt = configXML.map.@wkt; + } + var ref:Object = + { + id: "spatialref", + wkid: wkid, + wkt: wkt + }; + mapAttrs.push(ref); + + var zoomSliderVisible:Boolean = configXML.map.@zoomslidervisible == "true"; + var zoomSliderVisibility:Object = + { + id: "zoomSlider", + zoomSliderVisible: zoomSliderVisible + }; + mapAttrs.push(zoomSliderVisibility); + + var scaleBarVisible:Boolean = configXML.map.@scalebarvisible[0] ? configXML.map.@scalebarvisible == "true" : true; + var scaleBarStyleName:String = configXML.map.@scalebar[0]; + var scaleBarProperties:Object = + { + id: "scaleBar", + scaleBarVisible: scaleBarVisible, + scaleBarStyleName: scaleBarStyleName + }; + mapAttrs.push(scaleBarProperties); + + var esriLogoVisible:Boolean = configXML.map.@esrilogovisible[0] ? configXML.map.@esrilogovisible == "true" : true; + var esriLogoVisibility:Object = + { + id: "esriLogo", + esriLogoVisible: esriLogoVisible + }; + mapAttrs.push(esriLogoVisibility); + + var openHandCursorVisible:Boolean = configXML.map.@openhandcursorvisible[0] ? configXML.map.@openhandcursorvisible == "true" : false; + var openHandCursorVisiblility:Object = + { + id: "openHandCursor", + openHandCursorVisible: openHandCursorVisible + }; + mapAttrs.push(openHandCursorVisiblility); + + var wrapAround180:Boolean = configXML.map.@wraparound180[0] ? configXML.map.@wraparound180 == "true" : false; + var wrapAround180Attr:Object = + { + id: "wrapAround180", + wrapAround180: wrapAround180 + }; + mapAttrs.push(wrapAround180Attr); + + var mapRotation:Number = parseFloat(configXML.map.@rotation[0]); + if (!isNaN(mapRotation)) + { + var mapRotationAttr:Object = + { + id: "mapRotation", + mapRotation: mapRotation + }; + mapAttrs.push(mapRotationAttr); + } + + var panEasingFactor:Number = parseFloat(configXML.map.@paneasingfactor[0]); + if (!isNaN(panEasingFactor)) + { + var panEasingFactorAttr:Object = + { + id: "panEasingFactor", + panEasingFactor: panEasingFactor + }; + mapAttrs.push(panEasingFactorAttr); + } + + var units:String = configXML.map.@units[0]; + if (units) + { + var unitsAttr:Object = + { + id: "units", + units: units + }; + mapAttrs.push(unitsAttr); + } + + var lodsList:XMLList = configXML.map.lods.lod; + if (lodsList.length() > 0) + { + var lods:Array = []; + for each (var lod:XML in lodsList) + { + var resolution:Number = lod.@resolution; + var scale:Number = lod.@scale; + lods.push(new LOD(NaN, resolution, scale)); + } + mapAttrs.push({ id: "lods", lods: lods }); + } + + if (configXML.map.@attributionvisible[0]) + { + var attributionVisible:Boolean = configXML.map.@attributionvisible[0] != "false"; + var attributionVisibleAttr:Object = + { + id: "attributionVisible", + attributionVisible: attributionVisible + }; + mapAttrs.push(attributionVisibleAttr); + } + + configData.mapAttrs = mapAttrs; + + var configWebMapItemID:String = configXML.map.@webmap[0] || configXML.map.@itemid[0]; + var urlConfigWebMapItemID:String = ViewerContainer.urlConfigParams.webmap || ViewerContainer.urlConfigParams.itemid; + var webMapItemID:String = urlConfigWebMapItemID ? urlConfigWebMapItemID : configWebMapItemID; + + var portalURL:String = configXML.map.@portalurl[0] || configXML.map.@arcgissharingurl[0]; + var addArcGISBasemaps:Boolean = configXML.map.@addarcgisbasemaps[0] == "true"; + + if (webMapItemID) + { + var webMapUtil:WebMapUtil = new WebMapUtil(); + webMapUtil.bingMapsKey = configData.bingKey; + webMapUtil.proxyURL = configData.proxyUrl; + if (GeometryServiceSingleton.instance.url) + { + webMapUtil.geometryService = GeometryServiceSingleton.instance; + } + if (portalURL) + { + webMapUtil.portalURL = portalURL; + } + webMapUtil.createMapById(webMapItemID, new Responder(webMapUtil_createMapByIdResultHandler, webMapUtil_createMapByIdFaultHandler)); + function webMapUtil_createMapByIdResultHandler(result:WebMapEvent):void + { + if (!title.value) + { + title.value = result.item.title; + } + + var baseMapTitle:String; + if (result.itemData.baseMap) + { + baseMapTitle = result.itemData.baseMap.title; + } + + var layers:ArrayCollection = result.map.layers as ArrayCollection; + for (i = 0; i < layers.length; i++) + { + var layer:Layer = layers[i]; + var isOpLayer:Boolean = layer.id.indexOf("base") != 0; + + if (!isOpLayer && !baseMapTitle && i == 0) + { + baseMapTitle = layer.name; + } + + var label:String = baseMapTitle; + if (isOpLayer) + { + label = layer.name; + } + layer.id = label; + + var lyrXML:XML = createLayerXML(layer, label); + if (lyrXML) + { + if (isOpLayer) + { + configData.opLayers.push(LayerObjectUtil.getLayerObject(lyrXML, i, true, bingKey, layer, proxyUrl)); + } + else + { + if (configData.opLayers.length > 0) + { + lyrXML.@reference = true; + } + configData.basemaps.push(LayerObjectUtil.getLayerObject(lyrXML, i, false, bingKey, layer, proxyUrl)); + } + } + } + if (!initialExtent) + { + var extent:Extent = result.map.extent; + if (extent) + { + var extentArr:Array = [ extent.xmin, extent.ymin, extent.xmax, extent.ymax ]; + var iExt:Object = + { + id: "initial", + extent: extentArr.join(" ") + }; + mapAttrs.push(iExt); + } + } + + configData.webMapData = result.itemData; + + if (addArcGISBasemaps) + { + appendPortalBasemaps(portalURL); + } + else + { + AppEvent.dispatch(AppEvent.CONFIG_LOADED, configData); + } + } + + function webMapUtil_createMapByIdFaultHandler(error:Fault):void + { + AppEvent.showError( + ErrorMessageUtil.getKnownErrorCauseMessage(error) + + "\n\n" + ErrorMessageUtil.buildFaultMessage(error), CONFIG_MANAGER); + } + } + else + { + //================================================ + //map:basemaps + //================================================ + var configBasemaps:Array = []; + var maplayerList:XMLList = configXML.map.basemaps.mapservice; // TODO - is this still in use ??? + + if (maplayerList.length() < 1) + { + maplayerList = configXML.map.basemaps.layer; + } + + for (i = 0; i < maplayerList.length(); i++) + { + configBasemaps.push(LayerObjectUtil.getLayerObject(maplayerList[i], i, false, bingKey, null, proxyUrl)); + } + configData.basemaps = configBasemaps; + + //================================================ + //map:operationalLayers + //================================================ + var configOpLayers:Array = []; + var opLayerList:XMLList = configXML.map.operationallayers.layer; + for (i = 0; i < opLayerList.length(); i++) + { + configOpLayers.push(LayerObjectUtil.getLayerObject(opLayerList[i], i, true, bingKey, null, proxyUrl)); + } + configData.opLayers = configOpLayers; + } + + //================================================= + //widgets + //================================================ + var configWidgets:Array = []; + var widgetContainerList:XMLList = configXML.widgetcontainer; + var widgetId:Number = 0; + for (var w:int = 0; w < widgetContainerList.length(); w++) + { + var wContainer:XML = widgetContainerList[w] as XML; + var isPartOfPanel:Boolean = wContainer.@paneltype[0] ? true : false; + for (i = 0; i < wContainer.children().length(); i++) + { + var xmlObject:XML = wContainer.children()[i]; + if (xmlObject.name() == "widgetgroup") + { + var widgetGroupList:XMLList = XMLList(xmlObject); + createWidgets(widgetGroupList.widget, true, isPartOfPanel, widgetGroupList.widget.length(), widgetGroupList.@label, widgetGroupList.@icon); + } + else + { + var widgetList:XMLList = XMLList(xmlObject); + createWidgets(widgetList, false, isPartOfPanel); + } + } + } + + function createWidgets(widgetList:XMLList, grouped:Boolean, isPartOfPanel:Boolean, groupLength:Number = 0, groupLabel:String = null, groupIcon:String = null):void + { + var widgetListLength:int = widgetList.length(); + for (var p:int = 0; p < widgetListLength; p++) + { + // if grouped + var wGrouped:Boolean = grouped; + var wGroupLength:Number = groupLength; + var wGroupIcon:String = groupIcon; + var wGroupLabel:String = groupLabel; + + var wLabel:String = widgetList[p].@label; + var wIcon:String = widgetList[p].@icon; + var wConfig:String = widgetList[p].@config; + var wPreload:String = widgetList[p].@preload; + var wWidth:String = widgetList[p].@width; + var wHeight:String = widgetList[p].@height; + var wUrl:String = widgetList[p].@url; + var wx:String = widgetList[p].@x; + var wy:String = widgetList[p].@y; + var wLeft:String = widgetList[p].@left; + var wTop:String = widgetList[p].@top; + var wRight:String = widgetList[p].@right; + var wBottom:String = widgetList[p].@bottom; + + // Look for embedded configuration + var wConfigXML:XML = null; + if (wConfig.charAt(0) === "#") + { + wConfigXML = configXML.configuration.(@id == wConfig.substr(1))[0]; + } + if (!wGroupIcon) + { + wGroupIcon = ViewerContainer.DEFAULT_WIDGET_GROUP_ICON; + } + if (!wIcon) + { + wIcon = ViewerContainer.DEFAULT_WIDGET_ICON; + } + + var widget:Object = + { + id: widgetId, + grouped: wGrouped, + groupLength: wGroupLength, + groupIcon: wGroupIcon, + groupLabel: wGroupLabel, + label: wLabel, + icon: wIcon, + config: wConfig, + configXML: wConfigXML, // reference to emdedded XML configuration (if any) + preload: wPreload, + width: wWidth, + height: wHeight, + x: wx, + y: wy, + left: wLeft, + top: wTop, + right: wRight, + bottom: wBottom, + url: wUrl, + isPartOfPanel: isPartOfPanel + }; + configWidgets.push(widget); + widgetId++; + } + } + configData.widgets = configWidgets; + + //================================================= + //widgetContainers + // [] ={container, widgets} + //================================================ + + var wContainers:XMLList = configXML.widgetcontainer; + var configWContainers:Array = []; + var wid:uint; + var n:int; + var xmlObj:XML; + for (i = 0; i < wContainers.length(); i++) + { + //get container parameters + var wcPanelType:String = wContainers[i].@paneltype; + + var wgContainer:Object; + var contWidgets:Array = []; + if (wcPanelType) + { + var wcSize:String = wContainers[i].@size; + var wcInitialState:String = "open"; + if (wContainers[i].@initialstate[0]) + { + wcInitialState = wContainers[i].@initialstate; + } + wgContainer = + { + id: i, + panelType: wcPanelType, + initialState: wcInitialState, + size: wcSize, + obj: null + }; + + //get widget for this container + wid = 0; + for (n = 0; n < wContainers[i].children().length(); n++) + { + xmlObj = wContainers[i].children()[n]; + + var wgLabel:String = xmlObj.@label; + var wgConfig:String = xmlObj.@config; + var wgWidth:String = xmlObj.@width; + var wgHeight:String = xmlObj.@height; + var wgUrl:String = xmlObj.@url; + + var wgConfigXML:XML = null; + if (wgConfig.charAt(0) === "#") + { + wgConfigXML = configXML.configuration.(@id == wgConfig.substr(1))[0]; + } + var wg:Object = + { + id: wid, + label: wgLabel, + config: wgConfig, + configXML: wgConfigXML, // reference to enbedded XML configuration (if any) + width: wgWidth, + height: wgHeight, + url: wgUrl, + isPartOfPanel: true + }; + contWidgets.push(wg); + + //indexing + var windex:Object = { container: i, widget: wid }; + configData.widgetIndex.push(windex); + wid++; + } + } + else + { + var wcUrl:String = wContainers[i].@url; + if (!wcUrl) + { + wcUrl = ViewerContainer.DEFAULT_WIDGET_CONTAINER_WIDGET; + } + + var wcLeft:String = wContainers[i].@left; + var wcRight:String = wContainers[i].@right; + var wcTop:String = wContainers[i].@top; + var wcBottom:String = wContainers[i].@bottom; + var wcLayout:String = wContainers[i].@layout; + + if (!wcLayout) + { + wcLayout = ViewerContainer.DEFAULT_WIDGET_LAYOUT; + } + + wgContainer = + { + id: i, + left: wcLeft, + right: wcRight, + top: wcTop, + bottom: wcBottom, + layout: wcLayout, + url: wcUrl, + obj: null + }; + + //get widgets for this container + wid = 0; + for (n = 0; n < wContainers[i].children().length(); n++) + { + xmlObj = wContainers[i].children()[n]; + if (xmlObj.name() == "widgetgroup") + { + var widgetGrpList:XMLList = XMLList(xmlObj); + getWidgetList(widgetGrpList.widget, true, widgetGrpList.widget.length(), widgetGrpList.@label, widgetGrpList.@icon); + } + else + { + var wdgtList:XMLList = XMLList(xmlObj); + getWidgetList(wdgtList, false); + } + } + + function getWidgetList(wgList:XMLList, grouped:Boolean, groupLength:Number = 0, groupLabel:String = null, groupIcon:String = null):void + { + for (j = 0; j < wgList.length(); j++) + { + // if grouped + var wgGrouped:Boolean = grouped; + var wgGroupLength:Number = groupLength; + var wgGroupIcon:String = groupIcon; + var wgGroupLabel:String = groupLabel; + + var wgLabel:String = wgList[j].@label; + var wgIcon:String = wgList[j].@icon; + var wgConfig:String = wgList[j].@config; + var wgPreload:String = wgList[j].@preload; + var wgWidth:String = wgList[j].@width; + var wgHeight:String = wgList[j].@height; + var wgUrl:String = wgList[j].@url; + var wgx:String = wgList[j].@x; + var wgy:String = wgList[j].@y; + var wgLeft:String = wgList[j].@left; + var wgTop:String = wgList[j].@top; + var wgRight:String = wgList[j].@right; + var wgBottom:String = wgList[j].@bottom; + var wHorizontalCenter:String = wgList[j].@horizontalcenter; + var wVerticalCenter:String = wgList[j].@verticalcenter; + + var wgConfigXML:XML = null; + if (wgConfig.charAt(0) === "#") + { + wgConfigXML = configXML.configuration.(@id == wgConfig.substr(1))[0]; + } + if (!wgGroupIcon) + { + wgGroupIcon = ViewerContainer.DEFAULT_WIDGET_GROUP_ICON; + } + if (!wgIcon) + { + wgIcon = ViewerContainer.DEFAULT_WIDGET_ICON; + } + + var wg:Object = + { + id: wid, + grouped: wgGrouped, + groupLength: wgGroupLength, + groupIcon: wgGroupIcon, + groupLabel: wgGroupLabel, + label: wgLabel, + icon: wgIcon, + config: wgConfig, + configXML: wgConfigXML, // reference to enbedded XML configuration (if any) + preload: wgPreload, + width: wgWidth, + height: wgHeight, + x: wgx, + y: wgy, + left: wgLeft, + right: wgRight, + top: wgTop, + bottom: wgBottom, + horizontalCenter: wHorizontalCenter, + verticalCenter: wVerticalCenter, + url: wgUrl, + isPartOfPanel: false + }; + contWidgets.push(wg); + + //indexing + var windex:Object = { container: i, widget: wid }; + configData.widgetIndex.push(windex); + wid++; + } + } + } + + var container:Object = { container: wgContainer, widgets: contWidgets }; + configWContainers.push(container); + } + configData.widgetContainers = configWContainers; + + if (!webMapItemID) + { + //================================================ + //announce configuration is complete + //================================================ + if (addArcGISBasemaps) + { + appendPortalBasemaps(portalURL); + } + else + { + AppEvent.dispatch(AppEvent.CONFIG_LOADED, configData); + } + } + } + catch (error:Error) + { + AppEvent.showError(LocalizationUtil.getDefaultString("parseConfigErrorText", ViewerContainer.configFile + "\n" + error.message), CONFIG_MANAGER); + } + } + + private function createLayerXML(layer:Layer, label:String):XML + { + var lyrXML:XML = null; + if (layer is ArcGISDynamicMapServiceLayer) + { + var dynLyr:ArcGISDynamicMapServiceLayer = layer as ArcGISDynamicMapServiceLayer; + lyrXML = ; + if (dynLyr.visibleLayers) + { + lyrXML.@visiblelayers = dynLyr.visibleLayers.toArray().join(); + } + } + else if (layer is ArcGISImageServiceLayer) + { + var imgLyr:ArcGISImageServiceLayer = layer as ArcGISImageServiceLayer; + lyrXML = ; + if (imgLyr.bandIds) + { + lyrXML.@bandids = imgLyr.bandIds.join(); + } + } + else if (layer is ArcGISTiledMapServiceLayer) + { + var tiledLyr:ArcGISTiledMapServiceLayer = layer as ArcGISTiledMapServiceLayer; + lyrXML = ; + if (tiledLyr.displayLevels) + { + lyrXML.@displaylevels = tiledLyr.displayLevels.join(); + } + } + else if (layer is FeatureLayer && !(layer is CSVLayer)) + { + var feaLyr:FeatureLayer = layer as FeatureLayer; + if (feaLyr.featureCollection) + { + lyrXML = + } + else + { + lyrXML = ; + } + } + else if (layer is OpenStreetMapLayer) + { + var osmLyr:OpenStreetMapLayer = layer as OpenStreetMapLayer; + lyrXML = ; + } + else if (layer is VETiledLayer) + { + var veLyr:VETiledLayer = layer as VETiledLayer; + lyrXML = ; + if (veLyr.displayLevels) + { + lyrXML.@displaylevels = veLyr.displayLevels.join(); + } + } + else if (layer is KMLLayer) + { + var kmlLayer:KMLLayer = layer as KMLLayer; + lyrXML = ; + } + else if (layer is WMSLayer) + { + var wmsLayer:WMSLayer = layer as WMSLayer; + lyrXML = ; + if (wmsLayer.maxImageHeight > 0) + { + lyrXML.@maximageheight = wmsLayer.maxImageHeight; + } + if (wmsLayer.maxImageWidth > 0) + { + lyrXML.@maximagewidth = wmsLayer.maxImageWidth; + } + if (wmsLayer.visibleLayers) + { + lyrXML.@visiblelayers = wmsLayer.visibleLayers.toArray().join(); + } + } + else if (layer is CSVLayer) + { + var csvLyr:CSVLayer = layer as CSVLayer; + lyrXML = ; + if (csvLyr.columnDelimiter != ",") + { + lyrXML.@columndelimiter = csvLyr.columnDelimiter; + } + if (csvLyr.sourceFields) + { + var fields:Array = []; + for each (var field:Field in csvLyr.sourceFields) + { + fields.push(field.name + "|" + field.alias + "|" + field.type); + } + lyrXML.@sourcefields = fields.join(); + } + } + return lyrXML; + } + + private function appendPortalBasemaps(portalURL:String):void + { + var basemapAppender:PortalBasemapAppender = new PortalBasemapAppender(portalURL, configData); + basemapAppender.addEventListener(Event.COMPLETE, basemapAppender_completeHandler); + basemapAppender.fetchAndAppendPortalBasemaps(); + } + + protected function basemapAppender_completeHandler(event:Event):void + { + (event.currentTarget as PortalBasemapAppender).removeEventListener(Event.COMPLETE, basemapAppender_completeHandler); + AppEvent.dispatch(AppEvent.CONFIG_LOADED, configData); + } +} +} diff --git a/src/com/esri/viewer/managers/DataManager.as b/src/com/esri/viewer/managers/DataManager.as index e1c7d86..cb60e90 100644 --- a/src/com/esri/viewer/managers/DataManager.as +++ b/src/com/esri/viewer/managers/DataManager.as @@ -1,90 +1,90 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2010-2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package com.esri.viewer.managers -{ - -import com.esri.viewer.utils.Hashtable; - -import flash.events.EventDispatcher; - -import mx.collections.ArrayCollection; -import com.esri.viewer.AppEvent; -import com.esri.viewer.ViewerContainer; - -/** - * Data manager will be storing the session data to support data reuse such as widget chain. - */ -public class DataManager extends EventDispatcher -{ - private var dataTable:Hashtable; - - public function DataManager() - { - super(); - - dataTable = new Hashtable(); - AppEvent.addListener(AppEvent.CONFIG_LOADED, configLoadedHandler); - - // This is an example to set up the listener to get the type of data the Data - // Manager is interested in. - AppEvent.addListener(AppEvent.DATA_FETCH_ALL, fetchAllData); - AppEvent.addListener(AppEvent.DATA_PUBLISH, addData); - AppEvent.addListener(AppEvent.DATA_FETCH, fetchData); - } - - private function configLoadedHandler(event:AppEvent):void - { - } - - private function fetchAllData(event:AppEvent):void - { - AppEvent.dispatch(AppEvent.DATA_SENT, dataTable); - } - - private function fetchData(event:AppEvent):void - { - var key:String = event.data.key as String; - var data:Object = - { - key: key, - collection: dataTable.find(key) - }; - AppEvent.dispatch(AppEvent.DATA_SENT, data); - } - - private function addData(event:AppEvent):void - { - var key:String = event.data.key; - if (key) - { - var dataCollection:Object = event.data.collection; - if (dataTable.containsKey(key)) - { - dataTable.remove(key); - } - dataTable.add(key, dataCollection); - - var data:Object = - { - key: key, - data: dataTable - }; - AppEvent.dispatch(AppEvent.DATA_NEW_PUBLISHED, data); - } - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2010-2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package com.esri.viewer.managers +{ + +import com.esri.viewer.utils.Hashtable; + +import flash.events.EventDispatcher; + +import mx.collections.ArrayCollection; +import com.esri.viewer.AppEvent; +import com.esri.viewer.ViewerContainer; + +/** + * Data manager will be storing the session data to support data reuse such as widget chain. + */ +public class DataManager extends EventDispatcher +{ + private var dataTable:Hashtable; + + public function DataManager() + { + super(); + + dataTable = new Hashtable(); + AppEvent.addListener(AppEvent.CONFIG_LOADED, configLoadedHandler); + + // This is an example to set up the listener to get the type of data the Data + // Manager is interested in. + AppEvent.addListener(AppEvent.DATA_FETCH_ALL, fetchAllData); + AppEvent.addListener(AppEvent.DATA_PUBLISH, addData); + AppEvent.addListener(AppEvent.DATA_FETCH, fetchData); + } + + private function configLoadedHandler(event:AppEvent):void + { + } + + private function fetchAllData(event:AppEvent):void + { + AppEvent.dispatch(AppEvent.DATA_SENT, dataTable); + } + + private function fetchData(event:AppEvent):void + { + var key:String = event.data.key as String; + var data:Object = + { + key: key, + collection: dataTable.find(key) + }; + AppEvent.dispatch(AppEvent.DATA_SENT, data); + } + + private function addData(event:AppEvent):void + { + var key:String = event.data.key; + if (key) + { + var dataCollection:Object = event.data.collection; + if (dataTable.containsKey(key)) + { + dataTable.remove(key); + } + dataTable.add(key, dataCollection); + + var data:Object = + { + key: key, + data: dataTable + }; + AppEvent.dispatch(AppEvent.DATA_NEW_PUBLISHED, data); + } + } +} + +} diff --git a/src/com/esri/viewer/managers/EventBus.as b/src/com/esri/viewer/managers/EventBus.as index e565dbc..fcd9b99 100644 --- a/src/com/esri/viewer/managers/EventBus.as +++ b/src/com/esri/viewer/managers/EventBus.as @@ -1,65 +1,65 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2010-2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package com.esri.viewer.managers -{ - -import flash.events.Event; -import flash.events.EventDispatcher; - -/** - * The EventBus allows centrallized communication among modules without - * point-to-point messaging. It uses the singleton design pattern - * to make sure one event bus is available globally. The bus itself - * is only available to the container. Modules use the container's - * static method to communicate with the event bus. - */ -public class EventBus extends EventDispatcher -{ - /** Application event bus instance */ - public static const instance:EventBus = new EventBus(); - - /** - * Normally the EventBus is not instantiated via the new method directly. - * The constructor helps enforce only one EvenBus availiable for the application - * (singeton) so that it asures the communication only via a sigle event bus. - */ - public function EventBus() - { - } - - /** - * The factory method is used to create a instance of the EventBus. It returns - * the only instanace of EventBus and makes sure no another instance is created. - */ - [Deprecated(replacement="instance")] - public static function getInstance():EventBus - { - return instance; - } - - /** - * Basic dispatch function, dispatches simple named events. In the case - * that the event is only significant by the event token (type string), - * this new dispatch method simplify the code. - */ - [Deprecated(replacement="AppEvent.dispatch")] - public function dispatch(type:String):Boolean - { - return dispatchEvent(new Event(type)); - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2010-2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package com.esri.viewer.managers +{ + +import flash.events.Event; +import flash.events.EventDispatcher; + +/** + * The EventBus allows centrallized communication among modules without + * point-to-point messaging. It uses the singleton design pattern + * to make sure one event bus is available globally. The bus itself + * is only available to the container. Modules use the container's + * static method to communicate with the event bus. + */ +public class EventBus extends EventDispatcher +{ + /** Application event bus instance */ + public static const instance:EventBus = new EventBus(); + + /** + * Normally the EventBus is not instantiated via the new method directly. + * The constructor helps enforce only one EvenBus availiable for the application + * (singeton) so that it asures the communication only via a sigle event bus. + */ + public function EventBus() + { + } + + /** + * The factory method is used to create a instance of the EventBus. It returns + * the only instanace of EventBus and makes sure no another instance is created. + */ + [Deprecated(replacement="instance")] + public static function getInstance():EventBus + { + return instance; + } + + /** + * Basic dispatch function, dispatches simple named events. In the case + * that the event is only significant by the event token (type string), + * this new dispatch method simplify the code. + */ + [Deprecated(replacement="AppEvent.dispatch")] + public function dispatch(type:String):Boolean + { + return dispatchEvent(new Event(type)); + } +} + +} diff --git a/src/com/esri/viewer/managers/LayerCreationProperties.as b/src/com/esri/viewer/managers/LayerCreationProperties.as index d1cc07c..44f7e64 100644 --- a/src/com/esri/viewer/managers/LayerCreationProperties.as +++ b/src/com/esri/viewer/managers/LayerCreationProperties.as @@ -1,126 +1,126 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2012 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package com.esri.viewer.managers -{ - -import com.esri.ags.clusterers.ESRIClusterer; -import com.esri.ags.renderers.IRenderer; - -public class LayerCreationProperties -{ - public var alpha:Number; - public var autoRefresh:Number; - public var bandIds:String; - public var bingMapKey:String; - public var clusterer:ESRIClusterer; - public var columnDelimiter:String; - public var culture:String; - public var definitionExpression:String; - public var disableClientCaching:Boolean; - public var displayLevels:String; - public var gdbVersion:String; - public var imageFormat:String; - public var isEditable:Boolean; - public var label:String; - public var layerId:String; - public var latitudeFieldName:String; - public var longitudeFieldName:String; - public var maxAllowableOffset:Number; - public var maxImageHeight:Number; - public var maxImageWidth:Number; - public var minScale:Number; - public var maxScale:Number; - public var mode:String; - public var noData:Number; - public var password:String; - public var proxyUrl:String; - public var renderer:IRenderer; - public var serviceHost:String; - public var serviceName:String; - public var serviceMode:String; - public var serviceURL:String; - public var skipGetCapabilities:String; - public var sourceFields:String; - public var style:String; - public var tileMatrixSetId:String; - public var token:String; - public var type:String; - public var url:String; - public var useAMF:String; - public var useMapTime:Boolean; - public var useProxy:Boolean; - public var username:String; - public var version:String; - public var visible:Boolean; - public var visibleLayers:String; - public var wkid:Number; - - public static function fromLayerObject(layerObject:Object):LayerCreationProperties - { - var creationProps:LayerCreationProperties = new LayerCreationProperties(); - - creationProps.alpha = Number(layerObject.alpha); - creationProps.autoRefresh = Number(layerObject.autoRefresh); - creationProps.bandIds = layerObject.bandIds; - creationProps.bingMapKey = layerObject.key; - creationProps.clusterer = layerObject.clusterer; - creationProps.columnDelimiter = layerObject.columnDelimiter; - creationProps.culture = layerObject.culture; - creationProps.definitionExpression = layerObject.definitionExpression; - creationProps.disableClientCaching = layerObject.disableClientCaching; - creationProps.displayLevels = layerObject.displayLevels; - creationProps.gdbVersion = layerObject.gdbVersion; - creationProps.imageFormat = layerObject.imageFormat; - creationProps.isEditable = layerObject.isEditable; - creationProps.latitudeFieldName = layerObject.latitudeFieldName; - creationProps.label = layerObject.label; - creationProps.layerId = layerObject.layerId; - creationProps.longitudeFieldName = layerObject.longitudeFieldName; - creationProps.maxAllowableOffset = layerObject.maxAllowableOffset; - creationProps.maxImageHeight = layerObject.maxImageHeight; - creationProps.maxImageWidth = layerObject.maxImageWidth; - creationProps.minScale = layerObject.minScale; - creationProps.maxScale = layerObject.maxScale; - creationProps.mode = layerObject.mode; - creationProps.noData = Number(layerObject.noData); - creationProps.password = layerObject.password; - creationProps.proxyUrl = layerObject.proxyUrl; - creationProps.renderer = layerObject.renderer; - creationProps.serviceHost = layerObject.serviceHost; - creationProps.serviceName = layerObject.serviceName; - creationProps.serviceMode = layerObject.serviceMode; - creationProps.serviceURL = layerObject.serviceURL; - creationProps.skipGetCapabilities = layerObject.skipGetCapabilities; - creationProps.sourceFields = layerObject.sourceFields; - creationProps.style = layerObject.style; - creationProps.tileMatrixSetId = layerObject.tileMatrixSetId; - creationProps.token = layerObject.token; - creationProps.type = layerObject.type; - creationProps.url = layerObject.url; - creationProps.useAMF = layerObject.useAMF; - creationProps.useMapTime = layerObject.useMapTime; - creationProps.useProxy = layerObject.useProxy; - creationProps.username = layerObject.username; - creationProps.version = layerObject.version; - creationProps.visible = layerObject.visible; - creationProps.visibleLayers = layerObject.visibleLayers; - creationProps.wkid = layerObject.wkid; - - return creationProps; - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2012 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package com.esri.viewer.managers +{ + +import com.esri.ags.clusterers.ESRIClusterer; +import com.esri.ags.renderers.IRenderer; + +public class LayerCreationProperties +{ + public var alpha:Number; + public var autoRefresh:Number; + public var bandIds:String; + public var bingMapKey:String; + public var clusterer:ESRIClusterer; + public var columnDelimiter:String; + public var culture:String; + public var definitionExpression:String; + public var disableClientCaching:Boolean; + public var displayLevels:String; + public var gdbVersion:String; + public var imageFormat:String; + public var isEditable:Boolean; + public var label:String; + public var layerId:String; + public var latitudeFieldName:String; + public var longitudeFieldName:String; + public var maxAllowableOffset:Number; + public var maxImageHeight:Number; + public var maxImageWidth:Number; + public var minScale:Number; + public var maxScale:Number; + public var mode:String; + public var noData:Number; + public var password:String; + public var proxyUrl:String; + public var renderer:IRenderer; + public var serviceHost:String; + public var serviceName:String; + public var serviceMode:String; + public var serviceURL:String; + public var skipGetCapabilities:String; + public var sourceFields:String; + public var style:String; + public var tileMatrixSetId:String; + public var token:String; + public var type:String; + public var url:String; + public var useAMF:String; + public var useMapTime:Boolean; + public var useProxy:Boolean; + public var username:String; + public var version:String; + public var visible:Boolean; + public var visibleLayers:String; + public var wkid:Number; + + public static function fromLayerObject(layerObject:Object):LayerCreationProperties + { + var creationProps:LayerCreationProperties = new LayerCreationProperties(); + + creationProps.alpha = Number(layerObject.alpha); + creationProps.autoRefresh = Number(layerObject.autoRefresh); + creationProps.bandIds = layerObject.bandIds; + creationProps.bingMapKey = layerObject.key; + creationProps.clusterer = layerObject.clusterer; + creationProps.columnDelimiter = layerObject.columnDelimiter; + creationProps.culture = layerObject.culture; + creationProps.definitionExpression = layerObject.definitionExpression; + creationProps.disableClientCaching = layerObject.disableClientCaching; + creationProps.displayLevels = layerObject.displayLevels; + creationProps.gdbVersion = layerObject.gdbVersion; + creationProps.imageFormat = layerObject.imageFormat; + creationProps.isEditable = layerObject.isEditable; + creationProps.latitudeFieldName = layerObject.latitudeFieldName; + creationProps.label = layerObject.label; + creationProps.layerId = layerObject.layerId; + creationProps.longitudeFieldName = layerObject.longitudeFieldName; + creationProps.maxAllowableOffset = layerObject.maxAllowableOffset; + creationProps.maxImageHeight = layerObject.maxImageHeight; + creationProps.maxImageWidth = layerObject.maxImageWidth; + creationProps.minScale = layerObject.minScale; + creationProps.maxScale = layerObject.maxScale; + creationProps.mode = layerObject.mode; + creationProps.noData = Number(layerObject.noData); + creationProps.password = layerObject.password; + creationProps.proxyUrl = layerObject.proxyUrl; + creationProps.renderer = layerObject.renderer; + creationProps.serviceHost = layerObject.serviceHost; + creationProps.serviceName = layerObject.serviceName; + creationProps.serviceMode = layerObject.serviceMode; + creationProps.serviceURL = layerObject.serviceURL; + creationProps.skipGetCapabilities = layerObject.skipGetCapabilities; + creationProps.sourceFields = layerObject.sourceFields; + creationProps.style = layerObject.style; + creationProps.tileMatrixSetId = layerObject.tileMatrixSetId; + creationProps.token = layerObject.token; + creationProps.type = layerObject.type; + creationProps.url = layerObject.url; + creationProps.useAMF = layerObject.useAMF; + creationProps.useMapTime = layerObject.useMapTime; + creationProps.useProxy = layerObject.useProxy; + creationProps.username = layerObject.username; + creationProps.version = layerObject.version; + creationProps.visible = layerObject.visible; + creationProps.visibleLayers = layerObject.visibleLayers; + creationProps.wkid = layerObject.wkid; + + return creationProps; + } +} + +} diff --git a/src/com/esri/viewer/managers/LayerCreator.as b/src/com/esri/viewer/managers/LayerCreator.as index 91a40dd..ccecfc1 100644 --- a/src/com/esri/viewer/managers/LayerCreator.as +++ b/src/com/esri/viewer/managers/LayerCreator.as @@ -1,581 +1,581 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2012 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package com.esri.viewer.managers -{ - -import com.esri.ags.SpatialReference; -import com.esri.ags.layers.ArcGISDynamicMapServiceLayer; -import com.esri.ags.layers.ArcGISImageServiceLayer; -import com.esri.ags.layers.ArcGISTiledMapServiceLayer; -import com.esri.ags.layers.ArcIMSMapServiceLayer; -import com.esri.ags.layers.CSVLayer; -import com.esri.ags.layers.FeatureLayer; -import com.esri.ags.layers.GeoRSSLayer; -import com.esri.ags.layers.KMLLayer; -import com.esri.ags.layers.Layer; -import com.esri.ags.layers.OpenStreetMapLayer; -import com.esri.ags.layers.WMSLayer; -import com.esri.ags.layers.WMTSLayer; -import com.esri.ags.layers.supportClasses.Field; -import com.esri.ags.virtualearth.VETiledLayer; - -import flash.utils.setInterval; - -import mx.collections.ArrayCollection; -import mx.collections.ArrayList; - -public class LayerCreator -{ - public static function createLayerFromLayerObject(layerObject:Object):Layer - { - return createLayer(LayerCreationProperties.fromLayerObject(layerObject)); - } - - private static function createLayer(layerCreationProperties:LayerCreationProperties):Layer - { - var layerType:String = layerCreationProperties.type.toLowerCase(); - - if (layerType == "tiled") - { - return createTiledLayer(layerCreationProperties); - } - else if (layerType == "dynamic") - { - return createDynamicLayer(layerCreationProperties); - } - else if (layerType == "feature") - { - return createFeatureLayer(layerCreationProperties); - } - else if (layerType == "bing") - { - return createBingLayer(layerCreationProperties); - } - else if (layerType == "image") - { - return createImageLayer(layerCreationProperties); - } - else if (layerType == "arcims") - { - return createArcIMSLayer(layerCreationProperties); - } - else if (layerType == "wms") - { - return createWMSLayer(layerCreationProperties); - } - else if (layerType == "wmts") - { - return createWMTSLayer(layerCreationProperties); - } - else if (layerType == "osm") - { - return createOSMLayer(layerCreationProperties); - } - else if (layerType == "kml") - { - return createKMLLayer(layerCreationProperties); - } - else if (layerType == "csv") - { - return createCSVLayer(layerCreationProperties); - } - else if (layerType == "georss") - { - return createGeoRSSLayer(layerCreationProperties); - } - else - { - //TODO: throw meaningful error instead. - return null; - } - } - - private static function createTiledLayer(layerCreationProperties:LayerCreationProperties):ArcGISTiledMapServiceLayer - { - var tiledLayer:ArcGISTiledMapServiceLayer = new ArcGISTiledMapServiceLayer(layerCreationProperties.url); - tiledLayer.alpha = layerCreationProperties.alpha; - tiledLayer.id = layerCreationProperties.label; - tiledLayer.name = layerCreationProperties.label; - tiledLayer.token = layerCreationProperties.token; - tiledLayer.visible = layerCreationProperties.visible; - if (layerCreationProperties.displayLevels) - { - tiledLayer.displayLevels = layerCreationProperties.displayLevels.split(","); - for (var i:int = 0; i < tiledLayer.displayLevels.length; i++) - { - tiledLayer.displayLevels[i] = Number(tiledLayer.displayLevels[i]); // convert to Numbers - } - } - if (layerCreationProperties.proxyUrl && layerCreationProperties.useProxy) - { - tiledLayer.proxyURL = layerCreationProperties.proxyUrl; - } - if (!isNaN(layerCreationProperties.minScale)) - { - tiledLayer.minScale = layerCreationProperties.minScale; - } - if (!isNaN(layerCreationProperties.maxScale)) - { - tiledLayer.maxScale = layerCreationProperties.maxScale; - } - return tiledLayer; - } - - private static function createDynamicLayer(layerCreationProperties:LayerCreationProperties):ArcGISDynamicMapServiceLayer - { - var dynLayer:ArcGISDynamicMapServiceLayer = new ArcGISDynamicMapServiceLayer(layerCreationProperties.url); - dynLayer.alpha = layerCreationProperties.alpha; - dynLayer.id = layerCreationProperties.label; - dynLayer.gdbVersion = layerCreationProperties.gdbVersion; - dynLayer.name = layerCreationProperties.label; - dynLayer.token = layerCreationProperties.token; - dynLayer.visible = layerCreationProperties.visible; - dynLayer.useMapTime = layerCreationProperties.useMapTime; - dynLayer.disableClientCaching = layerCreationProperties.disableClientCaching; - if (layerCreationProperties.autoRefresh > 0) - { - setInterval(dynLayer.refresh, layerCreationProperties.autoRefresh * 1000); - } - if (layerCreationProperties.imageFormat) - { - dynLayer.imageFormat = layerCreationProperties.imageFormat; - } - if (layerCreationProperties.visibleLayers) - { - var vizLayers:Array = layerCreationProperties.visibleLayers.split(","); - for (var i:int = 0; i < vizLayers.length; i++) - { - vizLayers[i] = Number(vizLayers[i]); // convert to Numbers - } - dynLayer.visibleLayers = new ArrayCollection(vizLayers); - } - if (layerCreationProperties.proxyUrl && layerCreationProperties.useProxy) - { - dynLayer.proxyURL = layerCreationProperties.proxyUrl; - } - if (!isNaN(layerCreationProperties.minScale)) - { - dynLayer.minScale = layerCreationProperties.minScale; - } - if (!isNaN(layerCreationProperties.maxScale)) - { - dynLayer.maxScale = layerCreationProperties.maxScale; - } - if (layerCreationProperties.maxImageHeight > 0) - { - dynLayer.maxImageHeight = layerCreationProperties.maxImageHeight; - } - if (layerCreationProperties.maxImageWidth > 0) - { - dynLayer.maxImageWidth = layerCreationProperties.maxImageWidth; - } - return dynLayer; - } - - private static function createFeatureLayer(layerCreationProperties:LayerCreationProperties):FeatureLayer - { - var featureLayer:FeatureLayer = new FeatureLayer(layerCreationProperties.url); - - featureLayer.alpha = layerCreationProperties.alpha; - featureLayer.id = layerCreationProperties.label; - featureLayer.gdbVersion = layerCreationProperties.gdbVersion; - featureLayer.name = layerCreationProperties.label; - featureLayer.maxAllowableOffset = layerCreationProperties.maxAllowableOffset; - featureLayer.outFields = [ '*' ]; // TODO: be smarter - featureLayer.token = layerCreationProperties.token; - featureLayer.visible = layerCreationProperties.visible; - featureLayer.useMapTime = layerCreationProperties.useMapTime; - featureLayer.clusterer = layerCreationProperties.clusterer; - featureLayer.disableClientCaching = layerCreationProperties.disableClientCaching; - if (layerCreationProperties.renderer) - { - featureLayer.renderer = layerCreationProperties.renderer; - } - if (layerCreationProperties.autoRefresh > 0) - { - setInterval(featureLayer.refresh, layerCreationProperties.autoRefresh * 1000); - } - if (layerCreationProperties.useAMF) - { - featureLayer.useAMF = (layerCreationProperties.useAMF == "true"); - } - if (layerCreationProperties.mode) - { - featureLayer.mode = layerCreationProperties.mode; - } - if (layerCreationProperties.definitionExpression) - { - featureLayer.definitionExpression = layerCreationProperties.definitionExpression; - } - if (layerCreationProperties.proxyUrl && layerCreationProperties.useProxy) - { - featureLayer.proxyURL = layerCreationProperties.proxyUrl; - } - if (!isNaN(layerCreationProperties.minScale)) - { - featureLayer.minScale = layerCreationProperties.minScale; - } - if (!isNaN(layerCreationProperties.maxScale)) - { - featureLayer.maxScale = layerCreationProperties.maxScale; - } - if (!layerCreationProperties.isEditable) - { - featureLayer.isEditable = false; // only set it if it is 'false' - } - // example for hard-coding layer symbology, e.g. for pre-10.0 ArcGIS Servers - /* if (layerCreationProperties.label == "Traffic Cameras") // the layer label in main configuration file - { - var picSymbol:PictureMarkerSymbol = new PictureMarkerSymbol("assets/images/i_camera.png",30,30,0,0,0); - var rend:Renderer = new SimpleRenderer(picSymbol); - featureLayer.renderer = rend; - } */ - return featureLayer; - } - - private static function createBingLayer(layerCreationProperties:LayerCreationProperties):VETiledLayer - { - var veTiledLayer:VETiledLayer = new VETiledLayer(); - veTiledLayer.id = layerCreationProperties.label; - veTiledLayer.name = layerCreationProperties.label; - veTiledLayer.key = layerCreationProperties.bingMapKey; - veTiledLayer.visible = layerCreationProperties.visible; - veTiledLayer.alpha = layerCreationProperties.alpha; - if (layerCreationProperties.style) - { - veTiledLayer.mapStyle = layerCreationProperties.style; - } - if (layerCreationProperties.culture) - { - veTiledLayer.culture = layerCreationProperties.culture; - } - if (layerCreationProperties.displayLevels) - { - veTiledLayer.displayLevels = layerCreationProperties.displayLevels.split(","); - for (var i:int = 0; i < veTiledLayer.displayLevels.length; i++) - { - veTiledLayer.displayLevels[i] = Number(veTiledLayer.displayLevels[i]); // convert to Numbers - } - } - if (!isNaN(layerCreationProperties.minScale)) - { - veTiledLayer.minScale = layerCreationProperties.minScale; - } - if (!isNaN(layerCreationProperties.maxScale)) - { - veTiledLayer.maxScale = layerCreationProperties.maxScale; - } - return veTiledLayer; - } - - private static function createImageLayer(layerCreationProperties:LayerCreationProperties):ArcGISImageServiceLayer - { - var imgLayer:ArcGISImageServiceLayer = new ArcGISImageServiceLayer(layerCreationProperties.url); - imgLayer.id = layerCreationProperties.label; - imgLayer.name = layerCreationProperties.label; - imgLayer.alpha = layerCreationProperties.alpha; - imgLayer.token = layerCreationProperties.token; - imgLayer.visible = layerCreationProperties.visible; - imgLayer.noData = layerCreationProperties.noData; - imgLayer.useMapTime = layerCreationProperties.useMapTime; - imgLayer.disableClientCaching = layerCreationProperties.disableClientCaching; - if (layerCreationProperties.imageFormat) - { - imgLayer.imageFormat = layerCreationProperties.imageFormat; - } - if (layerCreationProperties.bandIds) - { - imgLayer.bandIds = layerCreationProperties.bandIds.split(","); - for (var i:int = 0; i < imgLayer.bandIds.length; i++) - { - imgLayer.bandIds[i] = Number(imgLayer.bandIds[i]); // convert to Numbers - } - } - if (layerCreationProperties.proxyUrl && layerCreationProperties.useProxy) - { - imgLayer.proxyURL = layerCreationProperties.proxyUrl; - } - if (!isNaN(layerCreationProperties.minScale)) - { - imgLayer.minScale = layerCreationProperties.minScale; - } - if (!isNaN(layerCreationProperties.maxScale)) - { - imgLayer.maxScale = layerCreationProperties.maxScale; - } - return imgLayer; - } - - private static function createArcIMSLayer(layerCreationProperties:LayerCreationProperties):ArcIMSMapServiceLayer - { - var arcimsLayer:ArcIMSMapServiceLayer = new ArcIMSMapServiceLayer(); - arcimsLayer.alpha = layerCreationProperties.alpha; - arcimsLayer.id = layerCreationProperties.label; - arcimsLayer.name = layerCreationProperties.label; - arcimsLayer.visible = layerCreationProperties.visible; - arcimsLayer.serviceHost = layerCreationProperties.serviceHost; - arcimsLayer.serviceName = layerCreationProperties.serviceName; - if (layerCreationProperties.autoRefresh > 0) - { - setInterval(arcimsLayer.refresh, layerCreationProperties.autoRefresh * 1000); - } - if (layerCreationProperties.imageFormat) - { - arcimsLayer.imageFormat = layerCreationProperties.imageFormat; - } - if (layerCreationProperties.visibleLayers) - { - var visLayers:Array = layerCreationProperties.visibleLayers.split(","); - arcimsLayer.visibleLayers = new ArrayCollection(visLayers); - } - if (layerCreationProperties.proxyUrl && layerCreationProperties.useProxy) - { - arcimsLayer.proxyURL = layerCreationProperties.proxyUrl; - } - if (layerCreationProperties.username && layerCreationProperties.password) - { - arcimsLayer.username = layerCreationProperties.username; - arcimsLayer.password = layerCreationProperties.password; - } - if (!isNaN(layerCreationProperties.minScale)) - { - arcimsLayer.minScale = layerCreationProperties.minScale; - } - if (!isNaN(layerCreationProperties.maxScale)) - { - arcimsLayer.maxScale = layerCreationProperties.maxScale; - } - return arcimsLayer; - } - - private static function createWMSLayer(layerCreationProperties:LayerCreationProperties):WMSLayer - { - var wmsLayer:WMSLayer = new WMSLayer(layerCreationProperties.url); - wmsLayer.alpha = layerCreationProperties.alpha; - wmsLayer.id = layerCreationProperties.label; - wmsLayer.name = layerCreationProperties.label; - wmsLayer.visible = layerCreationProperties.visible; - wmsLayer.disableClientCaching = layerCreationProperties.disableClientCaching; - if (layerCreationProperties.wkid) - { - wmsLayer.spatialReference = new SpatialReference(layerCreationProperties.wkid); - } - if (layerCreationProperties.autoRefresh > 0) - { - setInterval(wmsLayer.refresh, layerCreationProperties.autoRefresh * 1000); - } - if (layerCreationProperties.imageFormat) - { - wmsLayer.imageFormat = layerCreationProperties.imageFormat; - } - if (layerCreationProperties.visibleLayers) - { - var wmsVisLayers:Array = layerCreationProperties.visibleLayers.split(","); - wmsLayer.visibleLayers = new ArrayList(wmsVisLayers); - } - if (layerCreationProperties.proxyUrl && layerCreationProperties.useProxy) - { - wmsLayer.proxyURL = layerCreationProperties.proxyUrl; - } - if (layerCreationProperties.skipGetCapabilities) - { - wmsLayer.skipGetCapabilities = layerCreationProperties.skipGetCapabilities == "true"; - } - if (layerCreationProperties.username && layerCreationProperties.password) - { - wmsLayer.username = layerCreationProperties.username; - wmsLayer.password = layerCreationProperties.password; - } - if (layerCreationProperties.version) - { - wmsLayer.version = layerCreationProperties.version; - } - if (!isNaN(layerCreationProperties.minScale)) - { - wmsLayer.minScale = layerCreationProperties.minScale; - } - if (!isNaN(layerCreationProperties.maxScale)) - { - wmsLayer.maxScale = layerCreationProperties.maxScale; - } - if (layerCreationProperties.maxImageHeight > 0) - { - wmsLayer.maxImageHeight = layerCreationProperties.maxImageHeight; - } - if (layerCreationProperties.maxImageWidth > 0) - { - wmsLayer.maxImageWidth = layerCreationProperties.maxImageWidth; - } - return wmsLayer; - } - - private static function createWMTSLayer(layerCreationProperties:LayerCreationProperties):WMTSLayer - { - var wmtsLayer:WMTSLayer = new WMTSLayer(layerCreationProperties.url); - wmtsLayer.alpha = layerCreationProperties.alpha; - wmtsLayer.id = layerCreationProperties.label; - wmtsLayer.name = layerCreationProperties.label; - wmtsLayer.visible = layerCreationProperties.visible; - if (layerCreationProperties.imageFormat) - { - wmtsLayer.imageFormat = layerCreationProperties.imageFormat; - } - if (layerCreationProperties.proxyUrl && layerCreationProperties.useProxy) - { - wmtsLayer.proxyURL = layerCreationProperties.proxyUrl; - } - if (layerCreationProperties.serviceMode) - { - wmtsLayer.serviceMode = layerCreationProperties.serviceMode; - } - if (layerCreationProperties.layerId) - { - wmtsLayer.layerId = layerCreationProperties.layerId; - } - if (layerCreationProperties.tileMatrixSetId) - { - wmtsLayer.tileMatrixSetId = layerCreationProperties.tileMatrixSetId; - } - if (layerCreationProperties.style) - { - wmtsLayer.style = layerCreationProperties.style; - } - if (!isNaN(layerCreationProperties.minScale)) - { - wmtsLayer.minScale = layerCreationProperties.minScale; - } - if (!isNaN(layerCreationProperties.maxScale)) - { - wmtsLayer.maxScale = layerCreationProperties.maxScale; - } - return wmtsLayer; - } - - private static function createOSMLayer(layerCreationProperties:LayerCreationProperties):OpenStreetMapLayer - { - var osmLayer:OpenStreetMapLayer = new OpenStreetMapLayer(); - osmLayer.alpha = layerCreationProperties.alpha; - osmLayer.id = layerCreationProperties.label; - osmLayer.name = layerCreationProperties.label; - osmLayer.visible = layerCreationProperties.visible; - if (!isNaN(layerCreationProperties.minScale)) - { - osmLayer.minScale = layerCreationProperties.minScale; - } - if (!isNaN(layerCreationProperties.maxScale)) - { - osmLayer.maxScale = layerCreationProperties.maxScale; - } - return osmLayer; - } - - private static function createKMLLayer(layerCreationProperties:LayerCreationProperties):KMLLayer - { - var kmlLayer:KMLLayer = new KMLLayer(layerCreationProperties.url); - - kmlLayer.alpha = layerCreationProperties.alpha; - kmlLayer.id = layerCreationProperties.label; - kmlLayer.name = layerCreationProperties.label; - kmlLayer.disableClientCaching = layerCreationProperties.disableClientCaching; - if (layerCreationProperties.serviceURL) - { - kmlLayer.serviceURL = layerCreationProperties.serviceURL; - } - if (!isNaN(layerCreationProperties.minScale)) - { - kmlLayer.minScale = layerCreationProperties.minScale; - } - if (!isNaN(layerCreationProperties.maxScale)) - { - kmlLayer.maxScale = layerCreationProperties.maxScale; - } - kmlLayer.visible = layerCreationProperties.visible; - return kmlLayer; - } - - private static function createCSVLayer(layerCreationProperties:LayerCreationProperties):CSVLayer - { - var csvLayer:CSVLayer = new CSVLayer(layerCreationProperties.url); - - csvLayer.alpha = layerCreationProperties.alpha; - csvLayer.id = layerCreationProperties.label; - csvLayer.name = layerCreationProperties.label; - csvLayer.latitudeFieldName = layerCreationProperties.latitudeFieldName; - csvLayer.longitudeFieldName = layerCreationProperties.longitudeFieldName; - if (layerCreationProperties.renderer) - { - csvLayer.renderer = layerCreationProperties.renderer; - } - if (layerCreationProperties.columnDelimiter) - { - csvLayer.columnDelimiter = layerCreationProperties.columnDelimiter; - } - if (layerCreationProperties.sourceFields) - { - var sFields:Array = layerCreationProperties.sourceFields.split(","); - var fields:Array = []; - for (var i:int = 0; i < sFields.length; i++) - { - var field:Field = new Field; - var fieldProps:Array = String(sFields[i]).split("|"); - if (fieldProps.length == 1) // field name only - { - field.name = fieldProps[0]; - } - else if (fieldProps.length == 2) // field name and alias - { - field.name = fieldProps[0]; - field.alias = fieldProps[1]; - } - else if (fieldProps.length == 3) // field name, alias and type - { - field.name = fieldProps[0]; - field.alias = fieldProps[1]; - field.type = fieldProps[2]; - } - fields.push(field); - } - csvLayer.sourceFields = fields; - } - return csvLayer; - } - - private static function createGeoRSSLayer(layerCreationProperties:LayerCreationProperties):GeoRSSLayer - { - var geoRSSLayer:GeoRSSLayer = new GeoRSSLayer(layerCreationProperties.url); - - geoRSSLayer.alpha = layerCreationProperties.alpha; - geoRSSLayer.id = layerCreationProperties.label; - geoRSSLayer.name = layerCreationProperties.label; - geoRSSLayer.disableClientCaching = layerCreationProperties.disableClientCaching; - if (layerCreationProperties.serviceURL) - { - geoRSSLayer.serviceURL = layerCreationProperties.serviceURL; - } - if (!isNaN(layerCreationProperties.minScale)) - { - geoRSSLayer.minScale = layerCreationProperties.minScale; - } - if (!isNaN(layerCreationProperties.maxScale)) - { - geoRSSLayer.maxScale = layerCreationProperties.maxScale; - } - geoRSSLayer.visible = layerCreationProperties.visible; - return geoRSSLayer; - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2012 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package com.esri.viewer.managers +{ + +import com.esri.ags.SpatialReference; +import com.esri.ags.layers.ArcGISDynamicMapServiceLayer; +import com.esri.ags.layers.ArcGISImageServiceLayer; +import com.esri.ags.layers.ArcGISTiledMapServiceLayer; +import com.esri.ags.layers.ArcIMSMapServiceLayer; +import com.esri.ags.layers.CSVLayer; +import com.esri.ags.layers.FeatureLayer; +import com.esri.ags.layers.GeoRSSLayer; +import com.esri.ags.layers.KMLLayer; +import com.esri.ags.layers.Layer; +import com.esri.ags.layers.OpenStreetMapLayer; +import com.esri.ags.layers.WMSLayer; +import com.esri.ags.layers.WMTSLayer; +import com.esri.ags.layers.supportClasses.Field; +import com.esri.ags.virtualearth.VETiledLayer; + +import flash.utils.setInterval; + +import mx.collections.ArrayCollection; +import mx.collections.ArrayList; + +public class LayerCreator +{ + public static function createLayerFromLayerObject(layerObject:Object):Layer + { + return createLayer(LayerCreationProperties.fromLayerObject(layerObject)); + } + + private static function createLayer(layerCreationProperties:LayerCreationProperties):Layer + { + var layerType:String = layerCreationProperties.type.toLowerCase(); + + if (layerType == "tiled") + { + return createTiledLayer(layerCreationProperties); + } + else if (layerType == "dynamic") + { + return createDynamicLayer(layerCreationProperties); + } + else if (layerType == "feature") + { + return createFeatureLayer(layerCreationProperties); + } + else if (layerType == "bing") + { + return createBingLayer(layerCreationProperties); + } + else if (layerType == "image") + { + return createImageLayer(layerCreationProperties); + } + else if (layerType == "arcims") + { + return createArcIMSLayer(layerCreationProperties); + } + else if (layerType == "wms") + { + return createWMSLayer(layerCreationProperties); + } + else if (layerType == "wmts") + { + return createWMTSLayer(layerCreationProperties); + } + else if (layerType == "osm") + { + return createOSMLayer(layerCreationProperties); + } + else if (layerType == "kml") + { + return createKMLLayer(layerCreationProperties); + } + else if (layerType == "csv") + { + return createCSVLayer(layerCreationProperties); + } + else if (layerType == "georss") + { + return createGeoRSSLayer(layerCreationProperties); + } + else + { + //TODO: throw meaningful error instead. + return null; + } + } + + private static function createTiledLayer(layerCreationProperties:LayerCreationProperties):ArcGISTiledMapServiceLayer + { + var tiledLayer:ArcGISTiledMapServiceLayer = new ArcGISTiledMapServiceLayer(layerCreationProperties.url); + tiledLayer.alpha = layerCreationProperties.alpha; + tiledLayer.id = layerCreationProperties.label; + tiledLayer.name = layerCreationProperties.label; + tiledLayer.token = layerCreationProperties.token; + tiledLayer.visible = layerCreationProperties.visible; + if (layerCreationProperties.displayLevels) + { + tiledLayer.displayLevels = layerCreationProperties.displayLevels.split(","); + for (var i:int = 0; i < tiledLayer.displayLevels.length; i++) + { + tiledLayer.displayLevels[i] = Number(tiledLayer.displayLevels[i]); // convert to Numbers + } + } + if (layerCreationProperties.proxyUrl && layerCreationProperties.useProxy) + { + tiledLayer.proxyURL = layerCreationProperties.proxyUrl; + } + if (!isNaN(layerCreationProperties.minScale)) + { + tiledLayer.minScale = layerCreationProperties.minScale; + } + if (!isNaN(layerCreationProperties.maxScale)) + { + tiledLayer.maxScale = layerCreationProperties.maxScale; + } + return tiledLayer; + } + + private static function createDynamicLayer(layerCreationProperties:LayerCreationProperties):ArcGISDynamicMapServiceLayer + { + var dynLayer:ArcGISDynamicMapServiceLayer = new ArcGISDynamicMapServiceLayer(layerCreationProperties.url); + dynLayer.alpha = layerCreationProperties.alpha; + dynLayer.id = layerCreationProperties.label; + dynLayer.gdbVersion = layerCreationProperties.gdbVersion; + dynLayer.name = layerCreationProperties.label; + dynLayer.token = layerCreationProperties.token; + dynLayer.visible = layerCreationProperties.visible; + dynLayer.useMapTime = layerCreationProperties.useMapTime; + dynLayer.disableClientCaching = layerCreationProperties.disableClientCaching; + if (layerCreationProperties.autoRefresh > 0) + { + setInterval(dynLayer.refresh, layerCreationProperties.autoRefresh * 1000); + } + if (layerCreationProperties.imageFormat) + { + dynLayer.imageFormat = layerCreationProperties.imageFormat; + } + if (layerCreationProperties.visibleLayers) + { + var vizLayers:Array = layerCreationProperties.visibleLayers.split(","); + for (var i:int = 0; i < vizLayers.length; i++) + { + vizLayers[i] = Number(vizLayers[i]); // convert to Numbers + } + dynLayer.visibleLayers = new ArrayCollection(vizLayers); + } + if (layerCreationProperties.proxyUrl && layerCreationProperties.useProxy) + { + dynLayer.proxyURL = layerCreationProperties.proxyUrl; + } + if (!isNaN(layerCreationProperties.minScale)) + { + dynLayer.minScale = layerCreationProperties.minScale; + } + if (!isNaN(layerCreationProperties.maxScale)) + { + dynLayer.maxScale = layerCreationProperties.maxScale; + } + if (layerCreationProperties.maxImageHeight > 0) + { + dynLayer.maxImageHeight = layerCreationProperties.maxImageHeight; + } + if (layerCreationProperties.maxImageWidth > 0) + { + dynLayer.maxImageWidth = layerCreationProperties.maxImageWidth; + } + return dynLayer; + } + + private static function createFeatureLayer(layerCreationProperties:LayerCreationProperties):FeatureLayer + { + var featureLayer:FeatureLayer = new FeatureLayer(layerCreationProperties.url); + + featureLayer.alpha = layerCreationProperties.alpha; + featureLayer.id = layerCreationProperties.label; + featureLayer.gdbVersion = layerCreationProperties.gdbVersion; + featureLayer.name = layerCreationProperties.label; + featureLayer.maxAllowableOffset = layerCreationProperties.maxAllowableOffset; + featureLayer.outFields = [ '*' ]; // TODO: be smarter + featureLayer.token = layerCreationProperties.token; + featureLayer.visible = layerCreationProperties.visible; + featureLayer.useMapTime = layerCreationProperties.useMapTime; + featureLayer.clusterer = layerCreationProperties.clusterer; + featureLayer.disableClientCaching = layerCreationProperties.disableClientCaching; + if (layerCreationProperties.renderer) + { + featureLayer.renderer = layerCreationProperties.renderer; + } + if (layerCreationProperties.autoRefresh > 0) + { + setInterval(featureLayer.refresh, layerCreationProperties.autoRefresh * 1000); + } + if (layerCreationProperties.useAMF) + { + featureLayer.useAMF = (layerCreationProperties.useAMF == "true"); + } + if (layerCreationProperties.mode) + { + featureLayer.mode = layerCreationProperties.mode; + } + if (layerCreationProperties.definitionExpression) + { + featureLayer.definitionExpression = layerCreationProperties.definitionExpression; + } + if (layerCreationProperties.proxyUrl && layerCreationProperties.useProxy) + { + featureLayer.proxyURL = layerCreationProperties.proxyUrl; + } + if (!isNaN(layerCreationProperties.minScale)) + { + featureLayer.minScale = layerCreationProperties.minScale; + } + if (!isNaN(layerCreationProperties.maxScale)) + { + featureLayer.maxScale = layerCreationProperties.maxScale; + } + if (!layerCreationProperties.isEditable) + { + featureLayer.isEditable = false; // only set it if it is 'false' + } + // example for hard-coding layer symbology, e.g. for pre-10.0 ArcGIS Servers + /* if (layerCreationProperties.label == "Traffic Cameras") // the layer label in main configuration file + { + var picSymbol:PictureMarkerSymbol = new PictureMarkerSymbol("assets/images/i_camera.png",30,30,0,0,0); + var rend:Renderer = new SimpleRenderer(picSymbol); + featureLayer.renderer = rend; + } */ + return featureLayer; + } + + private static function createBingLayer(layerCreationProperties:LayerCreationProperties):VETiledLayer + { + var veTiledLayer:VETiledLayer = new VETiledLayer(); + veTiledLayer.id = layerCreationProperties.label; + veTiledLayer.name = layerCreationProperties.label; + veTiledLayer.key = layerCreationProperties.bingMapKey; + veTiledLayer.visible = layerCreationProperties.visible; + veTiledLayer.alpha = layerCreationProperties.alpha; + if (layerCreationProperties.style) + { + veTiledLayer.mapStyle = layerCreationProperties.style; + } + if (layerCreationProperties.culture) + { + veTiledLayer.culture = layerCreationProperties.culture; + } + if (layerCreationProperties.displayLevels) + { + veTiledLayer.displayLevels = layerCreationProperties.displayLevels.split(","); + for (var i:int = 0; i < veTiledLayer.displayLevels.length; i++) + { + veTiledLayer.displayLevels[i] = Number(veTiledLayer.displayLevels[i]); // convert to Numbers + } + } + if (!isNaN(layerCreationProperties.minScale)) + { + veTiledLayer.minScale = layerCreationProperties.minScale; + } + if (!isNaN(layerCreationProperties.maxScale)) + { + veTiledLayer.maxScale = layerCreationProperties.maxScale; + } + return veTiledLayer; + } + + private static function createImageLayer(layerCreationProperties:LayerCreationProperties):ArcGISImageServiceLayer + { + var imgLayer:ArcGISImageServiceLayer = new ArcGISImageServiceLayer(layerCreationProperties.url); + imgLayer.id = layerCreationProperties.label; + imgLayer.name = layerCreationProperties.label; + imgLayer.alpha = layerCreationProperties.alpha; + imgLayer.token = layerCreationProperties.token; + imgLayer.visible = layerCreationProperties.visible; + imgLayer.noData = layerCreationProperties.noData; + imgLayer.useMapTime = layerCreationProperties.useMapTime; + imgLayer.disableClientCaching = layerCreationProperties.disableClientCaching; + if (layerCreationProperties.imageFormat) + { + imgLayer.imageFormat = layerCreationProperties.imageFormat; + } + if (layerCreationProperties.bandIds) + { + imgLayer.bandIds = layerCreationProperties.bandIds.split(","); + for (var i:int = 0; i < imgLayer.bandIds.length; i++) + { + imgLayer.bandIds[i] = Number(imgLayer.bandIds[i]); // convert to Numbers + } + } + if (layerCreationProperties.proxyUrl && layerCreationProperties.useProxy) + { + imgLayer.proxyURL = layerCreationProperties.proxyUrl; + } + if (!isNaN(layerCreationProperties.minScale)) + { + imgLayer.minScale = layerCreationProperties.minScale; + } + if (!isNaN(layerCreationProperties.maxScale)) + { + imgLayer.maxScale = layerCreationProperties.maxScale; + } + return imgLayer; + } + + private static function createArcIMSLayer(layerCreationProperties:LayerCreationProperties):ArcIMSMapServiceLayer + { + var arcimsLayer:ArcIMSMapServiceLayer = new ArcIMSMapServiceLayer(); + arcimsLayer.alpha = layerCreationProperties.alpha; + arcimsLayer.id = layerCreationProperties.label; + arcimsLayer.name = layerCreationProperties.label; + arcimsLayer.visible = layerCreationProperties.visible; + arcimsLayer.serviceHost = layerCreationProperties.serviceHost; + arcimsLayer.serviceName = layerCreationProperties.serviceName; + if (layerCreationProperties.autoRefresh > 0) + { + setInterval(arcimsLayer.refresh, layerCreationProperties.autoRefresh * 1000); + } + if (layerCreationProperties.imageFormat) + { + arcimsLayer.imageFormat = layerCreationProperties.imageFormat; + } + if (layerCreationProperties.visibleLayers) + { + var visLayers:Array = layerCreationProperties.visibleLayers.split(","); + arcimsLayer.visibleLayers = new ArrayCollection(visLayers); + } + if (layerCreationProperties.proxyUrl && layerCreationProperties.useProxy) + { + arcimsLayer.proxyURL = layerCreationProperties.proxyUrl; + } + if (layerCreationProperties.username && layerCreationProperties.password) + { + arcimsLayer.username = layerCreationProperties.username; + arcimsLayer.password = layerCreationProperties.password; + } + if (!isNaN(layerCreationProperties.minScale)) + { + arcimsLayer.minScale = layerCreationProperties.minScale; + } + if (!isNaN(layerCreationProperties.maxScale)) + { + arcimsLayer.maxScale = layerCreationProperties.maxScale; + } + return arcimsLayer; + } + + private static function createWMSLayer(layerCreationProperties:LayerCreationProperties):WMSLayer + { + var wmsLayer:WMSLayer = new WMSLayer(layerCreationProperties.url); + wmsLayer.alpha = layerCreationProperties.alpha; + wmsLayer.id = layerCreationProperties.label; + wmsLayer.name = layerCreationProperties.label; + wmsLayer.visible = layerCreationProperties.visible; + wmsLayer.disableClientCaching = layerCreationProperties.disableClientCaching; + if (layerCreationProperties.wkid) + { + wmsLayer.spatialReference = new SpatialReference(layerCreationProperties.wkid); + } + if (layerCreationProperties.autoRefresh > 0) + { + setInterval(wmsLayer.refresh, layerCreationProperties.autoRefresh * 1000); + } + if (layerCreationProperties.imageFormat) + { + wmsLayer.imageFormat = layerCreationProperties.imageFormat; + } + if (layerCreationProperties.visibleLayers) + { + var wmsVisLayers:Array = layerCreationProperties.visibleLayers.split(","); + wmsLayer.visibleLayers = new ArrayList(wmsVisLayers); + } + if (layerCreationProperties.proxyUrl && layerCreationProperties.useProxy) + { + wmsLayer.proxyURL = layerCreationProperties.proxyUrl; + } + if (layerCreationProperties.skipGetCapabilities) + { + wmsLayer.skipGetCapabilities = layerCreationProperties.skipGetCapabilities == "true"; + } + if (layerCreationProperties.username && layerCreationProperties.password) + { + wmsLayer.username = layerCreationProperties.username; + wmsLayer.password = layerCreationProperties.password; + } + if (layerCreationProperties.version) + { + wmsLayer.version = layerCreationProperties.version; + } + if (!isNaN(layerCreationProperties.minScale)) + { + wmsLayer.minScale = layerCreationProperties.minScale; + } + if (!isNaN(layerCreationProperties.maxScale)) + { + wmsLayer.maxScale = layerCreationProperties.maxScale; + } + if (layerCreationProperties.maxImageHeight > 0) + { + wmsLayer.maxImageHeight = layerCreationProperties.maxImageHeight; + } + if (layerCreationProperties.maxImageWidth > 0) + { + wmsLayer.maxImageWidth = layerCreationProperties.maxImageWidth; + } + return wmsLayer; + } + + private static function createWMTSLayer(layerCreationProperties:LayerCreationProperties):WMTSLayer + { + var wmtsLayer:WMTSLayer = new WMTSLayer(layerCreationProperties.url); + wmtsLayer.alpha = layerCreationProperties.alpha; + wmtsLayer.id = layerCreationProperties.label; + wmtsLayer.name = layerCreationProperties.label; + wmtsLayer.visible = layerCreationProperties.visible; + if (layerCreationProperties.imageFormat) + { + wmtsLayer.imageFormat = layerCreationProperties.imageFormat; + } + if (layerCreationProperties.proxyUrl && layerCreationProperties.useProxy) + { + wmtsLayer.proxyURL = layerCreationProperties.proxyUrl; + } + if (layerCreationProperties.serviceMode) + { + wmtsLayer.serviceMode = layerCreationProperties.serviceMode; + } + if (layerCreationProperties.layerId) + { + wmtsLayer.layerId = layerCreationProperties.layerId; + } + if (layerCreationProperties.tileMatrixSetId) + { + wmtsLayer.tileMatrixSetId = layerCreationProperties.tileMatrixSetId; + } + if (layerCreationProperties.style) + { + wmtsLayer.style = layerCreationProperties.style; + } + if (!isNaN(layerCreationProperties.minScale)) + { + wmtsLayer.minScale = layerCreationProperties.minScale; + } + if (!isNaN(layerCreationProperties.maxScale)) + { + wmtsLayer.maxScale = layerCreationProperties.maxScale; + } + return wmtsLayer; + } + + private static function createOSMLayer(layerCreationProperties:LayerCreationProperties):OpenStreetMapLayer + { + var osmLayer:OpenStreetMapLayer = new OpenStreetMapLayer(); + osmLayer.alpha = layerCreationProperties.alpha; + osmLayer.id = layerCreationProperties.label; + osmLayer.name = layerCreationProperties.label; + osmLayer.visible = layerCreationProperties.visible; + if (!isNaN(layerCreationProperties.minScale)) + { + osmLayer.minScale = layerCreationProperties.minScale; + } + if (!isNaN(layerCreationProperties.maxScale)) + { + osmLayer.maxScale = layerCreationProperties.maxScale; + } + return osmLayer; + } + + private static function createKMLLayer(layerCreationProperties:LayerCreationProperties):KMLLayer + { + var kmlLayer:KMLLayer = new KMLLayer(layerCreationProperties.url); + + kmlLayer.alpha = layerCreationProperties.alpha; + kmlLayer.id = layerCreationProperties.label; + kmlLayer.name = layerCreationProperties.label; + kmlLayer.disableClientCaching = layerCreationProperties.disableClientCaching; + if (layerCreationProperties.serviceURL) + { + kmlLayer.serviceURL = layerCreationProperties.serviceURL; + } + if (!isNaN(layerCreationProperties.minScale)) + { + kmlLayer.minScale = layerCreationProperties.minScale; + } + if (!isNaN(layerCreationProperties.maxScale)) + { + kmlLayer.maxScale = layerCreationProperties.maxScale; + } + kmlLayer.visible = layerCreationProperties.visible; + return kmlLayer; + } + + private static function createCSVLayer(layerCreationProperties:LayerCreationProperties):CSVLayer + { + var csvLayer:CSVLayer = new CSVLayer(layerCreationProperties.url); + + csvLayer.alpha = layerCreationProperties.alpha; + csvLayer.id = layerCreationProperties.label; + csvLayer.name = layerCreationProperties.label; + csvLayer.latitudeFieldName = layerCreationProperties.latitudeFieldName; + csvLayer.longitudeFieldName = layerCreationProperties.longitudeFieldName; + if (layerCreationProperties.renderer) + { + csvLayer.renderer = layerCreationProperties.renderer; + } + if (layerCreationProperties.columnDelimiter) + { + csvLayer.columnDelimiter = layerCreationProperties.columnDelimiter; + } + if (layerCreationProperties.sourceFields) + { + var sFields:Array = layerCreationProperties.sourceFields.split(","); + var fields:Array = []; + for (var i:int = 0; i < sFields.length; i++) + { + var field:Field = new Field; + var fieldProps:Array = String(sFields[i]).split("|"); + if (fieldProps.length == 1) // field name only + { + field.name = fieldProps[0]; + } + else if (fieldProps.length == 2) // field name and alias + { + field.name = fieldProps[0]; + field.alias = fieldProps[1]; + } + else if (fieldProps.length == 3) // field name, alias and type + { + field.name = fieldProps[0]; + field.alias = fieldProps[1]; + field.type = fieldProps[2]; + } + fields.push(field); + } + csvLayer.sourceFields = fields; + } + return csvLayer; + } + + private static function createGeoRSSLayer(layerCreationProperties:LayerCreationProperties):GeoRSSLayer + { + var geoRSSLayer:GeoRSSLayer = new GeoRSSLayer(layerCreationProperties.url); + + geoRSSLayer.alpha = layerCreationProperties.alpha; + geoRSSLayer.id = layerCreationProperties.label; + geoRSSLayer.name = layerCreationProperties.label; + geoRSSLayer.disableClientCaching = layerCreationProperties.disableClientCaching; + if (layerCreationProperties.serviceURL) + { + geoRSSLayer.serviceURL = layerCreationProperties.serviceURL; + } + if (!isNaN(layerCreationProperties.minScale)) + { + geoRSSLayer.minScale = layerCreationProperties.minScale; + } + if (!isNaN(layerCreationProperties.maxScale)) + { + geoRSSLayer.maxScale = layerCreationProperties.maxScale; + } + geoRSSLayer.visible = layerCreationProperties.visible; + return geoRSSLayer; + } +} + +} diff --git a/src/com/esri/viewer/managers/MapManager.mxml b/src/com/esri/viewer/managers/MapManager.mxml index 765686b..6fefa9f 100644 --- a/src/com/esri/viewer/managers/MapManager.mxml +++ b/src/com/esri/viewer/managers/MapManager.mxml @@ -1,1527 +1,1527 @@ - - - - - - [SkinState("decorated")] - [SkinState("resized")] - [SkinState("normal")] - - - 0) - { - map.scale = scale; - } - else if (level >= 0) - { - map.level = level; - } - } - } - } - - private function configBasemaps():void - { - m_basemapLayers.forEach(removeLayer); - - var layers:Array = m_configData.basemaps; - for (var i:uint = 0; i < layers.length; i++) - { - if (!layers[i].reference) - { - m_basemapLayers.push(layers[i]); - } - } - - if (m_basemapLayers.length > 0) - { - loadNextBasemapLayer(); - } - else - { - configOperationalLayers(); - } - - if (layers.length > 0) - { - map.addEventListener(MapEvent.LAYER_ADD, layerloadComplete); - } - } - - private function loadNextBasemapLayer():void - { - var basemapLayerObject:Object = m_basemapLayers[m_basemapLayerIndex]; - var layer:Layer = basemapLayerObject.layer ? basemapLayerObject.layer : LayerCreator.createLayerFromLayerObject(basemapLayerObject); - basemapLayerObject.layer = layer; - - // configure popups, if any - configureLayerRenderer(basemapLayerObject, false); - } - - private function configReferenceBasemaps():void - { - var layers:Array = m_configData.basemaps; - var layerObject:Object; - for (var i:uint = 0; i < layers.length; i++) - { - layerObject = layers[i]; - if (layerObject.reference) - { - layerObject.layer = layerObject.layer ? layerObject.layer : LayerCreator.createLayerFromLayerObject(layerObject); - addLayerToMap(layerObject); - } - } - } - - private function configOperationalLayers():void - { - m_operationalLayers.forEach(removeLayer); - - var layers:Array = m_configData.opLayers; - if (layers && layers.length > 0) - { - for (var i:uint = 0; i < layers.length; i++) - { - m_operationalLayers.push(layers[i]); - } - } - - if (m_operationalLayers.length > 0) - { - loadNextOperationalLayer(); - } - else - { - configReferenceBasemaps(); - } - } - - private function loadNextOperationalLayer():void - { - var optLayerObject:Object = m_operationalLayers[m_operationalLayerIndex]; - var layer:Layer = optLayerObject.layer ? optLayerObject.layer : LayerCreator.createLayerFromLayerObject(optLayerObject); - optLayerObject.layer = layer; - - // configure pop-ups, if any - configureLayerRenderer(optLayerObject, true); - } - - private function addLayerToMap(layerObject:Object):void - { - var layer:Layer = layerObject.layer; - if (layer) - { - layer.addEventListener(LayerEvent.LOAD_ERROR, layer_loadErrorEvent); - layer.addEventListener(LayerEvent.LOAD, layer_loadEvent); - if (layer is FeatureLayer) - { - layer.addEventListener(FlexEvent.HIDE, featureLayer_hideHandler); - } - if (layer is KMLLayer) - { - layer.addEventListener(FlexEvent.HIDE, kmlLayer_hideHandler); - } - map.addLayer(layer); - } - else - { - var errorMessage:String = LocalizationUtil.getDefaultString('incorrectLayerTypeText', "'" + layerObject.type + "'"); - AppEvent.showError(errorMessage, MAP_MANAGER); - } - } - - private function layer_loadErrorEvent(event:LayerEvent):void - { - event.layer.removeEventListener(LayerEvent.LOAD_ERROR, layer_loadErrorEvent); - event.layer.removeEventListener(LayerEvent.LOAD, layer_loadEvent); - - if (event.fault.faultString != "Sign in aborted") - { - var errorMessage:String = LocalizationUtil.getDefaultString("layerFailedToLoad", - event.layer.name, - ErrorMessageUtil.makeHTMLSafe(ErrorMessageUtil.buildFaultMessage(event.fault))); - - AppEvent.showError(errorMessage, MAP_MANAGER); - } - // remove layer from map and map switcher - removeLayerFromLayerObject(event.layer); - map.removeLayer(event.layer); - } - - private function removeLayerFromLayerObject(layer:Layer):void - { - var layerFound:Boolean; - var i:int; - for (i = 0; i < m_configData.opLayers.length; ) - { - if (m_configData.opLayers[i].layer == layer) - { - layerFound = true; - m_configData.opLayers.splice(i, 1); - break; - } - else - { - i++; - } - } - if (!layerFound) - { - for (i = 0; i < m_configData.basemaps.length; ) - { - if (m_configData.basemaps[i].layer == layer) - { - layerFound = true; - m_configData.basemaps.splice(i, 1); - break; - } - else - { - i++; - } - } - } - } - - private function layer_loadEvent(event:LayerEvent):void - { - event.layer.removeEventListener(LayerEvent.LOAD_ERROR, layer_loadErrorEvent); - event.layer.removeEventListener(LayerEvent.LOAD, layer_loadEvent); - - // update visible layers on dynamic map service - if (event.layer is ArcGISDynamicMapServiceLayer) - { - var arcgisDynamicMapServiceLayer:ArcGISDynamicMapServiceLayer = event.layer as ArcGISDynamicMapServiceLayer; - var visibleLayers:Array = arcgisDynamicMapServiceLayer.visibleLayers ? arcgisDynamicMapServiceLayer.visibleLayers.toArray() : null; - var layerInfos:Array = arcgisDynamicMapServiceLayer.dynamicLayerInfos || arcgisDynamicMapServiceLayer.layerInfos; - var actualVisibleLayers:Array = MapServiceUtil.getVisibleSubLayers(layerInfos, visibleLayers); - - arcgisDynamicMapServiceLayer.visibleLayers = new ArrayList(actualVisibleLayers); - } - } - - private function featureLayer_hideHandler(event:FlexEvent):void - { - const featureLayer:FeatureLayer = event.target as FeatureLayer; - const graphic:Graphic = map.infoWindow.contentOwner as Graphic; - if (map.infoWindow.visible && graphic && graphic.graphicsLayer === featureLayer) - { - map.infoWindow.hide(); - } - } - - private function kmlLayer_hideHandler(event:FlexEvent):void - { - const kmlLayer:KMLLayer = event.target as KMLLayer; - const graphic:Graphic = map.infoWindow.contentOwner as Graphic; - if (map.infoWindow.visible && graphic) - { - for (var i:int = 0; i < kmlLayer.layers.length; ) - { - if (graphic.graphicsLayer === kmlLayer.layers[i]) - { - map.infoWindow.hide(); - break; - } - else - { - i++; - } - } - } - } - - private function configureLayerRenderer(layerObject:Object, isOperationalLayer:Boolean):void - { - if (layerObject.layer is ArcGISDynamicMapServiceLayer || layerObject.layer is ArcGISTiledMapServiceLayer) - { - // look at the sublayers - var subLayers:Array = layerObject.subLayers as Array; - if ((subLayers).length > 0) - { - var dynamicLayer:ArcGISDynamicMapServiceLayer = layerObject.layer as ArcGISDynamicMapServiceLayer; - if (dynamicLayer) - { - dynamicLayer.layerDefinitions = getLayerDefinitions(subLayers); - } - - var arrLayerInfoWindowRenderer:Array = []; - var i:int; - var arrSubLayerPopUp:Array = []; - var arrSubLayerInfoWinWidget:Array = []; - var countPopUpOrInfoWinWidget:int = 0; - for (i = 0; i < subLayers.length; i++) - { - if (subLayers[i].popUpConfig[0]) - { - countPopUpOrInfoWinWidget++; - arrSubLayerPopUp.push({ layer: layerObject.layer, sublayer: subLayers[i], popUpConfig: subLayers[i].popUpConfig }); - } - else if (subLayers[i].infoConfig[0]) - { - countPopUpOrInfoWinWidget++; - arrSubLayerInfoWinWidget.push({ layer: layerObject.layer, sublayer: subLayers[i], infoConfig: subLayers[i].infoConfig, info: subLayers[i].info }); - } - } - if (countPopUpOrInfoWinWidget > 0) - { - // popups for sublayers - if (arrSubLayerPopUp.length > 0) - { - configurePopUps(isOperationalLayer, arrSubLayerPopUp, true, arrLayerInfoWindowRenderer); - } - - // simple info win widget for sublayers - for (i = 0; i < arrSubLayerInfoWinWidget.length; i++) - { - var layerInfoWindowRenderer:LayerInfoWindowRenderer = new LayerInfoWindowRenderer; - layerInfoWindowRenderer.layerId = arrSubLayerInfoWinWidget[i].sublayer.id; - - var sublayerData:Object = { id: arrSubLayerInfoWinWidget[i].id, url: arrSubLayerInfoWinWidget[i].info, config: arrSubLayerInfoWinWidget[i].infoConfig, layerInfoWindowRenderer: layerInfoWindowRenderer }; - AppEvent.dispatch(AppEvent.DATA_CREATE_INFOWIDGET, sublayerData, subLayerInfoReady); - } - - function subLayerInfoReady(event:AppEvent):void - { - var infoTemplate:IInfowindowTemplate = event.data.infoWidget; - var biWidget:IBaseWidget = infoTemplate as IBaseWidget; - var infoConfigXML:XML = biWidget.configXML; - - var infoRender:ClassFactory = new ClassFactory(infoTemplate.infoClass); - infoRender.properties = { infoConfig: infoConfigXML, map: map }; - - event.data.layerInfoWindowRenderer.infoWindowRenderer = infoRender; - arrLayerInfoWindowRenderer.push(event.data.layerInfoWindowRenderer); - - if (arrLayerInfoWindowRenderer.length == countPopUpOrInfoWinWidget) - { - layerObject.layer.layerInfoWindowRenderers = arrLayerInfoWindowRenderer; - loadNextOperationalOrBasemapLayer(isOperationalLayer); - } - } - } - else - { - loadNextOperationalOrBasemapLayer(isOperationalLayer); - } - } - else - { - loadNextOperationalOrBasemapLayer(isOperationalLayer); - } - } - else if (layerObject.popUpConfig) - { - configurePopUps(isOperationalLayer, [{ layer: layerObject.layer, popUpConfig: layerObject.popUpConfig }], false); - } - else if (layerObject.infoUrl) - { - var data:Object = { - id: layerObject.label, - url: layerObject.infoUrl, - config: layerObject.infoConfig, - isOptLayer: isOperationalLayer - }; - AppEvent.dispatch(AppEvent.DATA_CREATE_INFOWIDGET, data, infoReady); - } - else - { - loadNextOperationalOrBasemapLayer(isOperationalLayer); - } - - function configurePopUps(isOptLayer:Boolean, arrLayerPopUp:Array, isSublayer:Boolean, arrLayerInfoWindowRenderer:Array = null):void - { - var popUpCount:int = 0; - var popUpArray:Array = []; - for (i = 0; i < arrLayerPopUp.length; i++) - { - if (isSublayer) - { - var layerInfoWindowRenderer:LayerInfoWindowRenderer = new LayerInfoWindowRenderer(); - layerInfoWindowRenderer.layerId = arrLayerPopUp[i].sublayer.id; - } - - var popUpConfigURL:String = arrLayerPopUp[i].popUpConfig; - - var responderToken:Object = { - popUpConfigURL: popUpConfigURL, - layer: arrLayerPopUp[i].layer, - isSublayer: isSublayer, - layerInfoWindowRenderer: isSublayer ? layerInfoWindowRenderer : null }; - - if (popUpConfigURL.charAt(0) === "#") - { - var popUpConfigXML:XML = m_configData.configXML.configuration.(@id == popUpConfigURL.substr(1))[0]; - responderToken.popUpConfigXML = popUpConfigXML; - arrPopUpPush(responderToken); - } - else - { - var configService:HTTPService = new HTTPService(); - configService.url = popUpConfigURL; - configService.resultFormat = HTTPService.RESULT_FORMAT_TEXT; - var asyncToken:AsyncToken = configService.send(); - asyncToken.addResponder(new AsyncResponder(configResult, configFault, responderToken)); - } - } - - function arrPopUpPush(token:Object):void - { - popUpCount++; - // arrPopUp.push({ popUpConfigXML: XML(event.result), layer: token.layer, isSublayer: isSublayer, layerInfoWindowRenderer: token.layerInfoWindowRenderer }); - popUpArray.push(token); - if (popUpCount === arrLayerPopUp.length) - { - createPopUpRenderer(isOptLayer, popUpArray, arrLayerInfoWindowRenderer); - } - } - - //config result - function configResult(event:ResultEvent, token:Object = null):void - { - try - { - token.popUpConfigXML = XML(event.result); - arrPopUpPush(token); - } - catch (error:Error) - { - AppEvent.showError(LocalizationUtil.getDefaultString("parseConfigErrorText", token.popUpConfigURL + "\n" + error.message), MAP_MANAGER); - } - } - - //config fault - function configFault(event:FaultEvent, token:Object = null):void - { - // happens if for example the popup config file missing or have crossdomain problem - var sInfo:String = ""; - - // Missing file - if (event.fault.rootCause is IOErrorEvent) - { - var ioe:IOErrorEvent = event.fault.rootCause as IOErrorEvent; - if (ioe.text.indexOf("2032: Stream Error. URL:") > -1) - { - sInfo += LocalizationUtil.getDefaultString('missingConfigFileText', ioe.text.substring(32)) + "\n\n"; - } - else - { - // some other IOError - sInfo += event.fault.rootCause + "\n\n"; - } - } - - // config file with crossdomain issue - if (event.fault.rootCause is SecurityErrorEvent) - { - var sec:SecurityErrorEvent = event.fault.rootCause as SecurityErrorEvent; - if (sec.text.indexOf("Error #2048: ") > -1) // debug player - { - sInfo += LocalizationUtil.getDefaultString('configFileCrossDomain', "\n", sec.text) + "\n\n"; - } - else if (sec.text.indexOf("Error #2048") > -1) // non-debug player - { - sInfo += LocalizationUtil.getDefaultString('configFileCrossDomain', "\n", sec.toString()) + "\n\n"; - } - else - { - // some other Security error - sInfo += event.fault.rootCause + "\n\n"; - } - } - - if (event.statusCode) // e.g. 404 - Not Found - http://en.wikipedia.org/wiki/List_of_HTTP_status_codes - { - sInfo += LocalizationUtil.getDefaultString('httpResponseStatus', event.statusCode) + "\n\n"; - } - - sInfo += ErrorMessageUtil.buildFaultMessage(event.fault); - - AppEvent.showError(sInfo, MAP_MANAGER); - - popUpCount++; - if (popUpCount == arrLayerPopUp.length) - { - createPopUpRenderer(isOptLayer, popUpArray, arrLayerInfoWindowRenderer); - } - } - } - - function createPopUpRenderer(isOptLayer:Boolean, arr:Array, arrLayerInfoWindowRenderer:Array = null):void - { - var index:int = 0; - parseArray(index, isOptLayer, arr, arrLayerInfoWindowRenderer); - } - - function parseArray(index:int, isOptLayer:Boolean, arr:Array, arrLayerInfoWindowRenderer:Array):void - { - if (index < arr.length) - { - var popUpConfigXML:XML = arr[index].popUpConfigXML; - var popUpInfo:PopUpInfo = new PopUpInfo(); - var i:int; - if (popUpConfigXML.fields[0]) - { - var fields:XMLList = popUpConfigXML.fields[0].field; - var fieldsOrder:String = popUpConfigXML.fields[0].@order; - - var pFieldInfos:Array = []; - var arrFields:Array = []; - if (fieldsOrder && (fieldsOrder == "alphabetical" || fieldsOrder == "default")) - { - // get the fields from the layer - var fieldNames:Array = []; - var layer:Layer = arr[index].layer; - if (layer is ArcGISDynamicMapServiceLayer || layer is ArcGISTiledMapServiceLayer) - { - if (arr[index].isSublayer) - { - var layerId:Number = arr[index].layerInfoWindowRenderer.layerId; - if (layer is ArcGISDynamicMapServiceLayer) - { - ArcGISDynamicMapServiceLayer(layer).getDetails(layerId, new AsyncResponder(myResultFunction, myFaultFunction)); - } - else - { - ArcGISTiledMapServiceLayer(layer).getDetails(layerId, new AsyncResponder(myResultFunction, myFaultFunction)); - } - } - } - else if (layer is FeatureLayer) - { - if (FeatureLayer(layer).layerDetails) - { - for each (var field:Field in FeatureLayer(layer).layerDetails.fields) - { - fieldNames.push(field.name); - } - } - else if (FeatureLayer(layer).tableDetails) - { - for each (var field1:Field in FeatureLayer(layer).tableDetails.fields) - { - fieldNames.push(field1.name); - } - } - for (i = 0; i < fields.length(); i++) - { - var order:int; - if (fieldsOrder == "default") - { - order = getFormItemOrderBasedOnFields(fields[i].@name, fieldNames) - } - arrFields.push({ label: fields[i].@alias[0] ? fields[i].@alias : fields[i].@name, order: order, fieldXML: fields[i]}); - } - arrFields.sort(compareFunction); - parseArrFields(arrFields); - parseRestPopUpConfig(popUpConfigXML); - - var popUpRenderer:ClassFactory = new ClassFactory(PopUpRenderer); - popUpRenderer.properties = { popUpInfo: popUpInfo }; - - arr[index].layer.infoWindowRenderer = popUpRenderer; - } - - function myResultFunction(result:Object, token:Object = null):void - { - if (result is LayerDetails) - { - for each (var field:Field in LayerDetails(result).fields) - { - fieldNames.push(field.name); - } - } - else if (result is TableDetails) - { - for each (var field1:Field in LayerDetails(result).fields) - { - fieldNames.push(field1.name); - } - } - - for (i = 0; i < fields.length(); i++) - { - var order:int; - if (fieldsOrder == "fields") - { - order = getFormItemOrderBasedOnFields(fields[i].@name, fieldNames) - } - arrFields.push({ label: fields[i].@alias[0] ? fields[i].@alias : fields[i].@name, order: order, fieldXML: fields[i]}); - } - arrFields.sort(compareFunction); - parseArrFields(arrFields); - parseRestPopUpConfig(popUpConfigXML); - - var popUpRenderer:ClassFactory = new ClassFactory(PopUpRenderer); - popUpRenderer.properties = { popUpInfo: popUpInfo }; - arr[index].layerInfoWindowRenderer.infoWindowRenderer = popUpRenderer; - arrLayerInfoWindowRenderer.push(arr[index].layerInfoWindowRenderer); - if (index == arr.length - 1) - { - arr[index].layer.layerInfoWindowRenderers = arrLayerInfoWindowRenderer; - } - - index++; - parseArray(index, isOptLayer, arr, arrLayerInfoWindowRenderer); - } - - function myFaultFunction(fault:Fault):void - { - index++; - parseArray(index, isOptLayer, arr, arrLayerInfoWindowRenderer); - } - } - else - { - for (i = 0; i < fields.length(); i++) - { - arrFields.push({ fieldXML: fields[i]}); - } - parseArrFields(arrFields); - parseRestPopUpConfig(popUpConfigXML); - setPopUpRendererOnLayer(); - - index++; - parseArray(index, isOptLayer, arr, arrLayerInfoWindowRenderer); - } - } - else - { - parseRestPopUpConfig(popUpConfigXML); - setPopUpRendererOnLayer(); - - index++; - parseArray(index, isOptLayer, arr, arrLayerInfoWindowRenderer); - } - - function parseArrFields(arrFields:Array):void - { - for (i = 0; i < arrFields.length; i++) - { - var field:XML = arrFields[i].fieldXML; - - var pFieldInfo:PopUpFieldInfo = new PopUpFieldInfo(); - pFieldInfo.fieldName = field.@name; - if (field.@alias[0]) - { - pFieldInfo.label = field.@alias; - } - pFieldInfo.visible = field.@visible == "true"; - - pFieldInfo.format = new PopUpFieldFormat(); - if (field.format.@dateformat[0]) - { - pFieldInfo.format.dateFormat = field.format.@dateformat; - } - if (field.format.@precision[0]) - { - pFieldInfo.format.precision = field.format.@precision; - } - if (field.format.@usethousandsseparator[0]) - { - pFieldInfo.format.useThousandsSeparator = field.format.@usethousandsseparator == "true"; - } - if (field.format.@useutc[0]) - { - pFieldInfo.format.useUTC = field.format.@useutc == "true"; - } - pFieldInfos.push(pFieldInfo); - } - popUpInfo.popUpFieldInfos = pFieldInfos; - } - - function parseRestPopUpConfig(popUpConfigXML:XML):void - { - if (popUpConfigXML.medias[0]) - { - var medias:XMLList = popUpConfigXML.medias[0].media; - - var pMediaInfos:Array = []; - for (i = 0; i < medias.length(); i++) - { - var pMediaInfo:PopUpMediaInfo = new PopUpMediaInfo(); - pMediaInfo.caption = medias[i].@caption; - pMediaInfo.title = medias[i].@title; - pMediaInfo.type = medias[i].@type; - pMediaInfo.imageLinkURL = medias[i].@imagelink; - pMediaInfo.imageSourceURL = medias[i].@imagesource; - - if (medias[i].@chartfields[0]) - { - var chartFields:Array = medias[i].@chartfields.split(","); - pMediaInfo.chartFields = chartFields; - } - - pMediaInfos.push(pMediaInfo); - } - popUpInfo.popUpMediaInfos = pMediaInfos; - } - popUpInfo.title = popUpConfigXML.title; - popUpInfo.description = popUpConfigXML.description; - if (popUpConfigXML.showattachments[0]) - { - popUpInfo.showAttachments = popUpConfigXML.showattachments == "true"; - } - if (popUpConfigXML.showrelatedrecords[0]) - { - popUpInfo.showRelatedRecords = popUpConfigXML.showrelatedrecords == "true"; - } - if (popUpConfigXML.showzoomtobutton[0]) - { - popUpInfo.showZoomToButton = popUpConfigXML.showzoomtobutton == "true"; - } - } - - function setPopUpRendererOnLayer():void - { - var popUpRenderer1:ClassFactory = new ClassFactory(PopUpRenderer); - popUpRenderer1.properties = { popUpInfo: popUpInfo }; - if (arr[index].isSublayer) - { - arr[index].layerInfoWindowRenderer.infoWindowRenderer = popUpRenderer1; - arrLayerInfoWindowRenderer.push(arr[index].layerInfoWindowRenderer); - if (index == arr.length - 1) - { - arr[index].layer.layerInfoWindowRenderers = arrLayerInfoWindowRenderer; - } - } - else - { - arr[index].layer.infoWindowRenderer = popUpRenderer1; - } - } - } - else - { - loadNextOperationalOrBasemapLayer(isOptLayer); - } - } - } - - private function getFormItemOrderBasedOnFields(fieldName:String, fieldNames:Array):int - { - var result:int; - - for (var i:int = 0; i < fieldNames.length; ) - { - if (fieldName == fieldNames[i]) - { - result = i + 1; // make sure that 0 is never returned - break; - } - else - { - i++ - } - } - - return result; - } - - - private function compareFunction(lhs:Object, rhs:Object):Number - { - if (lhs.order < rhs.order) - { - return -1; - } - if (lhs.order > rhs.order) - { - return 1; - } - return m_sortingCollator.compare(lhs.label, rhs.label); - } - - private function getLayerDefinitions(subLayers:Array):Array - { - var layerDefinitions:Array = []; - - for each (var subLayerObject:Object in subLayers) - { - layerDefinitions[subLayerObject.id] = subLayerObject.definitionExpression; - } - - return layerDefinitions; - } - - private var infoTemplate:IInfowindowTemplate; - - private var infoRender:ClassFactory; - - private function infoReady(event:AppEvent):void - { - var id:String = event.data.id as String; - var isOperationLayer:Boolean = event.data.isOptLayer; - var label:String = isOperationLayer ? m_operationalLayers[m_operationalLayerIndex].label : m_basemapLayers[m_basemapLayerIndex].label; - if (id == label) - { - infoTemplate = event.data.infoWidget; - var baseWidget:IBaseWidget = infoTemplate as IBaseWidget; - var infoConfigXML:XML = baseWidget.configXML; - infoRender = new ClassFactory(infoTemplate.infoClass); - infoRender.properties = { infoConfig: infoConfigXML, map: map }; - - if (isOperationLayer) - { - m_operationalLayers[m_operationalLayerIndex].layer.infoWindowRenderer = infoRender; - } - else - { - m_basemapLayers[m_basemapLayerIndex].layer.infoWindowRenderer = infoRender; - } - loadNextOperationalOrBasemapLayer(isOperationLayer); - } - } - - private function loadNextOperationalOrBasemapLayer(isOperationalLayer:Boolean):void - { - if (isOperationalLayer) - { - // add layer to map after popups have been configured, if any - var optLayerObject:Object = m_operationalLayers[m_operationalLayerIndex]; - addLayerToMap(optLayerObject); - - m_optLayerTable.push(optLayerObject); - m_operationalLayerIndex++; - if (m_operationalLayerIndex < m_operationalLayers.length) - { - loadNextOperationalLayer(); - } - else - { - configReferenceBasemaps(); // operational layers added, move on to reference layers, if any - } - } - else - { - // add layer to map after popups have been configured, if any - var basemapLayerObject:Object = m_basemapLayers[m_basemapLayerIndex]; - addLayerToMap(basemapLayerObject); - - m_basemapLayerIndex++; - if (m_basemapLayerIndex < m_basemapLayers.length) - { - loadNextBasemapLayer(); - } - else - { - configOperationalLayers(); // basemap layers added, move on to operational layers, if any - } - } - } - - private function dataOptLayersHandler(event:AppEvent):void - { - var callback:Function = event.callback as Function; - callback(new AppEvent(AppEvent.DATA_OPT_LAYERS, this.m_optLayerTable)); - } - - private function layerloadComplete(event:MapEvent):void - { - AppEvent.dispatch(AppEvent.LAYER_LOADED); - } - - override protected function getCurrentSkinState():String - { - return m_mapManagerState; - } - - //nav tool clicked - private function changeNavigationbyWidget(event:AppEvent):void - { - m_navigationTool = event.data ? event.data.tool : null; - m_navigationStatus = event.data ? event.data.status : null; - - changeNavigation(m_navigationTool, m_navigationStatus); - } - - private function setMapNavigationHandler(event:AppEvent):void - { - m_navigationTool = event.data ? event.data.tool : null; - m_navigationStatus = event.data ? event.data.status : null; - - changeNavigation(m_navigationTool, m_navigationStatus); - } - - private function changeNavigation(tool:String, status:String):void - { - map.removeEventListener(MouseEvent.ROLL_OVER, map_rollOverHandler); - map.removeEventListener(MouseEvent.ROLL_OUT, map_rollOutHandler); - if (tool) - { - switch (tool) - { - case NavigationTool.ZOOM_IN: - { - // custom cursor - map.addEventListener(MouseEvent.ROLL_OVER, map_rollOverHandler); - map.addEventListener(MouseEvent.ROLL_OUT, map_rollOutHandler); - - m_drawTool.deactivate(); - m_navTool.deactivate(); - m_navTool.activate(tool); - AppEvent.setStatus(status); - break; - } - case NavigationTool.ZOOM_OUT: - { - // custom cursor - map.addEventListener(MouseEvent.ROLL_OVER, map_rollOverHandler); - map.addEventListener(MouseEvent.ROLL_OUT, map_rollOutHandler); - - m_drawTool.deactivate(); - m_navTool.deactivate(); - m_navTool.activate(tool); - AppEvent.setStatus(status); - break; - } - case ViewerContainer.NAVIGATION_ZOOM_FULL: - { - if (m_fullExtent) - { - map.extent = m_fullExtent - } - else - { - map.zoomToInitialExtent(); // use map.zoomToInitialExtent() as NavigationTool.zoomToFullExtent() is deprecated - } - AppEvent.setStatus(null); - break; - } - case ViewerContainer.NAVIGATION_ZOOM_PREVIOUS: - { - m_navTool.zoomToPrevExtent(); - AppEvent.setStatus(null); - break; - } - case ViewerContainer.NAVIGATION_ZOOM_NEXT: - { - m_navTool.zoomToNextExtent(); - AppEvent.setStatus(null); - break; - } - case NavigationTool.PAN: - { - m_drawTool.deactivate(); - m_navTool.activate(tool); - m_navTool.deactivate(); - AppEvent.setStatus(status); - break; - } - default: - { - m_drawTool.deactivate(); - m_navTool.activate(NavigationTool.PAN); - m_navTool.deactivate(); - AppEvent.setStatus(m_defaultStatus); - break; - } - } - } - } - - private function map_rollOverHandler(event:MouseEvent):void - { - map.cursorManager.setCursor(_crossCursor, CursorManagerPriority.MEDIUM, -8, -8); - } - - private function map_rollOutHandler(event:MouseEvent):void - { - map.cursorManager.removeAllCursors(); - } - - //draw tool clicked - private function setMapActionHandler(event:AppEvent):void - { - var data:Object = event.data; - var tool:String = data.tool; - var status:String = data.status; - var symbol:Symbol = data.symbol; - var showDrawTips:Boolean = data.showDrawTips; - var enableGraphicsLayerMouseEvents:Boolean = data.enableGraphicsLayerMouseEvents; - - if (tool) - { - // make sure there is no custom cursor - map.cursorManager.removeAllCursors(); - map.removeEventListener(MouseEvent.ROLL_OVER, map_rollOverHandler); - map.removeEventListener(MouseEvent.ROLL_OUT, map_rollOutHandler); - - m_drawEndFunction = data.handler; - m_drawUpdateFunction = data.handler2; - m_navTool.deactivate(); - m_drawTool.activate(tool, enableGraphicsLayerMouseEvents); - // showDrawTips - m_drawTool.showDrawTips = showDrawTips; - // reset symbology - m_drawTool.markerSymbol = new SimpleMarkerSymbol; - m_drawTool.lineSymbol = new SimpleLineSymbol; - m_drawTool.fillSymbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID, 0, 0.5, new SimpleLineSymbol); - if (symbol) - { - if (symbol is TextSymbol || symbol is SimpleMarkerSymbol || symbol is PictureMarkerSymbol) - { - m_drawTool.markerSymbol = symbol; - } - else if (symbol is SimpleLineSymbol) - { - m_drawTool.lineSymbol = symbol; - } - else if (symbol is SimpleFillSymbol) - { - m_drawTool.fillSymbol = symbol; - } - } - - //map.zoomSliderVisible = true; - AppEvent.setStatus(status); - } - else - { - m_drawTool.deactivate(); - restoreNavigation(); - } - } - - private function drawUpdateHandler(event:DrawEvent):void - { - if (m_drawUpdateFunction != null) - { - m_drawUpdateFunction(event); - } - } - - private function drawEndHandler(event:DrawEvent):void - { - restoreNavigation(); - m_drawEndFunction(event); - } - - private function restoreNavigation():void - { - if (m_navigationTool == NavigationTool.ZOOM_IN || m_navigationTool == NavigationTool.ZOOM_OUT || m_navigationTool == NavigationTool.PAN) - { - if (m_navigationTool != NavigationTool.PAN) - { - map.cursorManager.setCursor(_crossCursor, CursorManagerPriority.MEDIUM, -8, -8); - } - changeNavigation(m_navigationTool, m_navigationStatus); - } - } - - private function mapLayerVisibleHandler(event:AppEvent):void - { - var lyrData:Object = event.data; - - lyrData.layer.visible = lyrData.visible; - - //ViewerContainer.publish(AppEvent.LAYER_VISIBLE_CHANGED, event.data); - } - - //basemap menu clicked - private function basemapSwitchHandler(event:AppEvent):void - { - const id:String = event.data as String; - if (id) - { - const configBasemaps:Array = m_configData.basemaps; - var selectedLabel:String; - for (var i:uint = 0; i < configBasemaps.length; i++) - { - if (configBasemaps[i].id == id) - { - selectedLabel = configBasemaps[i].label; - break; - } - } - if (selectedLabel) - { - // turn on the selected basemap layers (more than one layer can have the same label) - var layers:ArrayCollection = map.layers as ArrayCollection; - for (i = 0; i < configBasemaps.length; i++) - { - var basemapLabel:String = configBasemaps[i].label; - for each (var layer:Layer in layers) - { - if (layer.id == basemapLabel) - { - if (layer.id == selectedLabel) - { - layer.visible = true; - } - else - { - layer.visible = false; - } - } - } - } - } - } - } - - private function showInfoWindowHandler(event:AppEvent):void - { - m_infoPopup.infoData = event.data; - } - - private function mapResizeHandler(event:AppEvent):void - { - var size:Object = event.data; - - mapLeft = size.left; - mapRight = size.right; - mapTop = size.top; - mapBottom = size.bottom; - - this.m_mapManagerState = "resized"; - - dispatchEvent(new Event(m_mapManagerState)); - invalidateSkinState(); - } - - private function removeLayer(layerObject:Object, index:int, source:Array):void - { - map.removeLayer(layerObject.layer); - } - - private function toScaleBarSkinClass(scaleBarStyleName:String = "default"):Class - { - var scaleBarClass:Class; - - switch (scaleBarStyleName) - { - case "metric": - { - scaleBarClass = ScaleBarMetricSkin; - break; - } - case "us": - { - scaleBarClass = ScaleBarUSSkin; - break; - } - default: - { - scaleBarClass = ScaleBarSkin; - } - } - - return scaleBarClass; - } - ]]> - - + + + + + + [SkinState("decorated")] + [SkinState("resized")] + [SkinState("normal")] + + + 0) + { + map.scale = scale; + } + else if (level >= 0) + { + map.level = level; + } + } + } + } + + private function configBasemaps():void + { + m_basemapLayers.forEach(removeLayer); + + var layers:Array = m_configData.basemaps; + for (var i:uint = 0; i < layers.length; i++) + { + if (!layers[i].reference) + { + m_basemapLayers.push(layers[i]); + } + } + + if (m_basemapLayers.length > 0) + { + loadNextBasemapLayer(); + } + else + { + configOperationalLayers(); + } + + if (layers.length > 0) + { + map.addEventListener(MapEvent.LAYER_ADD, layerloadComplete); + } + } + + private function loadNextBasemapLayer():void + { + var basemapLayerObject:Object = m_basemapLayers[m_basemapLayerIndex]; + var layer:Layer = basemapLayerObject.layer ? basemapLayerObject.layer : LayerCreator.createLayerFromLayerObject(basemapLayerObject); + basemapLayerObject.layer = layer; + + // configure popups, if any + configureLayerRenderer(basemapLayerObject, false); + } + + private function configReferenceBasemaps():void + { + var layers:Array = m_configData.basemaps; + var layerObject:Object; + for (var i:uint = 0; i < layers.length; i++) + { + layerObject = layers[i]; + if (layerObject.reference) + { + layerObject.layer = layerObject.layer ? layerObject.layer : LayerCreator.createLayerFromLayerObject(layerObject); + addLayerToMap(layerObject); + } + } + } + + private function configOperationalLayers():void + { + m_operationalLayers.forEach(removeLayer); + + var layers:Array = m_configData.opLayers; + if (layers && layers.length > 0) + { + for (var i:uint = 0; i < layers.length; i++) + { + m_operationalLayers.push(layers[i]); + } + } + + if (m_operationalLayers.length > 0) + { + loadNextOperationalLayer(); + } + else + { + configReferenceBasemaps(); + } + } + + private function loadNextOperationalLayer():void + { + var optLayerObject:Object = m_operationalLayers[m_operationalLayerIndex]; + var layer:Layer = optLayerObject.layer ? optLayerObject.layer : LayerCreator.createLayerFromLayerObject(optLayerObject); + optLayerObject.layer = layer; + + // configure pop-ups, if any + configureLayerRenderer(optLayerObject, true); + } + + private function addLayerToMap(layerObject:Object):void + { + var layer:Layer = layerObject.layer; + if (layer) + { + layer.addEventListener(LayerEvent.LOAD_ERROR, layer_loadErrorEvent); + layer.addEventListener(LayerEvent.LOAD, layer_loadEvent); + if (layer is FeatureLayer) + { + layer.addEventListener(FlexEvent.HIDE, featureLayer_hideHandler); + } + if (layer is KMLLayer) + { + layer.addEventListener(FlexEvent.HIDE, kmlLayer_hideHandler); + } + map.addLayer(layer); + } + else + { + var errorMessage:String = LocalizationUtil.getDefaultString('incorrectLayerTypeText', "'" + layerObject.type + "'"); + AppEvent.showError(errorMessage, MAP_MANAGER); + } + } + + private function layer_loadErrorEvent(event:LayerEvent):void + { + event.layer.removeEventListener(LayerEvent.LOAD_ERROR, layer_loadErrorEvent); + event.layer.removeEventListener(LayerEvent.LOAD, layer_loadEvent); + + if (event.fault.faultString != "Sign in aborted") + { + var errorMessage:String = LocalizationUtil.getDefaultString("layerFailedToLoad", + event.layer.name, + ErrorMessageUtil.makeHTMLSafe(ErrorMessageUtil.buildFaultMessage(event.fault))); + + AppEvent.showError(errorMessage, MAP_MANAGER); + } + // remove layer from map and map switcher + removeLayerFromLayerObject(event.layer); + map.removeLayer(event.layer); + } + + private function removeLayerFromLayerObject(layer:Layer):void + { + var layerFound:Boolean; + var i:int; + for (i = 0; i < m_configData.opLayers.length; ) + { + if (m_configData.opLayers[i].layer == layer) + { + layerFound = true; + m_configData.opLayers.splice(i, 1); + break; + } + else + { + i++; + } + } + if (!layerFound) + { + for (i = 0; i < m_configData.basemaps.length; ) + { + if (m_configData.basemaps[i].layer == layer) + { + layerFound = true; + m_configData.basemaps.splice(i, 1); + break; + } + else + { + i++; + } + } + } + } + + private function layer_loadEvent(event:LayerEvent):void + { + event.layer.removeEventListener(LayerEvent.LOAD_ERROR, layer_loadErrorEvent); + event.layer.removeEventListener(LayerEvent.LOAD, layer_loadEvent); + + // update visible layers on dynamic map service + if (event.layer is ArcGISDynamicMapServiceLayer) + { + var arcgisDynamicMapServiceLayer:ArcGISDynamicMapServiceLayer = event.layer as ArcGISDynamicMapServiceLayer; + var visibleLayers:Array = arcgisDynamicMapServiceLayer.visibleLayers ? arcgisDynamicMapServiceLayer.visibleLayers.toArray() : null; + var layerInfos:Array = arcgisDynamicMapServiceLayer.dynamicLayerInfos || arcgisDynamicMapServiceLayer.layerInfos; + var actualVisibleLayers:Array = MapServiceUtil.getVisibleSubLayers(layerInfos, visibleLayers); + + arcgisDynamicMapServiceLayer.visibleLayers = new ArrayList(actualVisibleLayers); + } + } + + private function featureLayer_hideHandler(event:FlexEvent):void + { + const featureLayer:FeatureLayer = event.target as FeatureLayer; + const graphic:Graphic = map.infoWindow.contentOwner as Graphic; + if (map.infoWindow.visible && graphic && graphic.graphicsLayer === featureLayer) + { + map.infoWindow.hide(); + } + } + + private function kmlLayer_hideHandler(event:FlexEvent):void + { + const kmlLayer:KMLLayer = event.target as KMLLayer; + const graphic:Graphic = map.infoWindow.contentOwner as Graphic; + if (map.infoWindow.visible && graphic) + { + for (var i:int = 0; i < kmlLayer.layers.length; ) + { + if (graphic.graphicsLayer === kmlLayer.layers[i]) + { + map.infoWindow.hide(); + break; + } + else + { + i++; + } + } + } + } + + private function configureLayerRenderer(layerObject:Object, isOperationalLayer:Boolean):void + { + if (layerObject.layer is ArcGISDynamicMapServiceLayer || layerObject.layer is ArcGISTiledMapServiceLayer) + { + // look at the sublayers + var subLayers:Array = layerObject.subLayers as Array; + if ((subLayers).length > 0) + { + var dynamicLayer:ArcGISDynamicMapServiceLayer = layerObject.layer as ArcGISDynamicMapServiceLayer; + if (dynamicLayer) + { + dynamicLayer.layerDefinitions = getLayerDefinitions(subLayers); + } + + var arrLayerInfoWindowRenderer:Array = []; + var i:int; + var arrSubLayerPopUp:Array = []; + var arrSubLayerInfoWinWidget:Array = []; + var countPopUpOrInfoWinWidget:int = 0; + for (i = 0; i < subLayers.length; i++) + { + if (subLayers[i].popUpConfig[0]) + { + countPopUpOrInfoWinWidget++; + arrSubLayerPopUp.push({ layer: layerObject.layer, sublayer: subLayers[i], popUpConfig: subLayers[i].popUpConfig }); + } + else if (subLayers[i].infoConfig[0]) + { + countPopUpOrInfoWinWidget++; + arrSubLayerInfoWinWidget.push({ layer: layerObject.layer, sublayer: subLayers[i], infoConfig: subLayers[i].infoConfig, info: subLayers[i].info }); + } + } + if (countPopUpOrInfoWinWidget > 0) + { + // popups for sublayers + if (arrSubLayerPopUp.length > 0) + { + configurePopUps(isOperationalLayer, arrSubLayerPopUp, true, arrLayerInfoWindowRenderer); + } + + // simple info win widget for sublayers + for (i = 0; i < arrSubLayerInfoWinWidget.length; i++) + { + var layerInfoWindowRenderer:LayerInfoWindowRenderer = new LayerInfoWindowRenderer; + layerInfoWindowRenderer.layerId = arrSubLayerInfoWinWidget[i].sublayer.id; + + var sublayerData:Object = { id: arrSubLayerInfoWinWidget[i].id, url: arrSubLayerInfoWinWidget[i].info, config: arrSubLayerInfoWinWidget[i].infoConfig, layerInfoWindowRenderer: layerInfoWindowRenderer }; + AppEvent.dispatch(AppEvent.DATA_CREATE_INFOWIDGET, sublayerData, subLayerInfoReady); + } + + function subLayerInfoReady(event:AppEvent):void + { + var infoTemplate:IInfowindowTemplate = event.data.infoWidget; + var biWidget:IBaseWidget = infoTemplate as IBaseWidget; + var infoConfigXML:XML = biWidget.configXML; + + var infoRender:ClassFactory = new ClassFactory(infoTemplate.infoClass); + infoRender.properties = { infoConfig: infoConfigXML, map: map }; + + event.data.layerInfoWindowRenderer.infoWindowRenderer = infoRender; + arrLayerInfoWindowRenderer.push(event.data.layerInfoWindowRenderer); + + if (arrLayerInfoWindowRenderer.length == countPopUpOrInfoWinWidget) + { + layerObject.layer.layerInfoWindowRenderers = arrLayerInfoWindowRenderer; + loadNextOperationalOrBasemapLayer(isOperationalLayer); + } + } + } + else + { + loadNextOperationalOrBasemapLayer(isOperationalLayer); + } + } + else + { + loadNextOperationalOrBasemapLayer(isOperationalLayer); + } + } + else if (layerObject.popUpConfig) + { + configurePopUps(isOperationalLayer, [{ layer: layerObject.layer, popUpConfig: layerObject.popUpConfig }], false); + } + else if (layerObject.infoUrl) + { + var data:Object = { + id: layerObject.label, + url: layerObject.infoUrl, + config: layerObject.infoConfig, + isOptLayer: isOperationalLayer + }; + AppEvent.dispatch(AppEvent.DATA_CREATE_INFOWIDGET, data, infoReady); + } + else + { + loadNextOperationalOrBasemapLayer(isOperationalLayer); + } + + function configurePopUps(isOptLayer:Boolean, arrLayerPopUp:Array, isSublayer:Boolean, arrLayerInfoWindowRenderer:Array = null):void + { + var popUpCount:int = 0; + var popUpArray:Array = []; + for (i = 0; i < arrLayerPopUp.length; i++) + { + if (isSublayer) + { + var layerInfoWindowRenderer:LayerInfoWindowRenderer = new LayerInfoWindowRenderer(); + layerInfoWindowRenderer.layerId = arrLayerPopUp[i].sublayer.id; + } + + var popUpConfigURL:String = arrLayerPopUp[i].popUpConfig; + + var responderToken:Object = { + popUpConfigURL: popUpConfigURL, + layer: arrLayerPopUp[i].layer, + isSublayer: isSublayer, + layerInfoWindowRenderer: isSublayer ? layerInfoWindowRenderer : null }; + + if (popUpConfigURL.charAt(0) === "#") + { + var popUpConfigXML:XML = m_configData.configXML.configuration.(@id == popUpConfigURL.substr(1))[0]; + responderToken.popUpConfigXML = popUpConfigXML; + arrPopUpPush(responderToken); + } + else + { + var configService:HTTPService = new HTTPService(); + configService.url = popUpConfigURL; + configService.resultFormat = HTTPService.RESULT_FORMAT_TEXT; + var asyncToken:AsyncToken = configService.send(); + asyncToken.addResponder(new AsyncResponder(configResult, configFault, responderToken)); + } + } + + function arrPopUpPush(token:Object):void + { + popUpCount++; + // arrPopUp.push({ popUpConfigXML: XML(event.result), layer: token.layer, isSublayer: isSublayer, layerInfoWindowRenderer: token.layerInfoWindowRenderer }); + popUpArray.push(token); + if (popUpCount === arrLayerPopUp.length) + { + createPopUpRenderer(isOptLayer, popUpArray, arrLayerInfoWindowRenderer); + } + } + + //config result + function configResult(event:ResultEvent, token:Object = null):void + { + try + { + token.popUpConfigXML = XML(event.result); + arrPopUpPush(token); + } + catch (error:Error) + { + AppEvent.showError(LocalizationUtil.getDefaultString("parseConfigErrorText", token.popUpConfigURL + "\n" + error.message), MAP_MANAGER); + } + } + + //config fault + function configFault(event:FaultEvent, token:Object = null):void + { + // happens if for example the popup config file missing or have crossdomain problem + var sInfo:String = ""; + + // Missing file + if (event.fault.rootCause is IOErrorEvent) + { + var ioe:IOErrorEvent = event.fault.rootCause as IOErrorEvent; + if (ioe.text.indexOf("2032: Stream Error. URL:") > -1) + { + sInfo += LocalizationUtil.getDefaultString('missingConfigFileText', ioe.text.substring(32)) + "\n\n"; + } + else + { + // some other IOError + sInfo += event.fault.rootCause + "\n\n"; + } + } + + // config file with crossdomain issue + if (event.fault.rootCause is SecurityErrorEvent) + { + var sec:SecurityErrorEvent = event.fault.rootCause as SecurityErrorEvent; + if (sec.text.indexOf("Error #2048: ") > -1) // debug player + { + sInfo += LocalizationUtil.getDefaultString('configFileCrossDomain', "\n", sec.text) + "\n\n"; + } + else if (sec.text.indexOf("Error #2048") > -1) // non-debug player + { + sInfo += LocalizationUtil.getDefaultString('configFileCrossDomain', "\n", sec.toString()) + "\n\n"; + } + else + { + // some other Security error + sInfo += event.fault.rootCause + "\n\n"; + } + } + + if (event.statusCode) // e.g. 404 - Not Found - http://en.wikipedia.org/wiki/List_of_HTTP_status_codes + { + sInfo += LocalizationUtil.getDefaultString('httpResponseStatus', event.statusCode) + "\n\n"; + } + + sInfo += ErrorMessageUtil.buildFaultMessage(event.fault); + + AppEvent.showError(sInfo, MAP_MANAGER); + + popUpCount++; + if (popUpCount == arrLayerPopUp.length) + { + createPopUpRenderer(isOptLayer, popUpArray, arrLayerInfoWindowRenderer); + } + } + } + + function createPopUpRenderer(isOptLayer:Boolean, arr:Array, arrLayerInfoWindowRenderer:Array = null):void + { + var index:int = 0; + parseArray(index, isOptLayer, arr, arrLayerInfoWindowRenderer); + } + + function parseArray(index:int, isOptLayer:Boolean, arr:Array, arrLayerInfoWindowRenderer:Array):void + { + if (index < arr.length) + { + var popUpConfigXML:XML = arr[index].popUpConfigXML; + var popUpInfo:PopUpInfo = new PopUpInfo(); + var i:int; + if (popUpConfigXML.fields[0]) + { + var fields:XMLList = popUpConfigXML.fields[0].field; + var fieldsOrder:String = popUpConfigXML.fields[0].@order; + + var pFieldInfos:Array = []; + var arrFields:Array = []; + if (fieldsOrder && (fieldsOrder == "alphabetical" || fieldsOrder == "default")) + { + // get the fields from the layer + var fieldNames:Array = []; + var layer:Layer = arr[index].layer; + if (layer is ArcGISDynamicMapServiceLayer || layer is ArcGISTiledMapServiceLayer) + { + if (arr[index].isSublayer) + { + var layerId:Number = arr[index].layerInfoWindowRenderer.layerId; + if (layer is ArcGISDynamicMapServiceLayer) + { + ArcGISDynamicMapServiceLayer(layer).getDetails(layerId, new AsyncResponder(myResultFunction, myFaultFunction)); + } + else + { + ArcGISTiledMapServiceLayer(layer).getDetails(layerId, new AsyncResponder(myResultFunction, myFaultFunction)); + } + } + } + else if (layer is FeatureLayer) + { + if (FeatureLayer(layer).layerDetails) + { + for each (var field:Field in FeatureLayer(layer).layerDetails.fields) + { + fieldNames.push(field.name); + } + } + else if (FeatureLayer(layer).tableDetails) + { + for each (var field1:Field in FeatureLayer(layer).tableDetails.fields) + { + fieldNames.push(field1.name); + } + } + for (i = 0; i < fields.length(); i++) + { + var order:int; + if (fieldsOrder == "default") + { + order = getFormItemOrderBasedOnFields(fields[i].@name, fieldNames) + } + arrFields.push({ label: fields[i].@alias[0] ? fields[i].@alias : fields[i].@name, order: order, fieldXML: fields[i]}); + } + arrFields.sort(compareFunction); + parseArrFields(arrFields); + parseRestPopUpConfig(popUpConfigXML); + + var popUpRenderer:ClassFactory = new ClassFactory(PopUpRenderer); + popUpRenderer.properties = { popUpInfo: popUpInfo }; + + arr[index].layer.infoWindowRenderer = popUpRenderer; + } + + function myResultFunction(result:Object, token:Object = null):void + { + if (result is LayerDetails) + { + for each (var field:Field in LayerDetails(result).fields) + { + fieldNames.push(field.name); + } + } + else if (result is TableDetails) + { + for each (var field1:Field in LayerDetails(result).fields) + { + fieldNames.push(field1.name); + } + } + + for (i = 0; i < fields.length(); i++) + { + var order:int; + if (fieldsOrder == "fields") + { + order = getFormItemOrderBasedOnFields(fields[i].@name, fieldNames) + } + arrFields.push({ label: fields[i].@alias[0] ? fields[i].@alias : fields[i].@name, order: order, fieldXML: fields[i]}); + } + arrFields.sort(compareFunction); + parseArrFields(arrFields); + parseRestPopUpConfig(popUpConfigXML); + + var popUpRenderer:ClassFactory = new ClassFactory(PopUpRenderer); + popUpRenderer.properties = { popUpInfo: popUpInfo }; + arr[index].layerInfoWindowRenderer.infoWindowRenderer = popUpRenderer; + arrLayerInfoWindowRenderer.push(arr[index].layerInfoWindowRenderer); + if (index == arr.length - 1) + { + arr[index].layer.layerInfoWindowRenderers = arrLayerInfoWindowRenderer; + } + + index++; + parseArray(index, isOptLayer, arr, arrLayerInfoWindowRenderer); + } + + function myFaultFunction(fault:Fault):void + { + index++; + parseArray(index, isOptLayer, arr, arrLayerInfoWindowRenderer); + } + } + else + { + for (i = 0; i < fields.length(); i++) + { + arrFields.push({ fieldXML: fields[i]}); + } + parseArrFields(arrFields); + parseRestPopUpConfig(popUpConfigXML); + setPopUpRendererOnLayer(); + + index++; + parseArray(index, isOptLayer, arr, arrLayerInfoWindowRenderer); + } + } + else + { + parseRestPopUpConfig(popUpConfigXML); + setPopUpRendererOnLayer(); + + index++; + parseArray(index, isOptLayer, arr, arrLayerInfoWindowRenderer); + } + + function parseArrFields(arrFields:Array):void + { + for (i = 0; i < arrFields.length; i++) + { + var field:XML = arrFields[i].fieldXML; + + var pFieldInfo:PopUpFieldInfo = new PopUpFieldInfo(); + pFieldInfo.fieldName = field.@name; + if (field.@alias[0]) + { + pFieldInfo.label = field.@alias; + } + pFieldInfo.visible = field.@visible == "true"; + + pFieldInfo.format = new PopUpFieldFormat(); + if (field.format.@dateformat[0]) + { + pFieldInfo.format.dateFormat = field.format.@dateformat; + } + if (field.format.@precision[0]) + { + pFieldInfo.format.precision = field.format.@precision; + } + if (field.format.@usethousandsseparator[0]) + { + pFieldInfo.format.useThousandsSeparator = field.format.@usethousandsseparator == "true"; + } + if (field.format.@useutc[0]) + { + pFieldInfo.format.useUTC = field.format.@useutc == "true"; + } + pFieldInfos.push(pFieldInfo); + } + popUpInfo.popUpFieldInfos = pFieldInfos; + } + + function parseRestPopUpConfig(popUpConfigXML:XML):void + { + if (popUpConfigXML.medias[0]) + { + var medias:XMLList = popUpConfigXML.medias[0].media; + + var pMediaInfos:Array = []; + for (i = 0; i < medias.length(); i++) + { + var pMediaInfo:PopUpMediaInfo = new PopUpMediaInfo(); + pMediaInfo.caption = medias[i].@caption; + pMediaInfo.title = medias[i].@title; + pMediaInfo.type = medias[i].@type; + pMediaInfo.imageLinkURL = medias[i].@imagelink; + pMediaInfo.imageSourceURL = medias[i].@imagesource; + + if (medias[i].@chartfields[0]) + { + var chartFields:Array = medias[i].@chartfields.split(","); + pMediaInfo.chartFields = chartFields; + } + + pMediaInfos.push(pMediaInfo); + } + popUpInfo.popUpMediaInfos = pMediaInfos; + } + popUpInfo.title = popUpConfigXML.title; + popUpInfo.description = popUpConfigXML.description; + if (popUpConfigXML.showattachments[0]) + { + popUpInfo.showAttachments = popUpConfigXML.showattachments == "true"; + } + if (popUpConfigXML.showrelatedrecords[0]) + { + popUpInfo.showRelatedRecords = popUpConfigXML.showrelatedrecords == "true"; + } + if (popUpConfigXML.showzoomtobutton[0]) + { + popUpInfo.showZoomToButton = popUpConfigXML.showzoomtobutton == "true"; + } + } + + function setPopUpRendererOnLayer():void + { + var popUpRenderer1:ClassFactory = new ClassFactory(PopUpRenderer); + popUpRenderer1.properties = { popUpInfo: popUpInfo }; + if (arr[index].isSublayer) + { + arr[index].layerInfoWindowRenderer.infoWindowRenderer = popUpRenderer1; + arrLayerInfoWindowRenderer.push(arr[index].layerInfoWindowRenderer); + if (index == arr.length - 1) + { + arr[index].layer.layerInfoWindowRenderers = arrLayerInfoWindowRenderer; + } + } + else + { + arr[index].layer.infoWindowRenderer = popUpRenderer1; + } + } + } + else + { + loadNextOperationalOrBasemapLayer(isOptLayer); + } + } + } + + private function getFormItemOrderBasedOnFields(fieldName:String, fieldNames:Array):int + { + var result:int; + + for (var i:int = 0; i < fieldNames.length; ) + { + if (fieldName == fieldNames[i]) + { + result = i + 1; // make sure that 0 is never returned + break; + } + else + { + i++ + } + } + + return result; + } + + + private function compareFunction(lhs:Object, rhs:Object):Number + { + if (lhs.order < rhs.order) + { + return -1; + } + if (lhs.order > rhs.order) + { + return 1; + } + return m_sortingCollator.compare(lhs.label, rhs.label); + } + + private function getLayerDefinitions(subLayers:Array):Array + { + var layerDefinitions:Array = []; + + for each (var subLayerObject:Object in subLayers) + { + layerDefinitions[subLayerObject.id] = subLayerObject.definitionExpression; + } + + return layerDefinitions; + } + + private var infoTemplate:IInfowindowTemplate; + + private var infoRender:ClassFactory; + + private function infoReady(event:AppEvent):void + { + var id:String = event.data.id as String; + var isOperationLayer:Boolean = event.data.isOptLayer; + var label:String = isOperationLayer ? m_operationalLayers[m_operationalLayerIndex].label : m_basemapLayers[m_basemapLayerIndex].label; + if (id == label) + { + infoTemplate = event.data.infoWidget; + var baseWidget:IBaseWidget = infoTemplate as IBaseWidget; + var infoConfigXML:XML = baseWidget.configXML; + infoRender = new ClassFactory(infoTemplate.infoClass); + infoRender.properties = { infoConfig: infoConfigXML, map: map }; + + if (isOperationLayer) + { + m_operationalLayers[m_operationalLayerIndex].layer.infoWindowRenderer = infoRender; + } + else + { + m_basemapLayers[m_basemapLayerIndex].layer.infoWindowRenderer = infoRender; + } + loadNextOperationalOrBasemapLayer(isOperationLayer); + } + } + + private function loadNextOperationalOrBasemapLayer(isOperationalLayer:Boolean):void + { + if (isOperationalLayer) + { + // add layer to map after popups have been configured, if any + var optLayerObject:Object = m_operationalLayers[m_operationalLayerIndex]; + addLayerToMap(optLayerObject); + + m_optLayerTable.push(optLayerObject); + m_operationalLayerIndex++; + if (m_operationalLayerIndex < m_operationalLayers.length) + { + loadNextOperationalLayer(); + } + else + { + configReferenceBasemaps(); // operational layers added, move on to reference layers, if any + } + } + else + { + // add layer to map after popups have been configured, if any + var basemapLayerObject:Object = m_basemapLayers[m_basemapLayerIndex]; + addLayerToMap(basemapLayerObject); + + m_basemapLayerIndex++; + if (m_basemapLayerIndex < m_basemapLayers.length) + { + loadNextBasemapLayer(); + } + else + { + configOperationalLayers(); // basemap layers added, move on to operational layers, if any + } + } + } + + private function dataOptLayersHandler(event:AppEvent):void + { + var callback:Function = event.callback as Function; + callback(new AppEvent(AppEvent.DATA_OPT_LAYERS, this.m_optLayerTable)); + } + + private function layerloadComplete(event:MapEvent):void + { + AppEvent.dispatch(AppEvent.LAYER_LOADED); + } + + override protected function getCurrentSkinState():String + { + return m_mapManagerState; + } + + //nav tool clicked + private function changeNavigationbyWidget(event:AppEvent):void + { + m_navigationTool = event.data ? event.data.tool : null; + m_navigationStatus = event.data ? event.data.status : null; + + changeNavigation(m_navigationTool, m_navigationStatus); + } + + private function setMapNavigationHandler(event:AppEvent):void + { + m_navigationTool = event.data ? event.data.tool : null; + m_navigationStatus = event.data ? event.data.status : null; + + changeNavigation(m_navigationTool, m_navigationStatus); + } + + private function changeNavigation(tool:String, status:String):void + { + map.removeEventListener(MouseEvent.ROLL_OVER, map_rollOverHandler); + map.removeEventListener(MouseEvent.ROLL_OUT, map_rollOutHandler); + if (tool) + { + switch (tool) + { + case NavigationTool.ZOOM_IN: + { + // custom cursor + map.addEventListener(MouseEvent.ROLL_OVER, map_rollOverHandler); + map.addEventListener(MouseEvent.ROLL_OUT, map_rollOutHandler); + + m_drawTool.deactivate(); + m_navTool.deactivate(); + m_navTool.activate(tool); + AppEvent.setStatus(status); + break; + } + case NavigationTool.ZOOM_OUT: + { + // custom cursor + map.addEventListener(MouseEvent.ROLL_OVER, map_rollOverHandler); + map.addEventListener(MouseEvent.ROLL_OUT, map_rollOutHandler); + + m_drawTool.deactivate(); + m_navTool.deactivate(); + m_navTool.activate(tool); + AppEvent.setStatus(status); + break; + } + case ViewerContainer.NAVIGATION_ZOOM_FULL: + { + if (m_fullExtent) + { + map.extent = m_fullExtent + } + else + { + map.zoomToInitialExtent(); // use map.zoomToInitialExtent() as NavigationTool.zoomToFullExtent() is deprecated + } + AppEvent.setStatus(null); + break; + } + case ViewerContainer.NAVIGATION_ZOOM_PREVIOUS: + { + m_navTool.zoomToPrevExtent(); + AppEvent.setStatus(null); + break; + } + case ViewerContainer.NAVIGATION_ZOOM_NEXT: + { + m_navTool.zoomToNextExtent(); + AppEvent.setStatus(null); + break; + } + case NavigationTool.PAN: + { + m_drawTool.deactivate(); + m_navTool.activate(tool); + m_navTool.deactivate(); + AppEvent.setStatus(status); + break; + } + default: + { + m_drawTool.deactivate(); + m_navTool.activate(NavigationTool.PAN); + m_navTool.deactivate(); + AppEvent.setStatus(m_defaultStatus); + break; + } + } + } + } + + private function map_rollOverHandler(event:MouseEvent):void + { + map.cursorManager.setCursor(_crossCursor, CursorManagerPriority.MEDIUM, -8, -8); + } + + private function map_rollOutHandler(event:MouseEvent):void + { + map.cursorManager.removeAllCursors(); + } + + //draw tool clicked + private function setMapActionHandler(event:AppEvent):void + { + var data:Object = event.data; + var tool:String = data.tool; + var status:String = data.status; + var symbol:Symbol = data.symbol; + var showDrawTips:Boolean = data.showDrawTips; + var enableGraphicsLayerMouseEvents:Boolean = data.enableGraphicsLayerMouseEvents; + + if (tool) + { + // make sure there is no custom cursor + map.cursorManager.removeAllCursors(); + map.removeEventListener(MouseEvent.ROLL_OVER, map_rollOverHandler); + map.removeEventListener(MouseEvent.ROLL_OUT, map_rollOutHandler); + + m_drawEndFunction = data.handler; + m_drawUpdateFunction = data.handler2; + m_navTool.deactivate(); + m_drawTool.activate(tool, enableGraphicsLayerMouseEvents); + // showDrawTips + m_drawTool.showDrawTips = showDrawTips; + // reset symbology + m_drawTool.markerSymbol = new SimpleMarkerSymbol; + m_drawTool.lineSymbol = new SimpleLineSymbol; + m_drawTool.fillSymbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID, 0, 0.5, new SimpleLineSymbol); + if (symbol) + { + if (symbol is TextSymbol || symbol is SimpleMarkerSymbol || symbol is PictureMarkerSymbol) + { + m_drawTool.markerSymbol = symbol; + } + else if (symbol is SimpleLineSymbol) + { + m_drawTool.lineSymbol = symbol; + } + else if (symbol is SimpleFillSymbol) + { + m_drawTool.fillSymbol = symbol; + } + } + + //map.zoomSliderVisible = true; + AppEvent.setStatus(status); + } + else + { + m_drawTool.deactivate(); + restoreNavigation(); + } + } + + private function drawUpdateHandler(event:DrawEvent):void + { + if (m_drawUpdateFunction != null) + { + m_drawUpdateFunction(event); + } + } + + private function drawEndHandler(event:DrawEvent):void + { + restoreNavigation(); + m_drawEndFunction(event); + } + + private function restoreNavigation():void + { + if (m_navigationTool == NavigationTool.ZOOM_IN || m_navigationTool == NavigationTool.ZOOM_OUT || m_navigationTool == NavigationTool.PAN) + { + if (m_navigationTool != NavigationTool.PAN) + { + map.cursorManager.setCursor(_crossCursor, CursorManagerPriority.MEDIUM, -8, -8); + } + changeNavigation(m_navigationTool, m_navigationStatus); + } + } + + private function mapLayerVisibleHandler(event:AppEvent):void + { + var lyrData:Object = event.data; + + lyrData.layer.visible = lyrData.visible; + + //ViewerContainer.publish(AppEvent.LAYER_VISIBLE_CHANGED, event.data); + } + + //basemap menu clicked + private function basemapSwitchHandler(event:AppEvent):void + { + const id:String = event.data as String; + if (id) + { + const configBasemaps:Array = m_configData.basemaps; + var selectedLabel:String; + for (var i:uint = 0; i < configBasemaps.length; i++) + { + if (configBasemaps[i].id == id) + { + selectedLabel = configBasemaps[i].label; + break; + } + } + if (selectedLabel) + { + // turn on the selected basemap layers (more than one layer can have the same label) + var layers:ArrayCollection = map.layers as ArrayCollection; + for (i = 0; i < configBasemaps.length; i++) + { + var basemapLabel:String = configBasemaps[i].label; + for each (var layer:Layer in layers) + { + if (layer.id == basemapLabel) + { + if (layer.id == selectedLabel) + { + layer.visible = true; + } + else + { + layer.visible = false; + } + } + } + } + } + } + } + + private function showInfoWindowHandler(event:AppEvent):void + { + m_infoPopup.infoData = event.data; + } + + private function mapResizeHandler(event:AppEvent):void + { + var size:Object = event.data; + + mapLeft = size.left; + mapRight = size.right; + mapTop = size.top; + mapBottom = size.bottom; + + this.m_mapManagerState = "resized"; + + dispatchEvent(new Event(m_mapManagerState)); + invalidateSkinState(); + } + + private function removeLayer(layerObject:Object, index:int, source:Array):void + { + map.removeLayer(layerObject.layer); + } + + private function toScaleBarSkinClass(scaleBarStyleName:String = "default"):Class + { + var scaleBarClass:Class; + + switch (scaleBarStyleName) + { + case "metric": + { + scaleBarClass = ScaleBarMetricSkin; + break; + } + case "us": + { + scaleBarClass = ScaleBarUSSkin; + break; + } + default: + { + scaleBarClass = ScaleBarSkin; + } + } + + return scaleBarClass; + } + ]]> + + diff --git a/src/com/esri/viewer/managers/ScriptingManager.as b/src/com/esri/viewer/managers/ScriptingManager.as index bdba169..efd9fd7 100644 --- a/src/com/esri/viewer/managers/ScriptingManager.as +++ b/src/com/esri/viewer/managers/ScriptingManager.as @@ -1,40 +1,40 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2010-2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package com.esri.viewer.managers -{ - -import flash.events.EventDispatcher; -import flash.events.IEventDispatcher; - -/** - * ScriptingManager... - * - * @private - */ -public class ScriptingManager extends EventDispatcher -{ - public function ScriptingManager(target:IEventDispatcher = null) - { - super(target); - } - - public function setWidgetState(id:Number, state:String):void - { - - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2010-2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package com.esri.viewer.managers +{ + +import flash.events.EventDispatcher; +import flash.events.IEventDispatcher; + +/** + * ScriptingManager... + * + * @private + */ +public class ScriptingManager extends EventDispatcher +{ + public function ScriptingManager(target:IEventDispatcher = null) + { + super(target); + } + + public function setWidgetState(id:Number, state:String):void + { + + } +} + +} diff --git a/src/com/esri/viewer/managers/SecurityManager.as b/src/com/esri/viewer/managers/SecurityManager.as index d4a8f4b..8a963ef 100644 --- a/src/com/esri/viewer/managers/SecurityManager.as +++ b/src/com/esri/viewer/managers/SecurityManager.as @@ -1,36 +1,36 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2010-2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package com.esri.viewer.managers -{ - -import flash.events.EventDispatcher; -import flash.events.IEventDispatcher; - -/** - * SecurityManager... - * - * @private - */ -public class SecurityManager extends EventDispatcher -{ - public function SecurityManager(target:IEventDispatcher = null) - { - //TODO: implement function - super(target); - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2010-2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package com.esri.viewer.managers +{ + +import flash.events.EventDispatcher; +import flash.events.IEventDispatcher; + +/** + * SecurityManager... + * + * @private + */ +public class SecurityManager extends EventDispatcher +{ + public function SecurityManager(target:IEventDispatcher = null) + { + //TODO: implement function + super(target); + } +} + +} diff --git a/src/com/esri/viewer/managers/UIManager.as b/src/com/esri/viewer/managers/UIManager.as index 94e0900..4887641 100644 --- a/src/com/esri/viewer/managers/UIManager.as +++ b/src/com/esri/viewer/managers/UIManager.as @@ -1,465 +1,465 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2010-2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package com.esri.viewer.managers -{ - -import com.esri.viewer.AppEvent; -import com.esri.viewer.ConfigData; -import com.esri.viewer.utils.LocalizationUtil; - -import flash.events.EventDispatcher; - -import mx.styles.CSSStyleDeclaration; -import mx.styles.IStyleManager2; -import mx.styles.StyleManager; - -/** - * UIManager applies the style colors, fonts etc as specific in the main configuration file. - */ -public class UIManager extends EventDispatcher -{ - private var configData:ConfigData; - - public function UIManager() - { - AppEvent.addListener(AppEvent.SET_TEXT_COLOR, setTextColorHandler); - AppEvent.addListener(AppEvent.SET_BACKGROUND_COLOR, setBackgroundColorHandler); - AppEvent.addListener(AppEvent.SET_ROLLOVER_COLOR, setRolloverColorHandler); - AppEvent.addListener(AppEvent.SET_SELECTION_COLOR, setSelectionColorHandler); - AppEvent.addListener(AppEvent.SET_TITLE_COLOR, setTitleColorHandler); - AppEvent.addListener(AppEvent.SET_APPLICATION_BACKGROUND_COLOR, setApplicationBackgroundColorHandler); - AppEvent.addListener(AppEvent.SET_FONT_NAME, setFontNameHandler); - AppEvent.addListener(AppEvent.SET_APP_TITLE_FONT_NAME, setAppTitleFontNameHandler); - AppEvent.addListener(AppEvent.SET_SUB_TITLE_FONT_NAME, setSubTitleFontNameHandler); - AppEvent.addListener(AppEvent.SET_ALPHA, setAlphaHandler); - AppEvent.addListener(AppEvent.SET_PREDEFINED_STYLES, setPredefinedStyles); - - AppEvent.addListener(AppEvent.CONFIG_LOADED, configLoadedHandler); - } - - private function setPredefinedStyles(event:AppEvent):void - { - configData.styleColors[0] = event.data.textColor; - configData.styleColors[1] = event.data.backgroundColor; - configData.styleColors[2] = event.data.rolloverColor; - configData.styleColors[3] = event.data.selectionColor; - configData.styleColors[4] = event.data.titleColor; - configData.styleColors[5] = event.data.applicationBackgroundColor; - configData.styleAlpha = event.data.alpha; - setViewerStyle(); - } - - private function setSubTitleFontNameHandler(event:AppEvent):void - { - configData.subTitleFont.name = event.data; - setViewerStyle(); - } - - private function setAppTitleFontNameHandler(event:AppEvent):void - { - configData.titleFont.name = event.data; - setViewerStyle(); - } - - private function setFontNameHandler(event:AppEvent):void - { - configData.font.name = event.data; - setViewerStyle(); - } - - private function setTextColorHandler(event:AppEvent):void - { - configData.styleColors[0] = event.data; - setViewerStyle(); - } - - private function setBackgroundColorHandler(event:AppEvent):void - { - configData.styleColors[1] = event.data; - setViewerStyle(); - } - - private function setRolloverColorHandler(event:AppEvent):void - { - configData.styleColors[2] = event.data; - setViewerStyle(); - } - - private function setSelectionColorHandler(event:AppEvent):void - { - configData.styleColors[3] = event.data; - setViewerStyle(); - } - - private function setTitleColorHandler(event:AppEvent):void - { - configData.styleColors[4] = event.data; - setViewerStyle(); - } - - private function setApplicationBackgroundColorHandler(event:AppEvent):void - { - configData.styleColors[5] = event.data; - setViewerStyle(); - } - - private function setAlphaHandler(event:AppEvent):void - { - configData.styleAlpha = event.data as Number; - setViewerStyle(); - } - - private function configLoadedHandler(event:AppEvent):void - { - configData = event.data as ConfigData; - setViewerStyle(); - -// if (configData.styleSWF) -// { -// var topLevelStyleManager:IStyleManager2 = StyleManager.getStyleManager(null); -// var loadStyleDispatcher:IEventDispatcher = topLevelStyleManager.loadStyleDeclarations(configData.styleSWF, false, false, null, SecurityDomain.currentDomain); -// loadStyleDispatcher.addEventListener(StyleEvent.COMPLETE, completeHandler); -// loadStyleDispatcher.addEventListener(StyleEvent.ERROR, errorHandler); -// } -// else -// { -// setViewerStyle(); -// } -// -// function completeHandler(event:StyleEvent):void -// { -// loadStyleDispatcher.removeEventListener(StyleEvent.COMPLETE, completeHandler); -// loadStyleDispatcher.removeEventListener(StyleEvent.ERROR, errorHandler); -// setViewerStyle(); -// } -// function errorHandler(event:StyleEvent):void -// { -// completeHandler(event); -// AppEvent.dispatch(AppEvent.APP_ERROR, event.errorText); -// } - } - - private function setViewerStyle():void - { - var topLevelStyleManager:IStyleManager2 = StyleManager.getStyleManager(null); - var numberOfStyleColors:uint = configData.styleColors.length; - - var textColor:uint; - var backgroundColor:uint; - var rolloverColor:uint; - var selectionColor:uint; - var titleColor:uint; - var applicationBackgroundColor:uint; - var styleAlpha:Number; - - var cssStyleDeclarationGlobal:CSSStyleDeclaration = topLevelStyleManager.getStyleDeclaration("global") - - var defaultFontSize:int = cssStyleDeclarationGlobal.getStyle("fontSize"); - var defaultTextColor:uint = cssStyleDeclarationGlobal.getStyle("fontColor"); - var defaultLayoutDirection:String = cssStyleDeclarationGlobal.getStyle("layoutDirection"); - var localeDefaultFontName:String = LocalizationUtil.getDefaultString("textFont1"); - var fallbackFontName:String = "_sans"; - - var mainFontFamily:String = buildFontFamilyString(configData.font.name, localeDefaultFontName, fallbackFontName); - var titleFontFamily:String = configData.titleFont.name ? buildFontFamilyString(configData.titleFont.name, localeDefaultFontName, fallbackFontName) : mainFontFamily; - var subTitleFontFamily:String = configData.subTitleFont.name ? buildFontFamilyString(configData.subTitleFont.name, localeDefaultFontName, fallbackFontName) : mainFontFamily; - - var fontSize:int = (configData.font.size != 0) ? configData.font.size : defaultFontSize; - var titleFontSize:int = (configData.titleFont.size != 0) ? configData.titleFont.size : 20; - var subTitleFontSize:int = (configData.subTitleFont.size != 0) ? configData.subTitleFont.size : 12; - var layoutDirection:String = configData.layoutDirection && (configData.layoutDirection == "ltr" || configData.layoutDirection == "rtl") ? configData.layoutDirection : defaultLayoutDirection; - - // for RTL - cssStyleDeclarationGlobal.setStyle("layoutDirection", layoutDirection); - cssStyleDeclarationGlobal.setStyle("direction", layoutDirection); - - styleAlpha = configData.styleAlpha; - if (numberOfStyleColors > 4) - { - textColor = configData.styleColors[0]; - backgroundColor = configData.styleColors[1]; - rolloverColor = configData.styleColors[2]; - selectionColor = configData.styleColors[3]; - titleColor = configData.styleColors[4]; - applicationBackgroundColor = (configData.styleColors[5] != null) ? configData.styleColors[5] : 0xFFFFFF; - } - - if (numberOfStyleColors > 4) - { - cssStyleDeclarationGlobal.setStyle("chromeColor", backgroundColor); - cssStyleDeclarationGlobal.setStyle("color", textColor); - cssStyleDeclarationGlobal.setStyle("contentBackgroundColor", backgroundColor); - cssStyleDeclarationGlobal.setStyle("symbolColor", textColor); - cssStyleDeclarationGlobal.setStyle("rollOverColor", rolloverColor); - cssStyleDeclarationGlobal.setStyle("selectionColor", selectionColor); - cssStyleDeclarationGlobal.setStyle("focusColor", titleColor); - cssStyleDeclarationGlobal.setStyle("accentColor", textColor); - cssStyleDeclarationGlobal.setStyle("textSelectedColor", textColor); - cssStyleDeclarationGlobal.setStyle("textRollOverColor", textColor); - } - cssStyleDeclarationGlobal.setStyle("contentBackgroundAlpha", styleAlpha); - cssStyleDeclarationGlobal.setStyle("fontSize", fontSize); - cssStyleDeclarationGlobal.setStyle("fontFamily", mainFontFamily); - - var cssStyleDeclarationModule:CSSStyleDeclaration = new CSSStyleDeclaration(); - if (numberOfStyleColors > 4) - { - cssStyleDeclarationModule.setStyle("chromeColor", backgroundColor); - cssStyleDeclarationModule.setStyle("color", textColor); - cssStyleDeclarationModule.setStyle("contentBackgroundColor", backgroundColor); - cssStyleDeclarationModule.setStyle("symbolColor", textColor); - cssStyleDeclarationModule.setStyle("rollOverColor", rolloverColor); - cssStyleDeclarationModule.setStyle("selectionColor", selectionColor); - cssStyleDeclarationModule.setStyle("focusColor", titleColor); - cssStyleDeclarationModule.setStyle("accentColor", textColor); - cssStyleDeclarationModule.setStyle("textSelectedColor", textColor); - cssStyleDeclarationModule.setStyle("textRollOverColor", textColor); - } - cssStyleDeclarationModule.setStyle("contentBackgroundAlpha", styleAlpha); - cssStyleDeclarationModule.setStyle("fontSize", fontSize); - cssStyleDeclarationModule.setStyle("fontFamily", mainFontFamily); - topLevelStyleManager.setStyleDeclaration("mx.modules.Module", cssStyleDeclarationModule, false); - - //Style Application - var cssStyleDeclarationApplication:CSSStyleDeclaration = topLevelStyleManager.getStyleDeclaration("spark.components.Application"); - if (cssStyleDeclarationApplication) - { - if (numberOfStyleColors > 4) - { - cssStyleDeclarationApplication.setStyle("backgroundColor", applicationBackgroundColor); - } - cssStyleDeclarationApplication.setStyle("backgroundAlpha", styleAlpha); - } - - var cssStyleDeclarationApplicationWindowed:CSSStyleDeclaration = topLevelStyleManager.getStyleDeclaration("spark.components.WindowedApplication"); - if (cssStyleDeclarationApplicationWindowed) - { - if (numberOfStyleColors > 4) - { - cssStyleDeclarationApplicationWindowed.setStyle("backgroundColor", applicationBackgroundColor); - } - cssStyleDeclarationApplicationWindowed.setStyle("backgroundAlpha", styleAlpha); - } - - //Style WidgetTemplate - var cssStyleDeclarationWT:CSSStyleDeclaration = topLevelStyleManager.getStyleDeclaration("com.esri.viewer.WidgetTemplate"); - // When pointing to graphical theme replace WidgetTemplateSkin with GraphicalWidgetTemplateSkin - if (numberOfStyleColors > 4) - { - cssStyleDeclarationWT.setStyle("borderColor", textColor); - } - - /*Style For InfoWindow - When pointing to graphical theme, you will need to explicitly set properties for infoWindow. - e.g. cssStyleDeclarationInfoContainer.setStyle("backgroundColor",0xFFFFFF); - */ - var cssStyleDeclarationInfoContainer:CSSStyleDeclaration = topLevelStyleManager.getStyleDeclaration("com.esri.ags.components.supportClasses.InfoWindow"); - /* - For custom skin for infoWindow, borderSkin needs to be set to null as shouwn below - infoOffsetX and infoOffsetY can be used to change the location where infowindow will be shown. - infoPlacement would need to be set to none in this case for preventing infowindow placement from auto adjusting. - */ - /* - cssStyleDeclarationInfoContainer.setStyle("borderSkin",null); - cssStyleDeclarationInfoContainer.setStyle("infoOffsetX",-45); - */ - if (numberOfStyleColors > 4) - { - cssStyleDeclarationInfoContainer.setStyle("backgroundColor", backgroundColor); - cssStyleDeclarationInfoContainer.setStyle("borderColor", textColor); - } - else - { - cssStyleDeclarationInfoContainer.setStyle("borderColor", defaultTextColor); - } - cssStyleDeclarationInfoContainer.setStyle("borderThickness", 1); - cssStyleDeclarationInfoContainer.setStyle("backgroundAlpha", styleAlpha); - - var cssStyleDeclarationInfoWindowLabel:CSSStyleDeclaration = topLevelStyleManager.getStyleDeclaration("com.esri.ags.components.supportClasses.InfoWindowLabel"); - cssStyleDeclarationInfoWindowLabel.setStyle("fontSize", fontSize); - cssStyleDeclarationInfoWindowLabel.setStyle("fontFamily", mainFontFamily); - - var cssStyleDeclarationInfoSymbolWindow:CSSStyleDeclaration = topLevelStyleManager.getStyleDeclaration("com.esri.ags.components.supportClasses.InfoSymbolWindow"); - if (numberOfStyleColors > 4) - { - cssStyleDeclarationInfoSymbolWindow.setStyle("backgroundColor", backgroundColor); - cssStyleDeclarationInfoSymbolWindow.setStyle("borderColor", textColor); - } - else - { - cssStyleDeclarationInfoSymbolWindow.setStyle("borderColor", defaultTextColor); - } - cssStyleDeclarationInfoSymbolWindow.setStyle("borderThickness", 1); - cssStyleDeclarationInfoSymbolWindow.setStyle("backgroundAlpha", styleAlpha); - - if (numberOfStyleColors > 4) - { - var cssStyleDeclarationPopUpRendererLink:CSSStyleDeclaration = topLevelStyleManager.getStyleDeclaration("com.esri.ags.portal.PopUpRenderer"); - cssStyleDeclarationPopUpRendererLink.setStyle("linkActiveColor", titleColor); - cssStyleDeclarationPopUpRendererLink.setStyle("linkNormalColor", textColor); - cssStyleDeclarationPopUpRendererLink.setStyle("linkHoverColor", titleColor); - } - - var cssStyleDeclarationContentNavigator:CSSStyleDeclaration = topLevelStyleManager.getStyleDeclaration("com.esri.ags.components.ContentNavigator"); - if (numberOfStyleColors > 4) - { - cssStyleDeclarationContentNavigator.setStyle("headerBackgroundColor", backgroundColor); - cssStyleDeclarationContentNavigator.setStyle("headerColor", textColor); - } - cssStyleDeclarationContentNavigator.setStyle("headerBackgroundAlpha", styleAlpha); - - //Style Banner title and WidgetTitle - var cssStyleDeclarationWidgetTitle:CSSStyleDeclaration = new CSSStyleDeclaration(".WidgetTitle"); - if (numberOfStyleColors > 4) - { - cssStyleDeclarationWidgetTitle.setStyle("color", titleColor); - } - cssStyleDeclarationWidgetTitle.setStyle("fontSize", fontSize); - cssStyleDeclarationWidgetTitle.setStyle("fontFamily", mainFontFamily); - cssStyleDeclarationWidgetTitle.setStyle("fontWeight", "bold"); - - var cssStyleDeclarationBannerTitle:CSSStyleDeclaration = new CSSStyleDeclaration(".BannerTitle"); - if (numberOfStyleColors > 4) - { - cssStyleDeclarationBannerTitle.setStyle("color", titleColor); - } - if (titleFontSize > 0) - { - cssStyleDeclarationBannerTitle.setStyle("fontSize", titleFontSize); - } - cssStyleDeclarationBannerTitle.setStyle("fontFamily", titleFontFamily); - cssStyleDeclarationBannerTitle.setStyle("paddingBottom", 2); - cssStyleDeclarationBannerTitle.setStyle("paddingTop", 4); - - var cssStyleDeclarationBannerSubtitle:CSSStyleDeclaration = new CSSStyleDeclaration(".BannerSubtitle"); - if (numberOfStyleColors > 4) - { - cssStyleDeclarationBannerSubtitle.setStyle("color", titleColor); - } - if (subTitleFontSize > 0) - { - cssStyleDeclarationBannerSubtitle.setStyle("fontSize", subTitleFontSize); - } - cssStyleDeclarationBannerSubtitle.setStyle("fontFamily", subTitleFontFamily); - - // Style s|Panel - var cssStyleDeclarationSPanel:CSSStyleDeclaration = topLevelStyleManager.getStyleDeclaration("spark.components.Panel"); - if (numberOfStyleColors > 4) - { - cssStyleDeclarationSPanel.setStyle("backgroundColor", backgroundColor); - } - cssStyleDeclarationSPanel.setStyle("backgroundAlpha", styleAlpha); - - //Style mx|Panel - var cssStyleDeclarationMxPanel:CSSStyleDeclaration = topLevelStyleManager.getStyleDeclaration("mx.containers.Panel"); - if (numberOfStyleColors > 4) - { - cssStyleDeclarationMxPanel.setStyle("backgroundColor", backgroundColor); - } - cssStyleDeclarationMxPanel.setStyle("backgroundAlpha", styleAlpha); - - //Style TabNavigator - var cssStyleDeclarationNavigator:CSSStyleDeclaration = topLevelStyleManager.getStyleDeclaration("mx.containers.TabNavigator"); - if (numberOfStyleColors > 4) - { - cssStyleDeclarationNavigator.setStyle("backgroundColor", backgroundColor); - } - cssStyleDeclarationNavigator.setStyle("backgroundAlpha", styleAlpha); - - // Style mx|Alert - var cssStyleDeclaration:CSSStyleDeclaration = new CSSStyleDeclaration(); - if (numberOfStyleColors > 4) - { - cssStyleDeclaration.setStyle("color", textColor); - cssStyleDeclaration.setStyle("backgroundColor", backgroundColor); - } - topLevelStyleManager.setStyleDeclaration("mx.controls.Alert", cssStyleDeclaration, false); - - //Style Tooltip - var cssStyleDeclarationTooltip:CSSStyleDeclaration = topLevelStyleManager.getStyleDeclaration("mx.controls.ToolTip"); - if (numberOfStyleColors > 4) - { - cssStyleDeclarationTooltip.setStyle("color", textColor); - cssStyleDeclarationTooltip.setStyle("backgroundColor", backgroundColor); - } - cssStyleDeclarationTooltip.setStyle("fontSize", fontSize); - cssStyleDeclarationTooltip.setStyle("fontFamily", mainFontFamily); - - //Style TitleWindow - if (numberOfStyleColors > 4) - { - var cssStyleDeclarationTitleWindow:CSSStyleDeclaration = new CSSStyleDeclaration(); - cssStyleDeclarationTitleWindow.setStyle("color", textColor); - cssStyleDeclarationTitleWindow.setStyle("backgroundColor", backgroundColor); - topLevelStyleManager.setStyleDeclaration("mx.containers.TitleWindow", cssStyleDeclarationTitleWindow, false); - } - //Style DataGrid - var cssStyleDeclarationDataGrid:CSSStyleDeclaration = new CSSStyleDeclaration(); - if (numberOfStyleColors > 4) - { - cssStyleDeclarationDataGrid.setStyle("alternatingItemColors", [ backgroundColor, backgroundColor ]); - cssStyleDeclarationDataGrid.setStyle("contentBackgroundColor", backgroundColor); - } - cssStyleDeclarationDataGrid.setStyle("backgroundAlpha", styleAlpha); - topLevelStyleManager.setStyleDeclaration("mx.controls.DataGrid", cssStyleDeclarationDataGrid, false); - - //Style RichEditableText - if (numberOfStyleColors > 4) - { - var cssStyleDeclarationRET:CSSStyleDeclaration = new CSSStyleDeclaration(); - cssStyleDeclarationRET.setStyle("focusedTextSelectionColor", rolloverColor); - cssStyleDeclarationRET.setStyle("unfocusedTextSelectionColor", rolloverColor); - topLevelStyleManager.setStyleDeclaration("spark.components.RichEditableText", cssStyleDeclarationRET, false); - - var cssStyleDeclarationTI:CSSStyleDeclaration = new CSSStyleDeclaration(); - cssStyleDeclarationTI.setStyle("chromeColor", textColor); - topLevelStyleManager.setStyleDeclaration("spark.components.TextInput", cssStyleDeclarationTI, false); - topLevelStyleManager.setStyleDeclaration("spark.components.TextArea", cssStyleDeclarationTI, false); - topLevelStyleManager.setStyleDeclaration("mx.controls.TextInput", cssStyleDeclarationTI, false); - topLevelStyleManager.setStyleDeclaration("mx.controls.TextArea", cssStyleDeclarationTI, false); - topLevelStyleManager.setStyleDeclaration("mx.controls.VSlider", cssStyleDeclarationTI, false); - topLevelStyleManager.setStyleDeclaration("spark.components.VSlider", cssStyleDeclarationTI, false); - topLevelStyleManager.setStyleDeclaration("mx.controls.HSlider", cssStyleDeclarationTI, false); - topLevelStyleManager.setStyleDeclaration("spark.components.HSlider", cssStyleDeclarationTI, false); - } - - if (numberOfStyleColors > 4) - { - var cssStyleDeclarationChartDataTips:CSSStyleDeclaration = new CSSStyleDeclaration(); - cssStyleDeclarationChartDataTips.setStyle("backgroundColor", backgroundColor); - topLevelStyleManager.setStyleDeclaration("mx.charts.chartClasses.DataTip", cssStyleDeclarationChartDataTips, false); - } - - var cssStyleDeclarationModal:CSSStyleDeclaration = topLevelStyleManager.getStyleDeclaration("global") - cssStyleDeclarationModal.setStyle("modalTransparencyColor", 0x777777); - cssStyleDeclarationModal.setStyle("modalTransparencyBlur", 1); - cssStyleDeclarationModal.setStyle("modalTransparency", 0.5); - cssStyleDeclarationModal.setStyle("modalTransparencyDuration", 300); //messes up tween! - topLevelStyleManager.setStyleDeclaration("global", cssStyleDeclarationModal, true); - } - - private function buildFontFamilyString(... fontNames):String - { - return fontNames.filter(isValidValue).join(", "); - } - - private function isValidValue(item:String, index:int, array:Array):Boolean - { - return Boolean(item); - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2010-2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package com.esri.viewer.managers +{ + +import com.esri.viewer.AppEvent; +import com.esri.viewer.ConfigData; +import com.esri.viewer.utils.LocalizationUtil; + +import flash.events.EventDispatcher; + +import mx.styles.CSSStyleDeclaration; +import mx.styles.IStyleManager2; +import mx.styles.StyleManager; + +/** + * UIManager applies the style colors, fonts etc as specific in the main configuration file. + */ +public class UIManager extends EventDispatcher +{ + private var configData:ConfigData; + + public function UIManager() + { + AppEvent.addListener(AppEvent.SET_TEXT_COLOR, setTextColorHandler); + AppEvent.addListener(AppEvent.SET_BACKGROUND_COLOR, setBackgroundColorHandler); + AppEvent.addListener(AppEvent.SET_ROLLOVER_COLOR, setRolloverColorHandler); + AppEvent.addListener(AppEvent.SET_SELECTION_COLOR, setSelectionColorHandler); + AppEvent.addListener(AppEvent.SET_TITLE_COLOR, setTitleColorHandler); + AppEvent.addListener(AppEvent.SET_APPLICATION_BACKGROUND_COLOR, setApplicationBackgroundColorHandler); + AppEvent.addListener(AppEvent.SET_FONT_NAME, setFontNameHandler); + AppEvent.addListener(AppEvent.SET_APP_TITLE_FONT_NAME, setAppTitleFontNameHandler); + AppEvent.addListener(AppEvent.SET_SUB_TITLE_FONT_NAME, setSubTitleFontNameHandler); + AppEvent.addListener(AppEvent.SET_ALPHA, setAlphaHandler); + AppEvent.addListener(AppEvent.SET_PREDEFINED_STYLES, setPredefinedStyles); + + AppEvent.addListener(AppEvent.CONFIG_LOADED, configLoadedHandler); + } + + private function setPredefinedStyles(event:AppEvent):void + { + configData.styleColors[0] = event.data.textColor; + configData.styleColors[1] = event.data.backgroundColor; + configData.styleColors[2] = event.data.rolloverColor; + configData.styleColors[3] = event.data.selectionColor; + configData.styleColors[4] = event.data.titleColor; + configData.styleColors[5] = event.data.applicationBackgroundColor; + configData.styleAlpha = event.data.alpha; + setViewerStyle(); + } + + private function setSubTitleFontNameHandler(event:AppEvent):void + { + configData.subTitleFont.name = event.data; + setViewerStyle(); + } + + private function setAppTitleFontNameHandler(event:AppEvent):void + { + configData.titleFont.name = event.data; + setViewerStyle(); + } + + private function setFontNameHandler(event:AppEvent):void + { + configData.font.name = event.data; + setViewerStyle(); + } + + private function setTextColorHandler(event:AppEvent):void + { + configData.styleColors[0] = event.data; + setViewerStyle(); + } + + private function setBackgroundColorHandler(event:AppEvent):void + { + configData.styleColors[1] = event.data; + setViewerStyle(); + } + + private function setRolloverColorHandler(event:AppEvent):void + { + configData.styleColors[2] = event.data; + setViewerStyle(); + } + + private function setSelectionColorHandler(event:AppEvent):void + { + configData.styleColors[3] = event.data; + setViewerStyle(); + } + + private function setTitleColorHandler(event:AppEvent):void + { + configData.styleColors[4] = event.data; + setViewerStyle(); + } + + private function setApplicationBackgroundColorHandler(event:AppEvent):void + { + configData.styleColors[5] = event.data; + setViewerStyle(); + } + + private function setAlphaHandler(event:AppEvent):void + { + configData.styleAlpha = event.data as Number; + setViewerStyle(); + } + + private function configLoadedHandler(event:AppEvent):void + { + configData = event.data as ConfigData; + setViewerStyle(); + +// if (configData.styleSWF) +// { +// var topLevelStyleManager:IStyleManager2 = StyleManager.getStyleManager(null); +// var loadStyleDispatcher:IEventDispatcher = topLevelStyleManager.loadStyleDeclarations(configData.styleSWF, false, false, null, SecurityDomain.currentDomain); +// loadStyleDispatcher.addEventListener(StyleEvent.COMPLETE, completeHandler); +// loadStyleDispatcher.addEventListener(StyleEvent.ERROR, errorHandler); +// } +// else +// { +// setViewerStyle(); +// } +// +// function completeHandler(event:StyleEvent):void +// { +// loadStyleDispatcher.removeEventListener(StyleEvent.COMPLETE, completeHandler); +// loadStyleDispatcher.removeEventListener(StyleEvent.ERROR, errorHandler); +// setViewerStyle(); +// } +// function errorHandler(event:StyleEvent):void +// { +// completeHandler(event); +// AppEvent.dispatch(AppEvent.APP_ERROR, event.errorText); +// } + } + + private function setViewerStyle():void + { + var topLevelStyleManager:IStyleManager2 = StyleManager.getStyleManager(null); + var numberOfStyleColors:uint = configData.styleColors.length; + + var textColor:uint; + var backgroundColor:uint; + var rolloverColor:uint; + var selectionColor:uint; + var titleColor:uint; + var applicationBackgroundColor:uint; + var styleAlpha:Number; + + var cssStyleDeclarationGlobal:CSSStyleDeclaration = topLevelStyleManager.getStyleDeclaration("global") + + var defaultFontSize:int = cssStyleDeclarationGlobal.getStyle("fontSize"); + var defaultTextColor:uint = cssStyleDeclarationGlobal.getStyle("fontColor"); + var defaultLayoutDirection:String = cssStyleDeclarationGlobal.getStyle("layoutDirection"); + var localeDefaultFontName:String = LocalizationUtil.getDefaultString("textFont1"); + var fallbackFontName:String = "_sans"; + + var mainFontFamily:String = buildFontFamilyString(configData.font.name, localeDefaultFontName, fallbackFontName); + var titleFontFamily:String = configData.titleFont.name ? buildFontFamilyString(configData.titleFont.name, localeDefaultFontName, fallbackFontName) : mainFontFamily; + var subTitleFontFamily:String = configData.subTitleFont.name ? buildFontFamilyString(configData.subTitleFont.name, localeDefaultFontName, fallbackFontName) : mainFontFamily; + + var fontSize:int = (configData.font.size != 0) ? configData.font.size : defaultFontSize; + var titleFontSize:int = (configData.titleFont.size != 0) ? configData.titleFont.size : 20; + var subTitleFontSize:int = (configData.subTitleFont.size != 0) ? configData.subTitleFont.size : 12; + var layoutDirection:String = configData.layoutDirection && (configData.layoutDirection == "ltr" || configData.layoutDirection == "rtl") ? configData.layoutDirection : defaultLayoutDirection; + + // for RTL + cssStyleDeclarationGlobal.setStyle("layoutDirection", layoutDirection); + cssStyleDeclarationGlobal.setStyle("direction", layoutDirection); + + styleAlpha = configData.styleAlpha; + if (numberOfStyleColors > 4) + { + textColor = configData.styleColors[0]; + backgroundColor = configData.styleColors[1]; + rolloverColor = configData.styleColors[2]; + selectionColor = configData.styleColors[3]; + titleColor = configData.styleColors[4]; + applicationBackgroundColor = (configData.styleColors[5] != null) ? configData.styleColors[5] : 0xFFFFFF; + } + + if (numberOfStyleColors > 4) + { + cssStyleDeclarationGlobal.setStyle("chromeColor", backgroundColor); + cssStyleDeclarationGlobal.setStyle("color", textColor); + cssStyleDeclarationGlobal.setStyle("contentBackgroundColor", backgroundColor); + cssStyleDeclarationGlobal.setStyle("symbolColor", textColor); + cssStyleDeclarationGlobal.setStyle("rollOverColor", rolloverColor); + cssStyleDeclarationGlobal.setStyle("selectionColor", selectionColor); + cssStyleDeclarationGlobal.setStyle("focusColor", titleColor); + cssStyleDeclarationGlobal.setStyle("accentColor", textColor); + cssStyleDeclarationGlobal.setStyle("textSelectedColor", textColor); + cssStyleDeclarationGlobal.setStyle("textRollOverColor", textColor); + } + cssStyleDeclarationGlobal.setStyle("contentBackgroundAlpha", styleAlpha); + cssStyleDeclarationGlobal.setStyle("fontSize", fontSize); + cssStyleDeclarationGlobal.setStyle("fontFamily", mainFontFamily); + + var cssStyleDeclarationModule:CSSStyleDeclaration = new CSSStyleDeclaration(); + if (numberOfStyleColors > 4) + { + cssStyleDeclarationModule.setStyle("chromeColor", backgroundColor); + cssStyleDeclarationModule.setStyle("color", textColor); + cssStyleDeclarationModule.setStyle("contentBackgroundColor", backgroundColor); + cssStyleDeclarationModule.setStyle("symbolColor", textColor); + cssStyleDeclarationModule.setStyle("rollOverColor", rolloverColor); + cssStyleDeclarationModule.setStyle("selectionColor", selectionColor); + cssStyleDeclarationModule.setStyle("focusColor", titleColor); + cssStyleDeclarationModule.setStyle("accentColor", textColor); + cssStyleDeclarationModule.setStyle("textSelectedColor", textColor); + cssStyleDeclarationModule.setStyle("textRollOverColor", textColor); + } + cssStyleDeclarationModule.setStyle("contentBackgroundAlpha", styleAlpha); + cssStyleDeclarationModule.setStyle("fontSize", fontSize); + cssStyleDeclarationModule.setStyle("fontFamily", mainFontFamily); + topLevelStyleManager.setStyleDeclaration("mx.modules.Module", cssStyleDeclarationModule, false); + + //Style Application + var cssStyleDeclarationApplication:CSSStyleDeclaration = topLevelStyleManager.getStyleDeclaration("spark.components.Application"); + if (cssStyleDeclarationApplication) + { + if (numberOfStyleColors > 4) + { + cssStyleDeclarationApplication.setStyle("backgroundColor", applicationBackgroundColor); + } + cssStyleDeclarationApplication.setStyle("backgroundAlpha", styleAlpha); + } + + var cssStyleDeclarationApplicationWindowed:CSSStyleDeclaration = topLevelStyleManager.getStyleDeclaration("spark.components.WindowedApplication"); + if (cssStyleDeclarationApplicationWindowed) + { + if (numberOfStyleColors > 4) + { + cssStyleDeclarationApplicationWindowed.setStyle("backgroundColor", applicationBackgroundColor); + } + cssStyleDeclarationApplicationWindowed.setStyle("backgroundAlpha", styleAlpha); + } + + //Style WidgetTemplate + var cssStyleDeclarationWT:CSSStyleDeclaration = topLevelStyleManager.getStyleDeclaration("com.esri.viewer.WidgetTemplate"); + // When pointing to graphical theme replace WidgetTemplateSkin with GraphicalWidgetTemplateSkin + if (numberOfStyleColors > 4) + { + cssStyleDeclarationWT.setStyle("borderColor", textColor); + } + + /*Style For InfoWindow + When pointing to graphical theme, you will need to explicitly set properties for infoWindow. + e.g. cssStyleDeclarationInfoContainer.setStyle("backgroundColor",0xFFFFFF); + */ + var cssStyleDeclarationInfoContainer:CSSStyleDeclaration = topLevelStyleManager.getStyleDeclaration("com.esri.ags.components.supportClasses.InfoWindow"); + /* + For custom skin for infoWindow, borderSkin needs to be set to null as shouwn below + infoOffsetX and infoOffsetY can be used to change the location where infowindow will be shown. + infoPlacement would need to be set to none in this case for preventing infowindow placement from auto adjusting. + */ + /* + cssStyleDeclarationInfoContainer.setStyle("borderSkin",null); + cssStyleDeclarationInfoContainer.setStyle("infoOffsetX",-45); + */ + if (numberOfStyleColors > 4) + { + cssStyleDeclarationInfoContainer.setStyle("backgroundColor", backgroundColor); + cssStyleDeclarationInfoContainer.setStyle("borderColor", textColor); + } + else + { + cssStyleDeclarationInfoContainer.setStyle("borderColor", defaultTextColor); + } + cssStyleDeclarationInfoContainer.setStyle("borderThickness", 1); + cssStyleDeclarationInfoContainer.setStyle("backgroundAlpha", styleAlpha); + + var cssStyleDeclarationInfoWindowLabel:CSSStyleDeclaration = topLevelStyleManager.getStyleDeclaration("com.esri.ags.components.supportClasses.InfoWindowLabel"); + cssStyleDeclarationInfoWindowLabel.setStyle("fontSize", fontSize); + cssStyleDeclarationInfoWindowLabel.setStyle("fontFamily", mainFontFamily); + + var cssStyleDeclarationInfoSymbolWindow:CSSStyleDeclaration = topLevelStyleManager.getStyleDeclaration("com.esri.ags.components.supportClasses.InfoSymbolWindow"); + if (numberOfStyleColors > 4) + { + cssStyleDeclarationInfoSymbolWindow.setStyle("backgroundColor", backgroundColor); + cssStyleDeclarationInfoSymbolWindow.setStyle("borderColor", textColor); + } + else + { + cssStyleDeclarationInfoSymbolWindow.setStyle("borderColor", defaultTextColor); + } + cssStyleDeclarationInfoSymbolWindow.setStyle("borderThickness", 1); + cssStyleDeclarationInfoSymbolWindow.setStyle("backgroundAlpha", styleAlpha); + + if (numberOfStyleColors > 4) + { + var cssStyleDeclarationPopUpRendererLink:CSSStyleDeclaration = topLevelStyleManager.getStyleDeclaration("com.esri.ags.portal.PopUpRenderer"); + cssStyleDeclarationPopUpRendererLink.setStyle("linkActiveColor", titleColor); + cssStyleDeclarationPopUpRendererLink.setStyle("linkNormalColor", textColor); + cssStyleDeclarationPopUpRendererLink.setStyle("linkHoverColor", titleColor); + } + + var cssStyleDeclarationContentNavigator:CSSStyleDeclaration = topLevelStyleManager.getStyleDeclaration("com.esri.ags.components.ContentNavigator"); + if (numberOfStyleColors > 4) + { + cssStyleDeclarationContentNavigator.setStyle("headerBackgroundColor", backgroundColor); + cssStyleDeclarationContentNavigator.setStyle("headerColor", textColor); + } + cssStyleDeclarationContentNavigator.setStyle("headerBackgroundAlpha", styleAlpha); + + //Style Banner title and WidgetTitle + var cssStyleDeclarationWidgetTitle:CSSStyleDeclaration = new CSSStyleDeclaration(".WidgetTitle"); + if (numberOfStyleColors > 4) + { + cssStyleDeclarationWidgetTitle.setStyle("color", titleColor); + } + cssStyleDeclarationWidgetTitle.setStyle("fontSize", fontSize); + cssStyleDeclarationWidgetTitle.setStyle("fontFamily", mainFontFamily); + cssStyleDeclarationWidgetTitle.setStyle("fontWeight", "bold"); + + var cssStyleDeclarationBannerTitle:CSSStyleDeclaration = new CSSStyleDeclaration(".BannerTitle"); + if (numberOfStyleColors > 4) + { + cssStyleDeclarationBannerTitle.setStyle("color", titleColor); + } + if (titleFontSize > 0) + { + cssStyleDeclarationBannerTitle.setStyle("fontSize", titleFontSize); + } + cssStyleDeclarationBannerTitle.setStyle("fontFamily", titleFontFamily); + cssStyleDeclarationBannerTitle.setStyle("paddingBottom", 2); + cssStyleDeclarationBannerTitle.setStyle("paddingTop", 4); + + var cssStyleDeclarationBannerSubtitle:CSSStyleDeclaration = new CSSStyleDeclaration(".BannerSubtitle"); + if (numberOfStyleColors > 4) + { + cssStyleDeclarationBannerSubtitle.setStyle("color", titleColor); + } + if (subTitleFontSize > 0) + { + cssStyleDeclarationBannerSubtitle.setStyle("fontSize", subTitleFontSize); + } + cssStyleDeclarationBannerSubtitle.setStyle("fontFamily", subTitleFontFamily); + + // Style s|Panel + var cssStyleDeclarationSPanel:CSSStyleDeclaration = topLevelStyleManager.getStyleDeclaration("spark.components.Panel"); + if (numberOfStyleColors > 4) + { + cssStyleDeclarationSPanel.setStyle("backgroundColor", backgroundColor); + } + cssStyleDeclarationSPanel.setStyle("backgroundAlpha", styleAlpha); + + //Style mx|Panel + var cssStyleDeclarationMxPanel:CSSStyleDeclaration = topLevelStyleManager.getStyleDeclaration("mx.containers.Panel"); + if (numberOfStyleColors > 4) + { + cssStyleDeclarationMxPanel.setStyle("backgroundColor", backgroundColor); + } + cssStyleDeclarationMxPanel.setStyle("backgroundAlpha", styleAlpha); + + //Style TabNavigator + var cssStyleDeclarationNavigator:CSSStyleDeclaration = topLevelStyleManager.getStyleDeclaration("mx.containers.TabNavigator"); + if (numberOfStyleColors > 4) + { + cssStyleDeclarationNavigator.setStyle("backgroundColor", backgroundColor); + } + cssStyleDeclarationNavigator.setStyle("backgroundAlpha", styleAlpha); + + // Style mx|Alert + var cssStyleDeclaration:CSSStyleDeclaration = new CSSStyleDeclaration(); + if (numberOfStyleColors > 4) + { + cssStyleDeclaration.setStyle("color", textColor); + cssStyleDeclaration.setStyle("backgroundColor", backgroundColor); + } + topLevelStyleManager.setStyleDeclaration("mx.controls.Alert", cssStyleDeclaration, false); + + //Style Tooltip + var cssStyleDeclarationTooltip:CSSStyleDeclaration = topLevelStyleManager.getStyleDeclaration("mx.controls.ToolTip"); + if (numberOfStyleColors > 4) + { + cssStyleDeclarationTooltip.setStyle("color", textColor); + cssStyleDeclarationTooltip.setStyle("backgroundColor", backgroundColor); + } + cssStyleDeclarationTooltip.setStyle("fontSize", fontSize); + cssStyleDeclarationTooltip.setStyle("fontFamily", mainFontFamily); + + //Style TitleWindow + if (numberOfStyleColors > 4) + { + var cssStyleDeclarationTitleWindow:CSSStyleDeclaration = new CSSStyleDeclaration(); + cssStyleDeclarationTitleWindow.setStyle("color", textColor); + cssStyleDeclarationTitleWindow.setStyle("backgroundColor", backgroundColor); + topLevelStyleManager.setStyleDeclaration("mx.containers.TitleWindow", cssStyleDeclarationTitleWindow, false); + } + //Style DataGrid + var cssStyleDeclarationDataGrid:CSSStyleDeclaration = new CSSStyleDeclaration(); + if (numberOfStyleColors > 4) + { + cssStyleDeclarationDataGrid.setStyle("alternatingItemColors", [ backgroundColor, backgroundColor ]); + cssStyleDeclarationDataGrid.setStyle("contentBackgroundColor", backgroundColor); + } + cssStyleDeclarationDataGrid.setStyle("backgroundAlpha", styleAlpha); + topLevelStyleManager.setStyleDeclaration("mx.controls.DataGrid", cssStyleDeclarationDataGrid, false); + + //Style RichEditableText + if (numberOfStyleColors > 4) + { + var cssStyleDeclarationRET:CSSStyleDeclaration = new CSSStyleDeclaration(); + cssStyleDeclarationRET.setStyle("focusedTextSelectionColor", rolloverColor); + cssStyleDeclarationRET.setStyle("unfocusedTextSelectionColor", rolloverColor); + topLevelStyleManager.setStyleDeclaration("spark.components.RichEditableText", cssStyleDeclarationRET, false); + + var cssStyleDeclarationTI:CSSStyleDeclaration = new CSSStyleDeclaration(); + cssStyleDeclarationTI.setStyle("chromeColor", textColor); + topLevelStyleManager.setStyleDeclaration("spark.components.TextInput", cssStyleDeclarationTI, false); + topLevelStyleManager.setStyleDeclaration("spark.components.TextArea", cssStyleDeclarationTI, false); + topLevelStyleManager.setStyleDeclaration("mx.controls.TextInput", cssStyleDeclarationTI, false); + topLevelStyleManager.setStyleDeclaration("mx.controls.TextArea", cssStyleDeclarationTI, false); + topLevelStyleManager.setStyleDeclaration("mx.controls.VSlider", cssStyleDeclarationTI, false); + topLevelStyleManager.setStyleDeclaration("spark.components.VSlider", cssStyleDeclarationTI, false); + topLevelStyleManager.setStyleDeclaration("mx.controls.HSlider", cssStyleDeclarationTI, false); + topLevelStyleManager.setStyleDeclaration("spark.components.HSlider", cssStyleDeclarationTI, false); + } + + if (numberOfStyleColors > 4) + { + var cssStyleDeclarationChartDataTips:CSSStyleDeclaration = new CSSStyleDeclaration(); + cssStyleDeclarationChartDataTips.setStyle("backgroundColor", backgroundColor); + topLevelStyleManager.setStyleDeclaration("mx.charts.chartClasses.DataTip", cssStyleDeclarationChartDataTips, false); + } + + var cssStyleDeclarationModal:CSSStyleDeclaration = topLevelStyleManager.getStyleDeclaration("global") + cssStyleDeclarationModal.setStyle("modalTransparencyColor", 0x777777); + cssStyleDeclarationModal.setStyle("modalTransparencyBlur", 1); + cssStyleDeclarationModal.setStyle("modalTransparency", 0.5); + cssStyleDeclarationModal.setStyle("modalTransparencyDuration", 300); //messes up tween! + topLevelStyleManager.setStyleDeclaration("global", cssStyleDeclarationModal, true); + } + + private function buildFontFamilyString(... fontNames):String + { + return fontNames.filter(isValidValue).join(", "); + } + + private function isValidValue(item:String, index:int, array:Array):Boolean + { + return Boolean(item); + } +} + +} diff --git a/src/com/esri/viewer/managers/WidgetManager.mxml b/src/com/esri/viewer/managers/WidgetManager.mxml index 10529ee..e2128d2 100644 --- a/src/com/esri/viewer/managers/WidgetManager.mxml +++ b/src/com/esri/viewer/managers/WidgetManager.mxml @@ -1,1476 +1,1476 @@ - - - - - - - - - - - - - - - - - - 5 && vPanelBox.isButtonSelected()) - { - vPanelBox.changeButtonSelection(); - bottomContainerVisible = true; - updatePanelWidgetsVisibility(bottomContainer, true); - } - else - { - if (bottomContainer.height < 5) - { - if (!vPanelBox.isButtonSelected()) - { - vPanelBox.changeButtonSelection(); - } - bottomContainerVisible = false; - bottomContainer.height = 0; - updatePanelWidgetsVisibility(bottomContainer, false); - } - } - } - - private function handleLeftContainerResize(event:ResizeEvent):void - { - if (leftContainer.parent === hPanelBox) - { - updateHDividedBox(hPanelBox); - } - else if (leftContainer.parent === iHPanelBox2) - { - updateHDividedBox(iHPanelBox2); - } - - function updateHDividedBox(dividedBox:PanelBox):void - { - if (leftContainer.width > 5 && dividedBox.isButtonSelected()) - { - dividedBox.changeButtonSelection(); - leftContainerVisible = true; - updatePanelWidgetsVisibility(leftContainer, true); - } - else - { - if (leftContainer.width < 5) - { - if (!dividedBox.isButtonSelected()) - { - dividedBox.changeButtonSelection(); - } - leftContainerVisible = false; - leftContainer.width = 0; - updatePanelWidgetsVisibility(leftContainer, false); - } - } - } - } - - private function handleRightContainerResize(event:ResizeEvent):void - { - if (rightContainer.parent === hPanelBox) - { - updateHDividedBox(hPanelBox, hPanelBox.getElementIndex(rightContainer) - 1); - } - else if (rightContainer.parent === iHPanelBox1) - { - updateHDividedBox(iHPanelBox1, iHPanelBox1.getElementIndex(rightContainer) - 1); - } - - function updateHDividedBox(panelBox:PanelBox, buttonIndex:int):void - { - if (rightContainer.width > 5 && !panelBox.isButtonSelected(buttonIndex)) - { - panelBox.changeButtonSelection(buttonIndex); - rightContainerVisible = true; - updatePanelWidgetsVisibility(rightContainer, true); - } - else - { - if (rightContainer.width < 5) - { - if (panelBox.isButtonSelected(buttonIndex)) - { - panelBox.changeButtonSelection(buttonIndex); - } - rightContainerVisible = false; - rightContainer.width = 0; - updatePanelWidgetsVisibility(rightContainer, false); - } - } - } - } - - private function bottomContainerCollapse_effectEndHandler(event:EffectEvent):void - { - updatePanelWidgetsVisibility(bottomContainer, false); - } - - private function leftContainerCollapse_effectEndHandler(event:EffectEvent):void - { - updatePanelWidgetsVisibility(leftContainer, false); - } - - private function rightContainerCollapse_effectEndHandler(event:EffectEvent):void - { - updatePanelWidgetsVisibility(rightContainer, false); - } - - private function updatePanelWidgetsVisibility(panel:Group, visible:Boolean):void - { - for (var i:int = 0; i < panel.numElements; i++) - { - panel.getElementAt(i).visible = visible; - } - } - - private function loadContainer(ctn:Object):void - { - ctnInfo = ModuleManager.getModule(ctn.url); - ctnInfo.data = ctn; - ctnInfo.addEventListener(ModuleEvent.READY, onContainerReady); - ctnInfo.addEventListener(ModuleEvent.ERROR, moduleErrorHandler); - ctnInfo.load(null, securityDomain, null, moduleFactory); - } - - private var containers:Array = []; - - private function onContainerReady(event:ModuleEvent):void - { - var moduleInfo:IModuleInfo = event.module; - var moduleData:Object = moduleInfo.data; - containerTable.add(moduleData.url, moduleInfo); - - var widgetContainer:IWidgetContainer = moduleInfo.factory.create() as IWidgetContainer; - - moduleData.obj = widgetContainer; - widgetContainer.configParams = moduleData; - - var visualElement:IVisualElement = widgetContainer as IVisualElement; - - if (visualElement) - { - simpleWidgetContainersContainer.addElement(visualElement); - } - containers.push({ widgetContainer: widgetContainer, type: moduleData.panelType }); - - loadNextContainer(); - } - - //===================================================================== - // Load controllers - //===================================================================== - private var controllerList:Array = []; - - private function startLoadControls():void - { - controlContainer = new Group(); - controlContainer.percentHeight = 100; - controlContainer.percentWidth = 100; - - simpleWidgetContainersContainer.addElementAt(controlContainer, 1); - - var controls:Array = configData.controls; - if (controls) - { - for (var i:uint = 0; i < controls.length; i++) - { - controllerList.push(controls[i]); - } - } - this.cursorManager.setBusyCursor(); - loadNextControl(); - } - - private function loadNextControl():void - { - if (controllerList.length) - { - var ctl:Object = controllerList[0]; - controllerList.splice(0, 1); - loadControl(ctl); - } - else - { - //load panel widgets after controllers are loaded - this.cursorManager.removeBusyCursor(); - startLoadPanelWidgets(); - } - } - - private function loadControl(ctl:Object):void - { - ctlInfo = ModuleManager.getModule(ctl.url); - ctlInfo.data = ctl; - ctlInfo.addEventListener(ModuleEvent.READY, moduleReadyHandler); - ctlInfo.addEventListener(ModuleEvent.ERROR, moduleErrorHandler); - ctlInfo.load(null, securityDomain, null, moduleFactory); - } - - private function moduleReadyHandler(event:ModuleEvent):void - { - var moduleInfo:IModuleInfo = event.module; - var moduleData:Object = moduleInfo.data; - controlTable.add(moduleData.url, moduleInfo); - - var config:String = moduleData.config as String; // config URL - - var baseWidget:IBaseWidget = moduleInfo.factory.create() as IBaseWidget; - - baseWidget.widgetId = moduleData.id as Number; - baseWidget.widgetTitle = moduleData.label; - baseWidget.widgetIcon = moduleData.icon; - baseWidget.config = config; // config URL - baseWidget.configXML = moduleData.configXML; // embedded config XML - if any - baseWidget.configData = configData; - baseWidget.map = map; - baseWidget.setRelativePosition(moduleData.left, moduleData.right, moduleData.top, moduleData.bottom); - baseWidget.horizontalCenter = moduleData.horizontalCenter - baseWidget.verticalCenter = moduleData.verticalCenter; - baseWidget.run(); - - var visualElement:IVisualElement = baseWidget as IVisualElement; - if (visualElement) - { - controlContainer.addElement(visualElement); - } - loadNextControl(); - } - - //===================================================================== - // Load widgets that are part of a panel - //===================================================================== - private function startLoadPanelWidgets():void - { - for (var i:Number = 0; i < configData.widgets.length; i++) - { - var isPartOfPanel:Boolean = configData.widgets[i].isPartOfPanel && configData.widgets[i].isPartOfPanel == true; - if (isPartOfPanel) - { - panelWidgetArray.push(configData.widgets[i]); - } - } - loadNextPanelWidget(); - } - - private function loadNextPanelWidget():void - { - if (panelWidgetArray.length) - { - var id:Number = panelWidgetArray[0].id; - panelWidgetArray.splice(0, 1); - AppEvent.dispatch(AppEvent.WIDGET_RUN, id); - } - else - { - // load preloaded widgets after the panel widgets have been loaded - this.cursorManager.removeBusyCursor(); - preloadWidgets(); - } - } - - //===================================================================== - // Load preload widgets - //===================================================================== - private function preloadWidgets():void - { - for (var i:Number = 0; i < configData.widgets.length; i++) - { - var id:Number = configData.widgets[i].id; - var preload:String = configData.widgets[i].preload; - if (preload == "open" || preload == "minimized") - { - preloadArray.push(configData.widgets[i]); - } - } - preloadNextWidget(); - } - - private function preloadNextWidget():void - { - if (preloadArray.length > 0) - { - var id:Number = preloadArray[0].id; - preloadArray.splice(0, 1); - AppEvent.dispatch(AppEvent.WIDGET_RUN, id); - } - } - - //===================================================================== - // Load widgets - //===================================================================== - private var widgetAdded:Boolean = false; - - private function createWidget(widgetId:Number):IBaseWidget - { - var widgetIndex:Object = configData.widgetIndex[widgetId]; - var widgetContainer:Object = configData.widgetContainers[widgetIndex.container]; - var widgetObject:Object = widgetContainer.widgets[widgetIndex.widget]; - - var preload:String = widgetObject.preload; - var label:String = widgetObject.label; - var icon:String = widgetObject.icon; - var config:String = widgetObject.config; - var configXML:XML = widgetObject.configXML; - var url:String = widgetObject.url; - var isPartOfPanel:Boolean = widgetObject.isPartOfPanel; - - var wWidth:Number = Number(widgetObject.width); - var wHeight:Number = Number(widgetObject.height); - var wx:Number = Number(widgetObject.x); - var wy:Number = Number(widgetObject.y); - var wleft:String = widgetObject.left; - var wtop:String = widgetObject.top; - var wright:String = widgetObject.right; - var wbottom:String = widgetObject.bottom; - var wHorizontalCenter:String = widgetObject.horizontalCenter; - var wVerticalCenter:String = widgetObject.verticalCenter; - - var modInfo:IModuleInfo = moduleTable.find(url) as IModuleInfo; - var widget:IBaseWidget; - widget = modInfo.factory.create() as IBaseWidget; - widget.widgetId = widgetId; - widget.widgetTitle = label; - widget.widgetIcon = icon; - widget.config = config; - widget.configXML = configXML; - widget.configData = configData; - widget.map = map; - widget.isDraggable = this.isDraggable; - widget.isPartOfPanel = isPartOfPanel; - - if (!isPartOfPanel) - { - widget.setPreload(preload); - - widget.initialHeight = wHeight; - widget.initialWidth = wWidth; - - widget.horizontalCenter = wHorizontalCenter; - widget.verticalCenter = wVerticalCenter; - - // if no X and Y both configured, use system X/Y for positioning - if (wleft || wtop || wright || wbottom) - { - widget.setRelativePosition(wleft, wright, wtop, wbottom); - } - else if (wx && wy) - { - widget.setXYPosition(wx, wy); - } - else - { - setAutoXY(); - wx = _refX; - wy = _refY - widget.setXYPosition(wx, wy); - } - } - else - { - widget.isResizeable = false; - } - widgetTable.add(widgetId, widget); - - return widget; - } - - private function openWidget(widget:IBaseWidget):void - { - var idx:Object = configData.widgetIndex[widget.widgetId]; - var wgtContainerObj:Object = configData.widgetContainers[idx.container].container; - var wgtContainer:IWidgetContainer = wgtContainerObj.obj; - - widget.setState(WidgetStates.WIDGET_OPENED); - widget.addEventListener(MouseEvent.MOUSE_DOWN, onWidgetMouseDown); - if (wgtContainer) - { - wgtContainer.addWidget(widget); - } - else - { - // widget inside a typed container - if (wgtContainerObj.panelType == "bottom") - { - bottomContainer.addElement(widget as IVisualElement); - } - else if (wgtContainerObj.panelType == "left") - { - leftContainer.addElement(widget as IVisualElement); - } - else if (wgtContainerObj.panelType == "right") - { - rightContainer.addElement(widget as IVisualElement); - } - - loadNextPanelWidget(); - } - } - - private function runWidget(widgetId:Number):void - { - var widget:IBaseWidget = createWidget(widgetId); - openWidget(widget); - } - - private function onRunWidget(event:AppEvent):void - { - var id:Number = event.data as Number; - var idx:Object = configData.widgetIndex[id]; - - var wgtContainer:IWidgetContainer = configData.widgetContainers[idx.container].container.obj; - var wgt:Object = configData.widgetContainers[idx.container].widgets[idx.widget]; - - if (!widgetAdded) - { - widgetAdded = true; - } - - //widget loaded - var widget:IBaseWidget; - if (widgetTable.containsKey(id)) - { - widget = widgetTable.find(id) as IBaseWidget; - - //add back the container if exists - widget.setState(WidgetStates.WIDGET_OPENED); - wgtContainer.addWidget(widget); - } - else - { - //module loaded - if (moduleTable.containsKey(wgt.url)) - { - runWidget(id); - } - else - { - loadWidget(id); - } - } - } - - private function loadWidget(id:Number):void - { - var idx:Object = configData.widgetIndex[id]; - var wgt:Object = configData.widgetContainers[idx.container].widgets[idx.widget]; - var preload:String = wgt.preload; - var url:String = wgt.url; - - wgtInfo = ModuleManager.getModule(url); - wgtInfo.data = - { - id: id, - preload: preload - }; - wgtInfo.addEventListener(ModuleEvent.READY, widgetReadyHandler); - wgtInfo.addEventListener(ModuleEvent.ERROR, moduleErrorHandler); - wgtInfo.load(null, securityDomain, null, moduleFactory); - this.cursorManager.setBusyCursor(); - } - - private function widgetReadyHandler(event:ModuleEvent):void - { - this.cursorManager.removeBusyCursor(); - - var moduleInfo:IModuleInfo = event.module; - moduleTable.add(moduleInfo.url, moduleInfo); - - var id:Number = moduleInfo.data.id; - runWidget(id); - } - - private function setAutoXY():void - { - var widgetWidget:Number = 300; - - var siftUnit:Number = 20; - - if (_refX == 0) - { - _refX = siftUnit; - } - else - { - _refX = _refX + widgetWidget + 20; - } - - if (_refY == 0) - { - _refY = Math.round(widgetWidget / 2); - } - - if (((_refX + widgetWidget) > this.width)) - { - _refX = siftUnit - _refY = _refY + Math.round(widgetWidget + siftUnit) / 2; - } - else if ((_refY + widgetWidget) > this.height) - { - _refX = siftUnit; - _refY = Math.round(widgetWidget / 2); - } - } - - private function onWidgetMouseDown(event:MouseEvent):void - { - var currentWidget:IBaseWidget = event.currentTarget as IBaseWidget; - - if (currentWidget == null) - { - return; - } - - var wgtContainer:IWidgetContainer = getWidgetContainer(currentWidget.widgetId); - if (wgtContainer != null && wgtContainer.isBasicLayout()) - { - wgtContainer.focusWidget(currentWidget.widgetId); - } - - if ((currentWidget is UIComponent) - && !isFocusInWidget(currentWidget)) - { - (currentWidget as UIComponent).setFocus(); - } - } - - private function getWidgetContainer(widgetId:Number):IWidgetContainer - { - var idx:Object = configData.widgetIndex[widgetId]; - var wgtContainer:IWidgetContainer = null; - - if (idx) - { - wgtContainer = configData.widgetContainers[idx.container].container.obj; - } - - return wgtContainer; - } - - private function isFocusInWidget(widget:IBaseWidget):Boolean - { - var currentFocusedObj:IFocusManagerComponent = focusManager.getFocus(); - if (currentFocusedObj == null) - { - return false; - } - - var temp:DisplayObject = currentFocusedObj as DisplayObject; - while (temp != null && temp != widget) - { - temp = temp.parent; - } - - return temp != null; - } - - /* -------------------------------------------------------------------- - Load Infowidnow Template Widgets - * -------------------------------------------------------------------- */ - private var m_infoWidgetInfo:IModuleInfo; - - private var m_infoWidgetCallback:Function; - - private function onInfowidgetRequest(event:AppEvent):void - { - m_infoWidgetCallback = event.callback; - var url:String = event.data.url as String; - var id:String = event.data.id as String; - var config:String = event.data.config as String; - var isOptLayer:Boolean = event.data.isOptLayer as Boolean; - var layerInfoWindowRenderer:LayerInfoWindowRenderer = event.data.layerInfoWindowRenderer as LayerInfoWindowRenderer; - - if (infowidgetTable.containsKey(url)) - { - m_infoWidgetInfo = infowidgetTable.find(url) as IModuleInfo; - m_infoWidgetInfo.data.id = id; - m_infoWidgetInfo.data.config = config; - m_infoWidgetInfo.data.isOptLayer = isOptLayer; - m_infoWidgetInfo.data.layerInfoWindowRenderer = layerInfoWindowRenderer; - createInfoTemplate(m_infoWidgetInfo); - } - else - { - loadInfoWidget(url, id, config, isOptLayer, layerInfoWindowRenderer); - } - } - - private function loadInfoWidget(url:String, id:String, config:String, isOptLayer:Boolean, layerInfoWindowRenderer:LayerInfoWindowRenderer):void - { - m_infoWidgetInfo = ModuleManager.getModule(url); - m_infoWidgetInfo.data = - { - url: url, - id: id, - config: config, - isOptLayer: isOptLayer, - layerInfoWindowRenderer: layerInfoWindowRenderer - }; - m_infoWidgetInfo.addEventListener(ModuleEvent.READY, infoWidgetReadyHandler); - m_infoWidgetInfo.addEventListener(ModuleEvent.ERROR, moduleErrorHandler); - m_infoWidgetInfo.load(null, securityDomain, null, moduleFactory); - } - - private function infoWidgetReadyHandler(event:ModuleEvent):void - { - var moduleInfo:IModuleInfo = event.module; - var url:String = moduleInfo.data.url as String; - infowidgetTable.add(url, moduleInfo); - createInfoTemplate(moduleInfo); - } - - private var _infoData:Object; - - private function createInfoTemplate(moduleInfo:IModuleInfo):void - { - var infoWidget:IInfowindowTemplate = moduleInfo.factory.create() as IInfowindowTemplate; - var url:String = moduleInfo.data.url as String; - var id:String = moduleInfo.data.id as String; - var config:String = moduleInfo.data.config as String; - var configXML:XML = moduleInfo.data.configXML; - var isOptLayer:Boolean = moduleInfo.data.isOptLayer as Boolean; - var layerInfoWindowRenderer:LayerInfoWindowRenderer = moduleInfo.data.layerInfoWindowRenderer as LayerInfoWindowRenderer; - - if (infoWidget) - { - _infoData = - { - url: url, - id: id, - config: config, - configXML: configXML, - infoWidget: infoWidget, - isOptLayer: isOptLayer, - layerInfoWindowRenderer: layerInfoWindowRenderer - }; - - if (config) - { - var baseWidget:IBaseWidget = infoWidget as IBaseWidget; - - baseWidget.setInfoConfig(config, false); - - baseWidget.addEventListener("widgetConfigLoaded", widgetConfigLoadedHandler); - } - else - { - m_infoWidgetCallback(new AppEvent(AppEvent.DATA_CREATE_INFOWIDGET, _infoData)); - } - } - } - - private function widgetConfigLoadedHandler(event:Event):void - { - m_infoWidgetCallback(new AppEvent(AppEvent.DATA_CREATE_INFOWIDGET, _infoData)); - } - - private function moduleErrorHandler(event:ModuleEvent):void - { - this.cursorManager.removeBusyCursor(); - - AppEvent.showError(event.errorText, WIDGET_MANAGER); - } - - //child change handler - //TODO: load preload the same way of loading controller - private function widgetAddedHandler(event:AppEvent):void - { - preloadNextWidget(); - } - - private function focusWidgetHandler(event:AppEvent):void - { - var widgetId:int = Number(event.data); - focusWidgetById(widgetId); - } - - private function focusWidgetById(widgetId:int):void - { - var wgtContainer:IWidgetContainer = getWidgetContainer(widgetId); - if (wgtContainer != null) - { - wgtContainer.focusWidget(widgetId); - } - } - - private function widgetCloseHandler(event:AppEvent):void - { - var widgetId:Number = event.data as Number; - - var idx:Object = configData.widgetIndex[widgetId]; - - if (idx == null) - { - return; - } - - var widget:IBaseWidget = null; - - if (widgetTable.containsKey(widgetId)) - { - widget = widgetTable.find(widgetId) as IBaseWidget; - widget.setState(WidgetStates.WIDGET_CLOSED); - } - } - - /** - * in case regular widget is configured as controller and can be closed. - */ - private var curId:Number; - - private function widgetClosedHandler(event:AppEvent):void - { - var data:Object = event.data; - - if (data.state as String == WidgetStates.WIDGET_CLOSED) - { - curId = data.id as Number; - - var timer:Timer = new Timer(500, 1); - timer.addEventListener(TimerEvent.TIMER_COMPLETE, removeWidget); - timer.start(); - } - } - - private function removeWidget(event:TimerEvent):void - { - var widget:IVisualElement; - for (var i:int = 0; i < controlContainer.numElements; i++) - { - widget = controlContainer.getElementAt(i); - - var baseWidget:IBaseWidget = widget as IBaseWidget; - - if (baseWidget.widgetId == curId) - { - controlContainer.removeElement(widget); - - return; - } - } - } - ]]> - - - + + + + + + + + + + + + + + + + + + 5 && vPanelBox.isButtonSelected()) + { + vPanelBox.changeButtonSelection(); + bottomContainerVisible = true; + updatePanelWidgetsVisibility(bottomContainer, true); + } + else + { + if (bottomContainer.height < 5) + { + if (!vPanelBox.isButtonSelected()) + { + vPanelBox.changeButtonSelection(); + } + bottomContainerVisible = false; + bottomContainer.height = 0; + updatePanelWidgetsVisibility(bottomContainer, false); + } + } + } + + private function handleLeftContainerResize(event:ResizeEvent):void + { + if (leftContainer.parent === hPanelBox) + { + updateHDividedBox(hPanelBox); + } + else if (leftContainer.parent === iHPanelBox2) + { + updateHDividedBox(iHPanelBox2); + } + + function updateHDividedBox(dividedBox:PanelBox):void + { + if (leftContainer.width > 5 && dividedBox.isButtonSelected()) + { + dividedBox.changeButtonSelection(); + leftContainerVisible = true; + updatePanelWidgetsVisibility(leftContainer, true); + } + else + { + if (leftContainer.width < 5) + { + if (!dividedBox.isButtonSelected()) + { + dividedBox.changeButtonSelection(); + } + leftContainerVisible = false; + leftContainer.width = 0; + updatePanelWidgetsVisibility(leftContainer, false); + } + } + } + } + + private function handleRightContainerResize(event:ResizeEvent):void + { + if (rightContainer.parent === hPanelBox) + { + updateHDividedBox(hPanelBox, hPanelBox.getElementIndex(rightContainer) - 1); + } + else if (rightContainer.parent === iHPanelBox1) + { + updateHDividedBox(iHPanelBox1, iHPanelBox1.getElementIndex(rightContainer) - 1); + } + + function updateHDividedBox(panelBox:PanelBox, buttonIndex:int):void + { + if (rightContainer.width > 5 && !panelBox.isButtonSelected(buttonIndex)) + { + panelBox.changeButtonSelection(buttonIndex); + rightContainerVisible = true; + updatePanelWidgetsVisibility(rightContainer, true); + } + else + { + if (rightContainer.width < 5) + { + if (panelBox.isButtonSelected(buttonIndex)) + { + panelBox.changeButtonSelection(buttonIndex); + } + rightContainerVisible = false; + rightContainer.width = 0; + updatePanelWidgetsVisibility(rightContainer, false); + } + } + } + } + + private function bottomContainerCollapse_effectEndHandler(event:EffectEvent):void + { + updatePanelWidgetsVisibility(bottomContainer, false); + } + + private function leftContainerCollapse_effectEndHandler(event:EffectEvent):void + { + updatePanelWidgetsVisibility(leftContainer, false); + } + + private function rightContainerCollapse_effectEndHandler(event:EffectEvent):void + { + updatePanelWidgetsVisibility(rightContainer, false); + } + + private function updatePanelWidgetsVisibility(panel:Group, visible:Boolean):void + { + for (var i:int = 0; i < panel.numElements; i++) + { + panel.getElementAt(i).visible = visible; + } + } + + private function loadContainer(ctn:Object):void + { + ctnInfo = ModuleManager.getModule(ctn.url); + ctnInfo.data = ctn; + ctnInfo.addEventListener(ModuleEvent.READY, onContainerReady); + ctnInfo.addEventListener(ModuleEvent.ERROR, moduleErrorHandler); + ctnInfo.load(null, securityDomain, null, moduleFactory); + } + + private var containers:Array = []; + + private function onContainerReady(event:ModuleEvent):void + { + var moduleInfo:IModuleInfo = event.module; + var moduleData:Object = moduleInfo.data; + containerTable.add(moduleData.url, moduleInfo); + + var widgetContainer:IWidgetContainer = moduleInfo.factory.create() as IWidgetContainer; + + moduleData.obj = widgetContainer; + widgetContainer.configParams = moduleData; + + var visualElement:IVisualElement = widgetContainer as IVisualElement; + + if (visualElement) + { + simpleWidgetContainersContainer.addElement(visualElement); + } + containers.push({ widgetContainer: widgetContainer, type: moduleData.panelType }); + + loadNextContainer(); + } + + //===================================================================== + // Load controllers + //===================================================================== + private var controllerList:Array = []; + + private function startLoadControls():void + { + controlContainer = new Group(); + controlContainer.percentHeight = 100; + controlContainer.percentWidth = 100; + + simpleWidgetContainersContainer.addElementAt(controlContainer, 1); + + var controls:Array = configData.controls; + if (controls) + { + for (var i:uint = 0; i < controls.length; i++) + { + controllerList.push(controls[i]); + } + } + this.cursorManager.setBusyCursor(); + loadNextControl(); + } + + private function loadNextControl():void + { + if (controllerList.length) + { + var ctl:Object = controllerList[0]; + controllerList.splice(0, 1); + loadControl(ctl); + } + else + { + //load panel widgets after controllers are loaded + this.cursorManager.removeBusyCursor(); + startLoadPanelWidgets(); + } + } + + private function loadControl(ctl:Object):void + { + ctlInfo = ModuleManager.getModule(ctl.url); + ctlInfo.data = ctl; + ctlInfo.addEventListener(ModuleEvent.READY, moduleReadyHandler); + ctlInfo.addEventListener(ModuleEvent.ERROR, moduleErrorHandler); + ctlInfo.load(null, securityDomain, null, moduleFactory); + } + + private function moduleReadyHandler(event:ModuleEvent):void + { + var moduleInfo:IModuleInfo = event.module; + var moduleData:Object = moduleInfo.data; + controlTable.add(moduleData.url, moduleInfo); + + var config:String = moduleData.config as String; // config URL + + var baseWidget:IBaseWidget = moduleInfo.factory.create() as IBaseWidget; + + baseWidget.widgetId = moduleData.id as Number; + baseWidget.widgetTitle = moduleData.label; + baseWidget.widgetIcon = moduleData.icon; + baseWidget.config = config; // config URL + baseWidget.configXML = moduleData.configXML; // embedded config XML - if any + baseWidget.configData = configData; + baseWidget.map = map; + baseWidget.setRelativePosition(moduleData.left, moduleData.right, moduleData.top, moduleData.bottom); + baseWidget.horizontalCenter = moduleData.horizontalCenter + baseWidget.verticalCenter = moduleData.verticalCenter; + baseWidget.run(); + + var visualElement:IVisualElement = baseWidget as IVisualElement; + if (visualElement) + { + controlContainer.addElement(visualElement); + } + loadNextControl(); + } + + //===================================================================== + // Load widgets that are part of a panel + //===================================================================== + private function startLoadPanelWidgets():void + { + for (var i:Number = 0; i < configData.widgets.length; i++) + { + var isPartOfPanel:Boolean = configData.widgets[i].isPartOfPanel && configData.widgets[i].isPartOfPanel == true; + if (isPartOfPanel) + { + panelWidgetArray.push(configData.widgets[i]); + } + } + loadNextPanelWidget(); + } + + private function loadNextPanelWidget():void + { + if (panelWidgetArray.length) + { + var id:Number = panelWidgetArray[0].id; + panelWidgetArray.splice(0, 1); + AppEvent.dispatch(AppEvent.WIDGET_RUN, id); + } + else + { + // load preloaded widgets after the panel widgets have been loaded + this.cursorManager.removeBusyCursor(); + preloadWidgets(); + } + } + + //===================================================================== + // Load preload widgets + //===================================================================== + private function preloadWidgets():void + { + for (var i:Number = 0; i < configData.widgets.length; i++) + { + var id:Number = configData.widgets[i].id; + var preload:String = configData.widgets[i].preload; + if (preload == "open" || preload == "minimized") + { + preloadArray.push(configData.widgets[i]); + } + } + preloadNextWidget(); + } + + private function preloadNextWidget():void + { + if (preloadArray.length > 0) + { + var id:Number = preloadArray[0].id; + preloadArray.splice(0, 1); + AppEvent.dispatch(AppEvent.WIDGET_RUN, id); + } + } + + //===================================================================== + // Load widgets + //===================================================================== + private var widgetAdded:Boolean = false; + + private function createWidget(widgetId:Number):IBaseWidget + { + var widgetIndex:Object = configData.widgetIndex[widgetId]; + var widgetContainer:Object = configData.widgetContainers[widgetIndex.container]; + var widgetObject:Object = widgetContainer.widgets[widgetIndex.widget]; + + var preload:String = widgetObject.preload; + var label:String = widgetObject.label; + var icon:String = widgetObject.icon; + var config:String = widgetObject.config; + var configXML:XML = widgetObject.configXML; + var url:String = widgetObject.url; + var isPartOfPanel:Boolean = widgetObject.isPartOfPanel; + + var wWidth:Number = Number(widgetObject.width); + var wHeight:Number = Number(widgetObject.height); + var wx:Number = Number(widgetObject.x); + var wy:Number = Number(widgetObject.y); + var wleft:String = widgetObject.left; + var wtop:String = widgetObject.top; + var wright:String = widgetObject.right; + var wbottom:String = widgetObject.bottom; + var wHorizontalCenter:String = widgetObject.horizontalCenter; + var wVerticalCenter:String = widgetObject.verticalCenter; + + var modInfo:IModuleInfo = moduleTable.find(url) as IModuleInfo; + var widget:IBaseWidget; + widget = modInfo.factory.create() as IBaseWidget; + widget.widgetId = widgetId; + widget.widgetTitle = label; + widget.widgetIcon = icon; + widget.config = config; + widget.configXML = configXML; + widget.configData = configData; + widget.map = map; + widget.isDraggable = this.isDraggable; + widget.isPartOfPanel = isPartOfPanel; + + if (!isPartOfPanel) + { + widget.setPreload(preload); + + widget.initialHeight = wHeight; + widget.initialWidth = wWidth; + + widget.horizontalCenter = wHorizontalCenter; + widget.verticalCenter = wVerticalCenter; + + // if no X and Y both configured, use system X/Y for positioning + if (wleft || wtop || wright || wbottom) + { + widget.setRelativePosition(wleft, wright, wtop, wbottom); + } + else if (wx && wy) + { + widget.setXYPosition(wx, wy); + } + else + { + setAutoXY(); + wx = _refX; + wy = _refY + widget.setXYPosition(wx, wy); + } + } + else + { + widget.isResizeable = false; + } + widgetTable.add(widgetId, widget); + + return widget; + } + + private function openWidget(widget:IBaseWidget):void + { + var idx:Object = configData.widgetIndex[widget.widgetId]; + var wgtContainerObj:Object = configData.widgetContainers[idx.container].container; + var wgtContainer:IWidgetContainer = wgtContainerObj.obj; + + widget.setState(WidgetStates.WIDGET_OPENED); + widget.addEventListener(MouseEvent.MOUSE_DOWN, onWidgetMouseDown); + if (wgtContainer) + { + wgtContainer.addWidget(widget); + } + else + { + // widget inside a typed container + if (wgtContainerObj.panelType == "bottom") + { + bottomContainer.addElement(widget as IVisualElement); + } + else if (wgtContainerObj.panelType == "left") + { + leftContainer.addElement(widget as IVisualElement); + } + else if (wgtContainerObj.panelType == "right") + { + rightContainer.addElement(widget as IVisualElement); + } + + loadNextPanelWidget(); + } + } + + private function runWidget(widgetId:Number):void + { + var widget:IBaseWidget = createWidget(widgetId); + openWidget(widget); + } + + private function onRunWidget(event:AppEvent):void + { + var id:Number = event.data as Number; + var idx:Object = configData.widgetIndex[id]; + + var wgtContainer:IWidgetContainer = configData.widgetContainers[idx.container].container.obj; + var wgt:Object = configData.widgetContainers[idx.container].widgets[idx.widget]; + + if (!widgetAdded) + { + widgetAdded = true; + } + + //widget loaded + var widget:IBaseWidget; + if (widgetTable.containsKey(id)) + { + widget = widgetTable.find(id) as IBaseWidget; + + //add back the container if exists + widget.setState(WidgetStates.WIDGET_OPENED); + wgtContainer.addWidget(widget); + } + else + { + //module loaded + if (moduleTable.containsKey(wgt.url)) + { + runWidget(id); + } + else + { + loadWidget(id); + } + } + } + + private function loadWidget(id:Number):void + { + var idx:Object = configData.widgetIndex[id]; + var wgt:Object = configData.widgetContainers[idx.container].widgets[idx.widget]; + var preload:String = wgt.preload; + var url:String = wgt.url; + + wgtInfo = ModuleManager.getModule(url); + wgtInfo.data = + { + id: id, + preload: preload + }; + wgtInfo.addEventListener(ModuleEvent.READY, widgetReadyHandler); + wgtInfo.addEventListener(ModuleEvent.ERROR, moduleErrorHandler); + wgtInfo.load(null, securityDomain, null, moduleFactory); + this.cursorManager.setBusyCursor(); + } + + private function widgetReadyHandler(event:ModuleEvent):void + { + this.cursorManager.removeBusyCursor(); + + var moduleInfo:IModuleInfo = event.module; + moduleTable.add(moduleInfo.url, moduleInfo); + + var id:Number = moduleInfo.data.id; + runWidget(id); + } + + private function setAutoXY():void + { + var widgetWidget:Number = 300; + + var siftUnit:Number = 20; + + if (_refX == 0) + { + _refX = siftUnit; + } + else + { + _refX = _refX + widgetWidget + 20; + } + + if (_refY == 0) + { + _refY = Math.round(widgetWidget / 2); + } + + if (((_refX + widgetWidget) > this.width)) + { + _refX = siftUnit + _refY = _refY + Math.round(widgetWidget + siftUnit) / 2; + } + else if ((_refY + widgetWidget) > this.height) + { + _refX = siftUnit; + _refY = Math.round(widgetWidget / 2); + } + } + + private function onWidgetMouseDown(event:MouseEvent):void + { + var currentWidget:IBaseWidget = event.currentTarget as IBaseWidget; + + if (currentWidget == null) + { + return; + } + + var wgtContainer:IWidgetContainer = getWidgetContainer(currentWidget.widgetId); + if (wgtContainer != null && wgtContainer.isBasicLayout()) + { + wgtContainer.focusWidget(currentWidget.widgetId); + } + + if ((currentWidget is UIComponent) + && !isFocusInWidget(currentWidget)) + { + (currentWidget as UIComponent).setFocus(); + } + } + + private function getWidgetContainer(widgetId:Number):IWidgetContainer + { + var idx:Object = configData.widgetIndex[widgetId]; + var wgtContainer:IWidgetContainer = null; + + if (idx) + { + wgtContainer = configData.widgetContainers[idx.container].container.obj; + } + + return wgtContainer; + } + + private function isFocusInWidget(widget:IBaseWidget):Boolean + { + var currentFocusedObj:IFocusManagerComponent = focusManager.getFocus(); + if (currentFocusedObj == null) + { + return false; + } + + var temp:DisplayObject = currentFocusedObj as DisplayObject; + while (temp != null && temp != widget) + { + temp = temp.parent; + } + + return temp != null; + } + + /* -------------------------------------------------------------------- + Load Infowidnow Template Widgets + * -------------------------------------------------------------------- */ + private var m_infoWidgetInfo:IModuleInfo; + + private var m_infoWidgetCallback:Function; + + private function onInfowidgetRequest(event:AppEvent):void + { + m_infoWidgetCallback = event.callback; + var url:String = event.data.url as String; + var id:String = event.data.id as String; + var config:String = event.data.config as String; + var isOptLayer:Boolean = event.data.isOptLayer as Boolean; + var layerInfoWindowRenderer:LayerInfoWindowRenderer = event.data.layerInfoWindowRenderer as LayerInfoWindowRenderer; + + if (infowidgetTable.containsKey(url)) + { + m_infoWidgetInfo = infowidgetTable.find(url) as IModuleInfo; + m_infoWidgetInfo.data.id = id; + m_infoWidgetInfo.data.config = config; + m_infoWidgetInfo.data.isOptLayer = isOptLayer; + m_infoWidgetInfo.data.layerInfoWindowRenderer = layerInfoWindowRenderer; + createInfoTemplate(m_infoWidgetInfo); + } + else + { + loadInfoWidget(url, id, config, isOptLayer, layerInfoWindowRenderer); + } + } + + private function loadInfoWidget(url:String, id:String, config:String, isOptLayer:Boolean, layerInfoWindowRenderer:LayerInfoWindowRenderer):void + { + m_infoWidgetInfo = ModuleManager.getModule(url); + m_infoWidgetInfo.data = + { + url: url, + id: id, + config: config, + isOptLayer: isOptLayer, + layerInfoWindowRenderer: layerInfoWindowRenderer + }; + m_infoWidgetInfo.addEventListener(ModuleEvent.READY, infoWidgetReadyHandler); + m_infoWidgetInfo.addEventListener(ModuleEvent.ERROR, moduleErrorHandler); + m_infoWidgetInfo.load(null, securityDomain, null, moduleFactory); + } + + private function infoWidgetReadyHandler(event:ModuleEvent):void + { + var moduleInfo:IModuleInfo = event.module; + var url:String = moduleInfo.data.url as String; + infowidgetTable.add(url, moduleInfo); + createInfoTemplate(moduleInfo); + } + + private var _infoData:Object; + + private function createInfoTemplate(moduleInfo:IModuleInfo):void + { + var infoWidget:IInfowindowTemplate = moduleInfo.factory.create() as IInfowindowTemplate; + var url:String = moduleInfo.data.url as String; + var id:String = moduleInfo.data.id as String; + var config:String = moduleInfo.data.config as String; + var configXML:XML = moduleInfo.data.configXML; + var isOptLayer:Boolean = moduleInfo.data.isOptLayer as Boolean; + var layerInfoWindowRenderer:LayerInfoWindowRenderer = moduleInfo.data.layerInfoWindowRenderer as LayerInfoWindowRenderer; + + if (infoWidget) + { + _infoData = + { + url: url, + id: id, + config: config, + configXML: configXML, + infoWidget: infoWidget, + isOptLayer: isOptLayer, + layerInfoWindowRenderer: layerInfoWindowRenderer + }; + + if (config) + { + var baseWidget:IBaseWidget = infoWidget as IBaseWidget; + + baseWidget.setInfoConfig(config, false); + + baseWidget.addEventListener("widgetConfigLoaded", widgetConfigLoadedHandler); + } + else + { + m_infoWidgetCallback(new AppEvent(AppEvent.DATA_CREATE_INFOWIDGET, _infoData)); + } + } + } + + private function widgetConfigLoadedHandler(event:Event):void + { + m_infoWidgetCallback(new AppEvent(AppEvent.DATA_CREATE_INFOWIDGET, _infoData)); + } + + private function moduleErrorHandler(event:ModuleEvent):void + { + this.cursorManager.removeBusyCursor(); + + AppEvent.showError(event.errorText, WIDGET_MANAGER); + } + + //child change handler + //TODO: load preload the same way of loading controller + private function widgetAddedHandler(event:AppEvent):void + { + preloadNextWidget(); + } + + private function focusWidgetHandler(event:AppEvent):void + { + var widgetId:int = Number(event.data); + focusWidgetById(widgetId); + } + + private function focusWidgetById(widgetId:int):void + { + var wgtContainer:IWidgetContainer = getWidgetContainer(widgetId); + if (wgtContainer != null) + { + wgtContainer.focusWidget(widgetId); + } + } + + private function widgetCloseHandler(event:AppEvent):void + { + var widgetId:Number = event.data as Number; + + var idx:Object = configData.widgetIndex[widgetId]; + + if (idx == null) + { + return; + } + + var widget:IBaseWidget = null; + + if (widgetTable.containsKey(widgetId)) + { + widget = widgetTable.find(widgetId) as IBaseWidget; + widget.setState(WidgetStates.WIDGET_CLOSED); + } + } + + /** + * in case regular widget is configured as controller and can be closed. + */ + private var curId:Number; + + private function widgetClosedHandler(event:AppEvent):void + { + var data:Object = event.data; + + if (data.state as String == WidgetStates.WIDGET_CLOSED) + { + curId = data.id as Number; + + var timer:Timer = new Timer(500, 1); + timer.addEventListener(TimerEvent.TIMER_COMPLETE, removeWidget); + timer.start(); + } + } + + private function removeWidget(event:TimerEvent):void + { + var widget:IVisualElement; + for (var i:int = 0; i < controlContainer.numElements; i++) + { + widget = controlContainer.getElementAt(i); + + var baseWidget:IBaseWidget = widget as IBaseWidget; + + if (baseWidget.widgetId == curId) + { + controlContainer.removeElement(widget); + + return; + } + } + } + ]]> + + + diff --git a/src/com/esri/viewer/skins/BasemapsButtonSkin.mxml b/src/com/esri/viewer/skins/BasemapsButtonSkin.mxml index c7f4a76..aebd3ef 100644 --- a/src/com/esri/viewer/skins/BasemapsButtonSkin.mxml +++ b/src/com/esri/viewer/skins/BasemapsButtonSkin.mxml @@ -1,280 +1,280 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/com/esri/viewer/skins/GraphicalWidgetTemplateSkin.mxml b/src/com/esri/viewer/skins/GraphicalWidgetTemplateSkin.mxml index 93e814b..9d0083e 100644 --- a/src/com/esri/viewer/skins/GraphicalWidgetTemplateSkin.mxml +++ b/src/com/esri/viewer/skins/GraphicalWidgetTemplateSkin.mxml @@ -1,171 +1,171 @@ - - - - - - - - - - - [HostComponent("com.esri.viewer.WidgetTemplate")] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + [HostComponent("com.esri.viewer.WidgetTemplate")] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/com/esri/viewer/skins/HScrollBarSkin.mxml b/src/com/esri/viewer/skins/HScrollBarSkin.mxml index 20a0cdf..d39b933 100644 --- a/src/com/esri/viewer/skins/HScrollBarSkin.mxml +++ b/src/com/esri/viewer/skins/HScrollBarSkin.mxml @@ -1,62 +1,62 @@ - - - - - - - [HostComponent("spark.components.HScrollBar")] - - - - - - - - - - - - - - - - - + + + + + + + [HostComponent("spark.components.HScrollBar")] + + + + + + + + + + + + + + + + + diff --git a/src/com/esri/viewer/skins/HScrollBarThumbSkin.mxml b/src/com/esri/viewer/skins/HScrollBarThumbSkin.mxml index 72d708f..51dd35f 100644 --- a/src/com/esri/viewer/skins/HScrollBarThumbSkin.mxml +++ b/src/com/esri/viewer/skins/HScrollBarThumbSkin.mxml @@ -1,46 +1,46 @@ - - - - - - - [HostComponent("spark.components.Button")] - - - - - - - - - - - - - - - - + + + + + + + [HostComponent("spark.components.Button")] + + + + + + + + + + + + + + + + diff --git a/src/com/esri/viewer/skins/HScrollBarTrackSkin.mxml b/src/com/esri/viewer/skins/HScrollBarTrackSkin.mxml index 0309aee..8f2772b 100644 --- a/src/com/esri/viewer/skins/HScrollBarTrackSkin.mxml +++ b/src/com/esri/viewer/skins/HScrollBarTrackSkin.mxml @@ -1,47 +1,47 @@ - - - - - - - [HostComponent("spark.components.Button")] - - - - - - - - - - - - - - - - - + + + + + + + [HostComponent("spark.components.Button")] + + + + + + + + + + + + + + + + + diff --git a/src/com/esri/viewer/skins/MapManagerSkin.mxml b/src/com/esri/viewer/skins/MapManagerSkin.mxml index c8d5e98..f8b9509 100644 --- a/src/com/esri/viewer/skins/MapManagerSkin.mxml +++ b/src/com/esri/viewer/skins/MapManagerSkin.mxml @@ -1,54 +1,54 @@ - - - - - - - [HostComponent("com.esri.viewer.managers.MapManager")] - - - - - - - - - - - - - - - - - - - - - + + + + + + + [HostComponent("com.esri.viewer.managers.MapManager")] + + + + + + + + + + + + + + + + + + + + + diff --git a/src/com/esri/viewer/skins/ScrollBarDownButtonSkin.mxml b/src/com/esri/viewer/skins/ScrollBarDownButtonSkin.mxml index c8b52fc..e286043 100644 --- a/src/com/esri/viewer/skins/ScrollBarDownButtonSkin.mxml +++ b/src/com/esri/viewer/skins/ScrollBarDownButtonSkin.mxml @@ -1,40 +1,40 @@ - - - - - - - [HostComponent("spark.components.Button")] - - - - - - - - - - - - + + + + + + + [HostComponent("spark.components.Button")] + + + + + + + + + + + + diff --git a/src/com/esri/viewer/skins/ScrollBarLeftButtonSkin.mxml b/src/com/esri/viewer/skins/ScrollBarLeftButtonSkin.mxml index d0fd14d..5369775 100644 --- a/src/com/esri/viewer/skins/ScrollBarLeftButtonSkin.mxml +++ b/src/com/esri/viewer/skins/ScrollBarLeftButtonSkin.mxml @@ -1,40 +1,40 @@ - - - - - - - [HostComponent("spark.components.Button")] - - - - - - - - - - - - + + + + + + + [HostComponent("spark.components.Button")] + + + + + + + + + + + + diff --git a/src/com/esri/viewer/skins/ScrollBarRightButtonSkin.mxml b/src/com/esri/viewer/skins/ScrollBarRightButtonSkin.mxml index 05b82f9..3cab366 100644 --- a/src/com/esri/viewer/skins/ScrollBarRightButtonSkin.mxml +++ b/src/com/esri/viewer/skins/ScrollBarRightButtonSkin.mxml @@ -1,40 +1,40 @@ - - - - - - - [HostComponent("spark.components.Button")] - - - - - - - - - - - - + + + + + + + [HostComponent("spark.components.Button")] + + + + + + + + + + + + diff --git a/src/com/esri/viewer/skins/ScrollBarUpButtonSkin.mxml b/src/com/esri/viewer/skins/ScrollBarUpButtonSkin.mxml index 6d81818..b40f3ea 100644 --- a/src/com/esri/viewer/skins/ScrollBarUpButtonSkin.mxml +++ b/src/com/esri/viewer/skins/ScrollBarUpButtonSkin.mxml @@ -1,37 +1,37 @@ - - - - - - - [HostComponent("spark.components.Button")] - - - - - - - - - - - - + + + + + + + [HostComponent("spark.components.Button")] + + + + + + + + + + + + diff --git a/src/com/esri/viewer/skins/TitlebarButtonSkin.mxml b/src/com/esri/viewer/skins/TitlebarButtonSkin.mxml index ac9549b..be97ad4 100644 --- a/src/com/esri/viewer/skins/TitlebarButtonSkin.mxml +++ b/src/com/esri/viewer/skins/TitlebarButtonSkin.mxml @@ -1,53 +1,53 @@ - - - - - - - [HostComponent("com.esri.viewer.components.TitlebarButton")] - - - - - - - - - - - - - - - - + + + + + + + [HostComponent("com.esri.viewer.components.TitlebarButton")] + + + + + + + + + + + + + + + + diff --git a/src/com/esri/viewer/skins/VScrollBarSkin.mxml b/src/com/esri/viewer/skins/VScrollBarSkin.mxml index f72d9e6..2822cc4 100644 --- a/src/com/esri/viewer/skins/VScrollBarSkin.mxml +++ b/src/com/esri/viewer/skins/VScrollBarSkin.mxml @@ -1,61 +1,61 @@ - - - - - - - [HostComponent("spark.components.VScrollBar")] - - - - - - - - - - - - - - - - - + + + + + + + [HostComponent("spark.components.VScrollBar")] + + + + + + + + + + + + + + + + + diff --git a/src/com/esri/viewer/skins/VScrollBarThumbSkin.mxml b/src/com/esri/viewer/skins/VScrollBarThumbSkin.mxml index e851d70..33065ea 100644 --- a/src/com/esri/viewer/skins/VScrollBarThumbSkin.mxml +++ b/src/com/esri/viewer/skins/VScrollBarThumbSkin.mxml @@ -1,45 +1,45 @@ - - - - - - - [HostComponent("spark.components.Button")] - - - - - - - - - - - - - - - - - + + + + + + + [HostComponent("spark.components.Button")] + + + + + + + + + + + + + + + + + diff --git a/src/com/esri/viewer/skins/VScrollBarTrackSkin.mxml b/src/com/esri/viewer/skins/VScrollBarTrackSkin.mxml index 4c31949..07f73a9 100644 --- a/src/com/esri/viewer/skins/VScrollBarTrackSkin.mxml +++ b/src/com/esri/viewer/skins/VScrollBarTrackSkin.mxml @@ -1,45 +1,45 @@ - - - - - - - [HostComponent("spark.components.Button")] - - - - - - - - - - - - - - - - + + + + + + + [HostComponent("spark.components.Button")] + + + + + + + + + + + + + + + + diff --git a/src/com/esri/viewer/skins/WidgetTemplateSkin.mxml b/src/com/esri/viewer/skins/WidgetTemplateSkin.mxml index 9c7ca0b..df25794 100644 --- a/src/com/esri/viewer/skins/WidgetTemplateSkin.mxml +++ b/src/com/esri/viewer/skins/WidgetTemplateSkin.mxml @@ -1,300 +1,300 @@ - - - - - - - - - - - [HostComponent("com.esri.viewer.WidgetTemplate")] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + [HostComponent("com.esri.viewer.WidgetTemplate")] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/com/esri/viewer/utils/ClustererParser.as b/src/com/esri/viewer/utils/ClustererParser.as index 272e3ae..f4ed15e 100644 --- a/src/com/esri/viewer/utils/ClustererParser.as +++ b/src/com/esri/viewer/utils/ClustererParser.as @@ -1,289 +1,289 @@ -package com.esri.viewer.utils -{ - -import com.esri.ags.clusterers.ESRIClusterer; -import com.esri.ags.clusterers.WeightedClusterer; -import com.esri.ags.clusterers.supportClasses.FlareSymbol; -import com.esri.ags.clusterers.supportClasses.SimpleClusterSymbol; -import com.esri.ags.symbols.Symbol; - -import flash.text.TextFormat; - -public class ClustererParser -{ - public function parseClusterer(clusteringXML:XML):ESRIClusterer - { - var clusterer:ESRIClusterer; - - if (clusteringXML) - { - clusterer = new WeightedClusterer(); - - if (clusteringXML.@mingraphiccount[0]) - { - var minGraphicCount:int = parseInt(clusteringXML.@mingraphiccount[0]); - if (!isNaN(minGraphicCount)) - { - clusterer.minGraphicCount = minGraphicCount; - } - } - if (clusteringXML.@sizeinpixels[0]) - { - var sizeInPixels:Number = parseFloat(clusteringXML.@sizeinpixels[0]); - if (!isNaN(sizeInPixels)) - { - clusterer.sizeInPixels = sizeInPixels; - } - } - - clusterer.symbol = parseClusterSymbol(clusteringXML.clustersymbol[0]); - } - - return clusterer; - } - - private function parseClusterSymbol(clusterSymbolXML:XML):Symbol - { - var clusterSymbol:Symbol; - - var shouldParseSimpleClusterSymbol:Boolean = clusterSymbolXML && (clusterSymbolXML.@type == "simple"); - if (shouldParseSimpleClusterSymbol) - { - clusterSymbol = parseSimpleClusterSymbol(clusterSymbolXML); - } - else - { - clusterSymbol = parseFlareSymbol(clusterSymbolXML); - } - - return clusterSymbol; - } - - private function parseSimpleClusterSymbol(clusterSymbolXML:XML):Symbol - { - var simpleClusterSymbol:SimpleClusterSymbol = new SimpleClusterSymbol(); - - if (clusterSymbolXML.@alpha[0]) - { - var alpha:Number = parseFloat(clusterSymbolXML.@alpha[0]); - if (!isNaN(alpha)) - { - simpleClusterSymbol.alpha = alpha; - } - } - if (clusterSymbolXML.@color[0]) - { - var color:uint = parseInt(clusterSymbolXML.@color[0]); - if (!isNaN(color)) - { - simpleClusterSymbol.color = color; - } - } - if (clusterSymbolXML.@size[0]) - { - var size:Number = parseFloat(clusterSymbolXML.@size[0]); - if (!isNaN(size)) - { - simpleClusterSymbol.size = size; - } - } - if (clusterSymbolXML.@alphas[0]) - { - simpleClusterSymbol.alphas = parseAlphas(clusterSymbolXML.@alphas[0]); - } - if (clusterSymbolXML.@sizes[0]) - { - simpleClusterSymbol.sizes = parseSizes(clusterSymbolXML.@sizes[0]); - } - if (clusterSymbolXML.@weights[0]) - { - simpleClusterSymbol.weights = parseWeights(clusterSymbolXML.@weights[0]); - } - if (clusterSymbolXML.@colors[0]) - { - simpleClusterSymbol.colors = parseColors(clusterSymbolXML.@colors[0]); - } - var textFormat:TextFormat = parseTextFormat(clusterSymbolXML); - simpleClusterSymbol.textFormat = textFormat; - - return simpleClusterSymbol; - } - - private function parseAlphas(delimitedAlphas:String):Array - { - var alphas:Array = []; - var alphasToParse:Array = delimitedAlphas.split(','); - var alpha:Number; - for each (var alphaToParse:String in alphasToParse) - { - alpha = parseFloat(alphaToParse); - if (isNaN(alpha)) - { - alphas.push(1); - } - else - { - alphas.push(alpha); - } - } - - return alphas; - } - - private function parseSizes(delimitedSizes:String):Array - { - var sizes:Array = []; - var sizesToParse:Array = delimitedSizes.split(','); - var size:Number; - for each (var sizeToParse:String in sizesToParse) - { - size = parseFloat(sizeToParse); - if (isNaN(size)) - { - sizes.push(0); - } - else - { - sizes.push(size); - } - } - - return sizes; - } - - private function parseWeights(delimitedWeights:String):Array - { - var weights:Array = []; - var weightsToParse:Array = delimitedWeights.split(','); - var weight:Number; - for each (var weightToParse:String in weightsToParse) - { - weight = parseFloat(weightToParse); - if (isNaN(weight)) - { - weights.push(0); - } - else - { - weights.push(weight); - } - } - - return weights; - } - - private function parseColors(delimitedColors:String):Array - { - var colors:Array = []; - var colorsToParse:Array = delimitedColors.split(','); - var color:uint; - for each (var colorToParse:String in colorsToParse) - { - color = parseInt(colorToParse); - - if (isNaN(color)) - { - colors.push(0); - } - else - { - colors.push(color); - } - } - return colors; - } - - private function parseTextFormat(clusterSymbolXML:XML):TextFormat - { - var textFormat:TextFormat = new TextFormat(); - - if (clusterSymbolXML.@textcolor[0]) - { - var color:uint = parseInt(clusterSymbolXML.@textcolor); - if (!isNaN(color)) - { - textFormat.color = color; - } - } - if (clusterSymbolXML.@textsize[0]) - { - var size:int = parseInt(clusterSymbolXML.@textsize); - if (!isNaN(size)) - { - textFormat.size = size; - } - } - - return textFormat; - } - - private function parseFlareSymbol(flareSymbolXML:XML):Symbol - { - var flareSymbol:FlareSymbol = new FlareSymbol(); - - if (flareSymbolXML) - { - if (flareSymbolXML.@alpha[0]) - { - var alpha:Number = parseFloat(flareSymbolXML.@alpha[0]); - if (!isNaN(alpha)) - { - flareSymbol.backgroundAlpha = alpha; - } - } - if (flareSymbolXML.@color[0]) - { - var color:uint = parseInt(flareSymbolXML.@color[0]); - if (!isNaN(color)) - { - flareSymbol.backgroundColor = color; - } - } - if (flareSymbolXML.@bordercolor[0]) - { - var borderColor:uint = parseInt(flareSymbolXML.@bordercolor[0]); - if (!isNaN(borderColor)) - { - flareSymbol.borderColor = borderColor; - } - } - if (flareSymbolXML.@flaremaxcount[0]) - { - var flareMaxCount:int = parseInt(flareSymbolXML.@flaremaxcount[0]); - if (!isNaN(flareMaxCount)) - { - flareSymbol.flareMaxCount = flareMaxCount; - } - } - if (flareSymbolXML.@size[0]) - { - var size:Number = parseFloat(flareSymbolXML.@size[0]); - if (!isNaN(size)) - { - flareSymbol.size = size; - } - } - if (flareSymbolXML.@alphas[0]) - { - flareSymbol.backgroundAlphas = parseAlphas(flareSymbolXML.@alphas[0]); - } - if (flareSymbolXML.@sizes[0]) - { - flareSymbol.sizes = parseSizes(flareSymbolXML.@sizes[0]); - } - if (flareSymbolXML.@weights[0]) - { - flareSymbol.weights = parseWeights(flareSymbolXML.@weights[0]); - } - if (flareSymbolXML.@colors[0]) - { - flareSymbol.backgroundColors = parseColors(flareSymbolXML.@colors[0]); - } - - flareSymbol.textFormat = parseTextFormat(flareSymbolXML); - } - - return flareSymbol; - } -} -} +package com.esri.viewer.utils +{ + +import com.esri.ags.clusterers.ESRIClusterer; +import com.esri.ags.clusterers.WeightedClusterer; +import com.esri.ags.clusterers.supportClasses.FlareSymbol; +import com.esri.ags.clusterers.supportClasses.SimpleClusterSymbol; +import com.esri.ags.symbols.Symbol; + +import flash.text.TextFormat; + +public class ClustererParser +{ + public function parseClusterer(clusteringXML:XML):ESRIClusterer + { + var clusterer:ESRIClusterer; + + if (clusteringXML) + { + clusterer = new WeightedClusterer(); + + if (clusteringXML.@mingraphiccount[0]) + { + var minGraphicCount:int = parseInt(clusteringXML.@mingraphiccount[0]); + if (!isNaN(minGraphicCount)) + { + clusterer.minGraphicCount = minGraphicCount; + } + } + if (clusteringXML.@sizeinpixels[0]) + { + var sizeInPixels:Number = parseFloat(clusteringXML.@sizeinpixels[0]); + if (!isNaN(sizeInPixels)) + { + clusterer.sizeInPixels = sizeInPixels; + } + } + + clusterer.symbol = parseClusterSymbol(clusteringXML.clustersymbol[0]); + } + + return clusterer; + } + + private function parseClusterSymbol(clusterSymbolXML:XML):Symbol + { + var clusterSymbol:Symbol; + + var shouldParseSimpleClusterSymbol:Boolean = clusterSymbolXML && (clusterSymbolXML.@type == "simple"); + if (shouldParseSimpleClusterSymbol) + { + clusterSymbol = parseSimpleClusterSymbol(clusterSymbolXML); + } + else + { + clusterSymbol = parseFlareSymbol(clusterSymbolXML); + } + + return clusterSymbol; + } + + private function parseSimpleClusterSymbol(clusterSymbolXML:XML):Symbol + { + var simpleClusterSymbol:SimpleClusterSymbol = new SimpleClusterSymbol(); + + if (clusterSymbolXML.@alpha[0]) + { + var alpha:Number = parseFloat(clusterSymbolXML.@alpha[0]); + if (!isNaN(alpha)) + { + simpleClusterSymbol.alpha = alpha; + } + } + if (clusterSymbolXML.@color[0]) + { + var color:uint = parseInt(clusterSymbolXML.@color[0]); + if (!isNaN(color)) + { + simpleClusterSymbol.color = color; + } + } + if (clusterSymbolXML.@size[0]) + { + var size:Number = parseFloat(clusterSymbolXML.@size[0]); + if (!isNaN(size)) + { + simpleClusterSymbol.size = size; + } + } + if (clusterSymbolXML.@alphas[0]) + { + simpleClusterSymbol.alphas = parseAlphas(clusterSymbolXML.@alphas[0]); + } + if (clusterSymbolXML.@sizes[0]) + { + simpleClusterSymbol.sizes = parseSizes(clusterSymbolXML.@sizes[0]); + } + if (clusterSymbolXML.@weights[0]) + { + simpleClusterSymbol.weights = parseWeights(clusterSymbolXML.@weights[0]); + } + if (clusterSymbolXML.@colors[0]) + { + simpleClusterSymbol.colors = parseColors(clusterSymbolXML.@colors[0]); + } + var textFormat:TextFormat = parseTextFormat(clusterSymbolXML); + simpleClusterSymbol.textFormat = textFormat; + + return simpleClusterSymbol; + } + + private function parseAlphas(delimitedAlphas:String):Array + { + var alphas:Array = []; + var alphasToParse:Array = delimitedAlphas.split(','); + var alpha:Number; + for each (var alphaToParse:String in alphasToParse) + { + alpha = parseFloat(alphaToParse); + if (isNaN(alpha)) + { + alphas.push(1); + } + else + { + alphas.push(alpha); + } + } + + return alphas; + } + + private function parseSizes(delimitedSizes:String):Array + { + var sizes:Array = []; + var sizesToParse:Array = delimitedSizes.split(','); + var size:Number; + for each (var sizeToParse:String in sizesToParse) + { + size = parseFloat(sizeToParse); + if (isNaN(size)) + { + sizes.push(0); + } + else + { + sizes.push(size); + } + } + + return sizes; + } + + private function parseWeights(delimitedWeights:String):Array + { + var weights:Array = []; + var weightsToParse:Array = delimitedWeights.split(','); + var weight:Number; + for each (var weightToParse:String in weightsToParse) + { + weight = parseFloat(weightToParse); + if (isNaN(weight)) + { + weights.push(0); + } + else + { + weights.push(weight); + } + } + + return weights; + } + + private function parseColors(delimitedColors:String):Array + { + var colors:Array = []; + var colorsToParse:Array = delimitedColors.split(','); + var color:uint; + for each (var colorToParse:String in colorsToParse) + { + color = parseInt(colorToParse); + + if (isNaN(color)) + { + colors.push(0); + } + else + { + colors.push(color); + } + } + return colors; + } + + private function parseTextFormat(clusterSymbolXML:XML):TextFormat + { + var textFormat:TextFormat = new TextFormat(); + + if (clusterSymbolXML.@textcolor[0]) + { + var color:uint = parseInt(clusterSymbolXML.@textcolor); + if (!isNaN(color)) + { + textFormat.color = color; + } + } + if (clusterSymbolXML.@textsize[0]) + { + var size:int = parseInt(clusterSymbolXML.@textsize); + if (!isNaN(size)) + { + textFormat.size = size; + } + } + + return textFormat; + } + + private function parseFlareSymbol(flareSymbolXML:XML):Symbol + { + var flareSymbol:FlareSymbol = new FlareSymbol(); + + if (flareSymbolXML) + { + if (flareSymbolXML.@alpha[0]) + { + var alpha:Number = parseFloat(flareSymbolXML.@alpha[0]); + if (!isNaN(alpha)) + { + flareSymbol.backgroundAlpha = alpha; + } + } + if (flareSymbolXML.@color[0]) + { + var color:uint = parseInt(flareSymbolXML.@color[0]); + if (!isNaN(color)) + { + flareSymbol.backgroundColor = color; + } + } + if (flareSymbolXML.@bordercolor[0]) + { + var borderColor:uint = parseInt(flareSymbolXML.@bordercolor[0]); + if (!isNaN(borderColor)) + { + flareSymbol.borderColor = borderColor; + } + } + if (flareSymbolXML.@flaremaxcount[0]) + { + var flareMaxCount:int = parseInt(flareSymbolXML.@flaremaxcount[0]); + if (!isNaN(flareMaxCount)) + { + flareSymbol.flareMaxCount = flareMaxCount; + } + } + if (flareSymbolXML.@size[0]) + { + var size:Number = parseFloat(flareSymbolXML.@size[0]); + if (!isNaN(size)) + { + flareSymbol.size = size; + } + } + if (flareSymbolXML.@alphas[0]) + { + flareSymbol.backgroundAlphas = parseAlphas(flareSymbolXML.@alphas[0]); + } + if (flareSymbolXML.@sizes[0]) + { + flareSymbol.sizes = parseSizes(flareSymbolXML.@sizes[0]); + } + if (flareSymbolXML.@weights[0]) + { + flareSymbol.weights = parseWeights(flareSymbolXML.@weights[0]); + } + if (flareSymbolXML.@colors[0]) + { + flareSymbol.backgroundColors = parseColors(flareSymbolXML.@colors[0]); + } + + flareSymbol.textFormat = parseTextFormat(flareSymbolXML); + } + + return flareSymbol; + } +} +} diff --git a/src/com/esri/viewer/utils/ErrorMessageUtil.as b/src/com/esri/viewer/utils/ErrorMessageUtil.as index 1067498..835c5c8 100644 --- a/src/com/esri/viewer/utils/ErrorMessageUtil.as +++ b/src/com/esri/viewer/utils/ErrorMessageUtil.as @@ -1,94 +1,94 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package com.esri.viewer.utils -{ - -import mx.rpc.Fault; - -/** - * Utility class for mapping error codes with application error messages. - */ -public class ErrorMessageUtil -{ - public static function getKnownErrorCauseMessage(fault:Fault):String - { - var message:String; - - switch (fault.faultCode) - { - case "Channel.Security.Error": - { - message = LocalizationUtil.getDefaultString("serverMissingCrossDomain"); - break; - } - case "Server.Error.Request": - case "400": - case "404": - { - message = LocalizationUtil.getDefaultString("serviceIsInaccessible"); - break; - } - case "499": - { - message = LocalizationUtil.getDefaultString("unauthorizedAccess"); - break; - } - case "403": - { - message = LocalizationUtil.getDefaultString("resourceAccessDenied"); - break; - } - default: - { - message = (fault.faultString == "Sign in aborted") ? - LocalizationUtil.getDefaultString("signInAborted") : LocalizationUtil.getDefaultString("unknownErrorCause"); - } - } - - return message; - } - - public static function makeHTMLSafe(content:String):String - { - content = content.replace(/>/g, ">"); - content = content.replace(//g, ">"); + content = content.replace(/ - *
  • GEO::point
  • - *
  • GEORSS::where
  • - *
  • GEOLL::lat and GEOLL::long
  • - *
  • GEORSS::point, GEORSS::line and GEORSS::polygon.
  • - * - */ -public class GeoRSSUtil -{ - private static const GEORSS:Namespace = Namespaces.GEORSS_NS; - private static const GEO:Namespace = Namespaces.GEO_NS; - private static const GML:Namespace = Namespaces.GML_NS; - private static const GEOLL:Namespace = Namespaces.GEO_LL; - - public function GeoRSSUtil(singletonEnforcer:SingletonEnforcer) - { - } - - public static function toGeometry(x:XML):Geometry - { - var georssPoint:String = String(x.GEORSS::point); - if (georssPoint) - { - return parseGeoRSSPoint(georssPoint); - } - var georssLine:String = String(x.GEORSS::line); - if (georssLine) - { - return parseGeoRSSLine(georssLine); - } - var georssPolygon:String = String(x.GEORSS::polygon); - if (georssPolygon) - { - return parseGeoRSSPolygon(georssPolygon); - } - var pointList:XMLList = x.GEO::point; - if (pointList && pointList.length() > 0) - { - var geoPoint:XML = pointList[0]; - var getLat:Number = Number(geoPoint.GEO::lat); - var geoLon:Number = Number(geoPoint.GEO::long); - return new MapPoint(geoLon, getLat); - } - var whereList:XMLList = x.GEORSS::where; - if (whereList && whereList.length() > 0) - { - var pos:String = whereList[0].GML::Point[0].GML::pos[0]; - var arr:Array = pos.split(" "); - var gmlLat:Number = Number(arr[0]); - var gmlLon:Number = Number(arr[1]); - return new MapPoint(gmlLon, gmlLat); - } - var georssLat:String = String(x.GEOLL::lat); - var georssLong:Number = Number(x.GEOLL::long); - if ((georssLong) && (georssLat)) - { - return new MapPoint(Number(georssLong), Number(georssLat)); - } - return null; - } - - private static function parseGeoRSSWhere(x:XML):Geometry - { - return null; - } - - private static function parseGeoRSSPoint(text:String):Geometry - { - var tokens:Array = StringUtil.trim(text).split(" "); - var lat:Number = Number(tokens[0]); - var lon:Number = Number(tokens[1]); - return new MapPoint(lon, lat); - } - - private static function parseGeoRSSLine(text:String):Geometry - { - var path:Array = []; - var tokens:Array = StringUtil.trim(text).split(" "); - if (tokens.length > 3) - { - for (var i:int = 0, j:int = 1; j < tokens.length; i += 2, j += 2) - { - var lat:Number = Number(tokens[i]); - var lon:Number = Number(tokens[j]); - path.push(new MapPoint(lon, lat)); - } - } - return new Polyline([ path ]); - } - - private static function parseGeoRSSPolygon(text:String):Geometry - { - var path:Array = []; - var tokens:Array = StringUtil.trim(text).split(" "); - for (var i:int = 0, j:int = 1; j < tokens.length; i += 2, j += 2) - { - var lat:Number = Number(tokens[i]); - var lon:Number = Number(tokens[j]); - path.push(new MapPoint(lon, lat)); - } - return new Polygon([ path ]); - } -} - -} - -class SingletonEnforcer -{ -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2010-2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package com.esri.viewer.utils +{ + +import com.esri.ags.geometry.Geometry; +import com.esri.ags.geometry.MapPoint; +import com.esri.ags.geometry.Polygon; +import com.esri.ags.geometry.Polyline; + +import mx.utils.StringUtil; + +/** + * Parses GeoRSS geometry and returns it as MapPoint, Polyline or Polygon. + * Supports GeoRSS namespaces and parses: + *
      + *
    • GEO::point
    • + *
    • GEORSS::where
    • + *
    • GEOLL::lat and GEOLL::long
    • + *
    • GEORSS::point, GEORSS::line and GEORSS::polygon.
    • + *
    + */ +public class GeoRSSUtil +{ + private static const GEORSS:Namespace = Namespaces.GEORSS_NS; + private static const GEO:Namespace = Namespaces.GEO_NS; + private static const GML:Namespace = Namespaces.GML_NS; + private static const GEOLL:Namespace = Namespaces.GEO_LL; + + public function GeoRSSUtil(singletonEnforcer:SingletonEnforcer) + { + } + + public static function toGeometry(x:XML):Geometry + { + var georssPoint:String = String(x.GEORSS::point); + if (georssPoint) + { + return parseGeoRSSPoint(georssPoint); + } + var georssLine:String = String(x.GEORSS::line); + if (georssLine) + { + return parseGeoRSSLine(georssLine); + } + var georssPolygon:String = String(x.GEORSS::polygon); + if (georssPolygon) + { + return parseGeoRSSPolygon(georssPolygon); + } + var pointList:XMLList = x.GEO::point; + if (pointList && pointList.length() > 0) + { + var geoPoint:XML = pointList[0]; + var getLat:Number = Number(geoPoint.GEO::lat); + var geoLon:Number = Number(geoPoint.GEO::long); + return new MapPoint(geoLon, getLat); + } + var whereList:XMLList = x.GEORSS::where; + if (whereList && whereList.length() > 0) + { + var pos:String = whereList[0].GML::Point[0].GML::pos[0]; + var arr:Array = pos.split(" "); + var gmlLat:Number = Number(arr[0]); + var gmlLon:Number = Number(arr[1]); + return new MapPoint(gmlLon, gmlLat); + } + var georssLat:String = String(x.GEOLL::lat); + var georssLong:Number = Number(x.GEOLL::long); + if ((georssLong) && (georssLat)) + { + return new MapPoint(Number(georssLong), Number(georssLat)); + } + return null; + } + + private static function parseGeoRSSWhere(x:XML):Geometry + { + return null; + } + + private static function parseGeoRSSPoint(text:String):Geometry + { + var tokens:Array = StringUtil.trim(text).split(" "); + var lat:Number = Number(tokens[0]); + var lon:Number = Number(tokens[1]); + return new MapPoint(lon, lat); + } + + private static function parseGeoRSSLine(text:String):Geometry + { + var path:Array = []; + var tokens:Array = StringUtil.trim(text).split(" "); + if (tokens.length > 3) + { + for (var i:int = 0, j:int = 1; j < tokens.length; i += 2, j += 2) + { + var lat:Number = Number(tokens[i]); + var lon:Number = Number(tokens[j]); + path.push(new MapPoint(lon, lat)); + } + } + return new Polyline([ path ]); + } + + private static function parseGeoRSSPolygon(text:String):Geometry + { + var path:Array = []; + var tokens:Array = StringUtil.trim(text).split(" "); + for (var i:int = 0, j:int = 1; j < tokens.length; i += 2, j += 2) + { + var lat:Number = Number(tokens[i]); + var lon:Number = Number(tokens[j]); + path.push(new MapPoint(lon, lat)); + } + return new Polygon([ path ]); + } +} + +} + +class SingletonEnforcer +{ +} diff --git a/src/com/esri/viewer/utils/Hashtable.as b/src/com/esri/viewer/utils/Hashtable.as index 2ac9b5d..42b6485 100644 --- a/src/com/esri/viewer/utils/Hashtable.as +++ b/src/com/esri/viewer/utils/Hashtable.as @@ -1,277 +1,277 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2010-2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package com.esri.viewer.utils -{ - -import flash.utils.Dictionary; - -public class Hashtable -{ - private var keys:Dictionary; - private var dups:Dictionary; - private var initSize:int; - private var maxSize:int; - private var hashSize:int; - private var item:Object = { key: null, obj: null, prev: null, next: null }; - private var headItem:Object = { key: null, obj: null, prev: null, next: null }; - private var tailItem:Object = { key: null, obj: null, prev: null, next: null }; - - /** - * Initializes a new Hashtable instance. - * - * @param size The initial size of the Hashtable. - */ - public function Hashtable(size:int = 500) - { - initSize = maxSize = Math.max(10, size); - - keys = new Dictionary(true); - dups = new Dictionary(true); - hashSize = 0; - - var node:Object = { key: null, obj: null, prev: null, next: null }; - headItem = tailItem = node; - - var k:int = initSize + 1; - for (var i:int = 0; i < k; i++) - { - node.next = { key: null, obj: null, prev: null, next: null }; - node = node.next; - } - tailItem = node; - } - - /** - * Add a key/data couple into the table. - * - * @param key The key. - * @param obj The data associated with the key. - */ - public function add(key:*, obj:*):Boolean - { - if (key == null) - { - return false; - } - if (obj == null) - { - return false; - } - if (keys[key]) - { - return false; - } - - if (hashSize++ == maxSize) - { - var k:int = (maxSize += initSize) + 1; - for (var i:int = 0; i < k; i++) - { - tailItem.next = { key: null, obj: null, prev: null, next: null }; - tailItem = tailItem.next; - } - } - - var pair:Object = { key: null, obj: null, prev: null, next: null }; - headItem = headItem.next; - pair.key = key; - pair.obj = obj; - - pair.next = pair; - if (pair) - { - pair.prev = pair; - } - pair = pair; - - keys[key] = pair; - dups[obj] ? dups[obj]++ : dups[obj] = 1; - - return true; - } - - /** - * Finds the value that is associated with the given key. - * - * @param key The key mapping a value. - * @return The data associated with the key or null if no matching - * entry was found. - */ - public function find(key:*):* - { - var pair:Object = keys[key]; - if (pair) - { - return pair.obj; - } - return null; - } - - /** - * Removes a value based on a given key. - * - * @param key The entry's key. - * @return The data associated with the key or null if no matching - * entry was found. - */ - public function remove(key:*):* - { - var pair:Object = keys[key]; - if (pair) - { - var obj:* = pair.obj; - - delete keys[key]; - - if (pair.prev) - { - pair.prev.next = pair.next; - } - if (pair.next) - { - pair.next.prev = pair.prev; - } - if (pair == pair) - { - pair = pair.next; - } - - pair.prev = null; - pair.next = null; - tailItem.next = pair; - tailItem = pair; - - if (--dups[obj] <= 0) - { - delete dups[obj]; - } - - if (--hashSize <= (maxSize - initSize)) - { - var k:int = (maxSize -= initSize) + 1; - for (var i:int = 0; i < k; i++) - { - headItem = headItem.next; - } - } - - return obj; - } - return null; - } - - /** - * Checks if a mapping exists for the given key. - * - * @return True if key exists, otherwise false. - */ - public function containsKey(key:*):Boolean - { - return keys[key] != undefined; - } - - /** - * Writes all keys into an array. - * - * @return An array containing all keys. - */ - public function getKeySet():Array - { - var a:Array = new Array(hashSize), i:int; - for each (var p:Object in keys) - { - a[i++] = p.key; - } - return a; - } - - /** - * @inheritDoc - */ - public function contains(obj:*):Boolean - { - return dups[obj] > 0; - } - - /** - * @inheritDoc - */ - public function clear():void - { - keys = new Dictionary(true); - dups = new Dictionary(true); - - var t:Object; - var n:Object = item; - while (n) - { - t = n.next; - - n.next = n.prev = null; - n.key = null; - n.obj = null; - tailItem.next = n; - tailItem = tailItem.next; - - n = t; - } - - item = null; - hashSize = 0; - } - - - /** - * @inheritDoc - */ - public function get size():int - { - return hashSize; - } - - /** - * @inheritDoc - */ - public function isEmpty():Boolean - { - return hashSize == 0; - } - - /** - * @inheritDoc - */ - public function toArray():Array - { - var a:Array = new Array(hashSize), i:int; - for each (var p:Object in keys) - { - a[i++] = p.obj; - } - return a; - } - - /** - * Prints out a string representing the current object. - * - * @return A string representing the current object. - */ - public function toString():String - { - return "[Hashtable, size=" + size + "]"; - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2010-2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package com.esri.viewer.utils +{ + +import flash.utils.Dictionary; + +public class Hashtable +{ + private var keys:Dictionary; + private var dups:Dictionary; + private var initSize:int; + private var maxSize:int; + private var hashSize:int; + private var item:Object = { key: null, obj: null, prev: null, next: null }; + private var headItem:Object = { key: null, obj: null, prev: null, next: null }; + private var tailItem:Object = { key: null, obj: null, prev: null, next: null }; + + /** + * Initializes a new Hashtable instance. + * + * @param size The initial size of the Hashtable. + */ + public function Hashtable(size:int = 500) + { + initSize = maxSize = Math.max(10, size); + + keys = new Dictionary(true); + dups = new Dictionary(true); + hashSize = 0; + + var node:Object = { key: null, obj: null, prev: null, next: null }; + headItem = tailItem = node; + + var k:int = initSize + 1; + for (var i:int = 0; i < k; i++) + { + node.next = { key: null, obj: null, prev: null, next: null }; + node = node.next; + } + tailItem = node; + } + + /** + * Add a key/data couple into the table. + * + * @param key The key. + * @param obj The data associated with the key. + */ + public function add(key:*, obj:*):Boolean + { + if (key == null) + { + return false; + } + if (obj == null) + { + return false; + } + if (keys[key]) + { + return false; + } + + if (hashSize++ == maxSize) + { + var k:int = (maxSize += initSize) + 1; + for (var i:int = 0; i < k; i++) + { + tailItem.next = { key: null, obj: null, prev: null, next: null }; + tailItem = tailItem.next; + } + } + + var pair:Object = { key: null, obj: null, prev: null, next: null }; + headItem = headItem.next; + pair.key = key; + pair.obj = obj; + + pair.next = pair; + if (pair) + { + pair.prev = pair; + } + pair = pair; + + keys[key] = pair; + dups[obj] ? dups[obj]++ : dups[obj] = 1; + + return true; + } + + /** + * Finds the value that is associated with the given key. + * + * @param key The key mapping a value. + * @return The data associated with the key or null if no matching + * entry was found. + */ + public function find(key:*):* + { + var pair:Object = keys[key]; + if (pair) + { + return pair.obj; + } + return null; + } + + /** + * Removes a value based on a given key. + * + * @param key The entry's key. + * @return The data associated with the key or null if no matching + * entry was found. + */ + public function remove(key:*):* + { + var pair:Object = keys[key]; + if (pair) + { + var obj:* = pair.obj; + + delete keys[key]; + + if (pair.prev) + { + pair.prev.next = pair.next; + } + if (pair.next) + { + pair.next.prev = pair.prev; + } + if (pair == pair) + { + pair = pair.next; + } + + pair.prev = null; + pair.next = null; + tailItem.next = pair; + tailItem = pair; + + if (--dups[obj] <= 0) + { + delete dups[obj]; + } + + if (--hashSize <= (maxSize - initSize)) + { + var k:int = (maxSize -= initSize) + 1; + for (var i:int = 0; i < k; i++) + { + headItem = headItem.next; + } + } + + return obj; + } + return null; + } + + /** + * Checks if a mapping exists for the given key. + * + * @return True if key exists, otherwise false. + */ + public function containsKey(key:*):Boolean + { + return keys[key] != undefined; + } + + /** + * Writes all keys into an array. + * + * @return An array containing all keys. + */ + public function getKeySet():Array + { + var a:Array = new Array(hashSize), i:int; + for each (var p:Object in keys) + { + a[i++] = p.key; + } + return a; + } + + /** + * @inheritDoc + */ + public function contains(obj:*):Boolean + { + return dups[obj] > 0; + } + + /** + * @inheritDoc + */ + public function clear():void + { + keys = new Dictionary(true); + dups = new Dictionary(true); + + var t:Object; + var n:Object = item; + while (n) + { + t = n.next; + + n.next = n.prev = null; + n.key = null; + n.obj = null; + tailItem.next = n; + tailItem = tailItem.next; + + n = t; + } + + item = null; + hashSize = 0; + } + + + /** + * @inheritDoc + */ + public function get size():int + { + return hashSize; + } + + /** + * @inheritDoc + */ + public function isEmpty():Boolean + { + return hashSize == 0; + } + + /** + * @inheritDoc + */ + public function toArray():Array + { + var a:Array = new Array(hashSize), i:int; + for each (var p:Object in keys) + { + a[i++] = p.obj; + } + return a; + } + + /** + * Prints out a string representing the current object. + * + * @return A string representing the current object. + */ + public function toString():String + { + return "[Hashtable, size=" + size + "]"; + } +} + +} diff --git a/src/com/esri/viewer/utils/LayerObjectUtil.as b/src/com/esri/viewer/utils/LayerObjectUtil.as index 0a2e6f2..51d6e63 100644 --- a/src/com/esri/viewer/utils/LayerObjectUtil.as +++ b/src/com/esri/viewer/utils/LayerObjectUtil.as @@ -1,277 +1,277 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2012 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package com.esri.viewer.utils -{ - -import com.esri.ags.clusterers.ESRIClusterer; -import com.esri.ags.layers.Layer; -import com.esri.ags.renderers.IRenderer; - -public class LayerObjectUtil -{ - public static function getLayerObject(obj:XML, num:Number, isOpLayer:Boolean, bingKey:String, layer:Layer = null, proxyUrl:String = null):Object - { - var label:String = isOpLayer ? 'OpLayer ' + num : 'Map ' + num; // default label - if (obj.@label[0]) // check that label attribute exist - { - label = obj.@label; // set basemap label if specified in configuration file - } - - var type:String; - if (!isOpLayer) - { - type = "tiled"; // default basemap type - } - if (obj.@type[0]) // check that type attribute exist - { - type = obj.@type; // set basemap type if specified in configuration file - } - - // wms - var wkid:String; - if (obj.@wkid[0]) - { - wkid = obj.@wkid; - } - - var visible:Boolean = obj.@visible == "true"; - - var alpha:Number = 1.0; - if (obj.@alpha[0]) - { - if (!isNaN(parseFloat(obj.@alpha))) - { - alpha = parseFloat(obj.@alpha); - } - } - - var maxAllowableOffset:Number; - if (obj.@maxallowableoffset[0]) - { - if (!isNaN(parseFloat(obj.@maxallowableoffset))) - { - maxAllowableOffset = parseFloat(obj.@maxallowableoffset); - } - } - - var minScale:Number; - if (obj.@minscale[0]) - { - if (!isNaN(parseFloat(obj.@minscale))) - { - minScale = parseFloat(obj.@minscale); - } - } - - var maxScale:Number; - if (obj.@maxscale[0]) - { - if (!isNaN(parseFloat(obj.@maxscale))) - { - maxScale = parseFloat(obj.@maxscale); - } - } - - var maxImageWidth:Number; - if (obj.@maximagewidth[0]) - { - if (!isNaN(parseInt(obj.@maximagewidth))) - { - maxImageWidth = parseInt(obj.@maximagewidth); - } - } - - var maxImageHeight:Number; - if (obj.@maximageheight[0]) - { - if (!isNaN(parseInt(obj.@maximageheight))) - { - maxImageHeight = parseInt(obj.@maximageheight); - } - } - - var noData:Number; - if (obj.@nodata[0]) - { - if (!isNaN(parseFloat(obj.@nodata))) - { - noData = parseFloat(obj.@nodata); - } - } - - var autoRefresh:Number = 0; - if (obj.@autorefresh[0]) - { - if (!isNaN(parseInt(obj.@autorefresh))) - { - autoRefresh = parseInt(obj.@autorefresh); - } - } - - var clustererParser:ClustererParser = new ClustererParser(); - var clusterer:ESRIClusterer = clustererParser.parseClusterer(obj.clustering[0]); - var rendererParser:RendererParser = new RendererParser(); - var renderer:IRenderer = rendererParser.parseRenderer(obj); - var useProxy:Boolean = obj.@useproxy[0] && obj.@useproxy == "true"; // default false - var useMapTime:Boolean = obj.@usemaptime[0] ? obj.@usemaptime == "true" : true; // default true - var useAMF:String = obj.@useamf[0] ? obj.@useamf : ""; - var token:String = obj.@token[0] ? obj.@token : ""; - var mode:String = obj.@mode[0] ? obj.@mode : ""; - var icon:String = isSupportedImageType(obj.@icon[0]) ? obj.@icon : 'assets/images/defaultBasemapIcon.png'; - var layerId:String = obj.@layerid[0]; - var imageFormat:String = obj.@imageformat; - var visibleLayers:String = obj.@visiblelayers; - var displayLevels:String = obj.@displaylevels; - var bandIds:String = obj.@bandids; - var skipGetCapabilities:String = obj.@skipgetcapabilities[0]; - var version:String = obj.@version[0]; - var url:String = obj.@url; - var serviceURL:String = obj.@serviceurl[0]; - var serviceMode:String = obj.@servicemode[0]; - var tileMatrixSetId:String = obj.@tilematrixsetid[0]; - var username:String = obj.@username; - var password:String = obj.@password; - var disableClientCaching:Boolean = obj.@disableclientcaching[0] && obj.@disableclientcaching == "true"; // default false - - // ve tiled layer or wmts layer - var style:String = obj.@style[0] ? obj.@style : ""; - var key:String; - if (bingKey) - { - key = bingKey; - } - else - { - key = obj.@key[0] ? obj.@key : ""; - } - var culture:String = obj.@culture[0] ? obj.@culture : ""; - - // arcims layer - var serviceHost:String = obj.@servicehost[0] ? obj.@servicehost : ""; - var serviceName:String = obj.@servicename[0] ? obj.@servicename : ""; - - // definitionExpression for featurelayer - var definitionExpression:String = obj.@definitionexpression[0] ? obj.@definitionexpression : ""; - var gdbVersion:String = obj.@gdbversion[0]; - // isEditable for feature layer - var isEditable:Boolean = true; - if (obj.@iseditable[0]) - { - isEditable = obj.iseditable == "true"; - } - - //sublayers - var subLayers:Array = []; - if (type == "tiled" || type == "dynamic") - { - var subLayersList:XMLList = obj.sublayer; - for (var i:int = 0; i < subLayersList.length(); i++) - { - subLayers.push({ id: String(subLayersList[i].@id), info: subLayersList[i].@info, infoConfig: subLayersList[i].@infoconfig, popUpConfig: subLayersList[i].@popupconfig, definitionExpression: String(subLayersList[i].@definitionexpression)}); - } - } - - //csv layer - var latitudeFieldName:String = obj.@latitudefieldname; - var longitudeFieldName:String = obj.@longitudefieldname; - var sourceFields:String = obj.@sourcefields; - var columnDelimiter:String = obj.@columndelimiter; - - var resultObject:Object = - { - id: String(num), - alpha: alpha, - bandIds: bandIds, - autoRefresh: autoRefresh, - columnDelimiter: columnDelimiter, - culture: culture, - clusterer: clusterer, - definitionExpression: definitionExpression, - disableClientCaching: disableClientCaching, - displayLevels: displayLevels, - gdbVersion: gdbVersion, - icon: icon, - imageFormat: imageFormat, - isEditable: isEditable, - key: key, - label: label, - layerId: layerId, - latitudeFieldName: latitudeFieldName, - longitudeFieldName: longitudeFieldName, - maxAllowableOffset: maxAllowableOffset, - maxImageHeight: maxImageHeight, - maxImageWidth: maxImageWidth, - minScale: minScale, - maxScale: maxScale, - mode: mode, - noData: noData, - password: password, - proxyUrl: proxyUrl, - renderer: renderer, - serviceHost: serviceHost, - serviceName: serviceName, - serviceMode: serviceMode, - serviceURL: serviceURL, - skipGetCapabilities: skipGetCapabilities, - sourceFields: sourceFields, - style: style, - subLayers: subLayers, - tileMatrixSetId: tileMatrixSetId, - token: token, - type: type, - url: url, - useAMF: useAMF, - useMapTime: useMapTime, - useProxy: useProxy, - username: username, - version: version, - visible: visible, - visibleLayers: visibleLayers, - wkid: wkid - }; - - // look for info, infoconfig and popupconfig on basemaps and operational layers - var opLayerInfo:String = obj.@info; - var opLayerInfoConfig:String = obj.@infoconfig; - var opLayerPopUpConfig:String = obj.@popupconfig; - resultObject.popUpConfig = opLayerPopUpConfig; - resultObject.infoConfig = opLayerInfoConfig; - resultObject.infoUrl = opLayerInfo; - resultObject.layer = layer; - if (!isOpLayer) - { - var reference:Boolean = obj.@reference[0] && obj.@reference == "true"; - resultObject.reference = reference; - } - - return resultObject; - } - - private static function isSupportedImageType(filePath:String):Boolean - { - var fp:String = filePath; - if (!fp) - { - return false; - } - var tokenIndex:int = fp.indexOf("?"); - var hasToken:Boolean = (tokenIndex > -1); - fp = hasToken ? fp.substr(0, tokenIndex) : fp; - var endsWithSupportedImageFileType:RegExp = /\.(png|gif|jpg)$/i; - return endsWithSupportedImageFileType.test(fp); - } -} -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2012 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package com.esri.viewer.utils +{ + +import com.esri.ags.clusterers.ESRIClusterer; +import com.esri.ags.layers.Layer; +import com.esri.ags.renderers.IRenderer; + +public class LayerObjectUtil +{ + public static function getLayerObject(obj:XML, num:Number, isOpLayer:Boolean, bingKey:String, layer:Layer = null, proxyUrl:String = null):Object + { + var label:String = isOpLayer ? 'OpLayer ' + num : 'Map ' + num; // default label + if (obj.@label[0]) // check that label attribute exist + { + label = obj.@label; // set basemap label if specified in configuration file + } + + var type:String; + if (!isOpLayer) + { + type = "tiled"; // default basemap type + } + if (obj.@type[0]) // check that type attribute exist + { + type = obj.@type; // set basemap type if specified in configuration file + } + + // wms + var wkid:String; + if (obj.@wkid[0]) + { + wkid = obj.@wkid; + } + + var visible:Boolean = obj.@visible == "true"; + + var alpha:Number = 1.0; + if (obj.@alpha[0]) + { + if (!isNaN(parseFloat(obj.@alpha))) + { + alpha = parseFloat(obj.@alpha); + } + } + + var maxAllowableOffset:Number; + if (obj.@maxallowableoffset[0]) + { + if (!isNaN(parseFloat(obj.@maxallowableoffset))) + { + maxAllowableOffset = parseFloat(obj.@maxallowableoffset); + } + } + + var minScale:Number; + if (obj.@minscale[0]) + { + if (!isNaN(parseFloat(obj.@minscale))) + { + minScale = parseFloat(obj.@minscale); + } + } + + var maxScale:Number; + if (obj.@maxscale[0]) + { + if (!isNaN(parseFloat(obj.@maxscale))) + { + maxScale = parseFloat(obj.@maxscale); + } + } + + var maxImageWidth:Number; + if (obj.@maximagewidth[0]) + { + if (!isNaN(parseInt(obj.@maximagewidth))) + { + maxImageWidth = parseInt(obj.@maximagewidth); + } + } + + var maxImageHeight:Number; + if (obj.@maximageheight[0]) + { + if (!isNaN(parseInt(obj.@maximageheight))) + { + maxImageHeight = parseInt(obj.@maximageheight); + } + } + + var noData:Number; + if (obj.@nodata[0]) + { + if (!isNaN(parseFloat(obj.@nodata))) + { + noData = parseFloat(obj.@nodata); + } + } + + var autoRefresh:Number = 0; + if (obj.@autorefresh[0]) + { + if (!isNaN(parseInt(obj.@autorefresh))) + { + autoRefresh = parseInt(obj.@autorefresh); + } + } + + var clustererParser:ClustererParser = new ClustererParser(); + var clusterer:ESRIClusterer = clustererParser.parseClusterer(obj.clustering[0]); + var rendererParser:RendererParser = new RendererParser(); + var renderer:IRenderer = rendererParser.parseRenderer(obj); + var useProxy:Boolean = obj.@useproxy[0] && obj.@useproxy == "true"; // default false + var useMapTime:Boolean = obj.@usemaptime[0] ? obj.@usemaptime == "true" : true; // default true + var useAMF:String = obj.@useamf[0] ? obj.@useamf : ""; + var token:String = obj.@token[0] ? obj.@token : ""; + var mode:String = obj.@mode[0] ? obj.@mode : ""; + var icon:String = isSupportedImageType(obj.@icon[0]) ? obj.@icon : 'assets/images/defaultBasemapIcon.png'; + var layerId:String = obj.@layerid[0]; + var imageFormat:String = obj.@imageformat; + var visibleLayers:String = obj.@visiblelayers; + var displayLevels:String = obj.@displaylevels; + var bandIds:String = obj.@bandids; + var skipGetCapabilities:String = obj.@skipgetcapabilities[0]; + var version:String = obj.@version[0]; + var url:String = obj.@url; + var serviceURL:String = obj.@serviceurl[0]; + var serviceMode:String = obj.@servicemode[0]; + var tileMatrixSetId:String = obj.@tilematrixsetid[0]; + var username:String = obj.@username; + var password:String = obj.@password; + var disableClientCaching:Boolean = obj.@disableclientcaching[0] && obj.@disableclientcaching == "true"; // default false + + // ve tiled layer or wmts layer + var style:String = obj.@style[0] ? obj.@style : ""; + var key:String; + if (bingKey) + { + key = bingKey; + } + else + { + key = obj.@key[0] ? obj.@key : ""; + } + var culture:String = obj.@culture[0] ? obj.@culture : ""; + + // arcims layer + var serviceHost:String = obj.@servicehost[0] ? obj.@servicehost : ""; + var serviceName:String = obj.@servicename[0] ? obj.@servicename : ""; + + // definitionExpression for featurelayer + var definitionExpression:String = obj.@definitionexpression[0] ? obj.@definitionexpression : ""; + var gdbVersion:String = obj.@gdbversion[0]; + // isEditable for feature layer + var isEditable:Boolean = true; + if (obj.@iseditable[0]) + { + isEditable = obj.iseditable == "true"; + } + + //sublayers + var subLayers:Array = []; + if (type == "tiled" || type == "dynamic") + { + var subLayersList:XMLList = obj.sublayer; + for (var i:int = 0; i < subLayersList.length(); i++) + { + subLayers.push({ id: String(subLayersList[i].@id), info: subLayersList[i].@info, infoConfig: subLayersList[i].@infoconfig, popUpConfig: subLayersList[i].@popupconfig, definitionExpression: String(subLayersList[i].@definitionexpression)}); + } + } + + //csv layer + var latitudeFieldName:String = obj.@latitudefieldname; + var longitudeFieldName:String = obj.@longitudefieldname; + var sourceFields:String = obj.@sourcefields; + var columnDelimiter:String = obj.@columndelimiter; + + var resultObject:Object = + { + id: String(num), + alpha: alpha, + bandIds: bandIds, + autoRefresh: autoRefresh, + columnDelimiter: columnDelimiter, + culture: culture, + clusterer: clusterer, + definitionExpression: definitionExpression, + disableClientCaching: disableClientCaching, + displayLevels: displayLevels, + gdbVersion: gdbVersion, + icon: icon, + imageFormat: imageFormat, + isEditable: isEditable, + key: key, + label: label, + layerId: layerId, + latitudeFieldName: latitudeFieldName, + longitudeFieldName: longitudeFieldName, + maxAllowableOffset: maxAllowableOffset, + maxImageHeight: maxImageHeight, + maxImageWidth: maxImageWidth, + minScale: minScale, + maxScale: maxScale, + mode: mode, + noData: noData, + password: password, + proxyUrl: proxyUrl, + renderer: renderer, + serviceHost: serviceHost, + serviceName: serviceName, + serviceMode: serviceMode, + serviceURL: serviceURL, + skipGetCapabilities: skipGetCapabilities, + sourceFields: sourceFields, + style: style, + subLayers: subLayers, + tileMatrixSetId: tileMatrixSetId, + token: token, + type: type, + url: url, + useAMF: useAMF, + useMapTime: useMapTime, + useProxy: useProxy, + username: username, + version: version, + visible: visible, + visibleLayers: visibleLayers, + wkid: wkid + }; + + // look for info, infoconfig and popupconfig on basemaps and operational layers + var opLayerInfo:String = obj.@info; + var opLayerInfoConfig:String = obj.@infoconfig; + var opLayerPopUpConfig:String = obj.@popupconfig; + resultObject.popUpConfig = opLayerPopUpConfig; + resultObject.infoConfig = opLayerInfoConfig; + resultObject.infoUrl = opLayerInfo; + resultObject.layer = layer; + if (!isOpLayer) + { + var reference:Boolean = obj.@reference[0] && obj.@reference == "true"; + resultObject.reference = reference; + } + + return resultObject; + } + + private static function isSupportedImageType(filePath:String):Boolean + { + var fp:String = filePath; + if (!fp) + { + return false; + } + var tokenIndex:int = fp.indexOf("?"); + var hasToken:Boolean = (tokenIndex > -1); + fp = hasToken ? fp.substr(0, tokenIndex) : fp; + var endsWithSupportedImageFileType:RegExp = /\.(png|gif|jpg)$/i; + return endsWithSupportedImageFileType.test(fp); + } +} +} diff --git a/src/com/esri/viewer/utils/Namespaces.as b/src/com/esri/viewer/utils/Namespaces.as index 81d16e2..8946d70 100644 --- a/src/com/esri/viewer/utils/Namespaces.as +++ b/src/com/esri/viewer/utils/Namespaces.as @@ -1,50 +1,50 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2010-2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package com.esri.viewer.utils -{ - -/** - * Namespaces... - * - * @private - */ -public class Namespaces -{ - public static const RDF_NS:Namespace = new Namespace("http://www.w3.org/1999/02/22-rdf-syntax-ns#"); - public static const DC_NS:Namespace = new Namespace("http://purl.org/dc/elements/1.1/"); - public static const SY_NS:Namespace = new Namespace("http://purl.org/rss/1.0/modules/syndication/"); - public static const CO_NS:Namespace = new Namespace("http://purl.org/rss/1.0/modules/company/"); - public static const TI_NS:Namespace = new Namespace("http://purl.org/rss/1.0/modules/textinput/"); - public static const RSS_NS:Namespace = new Namespace("http://purl.org/rss/1.0/"); - public static const ATOM_NS:Namespace = new Namespace("http://www.w3.org/2005/Atom"); - public static const ATOM_03_NS:Namespace = new Namespace("http://purl.org/atom/ns#"); - public static const XHTML_NS:Namespace = new Namespace("http://www.w3.org/1999/xhtml"); - public static const CONTENT_NS:Namespace = new Namespace("http://purl.org/rss/1.0/modules/content/"); - public static const GEORSS_NS:Namespace = new Namespace("http://www.georss.org/georss"); - public static const GEO_NS:Namespace = new Namespace("http://www.w3.org/2003/01/geo/"); - public static const GML_NS:Namespace = new Namespace("http://www.opengis.net/gml"); - public static const GEO_LL:Namespace = new Namespace("http://www.w3.org/2003/01/geo/wgs84_pos#"); - - public function Namespaces(singletonEnforcer:SingletonEnforcer) - { - } -} - -} - -class SingletonEnforcer -{ -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2010-2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package com.esri.viewer.utils +{ + +/** + * Namespaces... + * + * @private + */ +public class Namespaces +{ + public static const RDF_NS:Namespace = new Namespace("http://www.w3.org/1999/02/22-rdf-syntax-ns#"); + public static const DC_NS:Namespace = new Namespace("http://purl.org/dc/elements/1.1/"); + public static const SY_NS:Namespace = new Namespace("http://purl.org/rss/1.0/modules/syndication/"); + public static const CO_NS:Namespace = new Namespace("http://purl.org/rss/1.0/modules/company/"); + public static const TI_NS:Namespace = new Namespace("http://purl.org/rss/1.0/modules/textinput/"); + public static const RSS_NS:Namespace = new Namespace("http://purl.org/rss/1.0/"); + public static const ATOM_NS:Namespace = new Namespace("http://www.w3.org/2005/Atom"); + public static const ATOM_03_NS:Namespace = new Namespace("http://purl.org/atom/ns#"); + public static const XHTML_NS:Namespace = new Namespace("http://www.w3.org/1999/xhtml"); + public static const CONTENT_NS:Namespace = new Namespace("http://purl.org/rss/1.0/modules/content/"); + public static const GEORSS_NS:Namespace = new Namespace("http://www.georss.org/georss"); + public static const GEO_NS:Namespace = new Namespace("http://www.w3.org/2003/01/geo/"); + public static const GML_NS:Namespace = new Namespace("http://www.opengis.net/gml"); + public static const GEO_LL:Namespace = new Namespace("http://www.w3.org/2003/01/geo/wgs84_pos#"); + + public function Namespaces(singletonEnforcer:SingletonEnforcer) + { + } +} + +} + +class SingletonEnforcer +{ +} diff --git a/src/com/esri/viewer/utils/PopUpInfoParser.as b/src/com/esri/viewer/utils/PopUpInfoParser.as index c480d6b..226920a 100644 --- a/src/com/esri/viewer/utils/PopUpInfoParser.as +++ b/src/com/esri/viewer/utils/PopUpInfoParser.as @@ -1,170 +1,170 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package com.esri.viewer.utils -{ - -import com.esri.ags.portal.supportClasses.PopUpFieldFormat; -import com.esri.ags.portal.supportClasses.PopUpFieldInfo; -import com.esri.ags.portal.supportClasses.PopUpInfo; -import com.esri.ags.portal.supportClasses.PopUpMediaInfo; - -/** - * Helper class for parsing pop-up configuration XML file. - */ -public final class PopUpInfoParser -{ - public static function parsePopUpInfo(popUpXML:XML):PopUpInfo - { - var popUpInfo:PopUpInfo = new PopUpInfo(); - - if (popUpXML.title[0]) - { - popUpInfo.title = popUpXML.title; - } - - if (popUpXML.description[0]) - { - popUpInfo.description = popUpXML.description; - } - - if (popUpXML.fields[0]) - { - popUpInfo.popUpFieldInfos = parsePopUpFields(popUpXML.fields[0]); - } - - if (popUpXML.medias[0]) - { - popUpInfo.popUpMediaInfos = parsePopUpMedias(popUpXML.medias[0]); - } - - if (popUpXML.showattachments[0]) - { - popUpInfo.showAttachments = (popUpXML.showattachments == "true"); - } - - if (popUpXML.showrelatedrecords[0]) - { - popUpInfo.showRelatedRecords = (popUpXML.showrelatedrecords == "true"); - } - - if (popUpXML.showzoomtobutton[0]) - { - popUpInfo.showZoomToButton = (popUpXML.showzoomtobutton == "true"); - } - - return popUpInfo; - } - - public static function parsePopUpFields(fieldsXML:XML):Array - { - var fields:Array = []; - var field:PopUpFieldInfo; - - for each (var fieldXML:XML in fieldsXML.field) - { - field = new PopUpFieldInfo(); - field.label = fieldXML.@alias[0] || fieldXML.@label[0]; - field.fieldName = fieldXML.@name; - field.visible = fieldXML.@visible == "true"; - if (fieldXML.format[0]) - { - field.format = parsePopUpFieldFormat(fieldXML.format[0]); - } - - fields.push(field); - } - - return fields; - } - - public static function parsePopUpFieldFormat(formatXML:XML):PopUpFieldFormat - { - var popUpFieldFormat:PopUpFieldFormat = new PopUpFieldFormat(); - - if (formatXML.@dateformat[0]) - { - popUpFieldFormat.dateFormat = formatXML.@dateformat; - } - popUpFieldFormat.precision = formatXML.@precision[0] ? formatXML.@precision : -1; - popUpFieldFormat.useThousandsSeparator = (formatXML.@usethousandsseparator == "true"); - popUpFieldFormat.useUTC = (formatXML.@useutc == "true"); - - return popUpFieldFormat; - } - - public static function parsePopUpMedias(mediasXML:XML):Array - { - var medias:Array = []; - var media:PopUpMediaInfo; - - for each (var mediaXML:XML in mediasXML.media) - { - media = new PopUpMediaInfo(); - - media.caption = mediaXML.@caption; - if (mediaXML.@chartfields[0]) - { - media.chartFields = mediaXML.@chartfields.split(','); - } - media.chartNormalizationField = mediaXML.@chartnormalizationfield; - media.imageLinkURL = mediaXML.@imagelinkurl; - media.imageSourceURL = mediaXML.@imagesourceurl; - media.title = mediaXML.@title; - media.type = mapMediaType(mediaXML.@type); - - medias.push(media); - } - - return medias; - } - - private static function mapMediaType(type:String):String - { - var mediaType:String; - - switch (type) - { - case "image": - { - mediaType = PopUpMediaInfo.IMAGE; - break; - } - case "barchart": - { - mediaType = PopUpMediaInfo.BAR_CHART; - break; - } - case "columnchart": - { - mediaType = PopUpMediaInfo.COLUMN_CHART; - break; - } - case "linechart": - { - mediaType = PopUpMediaInfo.LINE_CHART; - break; - } - case "piechart": - { - mediaType = PopUpMediaInfo.PIE_CHART; - break; - } - } - - return mediaType; - } -} -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package com.esri.viewer.utils +{ + +import com.esri.ags.portal.supportClasses.PopUpFieldFormat; +import com.esri.ags.portal.supportClasses.PopUpFieldInfo; +import com.esri.ags.portal.supportClasses.PopUpInfo; +import com.esri.ags.portal.supportClasses.PopUpMediaInfo; + +/** + * Helper class for parsing pop-up configuration XML file. + */ +public final class PopUpInfoParser +{ + public static function parsePopUpInfo(popUpXML:XML):PopUpInfo + { + var popUpInfo:PopUpInfo = new PopUpInfo(); + + if (popUpXML.title[0]) + { + popUpInfo.title = popUpXML.title; + } + + if (popUpXML.description[0]) + { + popUpInfo.description = popUpXML.description; + } + + if (popUpXML.fields[0]) + { + popUpInfo.popUpFieldInfos = parsePopUpFields(popUpXML.fields[0]); + } + + if (popUpXML.medias[0]) + { + popUpInfo.popUpMediaInfos = parsePopUpMedias(popUpXML.medias[0]); + } + + if (popUpXML.showattachments[0]) + { + popUpInfo.showAttachments = (popUpXML.showattachments == "true"); + } + + if (popUpXML.showrelatedrecords[0]) + { + popUpInfo.showRelatedRecords = (popUpXML.showrelatedrecords == "true"); + } + + if (popUpXML.showzoomtobutton[0]) + { + popUpInfo.showZoomToButton = (popUpXML.showzoomtobutton == "true"); + } + + return popUpInfo; + } + + public static function parsePopUpFields(fieldsXML:XML):Array + { + var fields:Array = []; + var field:PopUpFieldInfo; + + for each (var fieldXML:XML in fieldsXML.field) + { + field = new PopUpFieldInfo(); + field.label = fieldXML.@alias[0] || fieldXML.@label[0]; + field.fieldName = fieldXML.@name; + field.visible = fieldXML.@visible == "true"; + if (fieldXML.format[0]) + { + field.format = parsePopUpFieldFormat(fieldXML.format[0]); + } + + fields.push(field); + } + + return fields; + } + + public static function parsePopUpFieldFormat(formatXML:XML):PopUpFieldFormat + { + var popUpFieldFormat:PopUpFieldFormat = new PopUpFieldFormat(); + + if (formatXML.@dateformat[0]) + { + popUpFieldFormat.dateFormat = formatXML.@dateformat; + } + popUpFieldFormat.precision = formatXML.@precision[0] ? formatXML.@precision : -1; + popUpFieldFormat.useThousandsSeparator = (formatXML.@usethousandsseparator == "true"); + popUpFieldFormat.useUTC = (formatXML.@useutc == "true"); + + return popUpFieldFormat; + } + + public static function parsePopUpMedias(mediasXML:XML):Array + { + var medias:Array = []; + var media:PopUpMediaInfo; + + for each (var mediaXML:XML in mediasXML.media) + { + media = new PopUpMediaInfo(); + + media.caption = mediaXML.@caption; + if (mediaXML.@chartfields[0]) + { + media.chartFields = mediaXML.@chartfields.split(','); + } + media.chartNormalizationField = mediaXML.@chartnormalizationfield; + media.imageLinkURL = mediaXML.@imagelinkurl; + media.imageSourceURL = mediaXML.@imagesourceurl; + media.title = mediaXML.@title; + media.type = mapMediaType(mediaXML.@type); + + medias.push(media); + } + + return medias; + } + + private static function mapMediaType(type:String):String + { + var mediaType:String; + + switch (type) + { + case "image": + { + mediaType = PopUpMediaInfo.IMAGE; + break; + } + case "barchart": + { + mediaType = PopUpMediaInfo.BAR_CHART; + break; + } + case "columnchart": + { + mediaType = PopUpMediaInfo.COLUMN_CHART; + break; + } + case "linechart": + { + mediaType = PopUpMediaInfo.LINE_CHART; + break; + } + case "piechart": + { + mediaType = PopUpMediaInfo.PIE_CHART; + break; + } + } + + return mediaType; + } +} +} diff --git a/src/com/esri/viewer/utils/PortalBasemapAppender.as b/src/com/esri/viewer/utils/PortalBasemapAppender.as index 516b59c..8e0ffee 100644 --- a/src/com/esri/viewer/utils/PortalBasemapAppender.as +++ b/src/com/esri/viewer/utils/PortalBasemapAppender.as @@ -1,438 +1,438 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2010-2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package com.esri.viewer.utils -{ - -import com.esri.ags.components.IdentityManager; -import com.esri.ags.events.PortalEvent; -import com.esri.ags.portal.Portal; -import com.esri.ags.portal.supportClasses.PortalGroup; -import com.esri.ags.portal.supportClasses.PortalItem; -import com.esri.ags.portal.supportClasses.PortalQueryParameters; -import com.esri.ags.portal.supportClasses.PortalQueryResult; -import com.esri.viewer.AppEvent; -import com.esri.viewer.ConfigData; - -import flash.events.Event; -import flash.events.EventDispatcher; -import flash.utils.Dictionary; - -import mx.resources.ResourceManager; -import mx.rpc.AsyncResponder; -import mx.rpc.Fault; -import mx.rpc.events.FaultEvent; -import mx.utils.ObjectUtil; - -public class PortalBasemapAppender extends EventDispatcher -{ - private const PORTAL_BASEMAP_APPENDER:String = "PortalBasemapAppender"; - - private var configData:ConfigData; - private var portalURL:String; - - private var portalItemOrder:Array; - private var portalItemToLabel:Dictionary; - private var processedArcGISBasemaps:Array; - private var totalBasemaps:int; - private var totalPossibleArcGISBasemaps:int; - - private var comparableDefaultBasemapObjects:Array; - private var defaultBasemapTitle:String; - - private var cultureCode:String; - - public function PortalBasemapAppender(portalURL:String, configData:ConfigData) - { - this.portalURL = portalURL; - this.configData = configData; - } - - public function fetchAndAppendPortalBasemaps():void - { - const idMgrEnabled:Boolean = IdentityManager.instance.enabled; - var portal:Portal = new Portal(); - // the Portal constructor enables the IdentityManager so restore it back to what it was - IdentityManager.instance.enabled = idMgrEnabled; - - portal.addEventListener(PortalEvent.LOAD, portal_loadHandler); - portal.addEventListener(FaultEvent.FAULT, portal_faultHandler); - - cultureCode = toCultureCode(ResourceManager.getInstance().localeChain[0]); - portal.load(portalURL, cultureCode); - } - - protected function portal_loadHandler(event:PortalEvent):void - { - var portal:Portal = event.target as Portal; - portal.removeEventListener(PortalEvent.LOAD, portal_loadHandler); - portal.removeEventListener(FaultEvent.FAULT, portal_faultHandler); - - comparableDefaultBasemapObjects = getComparableBasemapObjects(portal.info.defaultBasemap); - var queryParams:PortalQueryParameters = PortalQueryParameters.forQuery(portal.info.basemapGalleryGroupQuery); - portal.queryGroups(queryParams, new AsyncResponder(portal_queryGroupsResultHandler, portal_queryGroupsFaultHandler, portal)); - } - - protected function portal_queryGroupsResultHandler(queryResult:PortalQueryResult, portal:Portal):void - { - if (queryResult.results.length > 0) - { - var portalGroup:PortalGroup = queryResult.results[0]; - var queryParams:PortalQueryParameters = PortalQueryParameters.forItemsInGroup(portalGroup.id).withLimit(50).withSortField("name"); - portal.queryItems(queryParams, new AsyncResponder(portal_queryItemsResultHandler, portal_queryItemsFaultHandler)); - } - else - { - dispatchComplete(); - } - } - - private function portal_queryItemsResultHandler(queryResult:PortalQueryResult, token:Object = null):void - { - const resultItems:Array = queryResult.results; - totalPossibleArcGISBasemaps = resultItems.length; - portalItemOrder = []; - portalItemToLabel = new Dictionary(true); - processedArcGISBasemaps = []; - totalBasemaps = configData.basemaps.length; - var portalItem:PortalItem; - for (var i:uint = 0; i < totalPossibleArcGISBasemaps; i++) - { - portalItem = resultItems[i]; - portalItemOrder.push(portalItem); - portalItem.getJSONData(new AsyncResponder(portalItem_getJSONDataResultHandler, - portalItem_getJSONDataFaultHandler, - portalItem)); - } - } - - private function portalItem_getJSONDataResultHandler(itemData:Object, item:PortalItem):void - { - createBasemapLayerObject(itemData, item); - if (isDefaultBasemap(itemData.baseMap)) - { - defaultBasemapTitle = itemData.baseMap.title; - } - updateTotalArcGISBasemaps(); - } - - private function createBasemapLayerObject(itemData:Object, item:PortalItem):void - { - if (!itemData) - { - return; - } - - var basemapObject:Object = itemData.baseMap; - var basemapLayerObjects:Array = basemapObject.baseMapLayers; - if (!(basemapObject && basemapLayerObjects)) - { - return; - } - - var title:String = basemapObject.title; - var iconURL:String = item.thumbnailURL; - var existingBasemapLayerObject:Object = findBasemapLayerObjectById(title); - if (existingBasemapLayerObject) - { - existingBasemapLayerObject.icon = iconURL; - return; - } - - portalItemToLabel[item] = title; - var basemapLayerObject:Object = basemapLayerObjects[0]; - addBasemapLayerObject(baseMapLayerObjectToLayerXML(title, - basemapLayerObject, - iconURL)); - - var totalBaseMapLayers:int = basemapLayerObjects.length; - if (totalBaseMapLayers > 1) - { - basemapLayerObject = basemapLayerObjects[1]; - addBasemapLayerObject(baseMapLayerObjectToLayerXML(title, - basemapLayerObject, - iconURL)); - } - } - - private function isDefaultBasemap(basemapObject:Object):Boolean - { - var comparableBasemapObjects:Array = getComparableBasemapObjects(basemapObject); - - return (ObjectUtil.compare(comparableBasemapObjects, comparableDefaultBasemapObjects) == 0); - } - - private function getComparableBasemapObjects(basemapObject:Object):Array - { - var basemapLayerObjects:Array = basemapObject.baseMapLayers; - var comparableBasemapObjects:Array = []; - var comparableBasemapLayerObject:Object; - - for each (var basemapLayerObject:Object in basemapLayerObjects) - { - comparableBasemapLayerObject = {}; - - if (basemapLayerObject.url) - { - comparableBasemapLayerObject.url = basemapLayerObject.url; - } - if (basemapLayerObject.type) - { - comparableBasemapLayerObject.type = basemapLayerObject.type; - } - - comparableBasemapObjects.push(comparableBasemapLayerObject); - } - - return comparableBasemapObjects; - } - - private function findBasemapLayerObjectById(id:String):Object - { - var layerObjectResult:Object; - - var basemapLayerObjects:Array = configData.basemaps; - for each (var layerObject:Object in basemapLayerObjects) - { - if (layerObject.layer && (layerObject.layer.id == id)) - { - layerObjectResult = layerObject; - break; - } - } - - return layerObjectResult; - } - - private function updateTotalArcGISBasemaps():void - { - totalPossibleArcGISBasemaps--; - if (totalPossibleArcGISBasemaps == 0) - { - addArcGISBasemapsToConfig(); - dispatchComplete(); - } - } - - private function dispatchComplete():void - { - dispatchEvent(new Event(Event.COMPLETE)); - } - - private function addArcGISBasemapsToConfig():void - { - var hasBasemaps:Boolean = (configData.basemaps.length > 0); - - if (!hasBasemaps) - { - if (defaultBasemapTitle) - { - setDefaultBasemapVisible(); - } - else - { - setFirstBasemapVisible(); - } - } - - addBasemapsInOrder(); - } - - private function setDefaultBasemapVisible():void - { - for each (var layerObject:Object in processedArcGISBasemaps) - { - if (defaultBasemapTitle == layerObject.label) - { - layerObject.visible = true; - } - } - } - - private function setFirstBasemapVisible():void - { - if (!portalItemOrder || portalItemOrder.length == 0) - { - return; - } - - var firstBasemapLabel:String = portalItemToLabel[portalItemOrder[0]]; - for each (var layerObject:Object in processedArcGISBasemaps) - { - if (layerObject.label == firstBasemapLabel) - { - layerObject.visible = true; - } - } - } - - private function addBasemapsInOrder():void - { - for each (var portalItem:PortalItem in portalItemOrder) - { - for each (var layerObject:Object in processedArcGISBasemaps) - { - if (layerObject.label == portalItemToLabel[portalItem]) - { - configData.basemaps.push(layerObject); - } - } - } - } - - private function addBasemapLayerObject(layerXML:XML):void - { - if (layerXML) - { - processedArcGISBasemaps.push(LayerObjectUtil.getLayerObject(layerXML, - totalBasemaps++, - false, - configData.bingKey)); - } - } - - private function baseMapLayerObjectToLayerXML(title:String, basemapLayerObject:Object, iconURL:String = null):XML - { - var layerXML:XML; - const url:String = basemapLayerObject.url; - const type:String = basemapLayerObject.type; - - if (url) - { - layerXML = createTiledLayerXML(title, iconURL, url, basemapLayerObject, false); - } - else if (isAllowedType(type)) - { - layerXML = createNonEsriLayerXML(title, iconURL, basemapLayerObject, false, type); - } - - return layerXML; - } - - private function createTiledLayerXML(title:String, iconURL:String, url:String, basemapLayerObject:Object, visible:Boolean):XML - { - var layerXML:XML = ; - - return layerXML; - } - - private function isAllowedType(type:String):Boolean - { - return type == "OpenStreetMap" || - (isBingBasemap(type) && hasBingKey()); - } - - private function createNonEsriLayerXML(title:String, iconURL:String, basemapLayerObject:Object, visible:Boolean, type:String):XML - { - var layerXML:XML = ; - - if (isBingBasemap(type)) - { - layerXML.@style = mapBingStyleFromBasemapType(type); - layerXML.@culture = cultureCode; - } - - return layerXML; - } - - private function toViewerNonEsriLayerType(type:String):String - { - var viewerType:String; - if (type == "OpenStreetMap") - { - viewerType = "osm"; - } - else if (isBingBasemap(type)) - { - viewerType = "bing"; - } - - return viewerType; - } - - private function isBingBasemap(type:String):Boolean - { - return type && type.indexOf('BingMaps') > -1; - } - - private function hasBingKey():Boolean - { - var bingKey:String = configData.bingKey; - return (bingKey != null && bingKey.length > 0); - } - - private function mapBingStyleFromBasemapType(type:String):String - { - if (type == 'BingMapsAerial') - { - return 'aerial'; - } - else if (type == 'BingMapsHybrid') - { - return 'aerialWithLabels'; - } - else - { - //default - BingMapsRoad - return 'road'; - } - } - - private function portalItem_getJSONDataFaultHandler(fault:Fault, token:Object = null):void - { - AppEvent.dispatch(AppEvent.APP_ERROR, - LocalizationUtil.getDefaultString("couldNotFetchBasemapData", - fault.faultString)); - updateTotalArcGISBasemaps(); - } - - private function portal_queryGroupsFaultHandler(fault:Fault, token:Object = null):void - { - AppEvent.showError(LocalizationUtil.getDefaultString("couldNotQueryPortal"), PORTAL_BASEMAP_APPENDER); - dispatchComplete(); - } - - private function portal_queryItemsFaultHandler(fault:Fault, token:Object = null):void - { - AppEvent.showError(LocalizationUtil.getDefaultString("couldNotQueryPortalItems"), PORTAL_BASEMAP_APPENDER); - dispatchComplete(); - } - - private function portal_faultHandler(event:FaultEvent):void - { - var portal:Portal = event.target as Portal; - portal.removeEventListener(PortalEvent.LOAD, portal_loadHandler); - portal.removeEventListener(FaultEvent.FAULT, portal_faultHandler); - - AppEvent.showError(LocalizationUtil.getDefaultString("couldNotConnectToPortal"), PORTAL_BASEMAP_APPENDER); - dispatchComplete(); - } - - private function toCultureCode(locale:String):String - { - return locale ? locale.replace('_', '-') : locale; - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2010-2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package com.esri.viewer.utils +{ + +import com.esri.ags.components.IdentityManager; +import com.esri.ags.events.PortalEvent; +import com.esri.ags.portal.Portal; +import com.esri.ags.portal.supportClasses.PortalGroup; +import com.esri.ags.portal.supportClasses.PortalItem; +import com.esri.ags.portal.supportClasses.PortalQueryParameters; +import com.esri.ags.portal.supportClasses.PortalQueryResult; +import com.esri.viewer.AppEvent; +import com.esri.viewer.ConfigData; + +import flash.events.Event; +import flash.events.EventDispatcher; +import flash.utils.Dictionary; + +import mx.resources.ResourceManager; +import mx.rpc.AsyncResponder; +import mx.rpc.Fault; +import mx.rpc.events.FaultEvent; +import mx.utils.ObjectUtil; + +public class PortalBasemapAppender extends EventDispatcher +{ + private const PORTAL_BASEMAP_APPENDER:String = "PortalBasemapAppender"; + + private var configData:ConfigData; + private var portalURL:String; + + private var portalItemOrder:Array; + private var portalItemToLabel:Dictionary; + private var processedArcGISBasemaps:Array; + private var totalBasemaps:int; + private var totalPossibleArcGISBasemaps:int; + + private var comparableDefaultBasemapObjects:Array; + private var defaultBasemapTitle:String; + + private var cultureCode:String; + + public function PortalBasemapAppender(portalURL:String, configData:ConfigData) + { + this.portalURL = portalURL; + this.configData = configData; + } + + public function fetchAndAppendPortalBasemaps():void + { + const idMgrEnabled:Boolean = IdentityManager.instance.enabled; + var portal:Portal = new Portal(); + // the Portal constructor enables the IdentityManager so restore it back to what it was + IdentityManager.instance.enabled = idMgrEnabled; + + portal.addEventListener(PortalEvent.LOAD, portal_loadHandler); + portal.addEventListener(FaultEvent.FAULT, portal_faultHandler); + + cultureCode = toCultureCode(ResourceManager.getInstance().localeChain[0]); + portal.load(portalURL, cultureCode); + } + + protected function portal_loadHandler(event:PortalEvent):void + { + var portal:Portal = event.target as Portal; + portal.removeEventListener(PortalEvent.LOAD, portal_loadHandler); + portal.removeEventListener(FaultEvent.FAULT, portal_faultHandler); + + comparableDefaultBasemapObjects = getComparableBasemapObjects(portal.info.defaultBasemap); + var queryParams:PortalQueryParameters = PortalQueryParameters.forQuery(portal.info.basemapGalleryGroupQuery); + portal.queryGroups(queryParams, new AsyncResponder(portal_queryGroupsResultHandler, portal_queryGroupsFaultHandler, portal)); + } + + protected function portal_queryGroupsResultHandler(queryResult:PortalQueryResult, portal:Portal):void + { + if (queryResult.results.length > 0) + { + var portalGroup:PortalGroup = queryResult.results[0]; + var queryParams:PortalQueryParameters = PortalQueryParameters.forItemsInGroup(portalGroup.id).withLimit(50).withSortField("name"); + portal.queryItems(queryParams, new AsyncResponder(portal_queryItemsResultHandler, portal_queryItemsFaultHandler)); + } + else + { + dispatchComplete(); + } + } + + private function portal_queryItemsResultHandler(queryResult:PortalQueryResult, token:Object = null):void + { + const resultItems:Array = queryResult.results; + totalPossibleArcGISBasemaps = resultItems.length; + portalItemOrder = []; + portalItemToLabel = new Dictionary(true); + processedArcGISBasemaps = []; + totalBasemaps = configData.basemaps.length; + var portalItem:PortalItem; + for (var i:uint = 0; i < totalPossibleArcGISBasemaps; i++) + { + portalItem = resultItems[i]; + portalItemOrder.push(portalItem); + portalItem.getJSONData(new AsyncResponder(portalItem_getJSONDataResultHandler, + portalItem_getJSONDataFaultHandler, + portalItem)); + } + } + + private function portalItem_getJSONDataResultHandler(itemData:Object, item:PortalItem):void + { + createBasemapLayerObject(itemData, item); + if (isDefaultBasemap(itemData.baseMap)) + { + defaultBasemapTitle = itemData.baseMap.title; + } + updateTotalArcGISBasemaps(); + } + + private function createBasemapLayerObject(itemData:Object, item:PortalItem):void + { + if (!itemData) + { + return; + } + + var basemapObject:Object = itemData.baseMap; + var basemapLayerObjects:Array = basemapObject.baseMapLayers; + if (!(basemapObject && basemapLayerObjects)) + { + return; + } + + var title:String = basemapObject.title; + var iconURL:String = item.thumbnailURL; + var existingBasemapLayerObject:Object = findBasemapLayerObjectById(title); + if (existingBasemapLayerObject) + { + existingBasemapLayerObject.icon = iconURL; + return; + } + + portalItemToLabel[item] = title; + var basemapLayerObject:Object = basemapLayerObjects[0]; + addBasemapLayerObject(baseMapLayerObjectToLayerXML(title, + basemapLayerObject, + iconURL)); + + var totalBaseMapLayers:int = basemapLayerObjects.length; + if (totalBaseMapLayers > 1) + { + basemapLayerObject = basemapLayerObjects[1]; + addBasemapLayerObject(baseMapLayerObjectToLayerXML(title, + basemapLayerObject, + iconURL)); + } + } + + private function isDefaultBasemap(basemapObject:Object):Boolean + { + var comparableBasemapObjects:Array = getComparableBasemapObjects(basemapObject); + + return (ObjectUtil.compare(comparableBasemapObjects, comparableDefaultBasemapObjects) == 0); + } + + private function getComparableBasemapObjects(basemapObject:Object):Array + { + var basemapLayerObjects:Array = basemapObject.baseMapLayers; + var comparableBasemapObjects:Array = []; + var comparableBasemapLayerObject:Object; + + for each (var basemapLayerObject:Object in basemapLayerObjects) + { + comparableBasemapLayerObject = {}; + + if (basemapLayerObject.url) + { + comparableBasemapLayerObject.url = basemapLayerObject.url; + } + if (basemapLayerObject.type) + { + comparableBasemapLayerObject.type = basemapLayerObject.type; + } + + comparableBasemapObjects.push(comparableBasemapLayerObject); + } + + return comparableBasemapObjects; + } + + private function findBasemapLayerObjectById(id:String):Object + { + var layerObjectResult:Object; + + var basemapLayerObjects:Array = configData.basemaps; + for each (var layerObject:Object in basemapLayerObjects) + { + if (layerObject.layer && (layerObject.layer.id == id)) + { + layerObjectResult = layerObject; + break; + } + } + + return layerObjectResult; + } + + private function updateTotalArcGISBasemaps():void + { + totalPossibleArcGISBasemaps--; + if (totalPossibleArcGISBasemaps == 0) + { + addArcGISBasemapsToConfig(); + dispatchComplete(); + } + } + + private function dispatchComplete():void + { + dispatchEvent(new Event(Event.COMPLETE)); + } + + private function addArcGISBasemapsToConfig():void + { + var hasBasemaps:Boolean = (configData.basemaps.length > 0); + + if (!hasBasemaps) + { + if (defaultBasemapTitle) + { + setDefaultBasemapVisible(); + } + else + { + setFirstBasemapVisible(); + } + } + + addBasemapsInOrder(); + } + + private function setDefaultBasemapVisible():void + { + for each (var layerObject:Object in processedArcGISBasemaps) + { + if (defaultBasemapTitle == layerObject.label) + { + layerObject.visible = true; + } + } + } + + private function setFirstBasemapVisible():void + { + if (!portalItemOrder || portalItemOrder.length == 0) + { + return; + } + + var firstBasemapLabel:String = portalItemToLabel[portalItemOrder[0]]; + for each (var layerObject:Object in processedArcGISBasemaps) + { + if (layerObject.label == firstBasemapLabel) + { + layerObject.visible = true; + } + } + } + + private function addBasemapsInOrder():void + { + for each (var portalItem:PortalItem in portalItemOrder) + { + for each (var layerObject:Object in processedArcGISBasemaps) + { + if (layerObject.label == portalItemToLabel[portalItem]) + { + configData.basemaps.push(layerObject); + } + } + } + } + + private function addBasemapLayerObject(layerXML:XML):void + { + if (layerXML) + { + processedArcGISBasemaps.push(LayerObjectUtil.getLayerObject(layerXML, + totalBasemaps++, + false, + configData.bingKey)); + } + } + + private function baseMapLayerObjectToLayerXML(title:String, basemapLayerObject:Object, iconURL:String = null):XML + { + var layerXML:XML; + const url:String = basemapLayerObject.url; + const type:String = basemapLayerObject.type; + + if (url) + { + layerXML = createTiledLayerXML(title, iconURL, url, basemapLayerObject, false); + } + else if (isAllowedType(type)) + { + layerXML = createNonEsriLayerXML(title, iconURL, basemapLayerObject, false, type); + } + + return layerXML; + } + + private function createTiledLayerXML(title:String, iconURL:String, url:String, basemapLayerObject:Object, visible:Boolean):XML + { + var layerXML:XML = ; + + return layerXML; + } + + private function isAllowedType(type:String):Boolean + { + return type == "OpenStreetMap" || + (isBingBasemap(type) && hasBingKey()); + } + + private function createNonEsriLayerXML(title:String, iconURL:String, basemapLayerObject:Object, visible:Boolean, type:String):XML + { + var layerXML:XML = ; + + if (isBingBasemap(type)) + { + layerXML.@style = mapBingStyleFromBasemapType(type); + layerXML.@culture = cultureCode; + } + + return layerXML; + } + + private function toViewerNonEsriLayerType(type:String):String + { + var viewerType:String; + if (type == "OpenStreetMap") + { + viewerType = "osm"; + } + else if (isBingBasemap(type)) + { + viewerType = "bing"; + } + + return viewerType; + } + + private function isBingBasemap(type:String):Boolean + { + return type && type.indexOf('BingMaps') > -1; + } + + private function hasBingKey():Boolean + { + var bingKey:String = configData.bingKey; + return (bingKey != null && bingKey.length > 0); + } + + private function mapBingStyleFromBasemapType(type:String):String + { + if (type == 'BingMapsAerial') + { + return 'aerial'; + } + else if (type == 'BingMapsHybrid') + { + return 'aerialWithLabels'; + } + else + { + //default - BingMapsRoad + return 'road'; + } + } + + private function portalItem_getJSONDataFaultHandler(fault:Fault, token:Object = null):void + { + AppEvent.dispatch(AppEvent.APP_ERROR, + LocalizationUtil.getDefaultString("couldNotFetchBasemapData", + fault.faultString)); + updateTotalArcGISBasemaps(); + } + + private function portal_queryGroupsFaultHandler(fault:Fault, token:Object = null):void + { + AppEvent.showError(LocalizationUtil.getDefaultString("couldNotQueryPortal"), PORTAL_BASEMAP_APPENDER); + dispatchComplete(); + } + + private function portal_queryItemsFaultHandler(fault:Fault, token:Object = null):void + { + AppEvent.showError(LocalizationUtil.getDefaultString("couldNotQueryPortalItems"), PORTAL_BASEMAP_APPENDER); + dispatchComplete(); + } + + private function portal_faultHandler(event:FaultEvent):void + { + var portal:Portal = event.target as Portal; + portal.removeEventListener(PortalEvent.LOAD, portal_loadHandler); + portal.removeEventListener(FaultEvent.FAULT, portal_faultHandler); + + AppEvent.showError(LocalizationUtil.getDefaultString("couldNotConnectToPortal"), PORTAL_BASEMAP_APPENDER); + dispatchComplete(); + } + + private function toCultureCode(locale:String):String + { + return locale ? locale.replace('_', '-') : locale; + } +} + +} diff --git a/src/config-all.xml b/src/config-all.xml index 2ec55de..ee1de34 100644 --- a/src/config-all.xml +++ b/src/config-all.xml @@ -1,132 +1,132 @@ - - - - ArcGIS Viewer for Flex - a configurable web mapping application - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + ArcGIS Viewer for Flex + a configurable web mapping application + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/config.xml b/src/config.xml index 2efee49..f92c44b 100644 --- a/src/config.xml +++ b/src/config.xml @@ -1,77 +1,77 @@ - - - - ArcGIS Viewer for Flex - a configurable web mapping application - assets/images/logo.png - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + ArcGIS Viewer for Flex + a configurable web mapping application + assets/images/logo.png + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/defaults.css b/src/defaults.css index 22c916a..a6a1c8d 100644 --- a/src/defaults.css +++ b/src/defaults.css @@ -1,55 +1,55 @@ -/* CSS file - Standard Stylesheet */ -@namespace s "library://ns.adobe.com/flex/spark"; -@namespace mx "library://ns.adobe.com/flex/mx"; -@namespace esri "http://www.esri.com/2008/ags"; -@namespace viewer "com.esri.viewer.*"; -@namespace viewerComps "com.esri.viewer.components.*"; -@namespace apiComps "com.esri.ags.components.*"; - -viewer|WidgetTemplate -{ - skinClass: ClassReference("com.esri.viewer.skins.WidgetTemplateSkin"); -} - -viewerComps|TitlebarButton -{ - skinClass: ClassReference("com.esri.viewer.skins.TitlebarButtonSkin"); -} - -s|VScrollBar -{ - skinClass: ClassReference("com.esri.viewer.skins.VScrollBarSkin"); -} - -mx|VScrollBar -{ - downArrowUpSkin: Embed(source="assets/images/arrow_down.png"); - downArrowOverSkin: Embed(source="assets/images/arrow_down.png"); - downArrowDownSkin: Embed(source="assets/images/arrow_down.png"); - upArrowUpSkin: Embed(source="assets/images/arrow_up.png"); - upArrowOverSkin: Embed(source="assets/images/arrow_up.png"); - upArrowDownSkin: Embed(source="assets/images/arrow_up.png"); - thumbDownSkin: Embed(source="assets/images/thumb.png"); - thumbUpSkin: Embed(source="assets/images/thumb.png"); - thumbOverSkin: Embed(source="assets/images/thumb.png"); - trackSkin: Embed(source="assets/images/track.png"); -} - -s|HScrollBar -{ - skinClass: ClassReference("com.esri.viewer.skins.HScrollBarSkin"); -} - -mx|HScrollBar -{ - downArrowUpSkin: Embed(source="assets/images/arrow_down.png"); - downArrowOverSkin: Embed(source="assets/images/arrow_down.png"); - downArrowDownSkin: Embed(source="assets/images/arrow_down.png"); - upArrowUpSkin: Embed(source="assets/images/arrow_up.png"); - upArrowOverSkin: Embed(source="assets/images/arrow_up.png"); - upArrowDownSkin: Embed(source="assets/images/arrow_up.png"); - thumbDownSkin: Embed(source="assets/images/thumb.png"); - thumbUpSkin: Embed(source="assets/images/thumb.png"); - thumbOverSkin: Embed(source="assets/images/thumb.png"); - trackSkin: Embed(source="assets/images/track.png"); -} +/* CSS file - Standard Stylesheet */ +@namespace s "library://ns.adobe.com/flex/spark"; +@namespace mx "library://ns.adobe.com/flex/mx"; +@namespace esri "http://www.esri.com/2008/ags"; +@namespace viewer "com.esri.viewer.*"; +@namespace viewerComps "com.esri.viewer.components.*"; +@namespace apiComps "com.esri.ags.components.*"; + +viewer|WidgetTemplate +{ + skinClass: ClassReference("com.esri.viewer.skins.WidgetTemplateSkin"); +} + +viewerComps|TitlebarButton +{ + skinClass: ClassReference("com.esri.viewer.skins.TitlebarButtonSkin"); +} + +s|VScrollBar +{ + skinClass: ClassReference("com.esri.viewer.skins.VScrollBarSkin"); +} + +mx|VScrollBar +{ + downArrowUpSkin: Embed(source="assets/images/arrow_down.png"); + downArrowOverSkin: Embed(source="assets/images/arrow_down.png"); + downArrowDownSkin: Embed(source="assets/images/arrow_down.png"); + upArrowUpSkin: Embed(source="assets/images/arrow_up.png"); + upArrowOverSkin: Embed(source="assets/images/arrow_up.png"); + upArrowDownSkin: Embed(source="assets/images/arrow_up.png"); + thumbDownSkin: Embed(source="assets/images/thumb.png"); + thumbUpSkin: Embed(source="assets/images/thumb.png"); + thumbOverSkin: Embed(source="assets/images/thumb.png"); + trackSkin: Embed(source="assets/images/track.png"); +} + +s|HScrollBar +{ + skinClass: ClassReference("com.esri.viewer.skins.HScrollBarSkin"); +} + +mx|HScrollBar +{ + downArrowUpSkin: Embed(source="assets/images/arrow_down.png"); + downArrowOverSkin: Embed(source="assets/images/arrow_down.png"); + downArrowDownSkin: Embed(source="assets/images/arrow_down.png"); + upArrowUpSkin: Embed(source="assets/images/arrow_up.png"); + upArrowOverSkin: Embed(source="assets/images/arrow_up.png"); + upArrowDownSkin: Embed(source="assets/images/arrow_up.png"); + thumbDownSkin: Embed(source="assets/images/thumb.png"); + thumbUpSkin: Embed(source="assets/images/thumb.png"); + thumbOverSkin: Embed(source="assets/images/thumb.png"); + trackSkin: Embed(source="assets/images/track.png"); +} diff --git a/src/index.mxml b/src/index.mxml index 9228d82..c9a933c 100644 --- a/src/index.mxml +++ b/src/index.mxml @@ -1,49 +1,49 @@ - - - - - - - - [ResourceBundle("ViewerStrings")] - - - - - - - - - - - - - - - - - - - - - + + + + + + + + [ResourceBundle("ViewerStrings")] + + + + + + + + + + + + + + + + + + + + + diff --git a/src/license.txt b/src/license.txt index 842bb11..b902cc4 100644 --- a/src/license.txt +++ b/src/license.txt @@ -1,107 +1,107 @@ -Copyright (c) 2010 Esri. All Rights Reserved. - -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control -with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management -of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial -ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, -and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to -compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice -that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the -editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes -of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, -the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work -or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual -or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of -electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on -electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for -the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing -by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and -subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, -worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, -publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, -non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, -sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are -necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was - submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You - under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, - and in Source or Object form, provided that You meet the following conditions: - - 1. You must give any other recipients of the Work or Derivative Works a copy of this License; and - - 2. You must cause any modified files to carry prominent notices stating that You changed the files; and - - 3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices - from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - - 4. If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a - readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the - Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the - Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever - such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. - You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, - provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to - Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your - modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You -to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, -nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except -as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides -its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, -any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for -determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under -this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required - by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, -including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the -use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or -any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a -fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting -such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree -to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your - accepting any such warranty or additional liability. - +Copyright (c) 2010 Esri. All Rights Reserved. + +Apache License + +Version 2.0, January 2004 + +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control +with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management +of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial +ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, +and configuration files. + +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to +compiled object code, generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice +that is included in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the +editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes +of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, +the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work +or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual +or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of +electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on +electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for +the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing +by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and +subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, +worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, +publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, +non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, +sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are +necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was + submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You + under this License for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, + and in Source or Object form, provided that You meet the following conditions: + + 1. You must give any other recipients of the Work or Derivative Works a copy of this License; and + + 2. You must cause any modified files to carry prominent notices stating that You changed the files; and + + 3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices + from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + + 4. If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a + readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the + Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the + Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever + such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. + You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, + provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to + Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your + modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You +to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, +nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except +as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides +its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, +any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for +determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under +this License. + +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required + by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, +including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the +use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or +any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a +fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting +such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree +to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your + accepting any such warranty or additional liability. + END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/src/popups/PopUp_311.xml b/src/popups/PopUp_311.xml index 047fe71..f5c6259 100644 --- a/src/popups/PopUp_311.xml +++ b/src/popups/PopUp_311.xml @@ -1,21 +1,21 @@ - - - {address} - - - - - - - - - true - - - \ No newline at end of file diff --git a/src/popups/PopUp_Demographics_BlockGroups.xml b/src/popups/PopUp_Demographics_BlockGroups.xml index 8157a25..9d2ebb5 100644 --- a/src/popups/PopUp_Demographics_BlockGroups.xml +++ b/src/popups/PopUp_Demographics_BlockGroups.xml @@ -1,39 +1,39 @@ - - - Block Group: {ID} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/popups/PopUp_Demographics_Counties.xml b/src/popups/PopUp_Demographics_Counties.xml index 0da3e3a..961bf3e 100644 --- a/src/popups/PopUp_Demographics_Counties.xml +++ b/src/popups/PopUp_Demographics_Counties.xml @@ -1,39 +1,39 @@ - - - {NAME} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/popups/PopUp_Demographics_States.xml b/src/popups/PopUp_Demographics_States.xml index 97851ce..be1bd5c 100644 --- a/src/popups/PopUp_Demographics_States.xml +++ b/src/popups/PopUp_Demographics_States.xml @@ -1,62 +1,62 @@ - - - {NAME} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/popups/PopUp_Demographics_Tracts.xml b/src/popups/PopUp_Demographics_Tracts.xml index 35219ea..704ed09 100644 --- a/src/popups/PopUp_Demographics_Tracts.xml +++ b/src/popups/PopUp_Demographics_Tracts.xml @@ -1,39 +1,39 @@ - - - Tract: {ID} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/popups/PopUp_Fires.xml b/src/popups/PopUp_Fires.xml index 8c35e68..e94ef83 100644 --- a/src/popups/PopUp_Fires.xml +++ b/src/popups/PopUp_Fires.xml @@ -1,16 +1,16 @@ - - - {type} - - - - - - - \ No newline at end of file diff --git a/src/popups/PopUp_Hurricanes.xml b/src/popups/PopUp_Hurricanes.xml index 0391aff..2a9423d 100644 --- a/src/popups/PopUp_Hurricanes.xml +++ b/src/popups/PopUp_Hurricanes.xml @@ -1,24 +1,24 @@ - - - {NAME} - - Hurricane {NAME} was a category {CAT} hurricane that occurred in {BASIN} on {TRACK_DATE}. It had a wind speed of {WIND_KTS} knots.]]> - - - - - - - - - - - - - + + + {NAME} + + Hurricane {NAME} was a category {CAT} hurricane that occurred in {BASIN} on {TRACK_DATE}. It had a wind speed of {WIND_KTS} knots.]]> + + + + + + + + + + + + + diff --git a/src/popups/PopUp_IncidentAreas.xml b/src/popups/PopUp_IncidentAreas.xml index 53531c6..fc2ac0c 100644 --- a/src/popups/PopUp_IncidentAreas.xml +++ b/src/popups/PopUp_IncidentAreas.xml @@ -1,19 +1,19 @@ - - - {ftype} - - - - - - - true - - - \ No newline at end of file diff --git a/src/popups/PopUp_IncidentPoints.xml b/src/popups/PopUp_IncidentPoints.xml index 993d023..6a8075f 100644 --- a/src/popups/PopUp_IncidentPoints.xml +++ b/src/popups/PopUp_IncidentPoints.xml @@ -1,18 +1,18 @@ - - - {incident_number} - - - - - - true - - - \ No newline at end of file diff --git a/src/version.xml b/src/version.xml index 564012d..b68cca6 100644 --- a/src/version.xml +++ b/src/version.xml @@ -1,2 +1,2 @@ - - + + diff --git a/src/widgets/Bookmark/Bookmark.as b/src/widgets/Bookmark/Bookmark.as index 012f1ab..db217d3 100644 --- a/src/widgets/Bookmark/Bookmark.as +++ b/src/widgets/Bookmark/Bookmark.as @@ -1,38 +1,38 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2010-2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package widgets.Bookmark -{ - -import flash.events.EventDispatcher; - -[Bindable] -[RemoteClass(alias="widgets.Bookmark.Bookmark")] - -public class Bookmark extends EventDispatcher -{ - public var name:String; - - public var icon:String; - - public var userCreated:Boolean; - - public var xmin:Number; - public var ymin:Number; - public var xmax:Number; - public var ymax:Number; -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2010-2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package widgets.Bookmark +{ + +import flash.events.EventDispatcher; + +[Bindable] +[RemoteClass(alias="widgets.Bookmark.Bookmark")] + +public class Bookmark extends EventDispatcher +{ + public var name:String; + + public var icon:String; + + public var userCreated:Boolean; + + public var xmin:Number; + public var ymin:Number; + public var xmax:Number; + public var ymax:Number; +} + +} diff --git a/src/widgets/Bookmark/BookmarkDataGroup.as b/src/widgets/Bookmark/BookmarkDataGroup.as index 9d1cb5d..f47b8de 100644 --- a/src/widgets/Bookmark/BookmarkDataGroup.as +++ b/src/widgets/Bookmark/BookmarkDataGroup.as @@ -1,129 +1,129 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2010-2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package widgets.Bookmark -{ - -import flash.events.Event; -import flash.events.FocusEvent; -import flash.events.KeyboardEvent; -import flash.ui.Keyboard; - -import mx.core.ClassFactory; - -import spark.components.List; -import spark.components.supportClasses.ItemRenderer; - -// these events bubble up from the BookmarkItemRenderer -[Event(name="bookmarkClick", type="flash.events.Event")] -[Event(name="bookmarkDelete", type="flash.events.Event")] - -public class BookmarkDataGroup extends List -{ - public function BookmarkDataGroup() - { - super(); - this.itemRenderer = new ClassFactory(BookmarkItemRenderer); - addEventListener(FocusEvent.FOCUS_IN, focusHandler); - addEventListener(FocusEvent.FOCUS_OUT, focusHandler); - arrowKeysWrapFocus = true; - } - - //-------------------------------------------------------------------------- - // - // Focus Management - // - //-------------------------------------------------------------------------- - - private function focusHandler(event:FocusEvent):void - { - if (event.type == FocusEvent.FOCUS_IN) - { - selectedIndex = 0; - } - else if (event.type == FocusEvent.FOCUS_OUT) - { - selectedIndex = -1; - } - } - - //-------------------------------------------------------------------------- - // - // Keyboard Management - // - //-------------------------------------------------------------------------- - - private var keyboardPressed:Boolean = false; - - override protected function keyDownHandler(event:KeyboardEvent):void - { - super.keyDownHandler(event); - - if (event.keyCode != Keyboard.SPACE && event.keyCode != Keyboard.DELETE) - { - return; - } - - keyboardPressed = true; - event.updateAfterEvent(); - } - - override protected function keyUpHandler(event:KeyboardEvent):void - { - super.keyUpHandler(event); - - if (event.keyCode != Keyboard.SPACE && event.keyCode != Keyboard.DELETE) - { - return; - } - - if (enabled && keyboardPressed) - { - keyboardPressed = false; - var bookmark:Bookmark = selectedItem as Bookmark; - var renderer:ItemRenderer = getItemRenderer(bookmark); - - if (renderer) - { - // Mimic mouse click on the button. - if (event.keyCode == Keyboard.DELETE && bookmark.userCreated) - { - renderer.dispatchEvent(new Event("bookmarkDelete", true)); // bubbles - } - else if (event.keyCode == Keyboard.SPACE) - { - renderer.dispatchEvent(new Event("bookmarkClick", true)); // bubbles - } - } - } - event.updateAfterEvent(); - } - - private function getItemRenderer(item:Object):ItemRenderer - { - var n:int = dataGroup.numElements; - for (var i:int = 0; i < n; i++) - { - var renderer:ItemRenderer = dataGroup.getElementAt(i) as ItemRenderer; - if (renderer && renderer.data == item) - { - return renderer; - } - } - return null; - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2010-2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package widgets.Bookmark +{ + +import flash.events.Event; +import flash.events.FocusEvent; +import flash.events.KeyboardEvent; +import flash.ui.Keyboard; + +import mx.core.ClassFactory; + +import spark.components.List; +import spark.components.supportClasses.ItemRenderer; + +// these events bubble up from the BookmarkItemRenderer +[Event(name="bookmarkClick", type="flash.events.Event")] +[Event(name="bookmarkDelete", type="flash.events.Event")] + +public class BookmarkDataGroup extends List +{ + public function BookmarkDataGroup() + { + super(); + this.itemRenderer = new ClassFactory(BookmarkItemRenderer); + addEventListener(FocusEvent.FOCUS_IN, focusHandler); + addEventListener(FocusEvent.FOCUS_OUT, focusHandler); + arrowKeysWrapFocus = true; + } + + //-------------------------------------------------------------------------- + // + // Focus Management + // + //-------------------------------------------------------------------------- + + private function focusHandler(event:FocusEvent):void + { + if (event.type == FocusEvent.FOCUS_IN) + { + selectedIndex = 0; + } + else if (event.type == FocusEvent.FOCUS_OUT) + { + selectedIndex = -1; + } + } + + //-------------------------------------------------------------------------- + // + // Keyboard Management + // + //-------------------------------------------------------------------------- + + private var keyboardPressed:Boolean = false; + + override protected function keyDownHandler(event:KeyboardEvent):void + { + super.keyDownHandler(event); + + if (event.keyCode != Keyboard.SPACE && event.keyCode != Keyboard.DELETE) + { + return; + } + + keyboardPressed = true; + event.updateAfterEvent(); + } + + override protected function keyUpHandler(event:KeyboardEvent):void + { + super.keyUpHandler(event); + + if (event.keyCode != Keyboard.SPACE && event.keyCode != Keyboard.DELETE) + { + return; + } + + if (enabled && keyboardPressed) + { + keyboardPressed = false; + var bookmark:Bookmark = selectedItem as Bookmark; + var renderer:ItemRenderer = getItemRenderer(bookmark); + + if (renderer) + { + // Mimic mouse click on the button. + if (event.keyCode == Keyboard.DELETE && bookmark.userCreated) + { + renderer.dispatchEvent(new Event("bookmarkDelete", true)); // bubbles + } + else if (event.keyCode == Keyboard.SPACE) + { + renderer.dispatchEvent(new Event("bookmarkClick", true)); // bubbles + } + } + } + event.updateAfterEvent(); + } + + private function getItemRenderer(item:Object):ItemRenderer + { + var n:int = dataGroup.numElements; + for (var i:int = 0; i < n; i++) + { + var renderer:ItemRenderer = dataGroup.getElementAt(i) as ItemRenderer; + if (renderer && renderer.data == item) + { + return renderer; + } + } + return null; + } +} + +} diff --git a/src/widgets/Bookmark/BookmarkItemRenderer.mxml b/src/widgets/Bookmark/BookmarkItemRenderer.mxml index 3403471..5b4ecae 100644 --- a/src/widgets/Bookmark/BookmarkItemRenderer.mxml +++ b/src/widgets/Bookmark/BookmarkItemRenderer.mxml @@ -1,116 +1,116 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/widgets/Bookmark/BookmarkWidget.mxml b/src/widgets/Bookmark/BookmarkWidget.mxml index 560bf03..f406b6c 100644 --- a/src/widgets/Bookmark/BookmarkWidget.mxml +++ b/src/widgets/Bookmark/BookmarkWidget.mxml @@ -1,354 +1,354 @@ - - - - - - - - - - - - - - - - - 0) - { - addXMLBookmarks(bookmarkList); - } - else if (configData.webMapData && configData.webMapData.bookmarks) - { - addWebMapBookmarks(); - } - } - - if (bookmarkSO) - { - bookmarkSOAL = bookmarkSO.data[BOOKMARKS] as ArrayList; - if (!bookmarkSOAL) - { - bookmarkSOAL = new ArrayList(); - bookmarkSO.data[BOOKMARKS] = bookmarkSOAL; - } - else - { - bookmarkAL.addAll(bookmarkSOAL); - } - } - } - - private function addXMLBookmarks(bookmarkList:XMLList):void - { - var bookmark:Bookmark; - for each (var bookmarkXML:XML in bookmarkList) - { - bookmark = parseBookmark(bookmarkXML); - if (bookmark) - { - bookmarkAL.addItem(bookmark); - } - } - } - - private function parseBookmark(bookmarkXML:XML):Bookmark - { - var bookmark:Bookmark; - - const extentCoordinates:Array = bookmarkXML.toString().split(" "); - const parsedXMin:Number = parseFloat(extentCoordinates[0]); - const parsedYMin:Number = parseFloat(extentCoordinates[1]); - const parsedXMax:Number = parseFloat(extentCoordinates[2]); - const parsedYMax:Number = parseFloat(extentCoordinates[3]); - - const hasValidMinMaxCoordinates:Boolean = - !isNaN(parsedXMin) && !isNaN(parsedYMin) - && !isNaN(parsedXMax) && !isNaN(parsedYMax); - - if (hasValidMinMaxCoordinates) - { - bookmark = new Bookmark(); - bookmark.name = bookmarkXML.@name; - bookmark.icon = bookmarkXML.@icon; - - bookmark.xmin = Number(parsedXMin); - bookmark.ymin = Number(parsedYMin); - bookmark.xmax = Number(parsedXMax); - bookmark.ymax = Number(parsedYMax); - } - - return bookmark; - } - - private function addWebMapBookmarks():void - { - const bookmarks:Array = configData.webMapData.bookmarks; - var bookmark:Bookmark; - for each (var bookmarkObject:Object in bookmarks) - { - bookmark = new Bookmark(); - bookmark.name = bookmarkObject.name; - bookmark.xmin = bookmarkObject.extent.xmin; - bookmark.ymin = bookmarkObject.extent.ymin; - bookmark.xmax = bookmarkObject.extent.xmax; - bookmark.ymax = bookmarkObject.extent.ymax; - bookmarkAL.addItem(bookmark); - } - } - - private function addBookmark():void - { - var name:String = txtName.text; - if (name) - { - var ext:Extent = map.extent; - var bookmark:Bookmark = new Bookmark(); - bookmark.name = name; - bookmark.userCreated = true; - bookmark.xmin = Number(ext.xmin.toFixed(4)); - bookmark.ymin = Number(ext.ymin.toFixed(4)); - bookmark.xmax = Number(ext.xmax.toFixed(4)); - bookmark.ymax = Number(ext.ymax.toFixed(4)); - bookmarkAL.addItem(bookmark); - bookmarkSOAL.addItem(bookmark); - saveBookmarks(); - txtName.text = ""; - bkmList.addEventListener(EffectEvent.EFFECT_END, bkmList_effectEndHandler); - showBookmarksList(); - } - else - { - showError(errorLabel); - } - } - - private function bkmList_effectEndHandler(event:EffectEvent):void - { - bkmList.removeEventListener(EffectEvent.EFFECT_END, bkmList_effectEndHandler); - // scroll to the bottom - bookmarkDG.ensureIndexIsVisible(bookmarkAL.length - 1); - } - - private function removeBookmark(event:Event):void - { - var bookmark:Bookmark = ItemRenderer(event.target).data as Bookmark; - bookmarkAL.removeItem(bookmark); - bookmarkSOAL.removeItem(bookmark); - saveBookmarks(); - bookmarkDG.selectedIndex--; - } - - private function saveBookmarks():void - { - if (bookmarkSO) - { - try - { - bookmarkSO.flush(); - } - catch (err:Error) - { - if (Log.isError()) - { - logger.error(err.toString()); - } - } - } - } - - private function showBookmark(event:Event):void - { - var bookmark:Bookmark = ItemRenderer(event.target).data as Bookmark; - if (bookmark) - { - map.extent = new Extent(bookmark.xmin, bookmark.ymin, bookmark.xmax, bookmark.ymax); - } - } - ]]> - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + 0) + { + addXMLBookmarks(bookmarkList); + } + else if (configData.webMapData && configData.webMapData.bookmarks) + { + addWebMapBookmarks(); + } + } + + if (bookmarkSO) + { + bookmarkSOAL = bookmarkSO.data[BOOKMARKS] as ArrayList; + if (!bookmarkSOAL) + { + bookmarkSOAL = new ArrayList(); + bookmarkSO.data[BOOKMARKS] = bookmarkSOAL; + } + else + { + bookmarkAL.addAll(bookmarkSOAL); + } + } + } + + private function addXMLBookmarks(bookmarkList:XMLList):void + { + var bookmark:Bookmark; + for each (var bookmarkXML:XML in bookmarkList) + { + bookmark = parseBookmark(bookmarkXML); + if (bookmark) + { + bookmarkAL.addItem(bookmark); + } + } + } + + private function parseBookmark(bookmarkXML:XML):Bookmark + { + var bookmark:Bookmark; + + const extentCoordinates:Array = bookmarkXML.toString().split(" "); + const parsedXMin:Number = parseFloat(extentCoordinates[0]); + const parsedYMin:Number = parseFloat(extentCoordinates[1]); + const parsedXMax:Number = parseFloat(extentCoordinates[2]); + const parsedYMax:Number = parseFloat(extentCoordinates[3]); + + const hasValidMinMaxCoordinates:Boolean = + !isNaN(parsedXMin) && !isNaN(parsedYMin) + && !isNaN(parsedXMax) && !isNaN(parsedYMax); + + if (hasValidMinMaxCoordinates) + { + bookmark = new Bookmark(); + bookmark.name = bookmarkXML.@name; + bookmark.icon = bookmarkXML.@icon; + + bookmark.xmin = Number(parsedXMin); + bookmark.ymin = Number(parsedYMin); + bookmark.xmax = Number(parsedXMax); + bookmark.ymax = Number(parsedYMax); + } + + return bookmark; + } + + private function addWebMapBookmarks():void + { + const bookmarks:Array = configData.webMapData.bookmarks; + var bookmark:Bookmark; + for each (var bookmarkObject:Object in bookmarks) + { + bookmark = new Bookmark(); + bookmark.name = bookmarkObject.name; + bookmark.xmin = bookmarkObject.extent.xmin; + bookmark.ymin = bookmarkObject.extent.ymin; + bookmark.xmax = bookmarkObject.extent.xmax; + bookmark.ymax = bookmarkObject.extent.ymax; + bookmarkAL.addItem(bookmark); + } + } + + private function addBookmark():void + { + var name:String = txtName.text; + if (name) + { + var ext:Extent = map.extent; + var bookmark:Bookmark = new Bookmark(); + bookmark.name = name; + bookmark.userCreated = true; + bookmark.xmin = Number(ext.xmin.toFixed(4)); + bookmark.ymin = Number(ext.ymin.toFixed(4)); + bookmark.xmax = Number(ext.xmax.toFixed(4)); + bookmark.ymax = Number(ext.ymax.toFixed(4)); + bookmarkAL.addItem(bookmark); + bookmarkSOAL.addItem(bookmark); + saveBookmarks(); + txtName.text = ""; + bkmList.addEventListener(EffectEvent.EFFECT_END, bkmList_effectEndHandler); + showBookmarksList(); + } + else + { + showError(errorLabel); + } + } + + private function bkmList_effectEndHandler(event:EffectEvent):void + { + bkmList.removeEventListener(EffectEvent.EFFECT_END, bkmList_effectEndHandler); + // scroll to the bottom + bookmarkDG.ensureIndexIsVisible(bookmarkAL.length - 1); + } + + private function removeBookmark(event:Event):void + { + var bookmark:Bookmark = ItemRenderer(event.target).data as Bookmark; + bookmarkAL.removeItem(bookmark); + bookmarkSOAL.removeItem(bookmark); + saveBookmarks(); + bookmarkDG.selectedIndex--; + } + + private function saveBookmarks():void + { + if (bookmarkSO) + { + try + { + bookmarkSO.flush(); + } + catch (err:Error) + { + if (Log.isError()) + { + logger.error(err.toString()); + } + } + } + } + + private function showBookmark(event:Event):void + { + var bookmark:Bookmark = ItemRenderer(event.target).data as Bookmark; + if (bookmark) + { + map.extent = new Extent(bookmark.xmin, bookmark.ymin, bookmark.xmax, bookmark.ymax); + } + } + ]]> + + + + + + + + + + + + + + + + + + + + + diff --git a/src/widgets/Bookmark/BookmarkWidget.xml b/src/widgets/Bookmark/BookmarkWidget.xml index 992ffc8..c52ac41 100644 --- a/src/widgets/Bookmark/BookmarkWidget.xml +++ b/src/widgets/Bookmark/BookmarkWidget.xml @@ -1,17 +1,17 @@ - - - - -13934000 2699500 -8034300 6710900 - -13638000 4541000 -13632000 4551000 - -9559973 4601704 -9529513 4621654 - -13211400 3993400 -13119200 4056100 - 13917200 3452300 16908700 5477600 - -1039800 4665500 -993700 4696800 - -8732266 -8111526 -6810170 -1859588 - - - - + + + + -13934000 2699500 -8034300 6710900 + -13638000 4541000 -13632000 4551000 + -9559973 4601704 -9529513 4621654 + -13211400 3993400 -13119200 4056100 + 13917200 3452300 16908700 5477600 + -1039800 4665500 -993700 4696800 + -8732266 -8111526 -6810170 -1859588 + + + + diff --git a/src/widgets/Chart/ChartBrowser.as b/src/widgets/Chart/ChartBrowser.as index 504fb29..7d4078d 100644 --- a/src/widgets/Chart/ChartBrowser.as +++ b/src/widgets/Chart/ChartBrowser.as @@ -1,92 +1,92 @@ - -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package widgets.Chart -{ - -import com.esri.ags.skins.supportClasses.PopUpMediaBrowser; -import com.esri.ags.portal.supportClasses.PopUpMediaInfo; - -public class ChartBrowser extends PopUpMediaBrowser -{ - public var labelField:String; - - public var sum:Number; - public var min:Number; - public var max:Number; - public var count:Number; - public var average:Number; - - [Bindable] - public var precision:int = -1; - - override public function getChartData():Array - { - var result:Array; - var attributes:Array = this.attributes as Array; - var mediaInfo:PopUpMediaInfo = this.activeMediaInfo; - resetStats(); - - if (attributes && mediaInfo.chartFields) - { - result = []; - var normalizer:Number = attributes[mediaInfo.chartNormalizationField]; - var chartField:String = mediaInfo.chartFields[0]; //only one field per chart data - - for each (var attributeKeyValuePair:Object in attributes) - { - var value:Number = attributeKeyValuePair[chartField]; - if (isFinite(value) && isFinite(normalizer) && normalizer != 0) - { - value /= normalizer; - } - - var label:String = labelField ? attributeKeyValuePair[labelField] : ""; - var chartData:Object = { name: label, value: value }; - - updateStats(value); - result.push(chartData); - } - } - - return result; - } - - private function resetStats():void - { - sum = 0; - min = Number.POSITIVE_INFINITY; - max = Number.NEGATIVE_INFINITY; - count = 0; - average = 0; - } - - private function updateStats(value:Number):void - { - sum += value; - if (value < min) - { - min = value; - } - if (value > max) - { - max = value; - } - count++; - average = sum / count; - } -} -} + +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package widgets.Chart +{ + +import com.esri.ags.skins.supportClasses.PopUpMediaBrowser; +import com.esri.ags.portal.supportClasses.PopUpMediaInfo; + +public class ChartBrowser extends PopUpMediaBrowser +{ + public var labelField:String; + + public var sum:Number; + public var min:Number; + public var max:Number; + public var count:Number; + public var average:Number; + + [Bindable] + public var precision:int = -1; + + override public function getChartData():Array + { + var result:Array; + var attributes:Array = this.attributes as Array; + var mediaInfo:PopUpMediaInfo = this.activeMediaInfo; + resetStats(); + + if (attributes && mediaInfo.chartFields) + { + result = []; + var normalizer:Number = attributes[mediaInfo.chartNormalizationField]; + var chartField:String = mediaInfo.chartFields[0]; //only one field per chart data + + for each (var attributeKeyValuePair:Object in attributes) + { + var value:Number = attributeKeyValuePair[chartField]; + if (isFinite(value) && isFinite(normalizer) && normalizer != 0) + { + value /= normalizer; + } + + var label:String = labelField ? attributeKeyValuePair[labelField] : ""; + var chartData:Object = { name: label, value: value }; + + updateStats(value); + result.push(chartData); + } + } + + return result; + } + + private function resetStats():void + { + sum = 0; + min = Number.POSITIVE_INFINITY; + max = Number.NEGATIVE_INFINITY; + count = 0; + average = 0; + } + + private function updateStats(value:Number):void + { + sum += value; + if (value < min) + { + min = value; + } + if (value > max) + { + max = value; + } + count++; + average = sum / count; + } +} +} diff --git a/src/widgets/Chart/ChartBrowserSkin.mxml b/src/widgets/Chart/ChartBrowserSkin.mxml index c15ecf1..15e95c0 100644 --- a/src/widgets/Chart/ChartBrowserSkin.mxml +++ b/src/widgets/Chart/ChartBrowserSkin.mxml @@ -1,249 +1,249 @@ - - - - - [HostComponent("widgets.Chart.ChartBrowser")] - - - - 1) - { - showElement(countLabel); - countLabel.text = "(" + (hostComponent.activeIndex + 1) + " " - + resourceManager.getString("ESRIMessages", "attributeInspectorOf") - + " " + hostComponent.popUpMediaInfos.length + ")"; - } - else - { - hideElement(countLabel); - } - } - - private function insertStats(text:String):String - { - var sumKeywordRE:RegExp = /{=SUM}/; - var minKeywordRE:RegExp = /{=MIN}/; - var maxKeywordRE:RegExp = /{=MAX}/; - var countKeywordRE:RegExp = /{=COUNT}/; - var averageKeywordRE:RegExp = /{=AVERAGE}/; - - text = insertStatistic(text, sumKeywordRE, hostComponent.sum); - text = insertStatistic(text, minKeywordRE, hostComponent.min); - text = insertStatistic(text, maxKeywordRE, hostComponent.max); - text = insertStatistic(text, countKeywordRE, hostComponent.count); - text = insertStatistic(text, averageKeywordRE, hostComponent.average); - - return text; - } - - private function insertStatistic(source:String, keyword:RegExp, insertionValue:Number):String - { - var finalInsertionValue:String = (hostComponent.precision > -1) ? numberFormatter.format(insertionValue) : insertionValue.toString(); - return source.replace(keyword, finalInsertionValue); - } - ]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + [HostComponent("widgets.Chart.ChartBrowser")] + + + + 1) + { + showElement(countLabel); + countLabel.text = "(" + (hostComponent.activeIndex + 1) + " " + + resourceManager.getString("ESRIMessages", "attributeInspectorOf") + + " " + hostComponent.popUpMediaInfos.length + ")"; + } + else + { + hideElement(countLabel); + } + } + + private function insertStats(text:String):String + { + var sumKeywordRE:RegExp = /{=SUM}/; + var minKeywordRE:RegExp = /{=MIN}/; + var maxKeywordRE:RegExp = /{=MAX}/; + var countKeywordRE:RegExp = /{=COUNT}/; + var averageKeywordRE:RegExp = /{=AVERAGE}/; + + text = insertStatistic(text, sumKeywordRE, hostComponent.sum); + text = insertStatistic(text, minKeywordRE, hostComponent.min); + text = insertStatistic(text, maxKeywordRE, hostComponent.max); + text = insertStatistic(text, countKeywordRE, hostComponent.count); + text = insertStatistic(text, averageKeywordRE, hostComponent.average); + + return text; + } + + private function insertStatistic(source:String, keyword:RegExp, insertionValue:Number):String + { + var finalInsertionValue:String = (hostComponent.precision > -1) ? numberFormatter.format(insertionValue) : insertionValue.toString(); + return source.replace(keyword, finalInsertionValue); + } + ]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/widgets/Chart/ChartLayerDefinition.as b/src/widgets/Chart/ChartLayerDefinition.as index b6bb397..2980bb3 100644 --- a/src/widgets/Chart/ChartLayerDefinition.as +++ b/src/widgets/Chart/ChartLayerDefinition.as @@ -1,29 +1,29 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package widgets.Chart -{ - -public class ChartLayerDefinition -{ - public var label:String; - public var url:String; - public var labelField:String; - public var where:String; - public var useMaxAllowableOffset:Boolean; - public var fieldInfos:Array; - public var mediaInfos:Array; -} -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package widgets.Chart +{ + +public class ChartLayerDefinition +{ + public var label:String; + public var url:String; + public var labelField:String; + public var where:String; + public var useMaxAllowableOffset:Boolean; + public var fieldInfos:Array; + public var mediaInfos:Array; +} +} diff --git a/src/widgets/Chart/ChartWidget.mxml b/src/widgets/Chart/ChartWidget.mxml index 3d4d810..0302003 100644 --- a/src/widgets/Chart/ChartWidget.mxml +++ b/src/widgets/Chart/ChartWidget.mxml @@ -1,740 +1,740 @@ - - - - - 0); - layerSelection.dataProvider = new ArrayList(chartLayerDefinitions); - } - - private function getValidChartLayerDefinitions(layers:XMLList):Array - { - var chartLayerDefinitions:Array = []; - var chartLayerDefinition:ChartLayerDefinition; - for each (var layer:XML in layers) - { - chartLayerDefinition = parseChartLayerDefinition(layer); - removeMediasWithUnsupportedType(chartLayerDefinition.mediaInfos); - if (isValidChartLayerDefinition(chartLayerDefinition)) - { - chartLayerDefinitions.push(chartLayerDefinition); - } - } - - return chartLayerDefinitions; - } - - private function parseChartLayerDefinition(layer:XML):ChartLayerDefinition - { - var chartLayerDefinition:ChartLayerDefinition = new ChartLayerDefinition(); - chartLayerDefinition.label = layer.@label; - chartLayerDefinition.url = layer.@url; - chartLayerDefinition.labelField = layer.labelfield; - chartLayerDefinition.where = layer.@where; - chartLayerDefinition.useMaxAllowableOffset = (layer.@usemaxallowableoffset == 'true'); - chartLayerDefinition.fieldInfos = PopUpInfoParser.parsePopUpFields(layer.fields[0]); - chartLayerDefinition.mediaInfos = PopUpInfoParser.parsePopUpMedias(layer.medias[0]); - return chartLayerDefinition; - } - - private function removeMediasWithUnsupportedType(mediaInfos:Array):void - { - var currentMediaInfo:PopUpMediaInfo; - for (var i:int = (mediaInfos.length - 1); i > -1; i--) - { - currentMediaInfo = mediaInfos[i]; - if (!currentMediaInfo.type || currentMediaInfo.type == PopUpMediaInfo.IMAGE) - { - mediaInfos.splice(i, 1); - } - } - } - - private function isValidChartLayerDefinition(chartLayerDefinition:ChartLayerDefinition):Boolean - { - var hasAtLeastOneChartMedia:Boolean = (chartLayerDefinition.mediaInfos && chartLayerDefinition.mediaInfos.length > 0); - return hasAtLeastOneChartMedia && hasValidChartDataSource(chartLayerDefinition); - } - - private function hasValidChartDataSource(chartLayerDefinition:ChartLayerDefinition):Boolean - { - return isLayerEndpoint(chartLayerDefinition.url) || findFeatureLayerByLabel(chartLayerDefinition.label); - } - - private function isLayerEndpoint(url:String):Boolean - { - var layerEndpoint:RegExp = /https?:\/\/.+\/rest\/services\/.+server\/[0-9]+\/?$/i; - return layerEndpoint.test(url); - } - - private function findFeatureLayerByLabel(label:String):FeatureLayer - { - var mapLayers:ArrayCollection = map.layers as ArrayCollection; - var foundFeatureLayer:FeatureLayer; - var currentFeatureLayer:FeatureLayer; - - for each (var layer:Layer in mapLayers) - { - currentFeatureLayer = layer as FeatureLayer; - if (layer && (layer.name == label)) - { - foundFeatureLayer = currentFeatureLayer; - break; - } - } - - return foundFeatureLayer; - } - - override protected function keyDownHandler(event:KeyboardEvent):void - { - if (event.keyCode == Keyboard.CONTROL) - { - ctrlPressed = true; - } - } - - override protected function keyUpHandler(event:KeyboardEvent):void - { - if (event.keyCode == Keyboard.CONTROL) - { - ctrlPressed = false; - } - } - - private function configureLabels(labels:XMLList):void - { - selectLabel = labels.selectlabel[0] || getDefaultString("selectLabel"); - resultsLabel = labels.resultslabel[0] || getDefaultString("resultsLabel"); - - layerSelectionLabel = labels.layerselectionlabel[0] || getDefaultString("layerSelectionLabel"); - drawToolMenuLabel = labels.drawtoolmenulabel[0] || getDefaultString("drawToolMenuLabel"); - noLayersLabel = labels.nolayerslabel[0] || getDefaultString("noLayersLabel"); - noChartDataToDisplayLabel = labels.nochartdatatodisplaylabel[0] || getDefaultString("noChartDataToDisplayLabel"); - layerSourceNotVisibleLabel = labels.featurelayernotvisibletext[0] || getDefaultString("featureLayerNotVisibleText"); - - polygonLabel = labels.polygonlabel[0] || getDefaultString("drawPolygonLabel"); - freehandPolygonLabel = labels.freehandpolygonlabel[0] || getDefaultString("drawFreehandPolygonLabel"); - rectangleLabel = labels.rectanglelabel[0] || getDefaultString("drawRectangleLabel"); - circleLabel = labels.circlelabel[0] || getDefaultString("drawCircleLabel"); - ellipseLabel = labels.ellipselabel[0] || getDefaultString("drawEllipseLabel"); - clearLabel = labels.clearlabel[0] || getDefaultString("clearLabel"); - } - - private function configureViewTitlebarButtons():void - { - wTemplate.addTitlebarButton(ICON_URL + "i_search.png", selectLabel, showInputView); - wTemplate.addTitlebarButton(ICON_URL + "i_piechart.png", resultsLabel, showChartView); - } - - private function showInputView():void - { - currentState = "input"; - wTemplate.selectedTitlebarButtonIndex = 0; - } - - private function showChartView():void - { - currentState = "chart"; - wTemplate.selectedTitlebarButtonIndex = 1; - } - - private function activateDrawTool(event:MouseEvent):void - { - addSharedData("Deactivate_DrawTool", null); // to be able to deactivate drawTool on other widgets - - // apply glow - selectedDrawingIcon = FocusableImage(event.currentTarget); - clearSelectionFilter(); - selectedDrawingIcon.filters = [ glowFilter ]; - - var status:String; - var value:String = selectedDrawingIcon.name; - switch (value) - { - case DrawTool.POLYGON: - { - status = polygonLabel; - break; - } - case DrawTool.FREEHAND_POLYGON: - { - status = freehandPolygonLabel; - break; - } - case DrawTool.EXTENT: - { - status = rectangleLabel; - break; - } - case DrawTool.CIRCLE: - { - status = circleLabel; - break; - } - case DrawTool.ELLIPSE: - { - status = ellipseLabel; - break; - } - } - var drawSymbol:Symbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID, 0x3FAFDC, 0.5, new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, 0x3FAFDC, 1, 2)); - setMapAction(value, status, drawSymbol, map_drawEndHandler); - } - - private function clearSelectionFilter():void - { - for (var i:int = 0; i < drawToolMenu.numChildren; i++) - { - if (drawToolMenu.getChildAt(i).filters && drawToolMenu.getChildAt(i).filters.length > 0) - { - if (!(selectedDrawingIcon && drawToolMenu.getChildAt(i) === selectedDrawingIcon)) - { - drawToolMenu.getChildAt(i).filters = []; - } - } - } - } - - private function icon_rollOverHandler(event:MouseEvent):void - { - clearSelectionFilter(); - event.target.filters = [ glowFilter ]; - } - - private function icon_rollOutHandler(event:MouseEvent):void - { - clearSelectionFilter(); - } - - private function map_drawEndHandler(event:DrawEvent):void - { - setMapAction(null, null, null, null); // deactivate drawTool - selectedDrawingIcon = null; - clearSelectionFilter(); - - selectionMethod = ctrlPressed ? FeatureLayer.SELECTION_ADD : FeatureLayer.SELECTION_NEW; - updateQuery(event.graphic.geometry); - fetchFeatures(); - } - - private function updateQuery(geometry:Geometry):void - { - query.outFields = getChartFields(); - query.geometry = geometry; - query.where = selectedChartLayerDefinition.where; - query.maxAllowableOffset = selectedChartLayerDefinition.useMaxAllowableOffset ? getMaxAllowableOffset() : NaN; - } - - private function getMaxAllowableOffset(pixelTolerance:int = 1):int - { - return Math.floor(map.extent.width / map.width) * pixelTolerance; - } - - private function getChartFields():Array - { - var chartFields:Array = []; - var selectedChartLayerDefinition:ChartLayerDefinition = (layerSelection.selectedItem as ChartLayerDefinition); - var chartFieldInfos:Array = selectedChartLayerDefinition.fieldInfos; - - for each (var fieldInfo:PopUpFieldInfo in chartFieldInfos) - { - chartFields.push(fieldInfo.fieldName); - } - - return chartFields; - } - - private function setChartData(attributes:Array):void - { - chartBrowser.attributes = attributes; - doesChartHaveData = (attributes && attributes.length > 0); - } - - private function clearSelectionHighlights():void - { - highlightFeatureLayer.clearSelection(); - } - - private function fetchFeatures():void - { - resetChart(selectedChartLayerDefinition); - - if (sourceFeatureLayer) - { - fetchFeaturesFromClient(sourceFeatureLayer.url); - } - else - { - fetchFeaturesFromServer(selectedChartLayerDefinition.url); - } - } - - private function resetChart(chartLayerDefinition:ChartLayerDefinition):void - { - chartBrowser.labelField = chartLayerDefinition.labelField; - chartBrowser.popUpFieldInfos = chartLayerDefinition.fieldInfos; - chartBrowser.popUpMediaInfos = chartLayerDefinition.mediaInfos; - } - - private function fetchFeaturesFromClient(url:String):void - { - map.addLayer(highlightFeatureLayer); - highlightFeatureLayer.outFields = query.outFields; - highlightFeatureLayer.maxAllowableOffset = query.maxAllowableOffset; - highlightFeatureLayer.addEventListener(FeatureLayerEvent.SELECTION_COMPLETE, highlightFeatureLayer_selectionCompleteHandler, false, 0, true); - highlightFeatureLayer.addEventListener(FaultEvent.FAULT, highlightFeatureLayer_faultHandler, false, 0, true); - - if (highlightFeatureLayer.url != url) - { - highlightFeatureLayer.addEventListener(LayerEvent.LOAD, highlightFeatureLayer_loadHandler, false, 0, true); - highlightFeatureLayer.addEventListener(LayerEvent.LOAD_ERROR, highlightFeatureLayer_loadErrorHandler, false, 0, true); - highlightFeatureLayer.url = url; - } - else - { - highlightFeatureLayer.selectFeatures(query, selectionMethod); - } - } - - protected function highlightFeatureLayer_selectionCompleteHandler(event:FeatureLayerEvent):void - { - var featureLayer:FeatureLayer = event.featureLayer; - featureLayer.removeEventListener(FeatureLayerEvent.SELECTION_COMPLETE, highlightFeatureLayer_selectionCompleteHandler); - featureLayer.removeEventListener(FaultEvent.FAULT, highlightFeatureLayer_faultHandler); - - var features:ArrayCollection = featureLayer.graphicProvider as ArrayCollection; - setChartData(getAttributes(features)); - showChartView(); - } - - private function getAttributes(features:ArrayCollection):Array - { - var attributes:Array = []; - - for each (var feature:Object in features) - { - attributes.push(feature.attributes); - } - - return attributes; - } - - protected function highlightFeatureLayer_faultHandler(event:FaultEvent):void - { - var featureLayer:FeatureLayer = event.currentTarget as FeatureLayer; - featureLayer.removeEventListener(FeatureLayerEvent.QUERY_FEATURES_COMPLETE, highlightFeatureLayer_selectionCompleteHandler); - featureLayer.removeEventListener(FaultEvent.FAULT, highlightFeatureLayer_faultHandler); - showError(getDefaultString("layerDataRetrievalError")); - } - - protected function highlightFeatureLayer_loadHandler(event:LayerEvent):void - { - var featureLayer:FeatureLayer = event.currentTarget as FeatureLayer; - featureLayer.removeEventListener(LayerEvent.LOAD, highlightFeatureLayer_loadHandler); - featureLayer.removeEventListener(LayerEvent.LOAD_ERROR, highlightFeatureLayer_loadErrorHandler); - featureLayer.selectFeatures(query, selectionMethod); - } - - protected function highlightFeatureLayer_loadErrorHandler(event:LayerEvent):void - { - var featureLayer:FeatureLayer = event.currentTarget as FeatureLayer; - featureLayer.removeEventListener(LayerEvent.LOAD, highlightFeatureLayer_loadHandler); - featureLayer.removeEventListener(LayerEvent.LOAD_ERROR, highlightFeatureLayer_loadErrorHandler); - showError(getDefaultString("layerDataRetrievalError")); - } - - private function fetchFeaturesFromServer(url:String):void - { - map.addLayer(highlightFeatureLayer); - highlightFeatureLayer.outFields = query.outFields; - highlightFeatureLayer.maxAllowableOffset = query.maxAllowableOffset; - highlightFeatureLayer.addEventListener(FeatureLayerEvent.SELECTION_COMPLETE, highlightFeatureLayer_selectionCompleteHandler, false, 0, true); - highlightFeatureLayer.addEventListener(FaultEvent.FAULT, highlightFeatureLayer_faultHandler, false, 0, true); - - if (highlightFeatureLayer.url != url) - { - highlightFeatureLayer.addEventListener(LayerEvent.LOAD, highlightFeatureLayer_loadHandler, false, 0, true); - highlightFeatureLayer.addEventListener(LayerEvent.LOAD_ERROR, highlightFeatureLayer_loadErrorHandler, false, 0, true); - highlightFeatureLayer.url = url; - } - else - { - highlightFeatureLayer.selectFeatures(query, selectionMethod); - } - } - - protected function wTemplate_closedHandler(event:Event):void - { - setMapAction(null, null, null, null); // deactivate drawTool - map.removeLayer(highlightFeatureLayer); - } - - protected function wTemplate_openHandler(event:Event):void - { - map.addLayer(highlightFeatureLayer); - } - - protected function layerSelection_valueCommitHandler(event:FlexEvent):void - { - updateLayerSelectionMessage(); - clearChartAndSelectionHighlights() - updateSelectedChartLayerDefinition(); - } - - private function updateLayerSelectionMessage():void - { - layerNotVisibleOrOutOfScaleRangeMessage = (layerSelection.selectedLabel + ' ' + layerSourceNotVisibleLabel); - } - - private function clearChartAndSelectionHighlights():void - { - setChartData(null); - clearSelectionHighlights(); - showInputView(); - } - - private function updateSelectedChartLayerDefinition():void - { - selectedChartLayerDefinition = (layerSelection.selectedItem as ChartLayerDefinition); - removeSourceLayerListeners(); - if (!selectedChartLayerDefinition.url) - { - sourceFeatureLayer = findFeatureLayerByLabel(selectedChartLayerDefinition.label); - updateHighlightFeatureLayerInclusion(); - highlightFeatureLayer.url = sourceFeatureLayer.url; - } - else - { - sourceFeatureLayer = null; - highlightFeatureLayer.url = selectedChartLayerDefinition.url; - } - addSourceLayerListeners(); - } - - private function removeSourceLayerListeners():void - { - if (sourceFeatureLayer) - { - sourceFeatureLayer.removeEventListener(FlexEvent.SHOW, selectedLayer_showHandler); - sourceFeatureLayer.removeEventListener(FlexEvent.HIDE, selectedLayer_hideHandler); - } - } - - private function updateHighlightFeatureLayerInclusion():void - { - if (sourceFeatureLayer) - { - isHighlightFeatureLayerShown = (sourceFeatureLayer.visible && sourceFeatureLayer.isInScaleRange); - } - else - { - isHighlightFeatureLayerShown = highlightFeatureLayer.isInScaleRange; - } - } - - private function selectedLayer_showHandler(event:FlexEvent):void - { - updateHighlightFeatureLayerInclusion(); - } - - private function selectedLayer_hideHandler(event:FlexEvent):void - { - updateHighlightFeatureLayerInclusion(); - } - - private function addSourceLayerListeners():void - { - if (sourceFeatureLayer) - { - sourceFeatureLayer.addEventListener(FlexEvent.SHOW, selectedLayer_showHandler); - sourceFeatureLayer.addEventListener(FlexEvent.HIDE, selectedLayer_hideHandler); - } - } - ]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + 0); + layerSelection.dataProvider = new ArrayList(chartLayerDefinitions); + } + + private function getValidChartLayerDefinitions(layers:XMLList):Array + { + var chartLayerDefinitions:Array = []; + var chartLayerDefinition:ChartLayerDefinition; + for each (var layer:XML in layers) + { + chartLayerDefinition = parseChartLayerDefinition(layer); + removeMediasWithUnsupportedType(chartLayerDefinition.mediaInfos); + if (isValidChartLayerDefinition(chartLayerDefinition)) + { + chartLayerDefinitions.push(chartLayerDefinition); + } + } + + return chartLayerDefinitions; + } + + private function parseChartLayerDefinition(layer:XML):ChartLayerDefinition + { + var chartLayerDefinition:ChartLayerDefinition = new ChartLayerDefinition(); + chartLayerDefinition.label = layer.@label; + chartLayerDefinition.url = layer.@url; + chartLayerDefinition.labelField = layer.labelfield; + chartLayerDefinition.where = layer.@where; + chartLayerDefinition.useMaxAllowableOffset = (layer.@usemaxallowableoffset == 'true'); + chartLayerDefinition.fieldInfos = PopUpInfoParser.parsePopUpFields(layer.fields[0]); + chartLayerDefinition.mediaInfos = PopUpInfoParser.parsePopUpMedias(layer.medias[0]); + return chartLayerDefinition; + } + + private function removeMediasWithUnsupportedType(mediaInfos:Array):void + { + var currentMediaInfo:PopUpMediaInfo; + for (var i:int = (mediaInfos.length - 1); i > -1; i--) + { + currentMediaInfo = mediaInfos[i]; + if (!currentMediaInfo.type || currentMediaInfo.type == PopUpMediaInfo.IMAGE) + { + mediaInfos.splice(i, 1); + } + } + } + + private function isValidChartLayerDefinition(chartLayerDefinition:ChartLayerDefinition):Boolean + { + var hasAtLeastOneChartMedia:Boolean = (chartLayerDefinition.mediaInfos && chartLayerDefinition.mediaInfos.length > 0); + return hasAtLeastOneChartMedia && hasValidChartDataSource(chartLayerDefinition); + } + + private function hasValidChartDataSource(chartLayerDefinition:ChartLayerDefinition):Boolean + { + return isLayerEndpoint(chartLayerDefinition.url) || findFeatureLayerByLabel(chartLayerDefinition.label); + } + + private function isLayerEndpoint(url:String):Boolean + { + var layerEndpoint:RegExp = /https?:\/\/.+\/rest\/services\/.+server\/[0-9]+\/?$/i; + return layerEndpoint.test(url); + } + + private function findFeatureLayerByLabel(label:String):FeatureLayer + { + var mapLayers:ArrayCollection = map.layers as ArrayCollection; + var foundFeatureLayer:FeatureLayer; + var currentFeatureLayer:FeatureLayer; + + for each (var layer:Layer in mapLayers) + { + currentFeatureLayer = layer as FeatureLayer; + if (layer && (layer.name == label)) + { + foundFeatureLayer = currentFeatureLayer; + break; + } + } + + return foundFeatureLayer; + } + + override protected function keyDownHandler(event:KeyboardEvent):void + { + if (event.keyCode == Keyboard.CONTROL) + { + ctrlPressed = true; + } + } + + override protected function keyUpHandler(event:KeyboardEvent):void + { + if (event.keyCode == Keyboard.CONTROL) + { + ctrlPressed = false; + } + } + + private function configureLabels(labels:XMLList):void + { + selectLabel = labels.selectlabel[0] || getDefaultString("selectLabel"); + resultsLabel = labels.resultslabel[0] || getDefaultString("resultsLabel"); + + layerSelectionLabel = labels.layerselectionlabel[0] || getDefaultString("layerSelectionLabel"); + drawToolMenuLabel = labels.drawtoolmenulabel[0] || getDefaultString("drawToolMenuLabel"); + noLayersLabel = labels.nolayerslabel[0] || getDefaultString("noLayersLabel"); + noChartDataToDisplayLabel = labels.nochartdatatodisplaylabel[0] || getDefaultString("noChartDataToDisplayLabel"); + layerSourceNotVisibleLabel = labels.featurelayernotvisibletext[0] || getDefaultString("featureLayerNotVisibleText"); + + polygonLabel = labels.polygonlabel[0] || getDefaultString("drawPolygonLabel"); + freehandPolygonLabel = labels.freehandpolygonlabel[0] || getDefaultString("drawFreehandPolygonLabel"); + rectangleLabel = labels.rectanglelabel[0] || getDefaultString("drawRectangleLabel"); + circleLabel = labels.circlelabel[0] || getDefaultString("drawCircleLabel"); + ellipseLabel = labels.ellipselabel[0] || getDefaultString("drawEllipseLabel"); + clearLabel = labels.clearlabel[0] || getDefaultString("clearLabel"); + } + + private function configureViewTitlebarButtons():void + { + wTemplate.addTitlebarButton(ICON_URL + "i_search.png", selectLabel, showInputView); + wTemplate.addTitlebarButton(ICON_URL + "i_piechart.png", resultsLabel, showChartView); + } + + private function showInputView():void + { + currentState = "input"; + wTemplate.selectedTitlebarButtonIndex = 0; + } + + private function showChartView():void + { + currentState = "chart"; + wTemplate.selectedTitlebarButtonIndex = 1; + } + + private function activateDrawTool(event:MouseEvent):void + { + addSharedData("Deactivate_DrawTool", null); // to be able to deactivate drawTool on other widgets + + // apply glow + selectedDrawingIcon = FocusableImage(event.currentTarget); + clearSelectionFilter(); + selectedDrawingIcon.filters = [ glowFilter ]; + + var status:String; + var value:String = selectedDrawingIcon.name; + switch (value) + { + case DrawTool.POLYGON: + { + status = polygonLabel; + break; + } + case DrawTool.FREEHAND_POLYGON: + { + status = freehandPolygonLabel; + break; + } + case DrawTool.EXTENT: + { + status = rectangleLabel; + break; + } + case DrawTool.CIRCLE: + { + status = circleLabel; + break; + } + case DrawTool.ELLIPSE: + { + status = ellipseLabel; + break; + } + } + var drawSymbol:Symbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID, 0x3FAFDC, 0.5, new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, 0x3FAFDC, 1, 2)); + setMapAction(value, status, drawSymbol, map_drawEndHandler); + } + + private function clearSelectionFilter():void + { + for (var i:int = 0; i < drawToolMenu.numChildren; i++) + { + if (drawToolMenu.getChildAt(i).filters && drawToolMenu.getChildAt(i).filters.length > 0) + { + if (!(selectedDrawingIcon && drawToolMenu.getChildAt(i) === selectedDrawingIcon)) + { + drawToolMenu.getChildAt(i).filters = []; + } + } + } + } + + private function icon_rollOverHandler(event:MouseEvent):void + { + clearSelectionFilter(); + event.target.filters = [ glowFilter ]; + } + + private function icon_rollOutHandler(event:MouseEvent):void + { + clearSelectionFilter(); + } + + private function map_drawEndHandler(event:DrawEvent):void + { + setMapAction(null, null, null, null); // deactivate drawTool + selectedDrawingIcon = null; + clearSelectionFilter(); + + selectionMethod = ctrlPressed ? FeatureLayer.SELECTION_ADD : FeatureLayer.SELECTION_NEW; + updateQuery(event.graphic.geometry); + fetchFeatures(); + } + + private function updateQuery(geometry:Geometry):void + { + query.outFields = getChartFields(); + query.geometry = geometry; + query.where = selectedChartLayerDefinition.where; + query.maxAllowableOffset = selectedChartLayerDefinition.useMaxAllowableOffset ? getMaxAllowableOffset() : NaN; + } + + private function getMaxAllowableOffset(pixelTolerance:int = 1):int + { + return Math.floor(map.extent.width / map.width) * pixelTolerance; + } + + private function getChartFields():Array + { + var chartFields:Array = []; + var selectedChartLayerDefinition:ChartLayerDefinition = (layerSelection.selectedItem as ChartLayerDefinition); + var chartFieldInfos:Array = selectedChartLayerDefinition.fieldInfos; + + for each (var fieldInfo:PopUpFieldInfo in chartFieldInfos) + { + chartFields.push(fieldInfo.fieldName); + } + + return chartFields; + } + + private function setChartData(attributes:Array):void + { + chartBrowser.attributes = attributes; + doesChartHaveData = (attributes && attributes.length > 0); + } + + private function clearSelectionHighlights():void + { + highlightFeatureLayer.clearSelection(); + } + + private function fetchFeatures():void + { + resetChart(selectedChartLayerDefinition); + + if (sourceFeatureLayer) + { + fetchFeaturesFromClient(sourceFeatureLayer.url); + } + else + { + fetchFeaturesFromServer(selectedChartLayerDefinition.url); + } + } + + private function resetChart(chartLayerDefinition:ChartLayerDefinition):void + { + chartBrowser.labelField = chartLayerDefinition.labelField; + chartBrowser.popUpFieldInfos = chartLayerDefinition.fieldInfos; + chartBrowser.popUpMediaInfos = chartLayerDefinition.mediaInfos; + } + + private function fetchFeaturesFromClient(url:String):void + { + map.addLayer(highlightFeatureLayer); + highlightFeatureLayer.outFields = query.outFields; + highlightFeatureLayer.maxAllowableOffset = query.maxAllowableOffset; + highlightFeatureLayer.addEventListener(FeatureLayerEvent.SELECTION_COMPLETE, highlightFeatureLayer_selectionCompleteHandler, false, 0, true); + highlightFeatureLayer.addEventListener(FaultEvent.FAULT, highlightFeatureLayer_faultHandler, false, 0, true); + + if (highlightFeatureLayer.url != url) + { + highlightFeatureLayer.addEventListener(LayerEvent.LOAD, highlightFeatureLayer_loadHandler, false, 0, true); + highlightFeatureLayer.addEventListener(LayerEvent.LOAD_ERROR, highlightFeatureLayer_loadErrorHandler, false, 0, true); + highlightFeatureLayer.url = url; + } + else + { + highlightFeatureLayer.selectFeatures(query, selectionMethod); + } + } + + protected function highlightFeatureLayer_selectionCompleteHandler(event:FeatureLayerEvent):void + { + var featureLayer:FeatureLayer = event.featureLayer; + featureLayer.removeEventListener(FeatureLayerEvent.SELECTION_COMPLETE, highlightFeatureLayer_selectionCompleteHandler); + featureLayer.removeEventListener(FaultEvent.FAULT, highlightFeatureLayer_faultHandler); + + var features:ArrayCollection = featureLayer.graphicProvider as ArrayCollection; + setChartData(getAttributes(features)); + showChartView(); + } + + private function getAttributes(features:ArrayCollection):Array + { + var attributes:Array = []; + + for each (var feature:Object in features) + { + attributes.push(feature.attributes); + } + + return attributes; + } + + protected function highlightFeatureLayer_faultHandler(event:FaultEvent):void + { + var featureLayer:FeatureLayer = event.currentTarget as FeatureLayer; + featureLayer.removeEventListener(FeatureLayerEvent.QUERY_FEATURES_COMPLETE, highlightFeatureLayer_selectionCompleteHandler); + featureLayer.removeEventListener(FaultEvent.FAULT, highlightFeatureLayer_faultHandler); + showError(getDefaultString("layerDataRetrievalError")); + } + + protected function highlightFeatureLayer_loadHandler(event:LayerEvent):void + { + var featureLayer:FeatureLayer = event.currentTarget as FeatureLayer; + featureLayer.removeEventListener(LayerEvent.LOAD, highlightFeatureLayer_loadHandler); + featureLayer.removeEventListener(LayerEvent.LOAD_ERROR, highlightFeatureLayer_loadErrorHandler); + featureLayer.selectFeatures(query, selectionMethod); + } + + protected function highlightFeatureLayer_loadErrorHandler(event:LayerEvent):void + { + var featureLayer:FeatureLayer = event.currentTarget as FeatureLayer; + featureLayer.removeEventListener(LayerEvent.LOAD, highlightFeatureLayer_loadHandler); + featureLayer.removeEventListener(LayerEvent.LOAD_ERROR, highlightFeatureLayer_loadErrorHandler); + showError(getDefaultString("layerDataRetrievalError")); + } + + private function fetchFeaturesFromServer(url:String):void + { + map.addLayer(highlightFeatureLayer); + highlightFeatureLayer.outFields = query.outFields; + highlightFeatureLayer.maxAllowableOffset = query.maxAllowableOffset; + highlightFeatureLayer.addEventListener(FeatureLayerEvent.SELECTION_COMPLETE, highlightFeatureLayer_selectionCompleteHandler, false, 0, true); + highlightFeatureLayer.addEventListener(FaultEvent.FAULT, highlightFeatureLayer_faultHandler, false, 0, true); + + if (highlightFeatureLayer.url != url) + { + highlightFeatureLayer.addEventListener(LayerEvent.LOAD, highlightFeatureLayer_loadHandler, false, 0, true); + highlightFeatureLayer.addEventListener(LayerEvent.LOAD_ERROR, highlightFeatureLayer_loadErrorHandler, false, 0, true); + highlightFeatureLayer.url = url; + } + else + { + highlightFeatureLayer.selectFeatures(query, selectionMethod); + } + } + + protected function wTemplate_closedHandler(event:Event):void + { + setMapAction(null, null, null, null); // deactivate drawTool + map.removeLayer(highlightFeatureLayer); + } + + protected function wTemplate_openHandler(event:Event):void + { + map.addLayer(highlightFeatureLayer); + } + + protected function layerSelection_valueCommitHandler(event:FlexEvent):void + { + updateLayerSelectionMessage(); + clearChartAndSelectionHighlights() + updateSelectedChartLayerDefinition(); + } + + private function updateLayerSelectionMessage():void + { + layerNotVisibleOrOutOfScaleRangeMessage = (layerSelection.selectedLabel + ' ' + layerSourceNotVisibleLabel); + } + + private function clearChartAndSelectionHighlights():void + { + setChartData(null); + clearSelectionHighlights(); + showInputView(); + } + + private function updateSelectedChartLayerDefinition():void + { + selectedChartLayerDefinition = (layerSelection.selectedItem as ChartLayerDefinition); + removeSourceLayerListeners(); + if (!selectedChartLayerDefinition.url) + { + sourceFeatureLayer = findFeatureLayerByLabel(selectedChartLayerDefinition.label); + updateHighlightFeatureLayerInclusion(); + highlightFeatureLayer.url = sourceFeatureLayer.url; + } + else + { + sourceFeatureLayer = null; + highlightFeatureLayer.url = selectedChartLayerDefinition.url; + } + addSourceLayerListeners(); + } + + private function removeSourceLayerListeners():void + { + if (sourceFeatureLayer) + { + sourceFeatureLayer.removeEventListener(FlexEvent.SHOW, selectedLayer_showHandler); + sourceFeatureLayer.removeEventListener(FlexEvent.HIDE, selectedLayer_hideHandler); + } + } + + private function updateHighlightFeatureLayerInclusion():void + { + if (sourceFeatureLayer) + { + isHighlightFeatureLayerShown = (sourceFeatureLayer.visible && sourceFeatureLayer.isInScaleRange); + } + else + { + isHighlightFeatureLayerShown = highlightFeatureLayer.isInScaleRange; + } + } + + private function selectedLayer_showHandler(event:FlexEvent):void + { + updateHighlightFeatureLayerInclusion(); + } + + private function selectedLayer_hideHandler(event:FlexEvent):void + { + updateHighlightFeatureLayerInclusion(); + } + + private function addSourceLayerListeners():void + { + if (sourceFeatureLayer) + { + sourceFeatureLayer.addEventListener(FlexEvent.SHOW, selectedLayer_showHandler); + sourceFeatureLayer.addEventListener(FlexEvent.HIDE, selectedLayer_hideHandler); + } + } + ]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/widgets/Chart/ChartWidget.xml b/src/widgets/Chart/ChartWidget.xml index 27f871e..feaa9d5 100644 --- a/src/widgets/Chart/ChartWidget.xml +++ b/src/widgets/Chart/ChartWidget.xml @@ -1,64 +1,64 @@ - - - 0x336699 - - - - NAME - - - - - - - - - - NAME - - - - - - - - - - - - - - - - NAME - - - - - - - - - - - - - - - + + + 0x336699 + + + + NAME + + + + + + + + + + NAME + + + + + + + + + + + + + + + + NAME + + + + + + + + + + + + + + + diff --git a/src/widgets/Coordinate/CoordinateWidget.mxml b/src/widgets/Coordinate/CoordinateWidget.mxml index 36baa85..f0abb46 100644 --- a/src/widgets/Coordinate/CoordinateWidget.mxml +++ b/src/widgets/Coordinate/CoordinateWidget.mxml @@ -1,180 +1,180 @@ - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + diff --git a/src/widgets/Coordinate/CoordinateWidget.xml b/src/widgets/Coordinate/CoordinateWidget.xml index e132ec2..01e03a0 100644 --- a/src/widgets/Coordinate/CoordinateWidget.xml +++ b/src/widgets/Coordinate/CoordinateWidget.xml @@ -1,10 +1,10 @@ - - - - geo - - - + + + + geo + + + diff --git a/src/widgets/Coordinate/DegToDMS.as b/src/widgets/Coordinate/DegToDMS.as index 176ea90..24d2cd3 100644 --- a/src/widgets/Coordinate/DegToDMS.as +++ b/src/widgets/Coordinate/DegToDMS.as @@ -1,64 +1,64 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2010-2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package widgets.Coordinate -{ - -//-------------------------------------- -// Other metadata -//-------------------------------------- -/** - * Utility class to pretty print decimal degree numbers. - * @private - */ -public final class DegToDMS -{ - // Constants to define the format. - public static const LAT:String = "lat"; - - public static const LON:String = "lon"; - - /** - * Utility function to format a decimal degree number into a pretty string with degrees, minutes and seconds. - * @param decDeg the decimal degree number. - * @param decDir "lat" for a latitude number, "lon" for a longitude value. - * @return A pretty print string with degrees, minutes and seconds. - */ - public static function format(decDeg:Number, decDir:String):String - { - var d:Number = Math.abs(decDeg); - var deg:Number = Math.floor(d); - d = d - deg; - var min:Number = Math.floor(d * 60); - var av:Number = d - min / 60; - var sec:Number = Math.floor(av * 60 * 60); - if (sec == 60) - { - min++; - sec = 0; - } - if (min == 60) - { - deg++; - min = 0; - } - var smin:String = min < 10 ? "0" + min + "' " : min + "' "; - var ssec:String = sec < 10 ? "0" + sec + "\" " : sec + "\" "; - var sdir:String = (decDir == LAT) ? (decDeg < 0 ? "S" : "N") : (decDeg < 0 ? "W" : "E"); - return deg + "\xB0 " + smin + ssec + sdir; - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2010-2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package widgets.Coordinate +{ + +//-------------------------------------- +// Other metadata +//-------------------------------------- +/** + * Utility class to pretty print decimal degree numbers. + * @private + */ +public final class DegToDMS +{ + // Constants to define the format. + public static const LAT:String = "lat"; + + public static const LON:String = "lon"; + + /** + * Utility function to format a decimal degree number into a pretty string with degrees, minutes and seconds. + * @param decDeg the decimal degree number. + * @param decDir "lat" for a latitude number, "lon" for a longitude value. + * @return A pretty print string with degrees, minutes and seconds. + */ + public static function format(decDeg:Number, decDir:String):String + { + var d:Number = Math.abs(decDeg); + var deg:Number = Math.floor(d); + d = d - deg; + var min:Number = Math.floor(d * 60); + var av:Number = d - min / 60; + var sec:Number = Math.floor(av * 60 * 60); + if (sec == 60) + { + min++; + sec = 0; + } + if (min == 60) + { + deg++; + min = 0; + } + var smin:String = min < 10 ? "0" + min + "' " : min + "' "; + var ssec:String = sec < 10 ? "0" + sec + "\" " : sec + "\" "; + var sdir:String = (decDir == LAT) ? (decDeg < 0 ? "S" : "N") : (decDeg < 0 ? "W" : "E"); + return deg + "\xB0 " + smin + ssec + sdir; + } +} + +} diff --git a/src/widgets/DataExtract/DataExtractWidget.mxml b/src/widgets/DataExtract/DataExtractWidget.mxml index ff6f676..321a704 100644 --- a/src/widgets/DataExtract/DataExtractWidget.mxml +++ b/src/widgets/DataExtract/DataExtractWidget.mxml @@ -1,883 +1,883 @@ - - - - - 0) - { - useProxy = configXML.useproxy == "true"; - } - - gpService = new JSONTask(); - gpService.url = gpURL; - if (useProxy && configData.proxyUrl) - { - gpService.proxyURL = configData.proxyUrl; - gp.proxyURL = configData.proxyUrl; - } - - var urlVars:URLVariables = new URLVariables(); - urlVars.f = "json"; - - //Call gpService to get service properties - gpService.execute(urlVars, new AsyncResponder(gpService_resultHandler, gpService_faultHandler)); - - // exclude these layers - var excludeLayersXML:XMLList = configXML.excludelayer as XMLList; - for (var i:int = 0; i < excludeLayersXML.length(); i++) - { - excludeLayers.push(excludeLayersXML[i].toString()); - } - - outputFileName = (configXML.outputfilename[0] || "extractedData") + ".zip"; - outputFileName = outputFileName.replace(/(\\|\/|:|\?|"|<|>|\|)/g, ""); //strip illegal characters - - graphicsLayer.name = configXML.layername || widgetTitle; - - //labels - descLabel = configXML.labels.desclabel[0] || getDefaultString("descLabel"); - step1Label = configXML.labels.step1label[0] || getDefaultString("step1Label"); - polygonLabel = configXML.labels.polygonlabel[0] || getDefaultString("drawPolygonLabel"); - freehandPolygonLabel = configXML.labels.freehandpolygonlabel[0] || getDefaultString("drawFreehandPolygonLabel"); - rectangleLabel = configXML.labels.rectanglelabel[0] || getDefaultString("drawRectangleLabel"); - circleLabel = configXML.labels.circlelabel[0] || getDefaultString("drawCircleLabel"); - ellipseLabel = configXML.labels.ellipselabel[0] || getDefaultString("drawEllipseLabel"); - clearLabel = configXML.labels.clearlabel[0] || getDefaultString("clearLabel"); - dataCurrentExtentLabel = configXML.labels.datacurrentextentlabel[0] || getDefaultString("dataCurrentExtentLabel"); - step2Label = configXML.labels.step2label[0] || getDefaultString("step2Label"); - step3Label = configXML.labels.step3label[0] || getDefaultString("step3Label"); - step4Label = configXML.labels.step4label[0] || getDefaultString("step4Label"); - step5Label = configXML.labels.step5label[0] || getDefaultString("step5Label"); - extractButtonLabel = configXML.labels.extractbuttonlabel[0] || getDefaultString("extractButtonLabel"); - step1ErrorLabel = configXML.labels.step1errorlabel[0] || getDefaultString("step1ErrorLabel"); - step2ErrorLabel = configXML.labels.step2errorlabel[0] || getDefaultString("step2ErrorLabel"); - emptyResultsLabel = configXML.labels.emptyresultslabel[0] || getDefaultString("emptyResultsLabel"); - saveDataFileLabel = configXML.labels.savedatafilelabel[0] || getDefaultString("saveDataFileLabel"); - - initGraphicContextMenu(); - } - AppEvent.addListener(AppEvent.DATA_PUBLISH, viewerContainer_dataPublishHandler); - } - - private function initGraphicContextMenu():void - { - graphicContextMenu = new ContextMenu(); - graphicContextMenu.hideBuiltInItems(); - var menuItem:ContextMenuItem = new ContextMenuItem(clearLabel); - menuItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, menuItem_contextMenuDeleteHandler); - graphicContextMenu.customItems.push(menuItem); - } - - protected function menuItem_contextMenuDeleteHandler(event:ContextMenuEvent):void - { - var graphic:Graphic = event.contextMenuOwner as Graphic; - var graphicsLayer:GraphicsLayer = graphic.graphicsLayer; - graphicsLayer.remove(graphic); - } - - private function callGPService():void - { - var geometries:Array = getInputGeometries(); - - if (geometries) - { - if (needToSimplifyPolygons(geometries)) - { - geometryService.simplify(geometries); - } - else - { - createGPParamsAndExtract(geometries); - } - } - else - { - showError(step1ErrorLabel); - } - } - - private function getInputGeometries():Array - { - var geometries:Array; - - if (useCurrentExtentAsAIO) - { - geometries = [ getMapExtentEnvelope()]; - } - else if (graphicsLayer.numGraphics > 0) - { - var graphics:Array = (graphicsLayer.graphicProvider as ArrayCollection).toArray(); - geometries = GraphicUtil.getGeometries(graphics); - } - - return geometries; - } - - private function createGPParamsAndExtract(geometries:Array):void - { - var clipFS:FeatureSet = createClipFeatureSet(geometries); - - if (clipFS) - { - var params:Object; - params = createGPParams(clipFS); - - if (params) - { - setMapNavigation(null, null); - - swfMessage.visible = true; - gp.processSpatialReference = map.spatialReference; - gp.outSpatialReference = map.spatialReference; - - gp.submitJob(params); - } - } - } - - private function needToSimplifyPolygons(geometries:Array):Boolean - { - var hasSelfIntersectingPolygons:Boolean = false; - - for each (var geometry:Geometry in geometries) - { - if (geometry.type == Geometry.POLYGON) - { - if (GeometryUtil.polygonSelfIntersecting(geometry as Polygon)) - { - hasSelfIntersectingPolygons = true; - break; - } - } - } - - return hasSelfIntersectingPolygons; - } - - private function createGPParams(clipFS:FeatureSet):Object - { - var gpParams:Object; - - if (exposeLayers) - { - var layersToClip:Array = []; - for (var i:int = 0; i < layers.length; i++) - { - if (layers.getItemAt(i).selected) - { - layersToClip.push(layers.getItemAt(i).label); - } - } - if (layersToClip.length > 0) - { - gpParams = - { - "Area_of_Interest": clipFS, - "Feature_Format": formatDDL.selectedItem.data, - "Layers_to_Clip": layersToClip - }; - - // add if necessary - if (rasterFormatDDL.visible) - { - gpParams["Raster_Format"] = rasterFormatDDL.selectedItem.data; - } - if (spatialReferenceDDL.visible) - { - gpParams["Spatial_Reference"] = spatialReferenceDDL.selectedItem.data; - } - } - else - { - showError(step2ErrorLabel); - } - } - else - { - gpParams = - { - "Area_of_Interest": clipFS, - "Feature_Format": formatDDL.selectedItem.data - }; - - // add if necessary - if (rasterFormatChoiceListVisible) - { - gpParams["Raster_Format"] = rasterFormatDDL.selectedItem.data; - } - if (spatialReferenceChoiceListVisible) - { - gpParams["Spatial_Reference"] = spatialReferenceDDL.selectedItem.data; - } - } - - return gpParams; - } - - private function createClipFeatureSet(geometries:Array):FeatureSet - { - var clipFS:FeatureSet; - var features:Array = []; - - for each (var geometry:Geometry in geometries) - { - features.push({ geometry: geometry }); - } - - clipFS = new FeatureSet(); - clipFS.spatialReference = map.spatialReference; - clipFS.features = features; - - return clipFS; - } - - private function getMapExtentEnvelope():Polygon - { - //create the extent as a polygon - var mapExtentEnvelope:Polygon = new Polygon(null, map.spatialReference); - mapExtentEnvelope.rings = - [[ - new MapPoint(map.extent.xmin, map.extent.ymin), - new MapPoint(map.extent.xmax, map.extent.ymin), - new MapPoint(map.extent.xmax, map.extent.ymax), - new MapPoint(map.extent.xmin, map.extent.ymax), - new MapPoint(map.extent.xmin, map.extent.ymin) - ]]; - return mapExtentEnvelope; - } - - // - // Draw functions - // - private function activateDrawTool(event:MouseEvent):void - { - addSharedData("Deactivate_DrawTool", null); // to be able to deactivate drawTool on other widgets - - // apply glow - selectedDrawingIcon = FocusableImage(event.currentTarget); - clearSelectionFilter(); - selectedDrawingIcon.filters = [ glowFilter ]; - - finishDrawing = false; - - dataUrl = ""; - var status:String; - var value:String = selectedDrawingIcon.name; - switch (value) - { - case DrawTool.POLYGON: - { - status = polygonLabel; - break; - } - case DrawTool.FREEHAND_POLYGON: - { - status = freehandPolygonLabel; - break; - } - case DrawTool.EXTENT: - { - status = rectangleLabel; - break; - } - case DrawTool.CIRCLE: - { - status = circleLabel; - break; - } - case DrawTool.ELLIPSE: - { - status = ellipseLabel; - break; - } - } - drawSymbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID, 0x3FAFDC, 0.5, new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, 0x3FAFDC, 1, 2)); - setMapAction(value, status, drawSymbol, map_drawEndHandler); - } - - private function clearSelectionFilter():void - { - for (var i:int = 0; i < aioBox.numChildren; i++) - { - if (aioBox.getChildAt(i).filters && aioBox.getChildAt(i).filters.length > 0) - { - if (!(selectedDrawingIcon && aioBox.getChildAt(i) === selectedDrawingIcon)) - { - aioBox.getChildAt(i).filters = []; - } - } - } - } - - private function onTurnOnNav():void - { - setMapNavigation(NavigationTool.PAN, "Pan Map"); - } - - private function clear():void - { - onTurnOnNav(); - graphicsLayer.clear(); - } - - private function viewerContainer_dataPublishHandler(event:AppEvent):void - { - var data:Object = event.data; - - if (data.key == "Deactivate_DrawTool") - { - setMapAction(null, null, null, null); - if (selectedDrawingIcon) - { - selectedDrawingIcon.filters = []; - selectedDrawingIcon = null; - } - } - } - - private function wTemplate_closedHandler(event:Event):void - { - graphicsLayer.visible = false; - - setMapAction(null, null, null, null); // deactivate drawTool - if (selectedDrawingIcon) - { - selectedDrawingIcon.filters = []; - selectedDrawingIcon = null; - } - } - - private function wTemplate_openHandler(event:Event):void - { - if (graphicsLayer) - { - graphicsLayer.visible = true; - } - } - - private function wTemplate_minimizedHandler(event:Event):void - { - graphicsLayer.visible = false; - } - - private function icon_rollOverHandler(event:MouseEvent):void - { - clearSelectionFilter(); - event.target.filters = [ glowFilter ]; - } - - private function icon_rollOutHandler(event:MouseEvent):void - { - clearSelectionFilter(); - } - - private function map_drawEndHandler(event:DrawEvent):void - { - // deactivate the draw tool - finishDrawing = true; - - selectedDrawingIcon = null; - clearSelectionFilter(); - - onTurnOnNav(); - - var graphic:Graphic = event.graphic; - graphic.contextMenu = graphicContextMenu; - - if (graphic.geometry is Extent) - { - // convert extent to a polygon - const extent:Extent = Extent(graphic.geometry); - var extentPolygon:Polygon = new Polygon(null, map.spatialReference); - extentPolygon.rings = [[ - new MapPoint(extent.xmin, extent.ymin), - new MapPoint(extent.xmax, extent.ymin), - new MapPoint(extent.xmax, extent.ymax), - new MapPoint(extent.xmin, extent.ymax), - new MapPoint(extent.xmin, extent.ymin) - ]]; - graphic.geometry = extentPolygon; - } - graphic.symbol = drawSymbol; - - // add graphic to the graphics layer - graphicsLayer.add(graphic); - } - - private function gp_jobCompleteHandler(event:GeoprocessorEvent):void - { - swfMessage.visible = false; - if (event.jobInfo.jobStatus == JobInfo.STATUS_SUCCEEDED) - { - gp.getResultData(gp.submitJobLastResult.jobId, - "Output_Zip_File"); // parameterName - } - else - { - var msg:String = getDefaultString("problemLabel") + "\n\n\n" + event.jobInfo.jobStatus; - if (event.jobInfo.messages) - { - msg += "\n\n\n" + GPMessage(event.jobInfo.messages[event.jobInfo.messages.length - 1]).description; - } - showError(msg); - } - } - - private function gp_getResultDataCompleteHandler(event:GeoprocessorEvent):void - { - if (event.parameterValue) - { - dataUrl = String(event.parameterValue.value.url); - if (!dataUrl) - { - showError(emptyResultsLabel); - return; - } - - Alert.show(saveDataFileLabel, wTemplate.widgetTitle, Alert.YES | Alert.NO, null, alert_ClickHandler); - } - else - { - showError(emptyResultsLabel); - } - } - - // Event handler function for displaying the selected Alert button. - private function alert_ClickHandler(event:CloseEvent):void - { - if (event.detail == Alert.YES) - { - downloadFile(dataUrl); - } - } - - private function downloadFile(url:String):void - { - var downloadURL:URLRequest = new URLRequest(); - downloadURL.url = url; - file = new FileReference(); - // TODO: can we be smarter with the name of the zip file? For example, for single layers, using a modified layer name? - file.download(downloadURL, outputFileName); - } - - private function gp_faultHandler(event:FaultEvent):void - { - swfMessage.visible = false; - var msg:String = getDefaultString("problemLabel") + "\n\n\n" + event.fault.faultString; - showError(msg); - } - - private function gpService_resultHandler(serviceProperties:Object, token:Object = null):void - { - var params:Array = serviceProperties.parameters; - rasterFormatChoiceListVisible = false; - spatialReferenceChoiceListVisible = false; - for (var i:int = 0; i < params.length; i++) - { - if (params[i].name == "Layers_to_Clip") - { - layers = new ArrayCollection(); - exposeLayers = true; - for each (var layer:Object in params[i].choiceList) - { - if (excludeLayers.indexOf(layer) == -1) - { - var obj:Object = { label: layer, selected: false }; - layers.addItem(obj); - } - } - } - if (params[i].name == "Feature_Format") - { - formatChoiceList = new ArrayCollection(); - for each (var format:String in params[i].choiceList) - { - const fileLabel:String = format.substring(0, format.indexOf("-") - 1); - const fileExtension:String = format.substring(format.lastIndexOf("."), format.length); - formatChoiceList.addItem({ data: format, label: fileLabel + " (" + fileExtension + ")" }); - } - } - - if (params[i].name == "Raster_Format") - { - rasterFormatChoiceListVisible = true; - rasterFormatChoiceList = new ArrayCollection(); - for each (var rasterFormat:String in params[i].choiceList) - { - const fileLabel1:String = rasterFormat.substring(0, rasterFormat.indexOf("-") - 1); - const fileExtension1:String = rasterFormat.substring(rasterFormat.lastIndexOf("."), rasterFormat.length); - rasterFormatChoiceList.addItem({ data: rasterFormat, label: fileLabel1 + " (" + fileExtension1 + ")" }); - } - } - if (params[i].name == "Spatial_Reference") - { - spatialReferenceChoiceListVisible = true; - spatialReferenceChoiceList = new ArrayCollection(); - for each (var spatialReferenceString:String in params[i].choiceList) - { - spatialReferenceChoiceList.addItem({ data: spatialReferenceString, label: spatialReferenceString }); - } - } - } - - checkBoxDG.dataProvider = layers; - formatDDL.dataProvider = formatChoiceList; - rasterFormatDDL.dataProvider = rasterFormatChoiceList; - spatialReferenceDDL.dataProvider = spatialReferenceChoiceList; - } - - private function gpService_faultHandler(fault:Fault, token:Object = null):void - { - var msg:String = getDefaultString("gpServiceConnectionError", - gp.url, - ErrorMessageUtil.getKnownErrorCauseMessage(fault), - ErrorMessageUtil.makeHTMLSafe(fault.toString())); - showError(msg); - widgetVBox.enabled = false; - } - - private function geometryService_faultHandler(event:FaultEvent):void - { - showError(event.fault.toString()); - } - - private function geometryService_simplifyHandler(event:GeometryServiceEvent):void - { - createGPParamsAndExtract(event.result as Array); - } - ]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + 0) + { + useProxy = configXML.useproxy == "true"; + } + + gpService = new JSONTask(); + gpService.url = gpURL; + if (useProxy && configData.proxyUrl) + { + gpService.proxyURL = configData.proxyUrl; + gp.proxyURL = configData.proxyUrl; + } + + var urlVars:URLVariables = new URLVariables(); + urlVars.f = "json"; + + //Call gpService to get service properties + gpService.execute(urlVars, new AsyncResponder(gpService_resultHandler, gpService_faultHandler)); + + // exclude these layers + var excludeLayersXML:XMLList = configXML.excludelayer as XMLList; + for (var i:int = 0; i < excludeLayersXML.length(); i++) + { + excludeLayers.push(excludeLayersXML[i].toString()); + } + + outputFileName = (configXML.outputfilename[0] || "extractedData") + ".zip"; + outputFileName = outputFileName.replace(/(\\|\/|:|\?|"|<|>|\|)/g, ""); //strip illegal characters + + graphicsLayer.name = configXML.layername || widgetTitle; + + //labels + descLabel = configXML.labels.desclabel[0] || getDefaultString("descLabel"); + step1Label = configXML.labels.step1label[0] || getDefaultString("step1Label"); + polygonLabel = configXML.labels.polygonlabel[0] || getDefaultString("drawPolygonLabel"); + freehandPolygonLabel = configXML.labels.freehandpolygonlabel[0] || getDefaultString("drawFreehandPolygonLabel"); + rectangleLabel = configXML.labels.rectanglelabel[0] || getDefaultString("drawRectangleLabel"); + circleLabel = configXML.labels.circlelabel[0] || getDefaultString("drawCircleLabel"); + ellipseLabel = configXML.labels.ellipselabel[0] || getDefaultString("drawEllipseLabel"); + clearLabel = configXML.labels.clearlabel[0] || getDefaultString("clearLabel"); + dataCurrentExtentLabel = configXML.labels.datacurrentextentlabel[0] || getDefaultString("dataCurrentExtentLabel"); + step2Label = configXML.labels.step2label[0] || getDefaultString("step2Label"); + step3Label = configXML.labels.step3label[0] || getDefaultString("step3Label"); + step4Label = configXML.labels.step4label[0] || getDefaultString("step4Label"); + step5Label = configXML.labels.step5label[0] || getDefaultString("step5Label"); + extractButtonLabel = configXML.labels.extractbuttonlabel[0] || getDefaultString("extractButtonLabel"); + step1ErrorLabel = configXML.labels.step1errorlabel[0] || getDefaultString("step1ErrorLabel"); + step2ErrorLabel = configXML.labels.step2errorlabel[0] || getDefaultString("step2ErrorLabel"); + emptyResultsLabel = configXML.labels.emptyresultslabel[0] || getDefaultString("emptyResultsLabel"); + saveDataFileLabel = configXML.labels.savedatafilelabel[0] || getDefaultString("saveDataFileLabel"); + + initGraphicContextMenu(); + } + AppEvent.addListener(AppEvent.DATA_PUBLISH, viewerContainer_dataPublishHandler); + } + + private function initGraphicContextMenu():void + { + graphicContextMenu = new ContextMenu(); + graphicContextMenu.hideBuiltInItems(); + var menuItem:ContextMenuItem = new ContextMenuItem(clearLabel); + menuItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, menuItem_contextMenuDeleteHandler); + graphicContextMenu.customItems.push(menuItem); + } + + protected function menuItem_contextMenuDeleteHandler(event:ContextMenuEvent):void + { + var graphic:Graphic = event.contextMenuOwner as Graphic; + var graphicsLayer:GraphicsLayer = graphic.graphicsLayer; + graphicsLayer.remove(graphic); + } + + private function callGPService():void + { + var geometries:Array = getInputGeometries(); + + if (geometries) + { + if (needToSimplifyPolygons(geometries)) + { + geometryService.simplify(geometries); + } + else + { + createGPParamsAndExtract(geometries); + } + } + else + { + showError(step1ErrorLabel); + } + } + + private function getInputGeometries():Array + { + var geometries:Array; + + if (useCurrentExtentAsAIO) + { + geometries = [ getMapExtentEnvelope()]; + } + else if (graphicsLayer.numGraphics > 0) + { + var graphics:Array = (graphicsLayer.graphicProvider as ArrayCollection).toArray(); + geometries = GraphicUtil.getGeometries(graphics); + } + + return geometries; + } + + private function createGPParamsAndExtract(geometries:Array):void + { + var clipFS:FeatureSet = createClipFeatureSet(geometries); + + if (clipFS) + { + var params:Object; + params = createGPParams(clipFS); + + if (params) + { + setMapNavigation(null, null); + + swfMessage.visible = true; + gp.processSpatialReference = map.spatialReference; + gp.outSpatialReference = map.spatialReference; + + gp.submitJob(params); + } + } + } + + private function needToSimplifyPolygons(geometries:Array):Boolean + { + var hasSelfIntersectingPolygons:Boolean = false; + + for each (var geometry:Geometry in geometries) + { + if (geometry.type == Geometry.POLYGON) + { + if (GeometryUtil.polygonSelfIntersecting(geometry as Polygon)) + { + hasSelfIntersectingPolygons = true; + break; + } + } + } + + return hasSelfIntersectingPolygons; + } + + private function createGPParams(clipFS:FeatureSet):Object + { + var gpParams:Object; + + if (exposeLayers) + { + var layersToClip:Array = []; + for (var i:int = 0; i < layers.length; i++) + { + if (layers.getItemAt(i).selected) + { + layersToClip.push(layers.getItemAt(i).label); + } + } + if (layersToClip.length > 0) + { + gpParams = + { + "Area_of_Interest": clipFS, + "Feature_Format": formatDDL.selectedItem.data, + "Layers_to_Clip": layersToClip + }; + + // add if necessary + if (rasterFormatDDL.visible) + { + gpParams["Raster_Format"] = rasterFormatDDL.selectedItem.data; + } + if (spatialReferenceDDL.visible) + { + gpParams["Spatial_Reference"] = spatialReferenceDDL.selectedItem.data; + } + } + else + { + showError(step2ErrorLabel); + } + } + else + { + gpParams = + { + "Area_of_Interest": clipFS, + "Feature_Format": formatDDL.selectedItem.data + }; + + // add if necessary + if (rasterFormatChoiceListVisible) + { + gpParams["Raster_Format"] = rasterFormatDDL.selectedItem.data; + } + if (spatialReferenceChoiceListVisible) + { + gpParams["Spatial_Reference"] = spatialReferenceDDL.selectedItem.data; + } + } + + return gpParams; + } + + private function createClipFeatureSet(geometries:Array):FeatureSet + { + var clipFS:FeatureSet; + var features:Array = []; + + for each (var geometry:Geometry in geometries) + { + features.push({ geometry: geometry }); + } + + clipFS = new FeatureSet(); + clipFS.spatialReference = map.spatialReference; + clipFS.features = features; + + return clipFS; + } + + private function getMapExtentEnvelope():Polygon + { + //create the extent as a polygon + var mapExtentEnvelope:Polygon = new Polygon(null, map.spatialReference); + mapExtentEnvelope.rings = + [[ + new MapPoint(map.extent.xmin, map.extent.ymin), + new MapPoint(map.extent.xmax, map.extent.ymin), + new MapPoint(map.extent.xmax, map.extent.ymax), + new MapPoint(map.extent.xmin, map.extent.ymax), + new MapPoint(map.extent.xmin, map.extent.ymin) + ]]; + return mapExtentEnvelope; + } + + // + // Draw functions + // + private function activateDrawTool(event:MouseEvent):void + { + addSharedData("Deactivate_DrawTool", null); // to be able to deactivate drawTool on other widgets + + // apply glow + selectedDrawingIcon = FocusableImage(event.currentTarget); + clearSelectionFilter(); + selectedDrawingIcon.filters = [ glowFilter ]; + + finishDrawing = false; + + dataUrl = ""; + var status:String; + var value:String = selectedDrawingIcon.name; + switch (value) + { + case DrawTool.POLYGON: + { + status = polygonLabel; + break; + } + case DrawTool.FREEHAND_POLYGON: + { + status = freehandPolygonLabel; + break; + } + case DrawTool.EXTENT: + { + status = rectangleLabel; + break; + } + case DrawTool.CIRCLE: + { + status = circleLabel; + break; + } + case DrawTool.ELLIPSE: + { + status = ellipseLabel; + break; + } + } + drawSymbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID, 0x3FAFDC, 0.5, new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, 0x3FAFDC, 1, 2)); + setMapAction(value, status, drawSymbol, map_drawEndHandler); + } + + private function clearSelectionFilter():void + { + for (var i:int = 0; i < aioBox.numChildren; i++) + { + if (aioBox.getChildAt(i).filters && aioBox.getChildAt(i).filters.length > 0) + { + if (!(selectedDrawingIcon && aioBox.getChildAt(i) === selectedDrawingIcon)) + { + aioBox.getChildAt(i).filters = []; + } + } + } + } + + private function onTurnOnNav():void + { + setMapNavigation(NavigationTool.PAN, "Pan Map"); + } + + private function clear():void + { + onTurnOnNav(); + graphicsLayer.clear(); + } + + private function viewerContainer_dataPublishHandler(event:AppEvent):void + { + var data:Object = event.data; + + if (data.key == "Deactivate_DrawTool") + { + setMapAction(null, null, null, null); + if (selectedDrawingIcon) + { + selectedDrawingIcon.filters = []; + selectedDrawingIcon = null; + } + } + } + + private function wTemplate_closedHandler(event:Event):void + { + graphicsLayer.visible = false; + + setMapAction(null, null, null, null); // deactivate drawTool + if (selectedDrawingIcon) + { + selectedDrawingIcon.filters = []; + selectedDrawingIcon = null; + } + } + + private function wTemplate_openHandler(event:Event):void + { + if (graphicsLayer) + { + graphicsLayer.visible = true; + } + } + + private function wTemplate_minimizedHandler(event:Event):void + { + graphicsLayer.visible = false; + } + + private function icon_rollOverHandler(event:MouseEvent):void + { + clearSelectionFilter(); + event.target.filters = [ glowFilter ]; + } + + private function icon_rollOutHandler(event:MouseEvent):void + { + clearSelectionFilter(); + } + + private function map_drawEndHandler(event:DrawEvent):void + { + // deactivate the draw tool + finishDrawing = true; + + selectedDrawingIcon = null; + clearSelectionFilter(); + + onTurnOnNav(); + + var graphic:Graphic = event.graphic; + graphic.contextMenu = graphicContextMenu; + + if (graphic.geometry is Extent) + { + // convert extent to a polygon + const extent:Extent = Extent(graphic.geometry); + var extentPolygon:Polygon = new Polygon(null, map.spatialReference); + extentPolygon.rings = [[ + new MapPoint(extent.xmin, extent.ymin), + new MapPoint(extent.xmax, extent.ymin), + new MapPoint(extent.xmax, extent.ymax), + new MapPoint(extent.xmin, extent.ymax), + new MapPoint(extent.xmin, extent.ymin) + ]]; + graphic.geometry = extentPolygon; + } + graphic.symbol = drawSymbol; + + // add graphic to the graphics layer + graphicsLayer.add(graphic); + } + + private function gp_jobCompleteHandler(event:GeoprocessorEvent):void + { + swfMessage.visible = false; + if (event.jobInfo.jobStatus == JobInfo.STATUS_SUCCEEDED) + { + gp.getResultData(gp.submitJobLastResult.jobId, + "Output_Zip_File"); // parameterName + } + else + { + var msg:String = getDefaultString("problemLabel") + "\n\n\n" + event.jobInfo.jobStatus; + if (event.jobInfo.messages) + { + msg += "\n\n\n" + GPMessage(event.jobInfo.messages[event.jobInfo.messages.length - 1]).description; + } + showError(msg); + } + } + + private function gp_getResultDataCompleteHandler(event:GeoprocessorEvent):void + { + if (event.parameterValue) + { + dataUrl = String(event.parameterValue.value.url); + if (!dataUrl) + { + showError(emptyResultsLabel); + return; + } + + Alert.show(saveDataFileLabel, wTemplate.widgetTitle, Alert.YES | Alert.NO, null, alert_ClickHandler); + } + else + { + showError(emptyResultsLabel); + } + } + + // Event handler function for displaying the selected Alert button. + private function alert_ClickHandler(event:CloseEvent):void + { + if (event.detail == Alert.YES) + { + downloadFile(dataUrl); + } + } + + private function downloadFile(url:String):void + { + var downloadURL:URLRequest = new URLRequest(); + downloadURL.url = url; + file = new FileReference(); + // TODO: can we be smarter with the name of the zip file? For example, for single layers, using a modified layer name? + file.download(downloadURL, outputFileName); + } + + private function gp_faultHandler(event:FaultEvent):void + { + swfMessage.visible = false; + var msg:String = getDefaultString("problemLabel") + "\n\n\n" + event.fault.faultString; + showError(msg); + } + + private function gpService_resultHandler(serviceProperties:Object, token:Object = null):void + { + var params:Array = serviceProperties.parameters; + rasterFormatChoiceListVisible = false; + spatialReferenceChoiceListVisible = false; + for (var i:int = 0; i < params.length; i++) + { + if (params[i].name == "Layers_to_Clip") + { + layers = new ArrayCollection(); + exposeLayers = true; + for each (var layer:Object in params[i].choiceList) + { + if (excludeLayers.indexOf(layer) == -1) + { + var obj:Object = { label: layer, selected: false }; + layers.addItem(obj); + } + } + } + if (params[i].name == "Feature_Format") + { + formatChoiceList = new ArrayCollection(); + for each (var format:String in params[i].choiceList) + { + const fileLabel:String = format.substring(0, format.indexOf("-") - 1); + const fileExtension:String = format.substring(format.lastIndexOf("."), format.length); + formatChoiceList.addItem({ data: format, label: fileLabel + " (" + fileExtension + ")" }); + } + } + + if (params[i].name == "Raster_Format") + { + rasterFormatChoiceListVisible = true; + rasterFormatChoiceList = new ArrayCollection(); + for each (var rasterFormat:String in params[i].choiceList) + { + const fileLabel1:String = rasterFormat.substring(0, rasterFormat.indexOf("-") - 1); + const fileExtension1:String = rasterFormat.substring(rasterFormat.lastIndexOf("."), rasterFormat.length); + rasterFormatChoiceList.addItem({ data: rasterFormat, label: fileLabel1 + " (" + fileExtension1 + ")" }); + } + } + if (params[i].name == "Spatial_Reference") + { + spatialReferenceChoiceListVisible = true; + spatialReferenceChoiceList = new ArrayCollection(); + for each (var spatialReferenceString:String in params[i].choiceList) + { + spatialReferenceChoiceList.addItem({ data: spatialReferenceString, label: spatialReferenceString }); + } + } + } + + checkBoxDG.dataProvider = layers; + formatDDL.dataProvider = formatChoiceList; + rasterFormatDDL.dataProvider = rasterFormatChoiceList; + spatialReferenceDDL.dataProvider = spatialReferenceChoiceList; + } + + private function gpService_faultHandler(fault:Fault, token:Object = null):void + { + var msg:String = getDefaultString("gpServiceConnectionError", + gp.url, + ErrorMessageUtil.getKnownErrorCauseMessage(fault), + ErrorMessageUtil.makeHTMLSafe(fault.toString())); + showError(msg); + widgetVBox.enabled = false; + } + + private function geometryService_faultHandler(event:FaultEvent):void + { + showError(event.fault.toString()); + } + + private function geometryService_simplifyHandler(event:GeometryServiceEvent):void + { + createGPParamsAndExtract(event.result as Array); + } + ]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/widgets/DataExtract/DataExtractWidget.xml b/src/widgets/DataExtract/DataExtractWidget.xml index 9a2d44d..d165e02 100644 --- a/src/widgets/DataExtract/DataExtractWidget.xml +++ b/src/widgets/DataExtract/DataExtractWidget.xml @@ -1,19 +1,19 @@ - - - - http://sampleserver4.arcgisonline.com/ArcGIS/rest/services/HomelandSecurity/Incident_Data_Extraction/GPServer/Extract%20Data%20Task - draw - - - + + + + http://sampleserver4.arcgisonline.com/ArcGIS/rest/services/HomelandSecurity/Incident_Data_Extraction/GPServer/Extract%20Data%20Task + draw + + + diff --git a/src/widgets/Draw/DrawWidget.mxml b/src/widgets/Draw/DrawWidget.mxml index c7d4844..51fca10 100644 --- a/src/widgets/Draw/DrawWidget.mxml +++ b/src/widgets/Draw/DrawWidget.mxml @@ -1,1946 +1,1946 @@ - - - - - 0) - { - var dName:String; - var dAbbr:String; - var dConversion:Number; - - configDistance = new ArrayList(); - for (var i:int = 0; i < distanceList.length(); i++) - { - if (distanceList[i].@id[0]) - { - const distanceListId:String = distanceList[i].@id; - switch (distanceListId) - { - case "ft": - { - dName = getDefaultString("unitsFeet"); - dAbbr = getDefaultString('unitsFeetAbbr'); - dConversion = 3.2808; - break; - } - case "km": - { - dName = getDefaultString("unitsKilometers"); - dAbbr = getDefaultString("unitsKilometersAbbr"); - dConversion = 0.001; - break; - } - case "m": - { - dName = getDefaultString("unitsMeters"); - dAbbr = getDefaultString("unitsMetersAbbr"); - dConversion = 1; - break; - } - case "mi": - { - dName = getDefaultString("unitsMiles"); - dAbbr = getDefaultString("unitsMilesAbbr"); - dConversion = 0.000621; - break; - } - case "yd": - { - dName = getDefaultString('unitsYards'); - dAbbr = getDefaultString('unitsYardsAbbr'); - dConversion = 1.0936133; - break; - } - } - } - else - { - dName = distanceList[i]; - dAbbr = distanceList[i].@abbr; - dConversion = Number(distanceList[i].@conversion); - } - var dUnit:Object = { - name: dName, - abbr: dAbbr, - conversion: dConversion - }; - configDistance.addItem(dUnit); - } - cboDistance.dataProvider = configDistance; - } - - // area units - var areaList:XMLList = configXML..areaunit; - if (areaList.length() > 0) - { - var aName:String; - var aAbbr:String; - var aConversion:Number; - - configArea = new ArrayList(); - for (var j:int = 0; j < areaList.length(); j++) - { - if (areaList[j].@id[0]) - { - const areaListId:String = areaList[j].@id; - switch (areaListId) - { - case "ac": - { - aName = getDefaultString("unitsAcres"); - aAbbr = getDefaultString("unitsAcresAbbr"); - aConversion = 0.00024710538147; - break; - } - case "ha": - { - aName = getDefaultString("unitsHectares"); - aAbbr = getDefaultString("unitsHectaresAbbr"); - aConversion = 0.0001; - break; - } - case "sq ft": - { - aName = getDefaultString("unitsSquareFeet"); - aAbbr = getDefaultString("unitsSquareFeetAbbr"); - aConversion = 10.763910417; - break; - } - case "sq km": - { - aName = getDefaultString("unitsSquareKilometers"); - aAbbr = getDefaultString("unitsSquareKilometersAbbr"); - aConversion = 0.000001; - break; - } - case "sq m": - { - aName = getDefaultString("unitsSquareMeters"); - aAbbr = getDefaultString("unitsSquareMetersAbbr"); - aConversion = 1; - break; - } - case "sq mi": - { - aName = getDefaultString("unitsSquareMiles"); - aAbbr = getDefaultString("unitsSquareMilesAbbr"); - aConversion = 0.0000003861021; - break; - } - case "sq yd": - { - aName = getDefaultString("unitsSquareYards"); - aAbbr = getDefaultString("unitsSquareYardsAbbr"); - aConversion = 1.19599005; - break; - } - } - } - else - { - aName = areaList[j]; - aAbbr = areaList[j].@abbr; - aConversion = Number(areaList[j].@conversion); - } - var aUnit:Object = { - name: aName, - abbr: aAbbr, - conversion: aConversion - }; - configArea.addItem(aUnit); - } - cboArea.dataProvider = configArea; - } - } - AppEvent.addListener(AppEvent.DATA_PUBLISH, sharedDataUpdated); - } - - private function initializeFontList():void - { - fontList = new ArrayList(prioritizeFontNames(getAvailableFontNames(), - defaultFontNames)); - } - - private function getAvailableFontNames():Array - { - var availableFonts:Array = Font.enumerateFonts(true); - var allFontNames:Array = []; - - for each (var font:Font in availableFonts) - { - allFontNames.push(font.fontName); - } - - const localeBasedSorter:Sort = new Sort(); - localeBasedSorter.setStyle('locale', resourceManager.localeChain[0]); - localeBasedSorter.sort(allFontNames); - - return allFontNames; - } - - public function get defaultFontNames():Array - { - var fontNames:Array = [ getDefaultString('textFont1'), - getDefaultString('textFont2'), - getDefaultString('textFont3'), - getDefaultString('textFont4'), - getDefaultString('textFont5'), - getDefaultString('textFont6')]; - - return fontNames.filter(validFontName); - } - - private function validFontName(fontName:String, index:int, array:Array):Boolean - { - return Boolean(fontName); - } - - private function prioritizeFontNames(fontNames:Array, preferredFontNames:Array):Array - { - var prioritizedFontNames:Array = preferredFontNames.concat(); - var isFontNameUnique:Boolean; - - for each (var fontName:String in fontNames) - { - isFontNameUnique = (preferredFontNames.indexOf(fontName) == -1); - if (isFontNameUnique) - { - prioritizedFontNames.push(fontName); - } - } - - return prioritizedFontNames; - } - - private function sharedDataUpdated(event:AppEvent):void - { - var data:Object = event.data; - - if (data.key == "Deactivate_DrawTool") - { - setMapAction(null, null, null, null); - editTool.deactivate(); - if (selectedDrawingIcon) - { - selectedDrawingIcon.filters = []; - selectedDrawingIcon = null; - } - } - } - - private function activateDrawTool(event:MouseEvent):void - { - addSharedData("Deactivate_DrawTool", null); // to be able to deactivate drawTool on other widgets - editTool.deactivate(); - lastActiveEditType = "none"; - - // apply glow - selectedDrawingIcon = FocusableImage(event.currentTarget); - clearSelectionFilter(); - selectedDrawingIcon.filters = [ glowFilter ]; - - frmDraw.visible = true; - showMeasurements = false; - isEditing = false; - drawType = selectedDrawingIcon.name; - switch (drawType) - { - case DrawTool.MAPPOINT: - { - drawingPolygon = drawingLine = false; - addingText = selectedDrawingIcon.id == "text"; - drawingPoint = !addingText; - - drawMode = addingText ? TEXT_MODE : null; - drawStatus = (drawMode == TEXT_MODE) ? addTextLabel : drawPointLabel; - setMapAction(drawType, drawStatus, null, map_drawEndHandler); - break; - } - case DrawTool.POLYLINE: - { - drawingPoint = addingText = drawingPolygon = false; - drawingLine = true; - showMeasurements = true; - - drawStatus = drawLineLabel; - setMapAction(drawType, drawStatus, lineSymbol, map_drawEndHandler, map_drawUpdateHandler, false, false); - break; - } - case DrawTool.FREEHAND_POLYLINE: - { - drawingPoint = addingText = drawingPolygon = false; - drawingLine = true; - showMeasurements = true; - - drawStatus = drawFreehandLineLabel; - setMapAction(drawType, drawStatus, lineSymbol, map_drawEndHandler, map_drawUpdateHandler, false, false); - break; - } - case DrawTool.EXTENT: - { - addingText = drawingPoint = drawingLine = false; - drawingPolygon = true; - showMeasurements = true; - - drawStatus = drawRectangleLabel; - setMapAction(drawType, drawStatus, fillSymbol, map_drawEndHandler, map_drawUpdateHandler, false, false); - break; - } - case DrawTool.CIRCLE: - { - addingText = drawingPoint = drawingLine = false; - drawingPolygon = true; - showMeasurements = true; - - drawStatus = drawCircleLabel; - setMapAction(drawType, drawStatus, fillSymbol, map_drawEndHandler, map_drawUpdateHandler, false, false); - break; - } - case DrawTool.ELLIPSE: - { - addingText = drawingPoint = drawingLine = false; - drawingPolygon = true; - showMeasurements = true; - - drawStatus = drawEllipseLabel; - setMapAction(drawType, drawStatus, fillSymbol, map_drawEndHandler, map_drawUpdateHandler, false, false); - break; - } - case DrawTool.POLYGON: - { - addingText = drawingPoint = drawingLine = false; - drawingPolygon = true; - showMeasurements = true; - - drawStatus = drawPolygonLabel; - setMapAction(drawType, drawStatus, fillSymbol, map_drawEndHandler, map_drawUpdateHandler, false, false); - break; - } - case DrawTool.FREEHAND_POLYGON: - { - addingText = drawingPoint = drawingLine = false; - drawingPolygon = true; - showMeasurements = true; - - drawStatus = drawFreehandPolygonLabel; - setMapAction(drawType, drawStatus, fillSymbol, map_drawEndHandler, map_drawUpdateHandler, false, false); - break; - } - } - } - - private function clear():void - { - graphicsLayer.clear(); - editTool.deactivate(); - updateHasDrawnGraphics(); - clearGraphicToMeasurementGraphic(); - } - - private function updateHasDrawnGraphics():void - { - hasDrawnGraphics = graphicsLayer.numGraphics > 0; - } - - private function clearGraphicToMeasurementGraphic():void - { - for (var key:Object in graphicToMeasurementGraphic) - { - delete graphicToMeasurementGraphic[key]; - } - } - - private function clearSelectionFilter():void - { - for (var i:int = 0; i < drawImageGroup.numChildren; i++) - { - if (drawImageGroup.getChildAt(i).filters && drawImageGroup.getChildAt(i).filters.length > 0) - { - if (!(selectedDrawingIcon && drawImageGroup.getChildAt(i) === selectedDrawingIcon)) - { - drawImageGroup.getChildAt(i).filters = []; - } - } - } - } - - private function getMeasurementGraphic(graphic:Graphic):Graphic - { - return graphicToMeasurementGraphic[graphic]; - } - - private function map_drawUpdateHandler(event:DrawEvent):void - { - lastDrawnGraphic = event.graphic; - if (isMeasuringEnabled) - { - if (!lastDrawnGraphic.hasEventListener(GraphicEvent.GRAPHIC_REMOVE)) - { - lastDrawnGraphic.graphicsLayer.addEventListener(GraphicEvent.GRAPHIC_REMOVE, drawnGraphic_graphicRemoveHandler, false, 0, true); - } - measureGraphicClientSide(lastDrawnGraphic); - } - } - - private function drawnGraphic_graphicRemoveHandler(event:GraphicEvent):void - { - const measurementGraphic:Graphic = getMeasurementGraphic(event.graphic); - if (measurementGraphic) - { - graphicsLayer.remove(measurementGraphic); - clearMeasurementGraphic(event.graphic); - } - } - - private function clearMeasurementGraphic(graphic:Graphic):void - { - graphicToMeasurementGraphic[graphic] = null; - } - - private function map_drawEndHandler(event:DrawEvent):void - { - selectedDrawingIcon = null; - clearSelectionFilter(); - event.target.deactivate(); - - lastDrawnGraphic = event.graphic; - - var customContextMenu:ContextMenu = new ContextMenu(); - customContextMenu.hideBuiltInItems(); - var menuItem:ContextMenuItem = new ContextMenuItem(clearFeatureLabel); - menuItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, menuItem_contextMenuDeleteHandler); - customContextMenu.customItems.push(menuItem); - lastDrawnGraphic.contextMenu = customContextMenu; - - lastDrawnGraphic.addEventListener(MouseEvent.CLICK, graphic_clickHandler, false, 0, true); - graphicsLayer.add(lastDrawnGraphic); - - var geom:Geometry = lastDrawnGraphic.geometry; - switch (geom.type) - { - case Geometry.MAPPOINT: - { - if (drawMode == TEXT_MODE) - { - var textSymbol:TextSymbol = new TextSymbol(txtLabel.text); - var txtFormat:TextFormat = new TextFormat(fontNameSelection.selectedItem, numTextSize.value, cpText.selectedColor, bold.selected, italic.selected, underline.selected); - textSymbol.textFormat = txtFormat; - lastDrawnGraphic.symbol = textSymbol; - } - else - { - lastDrawnGraphic.symbol = new SimpleMarkerSymbol(markerStyle.selectedItem.style, numMarkerSize.value, cpMarker.selectedColor, numMarkerAlpha.value, 0, 0, 0, new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, cpMarkerOutline.selectedColor, 1, numMarkerOutlineWidth.value)); - } - break; - } - case Geometry.POLYLINE: - { - lastDrawnGraphic.symbol = new SimpleLineSymbol(lineStyle.selectedItem.style, cpLine.selectedColor, numLineAlpha.value, numLineWidth.value); - if (isMeasuringEnabled) - { - measureGeometry(geom); - } - break; - } - case Geometry.POLYGON: - { - lastDrawnGraphic.symbol = new SimpleFillSymbol(fillStyle.selectedItem.style, cpFill.selectedColor, numFillAlpha.value, new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, cpFillOutline.selectedColor, 1, numFillOutlineWidth.value)); - if (isMeasuringEnabled) - { - var polygon:Polygon = geom as Polygon; - if (GeometryUtil.polygonSelfIntersecting(polygon)) - { - geometryService.simplify([ polygon ]); - } - else - { - measureGeometry(geom); - } - } - break; - } - case Geometry.EXTENT: - { - lastDrawnGraphic.symbol = new SimpleFillSymbol(fillStyle.selectedItem.style, cpFill.selectedColor, numFillAlpha.value, new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, cpFillOutline.selectedColor, 1, numFillOutlineWidth.value)); - if (isMeasuringEnabled) - { - // convert it to a polygon before project for more accururate result - measureGeometry((geom as Extent).toPolygon()); - } - break; - } - } - - updateHasDrawnGraphics(); - moveMeasurementGraphicToTop(lastDrawnGraphic); - } - - private function menuItem_contextMenuDeleteHandler(event:ContextMenuEvent):void - { - const drawnGraphic:Graphic = Graphic(event.contextMenuOwner); - graphicsLayer.remove(drawnGraphic); - // also remove measurement label if any - graphicsLayer.remove(getMeasurementGraphic(drawnGraphic)); - editTool.deactivate(); - updateHasDrawnGraphics(); - } - - private function moveMeasurementGraphicToTop(drawnGraphic:Graphic):void - { - const measurementGraphic:Graphic = getMeasurementGraphic(drawnGraphic); - if (measurementGraphic) - { - measurementGraphic.graphicsLayer.moveToTop(measurementGraphic); - } - } - - private function drawIcon_rollOverHandler(event:MouseEvent):void - { - clearSelectionFilter(); - event.target.filters = [ glowFilter ]; - } - - private function drawIcon_rollOutHandler(event:MouseEvent):void - { - clearSelectionFilter(); - } - - private function graphic_clickHandler(event:MouseEvent):void - { - if (editGraphic !== Graphic(event.currentTarget)) - { - editGraphic = Graphic(event.currentTarget); - lastActiveEditType = "none"; // make sure move and edit vertices is the 1st mode - } - if (editGraphic.geometry is Polyline || editGraphic.geometry is Polygon) - { - if (lastActiveEditType == "none") - { - isEditing = true; - lastActiveEditType = "moveEditVertices"; - editTool.activate(EditTool.MOVE | EditTool.EDIT_VERTICES, [ editGraphic ]); - CursorManager.setCursor(moveCursorIcon, CursorManagerPriority.HIGH, -16, -16); - } - else if (lastActiveEditType == "moveEditVertices") - { - isEditing = true; - lastActiveEditType = "moveRotateScale"; - editTool.activate(EditTool.MOVE | EditTool.SCALE | EditTool.ROTATE, [ editGraphic ]); - CursorManager.setCursor(moveCursorIcon, CursorManagerPriority.HIGH, -16, -16); - } - else if (lastActiveEditType == "moveRotateScale") - { - isEditing = false; - editGraphic = null; - lastActiveEditType = "none"; - editTool.deactivate(); - } - } - else if (editGraphic.geometry is Extent) - { - if (lastActiveEditType == "none") - { - isEditing = true; - lastActiveEditType = "moveScale"; - editTool.activate(EditTool.MOVE | EditTool.SCALE, [ editGraphic ]); - CursorManager.setCursor(moveCursorIcon, CursorManagerPriority.HIGH, -16, -16); - } - else - { - isEditing = false; - editGraphic = null; - lastActiveEditType = "none"; - editTool.deactivate(); - } - } - else - { - if (lastActiveEditType == "none") - { - isEditing = true; - lastActiveEditType = "moveEditVertices"; - editTool.activate(EditTool.EDIT_VERTICES | EditTool.MOVE, [ editGraphic ]); - CursorManager.setCursor(moveCursorIcon, CursorManagerPriority.HIGH, -16, -16); - } - else - { - isEditing = false; - editGraphic = null; - lastActiveEditType = "none"; - editTool.deactivate(); - } - } - - removeEditToolEventListeners(); - map.removeEventListener(MouseEvent.MOUSE_DOWN, map_mouseDownHandler); - - if (editGraphic) - { - addEditToolEventListeners(); - moveMeasurementGraphicToTop(editGraphic); - map.addEventListener(MouseEvent.MOUSE_DOWN, map_mouseDownHandler); - } - } - - private function removeEditToolEventListeners():void - { - editTool.removeEventListener(EditEvent.GRAPHICS_MOVE_START, editTool_editStartHandler); - editTool.removeEventListener(EditEvent.GRAPHIC_SCALE_START, editTool_editStartHandler); - editTool.removeEventListener(EditEvent.GRAPHIC_ROTATE_START, editTool_editStartHandler); - - editTool.removeEventListener(EditEvent.GRAPHIC_ROTATE, editTool_UpdateHandler); - editTool.removeEventListener(EditEvent.GRAPHIC_SCALE, editTool_UpdateHandler); - editTool.removeEventListener(EditEvent.GRAPHICS_MOVE, editTool_UpdateHandler); - editTool.removeEventListener(EditEvent.VERTEX_MOVE, editTool_UpdateHandler); - editTool.removeEventListener(EditEvent.GHOST_VERTEX_MOUSE_MOVE, editTool_UpdateHandler); - - editTool.removeEventListener(EditEvent.VERTEX_ADD, editTool_editStopHandler); - editTool.removeEventListener(EditEvent.VERTEX_DELETE, editTool_editStopHandler); - editTool.removeEventListener(EditEvent.VERTEX_MOVE_STOP, editTool_editStopHandler); - editTool.removeEventListener(EditEvent.GRAPHICS_MOVE_STOP, editTool_editStopHandler); - editTool.removeEventListener(EditEvent.GRAPHIC_ROTATE_STOP, editTool_editStopHandler); - editTool.removeEventListener(EditEvent.GRAPHIC_SCALE_STOP, editTool_editStopHandler); - } - - private function map_mouseDownHandler(event:MouseEvent):void - { - map.removeEventListener(MouseEvent.MOUSE_DOWN, map_mouseDownHandler); - map.addEventListener(MouseEvent.MOUSE_UP, map_mouseUpHandler); - map.addEventListener(MouseEvent.MOUSE_MOVE, map_mouseMoveHandler); - } - - private function map_mouseUpHandler(event:MouseEvent):void - { - if (event.target !== editGraphic) - { - map.removeEventListener(MouseEvent.MOUSE_UP, map_mouseUpHandler); - map.removeEventListener(MouseEvent.MOUSE_MOVE, map_mouseMoveHandler); - - isEditing = false; - editGraphic = null; - lastActiveEditType = "none"; - editTool.deactivate(); - } - } - - private function map_mouseMoveHandler(event:MouseEvent):void - { - map.addEventListener(MouseEvent.MOUSE_DOWN, map_mouseDownHandler); - map.removeEventListener(MouseEvent.MOUSE_UP, map_mouseUpHandler); - map.removeEventListener(MouseEvent.MOUSE_MOVE, map_mouseMoveHandler); - } - - private function addEditToolEventListeners():void - { - editTool.addEventListener(EditEvent.GRAPHICS_MOVE_START, editTool_editStartHandler); - editTool.addEventListener(EditEvent.GRAPHIC_SCALE_START, editTool_editStartHandler); - editTool.addEventListener(EditEvent.GRAPHIC_ROTATE_START, editTool_editStartHandler); - - editTool.addEventListener(EditEvent.GRAPHIC_ROTATE, editTool_UpdateHandler); - editTool.addEventListener(EditEvent.GRAPHIC_SCALE, editTool_UpdateHandler); - editTool.addEventListener(EditEvent.GRAPHICS_MOVE, editTool_UpdateHandler); - editTool.addEventListener(EditEvent.VERTEX_MOVE, editTool_UpdateHandler); - editTool.addEventListener(EditEvent.GHOST_VERTEX_MOUSE_MOVE, editTool_UpdateHandler); - - editTool.addEventListener(EditEvent.VERTEX_ADD, editTool_editStopHandler); - editTool.addEventListener(EditEvent.VERTEX_DELETE, editTool_editStopHandler); - editTool.addEventListener(EditEvent.VERTEX_MOVE_STOP, editTool_editStopHandler); - editTool.addEventListener(EditEvent.GRAPHICS_MOVE_STOP, editTool_editStopHandler); - editTool.addEventListener(EditEvent.GRAPHIC_ROTATE_STOP, editTool_editStopHandler); - editTool.addEventListener(EditEvent.GRAPHIC_SCALE_STOP, editTool_editStopHandler); - } - - private function editTool_editStopHandler(event:EditEvent):void - { - if (!(event.graphic || event.graphics)) - { - return; - } - - var editedGraphic:Graphic = event.graphic ? event.graphic : event.graphics[0]; - - if (map.wrapAround180) - { - normalizeGraphicGeometry(editedGraphic); - } - else if (getMeasurementGraphic(editedGraphic)) - { - recalculate(editedGraphic); - } - } - - private function normalizeGraphicGeometry(graphic:Graphic):void - { - // normalize - GeometryUtil.normalizeCentralMeridian([ graphic.geometry ], GeometryServiceSingleton.instance, new AsyncResponder(getNormalizedGeometryFunction, faultFunction)); - function getNormalizedGeometryFunction(item:Object, token:Object = null):void - { - var normalizedGeometries:Array = item as Array; - graphic.geometry = normalizedGeometries[0]; - isEditing = true; - if (graphic.geometry is Polyline || graphic.geometry is Polygon) - { - if (lastActiveEditType == "moveScale") - { - lastActiveEditType = "moveEditVertices"; // after normalization, if extent crosses the dateline, it is converted to a polygon - } - if (lastActiveEditType == "moveEditVertices") - { - editTool.activate(EditTool.MOVE | EditTool.EDIT_VERTICES, [ graphic ]); - } - else if (lastActiveEditType == "moveRotateScale") - { - editTool.activate(EditTool.MOVE | EditTool.SCALE | EditTool.ROTATE, [ graphic ]); - } - } - else if (graphic.geometry is Extent) - { - if (lastActiveEditType == "moveScale") - { - editTool.activate(EditTool.MOVE | EditTool.SCALE, [ graphic ]); - } - } - else - { - if (lastActiveEditType == "moveEditVertices") - { - editTool.activate(EditTool.EDIT_VERTICES | EditTool.MOVE, [ graphic ]); - } - } - if (getMeasurementGraphic(graphic)) - { - recalculate(graphic); - } - } - function faultFunction(fault:Fault, token:Object = null):void - { - dispatchEvent(new FaultEvent(FaultEvent.FAULT, false, false, fault)); - } - } - - private function recalculate(graphic:Graphic):void - { - measureGeometry(graphic.geometry); - moveMeasurementGraphicToTop(graphic); - } - - private function measureGeometry(geom:Geometry):void - { - var geomSR:SpatialReference = geom.spatialReference; - if (geomSR.wkid == EPSG_GEOGRAPHIC || geomSR.isWebMercator()) - { - calculateAreasAndLengths(geom); - } - else - { - var geographicSpatialReference:SpatialReference = new SpatialReference(EPSG_GEOGRAPHIC); - const projectParameters:ProjectParameters = new ProjectParameters; - projectParameters.geometries = [ geom ]; - projectParameters.outSpatialReference = geographicSpatialReference; - geometryService.project(projectParameters); - } - } - - private function geometryService_projectCompleteHandler(event:GeometryServiceEvent):void - { - var geom:Geometry = (event.result as Array)[0]; - calculateAreasAndLengths(geom); - } - - private function calculateAreasAndLengths(geom:Geometry):void - { - switch (geom.type) - { - case Geometry.POLYLINE: - { - var polyline:Polyline = Polyline(geom); - - const isValidPolyline:Boolean = - polyline.paths - && polyline.paths.length > 0 - && polyline.paths[0].length > 1; - - if (isValidPolyline) - { - calculatePolylineLengths(polyline); - } - break; - } - case Geometry.POLYGON: - { - var polygon:Polygon = Polygon(geom); - - const isValidPolygon:Boolean = - polygon.rings - && polygon.rings.length > 0 - && polygon.rings[0].length > 3; - - if (isValidPolygon) - { - if (polygon && GeometryUtil.polygonSelfIntersecting(polygon)) - { - hideMeasurementLabel(lastDrawnGraphic); - return; - } - - calculatePolygonAreasAndLengths(polygon); - } - break; - } - case Geometry.EXTENT: - { - var extent:Extent = Extent(geom); - calculatePolygonAreasAndLengths(extent.toPolygon()); //convert it to polygon for measurement - break; - } - } - } - - private function calculatePolylineLengths(polyline:Polyline):void - { - var polylineToMeasure:Polyline; - - var lengths:Array; - if (drawType == DrawTool.POLYLINE) - { - var normalizedPolyline:Polyline; - if (map.wrapAround180) - { - GeometryUtil.normalizeCentralMeridian([ polyline ], null, new AsyncResponder(getNormalizedGeometryFunction, null)); - function getNormalizedGeometryFunction(item:Object, token:Object = null):void - { - normalizedPolyline = (item as Array)[0] as Polyline; - } - } - else - { - normalizedPolyline = polyline; - } - polylineToMeasure = getPolylineToMeasure(normalizedPolyline); - - var oldPoints:Array = []; - var newPaths:Array = []; - for each (var path:Array in polylineToMeasure.paths) - { - var newPath:Array = []; - - var p0:MapPoint = path[0]; - newPath.push(p0); - for (var n:int = 1; n < path.length; n++) - { - var pn:MapPoint = path[n]; - - const distance:Number = Math.sqrt(Math.pow(pn.x - p0.x, 2) + Math.pow(pn.y - p0.y, 2)); - const dx:Number = pn.x - p0.x; - const dy:Number = pn.y - p0.y; - for (var k:int = 1; k < distance; k++) - { - const ratio:Number = k / distance; - const newPointX:Number = p0.x + ratio * dx; - const newPointY:Number = p0.y + ratio * dy; - const newMapPoint:MapPoint = new MapPoint(newPointX, newPointY); - newPath.push(newMapPoint); - } - newPath.push(pn); - p0 = pn; - } - newPaths.push(newPath); - } - var newPolyline:Polyline = new Polyline(newPaths); - lengths = GeometryUtil.geodesicLengths([ newPolyline ], Units.METERS); - } - else - { - polylineToMeasure = getPolylineToMeasure(polyline); - lengths = GeometryUtil.geodesicLengths([ polylineToMeasure ], Units.METERS); - } - - var abbrDist:String = cboDistance.selectedItem.abbr; - var convDist:Number = cboDistance.selectedItem.conversion; - var length:Number = lengths[0] * convDist; - - if (length == 0) - { - return; - } - - var label:String = createLengthsLabel(length, abbrDist); - - var graphic:Graphic = isEditing ? editGraphic : lastDrawnGraphic; - addDrawLabel(label, graphic); - updateMeasureLabelPosition(graphic); - } - - private function getPolylineToMeasure(polyline:Polyline):Polyline - { - var result:Polyline; - - var polylineSR:SpatialReference = polyline.spatialReference; - if (polylineSR.wkid == EPSG_GEOGRAPHIC) - { - result = polyline; - } - else if (polylineSR.isWebMercator()) - { - result = WebMercatorUtil.webMercatorToGeographic(polyline) as Polyline; - } - - return result; - } - - private function createLengthsLabel(length:Number, lengthAbbrev:String):String - { - return lengthLabel + " " + numFormatter.format(length) + " " + lengthAbbrev; - } - - private function calculatePolygonAreasAndLengths(polygon:Polygon):void - { - var polygonToMeasure:Polygon; - - var polygonSR:SpatialReference = polygon.spatialReference; - if (polygonSR.wkid == EPSG_GEOGRAPHIC) - { - polygonToMeasure = polygon; - } - else if (polygonSR.isWebMercator()) - { - polygonToMeasure = WebMercatorUtil.webMercatorToGeographic(polygon) as Polygon; - } - - var lengths:Array = GeometryUtil.geodesicLengths([ new Polyline(polygonToMeasure.rings)], Units.METERS); - var areas:Array = GeometryUtil.geodesicAreas([ polygonToMeasure ], Units.SQUARE_METERS); - - var abbrArea:String = cboArea.selectedItem.abbr; - var convArea:Number = cboArea.selectedItem.conversion; - var abbrDist:String = cboDistance.selectedItem.abbr; - var convDist:Number = cboDistance.selectedItem.conversion; - var area:Number = Math.abs(areas[0] * convArea); - var length:Number = lengths[0] * convDist; - - if (area == 0 && length == 0) - { - return; - } - - var label:String = area > 0 ? - createAreasAndLengthsLabel(area, abbrArea, length, abbrDist) : - createLengthsLabel(length, abbrDist); - - var graphic:Graphic = isEditing ? editGraphic : lastDrawnGraphic; - addDrawLabel(label, graphic); - updateMeasureLabelPosition(graphic); - } - - private function createAreasAndLengthsLabel(area:Number, areaAbbrev:String, length:Number, lengthAbbrev:String):String - { - return areaLabel + " " + numFormatter.format(area) + " " + areaAbbrev + - "\n" + perimeterLabel + " " + numFormatter.format(length) + " " + lengthAbbrev; - } - - private function addDrawLabel(label:String, graphic:Graphic):void - { - var measurementGraphic:Graphic = getMeasurementGraphic(graphic); - if (measurementGraphic) - { - (measurementGraphic.symbol as TextSymbol).text = label; - } - else - { - measurementGraphic = new Graphic(measurePt); - if (!measurementGraphic.symbol) - { - var txtSym:TextSymbol = new TextSymbol(label); - txtSym.yoffset = 8; - var txtFormat:TextFormat = new TextFormat("Arial", 12, 0x000000, true); // black label - txtSym.textFormat = txtFormat; - measurementGraphic.symbol = txtSym; - } - - // also remove measurement label if any - measurementGraphic.mouseEnabled = false; - measurementGraphic.mouseChildren = false; - measurementGraphic.filters = [ measurementBorderFilter ]; - graphicsLayer.add(measurementGraphic); - - addMeasurementGraphic(graphic, measurementGraphic); - } - } - - private function addMeasurementGraphic(graphic:Graphic, measurementGraphic:Graphic):void - { - graphicToMeasurementGraphic[graphic] = measurementGraphic; - } - - private function updateMeasureLabelPosition(graphic:Graphic):void - { - var geom:Geometry = graphic.geometry; - - switch (geom.type) - { - case Geometry.POLYLINE: - { - var polyline:Polyline = geom as Polyline; - if (polyline.paths) - { - var polylineExtent:Extent; - if (polyline.paths.length == 1) - { - polylineExtent = polyline.extent; - } - else - { - // Multiple paths, hence show the measurement label at the center of first path - var tempPolyline:Polyline = new Polyline; - tempPolyline.paths = [ polyline.paths[0]]; - polylineExtent = tempPolyline.extent; - } - measurePt = polylineExtent.center; - } - break; - } - case Geometry.POLYGON: - { - var polygon:Polygon = geom as Polygon; - if (polygon.rings) - { - var polygonExtent:Extent; - if (polygon.rings.length == 1) - { - polygonExtent = polygon.extent; - } - else if (polygon.rings.length > 1) - { - // Multiple rings, hence show the measurement label at the center of first ring - var tempPolygon:Polygon = new Polygon; - tempPolygon.rings = [ polygon.rings[0]]; - polygonExtent = tempPolygon.extent; - } - measurePt = polygonExtent.center; - } - break; - } - case Geometry.EXTENT: - { - measurePt = geom.extent.center; - break; - } - } - - var measurementGraphic:Graphic = getMeasurementGraphic(graphic); - if (measurementGraphic) - { - measurementGraphic.geometry = measurePt; - measurementGraphic.visible = true; - } - } - - private function geometryService_simplifyCompleteHandler(event:GeometryServiceEvent):void - { - var polygon:Polygon = event.result[0] as Polygon; - lastDrawnGraphic.geometry = polygon; //update to avoid simplifying again - - measureGeometry(polygon); - } - - private function geometryService_faultHandler(info:Object, token:Object = null):void - { - showError(info.toString()); - } - - private function wTemplate_closeHandler(event:Event):void - { - graphicsLayer.visible = false; - frmDraw.visible = false; - showMeasurements = false; - - setMapAction(null, null, null, null); // deactivate drawTool - - if (selectedDrawingIcon) - { - selectedDrawingIcon.filters = []; - selectedDrawingIcon = null; - } - } - - private function wTemplate_openHandler(event:Event):void - { - if (graphicsLayer) - { - graphicsLayer.visible = true; - } - } - - private function editTool_UpdateHandler(event:EditEvent):void - { - if (!(event.graphic || event.graphics)) - { - return; - } - - var graphicToMeasure:Graphic = event.graphic ? event.graphic : event.graphics[0]; - - if (getMeasurementGraphic(graphicToMeasure)) - { - measureGraphicClientSide(graphicToMeasure); - } - } - - private function measureGraphicClientSide(graphic:Graphic):void - { - const geom:Geometry = graphic.geometry; - if (geom.spatialReference.wkid == EPSG_GEOGRAPHIC - || geom.spatialReference.isWebMercator()) - { - calculateAreasAndLengths(geom); - } - } - - private function hideMeasurementLabel(graphic:Graphic):void - { - graphicToMeasurementGraphic[graphic].visible = false; - } - - protected function editTool_editStartHandler(event:EditEvent):void - { - if (!(event.graphic || event.graphics)) - { - return; - } - - const drawnGraphic:Graphic = event.graphic ? event.graphic : event.graphics[0]; - moveMeasurementGraphicToTop(drawnGraphic); - } - - protected function getLongestString(... rest):String - { - var longest:String = ""; - for (var i:int = 0; i < rest.length; i++) - { - var n:String = getDefaultString(rest[i]); - longest = n.length > longest.length ? n : longest; - } - return longest; - } - ]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + 0) + { + var dName:String; + var dAbbr:String; + var dConversion:Number; + + configDistance = new ArrayList(); + for (var i:int = 0; i < distanceList.length(); i++) + { + if (distanceList[i].@id[0]) + { + const distanceListId:String = distanceList[i].@id; + switch (distanceListId) + { + case "ft": + { + dName = getDefaultString("unitsFeet"); + dAbbr = getDefaultString('unitsFeetAbbr'); + dConversion = 3.2808; + break; + } + case "km": + { + dName = getDefaultString("unitsKilometers"); + dAbbr = getDefaultString("unitsKilometersAbbr"); + dConversion = 0.001; + break; + } + case "m": + { + dName = getDefaultString("unitsMeters"); + dAbbr = getDefaultString("unitsMetersAbbr"); + dConversion = 1; + break; + } + case "mi": + { + dName = getDefaultString("unitsMiles"); + dAbbr = getDefaultString("unitsMilesAbbr"); + dConversion = 0.000621; + break; + } + case "yd": + { + dName = getDefaultString('unitsYards'); + dAbbr = getDefaultString('unitsYardsAbbr'); + dConversion = 1.0936133; + break; + } + } + } + else + { + dName = distanceList[i]; + dAbbr = distanceList[i].@abbr; + dConversion = Number(distanceList[i].@conversion); + } + var dUnit:Object = { + name: dName, + abbr: dAbbr, + conversion: dConversion + }; + configDistance.addItem(dUnit); + } + cboDistance.dataProvider = configDistance; + } + + // area units + var areaList:XMLList = configXML..areaunit; + if (areaList.length() > 0) + { + var aName:String; + var aAbbr:String; + var aConversion:Number; + + configArea = new ArrayList(); + for (var j:int = 0; j < areaList.length(); j++) + { + if (areaList[j].@id[0]) + { + const areaListId:String = areaList[j].@id; + switch (areaListId) + { + case "ac": + { + aName = getDefaultString("unitsAcres"); + aAbbr = getDefaultString("unitsAcresAbbr"); + aConversion = 0.00024710538147; + break; + } + case "ha": + { + aName = getDefaultString("unitsHectares"); + aAbbr = getDefaultString("unitsHectaresAbbr"); + aConversion = 0.0001; + break; + } + case "sq ft": + { + aName = getDefaultString("unitsSquareFeet"); + aAbbr = getDefaultString("unitsSquareFeetAbbr"); + aConversion = 10.763910417; + break; + } + case "sq km": + { + aName = getDefaultString("unitsSquareKilometers"); + aAbbr = getDefaultString("unitsSquareKilometersAbbr"); + aConversion = 0.000001; + break; + } + case "sq m": + { + aName = getDefaultString("unitsSquareMeters"); + aAbbr = getDefaultString("unitsSquareMetersAbbr"); + aConversion = 1; + break; + } + case "sq mi": + { + aName = getDefaultString("unitsSquareMiles"); + aAbbr = getDefaultString("unitsSquareMilesAbbr"); + aConversion = 0.0000003861021; + break; + } + case "sq yd": + { + aName = getDefaultString("unitsSquareYards"); + aAbbr = getDefaultString("unitsSquareYardsAbbr"); + aConversion = 1.19599005; + break; + } + } + } + else + { + aName = areaList[j]; + aAbbr = areaList[j].@abbr; + aConversion = Number(areaList[j].@conversion); + } + var aUnit:Object = { + name: aName, + abbr: aAbbr, + conversion: aConversion + }; + configArea.addItem(aUnit); + } + cboArea.dataProvider = configArea; + } + } + AppEvent.addListener(AppEvent.DATA_PUBLISH, sharedDataUpdated); + } + + private function initializeFontList():void + { + fontList = new ArrayList(prioritizeFontNames(getAvailableFontNames(), + defaultFontNames)); + } + + private function getAvailableFontNames():Array + { + var availableFonts:Array = Font.enumerateFonts(true); + var allFontNames:Array = []; + + for each (var font:Font in availableFonts) + { + allFontNames.push(font.fontName); + } + + const localeBasedSorter:Sort = new Sort(); + localeBasedSorter.setStyle('locale', resourceManager.localeChain[0]); + localeBasedSorter.sort(allFontNames); + + return allFontNames; + } + + public function get defaultFontNames():Array + { + var fontNames:Array = [ getDefaultString('textFont1'), + getDefaultString('textFont2'), + getDefaultString('textFont3'), + getDefaultString('textFont4'), + getDefaultString('textFont5'), + getDefaultString('textFont6')]; + + return fontNames.filter(validFontName); + } + + private function validFontName(fontName:String, index:int, array:Array):Boolean + { + return Boolean(fontName); + } + + private function prioritizeFontNames(fontNames:Array, preferredFontNames:Array):Array + { + var prioritizedFontNames:Array = preferredFontNames.concat(); + var isFontNameUnique:Boolean; + + for each (var fontName:String in fontNames) + { + isFontNameUnique = (preferredFontNames.indexOf(fontName) == -1); + if (isFontNameUnique) + { + prioritizedFontNames.push(fontName); + } + } + + return prioritizedFontNames; + } + + private function sharedDataUpdated(event:AppEvent):void + { + var data:Object = event.data; + + if (data.key == "Deactivate_DrawTool") + { + setMapAction(null, null, null, null); + editTool.deactivate(); + if (selectedDrawingIcon) + { + selectedDrawingIcon.filters = []; + selectedDrawingIcon = null; + } + } + } + + private function activateDrawTool(event:MouseEvent):void + { + addSharedData("Deactivate_DrawTool", null); // to be able to deactivate drawTool on other widgets + editTool.deactivate(); + lastActiveEditType = "none"; + + // apply glow + selectedDrawingIcon = FocusableImage(event.currentTarget); + clearSelectionFilter(); + selectedDrawingIcon.filters = [ glowFilter ]; + + frmDraw.visible = true; + showMeasurements = false; + isEditing = false; + drawType = selectedDrawingIcon.name; + switch (drawType) + { + case DrawTool.MAPPOINT: + { + drawingPolygon = drawingLine = false; + addingText = selectedDrawingIcon.id == "text"; + drawingPoint = !addingText; + + drawMode = addingText ? TEXT_MODE : null; + drawStatus = (drawMode == TEXT_MODE) ? addTextLabel : drawPointLabel; + setMapAction(drawType, drawStatus, null, map_drawEndHandler); + break; + } + case DrawTool.POLYLINE: + { + drawingPoint = addingText = drawingPolygon = false; + drawingLine = true; + showMeasurements = true; + + drawStatus = drawLineLabel; + setMapAction(drawType, drawStatus, lineSymbol, map_drawEndHandler, map_drawUpdateHandler, false, false); + break; + } + case DrawTool.FREEHAND_POLYLINE: + { + drawingPoint = addingText = drawingPolygon = false; + drawingLine = true; + showMeasurements = true; + + drawStatus = drawFreehandLineLabel; + setMapAction(drawType, drawStatus, lineSymbol, map_drawEndHandler, map_drawUpdateHandler, false, false); + break; + } + case DrawTool.EXTENT: + { + addingText = drawingPoint = drawingLine = false; + drawingPolygon = true; + showMeasurements = true; + + drawStatus = drawRectangleLabel; + setMapAction(drawType, drawStatus, fillSymbol, map_drawEndHandler, map_drawUpdateHandler, false, false); + break; + } + case DrawTool.CIRCLE: + { + addingText = drawingPoint = drawingLine = false; + drawingPolygon = true; + showMeasurements = true; + + drawStatus = drawCircleLabel; + setMapAction(drawType, drawStatus, fillSymbol, map_drawEndHandler, map_drawUpdateHandler, false, false); + break; + } + case DrawTool.ELLIPSE: + { + addingText = drawingPoint = drawingLine = false; + drawingPolygon = true; + showMeasurements = true; + + drawStatus = drawEllipseLabel; + setMapAction(drawType, drawStatus, fillSymbol, map_drawEndHandler, map_drawUpdateHandler, false, false); + break; + } + case DrawTool.POLYGON: + { + addingText = drawingPoint = drawingLine = false; + drawingPolygon = true; + showMeasurements = true; + + drawStatus = drawPolygonLabel; + setMapAction(drawType, drawStatus, fillSymbol, map_drawEndHandler, map_drawUpdateHandler, false, false); + break; + } + case DrawTool.FREEHAND_POLYGON: + { + addingText = drawingPoint = drawingLine = false; + drawingPolygon = true; + showMeasurements = true; + + drawStatus = drawFreehandPolygonLabel; + setMapAction(drawType, drawStatus, fillSymbol, map_drawEndHandler, map_drawUpdateHandler, false, false); + break; + } + } + } + + private function clear():void + { + graphicsLayer.clear(); + editTool.deactivate(); + updateHasDrawnGraphics(); + clearGraphicToMeasurementGraphic(); + } + + private function updateHasDrawnGraphics():void + { + hasDrawnGraphics = graphicsLayer.numGraphics > 0; + } + + private function clearGraphicToMeasurementGraphic():void + { + for (var key:Object in graphicToMeasurementGraphic) + { + delete graphicToMeasurementGraphic[key]; + } + } + + private function clearSelectionFilter():void + { + for (var i:int = 0; i < drawImageGroup.numChildren; i++) + { + if (drawImageGroup.getChildAt(i).filters && drawImageGroup.getChildAt(i).filters.length > 0) + { + if (!(selectedDrawingIcon && drawImageGroup.getChildAt(i) === selectedDrawingIcon)) + { + drawImageGroup.getChildAt(i).filters = []; + } + } + } + } + + private function getMeasurementGraphic(graphic:Graphic):Graphic + { + return graphicToMeasurementGraphic[graphic]; + } + + private function map_drawUpdateHandler(event:DrawEvent):void + { + lastDrawnGraphic = event.graphic; + if (isMeasuringEnabled) + { + if (!lastDrawnGraphic.hasEventListener(GraphicEvent.GRAPHIC_REMOVE)) + { + lastDrawnGraphic.graphicsLayer.addEventListener(GraphicEvent.GRAPHIC_REMOVE, drawnGraphic_graphicRemoveHandler, false, 0, true); + } + measureGraphicClientSide(lastDrawnGraphic); + } + } + + private function drawnGraphic_graphicRemoveHandler(event:GraphicEvent):void + { + const measurementGraphic:Graphic = getMeasurementGraphic(event.graphic); + if (measurementGraphic) + { + graphicsLayer.remove(measurementGraphic); + clearMeasurementGraphic(event.graphic); + } + } + + private function clearMeasurementGraphic(graphic:Graphic):void + { + graphicToMeasurementGraphic[graphic] = null; + } + + private function map_drawEndHandler(event:DrawEvent):void + { + selectedDrawingIcon = null; + clearSelectionFilter(); + event.target.deactivate(); + + lastDrawnGraphic = event.graphic; + + var customContextMenu:ContextMenu = new ContextMenu(); + customContextMenu.hideBuiltInItems(); + var menuItem:ContextMenuItem = new ContextMenuItem(clearFeatureLabel); + menuItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, menuItem_contextMenuDeleteHandler); + customContextMenu.customItems.push(menuItem); + lastDrawnGraphic.contextMenu = customContextMenu; + + lastDrawnGraphic.addEventListener(MouseEvent.CLICK, graphic_clickHandler, false, 0, true); + graphicsLayer.add(lastDrawnGraphic); + + var geom:Geometry = lastDrawnGraphic.geometry; + switch (geom.type) + { + case Geometry.MAPPOINT: + { + if (drawMode == TEXT_MODE) + { + var textSymbol:TextSymbol = new TextSymbol(txtLabel.text); + var txtFormat:TextFormat = new TextFormat(fontNameSelection.selectedItem, numTextSize.value, cpText.selectedColor, bold.selected, italic.selected, underline.selected); + textSymbol.textFormat = txtFormat; + lastDrawnGraphic.symbol = textSymbol; + } + else + { + lastDrawnGraphic.symbol = new SimpleMarkerSymbol(markerStyle.selectedItem.style, numMarkerSize.value, cpMarker.selectedColor, numMarkerAlpha.value, 0, 0, 0, new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, cpMarkerOutline.selectedColor, 1, numMarkerOutlineWidth.value)); + } + break; + } + case Geometry.POLYLINE: + { + lastDrawnGraphic.symbol = new SimpleLineSymbol(lineStyle.selectedItem.style, cpLine.selectedColor, numLineAlpha.value, numLineWidth.value); + if (isMeasuringEnabled) + { + measureGeometry(geom); + } + break; + } + case Geometry.POLYGON: + { + lastDrawnGraphic.symbol = new SimpleFillSymbol(fillStyle.selectedItem.style, cpFill.selectedColor, numFillAlpha.value, new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, cpFillOutline.selectedColor, 1, numFillOutlineWidth.value)); + if (isMeasuringEnabled) + { + var polygon:Polygon = geom as Polygon; + if (GeometryUtil.polygonSelfIntersecting(polygon)) + { + geometryService.simplify([ polygon ]); + } + else + { + measureGeometry(geom); + } + } + break; + } + case Geometry.EXTENT: + { + lastDrawnGraphic.symbol = new SimpleFillSymbol(fillStyle.selectedItem.style, cpFill.selectedColor, numFillAlpha.value, new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, cpFillOutline.selectedColor, 1, numFillOutlineWidth.value)); + if (isMeasuringEnabled) + { + // convert it to a polygon before project for more accururate result + measureGeometry((geom as Extent).toPolygon()); + } + break; + } + } + + updateHasDrawnGraphics(); + moveMeasurementGraphicToTop(lastDrawnGraphic); + } + + private function menuItem_contextMenuDeleteHandler(event:ContextMenuEvent):void + { + const drawnGraphic:Graphic = Graphic(event.contextMenuOwner); + graphicsLayer.remove(drawnGraphic); + // also remove measurement label if any + graphicsLayer.remove(getMeasurementGraphic(drawnGraphic)); + editTool.deactivate(); + updateHasDrawnGraphics(); + } + + private function moveMeasurementGraphicToTop(drawnGraphic:Graphic):void + { + const measurementGraphic:Graphic = getMeasurementGraphic(drawnGraphic); + if (measurementGraphic) + { + measurementGraphic.graphicsLayer.moveToTop(measurementGraphic); + } + } + + private function drawIcon_rollOverHandler(event:MouseEvent):void + { + clearSelectionFilter(); + event.target.filters = [ glowFilter ]; + } + + private function drawIcon_rollOutHandler(event:MouseEvent):void + { + clearSelectionFilter(); + } + + private function graphic_clickHandler(event:MouseEvent):void + { + if (editGraphic !== Graphic(event.currentTarget)) + { + editGraphic = Graphic(event.currentTarget); + lastActiveEditType = "none"; // make sure move and edit vertices is the 1st mode + } + if (editGraphic.geometry is Polyline || editGraphic.geometry is Polygon) + { + if (lastActiveEditType == "none") + { + isEditing = true; + lastActiveEditType = "moveEditVertices"; + editTool.activate(EditTool.MOVE | EditTool.EDIT_VERTICES, [ editGraphic ]); + CursorManager.setCursor(moveCursorIcon, CursorManagerPriority.HIGH, -16, -16); + } + else if (lastActiveEditType == "moveEditVertices") + { + isEditing = true; + lastActiveEditType = "moveRotateScale"; + editTool.activate(EditTool.MOVE | EditTool.SCALE | EditTool.ROTATE, [ editGraphic ]); + CursorManager.setCursor(moveCursorIcon, CursorManagerPriority.HIGH, -16, -16); + } + else if (lastActiveEditType == "moveRotateScale") + { + isEditing = false; + editGraphic = null; + lastActiveEditType = "none"; + editTool.deactivate(); + } + } + else if (editGraphic.geometry is Extent) + { + if (lastActiveEditType == "none") + { + isEditing = true; + lastActiveEditType = "moveScale"; + editTool.activate(EditTool.MOVE | EditTool.SCALE, [ editGraphic ]); + CursorManager.setCursor(moveCursorIcon, CursorManagerPriority.HIGH, -16, -16); + } + else + { + isEditing = false; + editGraphic = null; + lastActiveEditType = "none"; + editTool.deactivate(); + } + } + else + { + if (lastActiveEditType == "none") + { + isEditing = true; + lastActiveEditType = "moveEditVertices"; + editTool.activate(EditTool.EDIT_VERTICES | EditTool.MOVE, [ editGraphic ]); + CursorManager.setCursor(moveCursorIcon, CursorManagerPriority.HIGH, -16, -16); + } + else + { + isEditing = false; + editGraphic = null; + lastActiveEditType = "none"; + editTool.deactivate(); + } + } + + removeEditToolEventListeners(); + map.removeEventListener(MouseEvent.MOUSE_DOWN, map_mouseDownHandler); + + if (editGraphic) + { + addEditToolEventListeners(); + moveMeasurementGraphicToTop(editGraphic); + map.addEventListener(MouseEvent.MOUSE_DOWN, map_mouseDownHandler); + } + } + + private function removeEditToolEventListeners():void + { + editTool.removeEventListener(EditEvent.GRAPHICS_MOVE_START, editTool_editStartHandler); + editTool.removeEventListener(EditEvent.GRAPHIC_SCALE_START, editTool_editStartHandler); + editTool.removeEventListener(EditEvent.GRAPHIC_ROTATE_START, editTool_editStartHandler); + + editTool.removeEventListener(EditEvent.GRAPHIC_ROTATE, editTool_UpdateHandler); + editTool.removeEventListener(EditEvent.GRAPHIC_SCALE, editTool_UpdateHandler); + editTool.removeEventListener(EditEvent.GRAPHICS_MOVE, editTool_UpdateHandler); + editTool.removeEventListener(EditEvent.VERTEX_MOVE, editTool_UpdateHandler); + editTool.removeEventListener(EditEvent.GHOST_VERTEX_MOUSE_MOVE, editTool_UpdateHandler); + + editTool.removeEventListener(EditEvent.VERTEX_ADD, editTool_editStopHandler); + editTool.removeEventListener(EditEvent.VERTEX_DELETE, editTool_editStopHandler); + editTool.removeEventListener(EditEvent.VERTEX_MOVE_STOP, editTool_editStopHandler); + editTool.removeEventListener(EditEvent.GRAPHICS_MOVE_STOP, editTool_editStopHandler); + editTool.removeEventListener(EditEvent.GRAPHIC_ROTATE_STOP, editTool_editStopHandler); + editTool.removeEventListener(EditEvent.GRAPHIC_SCALE_STOP, editTool_editStopHandler); + } + + private function map_mouseDownHandler(event:MouseEvent):void + { + map.removeEventListener(MouseEvent.MOUSE_DOWN, map_mouseDownHandler); + map.addEventListener(MouseEvent.MOUSE_UP, map_mouseUpHandler); + map.addEventListener(MouseEvent.MOUSE_MOVE, map_mouseMoveHandler); + } + + private function map_mouseUpHandler(event:MouseEvent):void + { + if (event.target !== editGraphic) + { + map.removeEventListener(MouseEvent.MOUSE_UP, map_mouseUpHandler); + map.removeEventListener(MouseEvent.MOUSE_MOVE, map_mouseMoveHandler); + + isEditing = false; + editGraphic = null; + lastActiveEditType = "none"; + editTool.deactivate(); + } + } + + private function map_mouseMoveHandler(event:MouseEvent):void + { + map.addEventListener(MouseEvent.MOUSE_DOWN, map_mouseDownHandler); + map.removeEventListener(MouseEvent.MOUSE_UP, map_mouseUpHandler); + map.removeEventListener(MouseEvent.MOUSE_MOVE, map_mouseMoveHandler); + } + + private function addEditToolEventListeners():void + { + editTool.addEventListener(EditEvent.GRAPHICS_MOVE_START, editTool_editStartHandler); + editTool.addEventListener(EditEvent.GRAPHIC_SCALE_START, editTool_editStartHandler); + editTool.addEventListener(EditEvent.GRAPHIC_ROTATE_START, editTool_editStartHandler); + + editTool.addEventListener(EditEvent.GRAPHIC_ROTATE, editTool_UpdateHandler); + editTool.addEventListener(EditEvent.GRAPHIC_SCALE, editTool_UpdateHandler); + editTool.addEventListener(EditEvent.GRAPHICS_MOVE, editTool_UpdateHandler); + editTool.addEventListener(EditEvent.VERTEX_MOVE, editTool_UpdateHandler); + editTool.addEventListener(EditEvent.GHOST_VERTEX_MOUSE_MOVE, editTool_UpdateHandler); + + editTool.addEventListener(EditEvent.VERTEX_ADD, editTool_editStopHandler); + editTool.addEventListener(EditEvent.VERTEX_DELETE, editTool_editStopHandler); + editTool.addEventListener(EditEvent.VERTEX_MOVE_STOP, editTool_editStopHandler); + editTool.addEventListener(EditEvent.GRAPHICS_MOVE_STOP, editTool_editStopHandler); + editTool.addEventListener(EditEvent.GRAPHIC_ROTATE_STOP, editTool_editStopHandler); + editTool.addEventListener(EditEvent.GRAPHIC_SCALE_STOP, editTool_editStopHandler); + } + + private function editTool_editStopHandler(event:EditEvent):void + { + if (!(event.graphic || event.graphics)) + { + return; + } + + var editedGraphic:Graphic = event.graphic ? event.graphic : event.graphics[0]; + + if (map.wrapAround180) + { + normalizeGraphicGeometry(editedGraphic); + } + else if (getMeasurementGraphic(editedGraphic)) + { + recalculate(editedGraphic); + } + } + + private function normalizeGraphicGeometry(graphic:Graphic):void + { + // normalize + GeometryUtil.normalizeCentralMeridian([ graphic.geometry ], GeometryServiceSingleton.instance, new AsyncResponder(getNormalizedGeometryFunction, faultFunction)); + function getNormalizedGeometryFunction(item:Object, token:Object = null):void + { + var normalizedGeometries:Array = item as Array; + graphic.geometry = normalizedGeometries[0]; + isEditing = true; + if (graphic.geometry is Polyline || graphic.geometry is Polygon) + { + if (lastActiveEditType == "moveScale") + { + lastActiveEditType = "moveEditVertices"; // after normalization, if extent crosses the dateline, it is converted to a polygon + } + if (lastActiveEditType == "moveEditVertices") + { + editTool.activate(EditTool.MOVE | EditTool.EDIT_VERTICES, [ graphic ]); + } + else if (lastActiveEditType == "moveRotateScale") + { + editTool.activate(EditTool.MOVE | EditTool.SCALE | EditTool.ROTATE, [ graphic ]); + } + } + else if (graphic.geometry is Extent) + { + if (lastActiveEditType == "moveScale") + { + editTool.activate(EditTool.MOVE | EditTool.SCALE, [ graphic ]); + } + } + else + { + if (lastActiveEditType == "moveEditVertices") + { + editTool.activate(EditTool.EDIT_VERTICES | EditTool.MOVE, [ graphic ]); + } + } + if (getMeasurementGraphic(graphic)) + { + recalculate(graphic); + } + } + function faultFunction(fault:Fault, token:Object = null):void + { + dispatchEvent(new FaultEvent(FaultEvent.FAULT, false, false, fault)); + } + } + + private function recalculate(graphic:Graphic):void + { + measureGeometry(graphic.geometry); + moveMeasurementGraphicToTop(graphic); + } + + private function measureGeometry(geom:Geometry):void + { + var geomSR:SpatialReference = geom.spatialReference; + if (geomSR.wkid == EPSG_GEOGRAPHIC || geomSR.isWebMercator()) + { + calculateAreasAndLengths(geom); + } + else + { + var geographicSpatialReference:SpatialReference = new SpatialReference(EPSG_GEOGRAPHIC); + const projectParameters:ProjectParameters = new ProjectParameters; + projectParameters.geometries = [ geom ]; + projectParameters.outSpatialReference = geographicSpatialReference; + geometryService.project(projectParameters); + } + } + + private function geometryService_projectCompleteHandler(event:GeometryServiceEvent):void + { + var geom:Geometry = (event.result as Array)[0]; + calculateAreasAndLengths(geom); + } + + private function calculateAreasAndLengths(geom:Geometry):void + { + switch (geom.type) + { + case Geometry.POLYLINE: + { + var polyline:Polyline = Polyline(geom); + + const isValidPolyline:Boolean = + polyline.paths + && polyline.paths.length > 0 + && polyline.paths[0].length > 1; + + if (isValidPolyline) + { + calculatePolylineLengths(polyline); + } + break; + } + case Geometry.POLYGON: + { + var polygon:Polygon = Polygon(geom); + + const isValidPolygon:Boolean = + polygon.rings + && polygon.rings.length > 0 + && polygon.rings[0].length > 3; + + if (isValidPolygon) + { + if (polygon && GeometryUtil.polygonSelfIntersecting(polygon)) + { + hideMeasurementLabel(lastDrawnGraphic); + return; + } + + calculatePolygonAreasAndLengths(polygon); + } + break; + } + case Geometry.EXTENT: + { + var extent:Extent = Extent(geom); + calculatePolygonAreasAndLengths(extent.toPolygon()); //convert it to polygon for measurement + break; + } + } + } + + private function calculatePolylineLengths(polyline:Polyline):void + { + var polylineToMeasure:Polyline; + + var lengths:Array; + if (drawType == DrawTool.POLYLINE) + { + var normalizedPolyline:Polyline; + if (map.wrapAround180) + { + GeometryUtil.normalizeCentralMeridian([ polyline ], null, new AsyncResponder(getNormalizedGeometryFunction, null)); + function getNormalizedGeometryFunction(item:Object, token:Object = null):void + { + normalizedPolyline = (item as Array)[0] as Polyline; + } + } + else + { + normalizedPolyline = polyline; + } + polylineToMeasure = getPolylineToMeasure(normalizedPolyline); + + var oldPoints:Array = []; + var newPaths:Array = []; + for each (var path:Array in polylineToMeasure.paths) + { + var newPath:Array = []; + + var p0:MapPoint = path[0]; + newPath.push(p0); + for (var n:int = 1; n < path.length; n++) + { + var pn:MapPoint = path[n]; + + const distance:Number = Math.sqrt(Math.pow(pn.x - p0.x, 2) + Math.pow(pn.y - p0.y, 2)); + const dx:Number = pn.x - p0.x; + const dy:Number = pn.y - p0.y; + for (var k:int = 1; k < distance; k++) + { + const ratio:Number = k / distance; + const newPointX:Number = p0.x + ratio * dx; + const newPointY:Number = p0.y + ratio * dy; + const newMapPoint:MapPoint = new MapPoint(newPointX, newPointY); + newPath.push(newMapPoint); + } + newPath.push(pn); + p0 = pn; + } + newPaths.push(newPath); + } + var newPolyline:Polyline = new Polyline(newPaths); + lengths = GeometryUtil.geodesicLengths([ newPolyline ], Units.METERS); + } + else + { + polylineToMeasure = getPolylineToMeasure(polyline); + lengths = GeometryUtil.geodesicLengths([ polylineToMeasure ], Units.METERS); + } + + var abbrDist:String = cboDistance.selectedItem.abbr; + var convDist:Number = cboDistance.selectedItem.conversion; + var length:Number = lengths[0] * convDist; + + if (length == 0) + { + return; + } + + var label:String = createLengthsLabel(length, abbrDist); + + var graphic:Graphic = isEditing ? editGraphic : lastDrawnGraphic; + addDrawLabel(label, graphic); + updateMeasureLabelPosition(graphic); + } + + private function getPolylineToMeasure(polyline:Polyline):Polyline + { + var result:Polyline; + + var polylineSR:SpatialReference = polyline.spatialReference; + if (polylineSR.wkid == EPSG_GEOGRAPHIC) + { + result = polyline; + } + else if (polylineSR.isWebMercator()) + { + result = WebMercatorUtil.webMercatorToGeographic(polyline) as Polyline; + } + + return result; + } + + private function createLengthsLabel(length:Number, lengthAbbrev:String):String + { + return lengthLabel + " " + numFormatter.format(length) + " " + lengthAbbrev; + } + + private function calculatePolygonAreasAndLengths(polygon:Polygon):void + { + var polygonToMeasure:Polygon; + + var polygonSR:SpatialReference = polygon.spatialReference; + if (polygonSR.wkid == EPSG_GEOGRAPHIC) + { + polygonToMeasure = polygon; + } + else if (polygonSR.isWebMercator()) + { + polygonToMeasure = WebMercatorUtil.webMercatorToGeographic(polygon) as Polygon; + } + + var lengths:Array = GeometryUtil.geodesicLengths([ new Polyline(polygonToMeasure.rings)], Units.METERS); + var areas:Array = GeometryUtil.geodesicAreas([ polygonToMeasure ], Units.SQUARE_METERS); + + var abbrArea:String = cboArea.selectedItem.abbr; + var convArea:Number = cboArea.selectedItem.conversion; + var abbrDist:String = cboDistance.selectedItem.abbr; + var convDist:Number = cboDistance.selectedItem.conversion; + var area:Number = Math.abs(areas[0] * convArea); + var length:Number = lengths[0] * convDist; + + if (area == 0 && length == 0) + { + return; + } + + var label:String = area > 0 ? + createAreasAndLengthsLabel(area, abbrArea, length, abbrDist) : + createLengthsLabel(length, abbrDist); + + var graphic:Graphic = isEditing ? editGraphic : lastDrawnGraphic; + addDrawLabel(label, graphic); + updateMeasureLabelPosition(graphic); + } + + private function createAreasAndLengthsLabel(area:Number, areaAbbrev:String, length:Number, lengthAbbrev:String):String + { + return areaLabel + " " + numFormatter.format(area) + " " + areaAbbrev + + "\n" + perimeterLabel + " " + numFormatter.format(length) + " " + lengthAbbrev; + } + + private function addDrawLabel(label:String, graphic:Graphic):void + { + var measurementGraphic:Graphic = getMeasurementGraphic(graphic); + if (measurementGraphic) + { + (measurementGraphic.symbol as TextSymbol).text = label; + } + else + { + measurementGraphic = new Graphic(measurePt); + if (!measurementGraphic.symbol) + { + var txtSym:TextSymbol = new TextSymbol(label); + txtSym.yoffset = 8; + var txtFormat:TextFormat = new TextFormat("Arial", 12, 0x000000, true); // black label + txtSym.textFormat = txtFormat; + measurementGraphic.symbol = txtSym; + } + + // also remove measurement label if any + measurementGraphic.mouseEnabled = false; + measurementGraphic.mouseChildren = false; + measurementGraphic.filters = [ measurementBorderFilter ]; + graphicsLayer.add(measurementGraphic); + + addMeasurementGraphic(graphic, measurementGraphic); + } + } + + private function addMeasurementGraphic(graphic:Graphic, measurementGraphic:Graphic):void + { + graphicToMeasurementGraphic[graphic] = measurementGraphic; + } + + private function updateMeasureLabelPosition(graphic:Graphic):void + { + var geom:Geometry = graphic.geometry; + + switch (geom.type) + { + case Geometry.POLYLINE: + { + var polyline:Polyline = geom as Polyline; + if (polyline.paths) + { + var polylineExtent:Extent; + if (polyline.paths.length == 1) + { + polylineExtent = polyline.extent; + } + else + { + // Multiple paths, hence show the measurement label at the center of first path + var tempPolyline:Polyline = new Polyline; + tempPolyline.paths = [ polyline.paths[0]]; + polylineExtent = tempPolyline.extent; + } + measurePt = polylineExtent.center; + } + break; + } + case Geometry.POLYGON: + { + var polygon:Polygon = geom as Polygon; + if (polygon.rings) + { + var polygonExtent:Extent; + if (polygon.rings.length == 1) + { + polygonExtent = polygon.extent; + } + else if (polygon.rings.length > 1) + { + // Multiple rings, hence show the measurement label at the center of first ring + var tempPolygon:Polygon = new Polygon; + tempPolygon.rings = [ polygon.rings[0]]; + polygonExtent = tempPolygon.extent; + } + measurePt = polygonExtent.center; + } + break; + } + case Geometry.EXTENT: + { + measurePt = geom.extent.center; + break; + } + } + + var measurementGraphic:Graphic = getMeasurementGraphic(graphic); + if (measurementGraphic) + { + measurementGraphic.geometry = measurePt; + measurementGraphic.visible = true; + } + } + + private function geometryService_simplifyCompleteHandler(event:GeometryServiceEvent):void + { + var polygon:Polygon = event.result[0] as Polygon; + lastDrawnGraphic.geometry = polygon; //update to avoid simplifying again + + measureGeometry(polygon); + } + + private function geometryService_faultHandler(info:Object, token:Object = null):void + { + showError(info.toString()); + } + + private function wTemplate_closeHandler(event:Event):void + { + graphicsLayer.visible = false; + frmDraw.visible = false; + showMeasurements = false; + + setMapAction(null, null, null, null); // deactivate drawTool + + if (selectedDrawingIcon) + { + selectedDrawingIcon.filters = []; + selectedDrawingIcon = null; + } + } + + private function wTemplate_openHandler(event:Event):void + { + if (graphicsLayer) + { + graphicsLayer.visible = true; + } + } + + private function editTool_UpdateHandler(event:EditEvent):void + { + if (!(event.graphic || event.graphics)) + { + return; + } + + var graphicToMeasure:Graphic = event.graphic ? event.graphic : event.graphics[0]; + + if (getMeasurementGraphic(graphicToMeasure)) + { + measureGraphicClientSide(graphicToMeasure); + } + } + + private function measureGraphicClientSide(graphic:Graphic):void + { + const geom:Geometry = graphic.geometry; + if (geom.spatialReference.wkid == EPSG_GEOGRAPHIC + || geom.spatialReference.isWebMercator()) + { + calculateAreasAndLengths(geom); + } + } + + private function hideMeasurementLabel(graphic:Graphic):void + { + graphicToMeasurementGraphic[graphic].visible = false; + } + + protected function editTool_editStartHandler(event:EditEvent):void + { + if (!(event.graphic || event.graphics)) + { + return; + } + + const drawnGraphic:Graphic = event.graphic ? event.graphic : event.graphics[0]; + moveMeasurementGraphicToTop(drawnGraphic); + } + + protected function getLongestString(... rest):String + { + var longest:String = ""; + for (var i:int = 0; i < rest.length; i++) + { + var n:String = getDefaultString(rest[i]); + longest = n.length > longest.length ? n : longest; + } + return longest; + } + ]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/widgets/Draw/DrawWidget.xml b/src/widgets/Draw/DrawWidget.xml index 2b78e10..5f128c1 100644 --- a/src/widgets/Draw/DrawWidget.xml +++ b/src/widgets/Draw/DrawWidget.xml @@ -1,24 +1,24 @@ - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + diff --git a/src/widgets/Edit/EditWidget.mxml b/src/widgets/Edit/EditWidget.mxml index cbd2905..bcbea23 100644 --- a/src/widgets/Edit/EditWidget.mxml +++ b/src/widgets/Edit/EditWidget.mxml @@ -1,1465 +1,1465 @@ - - - - - - @namespace esri "http://www.esri.com/2008/ags"; - - esri|TemplatePicker - { - skin-class: ClassReference("widgets.Edit.EditWidgetTemplatePickerSkin"); - } - - - - 0) // look in widget's config if not using GeometryServiceSingleton - { - geometryService.url = configXML.geometryservice; - } - - editor.toolbarVisible = configXML.toolbarvisible == "true"; - - const configToolbarCutVisible:Boolean = configXML.toolbarcutvisible == "true"; - editor.toolbarCutVisible = configToolbarCutVisible; - - const configToolbarMergeVisible:Boolean = configXML.toolbarmergevisible == "true"; - editor.toolbarMergeVisible = configToolbarMergeVisible; - - const configToolbarReshapeVisible:Boolean = configXML.toolbarreshapevisible == "true"; - editor.toolbarReshapeVisible = configToolbarReshapeVisible; - - if (configXML.createoptions.length() > 0) - { - createOptions.polygonDrawTools = new Array(); - createOptions.polylineDrawTools = new Array(); - - if (configXML.createoptions.polygondrawtools.length() > 0) - { - const polygonDrawToolsList:Array = configXML.createoptions.polygondrawtools.split(","); - for (var i:Number = 0; i < polygonDrawToolsList.length; i++) - { - createOptions.polygonDrawTools.push(polygonDrawToolsList[i]); - } - } - - if (configXML.createoptions.polylinedrawtools.length() > 0) - { - const polylineDrawToolsList:Array = configXML.createoptions.polylinedrawtools.split(","); - for (var j:Number = 0; j < polylineDrawToolsList.length; j++) - { - createOptions.polylineDrawTools.push(polylineDrawToolsList[j]); - } - } - editor.createOptions = createOptions; - } - //excludeLayers - excludeLayers = []; - var layers:XMLList = configXML.excludelayer as XMLList; - for (var n:Number = 0; n < layers.length(); n++) - { - excludeLayers.push(layers[n].toString()); - } - - //deleteFeatures - if (configXML.deletefeatures.length() > 0) - { - deleteFeatures = configXML.deletefeatures == "true"; - } - editor.deleteEnabled = attachmentInspector.deleteEnabled = deleteFeatures; - - //addFeatures - if (configXML.addfeatures.length() > 0) - { - addFeatures = configXML.addfeatures == "true"; - } - editor.addEnabled = addFeatures; - - //updateAttributes - if (configXML.updateattributes.length() > 0) - { - updateAttributes = configXML.updateattributes == "true"; - } - editor.updateAttributesEnabled = updateAttributes; - - //updateGeometry - if (configXML.updategeometry.length() > 0) - { - updateGeometry = configXML.updategeometry == "true"; - } - editor.updateGeometryEnabled = updateGeometry; - - if (configXML.layersettings.length() > 0) - { - // layerSettings, overriding default settings - configureLayerSettings(configXML.layersettings.layer); - } - else if (configXML.formfieldsorder.length() > 0) - { - // formFieldsOrder - applies to all layers - editor.attributeInspector.formFieldsOrder = toAttributeInspectorFormFieldsOrder(configXML.formfieldsorder); - } - - //labels - configureLabels(configXML.labels); - } - map.addEventListener(MapEvent.LAYER_ADD, mapLayerAddHandler, false); - map.addEventListener(MapEvent.LAYER_REMOVE, mapLayerRemoveHandler, false); - map.addEventListener(MapEvent.LAYER_REORDER, mapLayerReorderHandler, false); - map.infoWindow.addEventListener(Event.CLOSE, infoWindowCloseHandler); - - AppEvent.dispatch(AppEvent.DATA_OPT_LAYERS, null, getOplayers); - mapLayers = map.layers as ArrayCollection; - arrLayers = getLayers(mapLayers); // get all the layers on map except basemap layers; - populateEditor(arrLayers); - } - - private function configureLayerSettings(layers:XMLList):void - { - for (var l:int = 0; l < layers.length(); l++) - { - var layerXML:XML = layers[l] as XML; - - var layerName:String = layerXML.@name[0]; - var subLayers:XMLList = layerXML.sublayer; // for configuring sublayers in a dynamic map service - if (subLayers.length() > 0) - { - for each (var subLayerXML:XML in subLayers) - { - var subLayerId:String = subLayerXML.@id[0]; - layerToSettings[layerName + "/" + subLayerId] = getLayerSettings(subLayerXML); - } - } - else - { - layerToSettings[layerName] = getLayerSettings(layerXML); - } - } - } - - private function getLayerSettings(layerXML:XML):Object - { - var layerSettings:Object = {}; - - var layerFields:XMLList = layerXML.fields; - if (layerFields.length() > 0) - { - var outFields:Array = []; - var fields:XMLList = layerFields.field; - for each (var fieldXML:XML in fields) - { - if (fieldXML.@name[0]) - { - var fieldObject:Object = {}; - fieldObject.name = fieldXML.@name; - if (fieldXML.@alias[0]) - { - fieldObject.alias = fieldXML.@alias; - } - if (fieldXML.@tooltip[0]) - { - fieldObject.tooltip = fieldXML.@tooltip; - } - outFields.push(fieldObject); - } - } - layerSettings.outFields = outFields; - } - if (layerXML.singletomultilinethreshold.length() > 0) - { - layerSettings.singleToMultilineThreshold = layerXML.singletomultilinethreshold; - } - if (layerXML.formfieldsorder.length() > 0) - { - layerSettings.formFieldsOrder = toAttributeInspectorFormFieldsOrder(layerXML.formfieldsorder); - } - if (layerXML.showobjectid.length() > 0) - { - layerSettings.showObjectID = layerXML.showobjectid; - } - if (layerXML.showglobalid.length() > 0) - { - layerSettings.showGlobalID = layerXML.showglobalid; - } - - return layerSettings; - } - - private function toAttributeInspectorFormFieldsOrder(formFieldsOrder:String):String - { - switch (formFieldsOrder) - { - case "alphabetical": - { - return AttributeInspector.ALPHABETICAL_ORDER; - } - case "fieldinspector": - { - return AttributeInspector.FIELD_INSPECTOR_ORDER; - } - case "fields": - default: - { - return AttributeInspector.FIELDS_ORDER; - } - } - } - - private function configureLabels(labels:XMLList):void - { - attributesLabel = labels.attributeslabel[0] || getDefaultString("attributesLabel"); - attachmentsLabel = labels.attachmentslabel[0] || getDefaultString("attachmentsLabel"); - relatedRecordsLabel = labels.relatedrecordslabel[0] || getDefaultString("relatedRecordsLabel"); - noEditableLayersText = labels.noeditablelayerstext[0] || getDefaultString("noEditableLayersText"); - - EditWidgetTemplatePickerSkin.featureLayerOutOfScaleText = labels.featurelayeroutofscaletext[0] || getDefaultString("featureLayerOutOfScaleText"); - - EditWidgetAttributeInspectorSkin.showAttachmentsText = labels.showattachmentstext[0] || getDefaultString("showAttachmentsText"); - EditWidgetAttributeInspectorSkin.showRelatedRecordsText = labels.showrelatedrecordstext[0] || getDefaultString("showRelatedRecordsText"); - EditWidgetAttributeInspectorSkin.deleteLabel = labels.deletelabel[0] || getDefaultString("deleteLabel"); - EditWidgetAttributeInspectorSkin.saveLabel = labels.savelabel[0] || getDefaultString("okLabel"); - - EditWidgetAttachmentInspectorSkin.noAttachmentsText = labels.noattchmentstext[0] || getDefaultString("noAttachmentsText"); - EditWidgetAttachmentInspectorSkin.chooseFileText = labels.choosefiletext[0] || getDefaultString("chooseFileText"); - EditWidgetAttachmentInspectorSkin.attachmentSubmitLabel = labels.attachmentsubmitlabel[0] || getDefaultString("attachmentSubmitLabel"); - EditWidgetAttachmentInspectorSkin.attachmentCancelLabel = labels.attachmentcancellabel[0] || getDefaultString("attachmentCancelLabel"); - EditWidgetAttachmentInspectorSkin.showAttributesText = labels.showattributestext[0] || getDefaultString("showAttributesText"); - - EditWidgetRelationshipInspectorSkin.showAttributesText = labels.showattributestext[0] || getDefaultString("showAttributesText"); - } - - private function basewidget_creationCompleteHandler(event:FlexEvent):void - { - // do not show template swatch for RTL - editor.showTemplateSwatchOnCursor = FlexGlobals.topLevelApplication.layoutDirection != "rtl"; - - editor.attributeInspector.setStyle("skinClass", EditWidgetAttributeInspectorSkin); - editor.attributeInspector.addEventListener("attachmentGroupClicked", attachmentGroupClickedHandler); - editor.attributeInspector.addEventListener("relatedRecordsGroupClicked", relatedRecordsGroupClickedHandler); - editor.attributeInspector.addEventListener(AttributeInspectorEvent.SHOW_FEATURE, attributeInspector_showFeatureHandler); - - attachmentInspector.addEventListener("attributeGroupClicked", attributeGroupClickedHandler); - relationshipInspector.addEventListener("attributeGroupClicked", attributeGroupClickedHandler); - } - - private function getOplayers(event:AppEvent):void - { - oplList = event.data as Array; - } - - private function getLayers(layers:ArrayCollection):Array - { - // all the layers except basemaps - var result:Array = []; - var includeLayer:Boolean; - var dynamicBaseMapLayers:Array = []; - for (var i:int = layers.length - 1; i >= 0; i--) - { - includeLayer = true; - var layer:Layer = layers.getItemAt(i) as Layer; - for (var n:int = 0; n < configData.basemaps.length; ) - { - if (configData.basemaps[n].label == layer.id) - { - if (layer is ArcGISDynamicMapServiceLayer) - { - dynamicBaseMapLayers.push(layer); - } - includeLayer = false; - break; - } - else - { - n++; - } - } - if (includeLayer && !isLayerPartOfExcludeLayers(layer.name) && (layer is FeatureLayer || layer is ArcGISDynamicMapServiceLayer)) - { - result.push(layer); - } - } - for each (var dynamicBaseMapLayer:ArcGISDynamicMapServiceLayer in dynamicBaseMapLayers.reverse()) - { - if (!isLayerPartOfExcludeLayers(dynamicBaseMapLayer.name)) - { - result.push(dynamicBaseMapLayer); - } - } - return result; - } - - private function populateEditor(array:Array):void - { - featureLayers = []; - arrFinalLayers = []; - if (array && array.length) - { - var index:int = 0; - getAllFeatureLayers(index, featureLayers); - } - } - - private function getAllFeatureLayers(index:int, featureLayers:Array):void - { - if (index < arrLayers.length) - { - var layer:Layer = arrLayers[index] as Layer; - if (layer.loaded) - { - if ((layer is FeatureLayer && layer.name.indexOf("hiddenLayer_") == -1) && FeatureLayer(layer).isEditable && !FeatureLayer(layer).featureCollection) - { - layer.removeEventListener(FeatureLayerEvent.SELECTION_COMPLETE, featureLayer_selectionComplete); - layer.addEventListener(FeatureLayerEvent.SELECTION_COMPLETE, featureLayer_selectionComplete, false, 1); - featureLayers.push(layer); - arrFinalLayers.push(layer); - - index++; - getAllFeatureLayers(index, featureLayers); - } - else if (layer is ArcGISDynamicMapServiceLayer && layer.name.indexOf("hiddenLayer_") == -1) - { - createFeatureLayersFromDynamicMapService(ArcGISDynamicMapServiceLayer(layer), index); - } - else - { - index++; - getAllFeatureLayers(index, featureLayers); - } - } - else if (layer.loadFault) - { - index++; - getAllFeatureLayers(index, featureLayers); - } - else - { - // listen for load - layer.addEventListener(LayerEvent.LOAD, layerLoadHandler); - } - } - else - { - deactivateEditor(); - if (featureLayers.length > 0) - { - noLayers.visible = noLayers.includeInLayout = false; - selectTemplateLabel.visible = selectTemplateLabel.includeInLayout = true; - if (!editor.addEnabled || !atleastOneFeatureLayerHasCreateCapability(featureLayers)) - { - selectTemplateLabel.text = getDefaultString("noCreateCapabilityLayersText"); - } - - //store the renderer info for each layer on map - storeInfoWindowRenderer(); - editor.map = map; - editor.featureLayers = featureLayers; - // infowindowLabel on the AttributeInspetor - editor.attributeInspector.infoWindowLabel = attributesLabel; - } - else - { - selectTemplateLabel.visible = selectTemplateLabel.includeInLayout = false; - noLayers.visible = noLayers.includeInLayout = true; - editor.toolbarVisible = false; - } - } - } - - private function layerLoadHandler(event:LayerEvent):void - { - getAllFeatureLayers(arrLayers.indexOf(event.layer), featureLayers); - } - - private function createFeatureLayersFromDynamicMapService(layer:ArcGISDynamicMapServiceLayer, index:int, onMapLayerAdd:Boolean = false):void - { - // look at the url - var serviceURL:String = layer.url; - var gdbVersion:String = layer.gdbVersion; - var featureServiceURL:String = serviceURL.replace(/MapServer/i, "FeatureServer"); - - // get corresponding featurelayers - var jsonTask:JSONTask = new JSONTask; - var urlVars:URLVariables = new URLVariables(); - urlVars.f = "json"; - jsonTask.proxyURL = layer.proxyURL; - jsonTask.token = layer.token; - jsonTask.url = featureServiceURL; - jsonTask.execute(urlVars, new AsyncResponder(jsonTask_resultHandler, jsonTask_faultHandler, { layer: layer, count: index })); - - function jsonTask_resultHandler(resultObject:Object, token:Object = null):void - { - const layers:Array = resultObject.layers; - if (layers && layers.length) - { - var arcGISDynamicMapServiceLayer:ArcGISDynamicMapServiceLayer = ArcGISDynamicMapServiceLayer(token.layer); - - var atleastOneFeatureLayerAlreadyIncluded:Boolean; - var candidateFeatureLayers:Array = []; - for (var i:int = 0; i < layers.length; ) - { - if (isFeatureLayerPartOfOpList(featureServiceURL + "/" + layers[i].id, gdbVersion)) - { - atleastOneFeatureLayerAlreadyIncluded = true; - break; - } - else - { - if (!isLayerPartOfExcludeLayers(arcGISDynamicMapServiceLayer.name + "/" + layers[i].id)) - { - candidateFeatureLayers.push(layers[i]); - } - i++; - } - } - if (!atleastOneFeatureLayerAlreadyIncluded && candidateFeatureLayers.length) - { - arcGISDynamicMapServiceLayer.removeEventListener(LayerEvent.IS_IN_SCALE_RANGE_CHANGE, layer_isInScaleRangeChangeHandler); - arcGISDynamicMapServiceLayer.removeEventListener(FlexEvent.HIDE, layer_hideShowHandler); - arcGISDynamicMapServiceLayer.removeEventListener(FlexEvent.SHOW, layer_hideShowHandler); - - arcGISDynamicMapServiceLayer.addEventListener(LayerEvent.IS_IN_SCALE_RANGE_CHANGE, layer_isInScaleRangeChangeHandler); - arcGISDynamicMapServiceLayer.addEventListener(FlexEvent.HIDE, layer_hideShowHandler); - arcGISDynamicMapServiceLayer.addEventListener(FlexEvent.SHOW, layer_hideShowHandler); - - if (arcGISDynamicMapServiceLayer.visibleLayers) - { - arcGISDynamicMapServiceLayer.visibleLayers.removeEventListener(CollectionEvent.COLLECTION_CHANGE, visibleLayersChangeHandler); - arcGISDynamicMapServiceLayer.visibleLayers.addEventListener(CollectionEvent.COLLECTION_CHANGE, visibleLayersChangeHandler); - } - visibleLayersChangeWatcher = ChangeWatcher.watch(arcGISDynamicMapServiceLayer, "visibleLayers", visibleLayersChange); - var copyLayerInfos:Array = arcGISDynamicMapServiceLayer.layerInfos; - for each (var copyLayerInfo:LayerInfo in copyLayerInfos) - { - updateMinMaxScaleOnLayerInfos(copyLayerInfo, copyLayerInfos); - } - - var arr:Array = []; - var index1:int = 0; - parseCandidateFeatureLayers(index1, candidateFeatureLayers); - - var fLayerObject:Object; - function parseCandidateFeatureLayers(index1:int, candidateFeatureLayers:Array):void - { - if (index1 < candidateFeatureLayers.length) - { - fLayerObject = candidateFeatureLayers[index1]; - var featureLayerFromMap:FeatureLayer = getFeatureLayerFromMap(featureServiceURL + "/" + fLayerObject.id, gdbVersion); - if (!featureLayerFromMap) - { - var featureLayer:FeatureLayer = new FeatureLayer; - featureLayer.proxyURL = arcGISDynamicMapServiceLayer.proxyURL; - featureLayer.token = arcGISDynamicMapServiceLayer.token; - featureLayer.url = featureServiceURL + "/" + fLayerObject.id; - updateFeatureLayerMinMaxScale(featureLayer, fLayerObject.id, copyLayerInfos); - featureLayer.addEventListener(LayerEvent.LOAD, featureLayerLoadHandler); - featureLayer.addEventListener(LayerEvent.LOAD_ERROR, featureLayerLoadErrorHandler); - } - else - { - featureLayerFromMap.addEventListener(FlexEvent.HIDE, featureLayer_hideShowHandler); - featureLayerFromMap.addEventListener(FlexEvent.SHOW, featureLayer_hideShowHandler); - featureLayerToDynamicMapService[featureLayerFromMap] = arcGISDynamicMapServiceLayer; - if (!onMapLayerAdd) - { - featureLayers.push(featureLayerFromMap); - } - else - { - featureLayers.unshift(featureLayerFromMap); - } - index1++; - parseCandidateFeatureLayers(index1, candidateFeatureLayers); - } - } - else - { - var indexOnMap:int = map.layerIds.indexOf(arcGISDynamicMapServiceLayer.id) + 1; - for each (var featLayer:FeatureLayer in arr.reverse()) - { - map.addLayer(featLayer, indexOnMap); - indexOnMap++; - } - arrFinalLayers.push(arcGISDynamicMapServiceLayer); - if (!onMapLayerAdd) - { - index = token.count + 1; - getAllFeatureLayers(index, featureLayers); - } - else - { - deactivateEditor(); - editor.featureLayers = featureLayers; - //store the renderer info for each layer on map - storeInfoWindowRenderer(); - } - } - } - - function featureLayerLoadHandler(event:LayerEvent):void - { - var loadedFeatureLayer:FeatureLayer = event.layer as FeatureLayer; - if (loadedFeatureLayer.isEditable) - { - loadedFeatureLayer.outFields = [ '*' ]; - loadedFeatureLayer.mode = FeatureLayer.MODE_SELECTION; - loadedFeatureLayer.gdbVersion = gdbVersion; - loadedFeatureLayer.name = "hiddenLayer_" + fLayerObject.name; - if (gdbVersion) - { - loadedFeatureLayer.name += "-" + gdbVersion; - } - if (arcGISDynamicMapServiceLayer.visible) - { - loadedFeatureLayer.visible = arcGISDynamicMapServiceLayer.visibleLayers ? isFeatureLayerVisible(fLayerObject.id, arcGISDynamicMapServiceLayer) : isFeatureLayerVisible(fLayerObject.id, arcGISDynamicMapServiceLayer, true); - } - else - { - loadedFeatureLayer.visible = false; - } - - loadedFeatureLayer.removeEventListener(FlexEvent.HIDE, featureLayer_hideShowHandler); - loadedFeatureLayer.removeEventListener(FlexEvent.SHOW, featureLayer_hideShowHandler); - loadedFeatureLayer.removeEventListener(FeatureLayerEvent.SELECTION_COMPLETE, featureLayer_selectionComplete); - - loadedFeatureLayer.addEventListener(FlexEvent.HIDE, featureLayer_hideShowHandler); - loadedFeatureLayer.addEventListener(FlexEvent.SHOW, featureLayer_hideShowHandler); - loadedFeatureLayer.addEventListener(FeatureLayerEvent.SELECTION_COMPLETE, featureLayer_selectionComplete, false, 1); - - featureLayerToDynamicMapService[loadedFeatureLayer] = arcGISDynamicMapServiceLayer; - - if (!onMapLayerAdd) - { - featureLayers.push(loadedFeatureLayer); - } - else - { - featureLayers.unshift(loadedFeatureLayer); - } - arr.push(loadedFeatureLayer); - } - index1++; - parseCandidateFeatureLayers(index1, candidateFeatureLayers); - } - - function featureLayerLoadErrorHandler(event:LayerEvent):void - { - index1++; - parseCandidateFeatureLayers(index1, candidateFeatureLayers); - } - } - else - { - index = token.count + 1; - getAllFeatureLayers(index, featureLayers); - } - } - else - { - index = token.count + 1; - getAllFeatureLayers(index, featureLayers); - } - } - function jsonTask_faultHandler(fault:Fault, token:Object = null):void - { - if (!onMapLayerAdd) - { - index = token.count + 1; - getAllFeatureLayers(index, featureLayers); - } - } - } - - private function updateMinMaxScaleOnLayerInfos(copyLayerInfo:LayerInfo, copyLayerInfos:Array):void - { - if (copyLayerInfo.subLayerIds) - { - for each (var childId:Number in copyLayerInfo.subLayerIds) - { - var childLayer:LayerInfo = findLayerById(childId, copyLayerInfos); - if (childLayer) - { - if (copyLayerInfo.minScale > 0) - { - if (childLayer.minScale == 0 || (childLayer.minScale > 0 && childLayer.minScale > copyLayerInfo.minScale)) - { - childLayer.minScale = copyLayerInfo.minScale; - } - } - if (copyLayerInfo.maxScale) - { - if (childLayer.maxScale == 0 || (childLayer.maxScale > 0 && childLayer.maxScale < copyLayerInfo.maxScale)) - { - childLayer.maxScale = copyLayerInfo.maxScale; - } - } - } - } - } - } - - private function updateFeatureLayerMinMaxScale(featureLayer:FeatureLayer, layerId:Number, copyLayerInfos:Array):void - { - for each (var copyLayerInfo:LayerInfo in copyLayerInfos) - { - if (copyLayerInfo.layerId == layerId) - { - featureLayer.minScale = copyLayerInfo.minScale; - featureLayer.maxScale = copyLayerInfo.maxScale; - break; - } - } - } - - private function changeOplListObjectVisibility(layer:Layer):void - { - for (var i:int = 0; i < oplList.length; ) - { - if (oplList[i].layer == layer) - { - oplList[i].visible = true; - AppEvent.dispatch(AppEvent.MAP_LAYER_VISIBLE, oplList[i]); - break; - } - else - { - i++; - } - } - } - - private function mapLayerAddHandler(event:MapEvent):void - { - if (event.layer.name.indexOf("hiddenLayer_") == -1) - { - if (event.layer is FeatureLayer) - { - event.layer.visible = true; - changeOplListObjectVisibility(event.layer); - event.layer.removeEventListener(FeatureLayerEvent.SELECTION_COMPLETE, featureLayer_selectionComplete); - event.layer.addEventListener(FeatureLayerEvent.SELECTION_COMPLETE, featureLayer_selectionComplete, false, 1); - - //store the renderer info for each layer on map - storeInfoWindowRenderer(); - - arrFinalLayers.unshift(event.layer); - featureLayers.unshift(event.layer); - deactivateEditor(); - editor.map = map; - editor.featureLayers = featureLayers; - } - else if (event.layer is ArcGISDynamicMapServiceLayer) - { - event.layer.visible = true; - createFeatureLayersFromDynamicMapService(ArcGISDynamicMapServiceLayer(event.layer), 0, true); - } - } - } - - private function mapLayerRemoveHandler(event:MapEvent):void - { - var index:int = arrFinalLayers.indexOf(event.layer); - if (index != -1) - { - if (event.layer is ArcGISDynamicMapServiceLayer) - { - for each (var fl:FeatureLayer in featureLayers) - { - if (fl.name.indexOf("hiddenLayer_") != -1 && featureLayerToDynamicMapService[fl] == event.layer) - { - map.removeLayer(fl); - featureLayers.splice(featureLayers.indexOf(fl), 1); - } - } - } - else if (event.layer is FeatureLayer) - { - for each (var fl1:FeatureLayer in featureLayers) - { - if (fl1 == event.layer) - { - featureLayers.splice(featureLayers.indexOf(fl1), 1); - } - } - } - delete arrFinalLayers[index]; - deactivateEditor(); - editor.map = map; - editor.featureLayers = featureLayers; - } - } - - private function mapLayerReorderHandler(event:MapEvent):void - { - var layer:Layer = event.layer; - var index:int = event.index; - - var i:int; - var currentFeatureLayerIndex:int; - var newLayerIds:Array = getNewLayerIds(map.layerIds); - if (index <= (newLayerIds.length - arrFinalLayers.length)) - { - if (layer is FeatureLayer && featureLayers.indexOf(layer) != -1) - { - moveFeatureLayerToTheBottom(FeatureLayer(layer)); - } - else if (layer is ArcGISDynamicMapServiceLayer) - { - var arr:Array = []; - for each (var fl:FeatureLayer in featureLayers) - { - if (fl.name.indexOf("hiddenLayer_") != -1 && featureLayerToDynamicMapService[fl] == layer) - { - arr.push(fl); - } - } - if (arr.length) - { - for each (var fl1:FeatureLayer in arr) - { - moveFeatureLayerToTheBottom(fl1); - } - } - } - } - else if (newLayerIds.length - arrFinalLayers.length < index < newLayerIds.length) - { - if (layer is FeatureLayer && featureLayers.indexOf(layer) != -1) - { - moveFeatureLayer(FeatureLayer(layer)); - } - else if (layer is ArcGISDynamicMapServiceLayer) - { - var arr1:Array = []; - for each (var fLayer:FeatureLayer in featureLayers) - { - if (fLayer.name.indexOf("hiddenLayer_") != -1 && featureLayerToDynamicMapService[fLayer] == layer) - { - arr1.push(fLayer); - } - } - if (arr1.length) - { - for each (var fLayer1:FeatureLayer in arr1) - { - moveFeatureLayer(fLayer1); - } - } - } - } - deactivateEditor(); - editor.map = map; - editor.featureLayers = featureLayers; - - function moveFeatureLayer(layer:FeatureLayer):void - { - currentFeatureLayerIndex = featureLayers.indexOf(layer); - var newFeatureLayerIndex:Number = newLayerIds.length - index - 1; - if (newFeatureLayerIndex < currentFeatureLayerIndex) - { - for (i = currentFeatureLayerIndex; newFeatureLayerIndex <= i; i--) - { - if (i == newFeatureLayerIndex) - { - featureLayers[newFeatureLayerIndex] = layer; - } - else - { - featureLayers[i] = featureLayers[i - 1]; - } - } - } - else - { - for (i = currentFeatureLayerIndex; i <= newFeatureLayerIndex; i++) - { - if (i == newFeatureLayerIndex) - { - featureLayers[newFeatureLayerIndex] = layer; - } - else - { - featureLayers[i] = featureLayers[i + 1]; - } - } - } - } - - function moveFeatureLayerToTheBottom(layer:FeatureLayer):void - { - currentFeatureLayerIndex = featureLayers.indexOf(layer); - for (i = currentFeatureLayerIndex; i < featureLayers.length; i++) - { - if (i == featureLayers.length - 1) - { - featureLayers[featureLayers.length - 1] = layer; - } - else - { - featureLayers[i] = featureLayers[i + 1]; - } - } - } - } - - private function getNewLayerIds(layerIds:Array):Array - { - var result:Array = []; - for (var i:int = 0; i < layerIds.length; i++) - { - var layer:Layer = ArrayCollection(map.layers).getItemAt(i) as Layer; - if (layer.name.indexOf("hiddenLayer_") != -1 || (layer is GraphicsLayer && !(layer is FeatureLayer))) - { - continue - } - result.push(layerIds[i]); - } - return result; - } - - private function storeInfoWindowRenderer():void - { - for each (var layer:Layer in map.layers) - { - if (layer is ArcGISDynamicMapServiceLayer && ArcGISDynamicMapServiceLayer(layer).layerInfoWindowRenderers) - { - dictionary[layer] = ArcGISDynamicMapServiceLayer(layer).layerInfoWindowRenderers; - ArcGISDynamicMapServiceLayer(layer).layerInfoWindowRenderers = null; // set it to null, as widget overtakes now - } - else if (layer is ArcGISTiledMapServiceLayer && ArcGISTiledMapServiceLayer(layer).layerInfoWindowRenderers) - { - dictionary[layer] = ArcGISTiledMapServiceLayer(layer).layerInfoWindowRenderers; - ArcGISTiledMapServiceLayer(layer).layerInfoWindowRenderers = null; // set it to null, as widget overtakes now - } - else if (layer is GraphicsLayer && GraphicsLayer(layer).infoWindowRenderer) - { - dictionary[layer] = GraphicsLayer(layer).infoWindowRenderer; - GraphicsLayer(layer).infoWindowRenderer = null; // set it to null, as widget overtakes now - } - } - } - - private function isLayerPartOfExcludeLayers(layerName:String):Boolean - { - var result:Boolean; - - // loop through all the excludeLayers - for (var n:int = 0; n < excludeLayers.length; ) - { - if (layerName == excludeLayers[n]) - { - result = true; - break; - } - else - { - n++; - } - } - - return result; - } - - private function isFeatureLayerPartOfOpList(featureLayerURL:String, gdbVersion:String):Boolean - { - var result:Boolean; - - // loop through all the map layers - for each (var layerObj:Object in configData.opLayers) - { - var layer:Layer = layerObj.layer; - if (layer is FeatureLayer - && FeatureLayer(layer).url == featureLayerURL - && FeatureLayer(layer).gdbVersion == gdbVersion) - { - result = true; - break; - } - } - - return result; - } - - private function getFeatureLayerFromMap(featureLayerURL:String, gdbVersion:String):FeatureLayer - { - var result:FeatureLayer; - - // loop through all the map layers - for (var n:int = 0; n < mapLayers.length; ) - { - if (mapLayers.getItemAt(n) is FeatureLayer - && FeatureLayer(mapLayers.getItemAt(n)).url == featureLayerURL - && FeatureLayer(mapLayers.getItemAt(n)).gdbVersion == gdbVersion) - { - result = mapLayers.getItemAt(n) as FeatureLayer; - break; - } - else - { - n++; - } - } - - return result; - } - - private function visibleLayersChange(event:Event = null):void - { - var dynamicMapServiceLayer:ArcGISDynamicMapServiceLayer = ArcGISDynamicMapServiceLayer(event.target); - if (dynamicMapServiceLayer.visibleLayers) - { - dynamicMapServiceLayer.visibleLayers.removeEventListener(CollectionEvent.COLLECTION_CHANGE, visibleLayersChangeHandler); - dynamicMapServiceLayer.visibleLayers.addEventListener(CollectionEvent.COLLECTION_CHANGE, visibleLayersChangeHandler); - } - if (dynamicMapServiceLayer.visible) - { - updateFeatureLayersVisibility(dynamicMapServiceLayer, dynamicMapServiceLayer.visibleLayers ? false : true); - } - } - - private function visibleLayersChangeHandler(event:CollectionEvent):void - { - const mapLayers:ArrayCollection = ArrayCollection(map.layers); - for (var i:int = 0; i < mapLayers.length; ) - { - if (mapLayers.getItemAt(i) is ArcGISDynamicMapServiceLayer && - ArcGISDynamicMapServiceLayer(mapLayers.getItemAt(i)).visible && - ArcGISDynamicMapServiceLayer(mapLayers.getItemAt(i)).visibleLayers === event.target) - { - updateFeatureLayersVisibility(ArcGISDynamicMapServiceLayer(mapLayers.getItemAt(i))); - break; - } - else - { - i++; - } - } - } - - private function layer_isInScaleRangeChangeHandler(event:LayerEvent):void - { - updateFeatureLayersVisibility(ArcGISDynamicMapServiceLayer(event.target)); - } - - private function layer_hideShowHandler(event:FlexEvent):void - { - updateFeatureLayersVisibility(ArcGISDynamicMapServiceLayer(event.target)); - } - - private function updateFeatureLayersVisibility(layer:ArcGISDynamicMapServiceLayer, goBackToDefaultVisibility:Boolean = false):void - { - for each (var featureLayer:FeatureLayer in featureLayers) - { - if (featureLayer.name.indexOf("hiddenLayer_") != -1 && featureLayerToDynamicMapService[featureLayer] === layer) // layers from a map service - { - var featureLayerId:String = featureLayer.url.substring(featureLayer.url.lastIndexOf("/") + 1, featureLayer.url.length); - featureLayer.visible = layer.visible ? isFeatureLayerVisible(featureLayerId, layer, goBackToDefaultVisibility) : false; - } - } - } - - private function isFeatureLayerVisible(layerId:String, dynamicMapServiceLayer:ArcGISDynamicMapServiceLayer, checkDefaultVisibility:Boolean = false):Boolean - { - var result:Boolean; - - if (!checkDefaultVisibility && dynamicMapServiceLayer.visibleLayers) - { - var actualVisibleLayers:Array = getActualVisibleLayers(dynamicMapServiceLayer.visibleLayers.toArray(), dynamicMapServiceLayer.layerInfos); - result = actualVisibleLayers.indexOf(Number(layerId)) != -1; - } - else - { - var layerInfos:Array = dynamicMapServiceLayer.layerInfos; - if (layerInfos) - { - for (var i:int = 0; i < layerInfos.length; ) - { - if (layerInfos[i].layerId == layerId) - { - if (layerInfos[i].parentLayerId != -1) - { - // find the parent and check its default visibility - var parentLayerInfo:LayerInfo = findLayerById(layerInfos[i].parentLayerId, layerInfos); - result = parentLayerInfo.defaultVisibility; - } - else - { - result = layerInfos[i].defaultVisibility; - } - break; - } - else - { - i++; - } - } - } - } - - return result; - } - - private function getActualVisibleLayers(layerIds:Array, layerInfos:Array):Array - { - var result:Array = []; - - layerIds = layerIds ? layerIds.concat() : null; - var layerInfo:LayerInfo; - var layerIdIndex:int; - - if (layerIds) - { - // replace group layers with their sub layers - for each (layerInfo in layerInfos) - { - layerIdIndex = layerIds.indexOf(layerInfo.layerId); - if (layerInfo.subLayerIds && layerIdIndex != -1) - { - layerIds.splice(layerIdIndex, 1); // remove the group layer id - for each (var subLayerId:Number in layerInfo.subLayerIds) - { - layerIds.push(subLayerId); // add subLayerId - } - } - } - - for each (layerInfo in layerInfos.reverse()) - { - if (layerIds.indexOf(layerInfo.layerId) != -1 && layerIds.indexOf(layerInfo.parentLayerId) == -1 && layerInfo.parentLayerId != -1) - { - layerIds.push(layerInfo.parentLayerId); - } - } - - result = layerIds; - } - - return result; - } - - private function findLayerById(id:Number, layerInfos:Array):LayerInfo - { - for each (var layerInfo:LayerInfo in layerInfos) - { - if (id == layerInfo.layerId) - { - return layerInfo; - } - } - return null; - } - - private function featureLayer_hideShowHandler(event:FlexEvent):void - { - var featureLayer:FeatureLayer = event.target as FeatureLayer; - var featureLayerId:Number = Number(featureLayer.url.substring(featureLayer.url.lastIndexOf("/") + 1, featureLayer.url.length)); - var dynamicMapServiceLayer:ArcGISDynamicMapServiceLayer = featureLayerToDynamicMapService[featureLayer]; - if (featureLayer.visible) - { - dynamicMapServiceLayer.visible = true; - if (dynamicMapServiceLayer.visibleLayers) - { - dynamicMapServiceLayer.visibleLayers.addItem(featureLayerId); - } - } - else - { - if (dynamicMapServiceLayer.visibleLayers && dynamicMapServiceLayer.visibleLayers.getItemIndex(featureLayerId) != -1) - { - dynamicMapServiceLayer.visibleLayers.removeItemAt(dynamicMapServiceLayer.visibleLayers.getItemIndex(featureLayerId)); - - } - } - } - - private function atleastOneFeatureLayerHasCreateCapability(featureLayers:Array):Boolean - { - var result:Boolean; - for each (var featureLayer:FeatureLayer in featureLayers) - { - if (isCreateAllowed(featureLayer)) - { - result = true; - break; - } - } - return result; - } - - private function isCreateAllowed(featureLayer:FeatureLayer):Boolean - { - var result:Boolean; - - if (featureLayer.layerDetails is FeatureLayerDetails) - { - result = (featureLayer.layerDetails as FeatureLayerDetails).isCreateAllowed; - } - else if (featureLayer.tableDetails is FeatureTableDetails) - { - result = (featureLayer.layerDetails as FeatureTableDetails).isCreateAllowed; - } - - return result; - } - - private function deactivateEditor():void - { - map.infoWindow.hide(); - editor.templatePicker.clearSelection(); - - editor.featureLayers = null; - editor.map = null; - editor.drawTool.deactivate(); - editor.editTool.deactivate(); - } - - private function featureLayer_selectionComplete(event:FeatureLayerEvent):void - { - for each (var field:Field in event.target.layerDetails.fields) - { - if (field.type == Field.TYPE_DATE) - { - for each (var feature:Graphic in event.features) - { - var date:Date = new Date(feature.attributes[field.name]); - if (date.milliseconds == 999) - { - date.milliseconds++; //Add 1ms to date values ending in 999 to workaround REST date bug - feature.attributes[field.name] = date.time; - } - } - } - } - } - - private function infoWindowCloseHandler(event:Event):void - { - map.infoWindow.content = editor.attributeInspector; - if (attachmentInspector) - { - attachmentInspector.clear(); - } - } - - private function attributeGroupClickedHandler(event:Event):void - { - map.infoWindow.content = editor.attributeInspector; - } - - private function attachmentGroupClickedHandler(event:Event):void - { - map.infoWindow.content = attachmentInspector; - - // queues an operation(showAttachments) to be performed for the next screen refresh, rather than in the current update. - // Without the callLater() method, you might try to access a property of a component - // that is not yet available. - callLater(showAttachments); - - function showAttachments():void - { - attachmentInspector.showAttachments(editor.attributeInspector.activeFeature, editor.attributeInspector.activeFeature.graphicsLayer as FeatureLayer); - } - } - - private function relatedRecordsGroupClickedHandler(event:Event):void - { - map.infoWindow.content = relationshipInspector; - relationshipInspector.graphic = editor.attributeInspector.activeFeature; - } - - private function attachmentInspector_initializeHandler(event:FlexEvent):void - { - super.initializationComplete(); - attachmentInspector.addEventListener(AttachmentMouseEvent.ATTACHMENT_DOUBLE_CLICK, attachmentDoubleClickHandler); - } - - private function attachmentDoubleClickHandler(event:AttachmentMouseEvent):void - { - navigateToURL(new URLRequest(event.attachmentInfo.url)); - } - - private function attributeGroup_clickHandler(event:MouseEvent):void - { - map.infoWindow.content = editor.attributeInspector; - } - - private function attributeInspector_showFeatureHandler(event:AttributeInspectorEvent):void - { - attachmentInspector.addEnabled = editor.attributeInspector.updateEnabled; - attachmentInspector.deleteEnabled = editor.attributeInspector.deleteButtonVisible; - const featureLayer:FeatureLayer = event.featureLayer; - var settingsKey:String = featureLayer.name; - if (featureLayer.name.indexOf("hiddenLayer_") != -1) - { - settingsKey = hiddenFeatureLayerToSettingsName[featureLayer]; - if (!settingsKey) - { - settingsKey = featureLayerToDynamicMapService[featureLayer].name + - "/" + featureLayer.url.substring(featureLayer.url.lastIndexOf("/") + 1, featureLayer.url.length); - hiddenFeatureLayerToSettingsName[featureLayer] = settingsKey; - } - } - var settingsObject:Object = layerToSettings[settingsKey]; - if (settingsObject) - { - var outFields:Array = settingsObject.outFields as Array; - if (outFields && outFields.length) - { - var attributeInspectorFieldInspectors:Array = []; - for each (var field:Field in featureLayer.layerDetails.fields) - { - var fieldInspector:FieldInspector = new FieldInspector; - fieldInspector.featureLayer = featureLayer; - fieldInspector.fieldName = field.name; - fieldInspector.visible = false; - for each (var fieldObject:Object in outFields) - { - if (fieldObject.name == field.name) - { - fieldInspector.label = fieldObject.alias; - fieldInspector.toolTip = fieldObject.tooltip; - fieldInspector.visible = true; - break; - } - } - attributeInspectorFieldInspectors.push(fieldInspector); - } - editor.attributeInspector.fieldInspectors = attributeInspectorFieldInspectors; - } - else - { - editor.attributeInspector.fieldInspectors = []; - } - var singleToMultilineThreshold:Number = settingsObject.singleToMultilineThreshold; - if (singleToMultilineThreshold && !isNaN(singleToMultilineThreshold)) - { - editor.attributeInspector.singleToMultilineThreshold = singleToMultilineThreshold; - } - var formFieldsOrder:String = settingsObject.formFieldsOrder; - if (formFieldsOrder) - { - editor.attributeInspector.formFieldsOrder = formFieldsOrder; - } - var showObjectID:String = settingsObject.showObjectID; - if (showObjectID) - { - editor.attributeInspector.showObjectID = showObjectID == "true"; - } - var showGlobalID:String = settingsObject.showGlobalID; - if (showGlobalID) - { - editor.attributeInspector.showGlobalID = showGlobalID == "true"; - } - } - } - - private function widgetClosedHandler(event:Event):void - { - disablePanZoomNavigationWidget = false; - addSharedData("Edit_Widget", new ArrayCollection([ disablePanZoomNavigationWidget ])); // to be able to enable pan/zoomin/zoomout - - lastState = "closed"; - - // clear feature layer selection - for each (var featureLayer:FeatureLayer in featureLayers) - { - if (featureLayer.selectedFeatures.length > 0) - { - featureLayer.clearSelection(); - } - if (featureLayer.name.indexOf("hiddenLayer_") != -1) - { - map.removeLayer(featureLayer); - } - } - // assign back the renderer info - for (var layer:Object in dictionary) - { - if (layer is ArcGISDynamicMapServiceLayer) - { - ArcGISDynamicMapServiceLayer(layer).layerInfoWindowRenderers = dictionary[layer]; - } - else if (layer is ArcGISTiledMapServiceLayer) - { - ArcGISTiledMapServiceLayer(layer).layerInfoWindowRenderers = dictionary[layer]; - } - if (layer is GraphicsLayer) - { - GraphicsLayer(layer).infoWindowRenderer = dictionary[layer]; - } - } - deactivateEditor(); - } - - private function widgetOpenedHandler(event:Event):void - { - disablePanZoomNavigationWidget = true; - addSharedData("Edit_Widget", new ArrayCollection([ disablePanZoomNavigationWidget ])); // to be able to disable pan/zoomin/zoomout - - // hide the infowindow if already there from other widget - if (lastState == "closed") // reset only if the widget was opened after being closed - { - mapLayers = map.layers as ArrayCollection; - arrLayers = getLayers(mapLayers); // get all the layers on map except basemap layers; - populateEditor(arrLayers); - } - } - - private function widgetMinimizedHandler(event:Event):void - { - lastState = "minimized"; - } - ]]> - - - - - - - - - - - - - - - - - - - + + + + + + @namespace esri "http://www.esri.com/2008/ags"; + + esri|TemplatePicker + { + skin-class: ClassReference("widgets.Edit.EditWidgetTemplatePickerSkin"); + } + + + + 0) // look in widget's config if not using GeometryServiceSingleton + { + geometryService.url = configXML.geometryservice; + } + + editor.toolbarVisible = configXML.toolbarvisible == "true"; + + const configToolbarCutVisible:Boolean = configXML.toolbarcutvisible == "true"; + editor.toolbarCutVisible = configToolbarCutVisible; + + const configToolbarMergeVisible:Boolean = configXML.toolbarmergevisible == "true"; + editor.toolbarMergeVisible = configToolbarMergeVisible; + + const configToolbarReshapeVisible:Boolean = configXML.toolbarreshapevisible == "true"; + editor.toolbarReshapeVisible = configToolbarReshapeVisible; + + if (configXML.createoptions.length() > 0) + { + createOptions.polygonDrawTools = new Array(); + createOptions.polylineDrawTools = new Array(); + + if (configXML.createoptions.polygondrawtools.length() > 0) + { + const polygonDrawToolsList:Array = configXML.createoptions.polygondrawtools.split(","); + for (var i:Number = 0; i < polygonDrawToolsList.length; i++) + { + createOptions.polygonDrawTools.push(polygonDrawToolsList[i]); + } + } + + if (configXML.createoptions.polylinedrawtools.length() > 0) + { + const polylineDrawToolsList:Array = configXML.createoptions.polylinedrawtools.split(","); + for (var j:Number = 0; j < polylineDrawToolsList.length; j++) + { + createOptions.polylineDrawTools.push(polylineDrawToolsList[j]); + } + } + editor.createOptions = createOptions; + } + //excludeLayers + excludeLayers = []; + var layers:XMLList = configXML.excludelayer as XMLList; + for (var n:Number = 0; n < layers.length(); n++) + { + excludeLayers.push(layers[n].toString()); + } + + //deleteFeatures + if (configXML.deletefeatures.length() > 0) + { + deleteFeatures = configXML.deletefeatures == "true"; + } + editor.deleteEnabled = attachmentInspector.deleteEnabled = deleteFeatures; + + //addFeatures + if (configXML.addfeatures.length() > 0) + { + addFeatures = configXML.addfeatures == "true"; + } + editor.addEnabled = addFeatures; + + //updateAttributes + if (configXML.updateattributes.length() > 0) + { + updateAttributes = configXML.updateattributes == "true"; + } + editor.updateAttributesEnabled = updateAttributes; + + //updateGeometry + if (configXML.updategeometry.length() > 0) + { + updateGeometry = configXML.updategeometry == "true"; + } + editor.updateGeometryEnabled = updateGeometry; + + if (configXML.layersettings.length() > 0) + { + // layerSettings, overriding default settings + configureLayerSettings(configXML.layersettings.layer); + } + else if (configXML.formfieldsorder.length() > 0) + { + // formFieldsOrder - applies to all layers + editor.attributeInspector.formFieldsOrder = toAttributeInspectorFormFieldsOrder(configXML.formfieldsorder); + } + + //labels + configureLabels(configXML.labels); + } + map.addEventListener(MapEvent.LAYER_ADD, mapLayerAddHandler, false); + map.addEventListener(MapEvent.LAYER_REMOVE, mapLayerRemoveHandler, false); + map.addEventListener(MapEvent.LAYER_REORDER, mapLayerReorderHandler, false); + map.infoWindow.addEventListener(Event.CLOSE, infoWindowCloseHandler); + + AppEvent.dispatch(AppEvent.DATA_OPT_LAYERS, null, getOplayers); + mapLayers = map.layers as ArrayCollection; + arrLayers = getLayers(mapLayers); // get all the layers on map except basemap layers; + populateEditor(arrLayers); + } + + private function configureLayerSettings(layers:XMLList):void + { + for (var l:int = 0; l < layers.length(); l++) + { + var layerXML:XML = layers[l] as XML; + + var layerName:String = layerXML.@name[0]; + var subLayers:XMLList = layerXML.sublayer; // for configuring sublayers in a dynamic map service + if (subLayers.length() > 0) + { + for each (var subLayerXML:XML in subLayers) + { + var subLayerId:String = subLayerXML.@id[0]; + layerToSettings[layerName + "/" + subLayerId] = getLayerSettings(subLayerXML); + } + } + else + { + layerToSettings[layerName] = getLayerSettings(layerXML); + } + } + } + + private function getLayerSettings(layerXML:XML):Object + { + var layerSettings:Object = {}; + + var layerFields:XMLList = layerXML.fields; + if (layerFields.length() > 0) + { + var outFields:Array = []; + var fields:XMLList = layerFields.field; + for each (var fieldXML:XML in fields) + { + if (fieldXML.@name[0]) + { + var fieldObject:Object = {}; + fieldObject.name = fieldXML.@name; + if (fieldXML.@alias[0]) + { + fieldObject.alias = fieldXML.@alias; + } + if (fieldXML.@tooltip[0]) + { + fieldObject.tooltip = fieldXML.@tooltip; + } + outFields.push(fieldObject); + } + } + layerSettings.outFields = outFields; + } + if (layerXML.singletomultilinethreshold.length() > 0) + { + layerSettings.singleToMultilineThreshold = layerXML.singletomultilinethreshold; + } + if (layerXML.formfieldsorder.length() > 0) + { + layerSettings.formFieldsOrder = toAttributeInspectorFormFieldsOrder(layerXML.formfieldsorder); + } + if (layerXML.showobjectid.length() > 0) + { + layerSettings.showObjectID = layerXML.showobjectid; + } + if (layerXML.showglobalid.length() > 0) + { + layerSettings.showGlobalID = layerXML.showglobalid; + } + + return layerSettings; + } + + private function toAttributeInspectorFormFieldsOrder(formFieldsOrder:String):String + { + switch (formFieldsOrder) + { + case "alphabetical": + { + return AttributeInspector.ALPHABETICAL_ORDER; + } + case "fieldinspector": + { + return AttributeInspector.FIELD_INSPECTOR_ORDER; + } + case "fields": + default: + { + return AttributeInspector.FIELDS_ORDER; + } + } + } + + private function configureLabels(labels:XMLList):void + { + attributesLabel = labels.attributeslabel[0] || getDefaultString("attributesLabel"); + attachmentsLabel = labels.attachmentslabel[0] || getDefaultString("attachmentsLabel"); + relatedRecordsLabel = labels.relatedrecordslabel[0] || getDefaultString("relatedRecordsLabel"); + noEditableLayersText = labels.noeditablelayerstext[0] || getDefaultString("noEditableLayersText"); + + EditWidgetTemplatePickerSkin.featureLayerOutOfScaleText = labels.featurelayeroutofscaletext[0] || getDefaultString("featureLayerOutOfScaleText"); + + EditWidgetAttributeInspectorSkin.showAttachmentsText = labels.showattachmentstext[0] || getDefaultString("showAttachmentsText"); + EditWidgetAttributeInspectorSkin.showRelatedRecordsText = labels.showrelatedrecordstext[0] || getDefaultString("showRelatedRecordsText"); + EditWidgetAttributeInspectorSkin.deleteLabel = labels.deletelabel[0] || getDefaultString("deleteLabel"); + EditWidgetAttributeInspectorSkin.saveLabel = labels.savelabel[0] || getDefaultString("okLabel"); + + EditWidgetAttachmentInspectorSkin.noAttachmentsText = labels.noattchmentstext[0] || getDefaultString("noAttachmentsText"); + EditWidgetAttachmentInspectorSkin.chooseFileText = labels.choosefiletext[0] || getDefaultString("chooseFileText"); + EditWidgetAttachmentInspectorSkin.attachmentSubmitLabel = labels.attachmentsubmitlabel[0] || getDefaultString("attachmentSubmitLabel"); + EditWidgetAttachmentInspectorSkin.attachmentCancelLabel = labels.attachmentcancellabel[0] || getDefaultString("attachmentCancelLabel"); + EditWidgetAttachmentInspectorSkin.showAttributesText = labels.showattributestext[0] || getDefaultString("showAttributesText"); + + EditWidgetRelationshipInspectorSkin.showAttributesText = labels.showattributestext[0] || getDefaultString("showAttributesText"); + } + + private function basewidget_creationCompleteHandler(event:FlexEvent):void + { + // do not show template swatch for RTL + editor.showTemplateSwatchOnCursor = FlexGlobals.topLevelApplication.layoutDirection != "rtl"; + + editor.attributeInspector.setStyle("skinClass", EditWidgetAttributeInspectorSkin); + editor.attributeInspector.addEventListener("attachmentGroupClicked", attachmentGroupClickedHandler); + editor.attributeInspector.addEventListener("relatedRecordsGroupClicked", relatedRecordsGroupClickedHandler); + editor.attributeInspector.addEventListener(AttributeInspectorEvent.SHOW_FEATURE, attributeInspector_showFeatureHandler); + + attachmentInspector.addEventListener("attributeGroupClicked", attributeGroupClickedHandler); + relationshipInspector.addEventListener("attributeGroupClicked", attributeGroupClickedHandler); + } + + private function getOplayers(event:AppEvent):void + { + oplList = event.data as Array; + } + + private function getLayers(layers:ArrayCollection):Array + { + // all the layers except basemaps + var result:Array = []; + var includeLayer:Boolean; + var dynamicBaseMapLayers:Array = []; + for (var i:int = layers.length - 1; i >= 0; i--) + { + includeLayer = true; + var layer:Layer = layers.getItemAt(i) as Layer; + for (var n:int = 0; n < configData.basemaps.length; ) + { + if (configData.basemaps[n].label == layer.id) + { + if (layer is ArcGISDynamicMapServiceLayer) + { + dynamicBaseMapLayers.push(layer); + } + includeLayer = false; + break; + } + else + { + n++; + } + } + if (includeLayer && !isLayerPartOfExcludeLayers(layer.name) && (layer is FeatureLayer || layer is ArcGISDynamicMapServiceLayer)) + { + result.push(layer); + } + } + for each (var dynamicBaseMapLayer:ArcGISDynamicMapServiceLayer in dynamicBaseMapLayers.reverse()) + { + if (!isLayerPartOfExcludeLayers(dynamicBaseMapLayer.name)) + { + result.push(dynamicBaseMapLayer); + } + } + return result; + } + + private function populateEditor(array:Array):void + { + featureLayers = []; + arrFinalLayers = []; + if (array && array.length) + { + var index:int = 0; + getAllFeatureLayers(index, featureLayers); + } + } + + private function getAllFeatureLayers(index:int, featureLayers:Array):void + { + if (index < arrLayers.length) + { + var layer:Layer = arrLayers[index] as Layer; + if (layer.loaded) + { + if ((layer is FeatureLayer && layer.name.indexOf("hiddenLayer_") == -1) && FeatureLayer(layer).isEditable && !FeatureLayer(layer).featureCollection) + { + layer.removeEventListener(FeatureLayerEvent.SELECTION_COMPLETE, featureLayer_selectionComplete); + layer.addEventListener(FeatureLayerEvent.SELECTION_COMPLETE, featureLayer_selectionComplete, false, 1); + featureLayers.push(layer); + arrFinalLayers.push(layer); + + index++; + getAllFeatureLayers(index, featureLayers); + } + else if (layer is ArcGISDynamicMapServiceLayer && layer.name.indexOf("hiddenLayer_") == -1) + { + createFeatureLayersFromDynamicMapService(ArcGISDynamicMapServiceLayer(layer), index); + } + else + { + index++; + getAllFeatureLayers(index, featureLayers); + } + } + else if (layer.loadFault) + { + index++; + getAllFeatureLayers(index, featureLayers); + } + else + { + // listen for load + layer.addEventListener(LayerEvent.LOAD, layerLoadHandler); + } + } + else + { + deactivateEditor(); + if (featureLayers.length > 0) + { + noLayers.visible = noLayers.includeInLayout = false; + selectTemplateLabel.visible = selectTemplateLabel.includeInLayout = true; + if (!editor.addEnabled || !atleastOneFeatureLayerHasCreateCapability(featureLayers)) + { + selectTemplateLabel.text = getDefaultString("noCreateCapabilityLayersText"); + } + + //store the renderer info for each layer on map + storeInfoWindowRenderer(); + editor.map = map; + editor.featureLayers = featureLayers; + // infowindowLabel on the AttributeInspetor + editor.attributeInspector.infoWindowLabel = attributesLabel; + } + else + { + selectTemplateLabel.visible = selectTemplateLabel.includeInLayout = false; + noLayers.visible = noLayers.includeInLayout = true; + editor.toolbarVisible = false; + } + } + } + + private function layerLoadHandler(event:LayerEvent):void + { + getAllFeatureLayers(arrLayers.indexOf(event.layer), featureLayers); + } + + private function createFeatureLayersFromDynamicMapService(layer:ArcGISDynamicMapServiceLayer, index:int, onMapLayerAdd:Boolean = false):void + { + // look at the url + var serviceURL:String = layer.url; + var gdbVersion:String = layer.gdbVersion; + var featureServiceURL:String = serviceURL.replace(/MapServer/i, "FeatureServer"); + + // get corresponding featurelayers + var jsonTask:JSONTask = new JSONTask; + var urlVars:URLVariables = new URLVariables(); + urlVars.f = "json"; + jsonTask.proxyURL = layer.proxyURL; + jsonTask.token = layer.token; + jsonTask.url = featureServiceURL; + jsonTask.execute(urlVars, new AsyncResponder(jsonTask_resultHandler, jsonTask_faultHandler, { layer: layer, count: index })); + + function jsonTask_resultHandler(resultObject:Object, token:Object = null):void + { + const layers:Array = resultObject.layers; + if (layers && layers.length) + { + var arcGISDynamicMapServiceLayer:ArcGISDynamicMapServiceLayer = ArcGISDynamicMapServiceLayer(token.layer); + + var atleastOneFeatureLayerAlreadyIncluded:Boolean; + var candidateFeatureLayers:Array = []; + for (var i:int = 0; i < layers.length; ) + { + if (isFeatureLayerPartOfOpList(featureServiceURL + "/" + layers[i].id, gdbVersion)) + { + atleastOneFeatureLayerAlreadyIncluded = true; + break; + } + else + { + if (!isLayerPartOfExcludeLayers(arcGISDynamicMapServiceLayer.name + "/" + layers[i].id)) + { + candidateFeatureLayers.push(layers[i]); + } + i++; + } + } + if (!atleastOneFeatureLayerAlreadyIncluded && candidateFeatureLayers.length) + { + arcGISDynamicMapServiceLayer.removeEventListener(LayerEvent.IS_IN_SCALE_RANGE_CHANGE, layer_isInScaleRangeChangeHandler); + arcGISDynamicMapServiceLayer.removeEventListener(FlexEvent.HIDE, layer_hideShowHandler); + arcGISDynamicMapServiceLayer.removeEventListener(FlexEvent.SHOW, layer_hideShowHandler); + + arcGISDynamicMapServiceLayer.addEventListener(LayerEvent.IS_IN_SCALE_RANGE_CHANGE, layer_isInScaleRangeChangeHandler); + arcGISDynamicMapServiceLayer.addEventListener(FlexEvent.HIDE, layer_hideShowHandler); + arcGISDynamicMapServiceLayer.addEventListener(FlexEvent.SHOW, layer_hideShowHandler); + + if (arcGISDynamicMapServiceLayer.visibleLayers) + { + arcGISDynamicMapServiceLayer.visibleLayers.removeEventListener(CollectionEvent.COLLECTION_CHANGE, visibleLayersChangeHandler); + arcGISDynamicMapServiceLayer.visibleLayers.addEventListener(CollectionEvent.COLLECTION_CHANGE, visibleLayersChangeHandler); + } + visibleLayersChangeWatcher = ChangeWatcher.watch(arcGISDynamicMapServiceLayer, "visibleLayers", visibleLayersChange); + var copyLayerInfos:Array = arcGISDynamicMapServiceLayer.layerInfos; + for each (var copyLayerInfo:LayerInfo in copyLayerInfos) + { + updateMinMaxScaleOnLayerInfos(copyLayerInfo, copyLayerInfos); + } + + var arr:Array = []; + var index1:int = 0; + parseCandidateFeatureLayers(index1, candidateFeatureLayers); + + var fLayerObject:Object; + function parseCandidateFeatureLayers(index1:int, candidateFeatureLayers:Array):void + { + if (index1 < candidateFeatureLayers.length) + { + fLayerObject = candidateFeatureLayers[index1]; + var featureLayerFromMap:FeatureLayer = getFeatureLayerFromMap(featureServiceURL + "/" + fLayerObject.id, gdbVersion); + if (!featureLayerFromMap) + { + var featureLayer:FeatureLayer = new FeatureLayer; + featureLayer.proxyURL = arcGISDynamicMapServiceLayer.proxyURL; + featureLayer.token = arcGISDynamicMapServiceLayer.token; + featureLayer.url = featureServiceURL + "/" + fLayerObject.id; + updateFeatureLayerMinMaxScale(featureLayer, fLayerObject.id, copyLayerInfos); + featureLayer.addEventListener(LayerEvent.LOAD, featureLayerLoadHandler); + featureLayer.addEventListener(LayerEvent.LOAD_ERROR, featureLayerLoadErrorHandler); + } + else + { + featureLayerFromMap.addEventListener(FlexEvent.HIDE, featureLayer_hideShowHandler); + featureLayerFromMap.addEventListener(FlexEvent.SHOW, featureLayer_hideShowHandler); + featureLayerToDynamicMapService[featureLayerFromMap] = arcGISDynamicMapServiceLayer; + if (!onMapLayerAdd) + { + featureLayers.push(featureLayerFromMap); + } + else + { + featureLayers.unshift(featureLayerFromMap); + } + index1++; + parseCandidateFeatureLayers(index1, candidateFeatureLayers); + } + } + else + { + var indexOnMap:int = map.layerIds.indexOf(arcGISDynamicMapServiceLayer.id) + 1; + for each (var featLayer:FeatureLayer in arr.reverse()) + { + map.addLayer(featLayer, indexOnMap); + indexOnMap++; + } + arrFinalLayers.push(arcGISDynamicMapServiceLayer); + if (!onMapLayerAdd) + { + index = token.count + 1; + getAllFeatureLayers(index, featureLayers); + } + else + { + deactivateEditor(); + editor.featureLayers = featureLayers; + //store the renderer info for each layer on map + storeInfoWindowRenderer(); + } + } + } + + function featureLayerLoadHandler(event:LayerEvent):void + { + var loadedFeatureLayer:FeatureLayer = event.layer as FeatureLayer; + if (loadedFeatureLayer.isEditable) + { + loadedFeatureLayer.outFields = [ '*' ]; + loadedFeatureLayer.mode = FeatureLayer.MODE_SELECTION; + loadedFeatureLayer.gdbVersion = gdbVersion; + loadedFeatureLayer.name = "hiddenLayer_" + fLayerObject.name; + if (gdbVersion) + { + loadedFeatureLayer.name += "-" + gdbVersion; + } + if (arcGISDynamicMapServiceLayer.visible) + { + loadedFeatureLayer.visible = arcGISDynamicMapServiceLayer.visibleLayers ? isFeatureLayerVisible(fLayerObject.id, arcGISDynamicMapServiceLayer) : isFeatureLayerVisible(fLayerObject.id, arcGISDynamicMapServiceLayer, true); + } + else + { + loadedFeatureLayer.visible = false; + } + + loadedFeatureLayer.removeEventListener(FlexEvent.HIDE, featureLayer_hideShowHandler); + loadedFeatureLayer.removeEventListener(FlexEvent.SHOW, featureLayer_hideShowHandler); + loadedFeatureLayer.removeEventListener(FeatureLayerEvent.SELECTION_COMPLETE, featureLayer_selectionComplete); + + loadedFeatureLayer.addEventListener(FlexEvent.HIDE, featureLayer_hideShowHandler); + loadedFeatureLayer.addEventListener(FlexEvent.SHOW, featureLayer_hideShowHandler); + loadedFeatureLayer.addEventListener(FeatureLayerEvent.SELECTION_COMPLETE, featureLayer_selectionComplete, false, 1); + + featureLayerToDynamicMapService[loadedFeatureLayer] = arcGISDynamicMapServiceLayer; + + if (!onMapLayerAdd) + { + featureLayers.push(loadedFeatureLayer); + } + else + { + featureLayers.unshift(loadedFeatureLayer); + } + arr.push(loadedFeatureLayer); + } + index1++; + parseCandidateFeatureLayers(index1, candidateFeatureLayers); + } + + function featureLayerLoadErrorHandler(event:LayerEvent):void + { + index1++; + parseCandidateFeatureLayers(index1, candidateFeatureLayers); + } + } + else + { + index = token.count + 1; + getAllFeatureLayers(index, featureLayers); + } + } + else + { + index = token.count + 1; + getAllFeatureLayers(index, featureLayers); + } + } + function jsonTask_faultHandler(fault:Fault, token:Object = null):void + { + if (!onMapLayerAdd) + { + index = token.count + 1; + getAllFeatureLayers(index, featureLayers); + } + } + } + + private function updateMinMaxScaleOnLayerInfos(copyLayerInfo:LayerInfo, copyLayerInfos:Array):void + { + if (copyLayerInfo.subLayerIds) + { + for each (var childId:Number in copyLayerInfo.subLayerIds) + { + var childLayer:LayerInfo = findLayerById(childId, copyLayerInfos); + if (childLayer) + { + if (copyLayerInfo.minScale > 0) + { + if (childLayer.minScale == 0 || (childLayer.minScale > 0 && childLayer.minScale > copyLayerInfo.minScale)) + { + childLayer.minScale = copyLayerInfo.minScale; + } + } + if (copyLayerInfo.maxScale) + { + if (childLayer.maxScale == 0 || (childLayer.maxScale > 0 && childLayer.maxScale < copyLayerInfo.maxScale)) + { + childLayer.maxScale = copyLayerInfo.maxScale; + } + } + } + } + } + } + + private function updateFeatureLayerMinMaxScale(featureLayer:FeatureLayer, layerId:Number, copyLayerInfos:Array):void + { + for each (var copyLayerInfo:LayerInfo in copyLayerInfos) + { + if (copyLayerInfo.layerId == layerId) + { + featureLayer.minScale = copyLayerInfo.minScale; + featureLayer.maxScale = copyLayerInfo.maxScale; + break; + } + } + } + + private function changeOplListObjectVisibility(layer:Layer):void + { + for (var i:int = 0; i < oplList.length; ) + { + if (oplList[i].layer == layer) + { + oplList[i].visible = true; + AppEvent.dispatch(AppEvent.MAP_LAYER_VISIBLE, oplList[i]); + break; + } + else + { + i++; + } + } + } + + private function mapLayerAddHandler(event:MapEvent):void + { + if (event.layer.name.indexOf("hiddenLayer_") == -1) + { + if (event.layer is FeatureLayer) + { + event.layer.visible = true; + changeOplListObjectVisibility(event.layer); + event.layer.removeEventListener(FeatureLayerEvent.SELECTION_COMPLETE, featureLayer_selectionComplete); + event.layer.addEventListener(FeatureLayerEvent.SELECTION_COMPLETE, featureLayer_selectionComplete, false, 1); + + //store the renderer info for each layer on map + storeInfoWindowRenderer(); + + arrFinalLayers.unshift(event.layer); + featureLayers.unshift(event.layer); + deactivateEditor(); + editor.map = map; + editor.featureLayers = featureLayers; + } + else if (event.layer is ArcGISDynamicMapServiceLayer) + { + event.layer.visible = true; + createFeatureLayersFromDynamicMapService(ArcGISDynamicMapServiceLayer(event.layer), 0, true); + } + } + } + + private function mapLayerRemoveHandler(event:MapEvent):void + { + var index:int = arrFinalLayers.indexOf(event.layer); + if (index != -1) + { + if (event.layer is ArcGISDynamicMapServiceLayer) + { + for each (var fl:FeatureLayer in featureLayers) + { + if (fl.name.indexOf("hiddenLayer_") != -1 && featureLayerToDynamicMapService[fl] == event.layer) + { + map.removeLayer(fl); + featureLayers.splice(featureLayers.indexOf(fl), 1); + } + } + } + else if (event.layer is FeatureLayer) + { + for each (var fl1:FeatureLayer in featureLayers) + { + if (fl1 == event.layer) + { + featureLayers.splice(featureLayers.indexOf(fl1), 1); + } + } + } + delete arrFinalLayers[index]; + deactivateEditor(); + editor.map = map; + editor.featureLayers = featureLayers; + } + } + + private function mapLayerReorderHandler(event:MapEvent):void + { + var layer:Layer = event.layer; + var index:int = event.index; + + var i:int; + var currentFeatureLayerIndex:int; + var newLayerIds:Array = getNewLayerIds(map.layerIds); + if (index <= (newLayerIds.length - arrFinalLayers.length)) + { + if (layer is FeatureLayer && featureLayers.indexOf(layer) != -1) + { + moveFeatureLayerToTheBottom(FeatureLayer(layer)); + } + else if (layer is ArcGISDynamicMapServiceLayer) + { + var arr:Array = []; + for each (var fl:FeatureLayer in featureLayers) + { + if (fl.name.indexOf("hiddenLayer_") != -1 && featureLayerToDynamicMapService[fl] == layer) + { + arr.push(fl); + } + } + if (arr.length) + { + for each (var fl1:FeatureLayer in arr) + { + moveFeatureLayerToTheBottom(fl1); + } + } + } + } + else if (newLayerIds.length - arrFinalLayers.length < index < newLayerIds.length) + { + if (layer is FeatureLayer && featureLayers.indexOf(layer) != -1) + { + moveFeatureLayer(FeatureLayer(layer)); + } + else if (layer is ArcGISDynamicMapServiceLayer) + { + var arr1:Array = []; + for each (var fLayer:FeatureLayer in featureLayers) + { + if (fLayer.name.indexOf("hiddenLayer_") != -1 && featureLayerToDynamicMapService[fLayer] == layer) + { + arr1.push(fLayer); + } + } + if (arr1.length) + { + for each (var fLayer1:FeatureLayer in arr1) + { + moveFeatureLayer(fLayer1); + } + } + } + } + deactivateEditor(); + editor.map = map; + editor.featureLayers = featureLayers; + + function moveFeatureLayer(layer:FeatureLayer):void + { + currentFeatureLayerIndex = featureLayers.indexOf(layer); + var newFeatureLayerIndex:Number = newLayerIds.length - index - 1; + if (newFeatureLayerIndex < currentFeatureLayerIndex) + { + for (i = currentFeatureLayerIndex; newFeatureLayerIndex <= i; i--) + { + if (i == newFeatureLayerIndex) + { + featureLayers[newFeatureLayerIndex] = layer; + } + else + { + featureLayers[i] = featureLayers[i - 1]; + } + } + } + else + { + for (i = currentFeatureLayerIndex; i <= newFeatureLayerIndex; i++) + { + if (i == newFeatureLayerIndex) + { + featureLayers[newFeatureLayerIndex] = layer; + } + else + { + featureLayers[i] = featureLayers[i + 1]; + } + } + } + } + + function moveFeatureLayerToTheBottom(layer:FeatureLayer):void + { + currentFeatureLayerIndex = featureLayers.indexOf(layer); + for (i = currentFeatureLayerIndex; i < featureLayers.length; i++) + { + if (i == featureLayers.length - 1) + { + featureLayers[featureLayers.length - 1] = layer; + } + else + { + featureLayers[i] = featureLayers[i + 1]; + } + } + } + } + + private function getNewLayerIds(layerIds:Array):Array + { + var result:Array = []; + for (var i:int = 0; i < layerIds.length; i++) + { + var layer:Layer = ArrayCollection(map.layers).getItemAt(i) as Layer; + if (layer.name.indexOf("hiddenLayer_") != -1 || (layer is GraphicsLayer && !(layer is FeatureLayer))) + { + continue + } + result.push(layerIds[i]); + } + return result; + } + + private function storeInfoWindowRenderer():void + { + for each (var layer:Layer in map.layers) + { + if (layer is ArcGISDynamicMapServiceLayer && ArcGISDynamicMapServiceLayer(layer).layerInfoWindowRenderers) + { + dictionary[layer] = ArcGISDynamicMapServiceLayer(layer).layerInfoWindowRenderers; + ArcGISDynamicMapServiceLayer(layer).layerInfoWindowRenderers = null; // set it to null, as widget overtakes now + } + else if (layer is ArcGISTiledMapServiceLayer && ArcGISTiledMapServiceLayer(layer).layerInfoWindowRenderers) + { + dictionary[layer] = ArcGISTiledMapServiceLayer(layer).layerInfoWindowRenderers; + ArcGISTiledMapServiceLayer(layer).layerInfoWindowRenderers = null; // set it to null, as widget overtakes now + } + else if (layer is GraphicsLayer && GraphicsLayer(layer).infoWindowRenderer) + { + dictionary[layer] = GraphicsLayer(layer).infoWindowRenderer; + GraphicsLayer(layer).infoWindowRenderer = null; // set it to null, as widget overtakes now + } + } + } + + private function isLayerPartOfExcludeLayers(layerName:String):Boolean + { + var result:Boolean; + + // loop through all the excludeLayers + for (var n:int = 0; n < excludeLayers.length; ) + { + if (layerName == excludeLayers[n]) + { + result = true; + break; + } + else + { + n++; + } + } + + return result; + } + + private function isFeatureLayerPartOfOpList(featureLayerURL:String, gdbVersion:String):Boolean + { + var result:Boolean; + + // loop through all the map layers + for each (var layerObj:Object in configData.opLayers) + { + var layer:Layer = layerObj.layer; + if (layer is FeatureLayer + && FeatureLayer(layer).url == featureLayerURL + && FeatureLayer(layer).gdbVersion == gdbVersion) + { + result = true; + break; + } + } + + return result; + } + + private function getFeatureLayerFromMap(featureLayerURL:String, gdbVersion:String):FeatureLayer + { + var result:FeatureLayer; + + // loop through all the map layers + for (var n:int = 0; n < mapLayers.length; ) + { + if (mapLayers.getItemAt(n) is FeatureLayer + && FeatureLayer(mapLayers.getItemAt(n)).url == featureLayerURL + && FeatureLayer(mapLayers.getItemAt(n)).gdbVersion == gdbVersion) + { + result = mapLayers.getItemAt(n) as FeatureLayer; + break; + } + else + { + n++; + } + } + + return result; + } + + private function visibleLayersChange(event:Event = null):void + { + var dynamicMapServiceLayer:ArcGISDynamicMapServiceLayer = ArcGISDynamicMapServiceLayer(event.target); + if (dynamicMapServiceLayer.visibleLayers) + { + dynamicMapServiceLayer.visibleLayers.removeEventListener(CollectionEvent.COLLECTION_CHANGE, visibleLayersChangeHandler); + dynamicMapServiceLayer.visibleLayers.addEventListener(CollectionEvent.COLLECTION_CHANGE, visibleLayersChangeHandler); + } + if (dynamicMapServiceLayer.visible) + { + updateFeatureLayersVisibility(dynamicMapServiceLayer, dynamicMapServiceLayer.visibleLayers ? false : true); + } + } + + private function visibleLayersChangeHandler(event:CollectionEvent):void + { + const mapLayers:ArrayCollection = ArrayCollection(map.layers); + for (var i:int = 0; i < mapLayers.length; ) + { + if (mapLayers.getItemAt(i) is ArcGISDynamicMapServiceLayer && + ArcGISDynamicMapServiceLayer(mapLayers.getItemAt(i)).visible && + ArcGISDynamicMapServiceLayer(mapLayers.getItemAt(i)).visibleLayers === event.target) + { + updateFeatureLayersVisibility(ArcGISDynamicMapServiceLayer(mapLayers.getItemAt(i))); + break; + } + else + { + i++; + } + } + } + + private function layer_isInScaleRangeChangeHandler(event:LayerEvent):void + { + updateFeatureLayersVisibility(ArcGISDynamicMapServiceLayer(event.target)); + } + + private function layer_hideShowHandler(event:FlexEvent):void + { + updateFeatureLayersVisibility(ArcGISDynamicMapServiceLayer(event.target)); + } + + private function updateFeatureLayersVisibility(layer:ArcGISDynamicMapServiceLayer, goBackToDefaultVisibility:Boolean = false):void + { + for each (var featureLayer:FeatureLayer in featureLayers) + { + if (featureLayer.name.indexOf("hiddenLayer_") != -1 && featureLayerToDynamicMapService[featureLayer] === layer) // layers from a map service + { + var featureLayerId:String = featureLayer.url.substring(featureLayer.url.lastIndexOf("/") + 1, featureLayer.url.length); + featureLayer.visible = layer.visible ? isFeatureLayerVisible(featureLayerId, layer, goBackToDefaultVisibility) : false; + } + } + } + + private function isFeatureLayerVisible(layerId:String, dynamicMapServiceLayer:ArcGISDynamicMapServiceLayer, checkDefaultVisibility:Boolean = false):Boolean + { + var result:Boolean; + + if (!checkDefaultVisibility && dynamicMapServiceLayer.visibleLayers) + { + var actualVisibleLayers:Array = getActualVisibleLayers(dynamicMapServiceLayer.visibleLayers.toArray(), dynamicMapServiceLayer.layerInfos); + result = actualVisibleLayers.indexOf(Number(layerId)) != -1; + } + else + { + var layerInfos:Array = dynamicMapServiceLayer.layerInfos; + if (layerInfos) + { + for (var i:int = 0; i < layerInfos.length; ) + { + if (layerInfos[i].layerId == layerId) + { + if (layerInfos[i].parentLayerId != -1) + { + // find the parent and check its default visibility + var parentLayerInfo:LayerInfo = findLayerById(layerInfos[i].parentLayerId, layerInfos); + result = parentLayerInfo.defaultVisibility; + } + else + { + result = layerInfos[i].defaultVisibility; + } + break; + } + else + { + i++; + } + } + } + } + + return result; + } + + private function getActualVisibleLayers(layerIds:Array, layerInfos:Array):Array + { + var result:Array = []; + + layerIds = layerIds ? layerIds.concat() : null; + var layerInfo:LayerInfo; + var layerIdIndex:int; + + if (layerIds) + { + // replace group layers with their sub layers + for each (layerInfo in layerInfos) + { + layerIdIndex = layerIds.indexOf(layerInfo.layerId); + if (layerInfo.subLayerIds && layerIdIndex != -1) + { + layerIds.splice(layerIdIndex, 1); // remove the group layer id + for each (var subLayerId:Number in layerInfo.subLayerIds) + { + layerIds.push(subLayerId); // add subLayerId + } + } + } + + for each (layerInfo in layerInfos.reverse()) + { + if (layerIds.indexOf(layerInfo.layerId) != -1 && layerIds.indexOf(layerInfo.parentLayerId) == -1 && layerInfo.parentLayerId != -1) + { + layerIds.push(layerInfo.parentLayerId); + } + } + + result = layerIds; + } + + return result; + } + + private function findLayerById(id:Number, layerInfos:Array):LayerInfo + { + for each (var layerInfo:LayerInfo in layerInfos) + { + if (id == layerInfo.layerId) + { + return layerInfo; + } + } + return null; + } + + private function featureLayer_hideShowHandler(event:FlexEvent):void + { + var featureLayer:FeatureLayer = event.target as FeatureLayer; + var featureLayerId:Number = Number(featureLayer.url.substring(featureLayer.url.lastIndexOf("/") + 1, featureLayer.url.length)); + var dynamicMapServiceLayer:ArcGISDynamicMapServiceLayer = featureLayerToDynamicMapService[featureLayer]; + if (featureLayer.visible) + { + dynamicMapServiceLayer.visible = true; + if (dynamicMapServiceLayer.visibleLayers) + { + dynamicMapServiceLayer.visibleLayers.addItem(featureLayerId); + } + } + else + { + if (dynamicMapServiceLayer.visibleLayers && dynamicMapServiceLayer.visibleLayers.getItemIndex(featureLayerId) != -1) + { + dynamicMapServiceLayer.visibleLayers.removeItemAt(dynamicMapServiceLayer.visibleLayers.getItemIndex(featureLayerId)); + + } + } + } + + private function atleastOneFeatureLayerHasCreateCapability(featureLayers:Array):Boolean + { + var result:Boolean; + for each (var featureLayer:FeatureLayer in featureLayers) + { + if (isCreateAllowed(featureLayer)) + { + result = true; + break; + } + } + return result; + } + + private function isCreateAllowed(featureLayer:FeatureLayer):Boolean + { + var result:Boolean; + + if (featureLayer.layerDetails is FeatureLayerDetails) + { + result = (featureLayer.layerDetails as FeatureLayerDetails).isCreateAllowed; + } + else if (featureLayer.tableDetails is FeatureTableDetails) + { + result = (featureLayer.layerDetails as FeatureTableDetails).isCreateAllowed; + } + + return result; + } + + private function deactivateEditor():void + { + map.infoWindow.hide(); + editor.templatePicker.clearSelection(); + + editor.featureLayers = null; + editor.map = null; + editor.drawTool.deactivate(); + editor.editTool.deactivate(); + } + + private function featureLayer_selectionComplete(event:FeatureLayerEvent):void + { + for each (var field:Field in event.target.layerDetails.fields) + { + if (field.type == Field.TYPE_DATE) + { + for each (var feature:Graphic in event.features) + { + var date:Date = new Date(feature.attributes[field.name]); + if (date.milliseconds == 999) + { + date.milliseconds++; //Add 1ms to date values ending in 999 to workaround REST date bug + feature.attributes[field.name] = date.time; + } + } + } + } + } + + private function infoWindowCloseHandler(event:Event):void + { + map.infoWindow.content = editor.attributeInspector; + if (attachmentInspector) + { + attachmentInspector.clear(); + } + } + + private function attributeGroupClickedHandler(event:Event):void + { + map.infoWindow.content = editor.attributeInspector; + } + + private function attachmentGroupClickedHandler(event:Event):void + { + map.infoWindow.content = attachmentInspector; + + // queues an operation(showAttachments) to be performed for the next screen refresh, rather than in the current update. + // Without the callLater() method, you might try to access a property of a component + // that is not yet available. + callLater(showAttachments); + + function showAttachments():void + { + attachmentInspector.showAttachments(editor.attributeInspector.activeFeature, editor.attributeInspector.activeFeature.graphicsLayer as FeatureLayer); + } + } + + private function relatedRecordsGroupClickedHandler(event:Event):void + { + map.infoWindow.content = relationshipInspector; + relationshipInspector.graphic = editor.attributeInspector.activeFeature; + } + + private function attachmentInspector_initializeHandler(event:FlexEvent):void + { + super.initializationComplete(); + attachmentInspector.addEventListener(AttachmentMouseEvent.ATTACHMENT_DOUBLE_CLICK, attachmentDoubleClickHandler); + } + + private function attachmentDoubleClickHandler(event:AttachmentMouseEvent):void + { + navigateToURL(new URLRequest(event.attachmentInfo.url)); + } + + private function attributeGroup_clickHandler(event:MouseEvent):void + { + map.infoWindow.content = editor.attributeInspector; + } + + private function attributeInspector_showFeatureHandler(event:AttributeInspectorEvent):void + { + attachmentInspector.addEnabled = editor.attributeInspector.updateEnabled; + attachmentInspector.deleteEnabled = editor.attributeInspector.deleteButtonVisible; + const featureLayer:FeatureLayer = event.featureLayer; + var settingsKey:String = featureLayer.name; + if (featureLayer.name.indexOf("hiddenLayer_") != -1) + { + settingsKey = hiddenFeatureLayerToSettingsName[featureLayer]; + if (!settingsKey) + { + settingsKey = featureLayerToDynamicMapService[featureLayer].name + + "/" + featureLayer.url.substring(featureLayer.url.lastIndexOf("/") + 1, featureLayer.url.length); + hiddenFeatureLayerToSettingsName[featureLayer] = settingsKey; + } + } + var settingsObject:Object = layerToSettings[settingsKey]; + if (settingsObject) + { + var outFields:Array = settingsObject.outFields as Array; + if (outFields && outFields.length) + { + var attributeInspectorFieldInspectors:Array = []; + for each (var field:Field in featureLayer.layerDetails.fields) + { + var fieldInspector:FieldInspector = new FieldInspector; + fieldInspector.featureLayer = featureLayer; + fieldInspector.fieldName = field.name; + fieldInspector.visible = false; + for each (var fieldObject:Object in outFields) + { + if (fieldObject.name == field.name) + { + fieldInspector.label = fieldObject.alias; + fieldInspector.toolTip = fieldObject.tooltip; + fieldInspector.visible = true; + break; + } + } + attributeInspectorFieldInspectors.push(fieldInspector); + } + editor.attributeInspector.fieldInspectors = attributeInspectorFieldInspectors; + } + else + { + editor.attributeInspector.fieldInspectors = []; + } + var singleToMultilineThreshold:Number = settingsObject.singleToMultilineThreshold; + if (singleToMultilineThreshold && !isNaN(singleToMultilineThreshold)) + { + editor.attributeInspector.singleToMultilineThreshold = singleToMultilineThreshold; + } + var formFieldsOrder:String = settingsObject.formFieldsOrder; + if (formFieldsOrder) + { + editor.attributeInspector.formFieldsOrder = formFieldsOrder; + } + var showObjectID:String = settingsObject.showObjectID; + if (showObjectID) + { + editor.attributeInspector.showObjectID = showObjectID == "true"; + } + var showGlobalID:String = settingsObject.showGlobalID; + if (showGlobalID) + { + editor.attributeInspector.showGlobalID = showGlobalID == "true"; + } + } + } + + private function widgetClosedHandler(event:Event):void + { + disablePanZoomNavigationWidget = false; + addSharedData("Edit_Widget", new ArrayCollection([ disablePanZoomNavigationWidget ])); // to be able to enable pan/zoomin/zoomout + + lastState = "closed"; + + // clear feature layer selection + for each (var featureLayer:FeatureLayer in featureLayers) + { + if (featureLayer.selectedFeatures.length > 0) + { + featureLayer.clearSelection(); + } + if (featureLayer.name.indexOf("hiddenLayer_") != -1) + { + map.removeLayer(featureLayer); + } + } + // assign back the renderer info + for (var layer:Object in dictionary) + { + if (layer is ArcGISDynamicMapServiceLayer) + { + ArcGISDynamicMapServiceLayer(layer).layerInfoWindowRenderers = dictionary[layer]; + } + else if (layer is ArcGISTiledMapServiceLayer) + { + ArcGISTiledMapServiceLayer(layer).layerInfoWindowRenderers = dictionary[layer]; + } + if (layer is GraphicsLayer) + { + GraphicsLayer(layer).infoWindowRenderer = dictionary[layer]; + } + } + deactivateEditor(); + } + + private function widgetOpenedHandler(event:Event):void + { + disablePanZoomNavigationWidget = true; + addSharedData("Edit_Widget", new ArrayCollection([ disablePanZoomNavigationWidget ])); // to be able to disable pan/zoomin/zoomout + + // hide the infowindow if already there from other widget + if (lastState == "closed") // reset only if the widget was opened after being closed + { + mapLayers = map.layers as ArrayCollection; + arrLayers = getLayers(mapLayers); // get all the layers on map except basemap layers; + populateEditor(arrLayers); + } + } + + private function widgetMinimizedHandler(event:Event):void + { + lastState = "minimized"; + } + ]]> + + + + + + + + + + + + + + + + + + + diff --git a/src/widgets/Edit/EditWidget.xml b/src/widgets/Edit/EditWidget.xml index fc7b5db..6709a29 100644 --- a/src/widgets/Edit/EditWidget.xml +++ b/src/widgets/Edit/EditWidget.xml @@ -1,21 +1,21 @@ - - - - - polygon,freehandpolygon,extent,autocomplete - polyline,freehandpolyline,line - - true - true - true - false - false - false - true - true - - - + + + + + polygon,freehandpolygon,extent,autocomplete + polyline,freehandpolyline,line + + true + true + true + false + false + false + true + true + + + diff --git a/src/widgets/Edit/EditWidgetAttachmentInspectorSkin.mxml b/src/widgets/Edit/EditWidgetAttachmentInspectorSkin.mxml index af51ce6..b2485c5 100644 --- a/src/widgets/Edit/EditWidgetAttachmentInspectorSkin.mxml +++ b/src/widgets/Edit/EditWidgetAttachmentInspectorSkin.mxml @@ -1,253 +1,253 @@ - - - - - - - [HostComponent("com.esri.ags.components.AttachmentInspector")] - - - - - - - - - - - 0) - { - if (hostComponent.attachmentInfos.length == 1) - { - numAttachments.text = LocalizationUtil.getDefaultString('singleAttachmentText', 1); - } - else - { - numAttachments.text = LocalizationUtil.getDefaultString('multipleAttachmentsText', hostComponent.attachmentInfos.length); - } - } - } - - private function attributeGroup_clickHandler(event:MouseEvent):void - { - dispatchEvent(new Event("attributeGroupClicked", true, true)); - } - ]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + [HostComponent("com.esri.ags.components.AttachmentInspector")] + + + + + + + + + + + 0) + { + if (hostComponent.attachmentInfos.length == 1) + { + numAttachments.text = LocalizationUtil.getDefaultString('singleAttachmentText', 1); + } + else + { + numAttachments.text = LocalizationUtil.getDefaultString('multipleAttachmentsText', hostComponent.attachmentInfos.length); + } + } + } + + private function attributeGroup_clickHandler(event:MouseEvent):void + { + dispatchEvent(new Event("attributeGroupClicked", true, true)); + } + ]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/widgets/Edit/EditWidgetAttributeInspectorSkin.mxml b/src/widgets/Edit/EditWidgetAttributeInspectorSkin.mxml index 7d4d118..599aceb 100644 --- a/src/widgets/Edit/EditWidgetAttributeInspectorSkin.mxml +++ b/src/widgets/Edit/EditWidgetAttributeInspectorSkin.mxml @@ -1,191 +1,191 @@ - - - - - - - /** - * A strongly typed property that references the component to which this skin is applied. - */ - [HostComponent("com.esri.ags.components.AttributeInspector")] - - [Event(name="attachmentGroupClicked", type="flash.events.Event")] - [Event(name="relatedRecordsGroupClicked", type="flash.events.Event")] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + /** + * A strongly typed property that references the component to which this skin is applied. + */ + [HostComponent("com.esri.ags.components.AttributeInspector")] + + [Event(name="attachmentGroupClicked", type="flash.events.Event")] + [Event(name="relatedRecordsGroupClicked", type="flash.events.Event")] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/widgets/Edit/EditWidgetTemplatePickerListItemRenderer.mxml b/src/widgets/Edit/EditWidgetTemplatePickerListItemRenderer.mxml index 75da101..fa01a4e 100644 --- a/src/widgets/Edit/EditWidgetTemplatePickerListItemRenderer.mxml +++ b/src/widgets/Edit/EditWidgetTemplatePickerListItemRenderer.mxml @@ -1,91 +1,91 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/widgets/Edit/EditWidgetTemplatePickerSkin.mxml b/src/widgets/Edit/EditWidgetTemplatePickerSkin.mxml index daaebd4..9ece8f2 100644 --- a/src/widgets/Edit/EditWidgetTemplatePickerSkin.mxml +++ b/src/widgets/Edit/EditWidgetTemplatePickerSkin.mxml @@ -1,379 +1,379 @@ - - - - - - - - /** - * A strongly typed property that references the component to which this skin is applied. - */ - [HostComponent("com.esri.ags.components.TemplatePicker")] - - - - - - - - - - - - - - - - - - - - - + + + + + + + + /** + * A strongly typed property that references the component to which this skin is applied. + */ + [HostComponent("com.esri.ags.components.TemplatePicker")] + + + + + + + + + + + + + + + + + + + + + diff --git a/src/widgets/GeoRSS/GeoRSSFeedDataGroup.as b/src/widgets/GeoRSS/GeoRSSFeedDataGroup.as index 8f01a58..c7ca1b9 100644 --- a/src/widgets/GeoRSS/GeoRSSFeedDataGroup.as +++ b/src/widgets/GeoRSS/GeoRSSFeedDataGroup.as @@ -1,38 +1,38 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2010-2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package widgets.GeoRSS -{ - -import mx.core.ClassFactory; - -import spark.components.DataGroup; - -// these events bubble up from the GeoRSSFeedItemRenderer -[Event(name="geoRSSFeedClick", type="flash.events.Event")] -[Event(name="geoRSSFeedMouseOver", type="flash.events.Event")] -[Event(name="geoRSSFeedMouseOut", type="flash.events.Event")] - -public class GeoRSSFeedDataGroup extends DataGroup -{ - public function GeoRSSFeedDataGroup() - { - super(); - - this.itemRenderer = new ClassFactory(GeoRSSFeedItemRenderer); - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2010-2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package widgets.GeoRSS +{ + +import mx.core.ClassFactory; + +import spark.components.DataGroup; + +// these events bubble up from the GeoRSSFeedItemRenderer +[Event(name="geoRSSFeedClick", type="flash.events.Event")] +[Event(name="geoRSSFeedMouseOver", type="flash.events.Event")] +[Event(name="geoRSSFeedMouseOut", type="flash.events.Event")] + +public class GeoRSSFeedDataGroup extends DataGroup +{ + public function GeoRSSFeedDataGroup() + { + super(); + + this.itemRenderer = new ClassFactory(GeoRSSFeedItemRenderer); + } +} + +} diff --git a/src/widgets/GeoRSS/GeoRSSFeedItemRenderer.mxml b/src/widgets/GeoRSS/GeoRSSFeedItemRenderer.mxml index a536acc..204184c 100644 --- a/src/widgets/GeoRSS/GeoRSSFeedItemRenderer.mxml +++ b/src/widgets/GeoRSS/GeoRSSFeedItemRenderer.mxml @@ -1,185 +1,185 @@ - - - - - - 0) - { - resultIcon.removeChildAt(0); - } - lastResultSymbol = geoRSSFeed.symbol; - lastResultSwatch = lastResultSymbol.createSwatch(20, 20); - } - - resultIcon.addChild(lastResultSwatch); - } - else - { - if (lastResultSwatch && (lastResultSwatch.parent == resultIcon)) - { - resultIcon.removeChild(lastResultSwatch); - } - } - } - - private function itemrenderer_clickHandler(event:MouseEvent):void - { - dispatchEvent(new Event(GEO_RSS_FEED_CLICK, true)); // bubbles - } - - private function itemrenderer_mouseOverHandler(event:MouseEvent):void - { - dispatchEvent(new Event(GEO_RSS_FEED_MOUSE_OVER, true)); // bubbles - } - - private function itemrenderer_mouseOutHandler(event:MouseEvent):void - { - dispatchEvent(new Event(GEO_RSS_FEED_MOUSE_OUT, true)); // bubbles - } - - private function showLink(event:MouseEvent):void - { - event.stopImmediatePropagation(); // don't dispatch GEO_RSS_FEED_CLICK since we don't want to zoom to feature - navigateToURL(new URLRequest(geoRSSFeedAttributes.link)); - } - - protected function feedLink_preinitializeHandler(event:FlexEvent):void - { - if (isRtl()) - { - feedLink.source = "assets/images/w_link_rtl.png"; - } - else - { - feedLink.source = "assets/images/w_link.png"; - } - } - - private function isRtl():Boolean - { - var result:Boolean = false; - try - { - result = (FlexGlobals.topLevelApplication as Application).layoutDirection == "rtl"; - } - catch (error:Error) - { - result = false; - } - return result; - } - ]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + 0) + { + resultIcon.removeChildAt(0); + } + lastResultSymbol = geoRSSFeed.symbol; + lastResultSwatch = lastResultSymbol.createSwatch(20, 20); + } + + resultIcon.addChild(lastResultSwatch); + } + else + { + if (lastResultSwatch && (lastResultSwatch.parent == resultIcon)) + { + resultIcon.removeChild(lastResultSwatch); + } + } + } + + private function itemrenderer_clickHandler(event:MouseEvent):void + { + dispatchEvent(new Event(GEO_RSS_FEED_CLICK, true)); // bubbles + } + + private function itemrenderer_mouseOverHandler(event:MouseEvent):void + { + dispatchEvent(new Event(GEO_RSS_FEED_MOUSE_OVER, true)); // bubbles + } + + private function itemrenderer_mouseOutHandler(event:MouseEvent):void + { + dispatchEvent(new Event(GEO_RSS_FEED_MOUSE_OUT, true)); // bubbles + } + + private function showLink(event:MouseEvent):void + { + event.stopImmediatePropagation(); // don't dispatch GEO_RSS_FEED_CLICK since we don't want to zoom to feature + navigateToURL(new URLRequest(geoRSSFeedAttributes.link)); + } + + protected function feedLink_preinitializeHandler(event:FlexEvent):void + { + if (isRtl()) + { + feedLink.source = "assets/images/w_link_rtl.png"; + } + else + { + feedLink.source = "assets/images/w_link.png"; + } + } + + private function isRtl():Boolean + { + var result:Boolean = false; + try + { + result = (FlexGlobals.topLevelApplication as Application).layoutDirection == "rtl"; + } + catch (error:Error) + { + result = false; + } + return result; + } + ]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/widgets/GeoRSS/GeoRSSWidget.mxml b/src/widgets/GeoRSS/GeoRSSWidget.mxml index 8b59acf..8f30868 100644 --- a/src/widgets/GeoRSS/GeoRSSWidget.mxml +++ b/src/widgets/GeoRSS/GeoRSSWidget.mxml @@ -1,556 +1,556 @@ - - - - - - [^,]+),\.*/; - - //labels - private var loadingLabel:String; - - private var querySource:String; - private var queryFields:XMLList; - private var queryTitleField:String; - private var queryLinkField:String; - private var queryRefreshRate:String; - private var zoomScale:Number = 50000; - private var mouseDownStageX:Number; - private var mouseDownStageY:Number; - - [Bindable] - private var msgVisible:Boolean = false; - [Bindable] - private var geoRSSFeedAC:ArrayCollection; - - private var ac:ArrayCollection; - private var graphicsLayer:GraphicsLayer; - private var highlightTimer:uint; - private var infowidgetReady:Boolean = false; - private var rsstype:String = ""; - private var symbols:XML = null; - private var timer:Timer; - private var useProxy:Boolean; - - // symbols - private var resultMarkerSymbol:Symbol; - private var resultLineSymbol:Symbol; - private var resultFillSymbol:Symbol; - - private var popUpRenderer:PopUpRenderer = new PopUpRenderer(); - - private function basewidget_initializeHandler():void - { - if (isPartOfPanel) // if widget is part of "left", "right" or "bottom" panel - { - this.percentWidth = this.percentHeight = 100; - wTemplate.percentWidth = wTemplate.percentHeight = 100; - } - else - { - wTemplate.width = 330; - wTemplate.height = 300; - wTemplate.minWidth = 300 - wTemplate.minHeight = 100; - } - } - - private function basewidget_widgetConfigLoaded():void - { - if (configXML) - { - //labels - loadingLabel = configXML.labels.loadinglabel || getDefaultString("loadingLabel"); - - querySource = configXML.source; - queryFields = configXML.fields.field; - queryTitleField = configXML.titlefield; - queryLinkField = configXML.linkfield; - queryRefreshRate = configXML.refreshrate; - if (Number(configXML.zoomscale) > 0) - { - zoomScale = Number(configXML.zoomscale); - } - //marker symbol - const resultMarkerSymbolURL:String = configXML.symbols.picturemarkersymbol.@url || widgetIcon; - const parsedResultMarkerSymbolHeight:Number = parseFloat(configXML.symbols.picturemarkersymbol.@height[0]); - const resultMarkerSymbolHeight:Number = isNaN(parsedResultMarkerSymbolHeight) ? 0 : parsedResultMarkerSymbolHeight; - const parsedResultMarkerSymbolWidth:Number = parseFloat(configXML.symbols.picturemarkersymbol.@width[0]); - const resultMarkerSymbolWidth:Number = isNaN(parsedResultMarkerSymbolWidth) ? 0 : parsedResultMarkerSymbolWidth; - const resultMarkerSymbolXOffset:Number = (configXML.symbols.picturemarkersymbol.@xoffset != null) ? configXML.symbols.picturemarkersymbol.@xoffset : 0; - const resultMarkerSymbolYOffset:Number = (configXML.symbols.picturemarkersymbol.@yoffset != null) ? configXML.symbols.picturemarkersymbol.@yoffset : 0; - resultMarkerSymbol = new PictureMarkerSymbol(resultMarkerSymbolURL, resultMarkerSymbolWidth, resultMarkerSymbolHeight, resultMarkerSymbolXOffset, resultMarkerSymbolYOffset); - - //line symbol - const resultLineSymbolColor:uint = configXML.symbols.simplelinesymbol.@color || 0xFF0000; - const resultLineSymbolAlpha:Number = (configXML.symbols.simplelinesymbol.@alpha[0] != null) ? configXML.symbols.simplelinesymbol.@alpha : 0.8; - const resultLineSymbolWidth:Number = (configXML.symbols.simplelinesymbol.@width[0] != null) ? configXML.symbols.simplelinesymbol.@width : 2; - resultLineSymbol = new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, resultLineSymbolColor, resultLineSymbolAlpha, resultLineSymbolWidth); - - // fill symbol - const resultFillSymbolColor:uint = configXML.symbols.simplefillsymbol.@color || 0xFF0000; - const resultFillSymbolAlpha:Number = (configXML.symbols.simplefillsymbol.@alpha[0] != null) ? configXML.symbols.simplefillsymbol.@alpha : 0.5; - const resultFillSymbolOutlineColor:uint = configXML.symbols.simplefillsymbol.outline.@color || 0xFF0000; - const resultFillSymbolOutlineAlpha:Number = (configXML.symbols.simplefillsymbol.outline.@alpha[0] != null) ? configXML.symbols.simplefillsymbol.outline.@alpha : 0.8; - const resultFillSymbolOutlineWidth:Number = (configXML.symbols.simplefillsymbol.outline.@width[0] != null) ? configXML.symbols.simplefillsymbol.outline.@width : 2; - resultFillSymbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID, resultFillSymbolColor, resultFillSymbolAlpha, new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, resultFillSymbolOutlineColor, resultFillSymbolOutlineAlpha, resultFillSymbolOutlineWidth)); - - graphicsLayer = new GraphicsLayer(); - graphicsLayer.name = configXML.layername || widgetTitle; - graphicsLayer.symbol = resultMarkerSymbol; - graphicsLayer.addEventListener(FlexEvent.HIDE, graphicsLayer_hideHandler); - - var clustererParser:ClustererParser = new ClustererParser(); - var clusterer:IClusterer = clustererParser.parseClusterer(configXML.clustering[0]); - if (clusterer) - { - graphicsLayer.clusterer = clusterer; - } - - map.addLayer(graphicsLayer); - - //useproxy - if (configXML.useproxy.length() > 0) - { - useProxy = configXML.useproxy == "true"; - } - } - queryRSSData(); - startWidgetTimer(); - } - - private function graphicsLayer_hideHandler(event:FlexEvent):void - { - hideInfoWindow(); - } - - private function startWidgetTimer():void - { - if (queryRefreshRate) - { - var seconds:Number = Number(queryRefreshRate); - var rate:Number = seconds * 1000; - stopWidgetTimer(); - timer = new Timer(rate); - timer.addEventListener(TimerEvent.TIMER, timerTick); - timer.start(); - } - } - - private function stopWidgetTimer():void - { - if (timer != null) - { - if (timer.running) - { - timer.stop(); - } - } - } - - private function timerTick(event:TimerEvent):void - { - queryRSSData(); - } - - private function queryRSSData():void - { - if (querySource) - { - if (useProxy && configData.proxyUrl) - { - rssService.url = configData.proxyUrl + "?" + querySource; - } - else - { - rssService.url = querySource; - } - rssService.send(); - showMessage(loadingLabel, true); - } - } - - private function faultHandler(event:FaultEvent):void - { - showError(ErrorMessageUtil.buildFaultMessage(event.fault)); - } - - private function loadRSSData(event:ResultEvent):void - { - try - { - if (event.result is XML) - { - var x:XML = XML(event.result); - if (x.name() == "rss" && Number(x.@version) <= 2) - { - rsstype = "RSS"; - ac = parseRSS(x); - } - else if (x.namespace().uri.toLowerCase() == "http://www.w3.org/2005/atom") - { - rsstype = "ATOM"; - ac = parseAtom(x); - } - else - { - showMessage(getDefaultString("unknownRSSFeedTypeError"), false); - } - } - else - { - showMessage(getDefaultString("httpResponseNotXMLError"), false); - } - geoRSSFeedAC = createGeoRSSFeed(ac); - - addSharedData(widgetTitle, geoRSSFeedAC); - clearMessage(); - } - catch (error:Error) - { - showMessage(getDefaultString("rssFeedParsingError", error.message), false); - } - } - - //create record data - private function createGeoRSSFeed(ac:ArrayCollection):ArrayCollection - { - graphicsLayer.clear(); - var result:ArrayCollection = new ArrayCollection(); - - var isAnAtomFeed:Boolean = rsstype == "ATOM"; - for (var i:Number = 0; i < ac.length; i++) - { - var recxml:XML = XML(ac.getItemAt(i)); - - var icon:String = widgetIcon; - var title:String = ""; - if (queryTitleField) - { - title = isAnAtomFeed ? recxml.ATOM::[ queryTitleField ] : recxml[queryTitleField]; - } - if (!title) - { - title = widgetTitle; - } - var content:String = ""; - if (isAnAtomFeed) - { - var date:Date = DateFormatter.parseDateString(recxml.DC::date); - content += date.toString(); - } - else - { - var j:Number = 0; - for each (var fieldXML:XML in queryFields) - { - var value:String = recxml[fieldXML.@name[0]]; - if (value) - { - if (fieldXML.@alias[0]) - { - content += fieldXML.@alias[0]; - } - else - { - content += fieldXML.@name[0]; - } - content += ": " + value + "\n"; - } - } - } - var link:String; - if (queryLinkField) - { - link = isAnAtomFeed ? recxml.ATOM::[ queryLinkField ].@href[0] : recxml[queryLinkField]; - } - - var graphic:Graphic = new Graphic(); - graphic.checkForMouseListeners = false; - // geometry - var geometry:Geometry = GeoRSSUtil.toGeometry(recxml); - if (map.spatialReference.isWebMercator()) - { - geometry = WebMercatorUtil.geographicToWebMercator(geometry); - } - graphic.geometry = geometry; - if (geometry) - { - switch (geometry.type) - { - case Geometry.POLYLINE: - { - graphic.symbol = resultLineSymbol; - break; - } - case Geometry.POLYGON: - { - graphic.symbol = resultFillSymbol; - break; - } - case Geometry.MAPPOINT: - { - graphic.symbol = resultMarkerSymbol; - break; - } - } - } - // attributes - var resultAttributes:ResultAttributes = new ResultAttributes(); - resultAttributes.title = title; - resultAttributes.content = content; - resultAttributes.link = link ? link : null; - graphic.attributes = resultAttributes; - - var geoRSSFeed:ResultItem = new ResultItem(graphic, resultAttributes); - result.addItem(geoRSSFeed); - if (geoRSSFeed.center && !isNaN(geoRSSFeed.center.x) && !isNaN(geoRSSFeed.center.y)) // make sure it is a valid point - { - graphicsLayer.add(graphic); - } - // infowWindowRenderer on each graphic - var infoWindowRenderer:ClassFactory = new ClassFactory(PopUpRenderer); - infoWindowRenderer.properties = { popUpInfo: configurePopUpInfo(link)}; - graphic.infoWindowRenderer = infoWindowRenderer; - } - return result; - } - - private function configurePopUpInfo(link:String):PopUpInfo - { - var popUpInfo:PopUpInfo = new PopUpInfo; - - popUpInfo.title = "{title}"; - popUpInfo.description = "{content}"; - - if (link) - { - var pos:Number = link.length - 4; - var sfx:String = link.substr(pos, 4).toLowerCase(); - if ((sfx == ".jpg") || (sfx == ".png") || (sfx == ".gif")) // use PopUpMediaInfo if it is an image - { - var popUpMediaInfo:PopUpMediaInfo = new PopUpMediaInfo; - popUpMediaInfo.type = PopUpMediaInfo.IMAGE; - popUpMediaInfo.imageLinkURL = link; - popUpMediaInfo.imageSourceURL = link; - popUpInfo.popUpMediaInfos = [ popUpMediaInfo ]; - } - else - { - popUpInfo.description += "
    {link}" - } - } - - return popUpInfo; - } - - private function parseAtom(x:XML):ArrayCollection - { - var ac:ArrayCollection = new ArrayCollection(); - for each (var entryXML:XML in x.ATOM::entry) - { - ac.addItem(entryXML); - } - return ac; - } - - private function parseRSS(x:XML):ArrayCollection - { - var result:ArrayCollection = new ArrayCollection(); - for each (var itemXML:XML in x.channel.item) - { - result.addItem(itemXML); - } - return result; - } - - // get a feed item icon or return the default - private function getFeedItemSymbol():String - { - return ""; - } - - private function mouseOverGeoRSSFeed(event:Event):void - { - clearTimeout(highlightTimer); - var geoRSSFeed:ResultItem = ItemRenderer(event.target).data as ResultItem; - if (map.extent.containsXY(geoRSSFeed.center.x, geoRSSFeed.center.y)) // only show infowindow if feed in contained within map extent - { - highlightTimer = setTimeout(showHighlight, 300, [ geoRSSFeed ]); - } - else - { - hideInfoWindow(); - } - } - - private function mouseOutGeoRSSFeed(event:Event):void - { - clearTimeout(highlightTimer); - } - - private function clickGeoRSSFeed(event:Event):void - { - var geoRSSFeed:ResultItem = ItemRenderer(event.target).data as ResultItem; - if (geoRSSFeed.center) - { - if (map.scale > zoomScale) - { - map.scale = zoomScale; - } - map.centerAt(geoRSSFeed.center); - } - clearTimeout(highlightTimer); - highlightTimer = setTimeout(showHighlight, 300, [ geoRSSFeed ]); - } - - private function showHighlight(params:Array):void - { - var geoRSSFeed:ResultItem = params[0]; - var showHighlightPoint:MapPoint = geoRSSFeed.center as MapPoint; - - popUpRenderer.popUpInfo = configurePopUpInfo(geoRSSFeed.attributes.link); - popUpRenderer.graphic = geoRSSFeed.graphic; - - map.infoWindow.content = popUpRenderer; - map.infoWindow.contentOwner = popUpRenderer.graphic; - map.infoWindow.show(showHighlightPoint); - } - - private function showMessage(msg:String, swfVisible:Boolean):void - { - txtMessage.htmlText = msg; - swfMessage.visible = swfVisible; - msgVisible = true; - } - - private function clearMessage():void - { - msgVisible = false; - } - - private function widgetClosedHandler(event:Event):void - { - graphicsLayer.visible = false; - stopWidgetTimer(); - hideInfoWindow(); - } - - private function widgetOpenedHandler(event:Event):void - { - if (graphicsLayer) - { - graphicsLayer.visible = true; - } - startWidgetTimer(); - } - - private function hideInfoWindow():void - { - if (map.infoWindow.contentOwner && - ((map.infoWindow.contentOwner is Graphic && Graphic(map.infoWindow.contentOwner).graphicsLayer === graphicsLayer) || map.infoWindow.contentOwner is Map)) - { - map.infoWindow.hide(); - } - } - ]]> -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    + + + + + + [^,]+),\.*/; + + //labels + private var loadingLabel:String; + + private var querySource:String; + private var queryFields:XMLList; + private var queryTitleField:String; + private var queryLinkField:String; + private var queryRefreshRate:String; + private var zoomScale:Number = 50000; + private var mouseDownStageX:Number; + private var mouseDownStageY:Number; + + [Bindable] + private var msgVisible:Boolean = false; + [Bindable] + private var geoRSSFeedAC:ArrayCollection; + + private var ac:ArrayCollection; + private var graphicsLayer:GraphicsLayer; + private var highlightTimer:uint; + private var infowidgetReady:Boolean = false; + private var rsstype:String = ""; + private var symbols:XML = null; + private var timer:Timer; + private var useProxy:Boolean; + + // symbols + private var resultMarkerSymbol:Symbol; + private var resultLineSymbol:Symbol; + private var resultFillSymbol:Symbol; + + private var popUpRenderer:PopUpRenderer = new PopUpRenderer(); + + private function basewidget_initializeHandler():void + { + if (isPartOfPanel) // if widget is part of "left", "right" or "bottom" panel + { + this.percentWidth = this.percentHeight = 100; + wTemplate.percentWidth = wTemplate.percentHeight = 100; + } + else + { + wTemplate.width = 330; + wTemplate.height = 300; + wTemplate.minWidth = 300 + wTemplate.minHeight = 100; + } + } + + private function basewidget_widgetConfigLoaded():void + { + if (configXML) + { + //labels + loadingLabel = configXML.labels.loadinglabel || getDefaultString("loadingLabel"); + + querySource = configXML.source; + queryFields = configXML.fields.field; + queryTitleField = configXML.titlefield; + queryLinkField = configXML.linkfield; + queryRefreshRate = configXML.refreshrate; + if (Number(configXML.zoomscale) > 0) + { + zoomScale = Number(configXML.zoomscale); + } + //marker symbol + const resultMarkerSymbolURL:String = configXML.symbols.picturemarkersymbol.@url || widgetIcon; + const parsedResultMarkerSymbolHeight:Number = parseFloat(configXML.symbols.picturemarkersymbol.@height[0]); + const resultMarkerSymbolHeight:Number = isNaN(parsedResultMarkerSymbolHeight) ? 0 : parsedResultMarkerSymbolHeight; + const parsedResultMarkerSymbolWidth:Number = parseFloat(configXML.symbols.picturemarkersymbol.@width[0]); + const resultMarkerSymbolWidth:Number = isNaN(parsedResultMarkerSymbolWidth) ? 0 : parsedResultMarkerSymbolWidth; + const resultMarkerSymbolXOffset:Number = (configXML.symbols.picturemarkersymbol.@xoffset != null) ? configXML.symbols.picturemarkersymbol.@xoffset : 0; + const resultMarkerSymbolYOffset:Number = (configXML.symbols.picturemarkersymbol.@yoffset != null) ? configXML.symbols.picturemarkersymbol.@yoffset : 0; + resultMarkerSymbol = new PictureMarkerSymbol(resultMarkerSymbolURL, resultMarkerSymbolWidth, resultMarkerSymbolHeight, resultMarkerSymbolXOffset, resultMarkerSymbolYOffset); + + //line symbol + const resultLineSymbolColor:uint = configXML.symbols.simplelinesymbol.@color || 0xFF0000; + const resultLineSymbolAlpha:Number = (configXML.symbols.simplelinesymbol.@alpha[0] != null) ? configXML.symbols.simplelinesymbol.@alpha : 0.8; + const resultLineSymbolWidth:Number = (configXML.symbols.simplelinesymbol.@width[0] != null) ? configXML.symbols.simplelinesymbol.@width : 2; + resultLineSymbol = new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, resultLineSymbolColor, resultLineSymbolAlpha, resultLineSymbolWidth); + + // fill symbol + const resultFillSymbolColor:uint = configXML.symbols.simplefillsymbol.@color || 0xFF0000; + const resultFillSymbolAlpha:Number = (configXML.symbols.simplefillsymbol.@alpha[0] != null) ? configXML.symbols.simplefillsymbol.@alpha : 0.5; + const resultFillSymbolOutlineColor:uint = configXML.symbols.simplefillsymbol.outline.@color || 0xFF0000; + const resultFillSymbolOutlineAlpha:Number = (configXML.symbols.simplefillsymbol.outline.@alpha[0] != null) ? configXML.symbols.simplefillsymbol.outline.@alpha : 0.8; + const resultFillSymbolOutlineWidth:Number = (configXML.symbols.simplefillsymbol.outline.@width[0] != null) ? configXML.symbols.simplefillsymbol.outline.@width : 2; + resultFillSymbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID, resultFillSymbolColor, resultFillSymbolAlpha, new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, resultFillSymbolOutlineColor, resultFillSymbolOutlineAlpha, resultFillSymbolOutlineWidth)); + + graphicsLayer = new GraphicsLayer(); + graphicsLayer.name = configXML.layername || widgetTitle; + graphicsLayer.symbol = resultMarkerSymbol; + graphicsLayer.addEventListener(FlexEvent.HIDE, graphicsLayer_hideHandler); + + var clustererParser:ClustererParser = new ClustererParser(); + var clusterer:IClusterer = clustererParser.parseClusterer(configXML.clustering[0]); + if (clusterer) + { + graphicsLayer.clusterer = clusterer; + } + + map.addLayer(graphicsLayer); + + //useproxy + if (configXML.useproxy.length() > 0) + { + useProxy = configXML.useproxy == "true"; + } + } + queryRSSData(); + startWidgetTimer(); + } + + private function graphicsLayer_hideHandler(event:FlexEvent):void + { + hideInfoWindow(); + } + + private function startWidgetTimer():void + { + if (queryRefreshRate) + { + var seconds:Number = Number(queryRefreshRate); + var rate:Number = seconds * 1000; + stopWidgetTimer(); + timer = new Timer(rate); + timer.addEventListener(TimerEvent.TIMER, timerTick); + timer.start(); + } + } + + private function stopWidgetTimer():void + { + if (timer != null) + { + if (timer.running) + { + timer.stop(); + } + } + } + + private function timerTick(event:TimerEvent):void + { + queryRSSData(); + } + + private function queryRSSData():void + { + if (querySource) + { + if (useProxy && configData.proxyUrl) + { + rssService.url = configData.proxyUrl + "?" + querySource; + } + else + { + rssService.url = querySource; + } + rssService.send(); + showMessage(loadingLabel, true); + } + } + + private function faultHandler(event:FaultEvent):void + { + showError(ErrorMessageUtil.buildFaultMessage(event.fault)); + } + + private function loadRSSData(event:ResultEvent):void + { + try + { + if (event.result is XML) + { + var x:XML = XML(event.result); + if (x.name() == "rss" && Number(x.@version) <= 2) + { + rsstype = "RSS"; + ac = parseRSS(x); + } + else if (x.namespace().uri.toLowerCase() == "http://www.w3.org/2005/atom") + { + rsstype = "ATOM"; + ac = parseAtom(x); + } + else + { + showMessage(getDefaultString("unknownRSSFeedTypeError"), false); + } + } + else + { + showMessage(getDefaultString("httpResponseNotXMLError"), false); + } + geoRSSFeedAC = createGeoRSSFeed(ac); + + addSharedData(widgetTitle, geoRSSFeedAC); + clearMessage(); + } + catch (error:Error) + { + showMessage(getDefaultString("rssFeedParsingError", error.message), false); + } + } + + //create record data + private function createGeoRSSFeed(ac:ArrayCollection):ArrayCollection + { + graphicsLayer.clear(); + var result:ArrayCollection = new ArrayCollection(); + + var isAnAtomFeed:Boolean = rsstype == "ATOM"; + for (var i:Number = 0; i < ac.length; i++) + { + var recxml:XML = XML(ac.getItemAt(i)); + + var icon:String = widgetIcon; + var title:String = ""; + if (queryTitleField) + { + title = isAnAtomFeed ? recxml.ATOM::[ queryTitleField ] : recxml[queryTitleField]; + } + if (!title) + { + title = widgetTitle; + } + var content:String = ""; + if (isAnAtomFeed) + { + var date:Date = DateFormatter.parseDateString(recxml.DC::date); + content += date.toString(); + } + else + { + var j:Number = 0; + for each (var fieldXML:XML in queryFields) + { + var value:String = recxml[fieldXML.@name[0]]; + if (value) + { + if (fieldXML.@alias[0]) + { + content += fieldXML.@alias[0]; + } + else + { + content += fieldXML.@name[0]; + } + content += ": " + value + "\n"; + } + } + } + var link:String; + if (queryLinkField) + { + link = isAnAtomFeed ? recxml.ATOM::[ queryLinkField ].@href[0] : recxml[queryLinkField]; + } + + var graphic:Graphic = new Graphic(); + graphic.checkForMouseListeners = false; + // geometry + var geometry:Geometry = GeoRSSUtil.toGeometry(recxml); + if (map.spatialReference.isWebMercator()) + { + geometry = WebMercatorUtil.geographicToWebMercator(geometry); + } + graphic.geometry = geometry; + if (geometry) + { + switch (geometry.type) + { + case Geometry.POLYLINE: + { + graphic.symbol = resultLineSymbol; + break; + } + case Geometry.POLYGON: + { + graphic.symbol = resultFillSymbol; + break; + } + case Geometry.MAPPOINT: + { + graphic.symbol = resultMarkerSymbol; + break; + } + } + } + // attributes + var resultAttributes:ResultAttributes = new ResultAttributes(); + resultAttributes.title = title; + resultAttributes.content = content; + resultAttributes.link = link ? link : null; + graphic.attributes = resultAttributes; + + var geoRSSFeed:ResultItem = new ResultItem(graphic, resultAttributes); + result.addItem(geoRSSFeed); + if (geoRSSFeed.center && !isNaN(geoRSSFeed.center.x) && !isNaN(geoRSSFeed.center.y)) // make sure it is a valid point + { + graphicsLayer.add(graphic); + } + // infowWindowRenderer on each graphic + var infoWindowRenderer:ClassFactory = new ClassFactory(PopUpRenderer); + infoWindowRenderer.properties = { popUpInfo: configurePopUpInfo(link)}; + graphic.infoWindowRenderer = infoWindowRenderer; + } + return result; + } + + private function configurePopUpInfo(link:String):PopUpInfo + { + var popUpInfo:PopUpInfo = new PopUpInfo; + + popUpInfo.title = "{title}"; + popUpInfo.description = "{content}"; + + if (link) + { + var pos:Number = link.length - 4; + var sfx:String = link.substr(pos, 4).toLowerCase(); + if ((sfx == ".jpg") || (sfx == ".png") || (sfx == ".gif")) // use PopUpMediaInfo if it is an image + { + var popUpMediaInfo:PopUpMediaInfo = new PopUpMediaInfo; + popUpMediaInfo.type = PopUpMediaInfo.IMAGE; + popUpMediaInfo.imageLinkURL = link; + popUpMediaInfo.imageSourceURL = link; + popUpInfo.popUpMediaInfos = [ popUpMediaInfo ]; + } + else + { + popUpInfo.description += "
    {link}" + } + } + + return popUpInfo; + } + + private function parseAtom(x:XML):ArrayCollection + { + var ac:ArrayCollection = new ArrayCollection(); + for each (var entryXML:XML in x.ATOM::entry) + { + ac.addItem(entryXML); + } + return ac; + } + + private function parseRSS(x:XML):ArrayCollection + { + var result:ArrayCollection = new ArrayCollection(); + for each (var itemXML:XML in x.channel.item) + { + result.addItem(itemXML); + } + return result; + } + + // get a feed item icon or return the default + private function getFeedItemSymbol():String + { + return ""; + } + + private function mouseOverGeoRSSFeed(event:Event):void + { + clearTimeout(highlightTimer); + var geoRSSFeed:ResultItem = ItemRenderer(event.target).data as ResultItem; + if (map.extent.containsXY(geoRSSFeed.center.x, geoRSSFeed.center.y)) // only show infowindow if feed in contained within map extent + { + highlightTimer = setTimeout(showHighlight, 300, [ geoRSSFeed ]); + } + else + { + hideInfoWindow(); + } + } + + private function mouseOutGeoRSSFeed(event:Event):void + { + clearTimeout(highlightTimer); + } + + private function clickGeoRSSFeed(event:Event):void + { + var geoRSSFeed:ResultItem = ItemRenderer(event.target).data as ResultItem; + if (geoRSSFeed.center) + { + if (map.scale > zoomScale) + { + map.scale = zoomScale; + } + map.centerAt(geoRSSFeed.center); + } + clearTimeout(highlightTimer); + highlightTimer = setTimeout(showHighlight, 300, [ geoRSSFeed ]); + } + + private function showHighlight(params:Array):void + { + var geoRSSFeed:ResultItem = params[0]; + var showHighlightPoint:MapPoint = geoRSSFeed.center as MapPoint; + + popUpRenderer.popUpInfo = configurePopUpInfo(geoRSSFeed.attributes.link); + popUpRenderer.graphic = geoRSSFeed.graphic; + + map.infoWindow.content = popUpRenderer; + map.infoWindow.contentOwner = popUpRenderer.graphic; + map.infoWindow.show(showHighlightPoint); + } + + private function showMessage(msg:String, swfVisible:Boolean):void + { + txtMessage.htmlText = msg; + swfMessage.visible = swfVisible; + msgVisible = true; + } + + private function clearMessage():void + { + msgVisible = false; + } + + private function widgetClosedHandler(event:Event):void + { + graphicsLayer.visible = false; + stopWidgetTimer(); + hideInfoWindow(); + } + + private function widgetOpenedHandler(event:Event):void + { + if (graphicsLayer) + { + graphicsLayer.visible = true; + } + startWidgetTimer(); + } + + private function hideInfoWindow():void + { + if (map.infoWindow.contentOwner && + ((map.infoWindow.contentOwner is Graphic && Graphic(map.infoWindow.contentOwner).graphicsLayer === graphicsLayer) || map.infoWindow.contentOwner is Map)) + { + map.infoWindow.hide(); + } + } + ]]> +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    diff --git a/src/widgets/GeoRSS/GeoRSSWidget.xml b/src/widgets/GeoRSS/GeoRSSWidget.xml index 014f03e..86ae7cf 100644 --- a/src/widgets/GeoRSS/GeoRSSWidget.xml +++ b/src/widgets/GeoRSS/GeoRSSWidget.xml @@ -1,16 +1,16 @@ - - - http://earthquake.usgs.gov/earthquakes/feed/atom/4.5/week - - - - title - link - - 10000000 - - - + + + http://earthquake.usgs.gov/earthquakes/feed/atom/4.5/week + + + + title + link + + 10000000 + + + diff --git a/src/widgets/Geoprocessing/GeoprocessingWidget.mxml b/src/widgets/Geoprocessing/GeoprocessingWidget.mxml index ede455d..351d1b4 100644 --- a/src/widgets/Geoprocessing/GeoprocessingWidget.mxml +++ b/src/widgets/Geoprocessing/GeoprocessingWidget.mxml @@ -1,1068 +1,1068 @@ - - - - - 0 && configXML.useproxy == "true") - { - gp.proxyURL = configData.proxyUrl; - } - - if (configXML.updatedelay[0]) - { - var updateDelay:Number = parseFloat(configXML.updatedelay[0]); - if (!isNaN(updateDelay)) - { - gp.updateDelay = updateDelay; - } - } - gp.outSpatialReference = map.spatialReference; - getExecutionType(); - autoSubmit = (configXML.autosubmit[0] == "true"); - - if (configXML.useamf.length() > 0) - { - gp.useAMF = (configXML.useamf == "true"); - hasUseAMFBeenSet = true; - } - - fetchGPServerDescription(); - - submitLabel = configXML.labels.submitlabel || getDefaultString('gpSubmitLabel'); - clearFeatureLabel = configXML.labels.clearfeaturelabel || getDefaultString("clearLabel"); - helpLabel = configXML.labels.helplabel || getDefaultString("helpLabel"); - var inputLabel:String = configXML.labels.inputlabel || getDefaultString("inputLabel"); - var outputLabel:String = configXML.labels.outputlabel || getDefaultString("outputLabel"); - - buildUI(configXML); - - initGraphicContextMenu(); - drawTool.map = map; - graphicEditor = new GraphicEditor(map); - - visibleGraphicsLayersWatcher.map = map; - visibleGraphicsLayersWatcher.startWatching(); - inputParamsDataGroup.visibleGraphicsLayers = visibleGraphicsLayersWatcher.visibleGraphicsLayers; - - inputParamsDataGroup.addEventListener(FeatureInputParamEvent.DRAW, inputParamsDataGroup_drawFeatureHandler, false, 0, true); - inputParamsDataGroup.addEventListener(FeatureInputParamEvent.CLEAR, inputParamsDataGroup_clearFeatureHandler, false, 0, true); - - if (gpParamHandler.hasMapExtentInputParams()) - { - map.addEventListener(ExtentEvent.EXTENT_CHANGE, map_extentChangeHandler); - gpParamHandler.updateMapExtentInputParams(map.extent) - } - - needsToShowOutputView = gpParamHandler.hasVisibleOutput(); - if (needsToShowOutputView) - { - wTemplate.addTitlebarButton("assets/images/GeoprocessingTool16.png", inputLabel, inputTitlebarButton_clickHandler); - wTemplate.addTitlebarButton("assets/images/i_table.png", outputLabel, outputTitlebarButton_clickHandler); - } - } - catch (error:Error) - { - showError(getDefaultString("initializationError", ErrorMessageUtil.makeHTMLSafe(error.message))); - } - } - } - - private function getExecutionType():void - { - var gpTaskInspector:JSONTask = new JSONTask(); - var urlVars:URLVariables = new URLVariables(); - urlVars.f = "json"; - gpTaskInspector.url = gp.url; - gpTaskInspector.proxyURL = gp.proxyURL; - gpTaskInspector.execute(urlVars, new AsyncResponder(gpTaskInspector_resultHandler, gpTaskInspector_faultHandler)); - } - - private function gpTaskInspector_resultHandler(serviceDescription:Object, token:Object = null):void - { - executionType = serviceDescription.executionType; - } - - private function gpTaskInspector_faultHandler(fault:Fault, token:Object = null):void - { - showError(getDefaultString("unableToDetermineGPExecutionType", ErrorMessageUtil.makeHTMLSafe(fault.toString()))); - } - - private function fetchGPServerDescription():void - { - var gpServerInspector:JSONTask = new JSONTask(); - var urlVars:URLVariables = new URLVariables(); - urlVars.f = "json"; - gpServerInspector.url = getGPServerURL(gp.url); - gpServerInspector.proxyURL = gp.proxyURL; - gpServerInspector.execute(urlVars, new AsyncResponder(gpServerInspector_resultHandler, gpServerInspector_faultHandler)); - } - - private function getGPServerURL(url:String):String - { - var lastPathIndex:int = url.search(/[\w]+[^\/]*$/g); - return url.substr(0, lastPathIndex); - } - - private function gpServerInspector_resultHandler(gpServerDescription:Object, token:Object = null):void - { - if (!hasUseAMFBeenSet) - { - checkAMFSupport(gpServerDescription); - } - checkResultMapServerSupport(gpServerDescription); - } - - private function checkAMFSupport(gpServerDescription:Object):void - { - var version:Number = gpServerDescription.currentVersion; - if (version >= 10.1) - { - gp.useAMF = true; - } - } - - private function checkResultMapServerSupport(gpServerDescription:Object):void - { - if (gpServerDescription.resultMapServerName) - { - hasResultMapServer = true; - } - } - - private function gpServerInspector_faultHandler(fault:Fault, token:Object = null):void - { - //Could not fetch service capabilities - } - - private function buildUI(config:XML):void - { - if (configXML.description[0]) - { - descriptionText.text = configXML.description; - if (descriptionText.text) - { - descriptionText.visible = true; - descriptionText.includeInLayout = true; - } - } - - if (configXML.helpurl[0]) - { - var color:uint = getStyle('color'); - var linkText:String = "" + helpLabel + ""; - helpLink.textFlow = TextConverter.importToFlow(linkText, TextConverter.TEXT_FIELD_HTML_FORMAT); - } - - inputParamsDataGroup.dataProvider = new ArrayList(gpParamHandler.getVisibleInputParams()); - outputParamsDataGroup.dataProvider = new ArrayList(); - } - - private function initGraphicContextMenu():void - { - graphicContextMenu = new ContextMenu(); - graphicContextMenu.hideBuiltInItems(); - var menuItem:ContextMenuItem = new ContextMenuItem(clearFeatureLabel); - menuItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, menuItem_contextMenuDeleteHandler); - graphicContextMenu.customItems.push(menuItem); - } - - private function inputParamsDataGroup_drawFeatureHandler(event:FeatureInputParamEvent):void - { - var featureParam:IGPFeatureParameter = event.featureParam; - currentGraphicsLayer = featureParam.layer; - setMapAction(event.drawType, null, featureParam.defaultSymbol, map_drawEndHandler); - } - - private function inputParamsDataGroup_clearFeatureHandler(event:FeatureInputParamEvent):void - { - event.featureParam.layer.clear(); - } - - protected function map_extentChangeHandler(event:ExtentEvent):void - { - gpParamHandler.updateMapExtentInputParams(event.extent) - } - - private function map_drawEndHandler(event:DrawEvent):void - { - deactivateDrawTool(); - var drawnGraphic:Graphic = event.graphic; - - drawnGraphic.contextMenu = graphicContextMenu; - graphicEditor.makeGraphicEditable(drawnGraphic); - - //only point, polyline and polygon supported by gp tasks - if (drawnGraphic.geometry.type == Geometry.EXTENT) - { - var extent:Extent = drawnGraphic.geometry as Extent; - drawnGraphic.geometry = extent.toPolygon(); - } - - currentGraphicsLayer.add(drawnGraphic); - if (!currentGraphicsLayer.map) - { - map.addLayer(currentGraphicsLayer); - } - - inputParamsDataGroup.dispatchEvent(event); - - if (autoSubmit) - { - runGPIfRequiredParamsComplete(); - } - } - - private function deactivateDrawTool():void - { - setMapAction(null, null, null, null); - } - - private function inputTitlebarButton_clickHandler():void - { - setInputState(); - } - - private function setInputState():void - { - currentState = "input"; - wTemplate.selectedTitlebarButtonIndex = 0; - } - - private function outputTitlebarButton_clickHandler():void - { - setOutputState(); - } - - private function setOutputState():void - { - currentState = "output"; - wTemplate.selectedTitlebarButtonIndex = 1; - } - - private function runGPIfRequiredParamsComplete():void - { - var incompleteRequiredInputParams:Array = gpParamHandler.getIncompleteRequiredInputParams(); - if (incompleteRequiredInputParams.length == 0) - { - clearMissingRequiredFieldsMessage(); - busyAnimation.visible = true; - - var requestObject:Object = gpParamHandler.createInputRequestObject(); - - if (gpParamHandler.needsToReprojectInputParams) - { - projectRequestObjectGeometries(requestObject); - } - else - { - runGP(requestObject); - } - } - else - { - showMissingRequiredFieldsMessage(buildMissingFieldsMessage(incompleteRequiredInputParams)); - } - } - - private function projectRequestObjectGeometries(requestObject:Object):void - { - var inputGeometryMap:Dictionary = gpParamHandler.getInputParamGeometryMap(); - var inputParam:IGPFeatureParameter; - var featureSet:FeatureSet; - totalProjectedFeatures = 0; - - for (var key:String in inputGeometryMap) - { - inputParam = gpParamHandler.findInputParamByName(key) as IGPFeatureParameter; - featureSet = requestObject[key]; - const projectParameters:ProjectParameters = new ProjectParameters; - projectParameters.geometries = inputGeometryMap[key]; - projectParameters.outSpatialReference = inputParam.spatialReference; - GeometryServiceSingleton.instance.project(projectParameters, new AsyncResponder(projectionResultHandler, projectionFaultHandler, inputParam)) - } - - function projectionResultHandler(geometries:Array, inputParameter:IGPFeatureParameter):void - { - totalProjectedFeatures++; - var featureSet:FeatureSet = requestObject[key] as FeatureSet; - updateProjectedGeometries(featureSet.features, geometries); - - featureSet.spatialReference = inputParameter.spatialReference; - - if (totalProjectedFeatures == gpParamHandler.totalInputFeatures) - { - runGP(requestObject); - } - } - - function projectionFaultHandler(fault:Fault, token:Object = null):void - { - showError(getDefaultString("projectionError", ErrorMessageUtil.makeHTMLSafe(fault.message))); - } - } - - private function updateProjectedGeometries(graphics:Array, projectedGeometries:Array):void - { - var totalGraphics:int = graphics.length; - var currentGraphic:Graphic; - for (var i:int = 0; i < totalGraphics; i++) - { - currentGraphic = new Graphic(projectedGeometries[i]); - graphics[i] = currentGraphic; - } - } - - private function runGP(requestObject:Object):void - { - totalProcessedOutputFeatures = 0; - - if (executionType == SYNCHRONOUS) - { - gp.execute(requestObject); - } - else if (executionType == ASYNCHRONOUS) - { - asyncResultMap = new Dictionary(); - totalProcessedAsyncResults = 0; - var lastExecutedJob:JobInfo = gp.submitJobLastResult; - if (lastExecutedJob) - { - gp.cancelJobStatusUpdates(lastExecutedJob.jobId); - } - - gp.submitJob(requestObject); - } - else - { - busyAnimation.visible = false; - showError(getDefaultString("cannotRunTaskExecutionTypeUnknownError")); - } - } - - private function showMissingRequiredFieldsMessage(message:String):void - { - missingRequiredFieldsText.text = message; - missingRequiredFieldsText.includeInLayout = true; - missingRequiredFieldsText.visible = true; - } - - private function clearMissingRequiredFieldsMessage():void - { - missingRequiredFieldsText.text = ""; - missingRequiredFieldsText.includeInLayout = false; - missingRequiredFieldsText.visible = false; - } - - private function buildMissingFieldsMessage(incompleteRequiredFields:Array):String - { - var missingFieldsMessage:String; - - if (incompleteRequiredFields.length > 1) - { - missingFieldsMessage = getDefaultString("requiredFields"); - } - else - { - missingFieldsMessage = getDefaultString("requiredField"); - } - - missingFieldsMessage += " " + getMissingRequiredFieldNames(incompleteRequiredFields); - - return missingFieldsMessage; - } - - private function getMissingRequiredFieldNames(incompleteRequiredFields:Array):String - { - var missingRequiredFieldNames:String = ""; - - var firstParam:Boolean = true; - for each (var param:IGPParameter in incompleteRequiredFields) - { - if (firstParam) - { - firstParam = false; - missingRequiredFieldNames += param.label; - } - else - { - missingRequiredFieldNames += ", " + param.label; - } - } - - return missingRequiredFieldNames; - } - - private function gp_executeCompleteHandler(event:GeoprocessorEvent):void - { - busyAnimation.visible = false; - clearOutput(); - - if (event.executeResult) - { - if (needsToShowOutputView) - { - setOutputState(); - } - - var results:Array = event.executeResult.results; - for each (var parameterValue:ParameterValue in results) - { - processResult(parameterValue); - } - } - else - { - showError(getDefaultString("emptyResultsLabel")); - } - } - - private function gp_faultHandler(event:FaultEvent):void - { - busyAnimation.visible = false; - showError(ErrorMessageUtil.makeHTMLSafe(event.fault.toString())); - } - - private function gp_resultDataCompleteHandler(event:GeoprocessorEvent):void - { - asyncResultMap[event.parameterValue.paramName] = event.parameterValue; - totalProcessedAsyncResults++; - if (totalProcessedAsyncResults == gpParamHandler.outputParams.length) - { - busyAnimation.visible = false; - clearOutput(); - if (needsToShowOutputView) - { - setOutputState(); - } - - processAllAsyncResultsInOrder(); - } - } - - private function processAllAsyncResultsInOrder():void - { - if (hasResultMapServer) - { - hideAllResultImageLayers(); - resultImageLayersOnMap = []; - } - - var outputParams:Array = gpParamHandler.outputParams; - var paramName:String; - for each (var param:IGPParameter in outputParams) - { - paramName = param.name; - if (asyncResultMap[paramName]) - { - if (hasResultMapServer) - { - processResultImageLayer(paramName); - } - else - { - processResult(asyncResultMap[paramName]); - } - } - } - - if (resultImageLayersOnMap) - { - showOutputFeaturesClearButton(); - extractLargestResultImageLayerExtent(); - } - } - - private function processResultImageLayer(paramName:String):void - { - var lastExecutedJob:JobInfo = gp.submitJobLastResult; - var resultImageLayer:GPResultImageLayer = gp.getResultImageLayer(lastExecutedJob.jobId, paramName); - resultImageLayer.id = paramName; - resultImageLayer.name = ("hiddenLayer_" + paramName); - resultImageLayersOnMap.push(resultImageLayer); - map.addLayer(resultImageLayer); - layerOrderer.orderLayers(); - } - - private function hideAllResultImageLayers():void - { - for each (var resultImageLayer:GPResultImageLayer in resultImageLayersOnMap) - { - map.removeLayer(resultImageLayer); - } - } - - private function processResult(parameterValue:ParameterValue):void - { - var resultDataType:String = parameterValue.dataType; - var outputParam:IGPParameter = gpParamHandler.findOutputParamByName(parameterValue.paramName); - - if (resultDataType == GPParameterTypes.GP_DATA_FILE) - { - fileDownloader.url = (parameterValue.value as DataFile).url; - fileDownloader.fileName = outputParam.label; - Alert.show(getDefaultString("saveDataFileLabel"), wTemplate.widgetTitle, Alert.YES | Alert.NO, null, alert_ClickHandler); - } - else if (resultDataType == GPParameterTypes.GP_FEATURE_RECORD_SET_LAYER) - { - if (totalProcessedOutputFeatures == 0) - { - outputGraphicsLayers = []; - hideOutputFeaturesClearButton(); - } - - var featureParam:IGPFeatureParameter = (outputParam as IGPFeatureParameter); - var graphicsLayer:GraphicsLayer = featureParam.layer; - graphicsLayer.infoWindowRenderer = featureParam.popUpRenderer; - graphicsLayer.addEventListener(GraphicsLayerEvent.GRAPHICS_CLEAR, ouputGraphicsLayer_graphicsClearHandler, false, 0, true); - graphicsLayer.addEventListener(GraphicEvent.GRAPHIC_REMOVE, ouputGraphicsLayer_graphicsRemoveHandler, false, 0, true); - outputGraphicsLayers.push(graphicsLayer); - - var resultFeatures:Array = (parameterValue.value as FeatureSet).features; - graphicsLayer.graphicProvider = resultFeatures; - // if renderer is null, set the renderer based on result geometry - if (!graphicsLayer.renderer && resultFeatures && resultFeatures.length) - { - var geometryType:String = Graphic(resultFeatures[0]).geometry.type; - var renderer:SimpleRenderer = new SimpleRenderer; - switch (geometryType) - { - case Geometry.MAPPOINT: - { - renderer.symbol = new SimpleMarkerSymbol; - break; - } - case Geometry.POLYLINE: - { - renderer.symbol = new SimpleLineSymbol; - break; - } - case Geometry.POLYGON: - { - renderer.symbol = new SimpleFillSymbol; - break; - } - } - graphicsLayer.renderer = renderer; - } - addContextMenuToGraphics(resultFeatures); - - if (!graphicsLayer.map) - { - map.addLayer(graphicsLayer); - layerOrderer.orderLayers(); - } - - totalProcessedOutputFeatures++; - if (totalProcessedOutputFeatures == gpParamHandler.totalOutputFeatures) - { - showFirstAvailablePopUp(); - zoomToOutputFeatures(); - showOutputFeaturesClearButton(); - } - } - else - { - outputParam.defaultValue = parameterValue.value; - outputParamsDataGroup.dataProvider.addItem(outputParam); - } - } - - private function hideOutputFeaturesClearButton():void - { - if (clearOutputFeaturesButton) - { - clearOutputFeaturesButton.visible = false; - clearOutputFeaturesButton.includeInLayout = false; - } - } - - private function showFirstAvailablePopUp():void - { - var featureParamPopUpToDisplay:IGPFeatureParameter; - var outputFeatureParams:Array = gpParamHandler.getOutputFeatureParams(); - for each (var featureParam:IGPFeatureParameter in outputFeatureParams) - { - if (featureParam.popUpInfo) - { - featureParamPopUpToDisplay = featureParam; - break; - } - } - - if (!featureParamPopUpToDisplay) - { - return; - } - - var contentNavigator:ContentNavigator = map.infoWindow.content as ContentNavigator; - if (!contentNavigator) - { - contentNavigator = new ContentNavigator(); - map.infoWindow.content = contentNavigator; - } - - var graphic:Graphic = (featureParam.layer.graphicProvider as IList).getItemAt(0) as Graphic; - contentNavigator.dataProvider = new ArrayList([ graphic ]); - map.infoWindow.show(graphic.geometry is MapPoint ? graphic.geometry as MapPoint : graphic.geometry.extent.center); - } - - private function showOutputFeaturesClearButton():void - { - if (clearOutputFeaturesButton) - { - clearOutputFeaturesButton.visible = true; - clearOutputFeaturesButton.includeInLayout = true; - } - } - - private function ouputGraphicsLayer_graphicsRemoveHandler(event:GraphicEvent):void - { - showInputViewIfAllOutputFeaturesCleared(); - } - - private function ouputGraphicsLayer_graphicsClearHandler(event:GraphicsLayerEvent):void - { - showInputViewIfAllOutputFeaturesCleared(); - } - - private function showInputViewIfAllOutputFeaturesCleared():void - { - var allGraphicsLayersCleared:Boolean = true; - for each (var graphicsLayer:GraphicsLayer in outputGraphicsLayers) - { - if (graphicsLayer.numGraphics > 0) - { - allGraphicsLayersCleared = false; - break; - } - } - - if (allGraphicsLayersCleared) - { - hideOutputFeaturesClearButton(); - setInputState(); - } - } - - private function alert_ClickHandler(event:CloseEvent):void - { - if (event.detail == Alert.YES) - { - fileDownloader.downloadFile(); - } - } - - private function addContextMenuToGraphics(graphics:Array):void - { - for each (var graphic:Graphic in graphics) - { - graphic.contextMenu = graphicContextMenu; - } - } - - private function zoomToOutputFeatures():void - { - var outputFeaturesExtent:Extent = gpParamHandler.getOutputFeaturesExtent(); - updateMapExtent(outputFeaturesExtent); - } - - protected function menuItem_contextMenuDeleteHandler(event:ContextMenuEvent):void - { - var graphic:Graphic = event.contextMenuOwner as Graphic; - var graphicsLayer:GraphicsLayer = graphic.graphicsLayer; - graphicsLayer.remove(graphic); - } - - private function gp_jobCompleteHandler(event:GeoprocessorEvent):void - { - if (event.jobInfo.jobStatus == JobInfo.STATUS_SUCCEEDED) - { - if (gpParamHandler.outputParams.length > 0) - { - getResultDataForEachOutputParam(event.jobInfo.jobId); - } - else - { - busyAnimation.visible = false; - } - } - else - { - busyAnimation.visible = false; - dispatchJobInfoErrorMessage(event.jobInfo); - } - } - - private function dispatchJobInfoErrorMessage(jobInfo:JobInfo):void - { - var errorMessage:String = getDefaultString("problemLabel") + "\n" + jobInfo.jobStatus; - if (jobInfo.messages) - { - errorMessage += "\n" + ErrorMessageUtil.makeHTMLSafe(jobInfo.messages[jobInfo.messages.length - 1].description); - } - - showError(errorMessage); - } - - private function clearOutput():void - { - if (outputParamsDataGroup.dataProvider) - { - outputParamsDataGroup.dataProvider.removeAll(); - } - } - - private function getResultDataForEachOutputParam(jobId:String):void - { - var outputParams:Array = gpParamHandler.outputParams; - for each (var param:IGPParameter in outputParams) - { - gp.getResultData(jobId, param.name); - } - } - - private function wTemplate_closedHandler(event:Event):void - { - deactivateDrawTool(); - visibleGraphicsLayersWatcher.stopWatching(); - - if (hasResultMapServer) - { - hideAllResultImageLayers(); - } - - if (gpParamHandler) - { - gpParamHandler.hideFeatureLayers(); - hideInfoWindow(); - } - } - - private function hideInfoWindow():void - { - var contentNavigator:ContentNavigator = map.infoWindow.content as ContentNavigator; - if (contentNavigator - && contentNavigator.dataProvider - && contentNavigator.dataProvider.length > 0) - { - //should only have one if opened by GP widget - var contentGraphic:Graphic = contentNavigator.dataProvider.getItemAt(0) as Graphic; - if (contentGraphic - && gpParamHandler.graphicsLayerBelongsToFeatureParam(contentGraphic.graphicsLayer)) - { - map.infoWindow.hide(); - } - } - } - - protected function wTemplate_minimizedHandler(event:Event):void - { - visibleGraphicsLayersWatcher.stopWatching(); - } - - private function wTemplate_openHandler(event:Event):void - { - visibleGraphicsLayersWatcher.startWatching(); - - if (hasResultMapServer) - { - showAllResultImageLayers(); - layerOrderer.orderLayers(); - } - - if (gpParamHandler) - { - gpParamHandler.showFeatureLayers(); - } - } - - private function clearAllGraphics():void - { - hideInfoWindow(); - gpParamHandler.clearInputFeatures(); - - if (hasResultMapServer) - { - clearResultMapLayers(); - hideOutputFeaturesClearButton(); - setInputState(); - } - else - { - gpParamHandler.clearOutputFeatures(); - } - } - - private function clearResultMapLayers():void - { - for each (var resultImageLayer:GPResultImageLayer in resultImageLayersOnMap) - { - map.removeLayer(resultImageLayer); - } - - resultImageLayersOnMap = null; - } - - private function zoomToResultImageLayers():void - { - updateMapExtent(largestResultImageLayerExtent); - } - - private function extractLargestResultImageLayerExtent():void - { - largestResultImageLayerExtent = null; - var remainingResultImages:int = resultImageLayersOnMap.length; - - var imageParams:ImageParameters = new ImageParameters(); - imageParams.imageSpatialReference = map.spatialReference; - - for each (var resultImageLayer:GPResultImageLayer in resultImageLayersOnMap) - { - gp.getResultImage(resultImageLayer.jobId, resultImageLayer.parameterName, imageParams, new AsyncResponder(resultImageSuccess, resultImageFailure, resultImageLayer)); - - function resultImageSuccess(paramValue:ParameterValue, resultImageLayer:GPResultImageLayer):void - { - var resultImage:MapImage = paramValue.value as MapImage; - aggregateExtent(resultImage.extent); - remainingResultImages--; - if (remainingResultImages == 0) - { - zoomToResultImageLayers(); - } - } - - function aggregateExtent(extent:Extent):void - { - if (largestResultImageLayerExtent) - { - largestResultImageLayerExtent = extent.union(largestResultImageLayerExtent); - } - else - { - largestResultImageLayerExtent = extent; - } - } - - function resultImageFailure(fault:Fault, token:Object):void - { - //Swallow error - } - } - } - - private function updateMapExtent(newExtent:Extent):void - { - if (newExtent) - { - map.extent = newExtent; - if (!map.extent.contains(newExtent)) - { - map.level--; - } - } - } - - private function showAllResultImageLayers():void - { - for each (var resultImageLayer:GPResultImageLayer in resultImageLayersOnMap) - { - if (!map.getLayer(resultImageLayer.id)) - { - map.addLayer(resultImageLayer); - } - } - } - ]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + 0 && configXML.useproxy == "true") + { + gp.proxyURL = configData.proxyUrl; + } + + if (configXML.updatedelay[0]) + { + var updateDelay:Number = parseFloat(configXML.updatedelay[0]); + if (!isNaN(updateDelay)) + { + gp.updateDelay = updateDelay; + } + } + gp.outSpatialReference = map.spatialReference; + getExecutionType(); + autoSubmit = (configXML.autosubmit[0] == "true"); + + if (configXML.useamf.length() > 0) + { + gp.useAMF = (configXML.useamf == "true"); + hasUseAMFBeenSet = true; + } + + fetchGPServerDescription(); + + submitLabel = configXML.labels.submitlabel || getDefaultString('gpSubmitLabel'); + clearFeatureLabel = configXML.labels.clearfeaturelabel || getDefaultString("clearLabel"); + helpLabel = configXML.labels.helplabel || getDefaultString("helpLabel"); + var inputLabel:String = configXML.labels.inputlabel || getDefaultString("inputLabel"); + var outputLabel:String = configXML.labels.outputlabel || getDefaultString("outputLabel"); + + buildUI(configXML); + + initGraphicContextMenu(); + drawTool.map = map; + graphicEditor = new GraphicEditor(map); + + visibleGraphicsLayersWatcher.map = map; + visibleGraphicsLayersWatcher.startWatching(); + inputParamsDataGroup.visibleGraphicsLayers = visibleGraphicsLayersWatcher.visibleGraphicsLayers; + + inputParamsDataGroup.addEventListener(FeatureInputParamEvent.DRAW, inputParamsDataGroup_drawFeatureHandler, false, 0, true); + inputParamsDataGroup.addEventListener(FeatureInputParamEvent.CLEAR, inputParamsDataGroup_clearFeatureHandler, false, 0, true); + + if (gpParamHandler.hasMapExtentInputParams()) + { + map.addEventListener(ExtentEvent.EXTENT_CHANGE, map_extentChangeHandler); + gpParamHandler.updateMapExtentInputParams(map.extent) + } + + needsToShowOutputView = gpParamHandler.hasVisibleOutput(); + if (needsToShowOutputView) + { + wTemplate.addTitlebarButton("assets/images/GeoprocessingTool16.png", inputLabel, inputTitlebarButton_clickHandler); + wTemplate.addTitlebarButton("assets/images/i_table.png", outputLabel, outputTitlebarButton_clickHandler); + } + } + catch (error:Error) + { + showError(getDefaultString("initializationError", ErrorMessageUtil.makeHTMLSafe(error.message))); + } + } + } + + private function getExecutionType():void + { + var gpTaskInspector:JSONTask = new JSONTask(); + var urlVars:URLVariables = new URLVariables(); + urlVars.f = "json"; + gpTaskInspector.url = gp.url; + gpTaskInspector.proxyURL = gp.proxyURL; + gpTaskInspector.execute(urlVars, new AsyncResponder(gpTaskInspector_resultHandler, gpTaskInspector_faultHandler)); + } + + private function gpTaskInspector_resultHandler(serviceDescription:Object, token:Object = null):void + { + executionType = serviceDescription.executionType; + } + + private function gpTaskInspector_faultHandler(fault:Fault, token:Object = null):void + { + showError(getDefaultString("unableToDetermineGPExecutionType", ErrorMessageUtil.makeHTMLSafe(fault.toString()))); + } + + private function fetchGPServerDescription():void + { + var gpServerInspector:JSONTask = new JSONTask(); + var urlVars:URLVariables = new URLVariables(); + urlVars.f = "json"; + gpServerInspector.url = getGPServerURL(gp.url); + gpServerInspector.proxyURL = gp.proxyURL; + gpServerInspector.execute(urlVars, new AsyncResponder(gpServerInspector_resultHandler, gpServerInspector_faultHandler)); + } + + private function getGPServerURL(url:String):String + { + var lastPathIndex:int = url.search(/[\w]+[^\/]*$/g); + return url.substr(0, lastPathIndex); + } + + private function gpServerInspector_resultHandler(gpServerDescription:Object, token:Object = null):void + { + if (!hasUseAMFBeenSet) + { + checkAMFSupport(gpServerDescription); + } + checkResultMapServerSupport(gpServerDescription); + } + + private function checkAMFSupport(gpServerDescription:Object):void + { + var version:Number = gpServerDescription.currentVersion; + if (version >= 10.1) + { + gp.useAMF = true; + } + } + + private function checkResultMapServerSupport(gpServerDescription:Object):void + { + if (gpServerDescription.resultMapServerName) + { + hasResultMapServer = true; + } + } + + private function gpServerInspector_faultHandler(fault:Fault, token:Object = null):void + { + //Could not fetch service capabilities + } + + private function buildUI(config:XML):void + { + if (configXML.description[0]) + { + descriptionText.text = configXML.description; + if (descriptionText.text) + { + descriptionText.visible = true; + descriptionText.includeInLayout = true; + } + } + + if (configXML.helpurl[0]) + { + var color:uint = getStyle('color'); + var linkText:String = "" + helpLabel + ""; + helpLink.textFlow = TextConverter.importToFlow(linkText, TextConverter.TEXT_FIELD_HTML_FORMAT); + } + + inputParamsDataGroup.dataProvider = new ArrayList(gpParamHandler.getVisibleInputParams()); + outputParamsDataGroup.dataProvider = new ArrayList(); + } + + private function initGraphicContextMenu():void + { + graphicContextMenu = new ContextMenu(); + graphicContextMenu.hideBuiltInItems(); + var menuItem:ContextMenuItem = new ContextMenuItem(clearFeatureLabel); + menuItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, menuItem_contextMenuDeleteHandler); + graphicContextMenu.customItems.push(menuItem); + } + + private function inputParamsDataGroup_drawFeatureHandler(event:FeatureInputParamEvent):void + { + var featureParam:IGPFeatureParameter = event.featureParam; + currentGraphicsLayer = featureParam.layer; + setMapAction(event.drawType, null, featureParam.defaultSymbol, map_drawEndHandler); + } + + private function inputParamsDataGroup_clearFeatureHandler(event:FeatureInputParamEvent):void + { + event.featureParam.layer.clear(); + } + + protected function map_extentChangeHandler(event:ExtentEvent):void + { + gpParamHandler.updateMapExtentInputParams(event.extent) + } + + private function map_drawEndHandler(event:DrawEvent):void + { + deactivateDrawTool(); + var drawnGraphic:Graphic = event.graphic; + + drawnGraphic.contextMenu = graphicContextMenu; + graphicEditor.makeGraphicEditable(drawnGraphic); + + //only point, polyline and polygon supported by gp tasks + if (drawnGraphic.geometry.type == Geometry.EXTENT) + { + var extent:Extent = drawnGraphic.geometry as Extent; + drawnGraphic.geometry = extent.toPolygon(); + } + + currentGraphicsLayer.add(drawnGraphic); + if (!currentGraphicsLayer.map) + { + map.addLayer(currentGraphicsLayer); + } + + inputParamsDataGroup.dispatchEvent(event); + + if (autoSubmit) + { + runGPIfRequiredParamsComplete(); + } + } + + private function deactivateDrawTool():void + { + setMapAction(null, null, null, null); + } + + private function inputTitlebarButton_clickHandler():void + { + setInputState(); + } + + private function setInputState():void + { + currentState = "input"; + wTemplate.selectedTitlebarButtonIndex = 0; + } + + private function outputTitlebarButton_clickHandler():void + { + setOutputState(); + } + + private function setOutputState():void + { + currentState = "output"; + wTemplate.selectedTitlebarButtonIndex = 1; + } + + private function runGPIfRequiredParamsComplete():void + { + var incompleteRequiredInputParams:Array = gpParamHandler.getIncompleteRequiredInputParams(); + if (incompleteRequiredInputParams.length == 0) + { + clearMissingRequiredFieldsMessage(); + busyAnimation.visible = true; + + var requestObject:Object = gpParamHandler.createInputRequestObject(); + + if (gpParamHandler.needsToReprojectInputParams) + { + projectRequestObjectGeometries(requestObject); + } + else + { + runGP(requestObject); + } + } + else + { + showMissingRequiredFieldsMessage(buildMissingFieldsMessage(incompleteRequiredInputParams)); + } + } + + private function projectRequestObjectGeometries(requestObject:Object):void + { + var inputGeometryMap:Dictionary = gpParamHandler.getInputParamGeometryMap(); + var inputParam:IGPFeatureParameter; + var featureSet:FeatureSet; + totalProjectedFeatures = 0; + + for (var key:String in inputGeometryMap) + { + inputParam = gpParamHandler.findInputParamByName(key) as IGPFeatureParameter; + featureSet = requestObject[key]; + const projectParameters:ProjectParameters = new ProjectParameters; + projectParameters.geometries = inputGeometryMap[key]; + projectParameters.outSpatialReference = inputParam.spatialReference; + GeometryServiceSingleton.instance.project(projectParameters, new AsyncResponder(projectionResultHandler, projectionFaultHandler, inputParam)) + } + + function projectionResultHandler(geometries:Array, inputParameter:IGPFeatureParameter):void + { + totalProjectedFeatures++; + var featureSet:FeatureSet = requestObject[key] as FeatureSet; + updateProjectedGeometries(featureSet.features, geometries); + + featureSet.spatialReference = inputParameter.spatialReference; + + if (totalProjectedFeatures == gpParamHandler.totalInputFeatures) + { + runGP(requestObject); + } + } + + function projectionFaultHandler(fault:Fault, token:Object = null):void + { + showError(getDefaultString("projectionError", ErrorMessageUtil.makeHTMLSafe(fault.message))); + } + } + + private function updateProjectedGeometries(graphics:Array, projectedGeometries:Array):void + { + var totalGraphics:int = graphics.length; + var currentGraphic:Graphic; + for (var i:int = 0; i < totalGraphics; i++) + { + currentGraphic = new Graphic(projectedGeometries[i]); + graphics[i] = currentGraphic; + } + } + + private function runGP(requestObject:Object):void + { + totalProcessedOutputFeatures = 0; + + if (executionType == SYNCHRONOUS) + { + gp.execute(requestObject); + } + else if (executionType == ASYNCHRONOUS) + { + asyncResultMap = new Dictionary(); + totalProcessedAsyncResults = 0; + var lastExecutedJob:JobInfo = gp.submitJobLastResult; + if (lastExecutedJob) + { + gp.cancelJobStatusUpdates(lastExecutedJob.jobId); + } + + gp.submitJob(requestObject); + } + else + { + busyAnimation.visible = false; + showError(getDefaultString("cannotRunTaskExecutionTypeUnknownError")); + } + } + + private function showMissingRequiredFieldsMessage(message:String):void + { + missingRequiredFieldsText.text = message; + missingRequiredFieldsText.includeInLayout = true; + missingRequiredFieldsText.visible = true; + } + + private function clearMissingRequiredFieldsMessage():void + { + missingRequiredFieldsText.text = ""; + missingRequiredFieldsText.includeInLayout = false; + missingRequiredFieldsText.visible = false; + } + + private function buildMissingFieldsMessage(incompleteRequiredFields:Array):String + { + var missingFieldsMessage:String; + + if (incompleteRequiredFields.length > 1) + { + missingFieldsMessage = getDefaultString("requiredFields"); + } + else + { + missingFieldsMessage = getDefaultString("requiredField"); + } + + missingFieldsMessage += " " + getMissingRequiredFieldNames(incompleteRequiredFields); + + return missingFieldsMessage; + } + + private function getMissingRequiredFieldNames(incompleteRequiredFields:Array):String + { + var missingRequiredFieldNames:String = ""; + + var firstParam:Boolean = true; + for each (var param:IGPParameter in incompleteRequiredFields) + { + if (firstParam) + { + firstParam = false; + missingRequiredFieldNames += param.label; + } + else + { + missingRequiredFieldNames += ", " + param.label; + } + } + + return missingRequiredFieldNames; + } + + private function gp_executeCompleteHandler(event:GeoprocessorEvent):void + { + busyAnimation.visible = false; + clearOutput(); + + if (event.executeResult) + { + if (needsToShowOutputView) + { + setOutputState(); + } + + var results:Array = event.executeResult.results; + for each (var parameterValue:ParameterValue in results) + { + processResult(parameterValue); + } + } + else + { + showError(getDefaultString("emptyResultsLabel")); + } + } + + private function gp_faultHandler(event:FaultEvent):void + { + busyAnimation.visible = false; + showError(ErrorMessageUtil.makeHTMLSafe(event.fault.toString())); + } + + private function gp_resultDataCompleteHandler(event:GeoprocessorEvent):void + { + asyncResultMap[event.parameterValue.paramName] = event.parameterValue; + totalProcessedAsyncResults++; + if (totalProcessedAsyncResults == gpParamHandler.outputParams.length) + { + busyAnimation.visible = false; + clearOutput(); + if (needsToShowOutputView) + { + setOutputState(); + } + + processAllAsyncResultsInOrder(); + } + } + + private function processAllAsyncResultsInOrder():void + { + if (hasResultMapServer) + { + hideAllResultImageLayers(); + resultImageLayersOnMap = []; + } + + var outputParams:Array = gpParamHandler.outputParams; + var paramName:String; + for each (var param:IGPParameter in outputParams) + { + paramName = param.name; + if (asyncResultMap[paramName]) + { + if (hasResultMapServer) + { + processResultImageLayer(paramName); + } + else + { + processResult(asyncResultMap[paramName]); + } + } + } + + if (resultImageLayersOnMap) + { + showOutputFeaturesClearButton(); + extractLargestResultImageLayerExtent(); + } + } + + private function processResultImageLayer(paramName:String):void + { + var lastExecutedJob:JobInfo = gp.submitJobLastResult; + var resultImageLayer:GPResultImageLayer = gp.getResultImageLayer(lastExecutedJob.jobId, paramName); + resultImageLayer.id = paramName; + resultImageLayer.name = ("hiddenLayer_" + paramName); + resultImageLayersOnMap.push(resultImageLayer); + map.addLayer(resultImageLayer); + layerOrderer.orderLayers(); + } + + private function hideAllResultImageLayers():void + { + for each (var resultImageLayer:GPResultImageLayer in resultImageLayersOnMap) + { + map.removeLayer(resultImageLayer); + } + } + + private function processResult(parameterValue:ParameterValue):void + { + var resultDataType:String = parameterValue.dataType; + var outputParam:IGPParameter = gpParamHandler.findOutputParamByName(parameterValue.paramName); + + if (resultDataType == GPParameterTypes.GP_DATA_FILE) + { + fileDownloader.url = (parameterValue.value as DataFile).url; + fileDownloader.fileName = outputParam.label; + Alert.show(getDefaultString("saveDataFileLabel"), wTemplate.widgetTitle, Alert.YES | Alert.NO, null, alert_ClickHandler); + } + else if (resultDataType == GPParameterTypes.GP_FEATURE_RECORD_SET_LAYER) + { + if (totalProcessedOutputFeatures == 0) + { + outputGraphicsLayers = []; + hideOutputFeaturesClearButton(); + } + + var featureParam:IGPFeatureParameter = (outputParam as IGPFeatureParameter); + var graphicsLayer:GraphicsLayer = featureParam.layer; + graphicsLayer.infoWindowRenderer = featureParam.popUpRenderer; + graphicsLayer.addEventListener(GraphicsLayerEvent.GRAPHICS_CLEAR, ouputGraphicsLayer_graphicsClearHandler, false, 0, true); + graphicsLayer.addEventListener(GraphicEvent.GRAPHIC_REMOVE, ouputGraphicsLayer_graphicsRemoveHandler, false, 0, true); + outputGraphicsLayers.push(graphicsLayer); + + var resultFeatures:Array = (parameterValue.value as FeatureSet).features; + graphicsLayer.graphicProvider = resultFeatures; + // if renderer is null, set the renderer based on result geometry + if (!graphicsLayer.renderer && resultFeatures && resultFeatures.length) + { + var geometryType:String = Graphic(resultFeatures[0]).geometry.type; + var renderer:SimpleRenderer = new SimpleRenderer; + switch (geometryType) + { + case Geometry.MAPPOINT: + { + renderer.symbol = new SimpleMarkerSymbol; + break; + } + case Geometry.POLYLINE: + { + renderer.symbol = new SimpleLineSymbol; + break; + } + case Geometry.POLYGON: + { + renderer.symbol = new SimpleFillSymbol; + break; + } + } + graphicsLayer.renderer = renderer; + } + addContextMenuToGraphics(resultFeatures); + + if (!graphicsLayer.map) + { + map.addLayer(graphicsLayer); + layerOrderer.orderLayers(); + } + + totalProcessedOutputFeatures++; + if (totalProcessedOutputFeatures == gpParamHandler.totalOutputFeatures) + { + showFirstAvailablePopUp(); + zoomToOutputFeatures(); + showOutputFeaturesClearButton(); + } + } + else + { + outputParam.defaultValue = parameterValue.value; + outputParamsDataGroup.dataProvider.addItem(outputParam); + } + } + + private function hideOutputFeaturesClearButton():void + { + if (clearOutputFeaturesButton) + { + clearOutputFeaturesButton.visible = false; + clearOutputFeaturesButton.includeInLayout = false; + } + } + + private function showFirstAvailablePopUp():void + { + var featureParamPopUpToDisplay:IGPFeatureParameter; + var outputFeatureParams:Array = gpParamHandler.getOutputFeatureParams(); + for each (var featureParam:IGPFeatureParameter in outputFeatureParams) + { + if (featureParam.popUpInfo) + { + featureParamPopUpToDisplay = featureParam; + break; + } + } + + if (!featureParamPopUpToDisplay) + { + return; + } + + var contentNavigator:ContentNavigator = map.infoWindow.content as ContentNavigator; + if (!contentNavigator) + { + contentNavigator = new ContentNavigator(); + map.infoWindow.content = contentNavigator; + } + + var graphic:Graphic = (featureParam.layer.graphicProvider as IList).getItemAt(0) as Graphic; + contentNavigator.dataProvider = new ArrayList([ graphic ]); + map.infoWindow.show(graphic.geometry is MapPoint ? graphic.geometry as MapPoint : graphic.geometry.extent.center); + } + + private function showOutputFeaturesClearButton():void + { + if (clearOutputFeaturesButton) + { + clearOutputFeaturesButton.visible = true; + clearOutputFeaturesButton.includeInLayout = true; + } + } + + private function ouputGraphicsLayer_graphicsRemoveHandler(event:GraphicEvent):void + { + showInputViewIfAllOutputFeaturesCleared(); + } + + private function ouputGraphicsLayer_graphicsClearHandler(event:GraphicsLayerEvent):void + { + showInputViewIfAllOutputFeaturesCleared(); + } + + private function showInputViewIfAllOutputFeaturesCleared():void + { + var allGraphicsLayersCleared:Boolean = true; + for each (var graphicsLayer:GraphicsLayer in outputGraphicsLayers) + { + if (graphicsLayer.numGraphics > 0) + { + allGraphicsLayersCleared = false; + break; + } + } + + if (allGraphicsLayersCleared) + { + hideOutputFeaturesClearButton(); + setInputState(); + } + } + + private function alert_ClickHandler(event:CloseEvent):void + { + if (event.detail == Alert.YES) + { + fileDownloader.downloadFile(); + } + } + + private function addContextMenuToGraphics(graphics:Array):void + { + for each (var graphic:Graphic in graphics) + { + graphic.contextMenu = graphicContextMenu; + } + } + + private function zoomToOutputFeatures():void + { + var outputFeaturesExtent:Extent = gpParamHandler.getOutputFeaturesExtent(); + updateMapExtent(outputFeaturesExtent); + } + + protected function menuItem_contextMenuDeleteHandler(event:ContextMenuEvent):void + { + var graphic:Graphic = event.contextMenuOwner as Graphic; + var graphicsLayer:GraphicsLayer = graphic.graphicsLayer; + graphicsLayer.remove(graphic); + } + + private function gp_jobCompleteHandler(event:GeoprocessorEvent):void + { + if (event.jobInfo.jobStatus == JobInfo.STATUS_SUCCEEDED) + { + if (gpParamHandler.outputParams.length > 0) + { + getResultDataForEachOutputParam(event.jobInfo.jobId); + } + else + { + busyAnimation.visible = false; + } + } + else + { + busyAnimation.visible = false; + dispatchJobInfoErrorMessage(event.jobInfo); + } + } + + private function dispatchJobInfoErrorMessage(jobInfo:JobInfo):void + { + var errorMessage:String = getDefaultString("problemLabel") + "\n" + jobInfo.jobStatus; + if (jobInfo.messages) + { + errorMessage += "\n" + ErrorMessageUtil.makeHTMLSafe(jobInfo.messages[jobInfo.messages.length - 1].description); + } + + showError(errorMessage); + } + + private function clearOutput():void + { + if (outputParamsDataGroup.dataProvider) + { + outputParamsDataGroup.dataProvider.removeAll(); + } + } + + private function getResultDataForEachOutputParam(jobId:String):void + { + var outputParams:Array = gpParamHandler.outputParams; + for each (var param:IGPParameter in outputParams) + { + gp.getResultData(jobId, param.name); + } + } + + private function wTemplate_closedHandler(event:Event):void + { + deactivateDrawTool(); + visibleGraphicsLayersWatcher.stopWatching(); + + if (hasResultMapServer) + { + hideAllResultImageLayers(); + } + + if (gpParamHandler) + { + gpParamHandler.hideFeatureLayers(); + hideInfoWindow(); + } + } + + private function hideInfoWindow():void + { + var contentNavigator:ContentNavigator = map.infoWindow.content as ContentNavigator; + if (contentNavigator + && contentNavigator.dataProvider + && contentNavigator.dataProvider.length > 0) + { + //should only have one if opened by GP widget + var contentGraphic:Graphic = contentNavigator.dataProvider.getItemAt(0) as Graphic; + if (contentGraphic + && gpParamHandler.graphicsLayerBelongsToFeatureParam(contentGraphic.graphicsLayer)) + { + map.infoWindow.hide(); + } + } + } + + protected function wTemplate_minimizedHandler(event:Event):void + { + visibleGraphicsLayersWatcher.stopWatching(); + } + + private function wTemplate_openHandler(event:Event):void + { + visibleGraphicsLayersWatcher.startWatching(); + + if (hasResultMapServer) + { + showAllResultImageLayers(); + layerOrderer.orderLayers(); + } + + if (gpParamHandler) + { + gpParamHandler.showFeatureLayers(); + } + } + + private function clearAllGraphics():void + { + hideInfoWindow(); + gpParamHandler.clearInputFeatures(); + + if (hasResultMapServer) + { + clearResultMapLayers(); + hideOutputFeaturesClearButton(); + setInputState(); + } + else + { + gpParamHandler.clearOutputFeatures(); + } + } + + private function clearResultMapLayers():void + { + for each (var resultImageLayer:GPResultImageLayer in resultImageLayersOnMap) + { + map.removeLayer(resultImageLayer); + } + + resultImageLayersOnMap = null; + } + + private function zoomToResultImageLayers():void + { + updateMapExtent(largestResultImageLayerExtent); + } + + private function extractLargestResultImageLayerExtent():void + { + largestResultImageLayerExtent = null; + var remainingResultImages:int = resultImageLayersOnMap.length; + + var imageParams:ImageParameters = new ImageParameters(); + imageParams.imageSpatialReference = map.spatialReference; + + for each (var resultImageLayer:GPResultImageLayer in resultImageLayersOnMap) + { + gp.getResultImage(resultImageLayer.jobId, resultImageLayer.parameterName, imageParams, new AsyncResponder(resultImageSuccess, resultImageFailure, resultImageLayer)); + + function resultImageSuccess(paramValue:ParameterValue, resultImageLayer:GPResultImageLayer):void + { + var resultImage:MapImage = paramValue.value as MapImage; + aggregateExtent(resultImage.extent); + remainingResultImages--; + if (remainingResultImages == 0) + { + zoomToResultImageLayers(); + } + } + + function aggregateExtent(extent:Extent):void + { + if (largestResultImageLayerExtent) + { + largestResultImageLayerExtent = extent.union(largestResultImageLayerExtent); + } + else + { + largestResultImageLayerExtent = extent; + } + } + + function resultImageFailure(fault:Fault, token:Object):void + { + //Swallow error + } + } + } + + private function updateMapExtent(newExtent:Extent):void + { + if (newExtent) + { + map.extent = newExtent; + if (!map.extent.contains(newExtent)) + { + map.level--; + } + } + } + + private function showAllResultImageLayers():void + { + for each (var resultImageLayer:GPResultImageLayer in resultImageLayersOnMap) + { + if (!map.getLayer(resultImageLayer.id)) + { + map.addLayer(resultImageLayer); + } + } + } + ]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/widgets/Geoprocessing/GeoprocessingWidget_CalculateViewshed.xml b/src/widgets/Geoprocessing/GeoprocessingWidget_CalculateViewshed.xml index b37ff32..5dcd541 100644 --- a/src/widgets/Geoprocessing/GeoprocessingWidget_CalculateViewshed.xml +++ b/src/widgets/Geoprocessing/GeoprocessingWidget_CalculateViewshed.xml @@ -1,56 +1,56 @@ - - - - http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Elevation/ESRI_Elevation_World/GPServer/Viewshed - http://sampleserver1.arcgisonline.com/arcgisoutput/Elevation_ESRI_Elevation_World/Viewshed.htm - - - - - - - - - - - - - - - - - - - - - - - - - Input_Observation_Point,Viewshed_Result - - - + + + + http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Elevation/ESRI_Elevation_World/GPServer/Viewshed + http://sampleserver1.arcgisonline.com/arcgisoutput/Elevation_ESRI_Elevation_World/Viewshed.htm + + + + + + + + + + + + + + + + + + + + + + + + + Input_Observation_Point,Viewshed_Result + + + diff --git a/src/widgets/Geoprocessing/GeoprocessingWidget_DriveTimes.xml b/src/widgets/Geoprocessing/GeoprocessingWidget_DriveTimes.xml index 2f5b6bb..0041ee7 100644 --- a/src/widgets/Geoprocessing/GeoprocessingWidget_DriveTimes.xml +++ b/src/widgets/Geoprocessing/GeoprocessingWidget_DriveTimes.xml @@ -1,71 +1,71 @@ - - - http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Network/ESRI_DriveTime_US/GPServer/CreateDriveTimePolygons - http://sampleserver1.arcgisonline.com/arcgisoutput/Network_ESRI_DriveTime_US/CreateDriveTimePolygons.htm - - - - - - - - - - - - - - {Name} - - - - - - - - - - - - - - - - - - - - - - - - - - - - Input_Location,Output_Drive_Time_Polygons - - - + + + http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Network/ESRI_DriveTime_US/GPServer/CreateDriveTimePolygons + http://sampleserver1.arcgisonline.com/arcgisoutput/Network_ESRI_DriveTime_US/CreateDriveTimePolygons.htm + + + + + + + + + + + + + + {Name} + + + + + + + + + + + + + + + + + + + + + + + + + + + + Input_Location,Output_Drive_Time_Polygons + + + diff --git a/src/widgets/Geoprocessing/GeoprocessingWidget_ExtractData.xml b/src/widgets/Geoprocessing/GeoprocessingWidget_ExtractData.xml index 8d311fa..9f35c2a 100644 --- a/src/widgets/Geoprocessing/GeoprocessingWidget_ExtractData.xml +++ b/src/widgets/Geoprocessing/GeoprocessingWidget_ExtractData.xml @@ -1,64 +1,64 @@ - - - Extract data and download zip file - http://sampleserver4.arcgisonline.com/ArcGIS/rest/services/HomelandSecurity/Incident_Data_Extraction/GPServer/Extract%20Data%20Task - http://sampleserver4.arcgisonline.com/arcgisoutput/HomelandSecurity_Incident_Data_Extraction/ExtractDataTask.htm - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Area_of_Interest - - Extract - - - - + + + Extract data and download zip file + http://sampleserver4.arcgisonline.com/ArcGIS/rest/services/HomelandSecurity/Incident_Data_Extraction/GPServer/Extract%20Data%20Task + http://sampleserver4.arcgisonline.com/arcgisoutput/HomelandSecurity_Incident_Data_Extraction/ExtractDataTask.htm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Area_of_Interest + + Extract + + + + diff --git a/src/widgets/Geoprocessing/GeoprocessingWidget_MessageInABottle.xml b/src/widgets/Geoprocessing/GeoprocessingWidget_MessageInABottle.xml index 25939d0..b23d40f 100644 --- a/src/widgets/Geoprocessing/GeoprocessingWidget_MessageInABottle.xml +++ b/src/widgets/Geoprocessing/GeoprocessingWidget_MessageInABottle.xml @@ -1,50 +1,50 @@ - - - - http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_Currents_World/GPServer/MessageInABottle - http://sampleserver1.arcgisonline.com/arcgisoutput/Specialty_ESRI_Currents_World/MessageInABottle.htm - - - - - - - - - - - - - - - - - - - - Input_Point,Output - - - \ No newline at end of file diff --git a/src/widgets/Geoprocessing/GeoprocessingWidget_PopulationSummary.xml b/src/widgets/Geoprocessing/GeoprocessingWidget_PopulationSummary.xml index d9f904b..04a0a39 100644 --- a/src/widgets/Geoprocessing/GeoprocessingWidget_PopulationSummary.xml +++ b/src/widgets/Geoprocessing/GeoprocessingWidget_PopulationSummary.xml @@ -1,35 +1,35 @@ - - - - http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI_Population_World/GPServer/PopulationSummary - http://sampleserver1.arcgisonline.com/arcgisoutput/Demographics_ESRI_Population_World/PopulationSummary.htm - - - - - - - - - - - - - inputPoly - - - + + + + http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI_Population_World/GPServer/PopulationSummary + http://sampleserver1.arcgisonline.com/arcgisoutput/Demographics_ESRI_Population_World/PopulationSummary.htm + + + + + + + + + + + + + inputPoly + + + diff --git a/src/widgets/Geoprocessing/GeoprocessingWidget_SurfaceProfile.xml b/src/widgets/Geoprocessing/GeoprocessingWidget_SurfaceProfile.xml index ae098bd..22f5dec 100644 --- a/src/widgets/Geoprocessing/GeoprocessingWidget_SurfaceProfile.xml +++ b/src/widgets/Geoprocessing/GeoprocessingWidget_SurfaceProfile.xml @@ -1,70 +1,70 @@ - - - - http://sampleserver2.arcgisonline.com/ArcGIS/rest/services/Elevation/ESRI_Elevation_World/GPServer/ProfileService - http://sampleserver2.arcgisonline.com/arcgisoutput/Elevation_ESRI_Elevation_World/ProfileService.htm - - - - - - - - - - - - - - - - Surface Profile - - - - - - - - - - - - Output_Profiles,Input_Polylines - - - + + + + http://sampleserver2.arcgisonline.com/ArcGIS/rest/services/Elevation/ESRI_Elevation_World/GPServer/ProfileService + http://sampleserver2.arcgisonline.com/arcgisoutput/Elevation_ESRI_Elevation_World/ProfileService.htm + + + + + + + + + + + + + + + + Surface Profile + + + + + + + + + + + + Output_Profiles,Input_Polylines + + + diff --git a/src/widgets/Geoprocessing/parameters/BaseParamParser.as b/src/widgets/Geoprocessing/parameters/BaseParamParser.as index 1070fa4..965161f 100644 --- a/src/widgets/Geoprocessing/parameters/BaseParamParser.as +++ b/src/widgets/Geoprocessing/parameters/BaseParamParser.as @@ -1,314 +1,314 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package widgets.Geoprocessing.parameters -{ - -import com.esri.ags.renderers.IRenderer; -import com.esri.viewer.utils.RendererParser; - -public class BaseParamParser -{ - private const SIMPLE_RENDERER_TYPE:String = "simple"; - private const CLASS_BREAKS_RENDERER_TYPE:String = "classbreaks"; - private const UNIQUE_VALUE_RENDERER_TYPE:String = "uniquevalue"; - - private const SIMPLE_MARKER_SYMBOL_TYPE:String = "simplemarker"; - private const PICTURE_MARKER_SYMBOL_TYPE:String = "picturemarker"; - private const SIMPLE_FILL_SYMBOL_TYPE:String = "simplefill"; - private const SIMPLE_LINE_SYMBOL_TYPE:String = "simpleline"; - - private const SIMPLE_RENDERER_TAG_NAME:String = "simplerenderer"; - private const CLASS_BREAKS_RENDERER_TAG_NAME:String = "classbreaksrenderer"; - private const UNIQUE_VALUE_RENDERER_TAG_NAME:String = "uniquevaluerenderer"; - - private const SIMPLE_LINE_SYMBOL_TAG_NAME:String = "simplelinesymbol"; - private const SIMPLE_FILL_SYMBOL_TAG_NAME:String = "simplefillsymbol"; - private const PICTURE_MARKER_SYMBOL_TAG_NAME:String = "picturemarkersymbol"; - private const SIMPLE_MARKER_SYMBOL_TAG_NAME:String = "simplemarkersymbol"; - - protected var rendererParser:RendererParser; - - public function BaseParamParser() - { - rendererParser = new RendererParser(); - } - - public function parseParameters(paramsXML:XMLList):Array - { - throw new Error("Abstract class - must be implemented by subclasses."); - } - - protected function parseRenderer(paramXML:XML, geometryType:String):IRenderer - { - const hasGPRendererXML:Boolean = paramXML.renderer[0]; - - if (hasGPRendererXML) - { - updateGPRendererXML(paramXML.renderer[0], geometryType); - } - else - { - ensureUpdatedRendererAndSymbolXMLExist(paramXML, geometryType); - } - - return rendererParser.parseRenderer(paramXML); - } - - /* helper function that converts to new renderer parser XML */ - private function updateGPRendererXML(rendererXML:XML, geometryType:String):void - { - ensureRendererTypeExists(rendererXML); - ensureSymbolTypesExist(rendererXML, geometryType); - updateRendererTagName(rendererXML); - updateRendererAndInfosXML(rendererXML); - updateSymbolTags(rendererXML); - } - - private function ensureRendererTypeExists(rendererXML:XML):void - { - if (!rendererXML.@type) - { - rendererXML.@type = SIMPLE_RENDERER_TYPE; - } - } - - private function ensureSymbolTypesExist(rendererXML:XML, geometryType:String):void - { - var symbolTypeFallback:String = defaultSymbolTypeFromGeometryType(geometryType); - - var defaultSymbolXMLList:XMLList = rendererXML.defaultsymbol; - if (defaultSymbolXMLList.length() > 0) - { - setMissingSymbolTypes(defaultSymbolXMLList, symbolTypeFallback); - } - else - { - rendererXML.appendChild(updatedDefaultSymbolXMLFromGeometryType(geometryType)); - } - - setMissingSymbolTypes(rendererXML..symbol, symbolTypeFallback); - } - - private function defaultSymbolTypeFromGeometryType(geometryType:String):String - { - var defaultSymbol:String; - - if (geometryType == FeatureLayerParameter.POINT) - { - defaultSymbol = SIMPLE_MARKER_SYMBOL_TYPE; - } - else if (geometryType == FeatureLayerParameter.POLYGON) - { - defaultSymbol = SIMPLE_FILL_SYMBOL_TYPE; - } - else if (geometryType == FeatureLayerParameter.POLYLINE) - { - defaultSymbol = SIMPLE_LINE_SYMBOL_TYPE; - } - - return defaultSymbol; - } - - private function setMissingSymbolTypes(symbolXMLList:XMLList, symbolTypeFallback:String):void - { - for each (var symbol:XML in symbolXMLList) - { - if (!symbol.@type[0]) - { - symbol.@type = symbolTypeFallback; - } - } - } - - private function updateRendererTagName(rendererXML:XML):void - { - rendererXML.setName(toRendererTagName(rendererXML.@type)); - delete rendererXML.@type; - } - - private function toRendererTagName(rendererType:String):String - { - var rendererTagName:String; - - if (rendererType == CLASS_BREAKS_RENDERER_TYPE) - { - rendererTagName = CLASS_BREAKS_RENDERER_TAG_NAME; - } - else if (rendererType == UNIQUE_VALUE_RENDERER_TYPE) - { - rendererTagName = UNIQUE_VALUE_RENDERER_TAG_NAME; - } - else //default is simple renderer - { - rendererTagName = SIMPLE_RENDERER_TAG_NAME; - } - - return rendererTagName; - } - - private function updateRendererAndInfosXML(rendererXML:XML):void - { - if (rendererXML.name() == SIMPLE_RENDERER_TAG_NAME) - { - return; - } - - if (rendererXML.@attribute[0]) - { - rendererXML.@field = rendererXML.@attribute; - delete rendererXML.@attribute; - } - - if (rendererXML.name() == CLASS_BREAKS_RENDERER_TAG_NAME) - { - updateClassBreakInfos(rendererXML); - } - else if (rendererXML.name() == UNIQUE_VALUE_RENDERER_TAG_NAME) - { - updateUniqueValueInfos(rendererXML); - } - } - - private function updateClassBreakInfos(rendererXML:XML):void - { - var symbolXMLList:XMLList = rendererXML.infos.symbol; - for each (var symbolXML:XML in symbolXMLList) - { - var classBreakInfoXML:XML = ; - classBreakInfoXML.@min = symbolXML.@min; - classBreakInfoXML.@max = symbolXML.@max; - classBreakInfoXML.appendChild(symbolXML); - rendererXML.appendChild(classBreakInfoXML); - } - delete rendererXML.infos; - } - - private function updateUniqueValueInfos(rendererXML:XML):void - { - var symbolXMLList:XMLList = rendererXML.infos.symbol; - for each (var symbolXML:XML in symbolXMLList) - { - var uniqueValueInfoXML:XML = ; - uniqueValueInfoXML.@value = symbolXML.@value; - uniqueValueInfoXML.appendChild(symbolXML); - rendererXML.appendChild(uniqueValueInfoXML); - } - delete rendererXML.infos; - } - - private function updateSymbolTags(rendererXML:XML):void - { - var symbolNodes:XMLList = rendererXML..defaultsymbol + rendererXML..symbol; - - for each (var symbolNode:XML in symbolNodes) - { - symbolNode.setName(toSymbolTagName(symbolNode.@type)); - delete symbolNode.@type; - - if (symbolNode.name() == SIMPLE_LINE_SYMBOL_TAG_NAME) - { - if (symbolNode.outline[0]) - { - if (symbolNode.outline.@color[0]) - { - symbolNode.@color = symbolNode.outline.@color; - } - - if (symbolNode.outline.@width[0]) - { - symbolNode.@width = symbolNode.outline.@width[0]; - } - - delete symbolNode.outline; - } - } - } - } - - private function toSymbolTagName(symbolType:String):String - { - var symbolTagName:String; - - if (symbolType == SIMPLE_LINE_SYMBOL_TYPE) - { - symbolTagName = SIMPLE_LINE_SYMBOL_TAG_NAME; - } - else if (symbolType == SIMPLE_FILL_SYMBOL_TYPE) - { - symbolTagName = SIMPLE_FILL_SYMBOL_TAG_NAME; - } - else if (symbolType == PICTURE_MARKER_SYMBOL_TYPE) - { - symbolTagName = PICTURE_MARKER_SYMBOL_TAG_NAME; - } - else //default is simple marker - { - symbolTagName = SIMPLE_MARKER_SYMBOL_TAG_NAME; - } - - return symbolTagName; - } - - private function ensureUpdatedRendererAndSymbolXMLExist(paramXML:XML, geometryType:String):void - { - const updatedRendererXML:XML = (paramXML.simplerenderer[0] || paramXML.classbreaksrenderer[0] || paramXML.uniquevaluerenderer[0]); - if (updatedRendererXML) - { - const hasSymbolDefined:Boolean = updatedRendererXML.simplemarkersymbol[0] || updatedRendererXML.picturemarkersymbol[0] || updatedRendererXML.simplelinesymbol[0] || updatedRendererXML.simplefillsymbol[0]; - if (!hasSymbolDefined) - { - appendUpdatedDefaultSymbolXMLFromGeometry(updatedRendererXML, geometryType); - } - } - else - { - appendUpdatedDefaultRendererXML(paramXML, geometryType); - } - } - - private function appendUpdatedDefaultSymbolXMLFromGeometry(rendererXML:XML, geometryType:String):void - { - rendererXML.appendChild(updatedDefaultSymbolXMLFromGeometryType(geometryType)); - } - - private function updatedDefaultSymbolXMLFromGeometryType(geometryType:String):XML - { - var defaultSymbolXML:XML = ; - - if (geometryType == FeatureLayerParameter.POINT) - { - defaultSymbolXML.setName(SIMPLE_MARKER_SYMBOL_TAG_NAME); - } - else if (geometryType == FeatureLayerParameter.POLYGON) - { - defaultSymbolXML.setName(SIMPLE_FILL_SYMBOL_TAG_NAME); - } - else if (geometryType == FeatureLayerParameter.POLYLINE) - { - defaultSymbolXML.setName(SIMPLE_LINE_SYMBOL_TAG_NAME); - } - - return defaultSymbolXML; - } - - private function appendUpdatedDefaultRendererXML(paramXML:XML, geometryType:String):void - { - var simpleRendererXML:XML = ; - appendUpdatedDefaultSymbolXMLFromGeometry(simpleRendererXML, geometryType); - paramXML.appendChild(simpleRendererXML); - } -} -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package widgets.Geoprocessing.parameters +{ + +import com.esri.ags.renderers.IRenderer; +import com.esri.viewer.utils.RendererParser; + +public class BaseParamParser +{ + private const SIMPLE_RENDERER_TYPE:String = "simple"; + private const CLASS_BREAKS_RENDERER_TYPE:String = "classbreaks"; + private const UNIQUE_VALUE_RENDERER_TYPE:String = "uniquevalue"; + + private const SIMPLE_MARKER_SYMBOL_TYPE:String = "simplemarker"; + private const PICTURE_MARKER_SYMBOL_TYPE:String = "picturemarker"; + private const SIMPLE_FILL_SYMBOL_TYPE:String = "simplefill"; + private const SIMPLE_LINE_SYMBOL_TYPE:String = "simpleline"; + + private const SIMPLE_RENDERER_TAG_NAME:String = "simplerenderer"; + private const CLASS_BREAKS_RENDERER_TAG_NAME:String = "classbreaksrenderer"; + private const UNIQUE_VALUE_RENDERER_TAG_NAME:String = "uniquevaluerenderer"; + + private const SIMPLE_LINE_SYMBOL_TAG_NAME:String = "simplelinesymbol"; + private const SIMPLE_FILL_SYMBOL_TAG_NAME:String = "simplefillsymbol"; + private const PICTURE_MARKER_SYMBOL_TAG_NAME:String = "picturemarkersymbol"; + private const SIMPLE_MARKER_SYMBOL_TAG_NAME:String = "simplemarkersymbol"; + + protected var rendererParser:RendererParser; + + public function BaseParamParser() + { + rendererParser = new RendererParser(); + } + + public function parseParameters(paramsXML:XMLList):Array + { + throw new Error("Abstract class - must be implemented by subclasses."); + } + + protected function parseRenderer(paramXML:XML, geometryType:String):IRenderer + { + const hasGPRendererXML:Boolean = paramXML.renderer[0]; + + if (hasGPRendererXML) + { + updateGPRendererXML(paramXML.renderer[0], geometryType); + } + else + { + ensureUpdatedRendererAndSymbolXMLExist(paramXML, geometryType); + } + + return rendererParser.parseRenderer(paramXML); + } + + /* helper function that converts to new renderer parser XML */ + private function updateGPRendererXML(rendererXML:XML, geometryType:String):void + { + ensureRendererTypeExists(rendererXML); + ensureSymbolTypesExist(rendererXML, geometryType); + updateRendererTagName(rendererXML); + updateRendererAndInfosXML(rendererXML); + updateSymbolTags(rendererXML); + } + + private function ensureRendererTypeExists(rendererXML:XML):void + { + if (!rendererXML.@type) + { + rendererXML.@type = SIMPLE_RENDERER_TYPE; + } + } + + private function ensureSymbolTypesExist(rendererXML:XML, geometryType:String):void + { + var symbolTypeFallback:String = defaultSymbolTypeFromGeometryType(geometryType); + + var defaultSymbolXMLList:XMLList = rendererXML.defaultsymbol; + if (defaultSymbolXMLList.length() > 0) + { + setMissingSymbolTypes(defaultSymbolXMLList, symbolTypeFallback); + } + else + { + rendererXML.appendChild(updatedDefaultSymbolXMLFromGeometryType(geometryType)); + } + + setMissingSymbolTypes(rendererXML..symbol, symbolTypeFallback); + } + + private function defaultSymbolTypeFromGeometryType(geometryType:String):String + { + var defaultSymbol:String; + + if (geometryType == FeatureLayerParameter.POINT) + { + defaultSymbol = SIMPLE_MARKER_SYMBOL_TYPE; + } + else if (geometryType == FeatureLayerParameter.POLYGON) + { + defaultSymbol = SIMPLE_FILL_SYMBOL_TYPE; + } + else if (geometryType == FeatureLayerParameter.POLYLINE) + { + defaultSymbol = SIMPLE_LINE_SYMBOL_TYPE; + } + + return defaultSymbol; + } + + private function setMissingSymbolTypes(symbolXMLList:XMLList, symbolTypeFallback:String):void + { + for each (var symbol:XML in symbolXMLList) + { + if (!symbol.@type[0]) + { + symbol.@type = symbolTypeFallback; + } + } + } + + private function updateRendererTagName(rendererXML:XML):void + { + rendererXML.setName(toRendererTagName(rendererXML.@type)); + delete rendererXML.@type; + } + + private function toRendererTagName(rendererType:String):String + { + var rendererTagName:String; + + if (rendererType == CLASS_BREAKS_RENDERER_TYPE) + { + rendererTagName = CLASS_BREAKS_RENDERER_TAG_NAME; + } + else if (rendererType == UNIQUE_VALUE_RENDERER_TYPE) + { + rendererTagName = UNIQUE_VALUE_RENDERER_TAG_NAME; + } + else //default is simple renderer + { + rendererTagName = SIMPLE_RENDERER_TAG_NAME; + } + + return rendererTagName; + } + + private function updateRendererAndInfosXML(rendererXML:XML):void + { + if (rendererXML.name() == SIMPLE_RENDERER_TAG_NAME) + { + return; + } + + if (rendererXML.@attribute[0]) + { + rendererXML.@field = rendererXML.@attribute; + delete rendererXML.@attribute; + } + + if (rendererXML.name() == CLASS_BREAKS_RENDERER_TAG_NAME) + { + updateClassBreakInfos(rendererXML); + } + else if (rendererXML.name() == UNIQUE_VALUE_RENDERER_TAG_NAME) + { + updateUniqueValueInfos(rendererXML); + } + } + + private function updateClassBreakInfos(rendererXML:XML):void + { + var symbolXMLList:XMLList = rendererXML.infos.symbol; + for each (var symbolXML:XML in symbolXMLList) + { + var classBreakInfoXML:XML = ; + classBreakInfoXML.@min = symbolXML.@min; + classBreakInfoXML.@max = symbolXML.@max; + classBreakInfoXML.appendChild(symbolXML); + rendererXML.appendChild(classBreakInfoXML); + } + delete rendererXML.infos; + } + + private function updateUniqueValueInfos(rendererXML:XML):void + { + var symbolXMLList:XMLList = rendererXML.infos.symbol; + for each (var symbolXML:XML in symbolXMLList) + { + var uniqueValueInfoXML:XML = ; + uniqueValueInfoXML.@value = symbolXML.@value; + uniqueValueInfoXML.appendChild(symbolXML); + rendererXML.appendChild(uniqueValueInfoXML); + } + delete rendererXML.infos; + } + + private function updateSymbolTags(rendererXML:XML):void + { + var symbolNodes:XMLList = rendererXML..defaultsymbol + rendererXML..symbol; + + for each (var symbolNode:XML in symbolNodes) + { + symbolNode.setName(toSymbolTagName(symbolNode.@type)); + delete symbolNode.@type; + + if (symbolNode.name() == SIMPLE_LINE_SYMBOL_TAG_NAME) + { + if (symbolNode.outline[0]) + { + if (symbolNode.outline.@color[0]) + { + symbolNode.@color = symbolNode.outline.@color; + } + + if (symbolNode.outline.@width[0]) + { + symbolNode.@width = symbolNode.outline.@width[0]; + } + + delete symbolNode.outline; + } + } + } + } + + private function toSymbolTagName(symbolType:String):String + { + var symbolTagName:String; + + if (symbolType == SIMPLE_LINE_SYMBOL_TYPE) + { + symbolTagName = SIMPLE_LINE_SYMBOL_TAG_NAME; + } + else if (symbolType == SIMPLE_FILL_SYMBOL_TYPE) + { + symbolTagName = SIMPLE_FILL_SYMBOL_TAG_NAME; + } + else if (symbolType == PICTURE_MARKER_SYMBOL_TYPE) + { + symbolTagName = PICTURE_MARKER_SYMBOL_TAG_NAME; + } + else //default is simple marker + { + symbolTagName = SIMPLE_MARKER_SYMBOL_TAG_NAME; + } + + return symbolTagName; + } + + private function ensureUpdatedRendererAndSymbolXMLExist(paramXML:XML, geometryType:String):void + { + const updatedRendererXML:XML = (paramXML.simplerenderer[0] || paramXML.classbreaksrenderer[0] || paramXML.uniquevaluerenderer[0]); + if (updatedRendererXML) + { + const hasSymbolDefined:Boolean = updatedRendererXML.simplemarkersymbol[0] || updatedRendererXML.picturemarkersymbol[0] || updatedRendererXML.simplelinesymbol[0] || updatedRendererXML.simplefillsymbol[0]; + if (!hasSymbolDefined) + { + appendUpdatedDefaultSymbolXMLFromGeometry(updatedRendererXML, geometryType); + } + } + else + { + appendUpdatedDefaultRendererXML(paramXML, geometryType); + } + } + + private function appendUpdatedDefaultSymbolXMLFromGeometry(rendererXML:XML, geometryType:String):void + { + rendererXML.appendChild(updatedDefaultSymbolXMLFromGeometryType(geometryType)); + } + + private function updatedDefaultSymbolXMLFromGeometryType(geometryType:String):XML + { + var defaultSymbolXML:XML = ; + + if (geometryType == FeatureLayerParameter.POINT) + { + defaultSymbolXML.setName(SIMPLE_MARKER_SYMBOL_TAG_NAME); + } + else if (geometryType == FeatureLayerParameter.POLYGON) + { + defaultSymbolXML.setName(SIMPLE_FILL_SYMBOL_TAG_NAME); + } + else if (geometryType == FeatureLayerParameter.POLYLINE) + { + defaultSymbolXML.setName(SIMPLE_LINE_SYMBOL_TAG_NAME); + } + + return defaultSymbolXML; + } + + private function appendUpdatedDefaultRendererXML(paramXML:XML, geometryType:String):void + { + var simpleRendererXML:XML = ; + appendUpdatedDefaultSymbolXMLFromGeometry(simpleRendererXML, geometryType); + paramXML.appendChild(simpleRendererXML); + } +} +} diff --git a/src/widgets/Geoprocessing/parameters/BaseParameter.as b/src/widgets/Geoprocessing/parameters/BaseParameter.as index 498e557..cc9071b 100644 --- a/src/widgets/Geoprocessing/parameters/BaseParameter.as +++ b/src/widgets/Geoprocessing/parameters/BaseParameter.as @@ -1,191 +1,191 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package widgets.Geoprocessing.parameters -{ - -public class BaseParameter implements IGPParameter -{ - //-------------------------------------------------------------------------- - // - // Properties - // - //-------------------------------------------------------------------------- - - //---------------------------------- - // label - //---------------------------------- - - private var _label:String; - - public function get label():String - { - return _label; - } - - public function set label(value:String):void - { - _label = value; - } - - //---------------------------------- - // name - //---------------------------------- - - private var _name:String; - - public function get name():String - { - return _name; - } - - public function set name(value:String):void - { - _name = value; - } - - //---------------------------------- - // type - //---------------------------------- - - private var _type:String; - - public function get type():String - { - return _type; - } - - //---------------------------------- - // direction - //---------------------------------- - - private var _direction:String; - - public function get direction():String - { - return _direction; - } - - public function set direction(value:String):void - { - _direction = value; - } - - //---------------------------------- - // defaultValue - //---------------------------------- - - private var _defaultValue:Object; - - public function get defaultValue():Object - { - return _defaultValue; - } - - public function set defaultValue(value:Object):void - { - _defaultValue = value; - } - - //---------------------------------- - // choiceList - //---------------------------------- - - private var _choiceList:Array; - - public function get choiceList():Array - { - return _choiceList; - } - - public function set choiceList(value:Array):void - { - _choiceList = value; - } - - //---------------------------------- - // tooltip - //---------------------------------- - - private var _toolTip:String; - - public function get toolTip():String - { - return _toolTip; - } - - public function set toolTip(value:String):void - { - _toolTip = value; - } - - //---------------------------------- - // visible - //---------------------------------- - - private var _visible:Boolean = true; - - public function get visible():Boolean - { - return _visible; - } - - public function set visible(value:Boolean):void - { - _visible = value; - } - - //---------------------------------- - // required - //---------------------------------- - - private var _required:Boolean; - - public function get required():Boolean - { - return _required; - } - - public function set required(value:Boolean):void - { - _required = value; - } - - //-------------------------------------------------------------------------- - // - // Methods - // - //-------------------------------------------------------------------------- - - /** - * Extending classes should override this method if value cannot be casted from String. - */ - public function defaultValueFromString(text:String):void - { - defaultValue = text; - } - - public function getRequestObjectValue():Object - { - return defaultValue; - } - - public function hasValidValue():Boolean - { - return defaultValue; - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package widgets.Geoprocessing.parameters +{ + +public class BaseParameter implements IGPParameter +{ + //-------------------------------------------------------------------------- + // + // Properties + // + //-------------------------------------------------------------------------- + + //---------------------------------- + // label + //---------------------------------- + + private var _label:String; + + public function get label():String + { + return _label; + } + + public function set label(value:String):void + { + _label = value; + } + + //---------------------------------- + // name + //---------------------------------- + + private var _name:String; + + public function get name():String + { + return _name; + } + + public function set name(value:String):void + { + _name = value; + } + + //---------------------------------- + // type + //---------------------------------- + + private var _type:String; + + public function get type():String + { + return _type; + } + + //---------------------------------- + // direction + //---------------------------------- + + private var _direction:String; + + public function get direction():String + { + return _direction; + } + + public function set direction(value:String):void + { + _direction = value; + } + + //---------------------------------- + // defaultValue + //---------------------------------- + + private var _defaultValue:Object; + + public function get defaultValue():Object + { + return _defaultValue; + } + + public function set defaultValue(value:Object):void + { + _defaultValue = value; + } + + //---------------------------------- + // choiceList + //---------------------------------- + + private var _choiceList:Array; + + public function get choiceList():Array + { + return _choiceList; + } + + public function set choiceList(value:Array):void + { + _choiceList = value; + } + + //---------------------------------- + // tooltip + //---------------------------------- + + private var _toolTip:String; + + public function get toolTip():String + { + return _toolTip; + } + + public function set toolTip(value:String):void + { + _toolTip = value; + } + + //---------------------------------- + // visible + //---------------------------------- + + private var _visible:Boolean = true; + + public function get visible():Boolean + { + return _visible; + } + + public function set visible(value:Boolean):void + { + _visible = value; + } + + //---------------------------------- + // required + //---------------------------------- + + private var _required:Boolean; + + public function get required():Boolean + { + return _required; + } + + public function set required(value:Boolean):void + { + _required = value; + } + + //-------------------------------------------------------------------------- + // + // Methods + // + //-------------------------------------------------------------------------- + + /** + * Extending classes should override this method if value cannot be casted from String. + */ + public function defaultValueFromString(text:String):void + { + defaultValue = text; + } + + public function getRequestObjectValue():Object + { + return defaultValue; + } + + public function hasValidValue():Boolean + { + return defaultValue; + } +} + +} diff --git a/src/widgets/Geoprocessing/parameters/BooleanParameter.as b/src/widgets/Geoprocessing/parameters/BooleanParameter.as index 15f7ba3..acf970a 100644 --- a/src/widgets/Geoprocessing/parameters/BooleanParameter.as +++ b/src/widgets/Geoprocessing/parameters/BooleanParameter.as @@ -1,69 +1,69 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package widgets.Geoprocessing.parameters -{ - -public class BooleanParameter extends BaseParameter -{ - //-------------------------------------------------------------------------- - // - // Overridden properties - // - //-------------------------------------------------------------------------- - - //---------------------------------- - // defaultValue - //---------------------------------- - - private var _defaultValue:Boolean; - - override public function get defaultValue():Object - { - return _defaultValue; - } - - override public function set defaultValue(value:Object):void - { - _defaultValue = value as Boolean; - } - - //---------------------------------- - // type - //---------------------------------- - - override public function get type():String - { - return GPParameterTypes.BOOLEAN; - } - - //-------------------------------------------------------------------------- - // - // Overridden methods - // - //-------------------------------------------------------------------------- - - public override function defaultValueFromString(text:String):void - { - defaultValue = (text == "true"); - } - - public override function hasValidValue():Boolean - { - return true; - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package widgets.Geoprocessing.parameters +{ + +public class BooleanParameter extends BaseParameter +{ + //-------------------------------------------------------------------------- + // + // Overridden properties + // + //-------------------------------------------------------------------------- + + //---------------------------------- + // defaultValue + //---------------------------------- + + private var _defaultValue:Boolean; + + override public function get defaultValue():Object + { + return _defaultValue; + } + + override public function set defaultValue(value:Object):void + { + _defaultValue = value as Boolean; + } + + //---------------------------------- + // type + //---------------------------------- + + override public function get type():String + { + return GPParameterTypes.BOOLEAN; + } + + //-------------------------------------------------------------------------- + // + // Overridden methods + // + //-------------------------------------------------------------------------- + + public override function defaultValueFromString(text:String):void + { + defaultValue = (text == "true"); + } + + public override function hasValidValue():Boolean + { + return true; + } +} + +} diff --git a/src/widgets/Geoprocessing/parameters/DataFileParameter.as b/src/widgets/Geoprocessing/parameters/DataFileParameter.as index 50f8af8..bd543fb 100644 --- a/src/widgets/Geoprocessing/parameters/DataFileParameter.as +++ b/src/widgets/Geoprocessing/parameters/DataFileParameter.as @@ -1,101 +1,101 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package widgets.Geoprocessing.parameters -{ - -import com.esri.ags.tasks.supportClasses.DataFile; - -public class DataFileParameter extends BaseParameter -{ - //-------------------------------------------------------------------------- - // - // Constants - // - //-------------------------------------------------------------------------- - - private static const URL_DELIMITER:String = "url:"; - - private static const VALID_URL_REGEX:RegExp = /^(ht|f)tps?:\/\/[^\s\.]+(\.[^\s\.]+)*((\/|\.)[^\s\.]+)+\/?$/; - - //-------------------------------------------------------------------------- - // - // Methods - // - //-------------------------------------------------------------------------- - - private function dataFileString():String - { - return URL_DELIMITER + _defaultValue.url; - } - - //-------------------------------------------------------------------------- - // - // Overridden properties - // - //-------------------------------------------------------------------------- - - //---------------------------------- - // defaultValue - //---------------------------------- - - private var _defaultValue:DataFile; - - override public function get defaultValue():Object - { - return _defaultValue; - } - - override public function set defaultValue(value:Object):void - { - _defaultValue = new DataFile(value.url); - } - - //---------------------------------- - // type - //---------------------------------- - - override public function get type():String - { - return GPParameterTypes.DATA_FILE; - } - - //-------------------------------------------------------------------------- - // - // Overridden methods - // - //-------------------------------------------------------------------------- - - override public function defaultValueFromString(description:String):void - { - var url:String = description.substr(URL_DELIMITER.length, description.length); - _defaultValue = new DataFile(url); - } - - override public function hasValidValue():Boolean - { - if (_defaultValue.url) - { - var validURLIndex:int = _defaultValue.url.search(VALID_URL_REGEX); - return validURLIndex == 0; - } - else - { - return false; - } - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package widgets.Geoprocessing.parameters +{ + +import com.esri.ags.tasks.supportClasses.DataFile; + +public class DataFileParameter extends BaseParameter +{ + //-------------------------------------------------------------------------- + // + // Constants + // + //-------------------------------------------------------------------------- + + private static const URL_DELIMITER:String = "url:"; + + private static const VALID_URL_REGEX:RegExp = /^(ht|f)tps?:\/\/[^\s\.]+(\.[^\s\.]+)*((\/|\.)[^\s\.]+)+\/?$/; + + //-------------------------------------------------------------------------- + // + // Methods + // + //-------------------------------------------------------------------------- + + private function dataFileString():String + { + return URL_DELIMITER + _defaultValue.url; + } + + //-------------------------------------------------------------------------- + // + // Overridden properties + // + //-------------------------------------------------------------------------- + + //---------------------------------- + // defaultValue + //---------------------------------- + + private var _defaultValue:DataFile; + + override public function get defaultValue():Object + { + return _defaultValue; + } + + override public function set defaultValue(value:Object):void + { + _defaultValue = new DataFile(value.url); + } + + //---------------------------------- + // type + //---------------------------------- + + override public function get type():String + { + return GPParameterTypes.DATA_FILE; + } + + //-------------------------------------------------------------------------- + // + // Overridden methods + // + //-------------------------------------------------------------------------- + + override public function defaultValueFromString(description:String):void + { + var url:String = description.substr(URL_DELIMITER.length, description.length); + _defaultValue = new DataFile(url); + } + + override public function hasValidValue():Boolean + { + if (_defaultValue.url) + { + var validURLIndex:int = _defaultValue.url.search(VALID_URL_REGEX); + return validURLIndex == 0; + } + else + { + return false; + } + } +} + +} diff --git a/src/widgets/Geoprocessing/parameters/DateParameter.as b/src/widgets/Geoprocessing/parameters/DateParameter.as index bcdecbe..0a181f0 100644 --- a/src/widgets/Geoprocessing/parameters/DateParameter.as +++ b/src/widgets/Geoprocessing/parameters/DateParameter.as @@ -1,68 +1,68 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package widgets.Geoprocessing.parameters -{ - -public class DateParameter extends BaseParameter -{ - //-------------------------------------------------------------------------- - // - // Overridden properties - // - //-------------------------------------------------------------------------- - - //---------------------------------- - // defaultValue - //---------------------------------- - - private var _defaultValue:Date; - - override public function get defaultValue():Object - { - return _defaultValue; - } - - override public function set defaultValue(value:Object):void - { - var date:Date = new Date(); - date.time = value as Number; - _defaultValue = date; - } - - //---------------------------------- - // type - //---------------------------------- - - override public function get type():String - { - return GPParameterTypes.DATE; - } - - //-------------------------------------------------------------------------- - // - // Overridden methods - // - //-------------------------------------------------------------------------- - - override public function defaultValueFromString(description:String):void - { - var date:Date = new Date(); - date.time = Date.parse(description); - _defaultValue = date; - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package widgets.Geoprocessing.parameters +{ + +public class DateParameter extends BaseParameter +{ + //-------------------------------------------------------------------------- + // + // Overridden properties + // + //-------------------------------------------------------------------------- + + //---------------------------------- + // defaultValue + //---------------------------------- + + private var _defaultValue:Date; + + override public function get defaultValue():Object + { + return _defaultValue; + } + + override public function set defaultValue(value:Object):void + { + var date:Date = new Date(); + date.time = value as Number; + _defaultValue = date; + } + + //---------------------------------- + // type + //---------------------------------- + + override public function get type():String + { + return GPParameterTypes.DATE; + } + + //-------------------------------------------------------------------------- + // + // Overridden methods + // + //-------------------------------------------------------------------------- + + override public function defaultValueFromString(description:String):void + { + var date:Date = new Date(); + date.time = Date.parse(description); + _defaultValue = date; + } +} + +} diff --git a/src/widgets/Geoprocessing/parameters/DoubleParameter.as b/src/widgets/Geoprocessing/parameters/DoubleParameter.as index c86e5a8..22ce10c 100644 --- a/src/widgets/Geoprocessing/parameters/DoubleParameter.as +++ b/src/widgets/Geoprocessing/parameters/DoubleParameter.as @@ -1,73 +1,73 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package widgets.Geoprocessing.parameters -{ - -public class DoubleParameter extends BaseParameter -{ - //-------------------------------------------------------------------------- - // - // Overridden properties - // - //-------------------------------------------------------------------------- - - //---------------------------------- - // defaultValue - //---------------------------------- - - private var _defaultValue:Number = 0; - - override public function get defaultValue():Object - { - return _defaultValue; - } - - override public function set defaultValue(value:Object):void - { - _defaultValue = value as Number; - } - - //---------------------------------- - // type - //---------------------------------- - - override public function get type():String - { - return GPParameterTypes.DOUBLE; - } - - //-------------------------------------------------------------------------- - // - // Overriden methods - // - //-------------------------------------------------------------------------- - - override public function defaultValueFromString(description:String):void - { - var parsedValue:Number = parseFloat(description); - if (!isNaN(parsedValue)) - { - _defaultValue = parsedValue; - } - } - - public override function hasValidValue():Boolean - { - return !isNaN(defaultValue as Number); - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package widgets.Geoprocessing.parameters +{ + +public class DoubleParameter extends BaseParameter +{ + //-------------------------------------------------------------------------- + // + // Overridden properties + // + //-------------------------------------------------------------------------- + + //---------------------------------- + // defaultValue + //---------------------------------- + + private var _defaultValue:Number = 0; + + override public function get defaultValue():Object + { + return _defaultValue; + } + + override public function set defaultValue(value:Object):void + { + _defaultValue = value as Number; + } + + //---------------------------------- + // type + //---------------------------------- + + override public function get type():String + { + return GPParameterTypes.DOUBLE; + } + + //-------------------------------------------------------------------------- + // + // Overriden methods + // + //-------------------------------------------------------------------------- + + override public function defaultValueFromString(description:String):void + { + var parsedValue:Number = parseFloat(description); + if (!isNaN(parsedValue)) + { + _defaultValue = parsedValue; + } + } + + public override function hasValidValue():Boolean + { + return !isNaN(defaultValue as Number); + } +} + +} diff --git a/src/widgets/Geoprocessing/parameters/FeatureLayerParameter.as b/src/widgets/Geoprocessing/parameters/FeatureLayerParameter.as index 08429f6..55b0a79 100644 --- a/src/widgets/Geoprocessing/parameters/FeatureLayerParameter.as +++ b/src/widgets/Geoprocessing/parameters/FeatureLayerParameter.as @@ -1,284 +1,284 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package widgets.Geoprocessing.parameters -{ - -import com.esri.ags.FeatureSet; -import com.esri.ags.SpatialReference; -import com.esri.ags.layers.GraphicsLayer; -import com.esri.ags.renderers.ClassBreaksRenderer; -import com.esri.ags.renderers.IRenderer; -import com.esri.ags.renderers.SimpleRenderer; -import com.esri.ags.renderers.UniqueValueRenderer; -import com.esri.ags.symbols.Symbol; -import com.esri.ags.portal.PopUpRenderer; -import com.esri.ags.portal.supportClasses.PopUpInfo; - -import mx.collections.ArrayCollection; -import mx.core.ClassFactory; - -public class FeatureLayerParameter extends BaseParameter implements IGPFeatureParameter -{ - //-------------------------------------------------------------------------- - // - // Constants - // - //-------------------------------------------------------------------------- - - public static const DRAW_SOURCE:String = "drawtool"; - public static const LAYERS_SOURCE:String = "layers"; - public static const MAP_EXTENT_SOURCE:String = "extent"; - - public static const POINT:String = "point"; - public static const POLYGON:String = "polygon"; - public static const POLYLINE:String = "polyline"; - - public static const SIMPLE_MARKER:String = "simplemarker"; - public static const SIMPLE_FILL:String = "simplefill"; - public static const SIMPLE_LINE:String = "simpleline"; - public static const PICTURE_MARKER:String = "picturemarker"; - - public static const SIMPLE_RENDERER:String = "simple"; - public static const CLASS_BREAKS_RENDERER:String = "classbreaks"; - public static const UNIQUE_VALUE_RENDERER:String = "uniquevalue"; - - //-------------------------------------------------------------------------- - // - // Constructor - // - //-------------------------------------------------------------------------- - - public function FeatureLayerParameter() - { - _layer = new GraphicsLayer(); - } - - //-------------------------------------------------------------------------- - // - // Properties - // - //-------------------------------------------------------------------------- - - //---------------------------------- - // geometryType - //---------------------------------- - - private var _geometryType:String; - - public function get geometryType():String - { - return _geometryType; - } - - public function set geometryType(value:String):void - { - _geometryType = value; - } - - //---------------------------------- - // mode - //---------------------------------- - - private var _mode:String; - - public function get mode():String - { - return _mode; - } - - public function set mode(value:String):void - { - _mode = value; - } - - //---------------------------------- - // layerNames - //---------------------------------- - - private var _layerNames:Array; - - public function get layerNames():Array - { - return _layerNames; - } - - public function set layerNames(value:Array):void - { - _layerNames = value; - } - - //---------------------------------- - // popUpInfo - //---------------------------------- - - private var _popUpInfo:PopUpInfo; - - public function get popUpInfo():PopUpInfo - { - return _popUpInfo; - } - - public function set popUpInfo(value:PopUpInfo):void - { - _popUpInfo = value; - } - - //---------------------------------- - // layer - //---------------------------------- - - private var _layer:GraphicsLayer; - - public function get layer():GraphicsLayer - { - return _layer; - } - - //---------------------------------- - // renderer - //---------------------------------- - - private var _renderer:IRenderer; - - public function get renderer():IRenderer - { - return _renderer; - } - - public function set renderer(value:IRenderer):void - { - _renderer = value; - _layer.renderer = value; - } - - //---------------------------------- - // layerName - //---------------------------------- - - private var _layerName:String; - - public function get layerName():String - { - return _layerName; - } - - public function set layerName(value:String):void - { - _layerName = value; - _layer.name = value; - } - - //---------------------------------- - // popUpRenderer - //---------------------------------- - - public function get popUpRenderer():ClassFactory - { - var popUpRenderer:ClassFactory; - - if (_popUpInfo) - { - popUpRenderer = new ClassFactory(PopUpRenderer); - var popUpInfo:PopUpInfo = _popUpInfo; - popUpRenderer.properties = { popUpInfo: popUpInfo }; - } - - return popUpRenderer; - } - - //---------------------------------- - // spatialReference - //---------------------------------- - - private var _spatialReference:SpatialReference; - - public function get spatialReference():SpatialReference - { - return _spatialReference; - } - - public function set spatialReference(value:SpatialReference):void - { - _spatialReference = value; - } - - //---------------------------------- - // defaultSymbol - //---------------------------------- - - public function get defaultSymbol():Symbol - { - var symbol:Symbol; - - if (_renderer is SimpleRenderer) - { - symbol = (_renderer as SimpleRenderer).symbol; - } - else if (_renderer is ClassBreaksRenderer) - { - symbol = (_renderer as ClassBreaksRenderer).defaultSymbol; - } - else if (_renderer is UniqueValueRenderer) - { - symbol = (_renderer as UniqueValueRenderer).defaultSymbol; - } - - return symbol; - } - - //-------------------------------------------------------------------------- - // - // Overridden properties - // - //-------------------------------------------------------------------------- - - //---------------------------------- - // type - //---------------------------------- - - override public function get type():String - { - return GPParameterTypes.FEATURE_RECORD_SET_LAYER; - } - - //---------------------------------- - // name - //---------------------------------- - - override public function set name(value:String):void - { - super.name = value; - _layer.id = value; - } - - //-------------------------------------------------------------------------- - // - // Overridden methods - // - //-------------------------------------------------------------------------- - - override public function hasValidValue():Boolean - { - return (_layer.graphicProvider as ArrayCollection).length > 0; - } - - public override function getRequestObjectValue():Object - { - return new FeatureSet((_layer.graphicProvider as ArrayCollection).source); - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package widgets.Geoprocessing.parameters +{ + +import com.esri.ags.FeatureSet; +import com.esri.ags.SpatialReference; +import com.esri.ags.layers.GraphicsLayer; +import com.esri.ags.renderers.ClassBreaksRenderer; +import com.esri.ags.renderers.IRenderer; +import com.esri.ags.renderers.SimpleRenderer; +import com.esri.ags.renderers.UniqueValueRenderer; +import com.esri.ags.symbols.Symbol; +import com.esri.ags.portal.PopUpRenderer; +import com.esri.ags.portal.supportClasses.PopUpInfo; + +import mx.collections.ArrayCollection; +import mx.core.ClassFactory; + +public class FeatureLayerParameter extends BaseParameter implements IGPFeatureParameter +{ + //-------------------------------------------------------------------------- + // + // Constants + // + //-------------------------------------------------------------------------- + + public static const DRAW_SOURCE:String = "drawtool"; + public static const LAYERS_SOURCE:String = "layers"; + public static const MAP_EXTENT_SOURCE:String = "extent"; + + public static const POINT:String = "point"; + public static const POLYGON:String = "polygon"; + public static const POLYLINE:String = "polyline"; + + public static const SIMPLE_MARKER:String = "simplemarker"; + public static const SIMPLE_FILL:String = "simplefill"; + public static const SIMPLE_LINE:String = "simpleline"; + public static const PICTURE_MARKER:String = "picturemarker"; + + public static const SIMPLE_RENDERER:String = "simple"; + public static const CLASS_BREAKS_RENDERER:String = "classbreaks"; + public static const UNIQUE_VALUE_RENDERER:String = "uniquevalue"; + + //-------------------------------------------------------------------------- + // + // Constructor + // + //-------------------------------------------------------------------------- + + public function FeatureLayerParameter() + { + _layer = new GraphicsLayer(); + } + + //-------------------------------------------------------------------------- + // + // Properties + // + //-------------------------------------------------------------------------- + + //---------------------------------- + // geometryType + //---------------------------------- + + private var _geometryType:String; + + public function get geometryType():String + { + return _geometryType; + } + + public function set geometryType(value:String):void + { + _geometryType = value; + } + + //---------------------------------- + // mode + //---------------------------------- + + private var _mode:String; + + public function get mode():String + { + return _mode; + } + + public function set mode(value:String):void + { + _mode = value; + } + + //---------------------------------- + // layerNames + //---------------------------------- + + private var _layerNames:Array; + + public function get layerNames():Array + { + return _layerNames; + } + + public function set layerNames(value:Array):void + { + _layerNames = value; + } + + //---------------------------------- + // popUpInfo + //---------------------------------- + + private var _popUpInfo:PopUpInfo; + + public function get popUpInfo():PopUpInfo + { + return _popUpInfo; + } + + public function set popUpInfo(value:PopUpInfo):void + { + _popUpInfo = value; + } + + //---------------------------------- + // layer + //---------------------------------- + + private var _layer:GraphicsLayer; + + public function get layer():GraphicsLayer + { + return _layer; + } + + //---------------------------------- + // renderer + //---------------------------------- + + private var _renderer:IRenderer; + + public function get renderer():IRenderer + { + return _renderer; + } + + public function set renderer(value:IRenderer):void + { + _renderer = value; + _layer.renderer = value; + } + + //---------------------------------- + // layerName + //---------------------------------- + + private var _layerName:String; + + public function get layerName():String + { + return _layerName; + } + + public function set layerName(value:String):void + { + _layerName = value; + _layer.name = value; + } + + //---------------------------------- + // popUpRenderer + //---------------------------------- + + public function get popUpRenderer():ClassFactory + { + var popUpRenderer:ClassFactory; + + if (_popUpInfo) + { + popUpRenderer = new ClassFactory(PopUpRenderer); + var popUpInfo:PopUpInfo = _popUpInfo; + popUpRenderer.properties = { popUpInfo: popUpInfo }; + } + + return popUpRenderer; + } + + //---------------------------------- + // spatialReference + //---------------------------------- + + private var _spatialReference:SpatialReference; + + public function get spatialReference():SpatialReference + { + return _spatialReference; + } + + public function set spatialReference(value:SpatialReference):void + { + _spatialReference = value; + } + + //---------------------------------- + // defaultSymbol + //---------------------------------- + + public function get defaultSymbol():Symbol + { + var symbol:Symbol; + + if (_renderer is SimpleRenderer) + { + symbol = (_renderer as SimpleRenderer).symbol; + } + else if (_renderer is ClassBreaksRenderer) + { + symbol = (_renderer as ClassBreaksRenderer).defaultSymbol; + } + else if (_renderer is UniqueValueRenderer) + { + symbol = (_renderer as UniqueValueRenderer).defaultSymbol; + } + + return symbol; + } + + //-------------------------------------------------------------------------- + // + // Overridden properties + // + //-------------------------------------------------------------------------- + + //---------------------------------- + // type + //---------------------------------- + + override public function get type():String + { + return GPParameterTypes.FEATURE_RECORD_SET_LAYER; + } + + //---------------------------------- + // name + //---------------------------------- + + override public function set name(value:String):void + { + super.name = value; + _layer.id = value; + } + + //-------------------------------------------------------------------------- + // + // Overridden methods + // + //-------------------------------------------------------------------------- + + override public function hasValidValue():Boolean + { + return (_layer.graphicProvider as ArrayCollection).length > 0; + } + + public override function getRequestObjectValue():Object + { + return new FeatureSet((_layer.graphicProvider as ArrayCollection).source); + } +} + +} diff --git a/src/widgets/Geoprocessing/parameters/GPParameterFactory.as b/src/widgets/Geoprocessing/parameters/GPParameterFactory.as index 9c87708..9eca0df 100644 --- a/src/widgets/Geoprocessing/parameters/GPParameterFactory.as +++ b/src/widgets/Geoprocessing/parameters/GPParameterFactory.as @@ -1,88 +1,88 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package widgets.Geoprocessing.parameters -{ - -public class GPParameterFactory -{ - public static function getGPParamFromType(type:String):IGPParameter - { - var gpParam:IGPParameter; - - switch (type) - { - case GPParameterTypes.BOOLEAN: - { - gpParam = new BooleanParameter(); - break; - } - case GPParameterTypes.DATA_FILE: - { - gpParam = new DataFileParameter(); - break; - } - case GPParameterTypes.DATE: - { - gpParam = new DateParameter(); - break; - } - case GPParameterTypes.DOUBLE: - { - gpParam = new DoubleParameter(); - break; - } - case GPParameterTypes.FEATURE_RECORD_SET_LAYER: - { - gpParam = new FeatureLayerParameter(); - break; - } - case GPParameterTypes.LINEAR_UNIT: - { - gpParam = new LinearUnitParameter(); - break; - } - case GPParameterTypes.LONG: - { - gpParam = new LongParameter(); - break; - } - case GPParameterTypes.MULTI_VALUE_STRING: - { - gpParam = new MultiValueStringParameter(); - break; - } - case GPParameterTypes.RASTER_DATA_LAYER: - { - gpParam = new RasterDataLayerParam(); - break; - } - case GPParameterTypes.RECORD_SET: - { - gpParam = new RecordSetParameter(); - break; - } - case GPParameterTypes.STRING: - { - gpParam = new StringParameter(); - break; - } - } - - return gpParam; - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package widgets.Geoprocessing.parameters +{ + +public class GPParameterFactory +{ + public static function getGPParamFromType(type:String):IGPParameter + { + var gpParam:IGPParameter; + + switch (type) + { + case GPParameterTypes.BOOLEAN: + { + gpParam = new BooleanParameter(); + break; + } + case GPParameterTypes.DATA_FILE: + { + gpParam = new DataFileParameter(); + break; + } + case GPParameterTypes.DATE: + { + gpParam = new DateParameter(); + break; + } + case GPParameterTypes.DOUBLE: + { + gpParam = new DoubleParameter(); + break; + } + case GPParameterTypes.FEATURE_RECORD_SET_LAYER: + { + gpParam = new FeatureLayerParameter(); + break; + } + case GPParameterTypes.LINEAR_UNIT: + { + gpParam = new LinearUnitParameter(); + break; + } + case GPParameterTypes.LONG: + { + gpParam = new LongParameter(); + break; + } + case GPParameterTypes.MULTI_VALUE_STRING: + { + gpParam = new MultiValueStringParameter(); + break; + } + case GPParameterTypes.RASTER_DATA_LAYER: + { + gpParam = new RasterDataLayerParam(); + break; + } + case GPParameterTypes.RECORD_SET: + { + gpParam = new RecordSetParameter(); + break; + } + case GPParameterTypes.STRING: + { + gpParam = new StringParameter(); + break; + } + } + + return gpParam; + } +} + +} diff --git a/src/widgets/Geoprocessing/parameters/GPParameterTypes.as b/src/widgets/Geoprocessing/parameters/GPParameterTypes.as index 5c2db64..6ccd2dd 100644 --- a/src/widgets/Geoprocessing/parameters/GPParameterTypes.as +++ b/src/widgets/Geoprocessing/parameters/GPParameterTypes.as @@ -1,46 +1,46 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package widgets.Geoprocessing.parameters -{ - -public class GPParameterTypes -{ - public static const BOOLEAN:String = "boolean"; - public static const STRING:String = "string"; - public static const LONG:String = "long"; - public static const DOUBLE:String = "double"; - public static const DATE:String = "date"; - public static const DATA_FILE:String = "datafile"; - public static const LINEAR_UNIT:String = "linearunit"; - public static const RECORD_SET:String = "recordset"; - public static const FEATURE_RECORD_SET_LAYER:String = "featurerecordset"; - public static const RASTER_DATA_LAYER:String = "rasterdatalayer"; - public static const MULTI_VALUE_STRING:String = "multivalue:string"; - - public static const GP_BOOLEAN:String = "GPBoolean"; - public static const GP_STRING:String = "GPString"; - public static const GP_LONG:String = "GPLong"; - public static const GP_DOUBLE:String = "GPDouble"; - public static const GP_DATE:String = "GPDate"; - public static const GP_DATA_FILE:String = "GPDataFile"; - public static const GP_LINEAR_UNIT:String = "GPLinearUnit"; - public static const GP_RECORD_SET:String = "GPRecordSet"; - public static const GP_FEATURE_RECORD_SET_LAYER:String = "GPFeatureRecordSetLayer"; - public static const GP_RASTER_DATA_LAYER:String = "GPRasterDataLayer"; - public static const GP_MULTI_VALUE_STRING:String = "GPMultiValue:GPString"; //only string multivalue supported -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package widgets.Geoprocessing.parameters +{ + +public class GPParameterTypes +{ + public static const BOOLEAN:String = "boolean"; + public static const STRING:String = "string"; + public static const LONG:String = "long"; + public static const DOUBLE:String = "double"; + public static const DATE:String = "date"; + public static const DATA_FILE:String = "datafile"; + public static const LINEAR_UNIT:String = "linearunit"; + public static const RECORD_SET:String = "recordset"; + public static const FEATURE_RECORD_SET_LAYER:String = "featurerecordset"; + public static const RASTER_DATA_LAYER:String = "rasterdatalayer"; + public static const MULTI_VALUE_STRING:String = "multivalue:string"; + + public static const GP_BOOLEAN:String = "GPBoolean"; + public static const GP_STRING:String = "GPString"; + public static const GP_LONG:String = "GPLong"; + public static const GP_DOUBLE:String = "GPDouble"; + public static const GP_DATE:String = "GPDate"; + public static const GP_DATA_FILE:String = "GPDataFile"; + public static const GP_LINEAR_UNIT:String = "GPLinearUnit"; + public static const GP_RECORD_SET:String = "GPRecordSet"; + public static const GP_FEATURE_RECORD_SET_LAYER:String = "GPFeatureRecordSetLayer"; + public static const GP_RASTER_DATA_LAYER:String = "GPRasterDataLayer"; + public static const GP_MULTI_VALUE_STRING:String = "GPMultiValue:GPString"; //only string multivalue supported +} + +} diff --git a/src/widgets/Geoprocessing/parameters/IGPFeatureParameter.as b/src/widgets/Geoprocessing/parameters/IGPFeatureParameter.as index 331bc97..5f39f93 100644 --- a/src/widgets/Geoprocessing/parameters/IGPFeatureParameter.as +++ b/src/widgets/Geoprocessing/parameters/IGPFeatureParameter.as @@ -1,49 +1,49 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package widgets.Geoprocessing.parameters -{ - -import com.esri.ags.SpatialReference; -import com.esri.ags.layers.GraphicsLayer; -import com.esri.ags.renderers.IRenderer; -import com.esri.ags.symbols.Symbol; -import com.esri.ags.portal.supportClasses.PopUpInfo; - -import mx.core.ClassFactory; - -public interface IGPFeatureParameter extends IGPParameter -{ - function get geometryType():String; - function get mode():String; - function get layerNames():Array; - function get popUpInfo():PopUpInfo; - function get layer():GraphicsLayer; - function get renderer():IRenderer; - function get defaultSymbol():Symbol; - function get layerName():String; - function get popUpRenderer():ClassFactory; - function get spatialReference():SpatialReference; - - function set geometryType(value:String):void; - function set mode(value:String):void; - function set layerNames(value:Array):void; - function set popUpInfo(value:PopUpInfo):void; - function set renderer(value:IRenderer):void; - function set layerName(value:String):void; - function set spatialReference(value:SpatialReference):void; -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package widgets.Geoprocessing.parameters +{ + +import com.esri.ags.SpatialReference; +import com.esri.ags.layers.GraphicsLayer; +import com.esri.ags.renderers.IRenderer; +import com.esri.ags.symbols.Symbol; +import com.esri.ags.portal.supportClasses.PopUpInfo; + +import mx.core.ClassFactory; + +public interface IGPFeatureParameter extends IGPParameter +{ + function get geometryType():String; + function get mode():String; + function get layerNames():Array; + function get popUpInfo():PopUpInfo; + function get layer():GraphicsLayer; + function get renderer():IRenderer; + function get defaultSymbol():Symbol; + function get layerName():String; + function get popUpRenderer():ClassFactory; + function get spatialReference():SpatialReference; + + function set geometryType(value:String):void; + function set mode(value:String):void; + function set layerNames(value:Array):void; + function set popUpInfo(value:PopUpInfo):void; + function set renderer(value:IRenderer):void; + function set layerName(value:String):void; + function set spatialReference(value:SpatialReference):void; +} + +} diff --git a/src/widgets/Geoprocessing/parameters/IGPParameter.as b/src/widgets/Geoprocessing/parameters/IGPParameter.as index 0b7641c..692d5f4 100644 --- a/src/widgets/Geoprocessing/parameters/IGPParameter.as +++ b/src/widgets/Geoprocessing/parameters/IGPParameter.as @@ -1,43 +1,43 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package widgets.Geoprocessing.parameters -{ - -public interface IGPParameter -{ - function get name():String; - function get label():String; - function get type():String; - function get defaultValue():Object; - function get choiceList():Array; - function get toolTip():String; - function get visible():Boolean; - function get required():Boolean; - - function set name(value:String):void; - function set label(value:String):void; - function set defaultValue(value:Object):void; - function set choiceList(value:Array):void; - function set toolTip(value:String):void; - function set visible(value:Boolean):void; - function set required(value:Boolean):void; - - function defaultValueFromString(description:String):void; - function hasValidValue():Boolean; - function getRequestObjectValue():Object; -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package widgets.Geoprocessing.parameters +{ + +public interface IGPParameter +{ + function get name():String; + function get label():String; + function get type():String; + function get defaultValue():Object; + function get choiceList():Array; + function get toolTip():String; + function get visible():Boolean; + function get required():Boolean; + + function set name(value:String):void; + function set label(value:String):void; + function set defaultValue(value:Object):void; + function set choiceList(value:Array):void; + function set toolTip(value:String):void; + function set visible(value:Boolean):void; + function set required(value:Boolean):void; + + function defaultValueFromString(description:String):void; + function hasValidValue():Boolean; + function getRequestObjectValue():Object; +} + +} diff --git a/src/widgets/Geoprocessing/parameters/InputParamParser.as b/src/widgets/Geoprocessing/parameters/InputParamParser.as index be83aa5..0e83e7c 100644 --- a/src/widgets/Geoprocessing/parameters/InputParamParser.as +++ b/src/widgets/Geoprocessing/parameters/InputParamParser.as @@ -1,126 +1,126 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package widgets.Geoprocessing.parameters -{ - -import com.esri.ags.SpatialReference; - -public class InputParamParser extends BaseParamParser -{ - public function InputParamParser() - { - rendererParser = new InputParamRendererParser(); - } - - override public function parseParameters(paramsXML:XMLList):Array - { - var params:Array = []; - var param:IGPParameter; - - for each (var paramXML:XML in paramsXML) - { - param = GPParameterFactory.getGPParamFromType(paramXML.@type); - param.defaultValueFromString(String(paramXML.@defaultvalue)); - param.label = paramXML.@label; - param.name = paramXML.@name; - param.toolTip = paramXML.@tooltip; - param.visible = (paramXML.@visible == "true"); - param.required = (paramXML.@required == "true"); - - if (paramXML.choicelist[0]) - { - if (param.type == GPParameterTypes.MULTI_VALUE_STRING) - { - param.choiceList = parseMultiValueChoiceList(paramXML.choicelist.choice); - } - else - { - param.choiceList = parseChoiceList(paramXML.choicelist.choice); - } - } - - var featureParam:IGPFeatureParameter = param as IGPFeatureParameter; - if (featureParam) - { - featureParam.geometryType = paramXML.@geometrytype; - featureParam.layerName = featureParam.label; - - if (paramXML.@mode[0]) - { - featureParam.mode = paramXML.@mode[0]; - - if (paramXML.layers[0]) - { - featureParam.layerNames = parseLayerWhiteList(paramXML.layers.layer); - } - } - - var wkid:Number = parseFloat(paramXML.@wkid[0]); - var wkt:String = paramXML.@wkt[0]; - if (wkid || wkt) - { - featureParam.spatialReference = new SpatialReference(wkid, wkt) - } - - featureParam.renderer = parseRenderer(paramXML, featureParam.geometryType); - } - - params.push(param); - } - - return params; - } - - private function parseLayerWhiteList(layersXML:XMLList):Array - { - var layerWhiteList:Array = []; - - for each (var layer:XML in layersXML) - { - layerWhiteList.push(layer.@name); - } - - return layerWhiteList; - } - - private function parseMultiValueChoiceList(choiceListXML:XMLList):Array - { - var choiceList:Array = []; - var choiceValue:String; - - for each (var choice:XML in choiceListXML) - { - choiceList.push(new MultiValueItem(choice.@value)); - } - - return choiceList; - } - - private function parseChoiceList(choiceListXML:XMLList):Array - { - var choiceList:Array = []; - var choiceValue:String; - - for each (var choice:XML in choiceListXML) - { - choiceValue = choice.@value; - choiceList.push(choiceValue); - } - - return choiceList; - } -} -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package widgets.Geoprocessing.parameters +{ + +import com.esri.ags.SpatialReference; + +public class InputParamParser extends BaseParamParser +{ + public function InputParamParser() + { + rendererParser = new InputParamRendererParser(); + } + + override public function parseParameters(paramsXML:XMLList):Array + { + var params:Array = []; + var param:IGPParameter; + + for each (var paramXML:XML in paramsXML) + { + param = GPParameterFactory.getGPParamFromType(paramXML.@type); + param.defaultValueFromString(String(paramXML.@defaultvalue)); + param.label = paramXML.@label; + param.name = paramXML.@name; + param.toolTip = paramXML.@tooltip; + param.visible = (paramXML.@visible == "true"); + param.required = (paramXML.@required == "true"); + + if (paramXML.choicelist[0]) + { + if (param.type == GPParameterTypes.MULTI_VALUE_STRING) + { + param.choiceList = parseMultiValueChoiceList(paramXML.choicelist.choice); + } + else + { + param.choiceList = parseChoiceList(paramXML.choicelist.choice); + } + } + + var featureParam:IGPFeatureParameter = param as IGPFeatureParameter; + if (featureParam) + { + featureParam.geometryType = paramXML.@geometrytype; + featureParam.layerName = featureParam.label; + + if (paramXML.@mode[0]) + { + featureParam.mode = paramXML.@mode[0]; + + if (paramXML.layers[0]) + { + featureParam.layerNames = parseLayerWhiteList(paramXML.layers.layer); + } + } + + var wkid:Number = parseFloat(paramXML.@wkid[0]); + var wkt:String = paramXML.@wkt[0]; + if (wkid || wkt) + { + featureParam.spatialReference = new SpatialReference(wkid, wkt) + } + + featureParam.renderer = parseRenderer(paramXML, featureParam.geometryType); + } + + params.push(param); + } + + return params; + } + + private function parseLayerWhiteList(layersXML:XMLList):Array + { + var layerWhiteList:Array = []; + + for each (var layer:XML in layersXML) + { + layerWhiteList.push(layer.@name); + } + + return layerWhiteList; + } + + private function parseMultiValueChoiceList(choiceListXML:XMLList):Array + { + var choiceList:Array = []; + var choiceValue:String; + + for each (var choice:XML in choiceListXML) + { + choiceList.push(new MultiValueItem(choice.@value)); + } + + return choiceList; + } + + private function parseChoiceList(choiceListXML:XMLList):Array + { + var choiceList:Array = []; + var choiceValue:String; + + for each (var choice:XML in choiceListXML) + { + choiceValue = choice.@value; + choiceList.push(choiceValue); + } + + return choiceList; + } +} +} diff --git a/src/widgets/Geoprocessing/parameters/LinearUnitParameter.as b/src/widgets/Geoprocessing/parameters/LinearUnitParameter.as index ad24a7b..9ec167b 100644 --- a/src/widgets/Geoprocessing/parameters/LinearUnitParameter.as +++ b/src/widgets/Geoprocessing/parameters/LinearUnitParameter.as @@ -1,80 +1,80 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package widgets.Geoprocessing.parameters -{ - -import com.esri.ags.tasks.supportClasses.LinearUnit; - -import widgets.Geoprocessing.supportClasses.UnitMappingUtil; - -public class LinearUnitParameter extends BaseParameter -{ - //-------------------------------------------------------------------------- - // - // Methods - // - //-------------------------------------------------------------------------- - - private function linearUnitString():String - { - return _defaultValue.distance + ":" + UnitMappingUtil.toPrettyUnits(_defaultValue.units); - } - - //-------------------------------------------------------------------------- - // - // Overridden properties - // - //-------------------------------------------------------------------------- - - //---------------------------------- - // defaultValue - //---------------------------------- - - private var _defaultValue:LinearUnit; - - override public function get defaultValue():Object - { - return _defaultValue; - } - - override public function set defaultValue(value:Object):void - { - _defaultValue = new LinearUnit(value.distance, value.units); - } - - //---------------------------------- - // type - //---------------------------------- - - override public function get type():String - { - return GPParameterTypes.LINEAR_UNIT; - } - - //-------------------------------------------------------------------------- - // - // Overridden methods - // - //-------------------------------------------------------------------------- - - override public function defaultValueFromString(description:String):void - { - var linearUnitTokens:Array = description.split(':'); - _defaultValue = new LinearUnit(linearUnitTokens[0], UnitMappingUtil.toEsriUnits((linearUnitTokens[1]))); - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package widgets.Geoprocessing.parameters +{ + +import com.esri.ags.tasks.supportClasses.LinearUnit; + +import widgets.Geoprocessing.supportClasses.UnitMappingUtil; + +public class LinearUnitParameter extends BaseParameter +{ + //-------------------------------------------------------------------------- + // + // Methods + // + //-------------------------------------------------------------------------- + + private function linearUnitString():String + { + return _defaultValue.distance + ":" + UnitMappingUtil.toPrettyUnits(_defaultValue.units); + } + + //-------------------------------------------------------------------------- + // + // Overridden properties + // + //-------------------------------------------------------------------------- + + //---------------------------------- + // defaultValue + //---------------------------------- + + private var _defaultValue:LinearUnit; + + override public function get defaultValue():Object + { + return _defaultValue; + } + + override public function set defaultValue(value:Object):void + { + _defaultValue = new LinearUnit(value.distance, value.units); + } + + //---------------------------------- + // type + //---------------------------------- + + override public function get type():String + { + return GPParameterTypes.LINEAR_UNIT; + } + + //-------------------------------------------------------------------------- + // + // Overridden methods + // + //-------------------------------------------------------------------------- + + override public function defaultValueFromString(description:String):void + { + var linearUnitTokens:Array = description.split(':'); + _defaultValue = new LinearUnit(linearUnitTokens[0], UnitMappingUtil.toEsriUnits((linearUnitTokens[1]))); + } +} + +} diff --git a/src/widgets/Geoprocessing/parameters/LongParameter.as b/src/widgets/Geoprocessing/parameters/LongParameter.as index 28b3904..59c1cd7 100644 --- a/src/widgets/Geoprocessing/parameters/LongParameter.as +++ b/src/widgets/Geoprocessing/parameters/LongParameter.as @@ -1,69 +1,69 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package widgets.Geoprocessing.parameters -{ - -public class LongParameter extends BaseParameter -{ - //-------------------------------------------------------------------------- - // - // Overridden properties - // - //-------------------------------------------------------------------------- - - //---------------------------------- - // defaultValue - //---------------------------------- - - private var _defaultValue:int; - - override public function get defaultValue():Object - { - return _defaultValue; - } - - override public function set defaultValue(value:Object):void - { - _defaultValue = value as int; - } - - //---------------------------------- - // type - //---------------------------------- - - override public function get type():String - { - return GPParameterTypes.LONG; - } - - //-------------------------------------------------------------------------- - // - // Overriden methods - // - //-------------------------------------------------------------------------- - - override public function defaultValueFromString(description:String):void - { - defaultValue = parseInt(description); - } - - public override function hasValidValue():Boolean - { - return !isNaN(_defaultValue); - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package widgets.Geoprocessing.parameters +{ + +public class LongParameter extends BaseParameter +{ + //-------------------------------------------------------------------------- + // + // Overridden properties + // + //-------------------------------------------------------------------------- + + //---------------------------------- + // defaultValue + //---------------------------------- + + private var _defaultValue:int; + + override public function get defaultValue():Object + { + return _defaultValue; + } + + override public function set defaultValue(value:Object):void + { + _defaultValue = value as int; + } + + //---------------------------------- + // type + //---------------------------------- + + override public function get type():String + { + return GPParameterTypes.LONG; + } + + //-------------------------------------------------------------------------- + // + // Overriden methods + // + //-------------------------------------------------------------------------- + + override public function defaultValueFromString(description:String):void + { + defaultValue = parseInt(description); + } + + public override function hasValidValue():Boolean + { + return !isNaN(_defaultValue); + } +} + +} diff --git a/src/widgets/Geoprocessing/parameters/MultiValueItem.as b/src/widgets/Geoprocessing/parameters/MultiValueItem.as index 8ec571a..c69e319 100644 --- a/src/widgets/Geoprocessing/parameters/MultiValueItem.as +++ b/src/widgets/Geoprocessing/parameters/MultiValueItem.as @@ -1,31 +1,31 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package widgets.Geoprocessing.parameters -{ - -public class MultiValueItem -{ - public var item:String; - public var selected:Boolean; - - public function MultiValueItem(item:String, selected:Boolean = false) - { - this.item = item; - this.selected = selected; - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package widgets.Geoprocessing.parameters +{ + +public class MultiValueItem +{ + public var item:String; + public var selected:Boolean; + + public function MultiValueItem(item:String, selected:Boolean = false) + { + this.item = item; + this.selected = selected; + } +} + +} diff --git a/src/widgets/Geoprocessing/parameters/MultiValueStringParameter.as b/src/widgets/Geoprocessing/parameters/MultiValueStringParameter.as index 78e1c03..45455b6 100644 --- a/src/widgets/Geoprocessing/parameters/MultiValueStringParameter.as +++ b/src/widgets/Geoprocessing/parameters/MultiValueStringParameter.as @@ -1,94 +1,94 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package widgets.Geoprocessing.parameters -{ - -public class MultiValueStringParameter extends BaseParameter -{ - //-------------------------------------------------------------------------- - // - // Overridden properties - // - //-------------------------------------------------------------------------- - - //---------------------------------- - // defaultValue - //---------------------------------- - - private var _defaultValue:Array; - - override public function get defaultValue():Object - { - return _defaultValue; - } - - override public function set defaultValue(value:Object):void - { - _defaultValue = value as Array; - } - - //---------------------------------- - // type - //---------------------------------- - - override public function get type():String - { - return GPParameterTypes.MULTI_VALUE_STRING; - } - - //-------------------------------------------------------------------------- - // - // Overridden methods - // - //-------------------------------------------------------------------------- - - override public function defaultValueFromString(description:String):void - { - if (description) - { - defaultValue = description.split(','); - } - } - - public override function hasValidValue():Boolean - { - var atLeastOneItemSelected:Boolean = false; - for each (var multiValueItem:MultiValueItem in choiceList) - { - if (multiValueItem.selected) - { - atLeastOneItemSelected = true; - break; - } - } - return atLeastOneItemSelected; - } - - public override function getRequestObjectValue():Object - { - var selectedMultiValues:Array = []; - for each (var multiValueItem:MultiValueItem in choiceList) - { - if (multiValueItem.selected) - { - selectedMultiValues.push(multiValueItem.item); - } - } - return selectedMultiValues; - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package widgets.Geoprocessing.parameters +{ + +public class MultiValueStringParameter extends BaseParameter +{ + //-------------------------------------------------------------------------- + // + // Overridden properties + // + //-------------------------------------------------------------------------- + + //---------------------------------- + // defaultValue + //---------------------------------- + + private var _defaultValue:Array; + + override public function get defaultValue():Object + { + return _defaultValue; + } + + override public function set defaultValue(value:Object):void + { + _defaultValue = value as Array; + } + + //---------------------------------- + // type + //---------------------------------- + + override public function get type():String + { + return GPParameterTypes.MULTI_VALUE_STRING; + } + + //-------------------------------------------------------------------------- + // + // Overridden methods + // + //-------------------------------------------------------------------------- + + override public function defaultValueFromString(description:String):void + { + if (description) + { + defaultValue = description.split(','); + } + } + + public override function hasValidValue():Boolean + { + var atLeastOneItemSelected:Boolean = false; + for each (var multiValueItem:MultiValueItem in choiceList) + { + if (multiValueItem.selected) + { + atLeastOneItemSelected = true; + break; + } + } + return atLeastOneItemSelected; + } + + public override function getRequestObjectValue():Object + { + var selectedMultiValues:Array = []; + for each (var multiValueItem:MultiValueItem in choiceList) + { + if (multiValueItem.selected) + { + selectedMultiValues.push(multiValueItem.item); + } + } + return selectedMultiValues; + } +} + +} diff --git a/src/widgets/Geoprocessing/parameters/OutputParamParser.as b/src/widgets/Geoprocessing/parameters/OutputParamParser.as index c3b38c2..9e9d377 100644 --- a/src/widgets/Geoprocessing/parameters/OutputParamParser.as +++ b/src/widgets/Geoprocessing/parameters/OutputParamParser.as @@ -1,58 +1,58 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package widgets.Geoprocessing.parameters -{ - -import com.esri.viewer.utils.PopUpInfoParser; - -public class OutputParamParser extends BaseParamParser -{ - override public function parseParameters(paramsXML:XMLList):Array - { - var params:Array = []; - var param:IGPParameter; - - for each (var paramXML:XML in paramsXML) - { - param = GPParameterFactory.getGPParamFromType(paramXML.@type); - param.label = paramXML.@label; - param.name = paramXML.@name; - param.toolTip = paramXML.@tooltip; - - var featureParam:IGPFeatureParameter = param as IGPFeatureParameter; - if (featureParam) - { - featureParam.geometryType = paramXML.@geometrytype; - featureParam.layerName = featureParam.label; - - if (paramXML.popup[0]) - { - featureParam.popUpInfo = PopUpInfoParser.parsePopUpInfo(paramXML.popup[0]); - } - - if (featureParam.geometryType) - { - featureParam.renderer = parseRenderer(paramXML, featureParam.geometryType); - } - } - - params.push(param); - } - - return params; - } -} -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package widgets.Geoprocessing.parameters +{ + +import com.esri.viewer.utils.PopUpInfoParser; + +public class OutputParamParser extends BaseParamParser +{ + override public function parseParameters(paramsXML:XMLList):Array + { + var params:Array = []; + var param:IGPParameter; + + for each (var paramXML:XML in paramsXML) + { + param = GPParameterFactory.getGPParamFromType(paramXML.@type); + param.label = paramXML.@label; + param.name = paramXML.@name; + param.toolTip = paramXML.@tooltip; + + var featureParam:IGPFeatureParameter = param as IGPFeatureParameter; + if (featureParam) + { + featureParam.geometryType = paramXML.@geometrytype; + featureParam.layerName = featureParam.label; + + if (paramXML.popup[0]) + { + featureParam.popUpInfo = PopUpInfoParser.parsePopUpInfo(paramXML.popup[0]); + } + + if (featureParam.geometryType) + { + featureParam.renderer = parseRenderer(paramXML, featureParam.geometryType); + } + } + + params.push(param); + } + + return params; + } +} +} diff --git a/src/widgets/Geoprocessing/parameters/RasterDataLayerParam.as b/src/widgets/Geoprocessing/parameters/RasterDataLayerParam.as index 96b01f4..1c6e590 100644 --- a/src/widgets/Geoprocessing/parameters/RasterDataLayerParam.as +++ b/src/widgets/Geoprocessing/parameters/RasterDataLayerParam.as @@ -1,66 +1,66 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package widgets.Geoprocessing.parameters -{ - -import com.esri.ags.tasks.supportClasses.RasterData; - -public class RasterDataLayerParam extends BaseParameter -{ - //-------------------------------------------------------------------------- - // - // Overridden properties - // - //-------------------------------------------------------------------------- - - //---------------------------------- - // defaultValue - //---------------------------------- - - private var _defaultValue:RasterData; - - override public function get defaultValue():Object - { - return _defaultValue; - } - - override public function set defaultValue(value:Object):void - { - _defaultValue = new RasterData(value.url, value.format); - } - - //---------------------------------- - // type - //---------------------------------- - - override public function get type():String - { - return GPParameterTypes.RASTER_DATA_LAYER; - } - - //-------------------------------------------------------------------------- - // - // Overridden methods - // - //-------------------------------------------------------------------------- - - public override function defaultValueFromString(text:String):void - { - //NOT SUPPORTED - OUTPUT PARAM ONLY - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package widgets.Geoprocessing.parameters +{ + +import com.esri.ags.tasks.supportClasses.RasterData; + +public class RasterDataLayerParam extends BaseParameter +{ + //-------------------------------------------------------------------------- + // + // Overridden properties + // + //-------------------------------------------------------------------------- + + //---------------------------------- + // defaultValue + //---------------------------------- + + private var _defaultValue:RasterData; + + override public function get defaultValue():Object + { + return _defaultValue; + } + + override public function set defaultValue(value:Object):void + { + _defaultValue = new RasterData(value.url, value.format); + } + + //---------------------------------- + // type + //---------------------------------- + + override public function get type():String + { + return GPParameterTypes.RASTER_DATA_LAYER; + } + + //-------------------------------------------------------------------------- + // + // Overridden methods + // + //-------------------------------------------------------------------------- + + public override function defaultValueFromString(text:String):void + { + //NOT SUPPORTED - OUTPUT PARAM ONLY + } +} + +} diff --git a/src/widgets/Geoprocessing/parameters/RecordSetParameter.as b/src/widgets/Geoprocessing/parameters/RecordSetParameter.as index 6f910c1..4a3cc0c 100644 --- a/src/widgets/Geoprocessing/parameters/RecordSetParameter.as +++ b/src/widgets/Geoprocessing/parameters/RecordSetParameter.as @@ -1,66 +1,66 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package widgets.Geoprocessing.parameters -{ - -import com.esri.ags.FeatureSet; - -public class RecordSetParameter extends BaseParameter implements IGPParameter -{ - //-------------------------------------------------------------------------- - // - // Overridden properties - // - //-------------------------------------------------------------------------- - - //---------------------------------- - // defaultValue - //---------------------------------- - - private var _defaultValue:FeatureSet; - - override public function get defaultValue():Object - { - return _defaultValue; - } - - override public function set defaultValue(value:Object):void - { - _defaultValue = value as FeatureSet; - } - - //---------------------------------- - // type - //---------------------------------- - - override public function get type():String - { - return GPParameterTypes.RECORD_SET; - } - - //-------------------------------------------------------------------------- - // - // Overridden methods - // - //-------------------------------------------------------------------------- - - override public function defaultValueFromString(text:String):void - { - //NOT SUPPORTED - OUTPUT PARAM ONLY - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package widgets.Geoprocessing.parameters +{ + +import com.esri.ags.FeatureSet; + +public class RecordSetParameter extends BaseParameter implements IGPParameter +{ + //-------------------------------------------------------------------------- + // + // Overridden properties + // + //-------------------------------------------------------------------------- + + //---------------------------------- + // defaultValue + //---------------------------------- + + private var _defaultValue:FeatureSet; + + override public function get defaultValue():Object + { + return _defaultValue; + } + + override public function set defaultValue(value:Object):void + { + _defaultValue = value as FeatureSet; + } + + //---------------------------------- + // type + //---------------------------------- + + override public function get type():String + { + return GPParameterTypes.RECORD_SET; + } + + //-------------------------------------------------------------------------- + // + // Overridden methods + // + //-------------------------------------------------------------------------- + + override public function defaultValueFromString(text:String):void + { + //NOT SUPPORTED - OUTPUT PARAM ONLY + } +} + +} diff --git a/src/widgets/Geoprocessing/parameters/StringParameter.as b/src/widgets/Geoprocessing/parameters/StringParameter.as index e847d05..dc22627 100644 --- a/src/widgets/Geoprocessing/parameters/StringParameter.as +++ b/src/widgets/Geoprocessing/parameters/StringParameter.as @@ -1,53 +1,53 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package widgets.Geoprocessing.parameters -{ - -public class StringParameter extends BaseParameter -{ - //-------------------------------------------------------------------------- - // - // Overridden properties - // - //-------------------------------------------------------------------------- - - //---------------------------------- - // defaultValue - //---------------------------------- - - private var _defaultValue:String; - - override public function get defaultValue():Object - { - return _defaultValue; - } - - override public function set defaultValue(value:Object):void - { - _defaultValue = value as String; - } - - //---------------------------------- - // type - //---------------------------------- - - override public function get type():String - { - return GPParameterTypes.STRING; - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package widgets.Geoprocessing.parameters +{ + +public class StringParameter extends BaseParameter +{ + //-------------------------------------------------------------------------- + // + // Overridden properties + // + //-------------------------------------------------------------------------- + + //---------------------------------- + // defaultValue + //---------------------------------- + + private var _defaultValue:String; + + override public function get defaultValue():Object + { + return _defaultValue; + } + + override public function set defaultValue(value:Object):void + { + _defaultValue = value as String; + } + + //---------------------------------- + // type + //---------------------------------- + + override public function get type():String + { + return GPParameterTypes.STRING; + } +} + +} diff --git a/src/widgets/Geoprocessing/renderers/input/GPInputBooleanParamItemRenderer.mxml b/src/widgets/Geoprocessing/renderers/input/GPInputBooleanParamItemRenderer.mxml index 2132585..bc6af13 100644 --- a/src/widgets/Geoprocessing/renderers/input/GPInputBooleanParamItemRenderer.mxml +++ b/src/widgets/Geoprocessing/renderers/input/GPInputBooleanParamItemRenderer.mxml @@ -1,26 +1,26 @@ - - - - - - - + + + + + + + diff --git a/src/widgets/Geoprocessing/renderers/input/GPInputDataFileParamItemRenderer.mxml b/src/widgets/Geoprocessing/renderers/input/GPInputDataFileParamItemRenderer.mxml index 78ebc21..0b0fdaf 100644 --- a/src/widgets/Geoprocessing/renderers/input/GPInputDataFileParamItemRenderer.mxml +++ b/src/widgets/Geoprocessing/renderers/input/GPInputDataFileParamItemRenderer.mxml @@ -1,64 +1,64 @@ - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + diff --git a/src/widgets/Geoprocessing/renderers/input/GPInputDateParamItemRenderer.mxml b/src/widgets/Geoprocessing/renderers/input/GPInputDateParamItemRenderer.mxml index 6b47983..738c9fe 100644 --- a/src/widgets/Geoprocessing/renderers/input/GPInputDateParamItemRenderer.mxml +++ b/src/widgets/Geoprocessing/renderers/input/GPInputDateParamItemRenderer.mxml @@ -1,42 +1,42 @@ - - - - - - - - - - + + + + + + + + + + diff --git a/src/widgets/Geoprocessing/renderers/input/GPInputDoubleParamItemRenderer.mxml b/src/widgets/Geoprocessing/renderers/input/GPInputDoubleParamItemRenderer.mxml index 9df7951..f0b4bb6 100644 --- a/src/widgets/Geoprocessing/renderers/input/GPInputDoubleParamItemRenderer.mxml +++ b/src/widgets/Geoprocessing/renderers/input/GPInputDoubleParamItemRenderer.mxml @@ -1,43 +1,43 @@ - - - - - - - - - - - + + + + + + + + + + + diff --git a/src/widgets/Geoprocessing/renderers/input/GPInputFeatureParamItemRenderer.mxml b/src/widgets/Geoprocessing/renderers/input/GPInputFeatureParamItemRenderer.mxml index 6fee81a..846dda5 100644 --- a/src/widgets/Geoprocessing/renderers/input/GPInputFeatureParamItemRenderer.mxml +++ b/src/widgets/Geoprocessing/renderers/input/GPInputFeatureParamItemRenderer.mxml @@ -1,485 +1,485 @@ - - - - - -1) - { - visibleGraphicsLayersSelection.selectedItem = selectedGraphicsLayer; - } - } - } - - private function updateSelectedGraphicsLayer():void - { - removeSelectedGraphicsLayerListeners(); - selectedGraphicsLayer = getSelectedGraphicsLayer(); - addSelectedGraphicsLayerListeners(); - updateFeatureParamValueWithSelectedLayer(); - } - - private function removeSelectedGraphicsLayerListeners():void - { - if (selectedGraphicsLayer) - { - selectedGraphicsLayer.removeEventListener(GraphicsLayerEvent.GRAPHICS_CLEAR, graphicsClearHandler); - selectedGraphicsLayer.removeEventListener(GraphicEvent.GRAPHIC_ADD, graphicAddHandler); - selectedGraphicsLayer.removeEventListener(GraphicEvent.GRAPHIC_REMOVE, graphicRemoveHandler); - } - } - - private function graphicsClearHandler(event:GraphicsLayerEvent):void - { - updateFeatureParamValueWithSelectedLayer(); - } - - private function graphicAddHandler(event:GraphicEvent):void - { - updateFeatureParamValueWithSelectedLayer(); - } - - private function graphicRemoveHandler(event:GraphicEvent):void - { - updateFeatureParamValueWithSelectedLayer(); - } - - private function getSelectedGraphicsLayer():GraphicsLayer - { - var currentSelectedGraphicsLayer:GraphicsLayer; - if ((currentState == "selectLayers") && visibleGraphicsLayersSelection) - { - currentSelectedGraphicsLayer = visibleGraphicsLayersSelection.selectedItem as GraphicsLayer; - } - else if (currentState == "selectSingleLayer") - { - if (visibleValidGraphicsLayers.length > 0) - { - currentSelectedGraphicsLayer = visibleValidGraphicsLayers.getItemAt(0) as GraphicsLayer; - } - } - - return currentSelectedGraphicsLayer; - } - - private function addSelectedGraphicsLayerListeners():void - { - if (selectedGraphicsLayer) - { - selectedGraphicsLayer.addEventListener(GraphicsLayerEvent.GRAPHICS_CLEAR, graphicsClearHandler, false, 0, true); - selectedGraphicsLayer.addEventListener(GraphicEvent.GRAPHIC_ADD, graphicAddHandler, false, 0, true); - selectedGraphicsLayer.addEventListener(GraphicEvent.GRAPHIC_REMOVE, graphicRemoveHandler, false, 0, true); - } - } - - private function updateFeatureParamValueWithSelectedLayer():void - { - if (featureParam) - { - if (selectedGraphicsLayer) - { - var selectedLayerGraphicProvider:ArrayCollection = selectedGraphicsLayer.graphicProvider as ArrayCollection; - featureParam.layer.graphicProvider = ObjectUtil.copy(selectedLayerGraphicProvider) as ArrayCollection; - } - else - { - featureParam.layer.graphicProvider = null; - } - } - } - - private function setSingleLayerSelectionMode():void - { - currentState = "selectSingleLayer"; - refreshVisibleGraphicsLayersSelection(); - } - - private function setLayerSelectionMode():void - { - currentState = "selectLayers"; - refreshVisibleGraphicsLayersSelection(); - } - - private function initializeAndSetDrawSelectionMode():void - { - graphicsProvider = featureParam.layer.graphicProvider as ArrayCollection; - inputParamDataGroup.addEventListener(DrawEvent.DRAW_END, map_drawEndHandler, false, 0, true); - setDrawSelectionMode(); - } - - private function map_drawEndHandler(event:DrawEvent):void - { - selectedDrawingIcon = null; - clearSelectionFilter(); - } - - private function clearSelectionFilter():void - { - var totalChildren:int = drawImageGroup.numChildren; - var currentDisplayObject:DisplayObject; - - for (var i:int = 0; i < totalChildren; i++) - { - currentDisplayObject = drawImageGroup.getChildAt(i); - if (currentDisplayObject != selectedDrawingIcon) - { - currentDisplayObject.filters = []; - } - } - } - - private function setDrawSelectionMode():void - { - if (featureParam.geometryType == FeatureLayerParameter.POINT) - { - currentState = "drawPoint"; - } - else if (featureParam.geometryType == FeatureLayerParameter.POLYGON) - { - currentState = "drawPolygon"; - } - else if (featureParam.geometryType == FeatureLayerParameter.POLYLINE) - { - currentState = "drawPolyline"; - } - else - { - currentState = "drawAll"; - } - } - - private function drawIcon_rollOverHandler(event:MouseEvent):void - { - clearSelectionFilter(); - event.target.filters = [ glowFilter ]; - } - - private function drawIcon_rollOutHandler(event:MouseEvent):void - { - clearSelectionFilter(); - } - - private function drawIcon_clickHandler(event:MouseEvent):void - { - selectedDrawingIcon = event.currentTarget as Image; - clearSelectionFilter(); - selectedDrawingIcon.filters = [ glowFilter ]; - dispatchFeatureInputDrawEvent(selectedDrawingIcon.name); - } - - private function dispatchFeatureInputDrawEvent(drawType:String):void - { - var featureInputParamEvent:FeatureInputParamEvent = new FeatureInputParamEvent(FeatureInputParamEvent.DRAW, data as IGPFeatureParameter, drawType); - inputParamDataGroup.dispatchFeatureInputParamEvent(featureInputParamEvent); - } - ]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + -1) + { + visibleGraphicsLayersSelection.selectedItem = selectedGraphicsLayer; + } + } + } + + private function updateSelectedGraphicsLayer():void + { + removeSelectedGraphicsLayerListeners(); + selectedGraphicsLayer = getSelectedGraphicsLayer(); + addSelectedGraphicsLayerListeners(); + updateFeatureParamValueWithSelectedLayer(); + } + + private function removeSelectedGraphicsLayerListeners():void + { + if (selectedGraphicsLayer) + { + selectedGraphicsLayer.removeEventListener(GraphicsLayerEvent.GRAPHICS_CLEAR, graphicsClearHandler); + selectedGraphicsLayer.removeEventListener(GraphicEvent.GRAPHIC_ADD, graphicAddHandler); + selectedGraphicsLayer.removeEventListener(GraphicEvent.GRAPHIC_REMOVE, graphicRemoveHandler); + } + } + + private function graphicsClearHandler(event:GraphicsLayerEvent):void + { + updateFeatureParamValueWithSelectedLayer(); + } + + private function graphicAddHandler(event:GraphicEvent):void + { + updateFeatureParamValueWithSelectedLayer(); + } + + private function graphicRemoveHandler(event:GraphicEvent):void + { + updateFeatureParamValueWithSelectedLayer(); + } + + private function getSelectedGraphicsLayer():GraphicsLayer + { + var currentSelectedGraphicsLayer:GraphicsLayer; + if ((currentState == "selectLayers") && visibleGraphicsLayersSelection) + { + currentSelectedGraphicsLayer = visibleGraphicsLayersSelection.selectedItem as GraphicsLayer; + } + else if (currentState == "selectSingleLayer") + { + if (visibleValidGraphicsLayers.length > 0) + { + currentSelectedGraphicsLayer = visibleValidGraphicsLayers.getItemAt(0) as GraphicsLayer; + } + } + + return currentSelectedGraphicsLayer; + } + + private function addSelectedGraphicsLayerListeners():void + { + if (selectedGraphicsLayer) + { + selectedGraphicsLayer.addEventListener(GraphicsLayerEvent.GRAPHICS_CLEAR, graphicsClearHandler, false, 0, true); + selectedGraphicsLayer.addEventListener(GraphicEvent.GRAPHIC_ADD, graphicAddHandler, false, 0, true); + selectedGraphicsLayer.addEventListener(GraphicEvent.GRAPHIC_REMOVE, graphicRemoveHandler, false, 0, true); + } + } + + private function updateFeatureParamValueWithSelectedLayer():void + { + if (featureParam) + { + if (selectedGraphicsLayer) + { + var selectedLayerGraphicProvider:ArrayCollection = selectedGraphicsLayer.graphicProvider as ArrayCollection; + featureParam.layer.graphicProvider = ObjectUtil.copy(selectedLayerGraphicProvider) as ArrayCollection; + } + else + { + featureParam.layer.graphicProvider = null; + } + } + } + + private function setSingleLayerSelectionMode():void + { + currentState = "selectSingleLayer"; + refreshVisibleGraphicsLayersSelection(); + } + + private function setLayerSelectionMode():void + { + currentState = "selectLayers"; + refreshVisibleGraphicsLayersSelection(); + } + + private function initializeAndSetDrawSelectionMode():void + { + graphicsProvider = featureParam.layer.graphicProvider as ArrayCollection; + inputParamDataGroup.addEventListener(DrawEvent.DRAW_END, map_drawEndHandler, false, 0, true); + setDrawSelectionMode(); + } + + private function map_drawEndHandler(event:DrawEvent):void + { + selectedDrawingIcon = null; + clearSelectionFilter(); + } + + private function clearSelectionFilter():void + { + var totalChildren:int = drawImageGroup.numChildren; + var currentDisplayObject:DisplayObject; + + for (var i:int = 0; i < totalChildren; i++) + { + currentDisplayObject = drawImageGroup.getChildAt(i); + if (currentDisplayObject != selectedDrawingIcon) + { + currentDisplayObject.filters = []; + } + } + } + + private function setDrawSelectionMode():void + { + if (featureParam.geometryType == FeatureLayerParameter.POINT) + { + currentState = "drawPoint"; + } + else if (featureParam.geometryType == FeatureLayerParameter.POLYGON) + { + currentState = "drawPolygon"; + } + else if (featureParam.geometryType == FeatureLayerParameter.POLYLINE) + { + currentState = "drawPolyline"; + } + else + { + currentState = "drawAll"; + } + } + + private function drawIcon_rollOverHandler(event:MouseEvent):void + { + clearSelectionFilter(); + event.target.filters = [ glowFilter ]; + } + + private function drawIcon_rollOutHandler(event:MouseEvent):void + { + clearSelectionFilter(); + } + + private function drawIcon_clickHandler(event:MouseEvent):void + { + selectedDrawingIcon = event.currentTarget as Image; + clearSelectionFilter(); + selectedDrawingIcon.filters = [ glowFilter ]; + dispatchFeatureInputDrawEvent(selectedDrawingIcon.name); + } + + private function dispatchFeatureInputDrawEvent(drawType:String):void + { + var featureInputParamEvent:FeatureInputParamEvent = new FeatureInputParamEvent(FeatureInputParamEvent.DRAW, data as IGPFeatureParameter, drawType); + inputParamDataGroup.dispatchFeatureInputParamEvent(featureInputParamEvent); + } + ]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/widgets/Geoprocessing/renderers/input/GPInputLinearUnitParamItemRenderer.mxml b/src/widgets/Geoprocessing/renderers/input/GPInputLinearUnitParamItemRenderer.mxml index 45d2972..0ba204a 100644 --- a/src/widgets/Geoprocessing/renderers/input/GPInputLinearUnitParamItemRenderer.mxml +++ b/src/widgets/Geoprocessing/renderers/input/GPInputLinearUnitParamItemRenderer.mxml @@ -1,89 +1,89 @@ - - - - - -1) - { - unitSelection.selectedIndex = defaultUnitIndex; - } - } - else - { - unitSelection.dataProvider = new ArrayList([ value.defaultValue.units ]); - } - } - - super.data = value; - } - - private function unitLabelFunction(units:String):String - { - return UnitMappingUtil.toPrettyUnits(units); - } - ]]> - - - - - - - - + + + + + -1) + { + unitSelection.selectedIndex = defaultUnitIndex; + } + } + else + { + unitSelection.dataProvider = new ArrayList([ value.defaultValue.units ]); + } + } + + super.data = value; + } + + private function unitLabelFunction(units:String):String + { + return UnitMappingUtil.toPrettyUnits(units); + } + ]]> + + + + + + + + diff --git a/src/widgets/Geoprocessing/renderers/input/GPInputLongParamItemRenderer.mxml b/src/widgets/Geoprocessing/renderers/input/GPInputLongParamItemRenderer.mxml index 94f084d..f3c4f18 100644 --- a/src/widgets/Geoprocessing/renderers/input/GPInputLongParamItemRenderer.mxml +++ b/src/widgets/Geoprocessing/renderers/input/GPInputLongParamItemRenderer.mxml @@ -1,43 +1,43 @@ - - - - - - - - - - - + + + + + + + + + + + diff --git a/src/widgets/Geoprocessing/renderers/input/GPInputRasterDataLayerParamItemRenderer.mxml b/src/widgets/Geoprocessing/renderers/input/GPInputRasterDataLayerParamItemRenderer.mxml index 68e75cf..35ca385 100644 --- a/src/widgets/Geoprocessing/renderers/input/GPInputRasterDataLayerParamItemRenderer.mxml +++ b/src/widgets/Geoprocessing/renderers/input/GPInputRasterDataLayerParamItemRenderer.mxml @@ -1,33 +1,33 @@ - - - - - - - - - - + + + + + + + + + + diff --git a/src/widgets/Geoprocessing/renderers/input/GPInputRecordSetParamItemRenderer.mxml b/src/widgets/Geoprocessing/renderers/input/GPInputRecordSetParamItemRenderer.mxml index 23beb56..714f5c3 100644 --- a/src/widgets/Geoprocessing/renderers/input/GPInputRecordSetParamItemRenderer.mxml +++ b/src/widgets/Geoprocessing/renderers/input/GPInputRecordSetParamItemRenderer.mxml @@ -1,33 +1,33 @@ - - - - - - - - - - + + + + + + + + + + diff --git a/src/widgets/Geoprocessing/renderers/input/GPInputStringParamItemRenderer.mxml b/src/widgets/Geoprocessing/renderers/input/GPInputStringParamItemRenderer.mxml index e26ee3e..69ef217 100644 --- a/src/widgets/Geoprocessing/renderers/input/GPInputStringParamItemRenderer.mxml +++ b/src/widgets/Geoprocessing/renderers/input/GPInputStringParamItemRenderer.mxml @@ -1,81 +1,81 @@ - - - - - 0); - if (hasChoiceList) - { - choiceSelection.dataProvider = new ArrayList(param.choiceList); - setChoiceListDefaultValue(param.defaultValue as String); - } - } - } - - private function setChoiceListDefaultValue(defaultValue:String):void - { - var defaultValueIndex:int = param.choiceList.indexOf(defaultValue); - if (defaultValueIndex > -1) - { - choiceSelection.selectedIndex = defaultValueIndex; - } - } - - protected function updateDefaultValueWithChoice():void - { - param.defaultValue = choiceSelection.selectedItem; - } - ]]> - - - - - - - - + + + + + 0); + if (hasChoiceList) + { + choiceSelection.dataProvider = new ArrayList(param.choiceList); + setChoiceListDefaultValue(param.defaultValue as String); + } + } + } + + private function setChoiceListDefaultValue(defaultValue:String):void + { + var defaultValueIndex:int = param.choiceList.indexOf(defaultValue); + if (defaultValueIndex > -1) + { + choiceSelection.selectedIndex = defaultValueIndex; + } + } + + protected function updateDefaultValueWithChoice():void + { + param.defaultValue = choiceSelection.selectedItem; + } + ]]> + + + + + + + + diff --git a/src/widgets/Geoprocessing/renderers/input/multivalue/GPInputMultiValueStringParamItemRenderer.mxml b/src/widgets/Geoprocessing/renderers/input/multivalue/GPInputMultiValueStringParamItemRenderer.mxml index 94e3a52..2f800fa 100644 --- a/src/widgets/Geoprocessing/renderers/input/multivalue/GPInputMultiValueStringParamItemRenderer.mxml +++ b/src/widgets/Geoprocessing/renderers/input/multivalue/GPInputMultiValueStringParamItemRenderer.mxml @@ -1,80 +1,80 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + diff --git a/src/widgets/Geoprocessing/renderers/input/multivalue/MultiValueItemRenderer.mxml b/src/widgets/Geoprocessing/renderers/input/multivalue/MultiValueItemRenderer.mxml index b8e885f..d6eb656 100644 --- a/src/widgets/Geoprocessing/renderers/input/multivalue/MultiValueItemRenderer.mxml +++ b/src/widgets/Geoprocessing/renderers/input/multivalue/MultiValueItemRenderer.mxml @@ -1,27 +1,27 @@ - - - - - + + + + + diff --git a/src/widgets/Geoprocessing/renderers/output/GPOutputLinearUnitParamItemRenderer.mxml b/src/widgets/Geoprocessing/renderers/output/GPOutputLinearUnitParamItemRenderer.mxml index d24c5b3..0843692 100644 --- a/src/widgets/Geoprocessing/renderers/output/GPOutputLinearUnitParamItemRenderer.mxml +++ b/src/widgets/Geoprocessing/renderers/output/GPOutputLinearUnitParamItemRenderer.mxml @@ -1,39 +1,39 @@ - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + diff --git a/src/widgets/Geoprocessing/renderers/output/GPOutputParamItemRenderer.mxml b/src/widgets/Geoprocessing/renderers/output/GPOutputParamItemRenderer.mxml index 78e6747..b1897da 100644 --- a/src/widgets/Geoprocessing/renderers/output/GPOutputParamItemRenderer.mxml +++ b/src/widgets/Geoprocessing/renderers/output/GPOutputParamItemRenderer.mxml @@ -1,35 +1,35 @@ - - - - - - - - - - - + + + + + + + + + + + diff --git a/src/widgets/Geoprocessing/renderers/output/GPOutputRasterDataParamItemRenderer.mxml b/src/widgets/Geoprocessing/renderers/output/GPOutputRasterDataParamItemRenderer.mxml index a4ced77..49d89aa 100644 --- a/src/widgets/Geoprocessing/renderers/output/GPOutputRasterDataParamItemRenderer.mxml +++ b/src/widgets/Geoprocessing/renderers/output/GPOutputRasterDataParamItemRenderer.mxml @@ -1,55 +1,55 @@ - - - - - " + value.defaultValue.url + ""; - } - } - ]]> - - - - - - - - - - + + + + + " + value.defaultValue.url + ""; + } + } + ]]> + + + + + + + + + + diff --git a/src/widgets/Geoprocessing/renderers/output/GPOutputRecordSetParamItemRenderer.mxml b/src/widgets/Geoprocessing/renderers/output/GPOutputRecordSetParamItemRenderer.mxml index 5c9f7c4..92f25aa 100644 --- a/src/widgets/Geoprocessing/renderers/output/GPOutputRecordSetParamItemRenderer.mxml +++ b/src/widgets/Geoprocessing/renderers/output/GPOutputRecordSetParamItemRenderer.mxml @@ -1,158 +1,158 @@ - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/widgets/Geoprocessing/supportClasses/FeatureInputParamEvent.as b/src/widgets/Geoprocessing/supportClasses/FeatureInputParamEvent.as index cef3b11..54ba4e3 100644 --- a/src/widgets/Geoprocessing/supportClasses/FeatureInputParamEvent.as +++ b/src/widgets/Geoprocessing/supportClasses/FeatureInputParamEvent.as @@ -1,44 +1,44 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package widgets.Geoprocessing.supportClasses -{ - -import flash.events.Event; - -import widgets.Geoprocessing.parameters.IGPFeatureParameter; - -public class FeatureInputParamEvent extends Event -{ - public static const DRAW:String = "drawFeature"; - public static const CLEAR:String = "clearFeature"; - - public var featureParam:IGPFeatureParameter; - public var drawType:String; - - public function FeatureInputParamEvent(type:String, featureParam:IGPFeatureParameter, drawType:String = null, bubbles:Boolean = false, cancelable:Boolean = false) - { - this.featureParam = featureParam; - this.drawType = drawType; - super(type, bubbles, cancelable); - } - - override public function clone():Event - { - return new FeatureInputParamEvent(type, featureParam, drawType, bubbles, cancelable); - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package widgets.Geoprocessing.supportClasses +{ + +import flash.events.Event; + +import widgets.Geoprocessing.parameters.IGPFeatureParameter; + +public class FeatureInputParamEvent extends Event +{ + public static const DRAW:String = "drawFeature"; + public static const CLEAR:String = "clearFeature"; + + public var featureParam:IGPFeatureParameter; + public var drawType:String; + + public function FeatureInputParamEvent(type:String, featureParam:IGPFeatureParameter, drawType:String = null, bubbles:Boolean = false, cancelable:Boolean = false) + { + this.featureParam = featureParam; + this.drawType = drawType; + super(type, bubbles, cancelable); + } + + override public function clone():Event + { + return new FeatureInputParamEvent(type, featureParam, drawType, bubbles, cancelable); + } +} + +} diff --git a/src/widgets/Geoprocessing/supportClasses/FileDownloader.as b/src/widgets/Geoprocessing/supportClasses/FileDownloader.as index fa8afe6..b5a1581 100644 --- a/src/widgets/Geoprocessing/supportClasses/FileDownloader.as +++ b/src/widgets/Geoprocessing/supportClasses/FileDownloader.as @@ -1,74 +1,74 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package widgets.Geoprocessing.supportClasses -{ - -import flash.net.FileReference; -import flash.net.URLRequest; - -public class FileDownloader -{ - private static const FILE_NAME_DEFAULT:String = "gpFile"; - - private var _url:String; - - public function get url():String - { - return _url; - } - - public function set url(value:String):void - { - _url = value; - } - - private var _fileName:String; - - public function get fileName():String - { - return _fileName || FILE_NAME_DEFAULT; - } - - public function set fileName(value:String):void - { - _fileName = value; - } - - public function downloadFile():void - { - if (url) - { - var downloadURL:URLRequest = new URLRequest(url); - var file:FileReference = new FileReference(); - var fileNameWithExtension:String = fileName + getFileExtension(url); - file.download(downloadURL, fileNameWithExtension); - } - } - - private function getFileExtension(url:String):String - { - var fileExtension:String = ""; - var fileExtensionIndex:int = url.search(/.[\w]+$/g); - if (fileExtensionIndex > 0) - { - fileExtension += url.substr(fileExtensionIndex, url.length); - } - - return fileExtension; - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package widgets.Geoprocessing.supportClasses +{ + +import flash.net.FileReference; +import flash.net.URLRequest; + +public class FileDownloader +{ + private static const FILE_NAME_DEFAULT:String = "gpFile"; + + private var _url:String; + + public function get url():String + { + return _url; + } + + public function set url(value:String):void + { + _url = value; + } + + private var _fileName:String; + + public function get fileName():String + { + return _fileName || FILE_NAME_DEFAULT; + } + + public function set fileName(value:String):void + { + _fileName = value; + } + + public function downloadFile():void + { + if (url) + { + var downloadURL:URLRequest = new URLRequest(url); + var file:FileReference = new FileReference(); + var fileNameWithExtension:String = fileName + getFileExtension(url); + file.download(downloadURL, fileNameWithExtension); + } + } + + private function getFileExtension(url:String):String + { + var fileExtension:String = ""; + var fileExtensionIndex:int = url.search(/.[\w]+$/g); + if (fileExtensionIndex > 0) + { + fileExtension += url.substr(fileExtensionIndex, url.length); + } + + return fileExtension; + } +} + +} diff --git a/src/widgets/Geoprocessing/supportClasses/GPParamHandler.as b/src/widgets/Geoprocessing/supportClasses/GPParamHandler.as index a7e15f2..681b414 100644 --- a/src/widgets/Geoprocessing/supportClasses/GPParamHandler.as +++ b/src/widgets/Geoprocessing/supportClasses/GPParamHandler.as @@ -1,412 +1,412 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package widgets.Geoprocessing.supportClasses -{ - -import com.esri.ags.FeatureSet; -import com.esri.ags.Graphic; -import com.esri.ags.geometry.Extent; -import com.esri.ags.geometry.Polygon; -import com.esri.ags.layers.GraphicsLayer; -import com.esri.ags.utils.GraphicUtil; - -import flash.utils.Dictionary; - -import mx.collections.ArrayCollection; - -import widgets.Geoprocessing.parameters.BaseParamParser; -import widgets.Geoprocessing.parameters.FeatureLayerParameter; -import widgets.Geoprocessing.parameters.GPParameterTypes; -import widgets.Geoprocessing.parameters.IGPFeatureParameter; -import widgets.Geoprocessing.parameters.IGPParameter; -import widgets.Geoprocessing.parameters.InputParamParser; -import widgets.Geoprocessing.parameters.OutputParamParser; - - -public class GPParamHandler -{ - public function GPParamHandler(paramsXML:XML) - { - var inputParamParser:BaseParamParser = new InputParamParser(); - var outputParamParser:BaseParamParser = new OutputParamParser(); - _inputParams = inputParamParser.parseParameters(paramsXML.inputparams.param); - _outputParams = outputParamParser.parseParameters(paramsXML.outputparams.param); - _totalOutputFeatures = getTotalFeatures(_outputParams); - _totalInputFeatures = getTotalFeatures(_inputParams); - - if (_totalInputFeatures) - { - _needsToReprojectInputParams = hasInputSpatialReferences(); - } - } - - private function getTotalFeatures(params:Array):int - { - var total:int = 0; - var featureParam:IGPFeatureParameter; - - for each (var param:IGPParameter in params) - { - if (param.type == GPParameterTypes.FEATURE_RECORD_SET_LAYER) - { - featureParam = (param as IGPFeatureParameter); - total++; - } - } - - return total; - } - - public function getInputParamGeometryMap():Dictionary - { - var inputGeometryMap:Dictionary = new Dictionary(); - var inputFeatureSet:FeatureSet; - - for each (var inputParam:IGPParameter in _inputParams) - { - if (inputParam.type == GPParameterTypes.FEATURE_RECORD_SET_LAYER) - { - inputFeatureSet = (inputParam as IGPFeatureParameter).getRequestObjectValue() as FeatureSet; - inputGeometryMap[inputParam.name] = GraphicUtil.getGeometries(inputFeatureSet.features); - } - } - - return inputGeometryMap; - } - - private var _needsToReprojectInputParams:Boolean; - - public function get needsToReprojectInputParams():Boolean - { - return _needsToReprojectInputParams; - } - - private function hasInputSpatialReferences():Boolean - { - var atLeastOneSpatialReferenceDefined:Boolean = false; - - for each (var inputParam:IGPParameter in _inputParams) - { - if (inputParam.type == GPParameterTypes.FEATURE_RECORD_SET_LAYER) - { - if ((inputParam as IGPFeatureParameter).spatialReference) - { - atLeastOneSpatialReferenceDefined = true; - break; - } - } - } - - return atLeastOneSpatialReferenceDefined; - } - - private var _totalInputFeatures:int; - - public function get totalInputFeatures():int - { - return _totalInputFeatures; - } - - private var _totalOutputFeatures:int; - - public function get totalOutputFeatures():int - { - return _totalOutputFeatures; - } - - private var _inputParams:Array; - - public function get inputParams():Array - { - return _inputParams; - } - - private var _outputParams:Array; - - public function get outputParams():Array - { - return _outputParams; - } - - public function getVisibleInputParams():Array - { - return getVisibleParams(_inputParams); - } - - private function getVisibleParams(params:Array):Array - { - var visibleParams:Array = []; - - for each (var param:IGPParameter in params) - { - if (param.visible) - { - visibleParams.push(param); - } - } - - return visibleParams; - } - - private function getIncompleteRequiredFields(params:Array):Array - { - var incompleteRequiredFields:Array = []; - - for each (var param:IGPParameter in params) - { - if (param.required && !param.hasValidValue()) - { - incompleteRequiredFields.push(param); - } - } - - return incompleteRequiredFields; - } - - public function getIncompleteRequiredInputParams():Array - { - return getIncompleteRequiredFields(_inputParams); - } - - public function createInputRequestObject():Object - { - return createRequestObject(_inputParams); - } - - private function createRequestObject(params:Array):Object - { - var requestObject:Object = {}; - - for each (var param:IGPParameter in params) - { - requestObject[param.name] = param.getRequestObjectValue(); - } - - return requestObject; - } - - public function findInputParamByName(name:String):IGPParameter - { - return findParamByName(name, _inputParams); - } - - public function findOutputParamByName(name:String):IGPParameter - { - return findParamByName(name, _outputParams); - } - - private function findParamByName(name:String, params:Array):IGPParameter - { - var foundParam:IGPParameter; - - for each (var param:IGPParameter in params) - { - if (param.name == name) - { - foundParam = param; - break; - } - } - - return foundParam; - } - - public function hasVisibleOutput():Boolean - { - var hasVisibleOutputParam:Boolean = false; - - if (outputParams) - { - for each (var param:IGPParameter in outputParams) - { - if (isVisibleOutputType(param)) - { - hasVisibleOutputParam = true; - break; - } - } - } - - return hasVisibleOutputParam; - } - - private function isVisibleOutputType(param:IGPParameter):Boolean - { - var isVisibleOutput:Boolean - - switch (param.type) - { - case GPParameterTypes.STRING: - case GPParameterTypes.BOOLEAN: - case GPParameterTypes.LONG: - case GPParameterTypes.DOUBLE: - case GPParameterTypes.DATE: - case GPParameterTypes.LINEAR_UNIT: - case GPParameterTypes.RASTER_DATA_LAYER: - case GPParameterTypes.RECORD_SET: - { - isVisibleOutput = true; - break; - } - default: - { - isVisibleOutput = false; - } - } - - return isVisibleOutput; - } - - public function showFeatureLayers():void - { - toggleFeatureParameterLayerVisibility(true); - } - - public function hideFeatureLayers():void - { - toggleFeatureParameterLayerVisibility(false); - } - - public function getOutputFeatureParams():Array - { - var outputFeatureParams:Array = []; - - for each (var param:IGPParameter in _outputParams) - { - if (param.type == GPParameterTypes.FEATURE_RECORD_SET_LAYER) - { - outputFeatureParams.push(param); - } - } - - return outputFeatureParams; - } - - public function getOutputFeaturesExtent():Extent - { - var featureParam:IGPFeatureParameter; - var featureGraphicProvider:ArrayCollection; - var features:Array = []; - - for each (var param:IGPParameter in _outputParams) - { - if (param.type == GPParameterTypes.FEATURE_RECORD_SET_LAYER) - { - featureParam = (param as IGPFeatureParameter); - featureGraphicProvider = featureParam.layer.graphicProvider as ArrayCollection; - features = features.concat(featureGraphicProvider.source); - } - } - - return GraphicUtil.getGraphicsExtent(features); - } - - public function graphicsLayerBelongsToFeatureParam(graphicsLayer:GraphicsLayer):Boolean - { - var graphicsLayerBelongsToFeatureParam:Boolean = false; - var featureParam:IGPFeatureParameter; - - for each (var param:IGPParameter in _outputParams) - { - if (param.type == GPParameterTypes.FEATURE_RECORD_SET_LAYER) - { - featureParam = (param as IGPFeatureParameter); - if (featureParam.layer === graphicsLayer) - { - graphicsLayerBelongsToFeatureParam = true; - break; - } - } - } - - return graphicsLayerBelongsToFeatureParam; - } - - private function toggleFeatureParameterLayerVisibility(visible:Boolean):void - { - for each (var inputParam:IGPParameter in _inputParams) - { - if (inputParam.type == GPParameterTypes.FEATURE_RECORD_SET_LAYER) - { - (inputParam as IGPFeatureParameter).layer.visible = visible; - } - } - - for each (var outputParam:IGPParameter in _outputParams) - { - if (outputParam.type == GPParameterTypes.FEATURE_RECORD_SET_LAYER) - { - (outputParam as IGPFeatureParameter).layer.visible = visible; - } - } - } - - public function clearOutputFeatures():void - { - clearFeatures(_outputParams); - } - - private function clearFeatures(params:Array):void - { - for each (var param:IGPParameter in params) - { - if (param.type == GPParameterTypes.FEATURE_RECORD_SET_LAYER) - { - (param as IGPFeatureParameter).layer.clear(); - } - } - } - - public function clearInputFeatures():void - { - clearFeatures(_inputParams); - } - - public function hasMapExtentInputParams():Boolean - { - var hasParamWithMapExtentMode:Boolean = false; - - var featureParam:IGPFeatureParameter; - for each (var param:IGPParameter in _inputParams) - { - featureParam = param as IGPFeatureParameter; - if (featureParam && featureParam.mode == FeatureLayerParameter.MAP_EXTENT_SOURCE) - { - hasParamWithMapExtentMode = true; - break; - } - } - - return hasParamWithMapExtentMode; - } - - public function updateMapExtentInputParams(extent:Extent):void - { - const extentPolygon:Polygon = extent.toPolygon(); - - var featureParam:IGPFeatureParameter; - for each (var param:IGPParameter in _inputParams) - { - featureParam = param as IGPFeatureParameter; - if (featureParam && featureParam.mode == FeatureLayerParameter.MAP_EXTENT_SOURCE) - { - featureParam.layer.clear(); - featureParam.layer.add(new Graphic(extentPolygon)); - } - } - } -} -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package widgets.Geoprocessing.supportClasses +{ + +import com.esri.ags.FeatureSet; +import com.esri.ags.Graphic; +import com.esri.ags.geometry.Extent; +import com.esri.ags.geometry.Polygon; +import com.esri.ags.layers.GraphicsLayer; +import com.esri.ags.utils.GraphicUtil; + +import flash.utils.Dictionary; + +import mx.collections.ArrayCollection; + +import widgets.Geoprocessing.parameters.BaseParamParser; +import widgets.Geoprocessing.parameters.FeatureLayerParameter; +import widgets.Geoprocessing.parameters.GPParameterTypes; +import widgets.Geoprocessing.parameters.IGPFeatureParameter; +import widgets.Geoprocessing.parameters.IGPParameter; +import widgets.Geoprocessing.parameters.InputParamParser; +import widgets.Geoprocessing.parameters.OutputParamParser; + + +public class GPParamHandler +{ + public function GPParamHandler(paramsXML:XML) + { + var inputParamParser:BaseParamParser = new InputParamParser(); + var outputParamParser:BaseParamParser = new OutputParamParser(); + _inputParams = inputParamParser.parseParameters(paramsXML.inputparams.param); + _outputParams = outputParamParser.parseParameters(paramsXML.outputparams.param); + _totalOutputFeatures = getTotalFeatures(_outputParams); + _totalInputFeatures = getTotalFeatures(_inputParams); + + if (_totalInputFeatures) + { + _needsToReprojectInputParams = hasInputSpatialReferences(); + } + } + + private function getTotalFeatures(params:Array):int + { + var total:int = 0; + var featureParam:IGPFeatureParameter; + + for each (var param:IGPParameter in params) + { + if (param.type == GPParameterTypes.FEATURE_RECORD_SET_LAYER) + { + featureParam = (param as IGPFeatureParameter); + total++; + } + } + + return total; + } + + public function getInputParamGeometryMap():Dictionary + { + var inputGeometryMap:Dictionary = new Dictionary(); + var inputFeatureSet:FeatureSet; + + for each (var inputParam:IGPParameter in _inputParams) + { + if (inputParam.type == GPParameterTypes.FEATURE_RECORD_SET_LAYER) + { + inputFeatureSet = (inputParam as IGPFeatureParameter).getRequestObjectValue() as FeatureSet; + inputGeometryMap[inputParam.name] = GraphicUtil.getGeometries(inputFeatureSet.features); + } + } + + return inputGeometryMap; + } + + private var _needsToReprojectInputParams:Boolean; + + public function get needsToReprojectInputParams():Boolean + { + return _needsToReprojectInputParams; + } + + private function hasInputSpatialReferences():Boolean + { + var atLeastOneSpatialReferenceDefined:Boolean = false; + + for each (var inputParam:IGPParameter in _inputParams) + { + if (inputParam.type == GPParameterTypes.FEATURE_RECORD_SET_LAYER) + { + if ((inputParam as IGPFeatureParameter).spatialReference) + { + atLeastOneSpatialReferenceDefined = true; + break; + } + } + } + + return atLeastOneSpatialReferenceDefined; + } + + private var _totalInputFeatures:int; + + public function get totalInputFeatures():int + { + return _totalInputFeatures; + } + + private var _totalOutputFeatures:int; + + public function get totalOutputFeatures():int + { + return _totalOutputFeatures; + } + + private var _inputParams:Array; + + public function get inputParams():Array + { + return _inputParams; + } + + private var _outputParams:Array; + + public function get outputParams():Array + { + return _outputParams; + } + + public function getVisibleInputParams():Array + { + return getVisibleParams(_inputParams); + } + + private function getVisibleParams(params:Array):Array + { + var visibleParams:Array = []; + + for each (var param:IGPParameter in params) + { + if (param.visible) + { + visibleParams.push(param); + } + } + + return visibleParams; + } + + private function getIncompleteRequiredFields(params:Array):Array + { + var incompleteRequiredFields:Array = []; + + for each (var param:IGPParameter in params) + { + if (param.required && !param.hasValidValue()) + { + incompleteRequiredFields.push(param); + } + } + + return incompleteRequiredFields; + } + + public function getIncompleteRequiredInputParams():Array + { + return getIncompleteRequiredFields(_inputParams); + } + + public function createInputRequestObject():Object + { + return createRequestObject(_inputParams); + } + + private function createRequestObject(params:Array):Object + { + var requestObject:Object = {}; + + for each (var param:IGPParameter in params) + { + requestObject[param.name] = param.getRequestObjectValue(); + } + + return requestObject; + } + + public function findInputParamByName(name:String):IGPParameter + { + return findParamByName(name, _inputParams); + } + + public function findOutputParamByName(name:String):IGPParameter + { + return findParamByName(name, _outputParams); + } + + private function findParamByName(name:String, params:Array):IGPParameter + { + var foundParam:IGPParameter; + + for each (var param:IGPParameter in params) + { + if (param.name == name) + { + foundParam = param; + break; + } + } + + return foundParam; + } + + public function hasVisibleOutput():Boolean + { + var hasVisibleOutputParam:Boolean = false; + + if (outputParams) + { + for each (var param:IGPParameter in outputParams) + { + if (isVisibleOutputType(param)) + { + hasVisibleOutputParam = true; + break; + } + } + } + + return hasVisibleOutputParam; + } + + private function isVisibleOutputType(param:IGPParameter):Boolean + { + var isVisibleOutput:Boolean + + switch (param.type) + { + case GPParameterTypes.STRING: + case GPParameterTypes.BOOLEAN: + case GPParameterTypes.LONG: + case GPParameterTypes.DOUBLE: + case GPParameterTypes.DATE: + case GPParameterTypes.LINEAR_UNIT: + case GPParameterTypes.RASTER_DATA_LAYER: + case GPParameterTypes.RECORD_SET: + { + isVisibleOutput = true; + break; + } + default: + { + isVisibleOutput = false; + } + } + + return isVisibleOutput; + } + + public function showFeatureLayers():void + { + toggleFeatureParameterLayerVisibility(true); + } + + public function hideFeatureLayers():void + { + toggleFeatureParameterLayerVisibility(false); + } + + public function getOutputFeatureParams():Array + { + var outputFeatureParams:Array = []; + + for each (var param:IGPParameter in _outputParams) + { + if (param.type == GPParameterTypes.FEATURE_RECORD_SET_LAYER) + { + outputFeatureParams.push(param); + } + } + + return outputFeatureParams; + } + + public function getOutputFeaturesExtent():Extent + { + var featureParam:IGPFeatureParameter; + var featureGraphicProvider:ArrayCollection; + var features:Array = []; + + for each (var param:IGPParameter in _outputParams) + { + if (param.type == GPParameterTypes.FEATURE_RECORD_SET_LAYER) + { + featureParam = (param as IGPFeatureParameter); + featureGraphicProvider = featureParam.layer.graphicProvider as ArrayCollection; + features = features.concat(featureGraphicProvider.source); + } + } + + return GraphicUtil.getGraphicsExtent(features); + } + + public function graphicsLayerBelongsToFeatureParam(graphicsLayer:GraphicsLayer):Boolean + { + var graphicsLayerBelongsToFeatureParam:Boolean = false; + var featureParam:IGPFeatureParameter; + + for each (var param:IGPParameter in _outputParams) + { + if (param.type == GPParameterTypes.FEATURE_RECORD_SET_LAYER) + { + featureParam = (param as IGPFeatureParameter); + if (featureParam.layer === graphicsLayer) + { + graphicsLayerBelongsToFeatureParam = true; + break; + } + } + } + + return graphicsLayerBelongsToFeatureParam; + } + + private function toggleFeatureParameterLayerVisibility(visible:Boolean):void + { + for each (var inputParam:IGPParameter in _inputParams) + { + if (inputParam.type == GPParameterTypes.FEATURE_RECORD_SET_LAYER) + { + (inputParam as IGPFeatureParameter).layer.visible = visible; + } + } + + for each (var outputParam:IGPParameter in _outputParams) + { + if (outputParam.type == GPParameterTypes.FEATURE_RECORD_SET_LAYER) + { + (outputParam as IGPFeatureParameter).layer.visible = visible; + } + } + } + + public function clearOutputFeatures():void + { + clearFeatures(_outputParams); + } + + private function clearFeatures(params:Array):void + { + for each (var param:IGPParameter in params) + { + if (param.type == GPParameterTypes.FEATURE_RECORD_SET_LAYER) + { + (param as IGPFeatureParameter).layer.clear(); + } + } + } + + public function clearInputFeatures():void + { + clearFeatures(_inputParams); + } + + public function hasMapExtentInputParams():Boolean + { + var hasParamWithMapExtentMode:Boolean = false; + + var featureParam:IGPFeatureParameter; + for each (var param:IGPParameter in _inputParams) + { + featureParam = param as IGPFeatureParameter; + if (featureParam && featureParam.mode == FeatureLayerParameter.MAP_EXTENT_SOURCE) + { + hasParamWithMapExtentMode = true; + break; + } + } + + return hasParamWithMapExtentMode; + } + + public function updateMapExtentInputParams(extent:Extent):void + { + const extentPolygon:Polygon = extent.toPolygon(); + + var featureParam:IGPFeatureParameter; + for each (var param:IGPParameter in _inputParams) + { + featureParam = param as IGPFeatureParameter; + if (featureParam && featureParam.mode == FeatureLayerParameter.MAP_EXTENT_SOURCE) + { + featureParam.layer.clear(); + featureParam.layer.add(new Graphic(extentPolygon)); + } + } + } +} +} diff --git a/src/widgets/Geoprocessing/supportClasses/GraphicEditor.as b/src/widgets/Geoprocessing/supportClasses/GraphicEditor.as index 91a78f2..ded46a5 100644 --- a/src/widgets/Geoprocessing/supportClasses/GraphicEditor.as +++ b/src/widgets/Geoprocessing/supportClasses/GraphicEditor.as @@ -1,244 +1,244 @@ -package widgets.Geoprocessing.supportClasses -{ - -import com.esri.ags.Graphic; -import com.esri.ags.Map; -import com.esri.ags.events.EditEvent; -import com.esri.ags.geometry.Extent; -import com.esri.ags.geometry.Polygon; -import com.esri.ags.geometry.Polyline; -import com.esri.ags.tasks.GeometryServiceSingleton; -import com.esri.ags.tools.EditTool; -import com.esri.ags.utils.GeometryUtil; - -import flash.events.EventDispatcher; -import flash.events.MouseEvent; - -import mx.rpc.AsyncResponder; -import mx.rpc.Fault; -import mx.rpc.events.FaultEvent; - -public class GraphicEditor extends EventDispatcher -{ - private var graphicToEdit:Graphic; - private var lastActiveEditType:String; - private var isEditing:Boolean; - private var map:Map; - private var editTool:EditTool; - - public function GraphicEditor(map:Map) - { - this.map = map; - editTool = new EditTool(map); - addEditToolEventListeners(); - } - - public function makeGraphicEditable(graphic:Graphic):void - { - graphic.addEventListener(MouseEvent.CLICK, graphic_clickHandler, false, 0, true); - } - - private function graphic_clickHandler(event:MouseEvent):void - { - if (graphicToEdit !== Graphic(event.currentTarget)) - { - graphicToEdit = Graphic(event.currentTarget); - lastActiveEditType = "none"; // make sure move and edit vertices is the 1st mode - } - if (graphicToEdit.geometry is Polyline || graphicToEdit.geometry is Polygon) - { - if (lastActiveEditType == "none") - { - isEditing = true; - lastActiveEditType = "moveEditVertices"; - editTool.activate(EditTool.MOVE | EditTool.EDIT_VERTICES, [ graphicToEdit ]); - } - else if (lastActiveEditType == "moveEditVertices") - { - isEditing = true; - lastActiveEditType = "moveRotateScale"; - editTool.activate(EditTool.MOVE | EditTool.SCALE | EditTool.ROTATE, [ graphicToEdit ]); - } - else if (lastActiveEditType == "moveRotateScale") - { - isEditing = false; - graphicToEdit = null; - lastActiveEditType = "none"; - editTool.deactivate(); - } - } - else if (graphicToEdit.geometry is Extent) - { - if (lastActiveEditType == "none") - { - isEditing = true; - lastActiveEditType = "moveScale"; - editTool.activate(EditTool.MOVE | EditTool.SCALE, [ graphicToEdit ]); - } - else - { - isEditing = false; - graphicToEdit = null; - lastActiveEditType = "none"; - editTool.deactivate(); - } - } - else - { - if (lastActiveEditType == "none") - { - isEditing = true; - lastActiveEditType = "moveEditVertices"; - editTool.activate(EditTool.EDIT_VERTICES | EditTool.MOVE, [ graphicToEdit ]); - } - else - { - isEditing = false; - graphicToEdit = null; - lastActiveEditType = "none"; - editTool.deactivate(); - } - } - - removeEditToolEventListeners(); - map.removeEventListener(MouseEvent.MOUSE_DOWN, map_mouseDownHandler); - - if (graphicToEdit) - { - addEditToolEventListeners(); - map.addEventListener(MouseEvent.MOUSE_DOWN, map_mouseDownHandler); - } - } - - private function removeEditToolEventListeners():void - { - editTool.removeEventListener(EditEvent.VERTEX_ADD, editTool_vertexAddDeleteHandler); - editTool.removeEventListener(EditEvent.VERTEX_DELETE, editTool_vertexAddDeleteHandler); - editTool.removeEventListener(EditEvent.VERTEX_MOVE_STOP, editTool_vertexMoveStopHandler); - - editTool.removeEventListener(EditEvent.GRAPHICS_MOVE_STOP, editTool_graphicsMoveStopHandler); - editTool.removeEventListener(EditEvent.GRAPHIC_ROTATE_STOP, editTool_graphicRotateStopHandler); - editTool.removeEventListener(EditEvent.GRAPHIC_SCALE_STOP, editTool_graphicScaleStopHandler); - } - - private function editTool_vertexAddDeleteHandler(event:EditEvent):void - { - if (map.wrapAround180) - { - normalizeGraphicGeometry(event.graphic); - } - } - - private function normalizeGraphicGeometry(graphic:Graphic):void - { - // normalize - GeometryUtil.normalizeCentralMeridian([ graphic.geometry ], GeometryServiceSingleton.instance, new AsyncResponder(getNormalizedGeometryFunction, faultFunction)); - function getNormalizedGeometryFunction(item:Object, token:Object = null):void - { - var normalizedGeometries:Array = item as Array; - graphic.geometry = normalizedGeometries[0]; - isEditing = true; - if (graphic.geometry is Polyline || graphic.geometry is Polygon) - { - if (lastActiveEditType == "moveEditVertices") - { - editTool.activate(EditTool.MOVE | EditTool.EDIT_VERTICES, [ graphic ]); - } - else if (lastActiveEditType == "moveRotateScale") - { - editTool.activate(EditTool.MOVE | EditTool.SCALE | EditTool.ROTATE, [ graphic ]); - } - } - else if (graphic.geometry is Extent) - { - if (lastActiveEditType == "moveScale") - { - editTool.activate(EditTool.MOVE | EditTool.SCALE, [ graphic ]); - } - } - else - { - if (lastActiveEditType == "moveEditVertices") - { - editTool.activate(EditTool.EDIT_VERTICES | EditTool.MOVE, [ graphic ]); - } - } - } - function faultFunction(fault:Fault, token:Object = null):void - { - dispatchEvent(new FaultEvent(FaultEvent.FAULT, false, false, fault)); - } - } - - private function editTool_vertexMoveStopHandler(event:EditEvent):void - { - if (map.wrapAround180) - { - normalizeGraphicGeometry(event.graphic); - } - } - - private function editTool_graphicsMoveStopHandler(event:EditEvent):void - { - if (map.wrapAround180) - { - normalizeGraphicGeometry(event.graphics[0]); - } - } - - private function editTool_graphicRotateStopHandler(event:EditEvent):void - { - if (map.wrapAround180) - { - normalizeGraphicGeometry(event.graphic); - } - } - - private function editTool_graphicScaleStopHandler(event:EditEvent):void - { - if (map.wrapAround180) - { - normalizeGraphicGeometry(event.graphic); - } - } - - private function map_mouseDownHandler(event:MouseEvent):void - { - map.removeEventListener(MouseEvent.MOUSE_DOWN, map_mouseDownHandler); - map.addEventListener(MouseEvent.MOUSE_UP, map_mouseUpHandler); - map.addEventListener(MouseEvent.MOUSE_MOVE, map_mouseMoveHandler); - } - - private function map_mouseUpHandler(event:MouseEvent):void - { - if (event.target !== graphicToEdit) - { - map.removeEventListener(MouseEvent.MOUSE_UP, map_mouseUpHandler); - map.removeEventListener(MouseEvent.MOUSE_MOVE, map_mouseMoveHandler); - - isEditing = false; - graphicToEdit = null; - lastActiveEditType = "none"; - editTool.deactivate(); - } - } - - private function map_mouseMoveHandler(event:MouseEvent):void - { - map.addEventListener(MouseEvent.MOUSE_DOWN, map_mouseDownHandler); - map.removeEventListener(MouseEvent.MOUSE_UP, map_mouseUpHandler); - map.removeEventListener(MouseEvent.MOUSE_MOVE, map_mouseMoveHandler); - } - - private function addEditToolEventListeners():void - { - editTool.addEventListener(EditEvent.VERTEX_ADD, editTool_vertexAddDeleteHandler); - editTool.addEventListener(EditEvent.VERTEX_DELETE, editTool_vertexAddDeleteHandler); - editTool.addEventListener(EditEvent.VERTEX_MOVE_STOP, editTool_vertexMoveStopHandler); - - editTool.addEventListener(EditEvent.GRAPHICS_MOVE_STOP, editTool_graphicsMoveStopHandler); - editTool.addEventListener(EditEvent.GRAPHIC_ROTATE_STOP, editTool_graphicRotateStopHandler); - editTool.addEventListener(EditEvent.GRAPHIC_SCALE_STOP, editTool_graphicScaleStopHandler); - } -} -} +package widgets.Geoprocessing.supportClasses +{ + +import com.esri.ags.Graphic; +import com.esri.ags.Map; +import com.esri.ags.events.EditEvent; +import com.esri.ags.geometry.Extent; +import com.esri.ags.geometry.Polygon; +import com.esri.ags.geometry.Polyline; +import com.esri.ags.tasks.GeometryServiceSingleton; +import com.esri.ags.tools.EditTool; +import com.esri.ags.utils.GeometryUtil; + +import flash.events.EventDispatcher; +import flash.events.MouseEvent; + +import mx.rpc.AsyncResponder; +import mx.rpc.Fault; +import mx.rpc.events.FaultEvent; + +public class GraphicEditor extends EventDispatcher +{ + private var graphicToEdit:Graphic; + private var lastActiveEditType:String; + private var isEditing:Boolean; + private var map:Map; + private var editTool:EditTool; + + public function GraphicEditor(map:Map) + { + this.map = map; + editTool = new EditTool(map); + addEditToolEventListeners(); + } + + public function makeGraphicEditable(graphic:Graphic):void + { + graphic.addEventListener(MouseEvent.CLICK, graphic_clickHandler, false, 0, true); + } + + private function graphic_clickHandler(event:MouseEvent):void + { + if (graphicToEdit !== Graphic(event.currentTarget)) + { + graphicToEdit = Graphic(event.currentTarget); + lastActiveEditType = "none"; // make sure move and edit vertices is the 1st mode + } + if (graphicToEdit.geometry is Polyline || graphicToEdit.geometry is Polygon) + { + if (lastActiveEditType == "none") + { + isEditing = true; + lastActiveEditType = "moveEditVertices"; + editTool.activate(EditTool.MOVE | EditTool.EDIT_VERTICES, [ graphicToEdit ]); + } + else if (lastActiveEditType == "moveEditVertices") + { + isEditing = true; + lastActiveEditType = "moveRotateScale"; + editTool.activate(EditTool.MOVE | EditTool.SCALE | EditTool.ROTATE, [ graphicToEdit ]); + } + else if (lastActiveEditType == "moveRotateScale") + { + isEditing = false; + graphicToEdit = null; + lastActiveEditType = "none"; + editTool.deactivate(); + } + } + else if (graphicToEdit.geometry is Extent) + { + if (lastActiveEditType == "none") + { + isEditing = true; + lastActiveEditType = "moveScale"; + editTool.activate(EditTool.MOVE | EditTool.SCALE, [ graphicToEdit ]); + } + else + { + isEditing = false; + graphicToEdit = null; + lastActiveEditType = "none"; + editTool.deactivate(); + } + } + else + { + if (lastActiveEditType == "none") + { + isEditing = true; + lastActiveEditType = "moveEditVertices"; + editTool.activate(EditTool.EDIT_VERTICES | EditTool.MOVE, [ graphicToEdit ]); + } + else + { + isEditing = false; + graphicToEdit = null; + lastActiveEditType = "none"; + editTool.deactivate(); + } + } + + removeEditToolEventListeners(); + map.removeEventListener(MouseEvent.MOUSE_DOWN, map_mouseDownHandler); + + if (graphicToEdit) + { + addEditToolEventListeners(); + map.addEventListener(MouseEvent.MOUSE_DOWN, map_mouseDownHandler); + } + } + + private function removeEditToolEventListeners():void + { + editTool.removeEventListener(EditEvent.VERTEX_ADD, editTool_vertexAddDeleteHandler); + editTool.removeEventListener(EditEvent.VERTEX_DELETE, editTool_vertexAddDeleteHandler); + editTool.removeEventListener(EditEvent.VERTEX_MOVE_STOP, editTool_vertexMoveStopHandler); + + editTool.removeEventListener(EditEvent.GRAPHICS_MOVE_STOP, editTool_graphicsMoveStopHandler); + editTool.removeEventListener(EditEvent.GRAPHIC_ROTATE_STOP, editTool_graphicRotateStopHandler); + editTool.removeEventListener(EditEvent.GRAPHIC_SCALE_STOP, editTool_graphicScaleStopHandler); + } + + private function editTool_vertexAddDeleteHandler(event:EditEvent):void + { + if (map.wrapAround180) + { + normalizeGraphicGeometry(event.graphic); + } + } + + private function normalizeGraphicGeometry(graphic:Graphic):void + { + // normalize + GeometryUtil.normalizeCentralMeridian([ graphic.geometry ], GeometryServiceSingleton.instance, new AsyncResponder(getNormalizedGeometryFunction, faultFunction)); + function getNormalizedGeometryFunction(item:Object, token:Object = null):void + { + var normalizedGeometries:Array = item as Array; + graphic.geometry = normalizedGeometries[0]; + isEditing = true; + if (graphic.geometry is Polyline || graphic.geometry is Polygon) + { + if (lastActiveEditType == "moveEditVertices") + { + editTool.activate(EditTool.MOVE | EditTool.EDIT_VERTICES, [ graphic ]); + } + else if (lastActiveEditType == "moveRotateScale") + { + editTool.activate(EditTool.MOVE | EditTool.SCALE | EditTool.ROTATE, [ graphic ]); + } + } + else if (graphic.geometry is Extent) + { + if (lastActiveEditType == "moveScale") + { + editTool.activate(EditTool.MOVE | EditTool.SCALE, [ graphic ]); + } + } + else + { + if (lastActiveEditType == "moveEditVertices") + { + editTool.activate(EditTool.EDIT_VERTICES | EditTool.MOVE, [ graphic ]); + } + } + } + function faultFunction(fault:Fault, token:Object = null):void + { + dispatchEvent(new FaultEvent(FaultEvent.FAULT, false, false, fault)); + } + } + + private function editTool_vertexMoveStopHandler(event:EditEvent):void + { + if (map.wrapAround180) + { + normalizeGraphicGeometry(event.graphic); + } + } + + private function editTool_graphicsMoveStopHandler(event:EditEvent):void + { + if (map.wrapAround180) + { + normalizeGraphicGeometry(event.graphics[0]); + } + } + + private function editTool_graphicRotateStopHandler(event:EditEvent):void + { + if (map.wrapAround180) + { + normalizeGraphicGeometry(event.graphic); + } + } + + private function editTool_graphicScaleStopHandler(event:EditEvent):void + { + if (map.wrapAround180) + { + normalizeGraphicGeometry(event.graphic); + } + } + + private function map_mouseDownHandler(event:MouseEvent):void + { + map.removeEventListener(MouseEvent.MOUSE_DOWN, map_mouseDownHandler); + map.addEventListener(MouseEvent.MOUSE_UP, map_mouseUpHandler); + map.addEventListener(MouseEvent.MOUSE_MOVE, map_mouseMoveHandler); + } + + private function map_mouseUpHandler(event:MouseEvent):void + { + if (event.target !== graphicToEdit) + { + map.removeEventListener(MouseEvent.MOUSE_UP, map_mouseUpHandler); + map.removeEventListener(MouseEvent.MOUSE_MOVE, map_mouseMoveHandler); + + isEditing = false; + graphicToEdit = null; + lastActiveEditType = "none"; + editTool.deactivate(); + } + } + + private function map_mouseMoveHandler(event:MouseEvent):void + { + map.addEventListener(MouseEvent.MOUSE_DOWN, map_mouseDownHandler); + map.removeEventListener(MouseEvent.MOUSE_UP, map_mouseUpHandler); + map.removeEventListener(MouseEvent.MOUSE_MOVE, map_mouseMoveHandler); + } + + private function addEditToolEventListeners():void + { + editTool.addEventListener(EditEvent.VERTEX_ADD, editTool_vertexAddDeleteHandler); + editTool.addEventListener(EditEvent.VERTEX_DELETE, editTool_vertexAddDeleteHandler); + editTool.addEventListener(EditEvent.VERTEX_MOVE_STOP, editTool_vertexMoveStopHandler); + + editTool.addEventListener(EditEvent.GRAPHICS_MOVE_STOP, editTool_graphicsMoveStopHandler); + editTool.addEventListener(EditEvent.GRAPHIC_ROTATE_STOP, editTool_graphicRotateStopHandler); + editTool.addEventListener(EditEvent.GRAPHIC_SCALE_STOP, editTool_graphicScaleStopHandler); + } +} +} diff --git a/src/widgets/Geoprocessing/supportClasses/InputParamDataGroup.mxml b/src/widgets/Geoprocessing/supportClasses/InputParamDataGroup.mxml index aed5104..f9a08bc 100644 --- a/src/widgets/Geoprocessing/supportClasses/InputParamDataGroup.mxml +++ b/src/widgets/Geoprocessing/supportClasses/InputParamDataGroup.mxml @@ -1,131 +1,131 @@ - - - - - - - - - - + + + + + + + + + + diff --git a/src/widgets/Geoprocessing/supportClasses/LayerOrderer.as b/src/widgets/Geoprocessing/supportClasses/LayerOrderer.as index aad9841..a54bef5 100644 --- a/src/widgets/Geoprocessing/supportClasses/LayerOrderer.as +++ b/src/widgets/Geoprocessing/supportClasses/LayerOrderer.as @@ -1,64 +1,64 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package widgets.Geoprocessing.supportClasses -{ - -import com.esri.ags.Map; - -import mx.collections.ArrayCollection; - -public class LayerOrderer -{ - private var _map:Map; - - public function get map():Map - { - return _map; - } - - public function set map(value:Map):void - { - _map = value; - } - - private var _layerOrder:Array; - - public function get layerOrder():Array - { - return _layerOrder; - } - - public function set layerOrder(value:Array):void - { - _layerOrder = value; - } - - //NOTE: reorders layers from topmost layer - public function orderLayers():void - { - if (layerOrder && map) - { - var totalLayersToOrder:int = layerOrder.length; - var totalLayersOnMap:int = (map.layers as ArrayCollection).length - 1; - for (var i:int = 0; i < totalLayersToOrder; i++) - { - map.reorderLayer(layerOrder[i], totalLayersOnMap - i); - } - } - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package widgets.Geoprocessing.supportClasses +{ + +import com.esri.ags.Map; + +import mx.collections.ArrayCollection; + +public class LayerOrderer +{ + private var _map:Map; + + public function get map():Map + { + return _map; + } + + public function set map(value:Map):void + { + _map = value; + } + + private var _layerOrder:Array; + + public function get layerOrder():Array + { + return _layerOrder; + } + + public function set layerOrder(value:Array):void + { + _layerOrder = value; + } + + //NOTE: reorders layers from topmost layer + public function orderLayers():void + { + if (layerOrder && map) + { + var totalLayersToOrder:int = layerOrder.length; + var totalLayersOnMap:int = (map.layers as ArrayCollection).length - 1; + for (var i:int = 0; i < totalLayersToOrder; i++) + { + map.reorderLayer(layerOrder[i], totalLayersOnMap - i); + } + } + } +} + +} diff --git a/src/widgets/Geoprocessing/supportClasses/OutputParamDataGroup.mxml b/src/widgets/Geoprocessing/supportClasses/OutputParamDataGroup.mxml index fb18c9f..c4d1430 100644 --- a/src/widgets/Geoprocessing/supportClasses/OutputParamDataGroup.mxml +++ b/src/widgets/Geoprocessing/supportClasses/OutputParamDataGroup.mxml @@ -1,70 +1,70 @@ - - - - - - - - - - + + + + + + + + + + diff --git a/src/widgets/Geoprocessing/supportClasses/UnitMappingUtil.as b/src/widgets/Geoprocessing/supportClasses/UnitMappingUtil.as index b239d28..b9c389e 100644 --- a/src/widgets/Geoprocessing/supportClasses/UnitMappingUtil.as +++ b/src/widgets/Geoprocessing/supportClasses/UnitMappingUtil.as @@ -1,96 +1,96 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package widgets.Geoprocessing.supportClasses -{ - -import com.esri.ags.Units; - -public final class UnitMappingUtil -{ - public static function toPrettyUnits(units:String):String - { - var prettyUnits:String; - - switch (units) - { - case Units.FEET: - { - prettyUnits = "Feet"; - break; - } - case Units.MILES: - { - prettyUnits = "Miles"; - break; - } - case Units.NAUTICAL_MILES: - { - prettyUnits = "Nautical Miles"; - break; - } - case Units.METERS: - { - prettyUnits = "Meters"; - break; - } - case Units.KILOMETERS: - { - prettyUnits = "Kilometers"; - break; - } - } - - return prettyUnits; - } - - public static function toEsriUnits(units:String):String - { - var esriUnits:String; - - switch (units) - { - case "Feet": - { - esriUnits = Units.FEET; - break; - } - case "Miles": - { - esriUnits = Units.MILES; - break; - } - case "Nautical Miles": - { - esriUnits = Units.NAUTICAL_MILES; - break; - } - case "Meters": - { - esriUnits = Units.METERS; - break; - } - case "Kilometers": - { - esriUnits = Units.KILOMETERS; - break; - } - } - - return esriUnits; - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package widgets.Geoprocessing.supportClasses +{ + +import com.esri.ags.Units; + +public final class UnitMappingUtil +{ + public static function toPrettyUnits(units:String):String + { + var prettyUnits:String; + + switch (units) + { + case Units.FEET: + { + prettyUnits = "Feet"; + break; + } + case Units.MILES: + { + prettyUnits = "Miles"; + break; + } + case Units.NAUTICAL_MILES: + { + prettyUnits = "Nautical Miles"; + break; + } + case Units.METERS: + { + prettyUnits = "Meters"; + break; + } + case Units.KILOMETERS: + { + prettyUnits = "Kilometers"; + break; + } + } + + return prettyUnits; + } + + public static function toEsriUnits(units:String):String + { + var esriUnits:String; + + switch (units) + { + case "Feet": + { + esriUnits = Units.FEET; + break; + } + case "Miles": + { + esriUnits = Units.MILES; + break; + } + case "Nautical Miles": + { + esriUnits = Units.NAUTICAL_MILES; + break; + } + case "Meters": + { + esriUnits = Units.METERS; + break; + } + case "Kilometers": + { + esriUnits = Units.KILOMETERS; + break; + } + } + + return esriUnits; + } +} + +} diff --git a/src/widgets/Geoprocessing/supportClasses/VisibleGraphicsLayersWatcher.as b/src/widgets/Geoprocessing/supportClasses/VisibleGraphicsLayersWatcher.as index e6cd045..5b7daef 100644 --- a/src/widgets/Geoprocessing/supportClasses/VisibleGraphicsLayersWatcher.as +++ b/src/widgets/Geoprocessing/supportClasses/VisibleGraphicsLayersWatcher.as @@ -1,182 +1,182 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package widgets.Geoprocessing.supportClasses -{ - -import com.esri.ags.Map; -import com.esri.ags.events.LayerEvent; -import com.esri.ags.events.MapEvent; -import com.esri.ags.layers.GraphicsLayer; -import com.esri.ags.layers.Layer; - -import flash.events.EventDispatcher; - -import mx.collections.ArrayCollection; -import mx.collections.ArrayList; -import mx.events.FlexEvent; - -public class VisibleGraphicsLayersWatcher extends EventDispatcher -{ - private var isWatching:Boolean; - private var mapLayers:ArrayCollection; - - [Bindable] - private var _visibleGraphicsLayers:ArrayList; - - public function get visibleGraphicsLayers():ArrayList - { - return _visibleGraphicsLayers ||= new ArrayList(); - } - - private var _map:Map - - public function get map():Map - { - return _map; - } - - public function set map(value:Map):void - { - if (value !== _map) - { - _map = value; - mapLayers = _map.layers as ArrayCollection; - } - } - - public function startWatching():void - { - if (!isWatching && _map) - { - isWatching = true; - - addMapEventListeners(); - addMapGraphicsLayersListeners(); - updateVisibleGraphicsLayersFromMap(); - } - } - - private function addMapEventListeners():void - { - map.addEventListener(MapEvent.LAYER_ADD, map_layerAddHandler, false, 0, true); - map.addEventListener(MapEvent.LAYER_REMOVE, map_layerRemoveHandler, false, 0, true); - map.addEventListener(MapEvent.LAYER_REMOVE_ALL, map_layerRemoveAllHandler, false, 0, true); - } - - private function map_layerAddHandler(event:MapEvent):void - { - removeMapGraphicsLayersListeners(); - addMapGraphicsLayersListeners(); - updateVisibleGraphicsLayersFromMap(); - } - - private function removeMapGraphicsLayersListeners():void - { - var graphicsLayer:GraphicsLayer; - - for each (var layer:Layer in mapLayers) - { - graphicsLayer = layer as GraphicsLayer; - if (graphicsLayer) - { - graphicsLayer.removeEventListener(FlexEvent.SHOW, graphicsLayer_showHandler); - graphicsLayer.removeEventListener(FlexEvent.HIDE, graphicsLayer_hideHandler); - graphicsLayer.removeEventListener(LayerEvent.IS_IN_SCALE_RANGE_CHANGE, graphicsLayer_isInScaleRangeChangeHandler); - } - } - } - - private function graphicsLayer_showHandler(event:FlexEvent):void - { - updateVisibleGraphicsLayersFromMap(); - } - - private function graphicsLayer_hideHandler(event:FlexEvent):void - { - updateVisibleGraphicsLayersFromMap(); - } - - private function graphicsLayer_isInScaleRangeChangeHandler(event:LayerEvent):void - { - updateVisibleGraphicsLayersFromMap(); - } - - private function updateVisibleGraphicsLayersFromMap():void - { - var visibleGraphicsLayersSource:Array = []; - var graphicsLayer:GraphicsLayer; - - for each (var layer:Layer in mapLayers) - { - graphicsLayer = layer as GraphicsLayer; - if (graphicsLayer && graphicsLayer.visible) - { - visibleGraphicsLayersSource.push(graphicsLayer); - } - } - - visibleGraphicsLayers.source = visibleGraphicsLayersSource; - } - - private function map_layerRemoveHandler(event:MapEvent):void - { - removeMapGraphicsLayersListeners(); - addMapGraphicsLayersListeners(); - updateVisibleGraphicsLayersFromMap(); - } - - private function map_layerRemoveAllHandler(event:MapEvent):void - { - removeMapGraphicsLayersListeners(); - addMapGraphicsLayersListeners(); - updateVisibleGraphicsLayersFromMap(); - } - - private function addMapGraphicsLayersListeners():void - { - var graphicsLayer:GraphicsLayer; - - for each (var layer:Layer in mapLayers) - { - graphicsLayer = layer as GraphicsLayer; - if (graphicsLayer) - { - graphicsLayer.addEventListener(FlexEvent.SHOW, graphicsLayer_showHandler, false, 0, true); - graphicsLayer.addEventListener(FlexEvent.HIDE, graphicsLayer_hideHandler, false, 0, true); - graphicsLayer.addEventListener(LayerEvent.IS_IN_SCALE_RANGE_CHANGE, graphicsLayer_isInScaleRangeChangeHandler, false, 0, true); - } - } - } - - public function stopWatching():void - { - if (isWatching && _map) - { - isWatching = false; - - removeMapEventListeners(); - removeMapGraphicsLayersListeners(); - } - } - - private function removeMapEventListeners():void - { - map.removeEventListener(MapEvent.LAYER_ADD, map_layerAddHandler); - map.removeEventListener(MapEvent.LAYER_REMOVE, map_layerRemoveHandler); - map.removeEventListener(MapEvent.LAYER_REMOVE_ALL, map_layerRemoveAllHandler); - } -} -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package widgets.Geoprocessing.supportClasses +{ + +import com.esri.ags.Map; +import com.esri.ags.events.LayerEvent; +import com.esri.ags.events.MapEvent; +import com.esri.ags.layers.GraphicsLayer; +import com.esri.ags.layers.Layer; + +import flash.events.EventDispatcher; + +import mx.collections.ArrayCollection; +import mx.collections.ArrayList; +import mx.events.FlexEvent; + +public class VisibleGraphicsLayersWatcher extends EventDispatcher +{ + private var isWatching:Boolean; + private var mapLayers:ArrayCollection; + + [Bindable] + private var _visibleGraphicsLayers:ArrayList; + + public function get visibleGraphicsLayers():ArrayList + { + return _visibleGraphicsLayers ||= new ArrayList(); + } + + private var _map:Map + + public function get map():Map + { + return _map; + } + + public function set map(value:Map):void + { + if (value !== _map) + { + _map = value; + mapLayers = _map.layers as ArrayCollection; + } + } + + public function startWatching():void + { + if (!isWatching && _map) + { + isWatching = true; + + addMapEventListeners(); + addMapGraphicsLayersListeners(); + updateVisibleGraphicsLayersFromMap(); + } + } + + private function addMapEventListeners():void + { + map.addEventListener(MapEvent.LAYER_ADD, map_layerAddHandler, false, 0, true); + map.addEventListener(MapEvent.LAYER_REMOVE, map_layerRemoveHandler, false, 0, true); + map.addEventListener(MapEvent.LAYER_REMOVE_ALL, map_layerRemoveAllHandler, false, 0, true); + } + + private function map_layerAddHandler(event:MapEvent):void + { + removeMapGraphicsLayersListeners(); + addMapGraphicsLayersListeners(); + updateVisibleGraphicsLayersFromMap(); + } + + private function removeMapGraphicsLayersListeners():void + { + var graphicsLayer:GraphicsLayer; + + for each (var layer:Layer in mapLayers) + { + graphicsLayer = layer as GraphicsLayer; + if (graphicsLayer) + { + graphicsLayer.removeEventListener(FlexEvent.SHOW, graphicsLayer_showHandler); + graphicsLayer.removeEventListener(FlexEvent.HIDE, graphicsLayer_hideHandler); + graphicsLayer.removeEventListener(LayerEvent.IS_IN_SCALE_RANGE_CHANGE, graphicsLayer_isInScaleRangeChangeHandler); + } + } + } + + private function graphicsLayer_showHandler(event:FlexEvent):void + { + updateVisibleGraphicsLayersFromMap(); + } + + private function graphicsLayer_hideHandler(event:FlexEvent):void + { + updateVisibleGraphicsLayersFromMap(); + } + + private function graphicsLayer_isInScaleRangeChangeHandler(event:LayerEvent):void + { + updateVisibleGraphicsLayersFromMap(); + } + + private function updateVisibleGraphicsLayersFromMap():void + { + var visibleGraphicsLayersSource:Array = []; + var graphicsLayer:GraphicsLayer; + + for each (var layer:Layer in mapLayers) + { + graphicsLayer = layer as GraphicsLayer; + if (graphicsLayer && graphicsLayer.visible) + { + visibleGraphicsLayersSource.push(graphicsLayer); + } + } + + visibleGraphicsLayers.source = visibleGraphicsLayersSource; + } + + private function map_layerRemoveHandler(event:MapEvent):void + { + removeMapGraphicsLayersListeners(); + addMapGraphicsLayersListeners(); + updateVisibleGraphicsLayersFromMap(); + } + + private function map_layerRemoveAllHandler(event:MapEvent):void + { + removeMapGraphicsLayersListeners(); + addMapGraphicsLayersListeners(); + updateVisibleGraphicsLayersFromMap(); + } + + private function addMapGraphicsLayersListeners():void + { + var graphicsLayer:GraphicsLayer; + + for each (var layer:Layer in mapLayers) + { + graphicsLayer = layer as GraphicsLayer; + if (graphicsLayer) + { + graphicsLayer.addEventListener(FlexEvent.SHOW, graphicsLayer_showHandler, false, 0, true); + graphicsLayer.addEventListener(FlexEvent.HIDE, graphicsLayer_hideHandler, false, 0, true); + graphicsLayer.addEventListener(LayerEvent.IS_IN_SCALE_RANGE_CHANGE, graphicsLayer_isInScaleRangeChangeHandler, false, 0, true); + } + } + } + + public function stopWatching():void + { + if (isWatching && _map) + { + isWatching = false; + + removeMapEventListeners(); + removeMapGraphicsLayersListeners(); + } + } + + private function removeMapEventListeners():void + { + map.removeEventListener(MapEvent.LAYER_ADD, map_layerAddHandler); + map.removeEventListener(MapEvent.LAYER_REMOVE, map_layerRemoveHandler); + map.removeEventListener(MapEvent.LAYER_REMOVE_ALL, map_layerRemoveAllHandler); + } +} +} diff --git a/src/widgets/HeaderController/GroupWidgetItemDataGroupRenderer.mxml b/src/widgets/HeaderController/GroupWidgetItemDataGroupRenderer.mxml index 61c7e49..8d45075 100644 --- a/src/widgets/HeaderController/GroupWidgetItemDataGroupRenderer.mxml +++ b/src/widgets/HeaderController/GroupWidgetItemDataGroupRenderer.mxml @@ -1,139 +1,139 @@ - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/widgets/HeaderController/HeaderControllerWidget.mxml b/src/widgets/HeaderController/HeaderControllerWidget.mxml index c2ddd35..2a88653 100644 --- a/src/widgets/HeaderController/HeaderControllerWidget.mxml +++ b/src/widgets/HeaderController/HeaderControllerWidget.mxml @@ -1,555 +1,555 @@ - - - - - - 1) - { - const tileLayout:TileLayout = new TileLayout(); - tileLayout.verticalGap = 4; - tileLayout.horizontalGap = 10; - tileLayout.requestedRowCount = 2; - tileLayout.orientation = TileOrientation.COLUMNS; - tileLayout.verticalAlign = VerticalAlign.MIDDLE; - tileLayout.horizontalAlign = HorizontalAlign.LEFT; - - linkGroup.layout = tileLayout; - } - - linkGroup.visible = true; - linkGroup.includeInLayout = true; - } - - private function aboutXMLToLinkXML(aboutXML:XML):Link - { - var aboutLink:Link; - - if (configXML.about.visible[0] != "false") - { - aboutLink = new Link(); - aboutLink.content = configXML.about.content || ""; - aboutLink.label = configXML.labels.abouttext[0] || configXML.about.label[0] || getDefaultString("aboutLabel"); - aboutLink.contentCloseLabel = configXML.labels.btnlabel[0] || configXML.about.btnlabel[0] || getDefaultString("okLabel"); - aboutLink.contentWidth = configXML.about.width || 300; - aboutLink.contentHeight = configXML.about.height || 300; - } - - return aboutLink; - } - - private function createLinkFromXML(linkXML:XML):Link - { - var link:Link; - - const isValidLinkXML:Boolean = linkXML.@url[0] || linkXML.content[0]; - if (isValidLinkXML) - { - link = new Link(); - link.url = linkXML.@url[0]; - link.content = linkXML.content[0]; - link.label = linkXML.@label[0] || getDefaultString("aboutLabel"); - link.contentHeight = linkXML.content.@height[0] || 300; - link.contentWidth = linkXML.content.@width[0] || 300; - link.contentCloseLabel = linkXML.content.@closelabel[0] || getDefaultString("okLabel"); - } - - return link; - } - - private function getWidgetItems(widgetList:Array):ArrayCollection - { - var menuItems:ArrayCollection = new ArrayCollection(); - var widgetItem:WidgetItem; - for (var i:int = 0; i < widgetList.length; ) - { - const isPartOfPanel:Boolean = widgetList[i].isPartOfPanel && widgetList[i].isPartOfPanel == true; - if (!isPartOfPanel) - { - if (widgetList[i].grouped) - { - // grouped - var widgetArray:Array = []; - var length:Number = widgetList[i].groupLength; - for (var k:int = 0; k < length; k++) - { - widgetArray.push({ widget: widgetList[i + k], open: (widgetList[i].preload && (widgetList[i].preload == "open" || widgetList[i].preload == "minimized")) ? true : false }); - } - widgetItem = new WidgetItem(); - widgetItem.isGroup = true; - widgetItem.label = widgetList[i].groupLabel; - widgetItem.icon = widgetList[i].groupIcon; - widgetItem.widgets = widgetArray; - - menuItems.addItem(widgetItem); - - // move to the next group - i = i + length; - } - else - { - // upgrouped - widgetItem = new WidgetItem(); - widgetItem.id = widgetList[i].id; - widgetItem.label = widgetList[i].label; - widgetItem.icon = widgetList[i].icon; - widgetItem.url = widgetList[i].url; - widgetItem.open = widgetList[i].preload && (widgetList[i].preload == "open" || widgetList[i].preload == "minimized"); - - menuItems.addItem(widgetItem); - - // move to the next individual widget - i++; - } - } - else - { - i++; - } - } - - return menuItems; - } - - private function widgetItemDG_widgetItemClickHandler(event:Event):void - { - var widgetItem:WidgetItem = ItemRenderer(event.target).data as WidgetItem; - if (widgetItem.isGroup) - { - groupWidgetArrCol = new ArrayCollection(); - // check the array of widgets if they are open before hand - for each (var widgetObj:Object in widgetItem.widgets) - { - var widgetItem1:WidgetItem = new WidgetItem(); - widgetItem1.id = widgetObj.widget.id; - widgetItem1.label = widgetObj.widget.label; - widgetItem1.icon = widgetObj.widget.icon; - widgetItem1.url = widgetObj.widget.url; - widgetItem1.open = widgetObj.open; - - groupWidgetArrCol.addItem(widgetItem1); - } - menuToolTip.visible = false; - widgetList.visible = true; - widgetListDG.setFocus(); - } - else - { - AppEvent.dispatch(AppEvent.WIDGET_RUN, widgetItem.id); - } - } - - private function widgetList_widgetItemClickHandler(event:Event):void - { - var widgetItem:WidgetItem = ItemRenderer(event.target).data as WidgetItem; - AppEvent.dispatch(AppEvent.WIDGET_RUN, widgetItem.id); - } - - [Bindable] - private var xOver:int; - - private function widgetItemDG_widgetItemMouseOverHandler(event:Event):void - { - var pointGlobal:Point = ItemRenderer(event.target).localToGlobal(new Point(0, 0)); - var pointLocal:Point = headerGroup.globalToLocal(pointGlobal); // get the local coordinates where the menuItem will be shown - - xOver = pointLocal.x; - - widgetList.visible = false; - if (WidgetItem(ItemRenderer(event.target).data).label) - { - menuToolTip.visible = true; - menuTitle.text = WidgetItem(ItemRenderer(event.target).data).label; - } - } - - private function widgetItemDG_widgetItemMouseOutHandler(event:Event):void - { - menuToolTip.visible = false; - } - - private function widgetStateChangedHandler(event:AppEvent):void - { - var data:Object = event.data; - if (widgetItemArrCol.length) - { - for (var i:Number = 0; i < widgetItemArrCol.length; ) - { - if (widgetItemArrCol.getItemAt(i).isGroup) - { - // make sure to check it for the array of widgets(group) if they are open before hand - var widgetFound:Boolean; - for each (var widgetObj:Object in widgetItemArrCol.getItemAt(i).widgets) - { - if (data.id as Number == widgetObj.widget.id) - { - widgetFound = true; - widgetObj.open = (data.state as String == WidgetStates.WIDGET_OPENED) || (data.state as String == WidgetStates.WIDGET_MINIMIZED); - break; - } - } - if (widgetFound) - { - break; - } - else - { - i++; - } - } - else - { - if (data.id as Number == widgetItemArrCol.getItemAt(i).id) - { - widgetItemArrCol.getItemAt(i).open = (data.state as String == WidgetStates.WIDGET_OPENED) || (data.state as String == WidgetStates.WIDGET_MINIMIZED); - break; - } - else - { - i++; - } - } - } - // check for any grouped widgets - if (groupWidgetArrCol && groupWidgetArrCol.length > 0) - { - for (var j:Number = 0; j < groupWidgetArrCol.length; ) - { - if (data.id as Number == groupWidgetArrCol.getItemAt(j).id) - { - groupWidgetArrCol.getItemAt(j).open = (data.state as String == WidgetStates.WIDGET_OPENED) || (data.state as String == WidgetStates.WIDGET_MINIMIZED); - widgetList.visible = false; - break; - } - else - { - j++; - } - } - } - } - } - - private function widgetList_rollOutHandler(event:MouseEvent):void - { - widgetList.visible = false; - } - - private function arrangeHeadingsAndWidgets():void - { - updateSubtitleInclusion(); - - const availableHeadingWidth:Number = centerContainer.width - widgetItemDG.measuredWidth - NONSTOP_RESIZE_GAP; - const desiredHeadingsWidth:Number = Math.max(bannerTitle.getRequiredWidthToDisplayFullText(availableHeadingWidth), - bannerSubtitle.getRequiredWidthToDisplayFullText(availableHeadingWidth)); - - if (desiredHeadingsWidth >= availableHeadingWidth) - { - headingWidth = availableHeadingWidth; - widgetItemDG.percentWidth = NaN; - } - else - { - headingWidth = (desiredHeadingsWidth > MIN_HEADING_WIDTH) ? desiredHeadingsWidth : MIN_HEADING_WIDTH; - widgetItemDG.percentWidth = 100; - } - } - - private function updateSubtitleInclusion():void - { - bannerSubtitle.visible = bannerSubtitle.text != "" && bannerSubtitle.text != null; - bannerSubtitle.includeInLayout = bannerSubtitle.text != "" && bannerSubtitle.text != null; - } - ]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + 1) + { + const tileLayout:TileLayout = new TileLayout(); + tileLayout.verticalGap = 4; + tileLayout.horizontalGap = 10; + tileLayout.requestedRowCount = 2; + tileLayout.orientation = TileOrientation.COLUMNS; + tileLayout.verticalAlign = VerticalAlign.MIDDLE; + tileLayout.horizontalAlign = HorizontalAlign.LEFT; + + linkGroup.layout = tileLayout; + } + + linkGroup.visible = true; + linkGroup.includeInLayout = true; + } + + private function aboutXMLToLinkXML(aboutXML:XML):Link + { + var aboutLink:Link; + + if (configXML.about.visible[0] != "false") + { + aboutLink = new Link(); + aboutLink.content = configXML.about.content || ""; + aboutLink.label = configXML.labels.abouttext[0] || configXML.about.label[0] || getDefaultString("aboutLabel"); + aboutLink.contentCloseLabel = configXML.labels.btnlabel[0] || configXML.about.btnlabel[0] || getDefaultString("okLabel"); + aboutLink.contentWidth = configXML.about.width || 300; + aboutLink.contentHeight = configXML.about.height || 300; + } + + return aboutLink; + } + + private function createLinkFromXML(linkXML:XML):Link + { + var link:Link; + + const isValidLinkXML:Boolean = linkXML.@url[0] || linkXML.content[0]; + if (isValidLinkXML) + { + link = new Link(); + link.url = linkXML.@url[0]; + link.content = linkXML.content[0]; + link.label = linkXML.@label[0] || getDefaultString("aboutLabel"); + link.contentHeight = linkXML.content.@height[0] || 300; + link.contentWidth = linkXML.content.@width[0] || 300; + link.contentCloseLabel = linkXML.content.@closelabel[0] || getDefaultString("okLabel"); + } + + return link; + } + + private function getWidgetItems(widgetList:Array):ArrayCollection + { + var menuItems:ArrayCollection = new ArrayCollection(); + var widgetItem:WidgetItem; + for (var i:int = 0; i < widgetList.length; ) + { + const isPartOfPanel:Boolean = widgetList[i].isPartOfPanel && widgetList[i].isPartOfPanel == true; + if (!isPartOfPanel) + { + if (widgetList[i].grouped) + { + // grouped + var widgetArray:Array = []; + var length:Number = widgetList[i].groupLength; + for (var k:int = 0; k < length; k++) + { + widgetArray.push({ widget: widgetList[i + k], open: (widgetList[i].preload && (widgetList[i].preload == "open" || widgetList[i].preload == "minimized")) ? true : false }); + } + widgetItem = new WidgetItem(); + widgetItem.isGroup = true; + widgetItem.label = widgetList[i].groupLabel; + widgetItem.icon = widgetList[i].groupIcon; + widgetItem.widgets = widgetArray; + + menuItems.addItem(widgetItem); + + // move to the next group + i = i + length; + } + else + { + // upgrouped + widgetItem = new WidgetItem(); + widgetItem.id = widgetList[i].id; + widgetItem.label = widgetList[i].label; + widgetItem.icon = widgetList[i].icon; + widgetItem.url = widgetList[i].url; + widgetItem.open = widgetList[i].preload && (widgetList[i].preload == "open" || widgetList[i].preload == "minimized"); + + menuItems.addItem(widgetItem); + + // move to the next individual widget + i++; + } + } + else + { + i++; + } + } + + return menuItems; + } + + private function widgetItemDG_widgetItemClickHandler(event:Event):void + { + var widgetItem:WidgetItem = ItemRenderer(event.target).data as WidgetItem; + if (widgetItem.isGroup) + { + groupWidgetArrCol = new ArrayCollection(); + // check the array of widgets if they are open before hand + for each (var widgetObj:Object in widgetItem.widgets) + { + var widgetItem1:WidgetItem = new WidgetItem(); + widgetItem1.id = widgetObj.widget.id; + widgetItem1.label = widgetObj.widget.label; + widgetItem1.icon = widgetObj.widget.icon; + widgetItem1.url = widgetObj.widget.url; + widgetItem1.open = widgetObj.open; + + groupWidgetArrCol.addItem(widgetItem1); + } + menuToolTip.visible = false; + widgetList.visible = true; + widgetListDG.setFocus(); + } + else + { + AppEvent.dispatch(AppEvent.WIDGET_RUN, widgetItem.id); + } + } + + private function widgetList_widgetItemClickHandler(event:Event):void + { + var widgetItem:WidgetItem = ItemRenderer(event.target).data as WidgetItem; + AppEvent.dispatch(AppEvent.WIDGET_RUN, widgetItem.id); + } + + [Bindable] + private var xOver:int; + + private function widgetItemDG_widgetItemMouseOverHandler(event:Event):void + { + var pointGlobal:Point = ItemRenderer(event.target).localToGlobal(new Point(0, 0)); + var pointLocal:Point = headerGroup.globalToLocal(pointGlobal); // get the local coordinates where the menuItem will be shown + + xOver = pointLocal.x; + + widgetList.visible = false; + if (WidgetItem(ItemRenderer(event.target).data).label) + { + menuToolTip.visible = true; + menuTitle.text = WidgetItem(ItemRenderer(event.target).data).label; + } + } + + private function widgetItemDG_widgetItemMouseOutHandler(event:Event):void + { + menuToolTip.visible = false; + } + + private function widgetStateChangedHandler(event:AppEvent):void + { + var data:Object = event.data; + if (widgetItemArrCol.length) + { + for (var i:Number = 0; i < widgetItemArrCol.length; ) + { + if (widgetItemArrCol.getItemAt(i).isGroup) + { + // make sure to check it for the array of widgets(group) if they are open before hand + var widgetFound:Boolean; + for each (var widgetObj:Object in widgetItemArrCol.getItemAt(i).widgets) + { + if (data.id as Number == widgetObj.widget.id) + { + widgetFound = true; + widgetObj.open = (data.state as String == WidgetStates.WIDGET_OPENED) || (data.state as String == WidgetStates.WIDGET_MINIMIZED); + break; + } + } + if (widgetFound) + { + break; + } + else + { + i++; + } + } + else + { + if (data.id as Number == widgetItemArrCol.getItemAt(i).id) + { + widgetItemArrCol.getItemAt(i).open = (data.state as String == WidgetStates.WIDGET_OPENED) || (data.state as String == WidgetStates.WIDGET_MINIMIZED); + break; + } + else + { + i++; + } + } + } + // check for any grouped widgets + if (groupWidgetArrCol && groupWidgetArrCol.length > 0) + { + for (var j:Number = 0; j < groupWidgetArrCol.length; ) + { + if (data.id as Number == groupWidgetArrCol.getItemAt(j).id) + { + groupWidgetArrCol.getItemAt(j).open = (data.state as String == WidgetStates.WIDGET_OPENED) || (data.state as String == WidgetStates.WIDGET_MINIMIZED); + widgetList.visible = false; + break; + } + else + { + j++; + } + } + } + } + } + + private function widgetList_rollOutHandler(event:MouseEvent):void + { + widgetList.visible = false; + } + + private function arrangeHeadingsAndWidgets():void + { + updateSubtitleInclusion(); + + const availableHeadingWidth:Number = centerContainer.width - widgetItemDG.measuredWidth - NONSTOP_RESIZE_GAP; + const desiredHeadingsWidth:Number = Math.max(bannerTitle.getRequiredWidthToDisplayFullText(availableHeadingWidth), + bannerSubtitle.getRequiredWidthToDisplayFullText(availableHeadingWidth)); + + if (desiredHeadingsWidth >= availableHeadingWidth) + { + headingWidth = availableHeadingWidth; + widgetItemDG.percentWidth = NaN; + } + else + { + headingWidth = (desiredHeadingsWidth > MIN_HEADING_WIDTH) ? desiredHeadingsWidth : MIN_HEADING_WIDTH; + widgetItemDG.percentWidth = 100; + } + } + + private function updateSubtitleInclusion():void + { + bannerSubtitle.visible = bannerSubtitle.text != "" && bannerSubtitle.text != null; + bannerSubtitle.includeInLayout = bannerSubtitle.text != "" && bannerSubtitle.text != null; + } + ]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/widgets/HeaderController/HeaderControllerWidget.xml b/src/widgets/HeaderController/HeaderControllerWidget.xml index 75f7dfb..bb29764 100644 --- a/src/widgets/HeaderController/HeaderControllerWidget.xml +++ b/src/widgets/HeaderController/HeaderControllerWidget.xml @@ -1,30 +1,30 @@ - - - - - http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer - - - - - - - -
    - ArcGIS Viewer for Flex -

    - ]]> -
    - -
    -
    - - - + + + + + http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer + + + + + + + +
    + ArcGIS Viewer for Flex +

    + ]]> +
    + +
    +
    + + + diff --git a/src/widgets/HeaderController/HeaderGroup.mxml b/src/widgets/HeaderController/HeaderGroup.mxml index e0e6a99..494364b 100644 --- a/src/widgets/HeaderController/HeaderGroup.mxml +++ b/src/widgets/HeaderController/HeaderGroup.mxml @@ -1,23 +1,23 @@ - - - - - + + + + + diff --git a/src/widgets/HeaderController/HeaderGroupSkin.mxml b/src/widgets/HeaderController/HeaderGroupSkin.mxml index 6c471ed..aff60b4 100644 --- a/src/widgets/HeaderController/HeaderGroupSkin.mxml +++ b/src/widgets/HeaderController/HeaderGroupSkin.mxml @@ -1,36 +1,36 @@ - - - - - - - - - [HostComponent("widgets.HeaderController.HeaderGroup")] - - - - - - - - - + + + + + + + + + [HostComponent("widgets.HeaderController.HeaderGroup")] + + + + + + + + + diff --git a/src/widgets/HeaderController/WidgetItem.as b/src/widgets/HeaderController/WidgetItem.as index 363b351..a7c7b32 100644 --- a/src/widgets/HeaderController/WidgetItem.as +++ b/src/widgets/HeaderController/WidgetItem.as @@ -1,34 +1,34 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2010-2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package widgets.HeaderController -{ - -import flash.events.EventDispatcher; - -[Bindable] - -public class WidgetItem extends EventDispatcher -{ - public var id:Number; // id of the associated widget - public var isGroup:Boolean; - public var icon:Object; - public var url:String; // url - public var label:String; - public var open:Boolean; // indicates whether the associated widget is open or closed - public var widgets:Array; -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2010-2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package widgets.HeaderController +{ + +import flash.events.EventDispatcher; + +[Bindable] + +public class WidgetItem extends EventDispatcher +{ + public var id:Number; // id of the associated widget + public var isGroup:Boolean; + public var icon:Object; + public var url:String; // url + public var label:String; + public var open:Boolean; // indicates whether the associated widget is open or closed + public var widgets:Array; +} + +} diff --git a/src/widgets/HeaderController/WidgetItemDataGroup.as b/src/widgets/HeaderController/WidgetItemDataGroup.as index 2f967ff..5f25258 100644 --- a/src/widgets/HeaderController/WidgetItemDataGroup.as +++ b/src/widgets/HeaderController/WidgetItemDataGroup.as @@ -1,75 +1,75 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2010-2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package widgets.HeaderController -{ - -import flash.events.KeyboardEvent; -import flash.ui.Keyboard; - -import mx.core.ClassFactory; -import mx.managers.IFocusManagerComponent; - -import spark.components.DataGroup; - -// these events bubble up from the WidgetItemRenderer and GroupWidgetItemRenderer -[Event(name="widgetItemClick", type="flash.events.Event")] -[Event(name="widgetItemMouseOver", type="flash.events.Event")] -[Event(name="widgetItemMouseOut", type="flash.events.Event")] - -public class WidgetItemDataGroup extends DataGroup -{ - public function WidgetItemDataGroup() - { - super(); - - this.itemRendererFunction = rendererFunction; - - addEventListener(KeyboardEvent.KEY_UP, keyboardKeyUpHandler); - } - - private function rendererFunction(item:Object):ClassFactory - { - if (item.isGroup) - { - return new ClassFactory(GroupWidgetItemDataGroupRenderer); - } - else - { - return new ClassFactory(WidgetItemDataGroupRenderer); - } - } - - private function keyboardKeyUpHandler(event:KeyboardEvent):void - { - var comp:IFocusManagerComponent; - - if (event.keyCode == Keyboard.LEFT) - { - comp = focusManager.getNextFocusManagerComponent(true); - } - else if (event.keyCode == Keyboard.RIGHT) - { - comp = focusManager.getNextFocusManagerComponent(); - } - - if (comp && (comp is WidgetItemDataGroupRenderer || comp is GroupWidgetItemDataGroupRenderer)) - { - comp.setFocus(); - } - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2010-2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package widgets.HeaderController +{ + +import flash.events.KeyboardEvent; +import flash.ui.Keyboard; + +import mx.core.ClassFactory; +import mx.managers.IFocusManagerComponent; + +import spark.components.DataGroup; + +// these events bubble up from the WidgetItemRenderer and GroupWidgetItemRenderer +[Event(name="widgetItemClick", type="flash.events.Event")] +[Event(name="widgetItemMouseOver", type="flash.events.Event")] +[Event(name="widgetItemMouseOut", type="flash.events.Event")] + +public class WidgetItemDataGroup extends DataGroup +{ + public function WidgetItemDataGroup() + { + super(); + + this.itemRendererFunction = rendererFunction; + + addEventListener(KeyboardEvent.KEY_UP, keyboardKeyUpHandler); + } + + private function rendererFunction(item:Object):ClassFactory + { + if (item.isGroup) + { + return new ClassFactory(GroupWidgetItemDataGroupRenderer); + } + else + { + return new ClassFactory(WidgetItemDataGroupRenderer); + } + } + + private function keyboardKeyUpHandler(event:KeyboardEvent):void + { + var comp:IFocusManagerComponent; + + if (event.keyCode == Keyboard.LEFT) + { + comp = focusManager.getNextFocusManagerComponent(true); + } + else if (event.keyCode == Keyboard.RIGHT) + { + comp = focusManager.getNextFocusManagerComponent(); + } + + if (comp && (comp is WidgetItemDataGroupRenderer || comp is GroupWidgetItemDataGroupRenderer)) + { + comp.setFocus(); + } + } +} + +} diff --git a/src/widgets/HeaderController/WidgetItemDataGroupRenderer.mxml b/src/widgets/HeaderController/WidgetItemDataGroupRenderer.mxml index 07d276f..0fa71fc 100644 --- a/src/widgets/HeaderController/WidgetItemDataGroupRenderer.mxml +++ b/src/widgets/HeaderController/WidgetItemDataGroupRenderer.mxml @@ -1,152 +1,152 @@ - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + diff --git a/src/widgets/HeaderController/WidgetListDataGroup.as b/src/widgets/HeaderController/WidgetListDataGroup.as index 0f31049..c404ef1 100644 --- a/src/widgets/HeaderController/WidgetListDataGroup.as +++ b/src/widgets/HeaderController/WidgetListDataGroup.as @@ -1,36 +1,36 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2010-2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package widgets.HeaderController -{ - -import mx.core.ClassFactory; - -import spark.components.DataGroup; - -// these events bubble up from the WidgetListItemRenderer -[Event(name="widgetListItemClick", type="flash.events.Event")] - -public class WidgetListDataGroup extends DataGroup -{ - public function WidgetListDataGroup() - { - super(); - - this.itemRenderer = new ClassFactory(WidgetListItemRenderer); - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2010-2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package widgets.HeaderController +{ + +import mx.core.ClassFactory; + +import spark.components.DataGroup; + +// these events bubble up from the WidgetListItemRenderer +[Event(name="widgetListItemClick", type="flash.events.Event")] + +public class WidgetListDataGroup extends DataGroup +{ + public function WidgetListDataGroup() + { + super(); + + this.itemRenderer = new ClassFactory(WidgetListItemRenderer); + } +} + +} diff --git a/src/widgets/HeaderController/WidgetListItemRenderer.mxml b/src/widgets/HeaderController/WidgetListItemRenderer.mxml index 84ade61..1f75b99 100644 --- a/src/widgets/HeaderController/WidgetListItemRenderer.mxml +++ b/src/widgets/HeaderController/WidgetListItemRenderer.mxml @@ -1,109 +1,109 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/widgets/HeaderController/WidgetUnderline.mxml b/src/widgets/HeaderController/WidgetUnderline.mxml index 569bde9..35dbefc 100644 --- a/src/widgets/HeaderController/WidgetUnderline.mxml +++ b/src/widgets/HeaderController/WidgetUnderline.mxml @@ -1,42 +1,42 @@ - - - - - - - - - - - - + + + + + + + + + + + + diff --git a/src/widgets/InfoTemplates/InfoContentItemRenderer.mxml b/src/widgets/InfoTemplates/InfoContentItemRenderer.mxml index 56ef10a..371afcc 100644 --- a/src/widgets/InfoTemplates/InfoContentItemRenderer.mxml +++ b/src/widgets/InfoTemplates/InfoContentItemRenderer.mxml @@ -1,46 +1,46 @@ - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + diff --git a/src/widgets/InfoTemplates/InfoPopupWidget.mxml b/src/widgets/InfoTemplates/InfoPopupWidget.mxml index bdf138e..c4f73fd 100644 --- a/src/widgets/InfoTemplates/InfoPopupWidget.mxml +++ b/src/widgets/InfoTemplates/InfoPopupWidget.mxml @@ -1,163 +1,163 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + diff --git a/src/widgets/InfoTemplates/SimpleInfoWinWidget.mxml b/src/widgets/InfoTemplates/SimpleInfoWinWidget.mxml index 9a53b50..a83d626 100644 --- a/src/widgets/InfoTemplates/SimpleInfoWinWidget.mxml +++ b/src/widgets/InfoTemplates/SimpleInfoWinWidget.mxml @@ -1,183 +1,183 @@ - - - - - - 0) - { - zoomScale = Number(configXML.zoomscale); - } - - zoomLabel = configXML.labels.zoomlabel[0] || getDefaultString("zoomLabel"); - } - } - - private function get logger():ILogger - { - if (_logger === null) - { - _logger = Log.getLogger("SimpleInfoWinWidget"); - } - return _logger; - } - - public function set infoConfig(value:XML):void - { - configXML = value; - initConfig(); - } - - private function setInfoParameters(event:FlexEvent):void - { - if (data && fields) - { - try - { - contentList = new ArrayCollection(); - var title:String = data[titleField]; - - for (var i:int; i < fields.length; i++) - { - var attrvalue:Object = data[fields[i]]; - - if (datefields && datefields.indexOf(fields[i]) != -1 && attrvalue is Number) - { - var df:Date = new Date(attrvalue); - if (df.milliseconds == 999) // workaround for REST bug - { - df.milliseconds++; - } - attrvalue = df.toLocaleString(); - } - - var item:Object = - { - field: fields[i], - value: attrvalue - }; - - contentList.addItem(item); - } - this.label = title; - dispatchEvent(new Event("infoWindowLabelChanged", true)); - } - catch (err:Error) - { - if (Log.isError()) - { - logger.error(err.toString()); - } - } - } - } - - private var _infoClass:Class = SimpleInfoWinWidget; - - public function set infoClass(value:Class):void - { - _infoClass = value; - } - - public function get infoClass():Class - { - return _infoClass; - } - - protected function zoom_clickHandler(event:MouseEvent):void - { - var here:MapPoint = map.toMap(new Point(map.infoWindow.anchorX, map.infoWindow.anchorY)); - if (map.scale > zoomScale) - { - map.scale = zoomScale; - } - map.centerAt(here); - } - ]]> - - - - - - - - - - - - - + + + + + + 0) + { + zoomScale = Number(configXML.zoomscale); + } + + zoomLabel = configXML.labels.zoomlabel[0] || getDefaultString("zoomLabel"); + } + } + + private function get logger():ILogger + { + if (_logger === null) + { + _logger = Log.getLogger("SimpleInfoWinWidget"); + } + return _logger; + } + + public function set infoConfig(value:XML):void + { + configXML = value; + initConfig(); + } + + private function setInfoParameters(event:FlexEvent):void + { + if (data && fields) + { + try + { + contentList = new ArrayCollection(); + var title:String = data[titleField]; + + for (var i:int; i < fields.length; i++) + { + var attrvalue:Object = data[fields[i]]; + + if (datefields && datefields.indexOf(fields[i]) != -1 && attrvalue is Number) + { + var df:Date = new Date(attrvalue); + if (df.milliseconds == 999) // workaround for REST bug + { + df.milliseconds++; + } + attrvalue = df.toLocaleString(); + } + + var item:Object = + { + field: fields[i], + value: attrvalue + }; + + contentList.addItem(item); + } + this.label = title; + dispatchEvent(new Event("infoWindowLabelChanged", true)); + } + catch (err:Error) + { + if (Log.isError()) + { + logger.error(err.toString()); + } + } + } + } + + private var _infoClass:Class = SimpleInfoWinWidget; + + public function set infoClass(value:Class):void + { + _infoClass = value; + } + + public function get infoClass():Class + { + return _infoClass; + } + + protected function zoom_clickHandler(event:MouseEvent):void + { + var here:MapPoint = map.toMap(new Point(map.infoWindow.anchorX, map.infoWindow.anchorY)); + if (map.scale > zoomScale) + { + map.scale = zoomScale; + } + map.centerAt(here); + } + ]]> + + + + + + + + + + + + + diff --git a/src/widgets/LayerList/LayerListWidget.mxml b/src/widgets/LayerList/LayerListWidget.mxml index aeea41b..af81def 100644 --- a/src/widgets/LayerList/LayerListWidget.mxml +++ b/src/widgets/LayerList/LayerListWidget.mxml @@ -1,121 +1,121 @@ - - - - - 0) // do not initialize TOC if there are no operational layers - { - initTOC(expandLayerItems); - } - } - - private function initTOC(expandLayerItems:Boolean = false):void - { - toc.map = map; - toc.isMapServiceOnly = false; //gotta get this from the config file - toc.excludeLayers = getExcludeLayers(); - toc.basemapLayers = getBasemapLayers(); - toc.excludeGraphicsLayers = true; - if (expandLayerItems) - { - toc.expandLayerItems(); - } - } - - private function getExcludeLayers():ArrayCollection - { - var result:ArrayCollection = getBasemapLayers(); - - if (configXML) - { - // exclude these layers - var layers:XMLList = configXML.excludelayer as XMLList; - for (var j:Number = 0; j < layers.length(); j++) - { - result.addItem(layers[j].toString()); - } - } - - return result; - } - - private function getBasemapLayers():ArrayCollection - { - var result:ArrayCollection = new ArrayCollection(); - - if (configData && configData.basemaps) - { - for (var i:int = 0; i < configData.basemaps.length; i++) - { - result.addItem(configData.basemaps[i].label); - } - } - - return result; - } - ]]> - - - - - - - - - + + + + + 0) // do not initialize TOC if there are no operational layers + { + initTOC(expandLayerItems); + } + } + + private function initTOC(expandLayerItems:Boolean = false):void + { + toc.map = map; + toc.isMapServiceOnly = false; //gotta get this from the config file + toc.excludeLayers = getExcludeLayers(); + toc.basemapLayers = getBasemapLayers(); + toc.excludeGraphicsLayers = true; + if (expandLayerItems) + { + toc.expandLayerItems(); + } + } + + private function getExcludeLayers():ArrayCollection + { + var result:ArrayCollection = getBasemapLayers(); + + if (configXML) + { + // exclude these layers + var layers:XMLList = configXML.excludelayer as XMLList; + for (var j:Number = 0; j < layers.length(); j++) + { + result.addItem(layers[j].toString()); + } + } + + return result; + } + + private function getBasemapLayers():ArrayCollection + { + var result:ArrayCollection = new ArrayCollection(); + + if (configData && configData.basemaps) + { + for (var i:int = 0; i < configData.basemaps.length; i++) + { + result.addItem(configData.basemaps[i].label); + } + } + + return result; + } + ]]> + + + + + + + + + diff --git a/src/widgets/LayerList/LayerListWidget.xml b/src/widgets/LayerList/LayerListWidget.xml index 629d34c..dd0371d 100644 --- a/src/widgets/LayerList/LayerListWidget.xml +++ b/src/widgets/LayerList/LayerListWidget.xml @@ -1,10 +1,10 @@ - - - Europe - Pirates - - - \ No newline at end of file diff --git a/src/widgets/Legend/LegendWidget.mxml b/src/widgets/Legend/LegendWidget.mxml index 401e8bd..623e146 100644 --- a/src/widgets/Legend/LegendWidget.mxml +++ b/src/widgets/Legend/LegendWidget.mxml @@ -1,188 +1,188 @@ - - - - - 0) - { - respectCurrentMapScale = configXML.respectcurrentmapscale == "true"; - } - - //usebasemaps - if (configXML.usebasemaps.length() > 0) - { - useBaseMaps = configXML.usebasemaps == "true"; - } - - //useoperationallayers - if (configXML.useoperationallayers.length() > 0) - { - useOperationalLayers = configXML.useoperationallayers == "true"; - } - - //excludeLayers - excludeLayers = []; - var layers:XMLList = configXML.excludelayer as XMLList; - for (var n:Number = 0; n < layers.length(); n++) - { - excludeLayers.push(layers[n].toString()); - } - } - legendLayers = []; - for each (var layer:Layer in map.layers as ArrayCollection) - { - if (isLayerShownInLegend(layer)) - { - legendLayers.push(layer); - } - } - AppEvent.addListener(AppEvent.REFRESH_LEGEND, legendRefreshHandler, false, 1); - map.addEventListener(MapEvent.LAYER_ADD, mapLayerAddHandler, false, 1); - map.addEventListener(MapEvent.LAYER_REMOVE, mapLayerRemoveHandler, false, 1); - populateLegend(); - myLegend.map = map; - } - - private function populateLegend():void - { - var layers:Array = []; - // Put layers to the legend in the reverse order - for (var i:int = legendLayers.length; i-- != 0; ) - { - layers.push(legendLayers[i]); - } - myLegend.layers = layers; - } - - private function mapLayerAddHandler(event:MapEvent):void - { - if (isLayerShownInLegend(event.layer)) - { - legendLayers.push(event.layer); - populateLegend(); - } - } - - private function mapLayerRemoveHandler(event:MapEvent):void - { - if (isLayerShownInLegend(event.layer)) - { - var i:int = legendLayers.indexOf(event.layer); - if (i != -1) - { - legendLayers.splice(i, 1); - populateLegend(); - } - } - } - - private function legendRefreshHandler(event:AppEvent):void - { - myLegend.refresh(); - } - - private function isLayerShownInLegend(layer:Layer):Boolean - { - // filter layers which can't be shown in legend - if (!(layer.name.indexOf("hiddenLayer_") == -1 && (layer is FeatureLayer || layer is ArcGISDynamicMapServiceLayer || layer is ArcGISTiledMapServiceLayer || layer is KMLLayer))) - { - return false; - } - - // check if the given layer is a base map layer - var isBaseMapLayer:Boolean = false; - for each (var baseMapLayer:Object in configData.basemaps) - { - if (baseMapLayer.label == layer.id) - { - isBaseMapLayer = true; - break; - } - } - - // check if the given layer should be skipped. - if (!(useOperationalLayers && !isBaseMapLayer || useBaseMaps && isBaseMapLayer)) - { - return false; - } - - // filter the layer through the list of names of excluded layers. - for each (var excludeName:String in excludeLayers) - { - if (excludeName == layer.id) - { - return false; - } - } - - return true; - } - ]]> - - - - - - + + + + + 0) + { + respectCurrentMapScale = configXML.respectcurrentmapscale == "true"; + } + + //usebasemaps + if (configXML.usebasemaps.length() > 0) + { + useBaseMaps = configXML.usebasemaps == "true"; + } + + //useoperationallayers + if (configXML.useoperationallayers.length() > 0) + { + useOperationalLayers = configXML.useoperationallayers == "true"; + } + + //excludeLayers + excludeLayers = []; + var layers:XMLList = configXML.excludelayer as XMLList; + for (var n:Number = 0; n < layers.length(); n++) + { + excludeLayers.push(layers[n].toString()); + } + } + legendLayers = []; + for each (var layer:Layer in map.layers as ArrayCollection) + { + if (isLayerShownInLegend(layer)) + { + legendLayers.push(layer); + } + } + AppEvent.addListener(AppEvent.REFRESH_LEGEND, legendRefreshHandler, false, 1); + map.addEventListener(MapEvent.LAYER_ADD, mapLayerAddHandler, false, 1); + map.addEventListener(MapEvent.LAYER_REMOVE, mapLayerRemoveHandler, false, 1); + populateLegend(); + myLegend.map = map; + } + + private function populateLegend():void + { + var layers:Array = []; + // Put layers to the legend in the reverse order + for (var i:int = legendLayers.length; i-- != 0; ) + { + layers.push(legendLayers[i]); + } + myLegend.layers = layers; + } + + private function mapLayerAddHandler(event:MapEvent):void + { + if (isLayerShownInLegend(event.layer)) + { + legendLayers.push(event.layer); + populateLegend(); + } + } + + private function mapLayerRemoveHandler(event:MapEvent):void + { + if (isLayerShownInLegend(event.layer)) + { + var i:int = legendLayers.indexOf(event.layer); + if (i != -1) + { + legendLayers.splice(i, 1); + populateLegend(); + } + } + } + + private function legendRefreshHandler(event:AppEvent):void + { + myLegend.refresh(); + } + + private function isLayerShownInLegend(layer:Layer):Boolean + { + // filter layers which can't be shown in legend + if (!(layer.name.indexOf("hiddenLayer_") == -1 && (layer is FeatureLayer || layer is ArcGISDynamicMapServiceLayer || layer is ArcGISTiledMapServiceLayer || layer is KMLLayer))) + { + return false; + } + + // check if the given layer is a base map layer + var isBaseMapLayer:Boolean = false; + for each (var baseMapLayer:Object in configData.basemaps) + { + if (baseMapLayer.label == layer.id) + { + isBaseMapLayer = true; + break; + } + } + + // check if the given layer should be skipped. + if (!(useOperationalLayers && !isBaseMapLayer || useBaseMaps && isBaseMapLayer)) + { + return false; + } + + // filter the layer through the list of names of excluded layers. + for each (var excludeName:String in excludeLayers) + { + if (excludeName == layer.id) + { + return false; + } + } + + return true; + } + ]]> + + + + + + diff --git a/src/widgets/Legend/LegendWidget.xml b/src/widgets/Legend/LegendWidget.xml index ebb50b1..257984b 100644 --- a/src/widgets/Legend/LegendWidget.xml +++ b/src/widgets/Legend/LegendWidget.xml @@ -1,11 +1,11 @@ - - - false - true - true - - - + + + false + true + true + + + diff --git a/src/widgets/Locate/AddressField.as b/src/widgets/Locate/AddressField.as index f5242ff..5a47595 100644 --- a/src/widgets/Locate/AddressField.as +++ b/src/widgets/Locate/AddressField.as @@ -1,33 +1,33 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package widgets.Locate -{ - -public class AddressField -{ - public static const TEXT_TYPE:String = "text"; - public static const LIST_TYPE:String = "list"; - - public var name:String; - public var visible:Boolean; - public var editable:Boolean; - public var type:String; - public var alias:String; - public var defaultValue:String; - public var listValues:Array; -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package widgets.Locate +{ + +public class AddressField +{ + public static const TEXT_TYPE:String = "text"; + public static const LIST_TYPE:String = "list"; + + public var name:String; + public var visible:Boolean; + public var editable:Boolean; + public var type:String; + public var alias:String; + public var defaultValue:String; + public var listValues:Array; +} + +} diff --git a/src/widgets/Locate/LocateResult.as b/src/widgets/Locate/LocateResult.as index c9d79c3..3a6a22e 100644 --- a/src/widgets/Locate/LocateResult.as +++ b/src/widgets/Locate/LocateResult.as @@ -1,41 +1,41 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2010-2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package widgets.Locate -{ - -import com.esri.ags.geometry.MapPoint; -import com.esri.ags.symbols.Symbol; - -import flash.events.EventDispatcher; - -[Bindable] - -public class LocateResult extends EventDispatcher -{ - public var title:String; - - public var symbol:Symbol; - - public var content:String; - - public var point:MapPoint; - - public var link:String; - - public var selected:Boolean; -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2010-2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package widgets.Locate +{ + +import com.esri.ags.geometry.MapPoint; +import com.esri.ags.symbols.Symbol; + +import flash.events.EventDispatcher; + +[Bindable] + +public class LocateResult extends EventDispatcher +{ + public var title:String; + + public var symbol:Symbol; + + public var content:String; + + public var point:MapPoint; + + public var link:String; + + public var selected:Boolean; +} + +} diff --git a/src/widgets/Locate/LocateResultDataGroup.as b/src/widgets/Locate/LocateResultDataGroup.as index 980b0df..d886be9 100644 --- a/src/widgets/Locate/LocateResultDataGroup.as +++ b/src/widgets/Locate/LocateResultDataGroup.as @@ -1,37 +1,37 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2010-2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package widgets.Locate -{ - -import mx.core.ClassFactory; - -import spark.components.DataGroup; - -// these events bubble up from the LocateResultItemRenderer -[Event(name="locateResultClick", type="flash.events.Event")] -[Event(name="locateResultDelete", type="flash.events.Event")] - -public class LocateResultDataGroup extends DataGroup -{ - public function LocateResultDataGroup() - { - super(); - - this.itemRenderer = new ClassFactory(LocateResultItemRenderer); - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2010-2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package widgets.Locate +{ + +import mx.core.ClassFactory; + +import spark.components.DataGroup; + +// these events bubble up from the LocateResultItemRenderer +[Event(name="locateResultClick", type="flash.events.Event")] +[Event(name="locateResultDelete", type="flash.events.Event")] + +public class LocateResultDataGroup extends DataGroup +{ + public function LocateResultDataGroup() + { + super(); + + this.itemRenderer = new ClassFactory(LocateResultItemRenderer); + } +} + +} diff --git a/src/widgets/Locate/LocateResultItemRenderer.mxml b/src/widgets/Locate/LocateResultItemRenderer.mxml index 318821a..6833a67 100644 --- a/src/widgets/Locate/LocateResultItemRenderer.mxml +++ b/src/widgets/Locate/LocateResultItemRenderer.mxml @@ -1,138 +1,138 @@ - - - - - - 0) - { - resultIcon.removeChildAt(0); - } - lastResultSymbol = locateResult.symbol; - lastResultSwatch = lastResultSymbol.createSwatch(20, 20); - resultIcon.addChild(lastResultSwatch); - } - } - } - - private function itemrenderer_clickHandler(event:MouseEvent):void - { - dispatchEvent(new Event(LOCATE_RESULT_CLICK, true)); // bubbles - } - - private function deleteLocateResult(event:MouseEvent):void - { - event.stopPropagation(); // don't let this click event go up to the ItemRenderer - dispatchEvent(new Event(LOCATE_RESULT_DELETE, true)); // bubbles - } - ]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + 0) + { + resultIcon.removeChildAt(0); + } + lastResultSymbol = locateResult.symbol; + lastResultSwatch = lastResultSymbol.createSwatch(20, 20); + resultIcon.addChild(lastResultSwatch); + } + } + } + + private function itemrenderer_clickHandler(event:MouseEvent):void + { + dispatchEvent(new Event(LOCATE_RESULT_CLICK, true)); // bubbles + } + + private function deleteLocateResult(event:MouseEvent):void + { + event.stopPropagation(); // don't let this click event go up to the ItemRenderer + dispatchEvent(new Event(LOCATE_RESULT_DELETE, true)); // bubbles + } + ]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/widgets/Locate/LocateWidget.mxml b/src/widgets/Locate/LocateWidget.mxml index 0ad6bd7..5c49d9b 100644 --- a/src/widgets/Locate/LocateWidget.mxml +++ b/src/widgets/Locate/LocateWidget.mxml @@ -1,1270 +1,1270 @@ - - - - - - - - - - - - - - - - - - 0) - { - zoomScale = Number(configXML.zoomscale); - } - - minscore = Number(configXML.minscore) || 40; - useSearchExtent = configXML.usesearchextent == "true"; - - configureLocator(); - } - - wTemplate.addTitlebarButton(ICON_URL + "i_mailbox.png", addressLabel, showStateAddress); - wTemplate.addTitlebarButton(ICON_URL + "i_pushpin.png", coordinatesLabel, showStateCoordinates); - wTemplate.addTitlebarButton(ICON_URL + "i_table.png", resultsLabel, showStateResults); - setInitialView(configXML.initialview[0]); - fade.targets = [ addrInput, coordInput, resultsList ]; - wTemplate.visible = true; - } - - private function assignLabels():void - { - submitLabel = configXML.labels.submitlabel || getDefaultString("locateSubmitLabel"); - clearLabel = configXML.labels.clearlabel || getDefaultString("clearLabel"); - //labels for the three widget states - addressLabel = configXML.labels.addresslabel || getDefaultString("addressLabel"); - coordinatesLabel = configXML.labels.coordinateslabel || getDefaultString("coordinatesLabel"); - resultsLabel = configXML.labels.resultslabel || getDefaultString("resultsLabel"); - //titles for the three widget states - addressTitle = configXML.labels.addresstitle || getDefaultString("addressTitle"); - coordinatesTitle = configXML.labels.coordinatestitle || getDefaultString("coordinatesTitle"); - // noresult label - noResultLabel = configXML.labels.noresultlabel || getDefaultString("noFeatures"); - - //labels for the "coordinate" tab - xLabel = configXML.labels.xlabel || getDefaultString("xLabel"); - yLabel = configXML.labels.ylabel || getDefaultString("yLabel"); - xExampleValue = configXML.labels.xexamplevalue || getDefaultString("locateExampleValueX"); - yExampleValue = configXML.labels.yexamplevalue || getDefaultString("locateExampleValueY"); - - //labels for the "results" tab - loadingLabel = configXML.labels.loadinglabel || getDefaultString("loadingLabel"); - locationsLabel = configXML.labels.locationslabel || getDefaultString("locationsLabel"); - } - - private function prepareResultSymbol():void - { - const resultSymbolURL:String = configXML.symbols.picturemarkersymbol.@url || widgetIcon; - const parsedResultMarkerSymbolHeight:Number = parseFloat(configXML.symbols.picturemarkersymbol.@height[0]); - const resultSymbolHeight:Number = isNaN(parsedResultMarkerSymbolHeight) ? 0 : parsedResultMarkerSymbolHeight; - const parsedResultMarkerSymbolWidth:Number = parseFloat(configXML.symbols.picturemarkersymbol.@width[0]); - const resultSymbolWidth:Number = isNaN(parsedResultMarkerSymbolWidth) ? 0 : parsedResultMarkerSymbolWidth; - const resultSymbolXOffset:Number = configXML.symbols.picturemarkersymbol.@xoffset || 0; - const resultSymbolYOffset:Number = configXML.symbols.picturemarkersymbol.@yoffset || 0; - resultSymbol = new PictureMarkerSymbol(resultSymbolURL, resultSymbolWidth, resultSymbolHeight, resultSymbolXOffset, resultSymbolYOffset); - } - - private function configureGraphicsLayer():void - { - graphicsLayer = new GraphicsLayer(); - graphicsLayer.name = configXML.layername || widgetTitle; - graphicsLayer.symbol = resultSymbol; - graphicsLayer.addEventListener(FlexEvent.HIDE, graphicsLayer_hideHandler); - map.addLayer(graphicsLayer); - } - - private function assignCustomFields():void - { - customAddressFields = new Dictionary(); - hasCustomAddressFields = configXML.fields.length() > 0; - var customField:AddressField; - if (hasCustomAddressFields) - { - for each (var field:XML in configXML.fields.field) - { - if (field.@name[0]) - { - customField = new AddressField(); - - customField.name = field.@name; - customField.alias = field.@alias; - customField.defaultValue = field.@defaultvalue[0]; - customField.type = field.@listvalues[0] ? AddressField.LIST_TYPE : AddressField.TEXT_TYPE; - customField.listValues = field.@listvalues[0] ? field.@listvalues.split(",") : null; - customField.visible = field.@visible[0] ? field.@visible == "true" : true; - customField.editable = field.@editable[0] ? field.@editable == "true" : true; - - customAddressFields[customField.name] = customField; - } - } - } - else if (configXML.listfield.length() > 0 && configXML.listvalues.length() > 0) - { - //backwards compatibility - 1 field with respective values - customField = new AddressField(); - customField.name = configXML.listfield; - customField.listValues = configXML.listvalues.split(","); - customField.visible = true; - customField.editable = true; - customAddressFields[customField.name] = customField; - } - } - - private function configureLocator():void - { - var locatorType:String = configXML.locator; - if (locatorType.toLowerCase() == "bing") - { - setUpBingLocator(); - } - else - { - if (configXML.usesingleline.length() > 0) - { - useSingleLine = configXML.usesingleline == "true"; - } - - if (configXML.useproxy.length() > 0) - { - useProxy = configXML.useproxy == "true"; - } - - if (configXML.locator.@wkid[0]) - { - // for 9.X servers that are missing the SR in the metadata - serviceWKID = Number(configXML.locator.@wkid[0]); - } - - var url:String = configXML.locator; - locatorService = new JSONTask(); - locatorService.url = url; - locator.url = url; - - if (useProxy && configData.proxyUrl) - { - locatorService.proxyURL = configData.proxyUrl; - locator.proxyURL = configData.proxyUrl; - } - - var urlVars:URLVariables = new URLVariables(); - urlVars.f = "json"; - - locatorService.execute(urlVars, new AsyncResponder(locatorService_resultHandler, locatorService_faultHandler)); - } - } - - private function setUpBingLocator():void - { - useBingLocator = true; - addressFieldsLoaded = true; - bingKey = configData.bingKey; - bingCulture = configXML.bingculture || getDefaultString("bingCulture"); - - var bingLocatorTextItem:TextInput = new TextInput(); - bingLocatorTextItem.percentWidth = 100; - - addrObjects.push({ item: bingLocatorTextItem }); - - frmLocateAddress.addChildAt(bingLocatorTextItem, 0); - } - - private function setInitialView(view:String):void - { - if (view == "coordinates") - { - showStateCoordinates(); - } - else if (view == "address") - { - showStateAddress(); - } - } - - private function graphicsLayer_hideHandler(event:FlexEvent):void - { - hideInfoWindow(); - } - - private function showStateAddress():void - { - this.currentState = "addrInput"; - addressRequiredFieldsLabel.visible = false; - addressRequiredFieldsLabel.includeInLayout = false; - wTemplate.selectedTitlebarButtonIndex = 0; - } - - private function showStateCoordinates():void - { - this.currentState = "coordInput"; - coordinatesRequiredFieldsLabel.visible = false; - coordinatesRequiredFieldsLabel.includeInLayout = false; - wTemplate.selectedTitlebarButtonIndex = 1; - } - - private function showStateResults():void - { - this.currentState = "resultsList"; - wTemplate.selectedTitlebarButtonIndex = 2; - } - - private function locatorService_resultHandler(addressFieldData:Object, token:Object = null):void - { - // make all the labels and button visible - addressFieldsLoaded = true; - - if (addressFieldData.singleLineAddressField && useSingleLine) - { - createSingleLineAddressField(addressFieldData); - } - else - { - useSingleLine = false; //single line not supported - createMultipleAddressFields(addressFieldData); - } - - if (addressFieldData.spatialReference && !isNaN(addressFieldData.spatialReference.wkid)) - { - serviceWKID = addressFieldData.spatialReference.wkid; - } - } - - private function locatorService_faultHandler(fault:Fault, token:Object = null):void - { - var msg:String = getDefaultString("locatorServiceConnectionError", - locator.url, - ErrorMessageUtil.getKnownErrorCauseMessage(fault), - ErrorMessageUtil.makeHTMLSafe(fault.toString())); - showError(msg); - } - - private function createSingleLineAddressField(singleLineAddressData:Object):void - { - var singleAddressLabel:Label = new Label(); - singleAddressLabel.percentWidth = 100; - - var singleAddressFormItem:FormItem = new FormItem(); - singleAddressFormItem.percentWidth = 100; - - var singleAddressTextItem:TextInput = new TextInput(); - singleAddressTextItem.percentWidth = 100; - singleAddressTextItem.id = singleLineAddressData.singleLineAddressField.name; - - singleAddressFormItem.addChild(singleAddressTextItem); - - addrObjects.push({ item: singleAddressTextItem, required: singleLineAddressData.singleLineAddressField.required }); - - frmLocateAddress.setStyle("indicatorGap", 0); - frmLocateAddress.addChildAt(singleAddressLabel, 0); - frmLocateAddress.addChildAt(singleAddressFormItem, 1); - } - - private function createMultipleAddressFields(customAddressFieldsData:Object):void - { - var shownAddressFields:Array = customAddressFieldsData.addressFields; - - if (!hasCustomAddressFields) //backwards compatibility - { - //remove excluded fields - for (var i:int = 0; i < shownAddressFields.length; i++) - { - for (var j:int = 0; j < excludeFields.length; j++) - { - if (shownAddressFields[i].name == excludeFields[j]) - { - shownAddressFields.splice(i, 1); - } - } - } - } - - // loop through the shown fields to create form items - var formItemIndex:int = 0; - for (var k:int = 0; k < shownAddressFields.length; k++) - { - var addressFieldName:String = shownAddressFields[k].name; - var customAddressField:AddressField = customAddressFields[addressFieldName]; - - var frmItem:FormItem = new FormItem(); - var addItem:Boolean = false; - frmItem.percentWidth = 100; - - frmItem.label = addressFieldName; - var fieldType:String = AddressField.TEXT_TYPE; - - if (customAddressField) - { - if (customAddressField.alias) - { - frmItem.label = customAddressField.alias; - } - - if (hasCustomAddressFields && customAddressField.type) - { - fieldType = customAddressField.type; - } - else if (customAddressField.listValues.length > 1) //backwards compatibility - { - fieldType = AddressField.LIST_TYPE; - } - } - - if (fieldType.toLowerCase() == AddressField.TEXT_TYPE) - { - var isAddressFieldRequired:Boolean = shownAddressFields[k].required; - frmItem.required = isAddressFieldRequired; - - //special case - if (customAddressField && !customAddressField.editable) - { - var label:RichEditableText = new RichEditableText(); - label.text = customAddressField.defaultValue; - - label.visible = customAddressField.visible; - label.editable = false; - label.percentWidth = 100; - label.id = addressFieldName; - - if (label.visible) - { - addItem = true; - frmItem.addChild(label); - frmItem.setStyle("paddingTop", 5); - } - - addrObjects.push({ item: label, required: isAddressFieldRequired }); - } - else - { - var txtItem:TextInput = new TextInput(); - - if (customAddressField) - { - txtItem.text = customAddressField.defaultValue; - - txtItem.visible = customAddressField.visible; - txtItem.enabled = customAddressField.editable; - } - - txtItem.percentWidth = 100; - txtItem.id = addressFieldName; - - if (txtItem.visible) - { - addItem = true; - frmItem.addChild(txtItem); - } - - addrObjects.push({ item: txtItem, required: isAddressFieldRequired }); - } - } - else if (fieldType.toLowerCase() == AddressField.LIST_TYPE) - { - var selectionItem:DropDownList = new DropDownList(); - selectionItem.requireSelection = true; - selectionItem.id = addressFieldName; - - if (customAddressField) - { - selectionItem.dataProvider = new ArrayList(customAddressField.listValues); - selectionItem.selectedIndex = findItemIndex(customAddressField.defaultValue, customAddressField.listValues); //assumes dataprovider >= 1 value - selectionItem.visible = customAddressField.visible; - selectionItem.enabled = customAddressField.editable; - } - - frmItem.required = shownAddressFields[k].required; - - if (selectionItem.visible) - { - addItem = true; - frmItem.addChild(selectionItem); - } - - addrObjects.push({ item: selectionItem, required: shownAddressFields[k].required }); - } - - if (addItem) - { - frmLocateAddress.addChildAt(frmItem, formItemIndex++); - } - } - } - - private function findItemIndex(item:String, source:Array):int - { - return source.indexOf(item, source); - } - - private function locate():void - { - originatingLocateState = currentState; - - if (useBingLocator) - { - locateBingAddress(); - } - else - { - locateAddress(); - } - } - - private function locateAddress():void - { - // refresh before each request - hideInfoWindow(); - graphicsLayer.clear(); - - if (locateResultAC) - { - locateResultAC.removeAll(); - } - - var data:Object = new Object(); - var requiredFieldEmpty:Boolean; - var emptyRequiredFieldNames:Array = []; - for (var i:int = 0; i < addrObjects.length; i++) - { - var name:String = addrObjects[i].item.id; - var value:String; - if (addrObjects[i].item is TextInput) - { - var txtInput:TextInput = addrObjects[i].item as TextInput; - if (addrObjects[i].required && txtInput.text == "") - { - requiredFieldEmpty = true; - emptyRequiredFieldNames.push(txtInput.id); - } - else - { - value = txtInput.text; - } - } - else if (addrObjects[i].item is RichEditableText) - { - var label:RichEditableText = addrObjects[i].item as RichEditableText; - if (addrObjects[i].required && label.text == "") - { - requiredFieldEmpty = true; - emptyRequiredFieldNames.push(label.id); - } - else - { - value = label.text; - } - } - else - { - // an item is always selected, so no check for required fields - value = DropDownList(addrObjects[i].item).selectedItem; - } - - data[name] = value; - } - - showStateResults(); - var parameters:AddressToLocationsParameters = new AddressToLocationsParameters(); - parameters.address = data; - if (useSearchExtent) - { - parameters.searchExtent = map.extent; - } - locator.addressToLocations(parameters, new ItemResponder(locateResult, locateError)); - showMessage(loadingLabel, true); - } - - private function locateBingAddress():void - { - hideInfoWindow(); - graphicsLayer.clear(); - if (locateResultAC) - { - locateResultAC.removeAll(); - } - - showStateResults(); - veGeocoder.addressToLocations(TextInput(addrObjects[0].item).text, new ItemResponder(locateResult, locateError)); - showMessage(loadingLabel, true); - } - - private function locateResult(data:Array, token:Object = null):void - { - if (data.length > 0) - { - locateResultAC = createLocateResults(data); - addSharedData(widgetTitle, locateResultAC); - showMessage(locationsLabel + " " + locateResultAC.length, false); - locateResultAC.getItemAt(0).selected = true; - if (locateResultAC.length > 0) - { - showLocation(locateResultAC.getItemAt(0)); - } - } - else - { - showMessage(noResultLabel, false); - } - } - - private function locateError(info:Object, token:Object = null):void - { - showMessage(info.toString(), false); - } - - private function createLocateResults(data:Array):ArrayCollection - { - var result:ArrayCollection = new ArrayCollection(); - var mapWKID:Number = map.spatialReference ? map.spatialReference.wkid : NaN; - var mapIsWebMercator:Boolean = map.spatialReference.isWebMercator(); - if (useBingLocator) - { - for each (var veGeocodeResult:VEGeocodeResult in data) - { - var bingLocateResult:LocateResult = new LocateResult(); - bingLocateResult.symbol = resultSymbol; - bingLocateResult.title = veGeocodeResult.address.formattedAddress ? veGeocodeResult.address.formattedAddress : widgetTitle; - bingLocateResult.content = getDefaultString("bingResultConfidenceText") + " " + veGeocodeResult.confidence; - bingLocateResult.point = veGeocodeResult.location; - if (mapIsWebMercator) - { - bingLocateResult.point = WebMercatorUtil.geographicToWebMercator(bingLocateResult.point) as MapPoint; - } - bingLocateResult.link = ""; - bingLocateResult.selected = false; - - result.addItem(bingLocateResult); - } - } - else - { - for each (var addrCandidate:AddressCandidate in data) - { - if (addrCandidate.score >= minscore) - { - var locateResult:LocateResult = new LocateResult(); - locateResult.symbol = resultSymbol; - locateResult.title = addrCandidate.address ? String(addrCandidate.address) : widgetTitle; - locateResult.content = getDefaultString("resultScoreText") + " " + (addrCandidate.score % 1 == 0 ? addrCandidate.score : addrCandidate.score.toFixed(1)); - locateResult.point = addrCandidate.location; - if (!locateResult.point.spatialReference && !isNaN(serviceWKID)) // AGS 9.X returns locations w/o a SR and doesn't support outSR - { - var serviceIsWebMercator:Boolean = serviceWKID == 102100 || serviceWKID == 3857 || serviceWKID == 102113; - if (mapIsWebMercator && serviceWKID == 4326) - { - locateResult.point = WebMercatorUtil.geographicToWebMercator(locateResult.point) as MapPoint; - } - else if (serviceIsWebMercator && mapWKID == 4326) - { - locateResult.point = WebMercatorUtil.webMercatorToGeographic(locateResult.point) as MapPoint; - } - } - locateResult.link = ""; - locateResult.selected = false; - - result.addItem(locateResult); - } - } - } - return result; - } - - private function locateCoordinates():void - { - originatingLocateState = currentState; - - // refresh before each request - hideInfoWindow(); - graphicsLayer.clear(); - if (locateResultAC) - { - locateResultAC.removeAll(); - } - - try - { - var long:String = txtLong.text; - var lat:String = txtLat.text; - if (long && lat) - { - var numLong:Number = Number(long); - var numLat:Number = Number(lat); - if (!isNaN(numLong) && !isNaN(numLat)) - { - showStateResults(); - - var locateResult:LocateResult = new LocateResult(); - locateResult.symbol = resultSymbol; - locateResult.title = coordinatesLabel; - locateResult.content = long + " " + lat; - locateResult.point = new MapPoint(numLong, numLat); - var mapWKID:Number = map.spatialReference ? map.spatialReference.wkid : NaN; - var mapIsWebMercator:Boolean = mapWKID == 102100 || mapWKID == 3857 || mapWKID == 102113; - if (mapIsWebMercator) - { - // clip the locate result, so it's not going to Infinity; otherwise gives an error - locateResult.point.x = Math.min(Math.max(locateResult.point.x, -180), 180); - locateResult.point.y = Math.min(Math.max(locateResult.point.y, -89.99), 89.99); - locateResult.point = WebMercatorUtil.geographicToWebMercator(locateResult.point) as MapPoint; - } - locateResult.link = ""; - locateResult.selected = true; - - locateResultAC = new ArrayCollection([ locateResult ]); - - addSharedData(widgetTitle, locateResultAC); - showLocation(locateResult); - showMessage(locationsLabel + " " + locateResultAC.length, false); - } - } - else - { - // dont send any request as the required field(s) not completed - coordinatesRequiredFieldsLabel.visible = true; - coordinatesRequiredFieldsLabel.includeInLayout = true; - if (long == "" && lat == "") - { - coordinatesRequiredFieldsLabel.text = getDefaultString("requiredFields") + " " + xLabel + ", " + yLabel; - } - else - { - coordinatesRequiredFieldsLabel.text = long == "" ? getDefaultString("requiredField") + " " + xLabel : getDefaultString("requiredField") + " " + yLabel; - } - } - } - catch (error:Error) - { - showMessage(error.message, false); - } - } - - private function showLocation(data:Object):void - { - hideInfoWindow(); - graphicsLayer.clear(); - - var ptGraphic:Graphic = new Graphic(); - ptGraphic.geometry = data.point; - graphicsLayer.add(ptGraphic); - - var popUpInfo:PopUpInfo = new PopUpInfo(); - popUpInfo.title = data.title; - popUpInfo.description = data.content; - - var infoWindowRenderer:ClassFactory = new ClassFactory(PopUpRenderer); - infoWindowRenderer.properties = { popUpInfo: popUpInfo }; - graphicsLayer.infoWindowRenderer = infoWindowRenderer; - - popUpRenderer.popUpInfo = popUpInfo; - popUpRenderer.graphic = ptGraphic; - - if (map.scale > zoomScale) - { - map.scale = zoomScale; - } - map.centerAt(data.point); - - infoWindowShow(); - } - - private function locateResultDG_locationSelectHandler(event:Event):void - { - deselectLocateResults(); - - var selectedLocateResult:LocateResult = ItemRenderer(event.target).data as LocateResult; - selectedLocateResult.selected = true; - - showLocation(selectedLocateResult); - } - - private function deselectLocateResults():void - { - for each (var result:LocateResult in locateResultDG.dataProvider) - { - result.selected = false; - } - } - - private function clearInputFieldsAndResults():void - { - hideInfoWindow(); - if (currentState == "addrInput") - { - clearAddressFields(); - } - else if (currentState == "coordInput") - { - txtLong.text = ""; - txtLat.text = ""; - } - - clearMessage(); - graphicsLayer.clear(); - if (locateResultAC) - { - locateResultAC.removeAll(); - } - } - - private function clearAddressFields():void - { - for (var i:int = 0; i < addrObjects.length; i++) - { - var addressInput:UIComponent = addrObjects[i].item; - var addressFieldName:String = addressInput.id; - var customAddressField:AddressField = customAddressFields[addressFieldName]; - - if (addressInput is TextInput) - { - var txtInput:TextInput = addressInput as TextInput; - if (txtInput && txtInput.enabled) //clear only editable fields - { - txtInput.text = customAddressField ? customAddressField.defaultValue : ""; - } - } - else if (addressInput is DropDownList) - { - var selectionInput:DropDownList = addressInput as DropDownList; - if (selectionInput && selectionInput.enabled) //reset only editable fields - { - selectionInput.selectedIndex = findItemIndex(customAddressField.defaultValue, customAddressField.listValues); - } - } - } - } - - private function infoWindowShow():void - { - map.infoWindow.content = popUpRenderer; - map.infoWindow.contentOwner = popUpRenderer.graphic; - map.infoWindow.show(popUpRenderer.graphic.geometry as MapPoint); - } - - private function showMessage(msg:String, swfVisible:Boolean):void - { - txtMessage.text = msg; - swfMessage.visible = swfVisible; - msgVisible = true; - } - - private function clearMessage():void - { - msgVisible = false; - } - - private function wTemplate_widgetClosedHandler(event:Event):void - { - if (graphicsLayer) - { - graphicsLayer.visible = false; - hideInfoWindow(); - } - } - - private function wTemplate_widgetOpenedHandler(event:Event):void - { - if (graphicsLayer) - { - graphicsLayer.visible = true; - } - } - - protected function locateResultDG_locateResultDeleteHandler(event:Event):void - { - var locateResult:LocateResult = ItemRenderer(event.target).data as LocateResult; - for (var i:int = 0; i < locateResultAC.length; ) - { - if (locateResultAC.getItemAt(i) === locateResult) - { - locateResultAC.removeItemAt(i); - - if (locateResultAC.length == 0) - { - clearMessage(); - hideInfoWindow(); - graphicsLayer.clear(); - } - else - { - // if a selected item is deleted, show the 1st one, by default - if (locateResult.selected) - { - locateResultAC.getItemAt(0).selected = true; - showLocation(locateResultAC.getItemAt(0)); - //scroll to the top - locateResultDG.verticalScrollPosition = locateResultDG.layout.getVerticalScrollPositionDelta(NavigationUnit.HOME); - } - } - break; - } - else - { - i++; - } - } - txtMessage.text = locationsLabel + " " + locateResultAC.length; - - if (locateResultAC.length == 0) - { - returnToOriginatingLocateView(); - } - } - - private function returnToOriginatingLocateView():void - { - if (originatingLocateState == "addrInput") - { - showStateAddress(); - } - else if (originatingLocateState == "coordInput") - { - showStateCoordinates(); - } - } - - private function frmLocateAddress_formKeyDownHandler(event:KeyboardEvent):void - { - if (event.keyCode == Keyboard.ENTER) - { - const focusedComponent:IFocusManagerComponent = focusManager.getFocus(); - - if (focusedComponent == addressClearButton) - { - clearAddressFields(); - } - else - { - locateIfAddressFieldInputValid(); - } - } - } - - private function locateIfAddressFieldInputValid():void - { - if (useSingleLine) - { - if (singleLineInputValid()) - { - locate(); - } - } - else - { - if (multiLineInputValid()) - { - locate(); - } - else - { - showRequiredFieldsMessage(); - } - } - } - - private function singleLineInputValid():Boolean - { - return (addrObjects[0].item as TextInput).text != ""; - } - - private function multiLineInputValid():Boolean - { - var isInputValid:Boolean = true; - - for (var i:int = 0; i < addrObjects.length; i++) - { - if (addrObjects[i].item is TextInput) - { - var txtInput:TextInput = addrObjects[i].item as TextInput; - if (addrObjects[i].required && txtInput.text == "") - { - isInputValid = false; - break; - } - } - else if (addrObjects[i].item is Label) - { - var label:Label = addrObjects[i].item as Label; - if (addrObjects[i].required && label.text == "") - { - isInputValid = false; - break; - } - } - } - - return isInputValid; - } - - private function showRequiredFieldsMessage():void - { - var emptyRequiredFieldNames:Array = findEmptyFieldNames(); - if (emptyRequiredFieldNames.length > 0) - { - addressRequiredFieldsLabel.visible = true; - addressRequiredFieldsLabel.includeInLayout = true; - addressRequiredFieldsLabel.text = buildRequiredFieldsMessage(emptyRequiredFieldNames); - } - } - - private function buildRequiredFieldsMessage(emptyRequiredFieldNames:Array):String - { - var requiredFieldsMessage:String; - - if (emptyRequiredFieldNames.length > 1) - { - requiredFieldsMessage = getDefaultString("requiredFields") + " "; - for each (var str:String in emptyRequiredFieldNames) - { - requiredFieldsMessage += str + ", "; - } - } - else - { - requiredFieldsMessage = getDefaultString("requiredField") + " " + emptyRequiredFieldNames[0]; - } - - return requiredFieldsMessage; - } - - private function findEmptyFieldNames():Array - { - var requiredFieldEmpty:Boolean; - var fieldName:String; - var emptyRequiredFieldNames:Array = []; - - for (var i:int = 0; i < addrObjects.length; i++) - { - requiredFieldEmpty = false; - fieldName = addrObjects[i].item.id; - - if (addrObjects[i].item is TextInput) - { - var txtInput:TextInput = addrObjects[i].item as TextInput; - if (addrObjects[i].required && txtInput.text == "") - { - requiredFieldEmpty = true; - } - } - else if (addrObjects[i].item is Label) - { - var label:Label = addrObjects[i].item as Label; - if (addrObjects[i].required && label.text == "") - { - requiredFieldEmpty = true; - } - } - - if (requiredFieldEmpty) - { - emptyRequiredFieldNames.push(fieldName); - } - } - - return emptyRequiredFieldNames; - } - - private function frmLocateCoords_formKeyDownHandler(event:KeyboardEvent):void - { - if (event.keyCode == Keyboard.ENTER) - { - const focusedComponent:IFocusManagerComponent = focusManager.getFocus(); - - if (focusedComponent == clearCoordinatesButton) - { - clearInputFieldsAndResults(); - } - else - { - locateCoordinates(); - } - } - } - - private function hideInfoWindow():void - { - if (map.infoWindow.contentOwner && - ((map.infoWindow.contentOwner is Graphic && Graphic(map.infoWindow.contentOwner).graphicsLayer === graphicsLayer) || map.infoWindow.contentOwner is Map)) - { - map.infoWindow.hide(); - } - } - ]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + 0) + { + zoomScale = Number(configXML.zoomscale); + } + + minscore = Number(configXML.minscore) || 40; + useSearchExtent = configXML.usesearchextent == "true"; + + configureLocator(); + } + + wTemplate.addTitlebarButton(ICON_URL + "i_mailbox.png", addressLabel, showStateAddress); + wTemplate.addTitlebarButton(ICON_URL + "i_pushpin.png", coordinatesLabel, showStateCoordinates); + wTemplate.addTitlebarButton(ICON_URL + "i_table.png", resultsLabel, showStateResults); + setInitialView(configXML.initialview[0]); + fade.targets = [ addrInput, coordInput, resultsList ]; + wTemplate.visible = true; + } + + private function assignLabels():void + { + submitLabel = configXML.labels.submitlabel || getDefaultString("locateSubmitLabel"); + clearLabel = configXML.labels.clearlabel || getDefaultString("clearLabel"); + //labels for the three widget states + addressLabel = configXML.labels.addresslabel || getDefaultString("addressLabel"); + coordinatesLabel = configXML.labels.coordinateslabel || getDefaultString("coordinatesLabel"); + resultsLabel = configXML.labels.resultslabel || getDefaultString("resultsLabel"); + //titles for the three widget states + addressTitle = configXML.labels.addresstitle || getDefaultString("addressTitle"); + coordinatesTitle = configXML.labels.coordinatestitle || getDefaultString("coordinatesTitle"); + // noresult label + noResultLabel = configXML.labels.noresultlabel || getDefaultString("noFeatures"); + + //labels for the "coordinate" tab + xLabel = configXML.labels.xlabel || getDefaultString("xLabel"); + yLabel = configXML.labels.ylabel || getDefaultString("yLabel"); + xExampleValue = configXML.labels.xexamplevalue || getDefaultString("locateExampleValueX"); + yExampleValue = configXML.labels.yexamplevalue || getDefaultString("locateExampleValueY"); + + //labels for the "results" tab + loadingLabel = configXML.labels.loadinglabel || getDefaultString("loadingLabel"); + locationsLabel = configXML.labels.locationslabel || getDefaultString("locationsLabel"); + } + + private function prepareResultSymbol():void + { + const resultSymbolURL:String = configXML.symbols.picturemarkersymbol.@url || widgetIcon; + const parsedResultMarkerSymbolHeight:Number = parseFloat(configXML.symbols.picturemarkersymbol.@height[0]); + const resultSymbolHeight:Number = isNaN(parsedResultMarkerSymbolHeight) ? 0 : parsedResultMarkerSymbolHeight; + const parsedResultMarkerSymbolWidth:Number = parseFloat(configXML.symbols.picturemarkersymbol.@width[0]); + const resultSymbolWidth:Number = isNaN(parsedResultMarkerSymbolWidth) ? 0 : parsedResultMarkerSymbolWidth; + const resultSymbolXOffset:Number = configXML.symbols.picturemarkersymbol.@xoffset || 0; + const resultSymbolYOffset:Number = configXML.symbols.picturemarkersymbol.@yoffset || 0; + resultSymbol = new PictureMarkerSymbol(resultSymbolURL, resultSymbolWidth, resultSymbolHeight, resultSymbolXOffset, resultSymbolYOffset); + } + + private function configureGraphicsLayer():void + { + graphicsLayer = new GraphicsLayer(); + graphicsLayer.name = configXML.layername || widgetTitle; + graphicsLayer.symbol = resultSymbol; + graphicsLayer.addEventListener(FlexEvent.HIDE, graphicsLayer_hideHandler); + map.addLayer(graphicsLayer); + } + + private function assignCustomFields():void + { + customAddressFields = new Dictionary(); + hasCustomAddressFields = configXML.fields.length() > 0; + var customField:AddressField; + if (hasCustomAddressFields) + { + for each (var field:XML in configXML.fields.field) + { + if (field.@name[0]) + { + customField = new AddressField(); + + customField.name = field.@name; + customField.alias = field.@alias; + customField.defaultValue = field.@defaultvalue[0]; + customField.type = field.@listvalues[0] ? AddressField.LIST_TYPE : AddressField.TEXT_TYPE; + customField.listValues = field.@listvalues[0] ? field.@listvalues.split(",") : null; + customField.visible = field.@visible[0] ? field.@visible == "true" : true; + customField.editable = field.@editable[0] ? field.@editable == "true" : true; + + customAddressFields[customField.name] = customField; + } + } + } + else if (configXML.listfield.length() > 0 && configXML.listvalues.length() > 0) + { + //backwards compatibility - 1 field with respective values + customField = new AddressField(); + customField.name = configXML.listfield; + customField.listValues = configXML.listvalues.split(","); + customField.visible = true; + customField.editable = true; + customAddressFields[customField.name] = customField; + } + } + + private function configureLocator():void + { + var locatorType:String = configXML.locator; + if (locatorType.toLowerCase() == "bing") + { + setUpBingLocator(); + } + else + { + if (configXML.usesingleline.length() > 0) + { + useSingleLine = configXML.usesingleline == "true"; + } + + if (configXML.useproxy.length() > 0) + { + useProxy = configXML.useproxy == "true"; + } + + if (configXML.locator.@wkid[0]) + { + // for 9.X servers that are missing the SR in the metadata + serviceWKID = Number(configXML.locator.@wkid[0]); + } + + var url:String = configXML.locator; + locatorService = new JSONTask(); + locatorService.url = url; + locator.url = url; + + if (useProxy && configData.proxyUrl) + { + locatorService.proxyURL = configData.proxyUrl; + locator.proxyURL = configData.proxyUrl; + } + + var urlVars:URLVariables = new URLVariables(); + urlVars.f = "json"; + + locatorService.execute(urlVars, new AsyncResponder(locatorService_resultHandler, locatorService_faultHandler)); + } + } + + private function setUpBingLocator():void + { + useBingLocator = true; + addressFieldsLoaded = true; + bingKey = configData.bingKey; + bingCulture = configXML.bingculture || getDefaultString("bingCulture"); + + var bingLocatorTextItem:TextInput = new TextInput(); + bingLocatorTextItem.percentWidth = 100; + + addrObjects.push({ item: bingLocatorTextItem }); + + frmLocateAddress.addChildAt(bingLocatorTextItem, 0); + } + + private function setInitialView(view:String):void + { + if (view == "coordinates") + { + showStateCoordinates(); + } + else if (view == "address") + { + showStateAddress(); + } + } + + private function graphicsLayer_hideHandler(event:FlexEvent):void + { + hideInfoWindow(); + } + + private function showStateAddress():void + { + this.currentState = "addrInput"; + addressRequiredFieldsLabel.visible = false; + addressRequiredFieldsLabel.includeInLayout = false; + wTemplate.selectedTitlebarButtonIndex = 0; + } + + private function showStateCoordinates():void + { + this.currentState = "coordInput"; + coordinatesRequiredFieldsLabel.visible = false; + coordinatesRequiredFieldsLabel.includeInLayout = false; + wTemplate.selectedTitlebarButtonIndex = 1; + } + + private function showStateResults():void + { + this.currentState = "resultsList"; + wTemplate.selectedTitlebarButtonIndex = 2; + } + + private function locatorService_resultHandler(addressFieldData:Object, token:Object = null):void + { + // make all the labels and button visible + addressFieldsLoaded = true; + + if (addressFieldData.singleLineAddressField && useSingleLine) + { + createSingleLineAddressField(addressFieldData); + } + else + { + useSingleLine = false; //single line not supported + createMultipleAddressFields(addressFieldData); + } + + if (addressFieldData.spatialReference && !isNaN(addressFieldData.spatialReference.wkid)) + { + serviceWKID = addressFieldData.spatialReference.wkid; + } + } + + private function locatorService_faultHandler(fault:Fault, token:Object = null):void + { + var msg:String = getDefaultString("locatorServiceConnectionError", + locator.url, + ErrorMessageUtil.getKnownErrorCauseMessage(fault), + ErrorMessageUtil.makeHTMLSafe(fault.toString())); + showError(msg); + } + + private function createSingleLineAddressField(singleLineAddressData:Object):void + { + var singleAddressLabel:Label = new Label(); + singleAddressLabel.percentWidth = 100; + + var singleAddressFormItem:FormItem = new FormItem(); + singleAddressFormItem.percentWidth = 100; + + var singleAddressTextItem:TextInput = new TextInput(); + singleAddressTextItem.percentWidth = 100; + singleAddressTextItem.id = singleLineAddressData.singleLineAddressField.name; + + singleAddressFormItem.addChild(singleAddressTextItem); + + addrObjects.push({ item: singleAddressTextItem, required: singleLineAddressData.singleLineAddressField.required }); + + frmLocateAddress.setStyle("indicatorGap", 0); + frmLocateAddress.addChildAt(singleAddressLabel, 0); + frmLocateAddress.addChildAt(singleAddressFormItem, 1); + } + + private function createMultipleAddressFields(customAddressFieldsData:Object):void + { + var shownAddressFields:Array = customAddressFieldsData.addressFields; + + if (!hasCustomAddressFields) //backwards compatibility + { + //remove excluded fields + for (var i:int = 0; i < shownAddressFields.length; i++) + { + for (var j:int = 0; j < excludeFields.length; j++) + { + if (shownAddressFields[i].name == excludeFields[j]) + { + shownAddressFields.splice(i, 1); + } + } + } + } + + // loop through the shown fields to create form items + var formItemIndex:int = 0; + for (var k:int = 0; k < shownAddressFields.length; k++) + { + var addressFieldName:String = shownAddressFields[k].name; + var customAddressField:AddressField = customAddressFields[addressFieldName]; + + var frmItem:FormItem = new FormItem(); + var addItem:Boolean = false; + frmItem.percentWidth = 100; + + frmItem.label = addressFieldName; + var fieldType:String = AddressField.TEXT_TYPE; + + if (customAddressField) + { + if (customAddressField.alias) + { + frmItem.label = customAddressField.alias; + } + + if (hasCustomAddressFields && customAddressField.type) + { + fieldType = customAddressField.type; + } + else if (customAddressField.listValues.length > 1) //backwards compatibility + { + fieldType = AddressField.LIST_TYPE; + } + } + + if (fieldType.toLowerCase() == AddressField.TEXT_TYPE) + { + var isAddressFieldRequired:Boolean = shownAddressFields[k].required; + frmItem.required = isAddressFieldRequired; + + //special case + if (customAddressField && !customAddressField.editable) + { + var label:RichEditableText = new RichEditableText(); + label.text = customAddressField.defaultValue; + + label.visible = customAddressField.visible; + label.editable = false; + label.percentWidth = 100; + label.id = addressFieldName; + + if (label.visible) + { + addItem = true; + frmItem.addChild(label); + frmItem.setStyle("paddingTop", 5); + } + + addrObjects.push({ item: label, required: isAddressFieldRequired }); + } + else + { + var txtItem:TextInput = new TextInput(); + + if (customAddressField) + { + txtItem.text = customAddressField.defaultValue; + + txtItem.visible = customAddressField.visible; + txtItem.enabled = customAddressField.editable; + } + + txtItem.percentWidth = 100; + txtItem.id = addressFieldName; + + if (txtItem.visible) + { + addItem = true; + frmItem.addChild(txtItem); + } + + addrObjects.push({ item: txtItem, required: isAddressFieldRequired }); + } + } + else if (fieldType.toLowerCase() == AddressField.LIST_TYPE) + { + var selectionItem:DropDownList = new DropDownList(); + selectionItem.requireSelection = true; + selectionItem.id = addressFieldName; + + if (customAddressField) + { + selectionItem.dataProvider = new ArrayList(customAddressField.listValues); + selectionItem.selectedIndex = findItemIndex(customAddressField.defaultValue, customAddressField.listValues); //assumes dataprovider >= 1 value + selectionItem.visible = customAddressField.visible; + selectionItem.enabled = customAddressField.editable; + } + + frmItem.required = shownAddressFields[k].required; + + if (selectionItem.visible) + { + addItem = true; + frmItem.addChild(selectionItem); + } + + addrObjects.push({ item: selectionItem, required: shownAddressFields[k].required }); + } + + if (addItem) + { + frmLocateAddress.addChildAt(frmItem, formItemIndex++); + } + } + } + + private function findItemIndex(item:String, source:Array):int + { + return source.indexOf(item, source); + } + + private function locate():void + { + originatingLocateState = currentState; + + if (useBingLocator) + { + locateBingAddress(); + } + else + { + locateAddress(); + } + } + + private function locateAddress():void + { + // refresh before each request + hideInfoWindow(); + graphicsLayer.clear(); + + if (locateResultAC) + { + locateResultAC.removeAll(); + } + + var data:Object = new Object(); + var requiredFieldEmpty:Boolean; + var emptyRequiredFieldNames:Array = []; + for (var i:int = 0; i < addrObjects.length; i++) + { + var name:String = addrObjects[i].item.id; + var value:String; + if (addrObjects[i].item is TextInput) + { + var txtInput:TextInput = addrObjects[i].item as TextInput; + if (addrObjects[i].required && txtInput.text == "") + { + requiredFieldEmpty = true; + emptyRequiredFieldNames.push(txtInput.id); + } + else + { + value = txtInput.text; + } + } + else if (addrObjects[i].item is RichEditableText) + { + var label:RichEditableText = addrObjects[i].item as RichEditableText; + if (addrObjects[i].required && label.text == "") + { + requiredFieldEmpty = true; + emptyRequiredFieldNames.push(label.id); + } + else + { + value = label.text; + } + } + else + { + // an item is always selected, so no check for required fields + value = DropDownList(addrObjects[i].item).selectedItem; + } + + data[name] = value; + } + + showStateResults(); + var parameters:AddressToLocationsParameters = new AddressToLocationsParameters(); + parameters.address = data; + if (useSearchExtent) + { + parameters.searchExtent = map.extent; + } + locator.addressToLocations(parameters, new ItemResponder(locateResult, locateError)); + showMessage(loadingLabel, true); + } + + private function locateBingAddress():void + { + hideInfoWindow(); + graphicsLayer.clear(); + if (locateResultAC) + { + locateResultAC.removeAll(); + } + + showStateResults(); + veGeocoder.addressToLocations(TextInput(addrObjects[0].item).text, new ItemResponder(locateResult, locateError)); + showMessage(loadingLabel, true); + } + + private function locateResult(data:Array, token:Object = null):void + { + if (data.length > 0) + { + locateResultAC = createLocateResults(data); + addSharedData(widgetTitle, locateResultAC); + showMessage(locationsLabel + " " + locateResultAC.length, false); + locateResultAC.getItemAt(0).selected = true; + if (locateResultAC.length > 0) + { + showLocation(locateResultAC.getItemAt(0)); + } + } + else + { + showMessage(noResultLabel, false); + } + } + + private function locateError(info:Object, token:Object = null):void + { + showMessage(info.toString(), false); + } + + private function createLocateResults(data:Array):ArrayCollection + { + var result:ArrayCollection = new ArrayCollection(); + var mapWKID:Number = map.spatialReference ? map.spatialReference.wkid : NaN; + var mapIsWebMercator:Boolean = map.spatialReference.isWebMercator(); + if (useBingLocator) + { + for each (var veGeocodeResult:VEGeocodeResult in data) + { + var bingLocateResult:LocateResult = new LocateResult(); + bingLocateResult.symbol = resultSymbol; + bingLocateResult.title = veGeocodeResult.address.formattedAddress ? veGeocodeResult.address.formattedAddress : widgetTitle; + bingLocateResult.content = getDefaultString("bingResultConfidenceText") + " " + veGeocodeResult.confidence; + bingLocateResult.point = veGeocodeResult.location; + if (mapIsWebMercator) + { + bingLocateResult.point = WebMercatorUtil.geographicToWebMercator(bingLocateResult.point) as MapPoint; + } + bingLocateResult.link = ""; + bingLocateResult.selected = false; + + result.addItem(bingLocateResult); + } + } + else + { + for each (var addrCandidate:AddressCandidate in data) + { + if (addrCandidate.score >= minscore) + { + var locateResult:LocateResult = new LocateResult(); + locateResult.symbol = resultSymbol; + locateResult.title = addrCandidate.address ? String(addrCandidate.address) : widgetTitle; + locateResult.content = getDefaultString("resultScoreText") + " " + (addrCandidate.score % 1 == 0 ? addrCandidate.score : addrCandidate.score.toFixed(1)); + locateResult.point = addrCandidate.location; + if (!locateResult.point.spatialReference && !isNaN(serviceWKID)) // AGS 9.X returns locations w/o a SR and doesn't support outSR + { + var serviceIsWebMercator:Boolean = serviceWKID == 102100 || serviceWKID == 3857 || serviceWKID == 102113; + if (mapIsWebMercator && serviceWKID == 4326) + { + locateResult.point = WebMercatorUtil.geographicToWebMercator(locateResult.point) as MapPoint; + } + else if (serviceIsWebMercator && mapWKID == 4326) + { + locateResult.point = WebMercatorUtil.webMercatorToGeographic(locateResult.point) as MapPoint; + } + } + locateResult.link = ""; + locateResult.selected = false; + + result.addItem(locateResult); + } + } + } + return result; + } + + private function locateCoordinates():void + { + originatingLocateState = currentState; + + // refresh before each request + hideInfoWindow(); + graphicsLayer.clear(); + if (locateResultAC) + { + locateResultAC.removeAll(); + } + + try + { + var long:String = txtLong.text; + var lat:String = txtLat.text; + if (long && lat) + { + var numLong:Number = Number(long); + var numLat:Number = Number(lat); + if (!isNaN(numLong) && !isNaN(numLat)) + { + showStateResults(); + + var locateResult:LocateResult = new LocateResult(); + locateResult.symbol = resultSymbol; + locateResult.title = coordinatesLabel; + locateResult.content = long + " " + lat; + locateResult.point = new MapPoint(numLong, numLat); + var mapWKID:Number = map.spatialReference ? map.spatialReference.wkid : NaN; + var mapIsWebMercator:Boolean = mapWKID == 102100 || mapWKID == 3857 || mapWKID == 102113; + if (mapIsWebMercator) + { + // clip the locate result, so it's not going to Infinity; otherwise gives an error + locateResult.point.x = Math.min(Math.max(locateResult.point.x, -180), 180); + locateResult.point.y = Math.min(Math.max(locateResult.point.y, -89.99), 89.99); + locateResult.point = WebMercatorUtil.geographicToWebMercator(locateResult.point) as MapPoint; + } + locateResult.link = ""; + locateResult.selected = true; + + locateResultAC = new ArrayCollection([ locateResult ]); + + addSharedData(widgetTitle, locateResultAC); + showLocation(locateResult); + showMessage(locationsLabel + " " + locateResultAC.length, false); + } + } + else + { + // dont send any request as the required field(s) not completed + coordinatesRequiredFieldsLabel.visible = true; + coordinatesRequiredFieldsLabel.includeInLayout = true; + if (long == "" && lat == "") + { + coordinatesRequiredFieldsLabel.text = getDefaultString("requiredFields") + " " + xLabel + ", " + yLabel; + } + else + { + coordinatesRequiredFieldsLabel.text = long == "" ? getDefaultString("requiredField") + " " + xLabel : getDefaultString("requiredField") + " " + yLabel; + } + } + } + catch (error:Error) + { + showMessage(error.message, false); + } + } + + private function showLocation(data:Object):void + { + hideInfoWindow(); + graphicsLayer.clear(); + + var ptGraphic:Graphic = new Graphic(); + ptGraphic.geometry = data.point; + graphicsLayer.add(ptGraphic); + + var popUpInfo:PopUpInfo = new PopUpInfo(); + popUpInfo.title = data.title; + popUpInfo.description = data.content; + + var infoWindowRenderer:ClassFactory = new ClassFactory(PopUpRenderer); + infoWindowRenderer.properties = { popUpInfo: popUpInfo }; + graphicsLayer.infoWindowRenderer = infoWindowRenderer; + + popUpRenderer.popUpInfo = popUpInfo; + popUpRenderer.graphic = ptGraphic; + + if (map.scale > zoomScale) + { + map.scale = zoomScale; + } + map.centerAt(data.point); + + infoWindowShow(); + } + + private function locateResultDG_locationSelectHandler(event:Event):void + { + deselectLocateResults(); + + var selectedLocateResult:LocateResult = ItemRenderer(event.target).data as LocateResult; + selectedLocateResult.selected = true; + + showLocation(selectedLocateResult); + } + + private function deselectLocateResults():void + { + for each (var result:LocateResult in locateResultDG.dataProvider) + { + result.selected = false; + } + } + + private function clearInputFieldsAndResults():void + { + hideInfoWindow(); + if (currentState == "addrInput") + { + clearAddressFields(); + } + else if (currentState == "coordInput") + { + txtLong.text = ""; + txtLat.text = ""; + } + + clearMessage(); + graphicsLayer.clear(); + if (locateResultAC) + { + locateResultAC.removeAll(); + } + } + + private function clearAddressFields():void + { + for (var i:int = 0; i < addrObjects.length; i++) + { + var addressInput:UIComponent = addrObjects[i].item; + var addressFieldName:String = addressInput.id; + var customAddressField:AddressField = customAddressFields[addressFieldName]; + + if (addressInput is TextInput) + { + var txtInput:TextInput = addressInput as TextInput; + if (txtInput && txtInput.enabled) //clear only editable fields + { + txtInput.text = customAddressField ? customAddressField.defaultValue : ""; + } + } + else if (addressInput is DropDownList) + { + var selectionInput:DropDownList = addressInput as DropDownList; + if (selectionInput && selectionInput.enabled) //reset only editable fields + { + selectionInput.selectedIndex = findItemIndex(customAddressField.defaultValue, customAddressField.listValues); + } + } + } + } + + private function infoWindowShow():void + { + map.infoWindow.content = popUpRenderer; + map.infoWindow.contentOwner = popUpRenderer.graphic; + map.infoWindow.show(popUpRenderer.graphic.geometry as MapPoint); + } + + private function showMessage(msg:String, swfVisible:Boolean):void + { + txtMessage.text = msg; + swfMessage.visible = swfVisible; + msgVisible = true; + } + + private function clearMessage():void + { + msgVisible = false; + } + + private function wTemplate_widgetClosedHandler(event:Event):void + { + if (graphicsLayer) + { + graphicsLayer.visible = false; + hideInfoWindow(); + } + } + + private function wTemplate_widgetOpenedHandler(event:Event):void + { + if (graphicsLayer) + { + graphicsLayer.visible = true; + } + } + + protected function locateResultDG_locateResultDeleteHandler(event:Event):void + { + var locateResult:LocateResult = ItemRenderer(event.target).data as LocateResult; + for (var i:int = 0; i < locateResultAC.length; ) + { + if (locateResultAC.getItemAt(i) === locateResult) + { + locateResultAC.removeItemAt(i); + + if (locateResultAC.length == 0) + { + clearMessage(); + hideInfoWindow(); + graphicsLayer.clear(); + } + else + { + // if a selected item is deleted, show the 1st one, by default + if (locateResult.selected) + { + locateResultAC.getItemAt(0).selected = true; + showLocation(locateResultAC.getItemAt(0)); + //scroll to the top + locateResultDG.verticalScrollPosition = locateResultDG.layout.getVerticalScrollPositionDelta(NavigationUnit.HOME); + } + } + break; + } + else + { + i++; + } + } + txtMessage.text = locationsLabel + " " + locateResultAC.length; + + if (locateResultAC.length == 0) + { + returnToOriginatingLocateView(); + } + } + + private function returnToOriginatingLocateView():void + { + if (originatingLocateState == "addrInput") + { + showStateAddress(); + } + else if (originatingLocateState == "coordInput") + { + showStateCoordinates(); + } + } + + private function frmLocateAddress_formKeyDownHandler(event:KeyboardEvent):void + { + if (event.keyCode == Keyboard.ENTER) + { + const focusedComponent:IFocusManagerComponent = focusManager.getFocus(); + + if (focusedComponent == addressClearButton) + { + clearAddressFields(); + } + else + { + locateIfAddressFieldInputValid(); + } + } + } + + private function locateIfAddressFieldInputValid():void + { + if (useSingleLine) + { + if (singleLineInputValid()) + { + locate(); + } + } + else + { + if (multiLineInputValid()) + { + locate(); + } + else + { + showRequiredFieldsMessage(); + } + } + } + + private function singleLineInputValid():Boolean + { + return (addrObjects[0].item as TextInput).text != ""; + } + + private function multiLineInputValid():Boolean + { + var isInputValid:Boolean = true; + + for (var i:int = 0; i < addrObjects.length; i++) + { + if (addrObjects[i].item is TextInput) + { + var txtInput:TextInput = addrObjects[i].item as TextInput; + if (addrObjects[i].required && txtInput.text == "") + { + isInputValid = false; + break; + } + } + else if (addrObjects[i].item is Label) + { + var label:Label = addrObjects[i].item as Label; + if (addrObjects[i].required && label.text == "") + { + isInputValid = false; + break; + } + } + } + + return isInputValid; + } + + private function showRequiredFieldsMessage():void + { + var emptyRequiredFieldNames:Array = findEmptyFieldNames(); + if (emptyRequiredFieldNames.length > 0) + { + addressRequiredFieldsLabel.visible = true; + addressRequiredFieldsLabel.includeInLayout = true; + addressRequiredFieldsLabel.text = buildRequiredFieldsMessage(emptyRequiredFieldNames); + } + } + + private function buildRequiredFieldsMessage(emptyRequiredFieldNames:Array):String + { + var requiredFieldsMessage:String; + + if (emptyRequiredFieldNames.length > 1) + { + requiredFieldsMessage = getDefaultString("requiredFields") + " "; + for each (var str:String in emptyRequiredFieldNames) + { + requiredFieldsMessage += str + ", "; + } + } + else + { + requiredFieldsMessage = getDefaultString("requiredField") + " " + emptyRequiredFieldNames[0]; + } + + return requiredFieldsMessage; + } + + private function findEmptyFieldNames():Array + { + var requiredFieldEmpty:Boolean; + var fieldName:String; + var emptyRequiredFieldNames:Array = []; + + for (var i:int = 0; i < addrObjects.length; i++) + { + requiredFieldEmpty = false; + fieldName = addrObjects[i].item.id; + + if (addrObjects[i].item is TextInput) + { + var txtInput:TextInput = addrObjects[i].item as TextInput; + if (addrObjects[i].required && txtInput.text == "") + { + requiredFieldEmpty = true; + } + } + else if (addrObjects[i].item is Label) + { + var label:Label = addrObjects[i].item as Label; + if (addrObjects[i].required && label.text == "") + { + requiredFieldEmpty = true; + } + } + + if (requiredFieldEmpty) + { + emptyRequiredFieldNames.push(fieldName); + } + } + + return emptyRequiredFieldNames; + } + + private function frmLocateCoords_formKeyDownHandler(event:KeyboardEvent):void + { + if (event.keyCode == Keyboard.ENTER) + { + const focusedComponent:IFocusManagerComponent = focusManager.getFocus(); + + if (focusedComponent == clearCoordinatesButton) + { + clearInputFieldsAndResults(); + } + else + { + locateCoordinates(); + } + } + } + + private function hideInfoWindow():void + { + if (map.infoWindow.contentOwner && + ((map.infoWindow.contentOwner is Graphic && Graphic(map.infoWindow.contentOwner).graphicsLayer === graphicsLayer) || map.infoWindow.contentOwner is Map)) + { + map.infoWindow.hide(); + } + } + ]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/widgets/Locate/LocateWidget.xml b/src/widgets/Locate/LocateWidget.xml index 9319128..5fe85c1 100644 --- a/src/widgets/Locate/LocateWidget.xml +++ b/src/widgets/Locate/LocateWidget.xml @@ -1,9 +1,9 @@ - - - http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer - - - + + + http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer + + + diff --git a/src/widgets/MapSwitcher/Basemap.as b/src/widgets/MapSwitcher/Basemap.as index 6b1682a..89cfd33 100644 --- a/src/widgets/MapSwitcher/Basemap.as +++ b/src/widgets/MapSwitcher/Basemap.as @@ -1,19 +1,19 @@ -package widgets.MapSwitcher -{ - -public class Basemap -{ - public var id:String; - public var thumbnail:String; - public var label:String; - public var visible:Boolean; - - public function Basemap(id:String, label:String, thumbnail:String = null, visible:Boolean = false) - { - this.id = id; - this.label = label; - this.thumbnail = thumbnail; - this.visible = visible; - } -} -} +package widgets.MapSwitcher +{ + +public class Basemap +{ + public var id:String; + public var thumbnail:String; + public var label:String; + public var visible:Boolean; + + public function Basemap(id:String, label:String, thumbnail:String = null, visible:Boolean = false) + { + this.id = id; + this.label = label; + this.thumbnail = thumbnail; + this.visible = visible; + } +} +} diff --git a/src/widgets/MapSwitcher/BasemapItemRenderer.mxml b/src/widgets/MapSwitcher/BasemapItemRenderer.mxml index a791a03..fcb70a3 100644 --- a/src/widgets/MapSwitcher/BasemapItemRenderer.mxml +++ b/src/widgets/MapSwitcher/BasemapItemRenderer.mxml @@ -1,58 +1,58 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/widgets/MapSwitcher/MapSwitcherWidget.mxml b/src/widgets/MapSwitcher/MapSwitcherWidget.mxml index da18177..9ff6b9c 100644 --- a/src/widgets/MapSwitcher/MapSwitcherWidget.mxml +++ b/src/widgets/MapSwitcher/MapSwitcherWidget.mxml @@ -1,476 +1,476 @@ - - - - - appWidth) - { - container.x = anchorComponent.x - container.width + anchorComponent.width; - } - else - { - container.x = anchorComponent.x; - } - } - - private function positionContainerVertically(y:Number, anchorComponent:DisplayObject, container:UIComponent):void - { - var appHeight:Number = FlexGlobals.topLevelApplication.height; - if (y > appHeight) - { - container.y = anchorComponent.y + 1 - container.height; - } - else - { - container.y = anchorComponent.height - 1; - } - } - - private function dispatchChangeBasemapEvent():void - { - AppEvent.dispatch(AppEvent.BASEMAP_SWITCH, (basemapSelectionComponent.selectedItem as Basemap).id); - } - - protected function opLayersContainer_clickHandler(event:MouseEvent):void - { - AppEvent.dispatch(AppEvent.TOC_HIDDEN); // always hide the toc layer menu - } - - private function startBasemapsHideTimer():void - { - hideBasemapsTimer.reset(); - hideBasemapsTimer.start(); - } - - private function basemapsButton_rollOverHandler(event:MouseEvent):void - { - var haveBasemapsChanged:Boolean = (previousConfigBasemapsTotal != configData.basemaps.length); - if (haveBasemapsChanged) - { - initBasemapList(); - } - - shouldShowOpLayers = false; - shouldShowBasemaps = true; - hideBasemapsTimer.reset(); - updateContainerPosition(basemapsButton, basemapsContainer); - basemapGallery.setFocus(); - } - - private function basemapsButton_clickHandler(event:MouseEvent):void - { - // a way to check if the click event has been done by keyboard action - if (isNaN(event.localX)) - { - shouldShowBasemaps = !shouldShowBasemaps; - shouldShowOpLayers = false; - if (shouldShowBasemaps) - { - updateContainerPosition(basemapsButton, basemapsContainer); - basemapGallery.setFocus(); - } - } - } - - private function opLayersButton_keyUpHandler(event:KeyboardEvent):void - { - if (event.keyCode == Keyboard.RIGHT) - { - // by pressing right set the focus on basemapsButtonBar or basemapsButton - focusManager.getNextFocusManagerComponent().setFocus(); - } - } - - private function basemapsButton_keyUpHandler(event:KeyboardEvent):void - { - if (event.keyCode == Keyboard.LEFT) - { - // by pressing left set the focus on basemapsButtonBar or opLayersButton - focusManager.getNextFocusManagerComponent(true).setFocus(); - } - else if (!shouldShowBasemaps && event.keyCode == Keyboard.DOWN) - { - shouldShowBasemaps = true; - updateContainerPosition(basemapsButton, basemapsContainer); - basemapGallery.setFocus(); - } - } - - private function escapeKeyUpHandler(event:KeyboardEvent):void - { - if (event.keyCode == Keyboard.ESCAPE) - { - shouldShowBasemaps = shouldShowOpLayers = false; - if (event.currentTarget == opLayersContainer) - { - opLayersButton.setFocus(); - } - else if (event.currentTarget == basemapsContainer) - { - basemapsButton.setFocus(); - } - } - } - - private function keyFocusChangeHandler(event:FocusEvent):void - { - shouldShowBasemaps = shouldShowOpLayers = false; - } - - private function basemapGallery_clickHandler(event:MouseEvent):void - { - var basemapItemRenderer:BasemapItemRenderer = event.target as BasemapItemRenderer; - if (basemapItemRenderer) - { - shouldShowBasemaps = false; - } - } - ]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + appWidth) + { + container.x = anchorComponent.x - container.width + anchorComponent.width; + } + else + { + container.x = anchorComponent.x; + } + } + + private function positionContainerVertically(y:Number, anchorComponent:DisplayObject, container:UIComponent):void + { + var appHeight:Number = FlexGlobals.topLevelApplication.height; + if (y > appHeight) + { + container.y = anchorComponent.y + 1 - container.height; + } + else + { + container.y = anchorComponent.height - 1; + } + } + + private function dispatchChangeBasemapEvent():void + { + AppEvent.dispatch(AppEvent.BASEMAP_SWITCH, (basemapSelectionComponent.selectedItem as Basemap).id); + } + + protected function opLayersContainer_clickHandler(event:MouseEvent):void + { + AppEvent.dispatch(AppEvent.TOC_HIDDEN); // always hide the toc layer menu + } + + private function startBasemapsHideTimer():void + { + hideBasemapsTimer.reset(); + hideBasemapsTimer.start(); + } + + private function basemapsButton_rollOverHandler(event:MouseEvent):void + { + var haveBasemapsChanged:Boolean = (previousConfigBasemapsTotal != configData.basemaps.length); + if (haveBasemapsChanged) + { + initBasemapList(); + } + + shouldShowOpLayers = false; + shouldShowBasemaps = true; + hideBasemapsTimer.reset(); + updateContainerPosition(basemapsButton, basemapsContainer); + basemapGallery.setFocus(); + } + + private function basemapsButton_clickHandler(event:MouseEvent):void + { + // a way to check if the click event has been done by keyboard action + if (isNaN(event.localX)) + { + shouldShowBasemaps = !shouldShowBasemaps; + shouldShowOpLayers = false; + if (shouldShowBasemaps) + { + updateContainerPosition(basemapsButton, basemapsContainer); + basemapGallery.setFocus(); + } + } + } + + private function opLayersButton_keyUpHandler(event:KeyboardEvent):void + { + if (event.keyCode == Keyboard.RIGHT) + { + // by pressing right set the focus on basemapsButtonBar or basemapsButton + focusManager.getNextFocusManagerComponent().setFocus(); + } + } + + private function basemapsButton_keyUpHandler(event:KeyboardEvent):void + { + if (event.keyCode == Keyboard.LEFT) + { + // by pressing left set the focus on basemapsButtonBar or opLayersButton + focusManager.getNextFocusManagerComponent(true).setFocus(); + } + else if (!shouldShowBasemaps && event.keyCode == Keyboard.DOWN) + { + shouldShowBasemaps = true; + updateContainerPosition(basemapsButton, basemapsContainer); + basemapGallery.setFocus(); + } + } + + private function escapeKeyUpHandler(event:KeyboardEvent):void + { + if (event.keyCode == Keyboard.ESCAPE) + { + shouldShowBasemaps = shouldShowOpLayers = false; + if (event.currentTarget == opLayersContainer) + { + opLayersButton.setFocus(); + } + else if (event.currentTarget == basemapsContainer) + { + basemapsButton.setFocus(); + } + } + } + + private function keyFocusChangeHandler(event:FocusEvent):void + { + shouldShowBasemaps = shouldShowOpLayers = false; + } + + private function basemapGallery_clickHandler(event:MouseEvent):void + { + var basemapItemRenderer:BasemapItemRenderer = event.target as BasemapItemRenderer; + if (basemapItemRenderer) + { + shouldShowBasemaps = false; + } + } + ]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/widgets/MapSwitcher/MapSwitcherWidget.xml b/src/widgets/MapSwitcher/MapSwitcherWidget.xml index 3ffe5cf..01e048e 100644 --- a/src/widgets/MapSwitcher/MapSwitcherWidget.xml +++ b/src/widgets/MapSwitcher/MapSwitcherWidget.xml @@ -1,11 +1,11 @@ - - - - - - - - + + + + + + + + diff --git a/src/widgets/Navigation/IconButton.as b/src/widgets/Navigation/IconButton.as index fc8d622..8acb2b2 100644 --- a/src/widgets/Navigation/IconButton.as +++ b/src/widgets/Navigation/IconButton.as @@ -1,41 +1,41 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2010-2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package widgets.Navigation -{ - -import spark.components.Button; - -//icons -[Style(name="iconUp", type="*")] -[Style(name="iconOver", type="*")] -[Style(name="iconDown", type="*")] -[Style(name="iconDisabled", type="*")] - -//paddings -[Style(name="paddingLeft", type="Number")] -[Style(name="paddingRight", type="Number")] -[Style(name="paddingTop", type="Number")] -[Style(name="paddingBottom", type="Number")] - -public class IconButton extends Button -{ - public function IconButton() - { - super(); - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2010-2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package widgets.Navigation +{ + +import spark.components.Button; + +//icons +[Style(name="iconUp", type="*")] +[Style(name="iconOver", type="*")] +[Style(name="iconDown", type="*")] +[Style(name="iconDisabled", type="*")] + +//paddings +[Style(name="paddingLeft", type="Number")] +[Style(name="paddingRight", type="Number")] +[Style(name="paddingTop", type="Number")] +[Style(name="paddingBottom", type="Number")] + +public class IconButton extends Button +{ + public function IconButton() + { + super(); + } +} + +} diff --git a/src/widgets/Navigation/IconButtonSkin.mxml b/src/widgets/Navigation/IconButtonSkin.mxml index b5ee0b1..f5e1d66 100644 --- a/src/widgets/Navigation/IconButtonSkin.mxml +++ b/src/widgets/Navigation/IconButtonSkin.mxml @@ -1,91 +1,91 @@ - - - - - - [HostComponent("spark.components.ToggleButton")] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + [HostComponent("spark.components.ToggleButton")] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/widgets/Navigation/InnerButtonSkin.mxml b/src/widgets/Navigation/InnerButtonSkin.mxml index a2ed2c2..58606eb 100644 --- a/src/widgets/Navigation/InnerButtonSkin.mxml +++ b/src/widgets/Navigation/InnerButtonSkin.mxml @@ -1,105 +1,105 @@ - - - - - - [HostComponent("widgets.Navigation.IconButton")] - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + [HostComponent("widgets.Navigation.IconButton")] + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/widgets/Navigation/NavToolItem.as b/src/widgets/Navigation/NavToolItem.as index 34cc5fc..c7b77b9 100644 --- a/src/widgets/Navigation/NavToolItem.as +++ b/src/widgets/Navigation/NavToolItem.as @@ -1,38 +1,38 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2010-2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package widgets.Navigation -{ - -[Bindable] -public class NavToolItem -{ - public function NavToolItem( - name:String = "", - icon:String = "", - visible:Boolean = false - ) - { - this.toolName = name; - this.toolIcon = icon; - this.toolVisible = visible; - } - - public var toolName:String; - public var toolIcon:String; - public var toolVisible:Boolean; -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2010-2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package widgets.Navigation +{ + +[Bindable] +public class NavToolItem +{ + public function NavToolItem( + name:String = "", + icon:String = "", + visible:Boolean = false + ) + { + this.toolName = name; + this.toolIcon = icon; + this.toolVisible = visible; + } + + public var toolName:String; + public var toolIcon:String; + public var toolVisible:Boolean; +} + +} diff --git a/src/widgets/Navigation/Navigation.mxml b/src/widgets/Navigation/Navigation.mxml index b735d4d..55384a2 100644 --- a/src/widgets/Navigation/Navigation.mxml +++ b/src/widgets/Navigation/Navigation.mxml @@ -1,223 +1,223 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/widgets/Navigation/NavigationSkin.mxml b/src/widgets/Navigation/NavigationSkin.mxml index dfa967c..d7987ef 100644 --- a/src/widgets/Navigation/NavigationSkin.mxml +++ b/src/widgets/Navigation/NavigationSkin.mxml @@ -1,99 +1,99 @@ - - - - - - /** - * A strongly typed property that references the component to which this skin is applied. - */ - [HostComponent("com.esri.ags.components.Navigation")] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + /** + * A strongly typed property that references the component to which this skin is applied. + */ + [HostComponent("com.esri.ags.components.Navigation")] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/widgets/Navigation/NavigationWidget.mxml b/src/widgets/Navigation/NavigationWidget.mxml index 208574b..cf80c91 100644 --- a/src/widgets/Navigation/NavigationWidget.mxml +++ b/src/widgets/Navigation/NavigationWidget.mxml @@ -1,99 +1,99 @@ - - - - - - - - - - - - + + + + + + + + + + + + diff --git a/src/widgets/Navigation/NavigationWidget.xml b/src/widgets/Navigation/NavigationWidget.xml index 522d053..416e5c7 100644 --- a/src/widgets/Navigation/NavigationWidget.xml +++ b/src/widgets/Navigation/NavigationWidget.xml @@ -1,14 +1,14 @@ - - - - - - - - - - - + + + + + + + + + + + diff --git a/src/widgets/Navigation/VerticalButtonBarSkin.mxml b/src/widgets/Navigation/VerticalButtonBarSkin.mxml index 75b41ae..218ef6c 100644 --- a/src/widgets/Navigation/VerticalButtonBarSkin.mxml +++ b/src/widgets/Navigation/VerticalButtonBarSkin.mxml @@ -1,62 +1,62 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/widgets/Navigation/eButtonSkin.mxml b/src/widgets/Navigation/eButtonSkin.mxml index 5ebfc68..6f0be0c 100644 --- a/src/widgets/Navigation/eButtonSkin.mxml +++ b/src/widgets/Navigation/eButtonSkin.mxml @@ -1,58 +1,58 @@ - - - - - [HostComponent("spark.components.Button")] - - - - - - - - - - - - - - - - - - - - + + + + + [HostComponent("spark.components.Button")] + + + + + + + + + + + + + + + + + + + + diff --git a/src/widgets/Navigation/nButtonSkin.mxml b/src/widgets/Navigation/nButtonSkin.mxml index 9b5d393..4cedb34 100644 --- a/src/widgets/Navigation/nButtonSkin.mxml +++ b/src/widgets/Navigation/nButtonSkin.mxml @@ -1,59 +1,59 @@ - - - - - - [HostComponent("spark.components.Button")] - - - - - - - - - - - - - - - - - - - - + + + + + + [HostComponent("spark.components.Button")] + + + + + + + + + + + + + + + + + + + + diff --git a/src/widgets/Navigation/neButtonSkin.mxml b/src/widgets/Navigation/neButtonSkin.mxml index ea74853..898de3f 100644 --- a/src/widgets/Navigation/neButtonSkin.mxml +++ b/src/widgets/Navigation/neButtonSkin.mxml @@ -1,45 +1,45 @@ - - - - - - [HostComponent("spark.components.Button")] - - - - - - - - - - - - - - - + + + + + + [HostComponent("spark.components.Button")] + + + + + + + + + + + + + + + diff --git a/src/widgets/Navigation/nwButtonSkin.mxml b/src/widgets/Navigation/nwButtonSkin.mxml index f56679a..c47ce3e 100644 --- a/src/widgets/Navigation/nwButtonSkin.mxml +++ b/src/widgets/Navigation/nwButtonSkin.mxml @@ -1,45 +1,45 @@ - - - - - - [HostComponent("spark.components.Button")] - - - - - - - - - - - - - - - + + + + + + [HostComponent("spark.components.Button")] + + + + + + + + + + + + + + + diff --git a/src/widgets/Navigation/sButtonSkin.mxml b/src/widgets/Navigation/sButtonSkin.mxml index 08a736e..66e2743 100644 --- a/src/widgets/Navigation/sButtonSkin.mxml +++ b/src/widgets/Navigation/sButtonSkin.mxml @@ -1,59 +1,59 @@ - - - - - - [HostComponent("spark.components.Button")] - - - - - - - - - - - - - - - - - - - - + + + + + + [HostComponent("spark.components.Button")] + + + + + + + + + + + + + + + + + + + + diff --git a/src/widgets/Navigation/seButtonSkin.mxml b/src/widgets/Navigation/seButtonSkin.mxml index b95482e..88b6f76 100644 --- a/src/widgets/Navigation/seButtonSkin.mxml +++ b/src/widgets/Navigation/seButtonSkin.mxml @@ -1,45 +1,45 @@ - - - - - - [HostComponent("spark.components.Button")] - - - - - - - - - - - - - - - + + + + + + [HostComponent("spark.components.Button")] + + + + + + + + + + + + + + + diff --git a/src/widgets/Navigation/swButtonSkin.mxml b/src/widgets/Navigation/swButtonSkin.mxml index db4a2fd..7a366fc 100644 --- a/src/widgets/Navigation/swButtonSkin.mxml +++ b/src/widgets/Navigation/swButtonSkin.mxml @@ -1,45 +1,45 @@ - - - - - - [HostComponent("spark.components.Button")] - - - - - - - - - - - - - - - + + + + + + [HostComponent("spark.components.Button")] + + + + + + + + + + + + + + + diff --git a/src/widgets/Navigation/wButtonSkin.mxml b/src/widgets/Navigation/wButtonSkin.mxml index 2fcd3b0..2861f78 100644 --- a/src/widgets/Navigation/wButtonSkin.mxml +++ b/src/widgets/Navigation/wButtonSkin.mxml @@ -1,58 +1,58 @@ - - - - - [HostComponent("spark.components.Button")] - - - - - - - - - - - - - - - - - - - - + + + + + [HostComponent("spark.components.Button")] + + + + + + + + + + + + + + + + + + + + diff --git a/src/widgets/OverviewMap/ExpansionDirection.as b/src/widgets/OverviewMap/ExpansionDirection.as index 00d5aed..89e01f1 100644 --- a/src/widgets/OverviewMap/ExpansionDirection.as +++ b/src/widgets/OverviewMap/ExpansionDirection.as @@ -1,27 +1,27 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package widgets.OverviewMap -{ - -public class ExpansionDirection -{ - public static const UP_LEFT:String = "UP_LEFT"; - public static const UP_RIGHT:String = "UP_RIGHT"; - public static const DOWN_LEFT:String = "DOWN_LEFT"; - public static const DOWN_RIGHT:String = "DOWN_RIGHT"; -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package widgets.OverviewMap +{ + +public class ExpansionDirection +{ + public static const UP_LEFT:String = "UP_LEFT"; + public static const UP_RIGHT:String = "UP_RIGHT"; + public static const DOWN_LEFT:String = "DOWN_LEFT"; + public static const DOWN_RIGHT:String = "DOWN_RIGHT"; +} + +} diff --git a/src/widgets/OverviewMap/OverviewMapComponent.mxml b/src/widgets/OverviewMap/OverviewMapComponent.mxml index bdecd0d..f6059a6 100644 --- a/src/widgets/OverviewMap/OverviewMapComponent.mxml +++ b/src/widgets/OverviewMap/OverviewMapComponent.mxml @@ -1,645 +1,645 @@ - - - - - - - 0) - { - setInterval(dynLayer.refresh, autoRefresh * 1000); - } - if (visibleLayers) - { - var vizLayers:Array = visibleLayers.split(","); - dynLayer.visibleLayers = new ArrayCollection(vizLayers); - } - if (proxyUrl && useProxy) - { - dynLayer.proxyURL = proxyUrl; - } - layerToAdd = dynlayer; - break; - } - case "feature": - { - var featureLayer:FeatureLayer = new FeatureLayer(urlBaseMap); - featureLayer.alpha = alpha; - featureLayer.id = label; - featureLayer.visible = visible; - featureLayer.outFields = [ '*' ]; - featureLayer.token = token; - featureLayer.useAMF = useamf; - if (mode) - { - featureLayer.mode = mode; - } - if (proxyUrl && useProxy) - { - featureLayer.proxyURL = proxyUrl; - } - if (definitionExpression && definitionExpression != "") - { - featureLayer.definitionExpression = definitionExpression; - } - layerToAdd = featureLayer; - break; - } - case "bing": - { - var veTiledLayer:VETiledLayer = new VETiledLayer(); - veTiledLayer.alpha = alpha; - veTiledLayer.id = label; - veTiledLayer.visible = visible; - veTiledLayer.key = bingMapKey; - if (style) - { - veTiledLayer.mapStyle = style; - } - if (culture) - { - veTiledLayer.culture = culture; - } - layerToAdd = veTiledLayer; - break; - } - case "image": - { - var imgLayer:ArcGISImageServiceLayer = new ArcGISImageServiceLayer(urlBaseMap); - imgLayer.alpha = alpha; - imgLayer.id = label; - imgLayer.visible = visible; - imgLayer.noData = noData; - imgLayer.token = token; - if (proxyUrl && useProxy) - { - imgLayer.proxyURL = proxyUrl; - } - layerToAdd = imgLayer; - break; - } - case "arcims": - { - var arcimsLayer:ArcIMSMapServiceLayer = new ArcIMSMapServiceLayer(); - arcimsLayer.alpha = alpha; - arcimsLayer.id = label; - arcimsLayer.visible = visible; - arcimsLayer.serviceHost = serviceHost; - arcimsLayer.serviceName = serviceName; - if (autoRefresh > 0) - { - setInterval(arcimsLayer.refresh, autoRefresh * 1000); - } - if (visibleLayers) - { - var visLayers:Array = visibleLayers.split(","); - arcimsLayer.visibleLayers = new ArrayCollection(visLayers); - } - if (proxyUrl && useProxy) - { - arcimsLayer.proxyURL = proxyUrl; - } - layerToAdd = arcimsLayer; - break; - } - case "osm": - { - var osmLayer:OpenStreetMapLayer = new OpenStreetMapLayer(); - osmLayer.alpha = alpha; - osmLayer.id = label; - osmLayer.name = label; - osmLayer.visible = visible; - layerToAdd = osmLayer; - break; - } - } - - if (layerToAdd) - { - overviewMap.addLayer(layerToAdd); - basemapLayerObjectToLayer[basemapLayerObject] = layerToAdd; - } - } - AppEvent.addListener(AppEvent.BASEMAP_SWITCH, viewContainer_basemapSwitchHandler); - } - // collapsible - if (configXML.collapsible.length() > 0) - { - isCollapsible = configXML.collapsible == "true"; - } - if (isCollapsible) - { - currentState = configXML.initialstate == "open" ? "expanded" : "collapsed"; - } - else - { - currentState = "noncollapsible"; - } - if (currentState == "collapsed") // turn layer(s) off if component is collapsed - { - for each (var layer:Layer in overviewMap.layers) - { - layer.visible = false; - } - } - viewBox.visible = true; - borderRect1.visible = true; - } - } - - private function updateOverviewExtentFromMap():void - { - overviewMap.extent = map.extent.expand(3); - overviewGraphic.geometry = map.visibleArea; - } - - private function updateMapExtentFromOverview():void - { - map.center = overviewGraphic.geometry.extent.center; - } - - private function map_extentChangeHandler(event:ExtentEvent):void - { - updateOverviewExtentFromMap(); - updateOverviewGraphicVisibility(); - } - - private function updateOverviewGraphicVisibility():void - { - //hide overview box if larger than overview map - overviewGraphic.visible = overviewMap.extent.contains(overviewGraphic.geometry); - } - - private function overviewMap_loadHandler(event:MapEvent):void - { - graphicsLayer.name = "overviewMapGraphicsLayer"; - graphicsLayer.symbol = currentExtentSym; - overviewMap.addLayer(graphicsLayer); - - overviewGraphic.geometry = map.extent; - overviewGraphic.addEventListener(MouseEvent.MOUSE_DOWN, overviewGraphic_mouseDownHandler); - - //update map extent when mouse moves out of the overview map - overviewMap.addEventListener(MouseEvent.ROLL_OUT, overviewMap_mouseRollOutHandler); - - graphicsLayer.add(overviewGraphic); - - map.addEventListener(ExtentEvent.EXTENT_CHANGE, map_extentChangeHandler); - updateOverviewExtentFromMap(); - updateOverviewGraphicVisibility(); - } - - private function overviewMap_mouseRollOutHandler(event:MouseEvent):void - { - overviewMap.removeEventListener(MouseEvent.MOUSE_MOVE, overviewMap_mouseMoveHandler); - overviewMap.removeEventListener(MouseEvent.MOUSE_UP, overviewMap_mouseUpHandler); - overviewGraphic.addEventListener(MouseEvent.MOUSE_DOWN, overviewGraphic_mouseDownHandler); - - if (hasOverviewGraphicBeenMoved) - { - hasOverviewGraphicBeenMoved = false; - updateMapExtentFromOverview(); - } - } - - private function overviewGraphic_mouseDownHandler(event:MouseEvent):void - { - overviewGraphic.removeEventListener(MouseEvent.MOUSE_DOWN, overviewGraphic_mouseDownHandler); - overviewMap.addEventListener(MouseEvent.MOUSE_UP, overviewMap_mouseUpHandler); - overviewMap.addEventListener(MouseEvent.MOUSE_MOVE, overviewMap_mouseMoveHandler); - - var overviewCenterMapPoint:MapPoint = overviewGraphic.geometry.extent.center; - var mouseMapPoint:MapPoint = overviewMap.toMapFromStage(event.stageX, event.stageY); - lastMouseMapX = mouseMapPoint.x; - lastMouseMapY = mouseMapPoint.y; - } - - private function overviewMap_mouseMoveHandler(event:MouseEvent):void - { - hasOverviewGraphicBeenMoved = true; - - var overviewPolygon:Polygon = overviewGraphic.geometry as Polygon; - var overviewCenterMapPoint:MapPoint = overviewPolygon.extent.center; - - var mouseMapPoint:MapPoint = overviewMap.toMapFromStage(event.stageX, event.stageY); - var deltaMapX:Number = mouseMapPoint.x - lastMouseMapX; - var deltaMapY:Number = mouseMapPoint.y - lastMouseMapY; - lastMouseMapX = mouseMapPoint.x; - lastMouseMapY = mouseMapPoint.y; - - var ring:Array = overviewPolygon.removeRing(0)[0]; - for (var iMapPoint:int = 4; iMapPoint >= 0; iMapPoint--) - { - ring[iMapPoint].x += deltaMapX; - ring[iMapPoint].y += deltaMapY; - } - overviewPolygon.addRing(ring); - - overviewGraphic.refresh(); - } - - private function overviewMap_mouseUpHandler(event:MouseEvent):void - { - overviewMap.removeEventListener(MouseEvent.MOUSE_MOVE, overviewMap_mouseMoveHandler); - overviewMap.removeEventListener(MouseEvent.MOUSE_UP, overviewMap_mouseUpHandler); - overviewGraphic.addEventListener(MouseEvent.MOUSE_DOWN, overviewGraphic_mouseDownHandler); - - if (hasOverviewGraphicBeenMoved) - { - hasOverviewGraphicBeenMoved = false; - updateMapExtentFromOverview(); - } - } - - private function viewContainer_basemapSwitchHandler(event:AppEvent):void - { - baseMapSwitched = true; - currentBaseMapId = event.data as String; - if (currentState == "expanded" || currentState == "noncollapsible") - { - showCurrentBaseMap(currentBaseMapId); - } - } - - private function showCurrentBaseMap(currentBaseMapId:String):void - { - var configBasemaps:Array = configData.basemaps; - - if (currentBaseMapId) - { - var selectedLabel:String; - for (var i:uint = 0; i < configBasemaps.length; i++) - { - if (configBasemaps[i].id == currentBaseMapId) - { - selectedLabel = configBasemaps[i].label; - break; - } - } - if (selectedLabel) - { - // turn on the selected basemap layers (more than one layer can have the same label) - var layers:ArrayCollection = overviewMap.layers as ArrayCollection; - for (i = 0; i < configBasemaps.length; i++) - { - var basemapLabel:String = configBasemaps[i].label; - for each (var layer:Layer in layers) - { - if (layer.id == basemapLabel) - { - if (layer.id == selectedLabel) - { - layer.visible = true; - } - else - { - layer.visible = false; - } - } - } - } - } - } - } - - private function sequence_effectStartHandler(event:EffectEvent):void - { - if (currentState == "expanded" || currentState == "noncollapsible") - { - if (useBaseMapLayer) - { - if (baseMapSwitched) - { - showCurrentBaseMap(currentBaseMapId); - } - else - { - // on start up and if basemap is not switched - for (var basemapLayerObject:Object in basemapLayerObjectToLayer) - { - var layer:Layer = basemapLayerObjectToLayer[basemapLayerObject]; - layer.visible = basemapLayerObject.visible; - } - } - } - else - { - for each (var overviewMapLayer:Layer in overviewMap.layers) - { - overviewMapLayer.visible = true; - } - } - } - } - - private function sequence_effectEndHandler(event:EffectEvent):void - { - if (currentState == "collapsed") // turn layer(s) off if component is collapsed - { - for each (var layer:Layer in overviewMap.layers) - { - if (!(layer is GraphicsLayer && layer.name == "overviewMapGraphicsLayer")) - { - layer.visible = false; - } - } - } - } - ]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + 0) + { + setInterval(dynLayer.refresh, autoRefresh * 1000); + } + if (visibleLayers) + { + var vizLayers:Array = visibleLayers.split(","); + dynLayer.visibleLayers = new ArrayCollection(vizLayers); + } + if (proxyUrl && useProxy) + { + dynLayer.proxyURL = proxyUrl; + } + layerToAdd = dynlayer; + break; + } + case "feature": + { + var featureLayer:FeatureLayer = new FeatureLayer(urlBaseMap); + featureLayer.alpha = alpha; + featureLayer.id = label; + featureLayer.visible = visible; + featureLayer.outFields = [ '*' ]; + featureLayer.token = token; + featureLayer.useAMF = useamf; + if (mode) + { + featureLayer.mode = mode; + } + if (proxyUrl && useProxy) + { + featureLayer.proxyURL = proxyUrl; + } + if (definitionExpression && definitionExpression != "") + { + featureLayer.definitionExpression = definitionExpression; + } + layerToAdd = featureLayer; + break; + } + case "bing": + { + var veTiledLayer:VETiledLayer = new VETiledLayer(); + veTiledLayer.alpha = alpha; + veTiledLayer.id = label; + veTiledLayer.visible = visible; + veTiledLayer.key = bingMapKey; + if (style) + { + veTiledLayer.mapStyle = style; + } + if (culture) + { + veTiledLayer.culture = culture; + } + layerToAdd = veTiledLayer; + break; + } + case "image": + { + var imgLayer:ArcGISImageServiceLayer = new ArcGISImageServiceLayer(urlBaseMap); + imgLayer.alpha = alpha; + imgLayer.id = label; + imgLayer.visible = visible; + imgLayer.noData = noData; + imgLayer.token = token; + if (proxyUrl && useProxy) + { + imgLayer.proxyURL = proxyUrl; + } + layerToAdd = imgLayer; + break; + } + case "arcims": + { + var arcimsLayer:ArcIMSMapServiceLayer = new ArcIMSMapServiceLayer(); + arcimsLayer.alpha = alpha; + arcimsLayer.id = label; + arcimsLayer.visible = visible; + arcimsLayer.serviceHost = serviceHost; + arcimsLayer.serviceName = serviceName; + if (autoRefresh > 0) + { + setInterval(arcimsLayer.refresh, autoRefresh * 1000); + } + if (visibleLayers) + { + var visLayers:Array = visibleLayers.split(","); + arcimsLayer.visibleLayers = new ArrayCollection(visLayers); + } + if (proxyUrl && useProxy) + { + arcimsLayer.proxyURL = proxyUrl; + } + layerToAdd = arcimsLayer; + break; + } + case "osm": + { + var osmLayer:OpenStreetMapLayer = new OpenStreetMapLayer(); + osmLayer.alpha = alpha; + osmLayer.id = label; + osmLayer.name = label; + osmLayer.visible = visible; + layerToAdd = osmLayer; + break; + } + } + + if (layerToAdd) + { + overviewMap.addLayer(layerToAdd); + basemapLayerObjectToLayer[basemapLayerObject] = layerToAdd; + } + } + AppEvent.addListener(AppEvent.BASEMAP_SWITCH, viewContainer_basemapSwitchHandler); + } + // collapsible + if (configXML.collapsible.length() > 0) + { + isCollapsible = configXML.collapsible == "true"; + } + if (isCollapsible) + { + currentState = configXML.initialstate == "open" ? "expanded" : "collapsed"; + } + else + { + currentState = "noncollapsible"; + } + if (currentState == "collapsed") // turn layer(s) off if component is collapsed + { + for each (var layer:Layer in overviewMap.layers) + { + layer.visible = false; + } + } + viewBox.visible = true; + borderRect1.visible = true; + } + } + + private function updateOverviewExtentFromMap():void + { + overviewMap.extent = map.extent.expand(3); + overviewGraphic.geometry = map.visibleArea; + } + + private function updateMapExtentFromOverview():void + { + map.center = overviewGraphic.geometry.extent.center; + } + + private function map_extentChangeHandler(event:ExtentEvent):void + { + updateOverviewExtentFromMap(); + updateOverviewGraphicVisibility(); + } + + private function updateOverviewGraphicVisibility():void + { + //hide overview box if larger than overview map + overviewGraphic.visible = overviewMap.extent.contains(overviewGraphic.geometry); + } + + private function overviewMap_loadHandler(event:MapEvent):void + { + graphicsLayer.name = "overviewMapGraphicsLayer"; + graphicsLayer.symbol = currentExtentSym; + overviewMap.addLayer(graphicsLayer); + + overviewGraphic.geometry = map.extent; + overviewGraphic.addEventListener(MouseEvent.MOUSE_DOWN, overviewGraphic_mouseDownHandler); + + //update map extent when mouse moves out of the overview map + overviewMap.addEventListener(MouseEvent.ROLL_OUT, overviewMap_mouseRollOutHandler); + + graphicsLayer.add(overviewGraphic); + + map.addEventListener(ExtentEvent.EXTENT_CHANGE, map_extentChangeHandler); + updateOverviewExtentFromMap(); + updateOverviewGraphicVisibility(); + } + + private function overviewMap_mouseRollOutHandler(event:MouseEvent):void + { + overviewMap.removeEventListener(MouseEvent.MOUSE_MOVE, overviewMap_mouseMoveHandler); + overviewMap.removeEventListener(MouseEvent.MOUSE_UP, overviewMap_mouseUpHandler); + overviewGraphic.addEventListener(MouseEvent.MOUSE_DOWN, overviewGraphic_mouseDownHandler); + + if (hasOverviewGraphicBeenMoved) + { + hasOverviewGraphicBeenMoved = false; + updateMapExtentFromOverview(); + } + } + + private function overviewGraphic_mouseDownHandler(event:MouseEvent):void + { + overviewGraphic.removeEventListener(MouseEvent.MOUSE_DOWN, overviewGraphic_mouseDownHandler); + overviewMap.addEventListener(MouseEvent.MOUSE_UP, overviewMap_mouseUpHandler); + overviewMap.addEventListener(MouseEvent.MOUSE_MOVE, overviewMap_mouseMoveHandler); + + var overviewCenterMapPoint:MapPoint = overviewGraphic.geometry.extent.center; + var mouseMapPoint:MapPoint = overviewMap.toMapFromStage(event.stageX, event.stageY); + lastMouseMapX = mouseMapPoint.x; + lastMouseMapY = mouseMapPoint.y; + } + + private function overviewMap_mouseMoveHandler(event:MouseEvent):void + { + hasOverviewGraphicBeenMoved = true; + + var overviewPolygon:Polygon = overviewGraphic.geometry as Polygon; + var overviewCenterMapPoint:MapPoint = overviewPolygon.extent.center; + + var mouseMapPoint:MapPoint = overviewMap.toMapFromStage(event.stageX, event.stageY); + var deltaMapX:Number = mouseMapPoint.x - lastMouseMapX; + var deltaMapY:Number = mouseMapPoint.y - lastMouseMapY; + lastMouseMapX = mouseMapPoint.x; + lastMouseMapY = mouseMapPoint.y; + + var ring:Array = overviewPolygon.removeRing(0)[0]; + for (var iMapPoint:int = 4; iMapPoint >= 0; iMapPoint--) + { + ring[iMapPoint].x += deltaMapX; + ring[iMapPoint].y += deltaMapY; + } + overviewPolygon.addRing(ring); + + overviewGraphic.refresh(); + } + + private function overviewMap_mouseUpHandler(event:MouseEvent):void + { + overviewMap.removeEventListener(MouseEvent.MOUSE_MOVE, overviewMap_mouseMoveHandler); + overviewMap.removeEventListener(MouseEvent.MOUSE_UP, overviewMap_mouseUpHandler); + overviewGraphic.addEventListener(MouseEvent.MOUSE_DOWN, overviewGraphic_mouseDownHandler); + + if (hasOverviewGraphicBeenMoved) + { + hasOverviewGraphicBeenMoved = false; + updateMapExtentFromOverview(); + } + } + + private function viewContainer_basemapSwitchHandler(event:AppEvent):void + { + baseMapSwitched = true; + currentBaseMapId = event.data as String; + if (currentState == "expanded" || currentState == "noncollapsible") + { + showCurrentBaseMap(currentBaseMapId); + } + } + + private function showCurrentBaseMap(currentBaseMapId:String):void + { + var configBasemaps:Array = configData.basemaps; + + if (currentBaseMapId) + { + var selectedLabel:String; + for (var i:uint = 0; i < configBasemaps.length; i++) + { + if (configBasemaps[i].id == currentBaseMapId) + { + selectedLabel = configBasemaps[i].label; + break; + } + } + if (selectedLabel) + { + // turn on the selected basemap layers (more than one layer can have the same label) + var layers:ArrayCollection = overviewMap.layers as ArrayCollection; + for (i = 0; i < configBasemaps.length; i++) + { + var basemapLabel:String = configBasemaps[i].label; + for each (var layer:Layer in layers) + { + if (layer.id == basemapLabel) + { + if (layer.id == selectedLabel) + { + layer.visible = true; + } + else + { + layer.visible = false; + } + } + } + } + } + } + } + + private function sequence_effectStartHandler(event:EffectEvent):void + { + if (currentState == "expanded" || currentState == "noncollapsible") + { + if (useBaseMapLayer) + { + if (baseMapSwitched) + { + showCurrentBaseMap(currentBaseMapId); + } + else + { + // on start up and if basemap is not switched + for (var basemapLayerObject:Object in basemapLayerObjectToLayer) + { + var layer:Layer = basemapLayerObjectToLayer[basemapLayerObject]; + layer.visible = basemapLayerObject.visible; + } + } + } + else + { + for each (var overviewMapLayer:Layer in overviewMap.layers) + { + overviewMapLayer.visible = true; + } + } + } + } + + private function sequence_effectEndHandler(event:EffectEvent):void + { + if (currentState == "collapsed") // turn layer(s) off if component is collapsed + { + for each (var layer:Layer in overviewMap.layers) + { + if (!(layer is GraphicsLayer && layer.name == "overviewMapGraphicsLayer")) + { + layer.visible = false; + } + } + } + } + ]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/widgets/OverviewMap/OverviewMapWidget.mxml b/src/widgets/OverviewMap/OverviewMapWidget.mxml index 3a165d5..143e2e8 100644 --- a/src/widgets/OverviewMap/OverviewMapWidget.mxml +++ b/src/widgets/OverviewMap/OverviewMapWidget.mxml @@ -1,81 +1,81 @@ - - - - - - - - - - - - + + + + + + + + + + + + diff --git a/src/widgets/OverviewMap/OverviewMapWidget.xml b/src/widgets/OverviewMap/OverviewMapWidget.xml index d3f88a4..4ef5851 100644 --- a/src/widgets/OverviewMap/OverviewMapWidget.xml +++ b/src/widgets/OverviewMap/OverviewMapWidget.xml @@ -1,16 +1,16 @@ - - - - closed - - - - - + + + + closed + + + + + diff --git a/src/widgets/Print/ExportWebMapForm.mxml b/src/widgets/Print/ExportWebMapForm.mxml index f12d972..5af0bdd 100644 --- a/src/widgets/Print/ExportWebMapForm.mxml +++ b/src/widgets/Print/ExportWebMapForm.mxml @@ -1,520 +1,520 @@ - - - - 0) - { - var totalLayoutTemplates:int = layoutTemplates.length; - var layoutTemplate:String; - //removing backwards to avoid problems altering index & items - for (var i:int = totalLayoutTemplates - 1; i >= 0; i--) - { - layoutTemplate = layoutTemplates.getItemAt(i) as String; - if (layoutTemplateWhitelist.indexOf(layoutTemplate) == -1) - { - layoutTemplates.removeItemAt(i); - } - } - } - - var configDefaultLayoutTemplate:String = configXML.layouttemplates.@defaultvalue[0]; - if (configDefaultLayoutTemplate && isContained(configDefaultLayoutTemplate, layoutTemplates)) - { - printParameters.layoutTemplate = configDefaultLayoutTemplate; - } - - layoutTemplatesVisibility = configXML.layouttemplates[0].@visible[0] != "false"; - } - shouldShowTemplateOptions = layoutTemplatesVisibility && (layoutTemplates && layoutTemplates.length > 1); - - var shouldUseServiceInfoDefault:Boolean = (!printParameters.layoutTemplate - && serviceInfo.defaultLayoutTemplate - && isContained(serviceInfo.defaultLayoutTemplate, layoutTemplates)); - if (shouldUseServiceInfoDefault) - { - layoutTemplatesDDL.selectedItem = serviceInfo.defaultLayoutTemplate; - } - else if (printParameters.layoutTemplate) - { - layoutTemplatesDDL.selectedItem = printParameters.layoutTemplate; - } - } - - private function isContained(item:*, list:IList):Boolean - { - var listContents:Array = list.toArray(); - return listContents.indexOf(item) > -1; - } - - private function initFormats(serviceInfo:PrintServiceInfo):void - { - var formatsVisibility:Boolean = true; - formatsFI.label = configXML.labels.formatslabel[0] || hostBaseWidget.getDefaultString("printFormatsLabel"); - var formats:IList = serviceInfo.formats; - - if (configXML.formats[0]) - { - var formatTemplateWhitelist:Array = []; - for each (var formatXML:XML in configXML.formats.format) - { - formatTemplateWhitelist.push(formatXML.toString()); - } - - if (formatTemplateWhitelist.length > 0) - { - var totalFormats:int = formats.length; - var format:String; - //removing backwards to avoid problems altering index & items - for (var i:int = totalFormats - 1; i >= 0; i--) - { - format = formats.getItemAt(i) as String; - if (formatTemplateWhitelist.indexOf(format) == -1) - { - formats.removeItemAt(i); - } - } - } - - var configDefaultFormat:String = configXML.formats.@defaultvalue[0]; - if (configDefaultFormat && isContained(configDefaultFormat, formats)) - { - printParameters.format = configDefaultFormat; - } - - formatsVisibility = configXML.formats[0].@visible[0] != "false"; - } - shouldShowFormatOptions = formatsVisibility && (formats && formats.length > 1); - - var shouldUseServiceInfoDefault:Boolean = (!printParameters.format - && serviceInfo.defaultFormat - && isContained(serviceInfo.defaultFormat, formats)); - if (shouldUseServiceInfoDefault) - { - formatsDDL.selectedItem = serviceInfo.defaultFormat; - } - else if (printParameters.format) - { - formatsDDL.selectedItem = printParameters.format; - } - } - - private function printTask_jobCompleteHandler(event:PrintEvent):void - { - var jobInfo:JobInfo = event.jobInfo; - if (jobInfo.jobStatus == JobInfo.STATUS_SUCCEEDED) - { - printTask.getResultData(jobInfo.jobId); - } - else - { - hostBaseWidget.showError(jobInfo.jobStatus); - } - } - ]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + 0) + { + var totalLayoutTemplates:int = layoutTemplates.length; + var layoutTemplate:String; + //removing backwards to avoid problems altering index & items + for (var i:int = totalLayoutTemplates - 1; i >= 0; i--) + { + layoutTemplate = layoutTemplates.getItemAt(i) as String; + if (layoutTemplateWhitelist.indexOf(layoutTemplate) == -1) + { + layoutTemplates.removeItemAt(i); + } + } + } + + var configDefaultLayoutTemplate:String = configXML.layouttemplates.@defaultvalue[0]; + if (configDefaultLayoutTemplate && isContained(configDefaultLayoutTemplate, layoutTemplates)) + { + printParameters.layoutTemplate = configDefaultLayoutTemplate; + } + + layoutTemplatesVisibility = configXML.layouttemplates[0].@visible[0] != "false"; + } + shouldShowTemplateOptions = layoutTemplatesVisibility && (layoutTemplates && layoutTemplates.length > 1); + + var shouldUseServiceInfoDefault:Boolean = (!printParameters.layoutTemplate + && serviceInfo.defaultLayoutTemplate + && isContained(serviceInfo.defaultLayoutTemplate, layoutTemplates)); + if (shouldUseServiceInfoDefault) + { + layoutTemplatesDDL.selectedItem = serviceInfo.defaultLayoutTemplate; + } + else if (printParameters.layoutTemplate) + { + layoutTemplatesDDL.selectedItem = printParameters.layoutTemplate; + } + } + + private function isContained(item:*, list:IList):Boolean + { + var listContents:Array = list.toArray(); + return listContents.indexOf(item) > -1; + } + + private function initFormats(serviceInfo:PrintServiceInfo):void + { + var formatsVisibility:Boolean = true; + formatsFI.label = configXML.labels.formatslabel[0] || hostBaseWidget.getDefaultString("printFormatsLabel"); + var formats:IList = serviceInfo.formats; + + if (configXML.formats[0]) + { + var formatTemplateWhitelist:Array = []; + for each (var formatXML:XML in configXML.formats.format) + { + formatTemplateWhitelist.push(formatXML.toString()); + } + + if (formatTemplateWhitelist.length > 0) + { + var totalFormats:int = formats.length; + var format:String; + //removing backwards to avoid problems altering index & items + for (var i:int = totalFormats - 1; i >= 0; i--) + { + format = formats.getItemAt(i) as String; + if (formatTemplateWhitelist.indexOf(format) == -1) + { + formats.removeItemAt(i); + } + } + } + + var configDefaultFormat:String = configXML.formats.@defaultvalue[0]; + if (configDefaultFormat && isContained(configDefaultFormat, formats)) + { + printParameters.format = configDefaultFormat; + } + + formatsVisibility = configXML.formats[0].@visible[0] != "false"; + } + shouldShowFormatOptions = formatsVisibility && (formats && formats.length > 1); + + var shouldUseServiceInfoDefault:Boolean = (!printParameters.format + && serviceInfo.defaultFormat + && isContained(serviceInfo.defaultFormat, formats)); + if (shouldUseServiceInfoDefault) + { + formatsDDL.selectedItem = serviceInfo.defaultFormat; + } + else if (printParameters.format) + { + formatsDDL.selectedItem = printParameters.format; + } + } + + private function printTask_jobCompleteHandler(event:PrintEvent):void + { + var jobInfo:JobInfo = event.jobInfo; + if (jobInfo.jobStatus == JobInfo.STATUS_SUCCEEDED) + { + printTask.getResultData(jobInfo.jobId); + } + else + { + hostBaseWidget.showError(jobInfo.jobStatus); + } + } + ]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/widgets/Print/IPrintWidgetComponent.as b/src/widgets/Print/IPrintWidgetComponent.as index 2decd42..c9cb752 100644 --- a/src/widgets/Print/IPrintWidgetComponent.as +++ b/src/widgets/Print/IPrintWidgetComponent.as @@ -1,16 +1,16 @@ -package widgets.Print -{ - -import com.esri.viewer.BaseWidget; - -import mx.core.IVisualElement; - -public interface IPrintWidgetComponent extends IVisualElement -{ - function get configXML():XML; - function set configXML(value:XML):void; - - function get hostBaseWidget():BaseWidget; - function set hostBaseWidget(value:BaseWidget):void; -} -} +package widgets.Print +{ + +import com.esri.viewer.BaseWidget; + +import mx.core.IVisualElement; + +public interface IPrintWidgetComponent extends IVisualElement +{ + function get configXML():XML; + function set configXML(value:XML):void; + + function get hostBaseWidget():BaseWidget; + function set hostBaseWidget(value:BaseWidget):void; +} +} diff --git a/src/widgets/Print/PrintWidget.mxml b/src/widgets/Print/PrintWidget.mxml index b09e7a6..5a2d9de 100644 --- a/src/widgets/Print/PrintWidget.mxml +++ b/src/widgets/Print/PrintWidget.mxml @@ -1,59 +1,59 @@ - - - - - 0); - var printForm:IPrintWidgetComponent; - printForm = hasTaskURL ? new ExportWebMapForm() : new ScreenPrintForm(); - printForm.hostBaseWidget = this; - printForm.configXML = configXML; - wTemplate.addElement(printForm); - } - } - ]]> - - - - + + + + + 0); + var printForm:IPrintWidgetComponent; + printForm = hasTaskURL ? new ExportWebMapForm() : new ScreenPrintForm(); + printForm.hostBaseWidget = this; + printForm.configXML = configXML; + wTemplate.addElement(printForm); + } + } + ]]> + + + + diff --git a/src/widgets/Print/PrintWidget.xml b/src/widgets/Print/PrintWidget.xml index b6f10fb..92e932d 100644 --- a/src/widgets/Print/PrintWidget.xml +++ b/src/widgets/Print/PrintWidget.xml @@ -1,10 +1,10 @@ - - - - http://sampleserver6.arcgisonline.com/ArcGIS/rest/services/Utilities/PrintingTools/GPServer/Export%20Web%20Map%20Task - - - + + + + http://sampleserver6.arcgisonline.com/ArcGIS/rest/services/Utilities/PrintingTools/GPServer/Export%20Web%20Map%20Task + + + diff --git a/src/widgets/Print/ScreenPrintForm.mxml b/src/widgets/Print/ScreenPrintForm.mxml index 54374d3..7e0bc72 100644 --- a/src/widgets/Print/ScreenPrintForm.mxml +++ b/src/widgets/Print/ScreenPrintForm.mxml @@ -1,171 +1,171 @@ - - - - .PrintBox - { - color: #000000; /* for the printed page */ - } - - - - - - - - - - - - - - - + + + + .PrintBox + { + color: #000000; /* for the printed page */ + } + + + + + + + + + + + + + + + diff --git a/src/widgets/Query/QueryResultDataGroup.as b/src/widgets/Query/QueryResultDataGroup.as index f00c64a..b5d318e 100644 --- a/src/widgets/Query/QueryResultDataGroup.as +++ b/src/widgets/Query/QueryResultDataGroup.as @@ -1,38 +1,38 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2010-2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package widgets.Query -{ - -import mx.core.ClassFactory; - -import spark.components.DataGroup; - -// these events bubble up from the QueryResultItemRenderer -[Event(name="queryResultClick", type="flash.events.Event")] -[Event(name="queryResultMouseOver", type="flash.events.Event")] -[Event(name="queryResultMouseOut", type="flash.events.Event")] - -public class QueryResultDataGroup extends DataGroup -{ - public function QueryResultDataGroup() - { - super(); - - this.itemRenderer = new ClassFactory(QueryResultItemRenderer); - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2010-2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package widgets.Query +{ + +import mx.core.ClassFactory; + +import spark.components.DataGroup; + +// these events bubble up from the QueryResultItemRenderer +[Event(name="queryResultClick", type="flash.events.Event")] +[Event(name="queryResultMouseOver", type="flash.events.Event")] +[Event(name="queryResultMouseOut", type="flash.events.Event")] + +public class QueryResultDataGroup extends DataGroup +{ + public function QueryResultDataGroup() + { + super(); + + this.itemRenderer = new ClassFactory(QueryResultItemRenderer); + } +} + +} diff --git a/src/widgets/Query/QueryResultItemRenderer.mxml b/src/widgets/Query/QueryResultItemRenderer.mxml index 43eff8e..b411775 100644 --- a/src/widgets/Query/QueryResultItemRenderer.mxml +++ b/src/widgets/Query/QueryResultItemRenderer.mxml @@ -1,187 +1,187 @@ - - - - - - 0) - { - resultIcon.removeChildAt(0); - } - lastResultSymbol = queryResult.symbol; - lastResultSwatch = lastResultSymbol.createSwatch(20, 20); - } - - resultIcon.addChild(lastResultSwatch); - } - else - { - if (lastResultSwatch && (lastResultSwatch.parent == resultIcon)) - { - resultIcon.removeChild(lastResultSwatch); - } - } - } - - private function itemrenderer_clickHandler(event:MouseEvent):void - { - dispatchEvent(new Event(QUERY_RESULT_CLICK, true)); // bubbles - } - - private function itemrenderer_mouseOverHandler(event:MouseEvent):void - { - dispatchEvent(new Event(QUERY_RESULT_MOUSE_OVER, true)); // bubbles - } - - private function itemrenderer_mouseOutHandler(event:MouseEvent):void - { - dispatchEvent(new Event(QUERY_RESULT_MOUSE_OUT, true)); // bubbles - } - - private function showLink(event:MouseEvent):void - { - event.stopImmediatePropagation(); // don't dispatch QUERY_RESULT_CLICK since we don't want to zoom to feature - navigateToURL(new URLRequest(queryResultAttributes.link)); - } - - protected function resultLink_preinitializeHandler(event:FlexEvent):void - { - if (isRtl()) - { - resultLink.source = "assets/images/w_link_rtl.png"; - } - else - { - resultLink.source = "assets/images/w_link.png"; - } - } - - private function isRtl():Boolean - { - var result:Boolean = false; - try - { - result = (FlexGlobals.topLevelApplication as Application).layoutDirection == "rtl"; - } - catch (error:Error) - { - result = false; - } - return result; - } - ]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + 0) + { + resultIcon.removeChildAt(0); + } + lastResultSymbol = queryResult.symbol; + lastResultSwatch = lastResultSymbol.createSwatch(20, 20); + } + + resultIcon.addChild(lastResultSwatch); + } + else + { + if (lastResultSwatch && (lastResultSwatch.parent == resultIcon)) + { + resultIcon.removeChild(lastResultSwatch); + } + } + } + + private function itemrenderer_clickHandler(event:MouseEvent):void + { + dispatchEvent(new Event(QUERY_RESULT_CLICK, true)); // bubbles + } + + private function itemrenderer_mouseOverHandler(event:MouseEvent):void + { + dispatchEvent(new Event(QUERY_RESULT_MOUSE_OVER, true)); // bubbles + } + + private function itemrenderer_mouseOutHandler(event:MouseEvent):void + { + dispatchEvent(new Event(QUERY_RESULT_MOUSE_OUT, true)); // bubbles + } + + private function showLink(event:MouseEvent):void + { + event.stopImmediatePropagation(); // don't dispatch QUERY_RESULT_CLICK since we don't want to zoom to feature + navigateToURL(new URLRequest(queryResultAttributes.link)); + } + + protected function resultLink_preinitializeHandler(event:FlexEvent):void + { + if (isRtl()) + { + resultLink.source = "assets/images/w_link_rtl.png"; + } + else + { + resultLink.source = "assets/images/w_link.png"; + } + } + + private function isRtl():Boolean + { + var result:Boolean = false; + try + { + result = (FlexGlobals.topLevelApplication as Application).layoutDirection == "rtl"; + } + catch (error:Error) + { + result = false; + } + return result; + } + ]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/widgets/Query/QueryWidget.mxml b/src/widgets/Query/QueryWidget.mxml index f0be53a..78933cc 100644 --- a/src/widgets/Query/QueryWidget.mxml +++ b/src/widgets/Query/QueryWidget.mxml @@ -1,712 +1,712 @@ - - - - - - - - - - - - - - - - - 0) - { - useProxy = configXML.useproxy == "true"; - } - - if (Number(configXML.zoomscale) > 0) - { - zoomScale = Number(configXML.zoomscale); - } - - //marker symbol - const resultMarkerSymbolURL:String = configXML.symbols.picturemarkersymbol.@url || widgetIcon; - const parsedResultMarkerSymbolHeight:Number = parseFloat(configXML.symbols.picturemarkersymbol.@height[0]); - const resultMarkerSymbolHeight:Number = isNaN(parsedResultMarkerSymbolHeight) ? 0 : parsedResultMarkerSymbolHeight; - const parsedResultMarkerSymbolWidth:Number = parseFloat(configXML.symbols.picturemarkersymbol.@width[0]); - const resultMarkerSymbolWidth:Number = isNaN(parsedResultMarkerSymbolWidth) ? 0 : parsedResultMarkerSymbolWidth; - const resultMarkerSymbolXOffset:Number = (configXML.symbols.picturemarkersymbol.@xoffset != null) ? configXML.symbols.picturemarkersymbol.@xoffset : 0; - const resultMarkerSymbolYOffset:Number = (configXML.symbols.picturemarkersymbol.@yoffset != null) ? configXML.symbols.picturemarkersymbol.@yoffset : 0; - resultMarkerSymbol = new PictureMarkerSymbol(resultMarkerSymbolURL, resultMarkerSymbolWidth, resultMarkerSymbolHeight, resultMarkerSymbolXOffset, resultMarkerSymbolYOffset); - - //line symbol - const resultLineSymbolColor:uint = configXML.symbols.simplelinesymbol.@color || 0xFF0000; - const resultLineSymbolAlpha:Number = (configXML.symbols.simplelinesymbol.@alpha[0] != null) ? configXML.symbols.simplelinesymbol.@alpha : 0.8; - const resultLineSymbolWidth:Number = (configXML.symbols.simplelinesymbol.@width[0] != null) ? configXML.symbols.simplelinesymbol.@width : 2; - resultLineSymbol = new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, resultLineSymbolColor, resultLineSymbolAlpha, resultLineSymbolWidth); - - // fill symbol - const resultFillSymbolColor:uint = configXML.symbols.simplefillsymbol.@color || 0xFF0000; - const resultFillSymbolAlpha:Number = (configXML.symbols.simplefillsymbol.@alpha[0] != null) ? configXML.symbols.simplefillsymbol.@alpha : 0.5; - const resultFillSymbolOutlineColor:uint = configXML.symbols.simplefillsymbol.outline.@color || 0xFF0000; - const resultFillSymbolOutlineAlpha:Number = (configXML.symbols.simplefillsymbol.outline.@alpha[0] != null) ? configXML.symbols.simplefillsymbol.outline.@alpha : 0.8; - const resultFillSymbolOutlineWidth:Number = (configXML.symbols.simplefillsymbol.outline.@width[0] != null) ? configXML.symbols.simplefillsymbol.outline.@width : 2; - resultFillSymbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID, resultFillSymbolColor, resultFillSymbolAlpha, new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, resultFillSymbolOutlineColor, resultFillSymbolOutlineAlpha, resultFillSymbolOutlineWidth)); - - var orderByFieldsText:String = configXML.orderbyfields[0]; - if (orderByFieldsText) - { - orderByFields = orderByFieldsText.split(','); - } - - // share results - shareResults = configXML.shareresults[0] && configXML.shareresults == "true"; - - if (layerURL) - { - queryLayer = new FeatureLayer(); - queryLayer.addEventListener(LayerEvent.LOAD, queryLayer_loadHandler); - queryLayer.addEventListener(LayerEvent.LOAD_ERROR, queryLayer_loadErrorHandler); - - if (useProxy && configData.proxyUrl) - { - queryLayer.proxyURL = configData.proxyUrl; - } - if (useAMF) - { - queryLayer.useAMF = useAMF == "true"; - } - if (queryRefreshRate) - { - queryLayer.disableClientCaching = true; // turn on only if using a refresh timer - } - if (queryFields && queryFields[0].@all[0] == "true") - { - queryLayer.outFields = [ "*" ]; - } - else if (queryFields) - { - var fields:XMLList = queryFields.field; - queryLayer.outFields = []; - for each (var fieldXML:XML in fields) - { - if (fieldXML.@name[0]) - { - queryLayer.outFields.push(fieldXML.@name[0]); - } - } - } - queryLayer.url = layerURL; - } - resultFeatureLayer = new FeatureLayer(); - resultFeatureLayer.visible = false; - resultFeatureLayer.isEditable = false; - - var layerName:String = configXML.layername || widgetTitle; - resultFeatureLayer.name = shareResults ? layerName : "hiddenLayer_" + layerName; - - var clustererParser:ClustererParser = new ClustererParser(); - var clusterer:IClusterer = clustererParser.parseClusterer(configXML.clustering[0]); - if (clusterer) - { - resultFeatureLayer.clusterer = clusterer; - } - resultFeatureLayer.addEventListener(FlexEvent.HIDE, resultFeatureLayer_hideHandler); - map.addLayer(resultFeatureLayer); - } - - if (filterField) - { - wTemplate.addTitlebarButton(ICON_URL + "i_searchtext.png", textFilterLabel, toggleFilterPanel); - wTemplate.addTitlebarButton(ICON_URL + "i_clear.png", textFilterClear, doClear); - wTemplate.selectedTitlebarButtonIndex = 1; - this.currentState = "resultsList"; - } - } - - private function queryLayer_loadHandler(event:LayerEvent):void - { - queryLayer.removeEventListener(LayerEvent.LOAD, queryLayer_loadHandler); - queryLayer.removeEventListener(LayerEvent.LOAD_ERROR, queryLayer_loadErrorHandler); - - layerDetails = queryLayer.layerDetails; - layerDetails.minScale = 0; // removing scale dependency - layerDetails.maxScale = 0; - supportsServerSideSorting = layerDetails && layerDetails.version >= 10.1 - && layerDetails.supportsAdvancedQueries; - createAndStartWidgetTimer(); - queryFeatures(); - } - - private function queryLayer_loadErrorHandler(event:LayerEvent):void - { - queryLayer.removeEventListener(LayerEvent.LOAD, queryLayer_loadHandler); - queryLayer.removeEventListener(LayerEvent.LOAD_ERROR, queryLayer_loadErrorHandler); - - var errorMessage:String = getDefaultString("layerFailedToLoad", - event.layer.name, - ErrorMessageUtil.makeHTMLSafe(ErrorMessageUtil.buildFaultMessage(event.fault))); - - showError(errorMessage); - } - - private function resultFeatureLayer_hideHandler(event:FlexEvent):void - { - hideInfoWindow(); - } - - private function infoError(event:ModuleEvent):void - { - this.showMessage(event.errorText, true); - } - - private function createAndStartWidgetTimer():void - { - if (queryRefreshRate) - { - if (!timer) - { - var seconds:Number = Number(queryRefreshRate); - var rate:Number = seconds * 1000; - timer = new Timer(rate); - timer.addEventListener(TimerEvent.TIMER, timerTick); - } - timer.start(); - } - } - - private function stopWidgetTimer():void - { - if (timer && timer.running) - { - timer.stop(); - } - } - - private function startWidgetTimer():void - { - if (timer && !timer.running) - { - timer.start(); - } - } - - private function timerTick(event:TimerEvent):void - { - queryFeatures(); - } - - private function queryFeatures():void - { - if (queryLayer) - { - graphicToResultAttributes = new Dictionary; - - var query:Query = new Query(); - query.where = queryExpr; - query.outSpatialReference = map.spatialReference; - if (supportsServerSideSorting && orderByFields) - { - query.orderByFields = orderByFields; - } - - queryLayer.queryFeatures(query, new AsyncResponder(onResult, onFault)); - showMessage(loadingLabel, true); - - function onResult(featureSet:FeatureSet, token:Object = null):void - { - try - { - if (!supportsServerSideSorting - && orderByFields) - { - FeatureSetUtil.sortFeaturesByFieldName(featureSet, orderByFields); - } - - queryResultAC = createQueryResults(featureSet); - addSharedData(widgetTitle, queryResultAC); - - clearMessage(); - if (queryResultAC.length < 1) - { - showMessage(noResultLabel, false); - } - else - { - showMessage(StringUtil.substitute(featuresFoundLabel, queryResultAC.length), false); - } - } - catch (error:Error) - { - showMessage(error.message, false); - } - } - - function onFault(info:Object, token:Object = null):void - { - showMessage(info.toString(), false); - } - } - } - - private function createQueryResults(featureSet:FeatureSet):ArrayCollection - { - var result:ArrayCollection = new ArrayCollection(); - currentFeatureSet = featureSet; - - if (!queryTitleField) - { - queryTitleField = featureSet.displayFieldName; - } - - for each (var graphic:Graphic in featureSet.features) - { - var resultAttributes:ResultAttributes = - ResultAttributes.toResultAttributes(queryFields, textDirection, graphic, featureSet, queryLayer, layerDetails, widgetTitle, queryTitleField, queryLinkField, queryLinkAlias); - graphicToResultAttributes[graphic] = resultAttributes; - - var searchResult:ResultItem = new ResultItem(graphic, resultAttributes); - result.addItem(searchResult); - - var infoWindowRenderer:ClassFactory = new ClassFactory(PopUpRenderer); - infoWindowRenderer.properties = { popUpInfo: configurePopUpInfo(resultAttributes)}; - graphic.infoWindowRenderer = infoWindowRenderer; - } - resultFeatureLayer.visible = true; - resultFeatureLayer.featureCollection = new FeatureCollection(featureSet, layerDetails); - switch (featureSet.geometryType) - { - case Geometry.MAPPOINT: - { - resultFeatureLayer.renderer = new SimpleRenderer(resultMarkerSymbol); - break; - } - case Geometry.POLYLINE: - { - resultFeatureLayer.renderer = new SimpleRenderer(resultLineSymbol); - break; - } - case Geometry.POLYGON: - { - resultFeatureLayer.renderer = new SimpleRenderer(resultFillSymbol); - break; - } - } - - return result; - } - - private function configurePopUpInfo(resultAttributes:ResultAttributes):PopUpInfo - { - var popUpInfo:PopUpInfo = new PopUpInfo; - - popUpInfo.title = resultAttributes.title; - popUpInfo.description = resultAttributes.content; - - var link:String = resultAttributes.link; - var linkAlias:String = resultAttributes.linkAlias - if (link) - { - var pos:Number = link.length - 4; - var sfx:String = link.substr(pos, 4).toLowerCase(); - var isImageLink:Boolean = (sfx == ".jpg") || (sfx == ".png") || (sfx == ".gif"); - - if (isImageLink) - { - var popUpMediaInfo:PopUpMediaInfo = new PopUpMediaInfo; - popUpMediaInfo.imageLinkURL = link; - popUpMediaInfo.imageSourceURL = link; - popUpInfo.popUpMediaInfos = [ popUpMediaInfo ]; - } - else - { - var linkText:String = linkAlias ? linkAlias : link; - popUpInfo.description += "
    " + linkText + ""; - } - } - - return popUpInfo; - } - - private var hitimer:uint; - - private function mouseOverQueryResult(event:Event):void - { - clearTimeout(hitimer); - var queryResult:ResultItem = ItemRenderer(event.target).data as ResultItem; - if (map.extent.containsXY(queryResult.center.x, queryResult.center.y)) // only show infowindow if query result in contained within map extent - { - hitimer = setTimeout(showHighlight, 300, [ queryResult ]); - } - else - { - hideInfoWindow(); - } - } - - private function mouseOutQueryResult(event:Event):void - { - clearTimeout(hitimer); - } - - private function clickQueryResult(event:Event):void - { - var queryResult:ResultItem = ItemRenderer(event.target).data as ResultItem; - if (queryResult.geometry) - { - if (queryResult.geometry.type == Geometry.MAPPOINT) - { - if (map.scale > zoomScale) - { - map.scale = zoomScale; - } - map.centerAt(queryResult.center); - } - else - { - map.extent = queryResult.geometry.extent; - - if (!map.extent.contains(queryResult.geometry)) - { - map.level--; - } - } - } - clearTimeout(hitimer); - hitimer = setTimeout(showHighlight, 300, [ queryResult ]); - } - - private function showHighlight(params:Array):void - { - var queryResult:ResultItem = params[0]; - var showHighlightPoint:MapPoint = queryResult.center as MapPoint; - - popUpRenderer.popUpInfo = configurePopUpInfo(queryResult.attributes); - popUpRenderer.graphic = queryResult.graphic; - - map.infoWindow.content = popUpRenderer; - map.infoWindow.contentOwner = popUpRenderer.graphic; - map.infoWindow.show(showHighlightPoint); - } - - private function showMessage(msg:String, swfVisible:Boolean):void - { - txtMessage.text = msg; - swfMessage.visible = swfVisible; - msgVisible = true; - } - - private function clearMessage():void - { - msgVisible = false; - } - - private function widgetClosedHandler(event:Event):void - { - if (shareResults) - { - map.removeLayer(resultFeatureLayer); - } - else - { - resultFeatureLayer.visible = false; - } - stopWidgetTimer(); - hideInfoWindow(); - } - - private function widgetOpenedHandler(event:Event):void - { - if (resultFeatureLayer) - { - if (shareResults) - { - map.addLayer(resultFeatureLayer); - } - else - { - resultFeatureLayer.visible = true; - } - } - startWidgetTimer(); - } - - private function toggleFilterPanel():void - { - this.currentState = "filterInput"; - } - - private function doFilter():void - { - if (txtFilter.text) - { - var features:Array = currentFeatureSet.features.filter(filterResultFeatureLayer); - var filteredFeatureSet:FeatureSet = new FeatureSet(features); - resultFeatureLayer.featureCollection = new FeatureCollection(filteredFeatureSet, layerDetails); - queryResultAC.filterFunction = filterDataList; - } - else - { - resultFeatureLayer.featureCollection = new FeatureCollection(currentFeatureSet, layerDetails); - queryResultAC.filterFunction = null; - } - queryResultAC.refresh(); - - // change it back to show the results - wTemplate.selectedTitlebarButtonIndex = 1; - this.currentState = "resultsList"; - if (queryResultAC.length < 1) - { - showMessage(noResultLabel, false); - } - else - { - showMessage(StringUtil.substitute(featuresFoundLabel, queryResultAC.length), false); - } - } - - private function doClear():void - { - wTemplate.selectedTitlebarButtonIndex = 1; - txtFilter.text = ''; - doFilter(); - } - - private function filterResultFeatureLayer(item:Object, idx:uint, arr:Array):Boolean - { - return doesResultContainFilterText(graphicToResultAttributes[Graphic(item)]); - } - - private function doesResultContainFilterText(resultAttributes:ResultAttributes):Boolean - { - const containsFilterText:RegExp = new RegExp(txtFilter.text, 'i'); - var shouldInclude:Boolean; - - if (filterField) - { - shouldInclude = resultAttributes.attributes - && containsFilterText.test(resultAttributes.attributes[filterField]); - } - else - { - shouldInclude = containsFilterText.test(resultAttributes.content); - } - - return shouldInclude; - } - - private function filterDataList(queryResult:ResultItem):Boolean - { - return doesResultContainFilterText(queryResult.attributes); - } - - private function hideInfoWindow():void - { - if (map.infoWindow.contentOwner && - ((map.infoWindow.contentOwner is Graphic && Graphic(map.infoWindow.contentOwner).graphicsLayer === resultFeatureLayer) || map.infoWindow.contentOwner is Map)) - { - map.infoWindow.hide(); - } - } - ]]> -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    + + + + + + + + + + + + + + + + + 0) + { + useProxy = configXML.useproxy == "true"; + } + + if (Number(configXML.zoomscale) > 0) + { + zoomScale = Number(configXML.zoomscale); + } + + //marker symbol + const resultMarkerSymbolURL:String = configXML.symbols.picturemarkersymbol.@url || widgetIcon; + const parsedResultMarkerSymbolHeight:Number = parseFloat(configXML.symbols.picturemarkersymbol.@height[0]); + const resultMarkerSymbolHeight:Number = isNaN(parsedResultMarkerSymbolHeight) ? 0 : parsedResultMarkerSymbolHeight; + const parsedResultMarkerSymbolWidth:Number = parseFloat(configXML.symbols.picturemarkersymbol.@width[0]); + const resultMarkerSymbolWidth:Number = isNaN(parsedResultMarkerSymbolWidth) ? 0 : parsedResultMarkerSymbolWidth; + const resultMarkerSymbolXOffset:Number = (configXML.symbols.picturemarkersymbol.@xoffset != null) ? configXML.symbols.picturemarkersymbol.@xoffset : 0; + const resultMarkerSymbolYOffset:Number = (configXML.symbols.picturemarkersymbol.@yoffset != null) ? configXML.symbols.picturemarkersymbol.@yoffset : 0; + resultMarkerSymbol = new PictureMarkerSymbol(resultMarkerSymbolURL, resultMarkerSymbolWidth, resultMarkerSymbolHeight, resultMarkerSymbolXOffset, resultMarkerSymbolYOffset); + + //line symbol + const resultLineSymbolColor:uint = configXML.symbols.simplelinesymbol.@color || 0xFF0000; + const resultLineSymbolAlpha:Number = (configXML.symbols.simplelinesymbol.@alpha[0] != null) ? configXML.symbols.simplelinesymbol.@alpha : 0.8; + const resultLineSymbolWidth:Number = (configXML.symbols.simplelinesymbol.@width[0] != null) ? configXML.symbols.simplelinesymbol.@width : 2; + resultLineSymbol = new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, resultLineSymbolColor, resultLineSymbolAlpha, resultLineSymbolWidth); + + // fill symbol + const resultFillSymbolColor:uint = configXML.symbols.simplefillsymbol.@color || 0xFF0000; + const resultFillSymbolAlpha:Number = (configXML.symbols.simplefillsymbol.@alpha[0] != null) ? configXML.symbols.simplefillsymbol.@alpha : 0.5; + const resultFillSymbolOutlineColor:uint = configXML.symbols.simplefillsymbol.outline.@color || 0xFF0000; + const resultFillSymbolOutlineAlpha:Number = (configXML.symbols.simplefillsymbol.outline.@alpha[0] != null) ? configXML.symbols.simplefillsymbol.outline.@alpha : 0.8; + const resultFillSymbolOutlineWidth:Number = (configXML.symbols.simplefillsymbol.outline.@width[0] != null) ? configXML.symbols.simplefillsymbol.outline.@width : 2; + resultFillSymbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID, resultFillSymbolColor, resultFillSymbolAlpha, new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, resultFillSymbolOutlineColor, resultFillSymbolOutlineAlpha, resultFillSymbolOutlineWidth)); + + var orderByFieldsText:String = configXML.orderbyfields[0]; + if (orderByFieldsText) + { + orderByFields = orderByFieldsText.split(','); + } + + // share results + shareResults = configXML.shareresults[0] && configXML.shareresults == "true"; + + if (layerURL) + { + queryLayer = new FeatureLayer(); + queryLayer.addEventListener(LayerEvent.LOAD, queryLayer_loadHandler); + queryLayer.addEventListener(LayerEvent.LOAD_ERROR, queryLayer_loadErrorHandler); + + if (useProxy && configData.proxyUrl) + { + queryLayer.proxyURL = configData.proxyUrl; + } + if (useAMF) + { + queryLayer.useAMF = useAMF == "true"; + } + if (queryRefreshRate) + { + queryLayer.disableClientCaching = true; // turn on only if using a refresh timer + } + if (queryFields && queryFields[0].@all[0] == "true") + { + queryLayer.outFields = [ "*" ]; + } + else if (queryFields) + { + var fields:XMLList = queryFields.field; + queryLayer.outFields = []; + for each (var fieldXML:XML in fields) + { + if (fieldXML.@name[0]) + { + queryLayer.outFields.push(fieldXML.@name[0]); + } + } + } + queryLayer.url = layerURL; + } + resultFeatureLayer = new FeatureLayer(); + resultFeatureLayer.visible = false; + resultFeatureLayer.isEditable = false; + + var layerName:String = configXML.layername || widgetTitle; + resultFeatureLayer.name = shareResults ? layerName : "hiddenLayer_" + layerName; + + var clustererParser:ClustererParser = new ClustererParser(); + var clusterer:IClusterer = clustererParser.parseClusterer(configXML.clustering[0]); + if (clusterer) + { + resultFeatureLayer.clusterer = clusterer; + } + resultFeatureLayer.addEventListener(FlexEvent.HIDE, resultFeatureLayer_hideHandler); + map.addLayer(resultFeatureLayer); + } + + if (filterField) + { + wTemplate.addTitlebarButton(ICON_URL + "i_searchtext.png", textFilterLabel, toggleFilterPanel); + wTemplate.addTitlebarButton(ICON_URL + "i_clear.png", textFilterClear, doClear); + wTemplate.selectedTitlebarButtonIndex = 1; + this.currentState = "resultsList"; + } + } + + private function queryLayer_loadHandler(event:LayerEvent):void + { + queryLayer.removeEventListener(LayerEvent.LOAD, queryLayer_loadHandler); + queryLayer.removeEventListener(LayerEvent.LOAD_ERROR, queryLayer_loadErrorHandler); + + layerDetails = queryLayer.layerDetails; + layerDetails.minScale = 0; // removing scale dependency + layerDetails.maxScale = 0; + supportsServerSideSorting = layerDetails && layerDetails.version >= 10.1 + && layerDetails.supportsAdvancedQueries; + createAndStartWidgetTimer(); + queryFeatures(); + } + + private function queryLayer_loadErrorHandler(event:LayerEvent):void + { + queryLayer.removeEventListener(LayerEvent.LOAD, queryLayer_loadHandler); + queryLayer.removeEventListener(LayerEvent.LOAD_ERROR, queryLayer_loadErrorHandler); + + var errorMessage:String = getDefaultString("layerFailedToLoad", + event.layer.name, + ErrorMessageUtil.makeHTMLSafe(ErrorMessageUtil.buildFaultMessage(event.fault))); + + showError(errorMessage); + } + + private function resultFeatureLayer_hideHandler(event:FlexEvent):void + { + hideInfoWindow(); + } + + private function infoError(event:ModuleEvent):void + { + this.showMessage(event.errorText, true); + } + + private function createAndStartWidgetTimer():void + { + if (queryRefreshRate) + { + if (!timer) + { + var seconds:Number = Number(queryRefreshRate); + var rate:Number = seconds * 1000; + timer = new Timer(rate); + timer.addEventListener(TimerEvent.TIMER, timerTick); + } + timer.start(); + } + } + + private function stopWidgetTimer():void + { + if (timer && timer.running) + { + timer.stop(); + } + } + + private function startWidgetTimer():void + { + if (timer && !timer.running) + { + timer.start(); + } + } + + private function timerTick(event:TimerEvent):void + { + queryFeatures(); + } + + private function queryFeatures():void + { + if (queryLayer) + { + graphicToResultAttributes = new Dictionary; + + var query:Query = new Query(); + query.where = queryExpr; + query.outSpatialReference = map.spatialReference; + if (supportsServerSideSorting && orderByFields) + { + query.orderByFields = orderByFields; + } + + queryLayer.queryFeatures(query, new AsyncResponder(onResult, onFault)); + showMessage(loadingLabel, true); + + function onResult(featureSet:FeatureSet, token:Object = null):void + { + try + { + if (!supportsServerSideSorting + && orderByFields) + { + FeatureSetUtil.sortFeaturesByFieldName(featureSet, orderByFields); + } + + queryResultAC = createQueryResults(featureSet); + addSharedData(widgetTitle, queryResultAC); + + clearMessage(); + if (queryResultAC.length < 1) + { + showMessage(noResultLabel, false); + } + else + { + showMessage(StringUtil.substitute(featuresFoundLabel, queryResultAC.length), false); + } + } + catch (error:Error) + { + showMessage(error.message, false); + } + } + + function onFault(info:Object, token:Object = null):void + { + showMessage(info.toString(), false); + } + } + } + + private function createQueryResults(featureSet:FeatureSet):ArrayCollection + { + var result:ArrayCollection = new ArrayCollection(); + currentFeatureSet = featureSet; + + if (!queryTitleField) + { + queryTitleField = featureSet.displayFieldName; + } + + for each (var graphic:Graphic in featureSet.features) + { + var resultAttributes:ResultAttributes = + ResultAttributes.toResultAttributes(queryFields, textDirection, graphic, featureSet, queryLayer, layerDetails, widgetTitle, queryTitleField, queryLinkField, queryLinkAlias); + graphicToResultAttributes[graphic] = resultAttributes; + + var searchResult:ResultItem = new ResultItem(graphic, resultAttributes); + result.addItem(searchResult); + + var infoWindowRenderer:ClassFactory = new ClassFactory(PopUpRenderer); + infoWindowRenderer.properties = { popUpInfo: configurePopUpInfo(resultAttributes)}; + graphic.infoWindowRenderer = infoWindowRenderer; + } + resultFeatureLayer.visible = true; + resultFeatureLayer.featureCollection = new FeatureCollection(featureSet, layerDetails); + switch (featureSet.geometryType) + { + case Geometry.MAPPOINT: + { + resultFeatureLayer.renderer = new SimpleRenderer(resultMarkerSymbol); + break; + } + case Geometry.POLYLINE: + { + resultFeatureLayer.renderer = new SimpleRenderer(resultLineSymbol); + break; + } + case Geometry.POLYGON: + { + resultFeatureLayer.renderer = new SimpleRenderer(resultFillSymbol); + break; + } + } + + return result; + } + + private function configurePopUpInfo(resultAttributes:ResultAttributes):PopUpInfo + { + var popUpInfo:PopUpInfo = new PopUpInfo; + + popUpInfo.title = resultAttributes.title; + popUpInfo.description = resultAttributes.content; + + var link:String = resultAttributes.link; + var linkAlias:String = resultAttributes.linkAlias + if (link) + { + var pos:Number = link.length - 4; + var sfx:String = link.substr(pos, 4).toLowerCase(); + var isImageLink:Boolean = (sfx == ".jpg") || (sfx == ".png") || (sfx == ".gif"); + + if (isImageLink) + { + var popUpMediaInfo:PopUpMediaInfo = new PopUpMediaInfo; + popUpMediaInfo.imageLinkURL = link; + popUpMediaInfo.imageSourceURL = link; + popUpInfo.popUpMediaInfos = [ popUpMediaInfo ]; + } + else + { + var linkText:String = linkAlias ? linkAlias : link; + popUpInfo.description += "
    " + linkText + ""; + } + } + + return popUpInfo; + } + + private var hitimer:uint; + + private function mouseOverQueryResult(event:Event):void + { + clearTimeout(hitimer); + var queryResult:ResultItem = ItemRenderer(event.target).data as ResultItem; + if (map.extent.containsXY(queryResult.center.x, queryResult.center.y)) // only show infowindow if query result in contained within map extent + { + hitimer = setTimeout(showHighlight, 300, [ queryResult ]); + } + else + { + hideInfoWindow(); + } + } + + private function mouseOutQueryResult(event:Event):void + { + clearTimeout(hitimer); + } + + private function clickQueryResult(event:Event):void + { + var queryResult:ResultItem = ItemRenderer(event.target).data as ResultItem; + if (queryResult.geometry) + { + if (queryResult.geometry.type == Geometry.MAPPOINT) + { + if (map.scale > zoomScale) + { + map.scale = zoomScale; + } + map.centerAt(queryResult.center); + } + else + { + map.extent = queryResult.geometry.extent; + + if (!map.extent.contains(queryResult.geometry)) + { + map.level--; + } + } + } + clearTimeout(hitimer); + hitimer = setTimeout(showHighlight, 300, [ queryResult ]); + } + + private function showHighlight(params:Array):void + { + var queryResult:ResultItem = params[0]; + var showHighlightPoint:MapPoint = queryResult.center as MapPoint; + + popUpRenderer.popUpInfo = configurePopUpInfo(queryResult.attributes); + popUpRenderer.graphic = queryResult.graphic; + + map.infoWindow.content = popUpRenderer; + map.infoWindow.contentOwner = popUpRenderer.graphic; + map.infoWindow.show(showHighlightPoint); + } + + private function showMessage(msg:String, swfVisible:Boolean):void + { + txtMessage.text = msg; + swfMessage.visible = swfVisible; + msgVisible = true; + } + + private function clearMessage():void + { + msgVisible = false; + } + + private function widgetClosedHandler(event:Event):void + { + if (shareResults) + { + map.removeLayer(resultFeatureLayer); + } + else + { + resultFeatureLayer.visible = false; + } + stopWidgetTimer(); + hideInfoWindow(); + } + + private function widgetOpenedHandler(event:Event):void + { + if (resultFeatureLayer) + { + if (shareResults) + { + map.addLayer(resultFeatureLayer); + } + else + { + resultFeatureLayer.visible = true; + } + } + startWidgetTimer(); + } + + private function toggleFilterPanel():void + { + this.currentState = "filterInput"; + } + + private function doFilter():void + { + if (txtFilter.text) + { + var features:Array = currentFeatureSet.features.filter(filterResultFeatureLayer); + var filteredFeatureSet:FeatureSet = new FeatureSet(features); + resultFeatureLayer.featureCollection = new FeatureCollection(filteredFeatureSet, layerDetails); + queryResultAC.filterFunction = filterDataList; + } + else + { + resultFeatureLayer.featureCollection = new FeatureCollection(currentFeatureSet, layerDetails); + queryResultAC.filterFunction = null; + } + queryResultAC.refresh(); + + // change it back to show the results + wTemplate.selectedTitlebarButtonIndex = 1; + this.currentState = "resultsList"; + if (queryResultAC.length < 1) + { + showMessage(noResultLabel, false); + } + else + { + showMessage(StringUtil.substitute(featuresFoundLabel, queryResultAC.length), false); + } + } + + private function doClear():void + { + wTemplate.selectedTitlebarButtonIndex = 1; + txtFilter.text = ''; + doFilter(); + } + + private function filterResultFeatureLayer(item:Object, idx:uint, arr:Array):Boolean + { + return doesResultContainFilterText(graphicToResultAttributes[Graphic(item)]); + } + + private function doesResultContainFilterText(resultAttributes:ResultAttributes):Boolean + { + const containsFilterText:RegExp = new RegExp(txtFilter.text, 'i'); + var shouldInclude:Boolean; + + if (filterField) + { + shouldInclude = resultAttributes.attributes + && containsFilterText.test(resultAttributes.attributes[filterField]); + } + else + { + shouldInclude = containsFilterText.test(resultAttributes.content); + } + + return shouldInclude; + } + + private function filterDataList(queryResult:ResultItem):Boolean + { + return doesResultContainFilterText(queryResult.attributes); + } + + private function hideInfoWindow():void + { + if (map.infoWindow.contentOwner && + ((map.infoWindow.contentOwner is Graphic && Graphic(map.infoWindow.contentOwner).graphicsLayer === resultFeatureLayer) || map.infoWindow.contentOwner is Map)) + { + map.infoWindow.hide(); + } + } + ]]> +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    diff --git a/src/widgets/Query/QueryWidget_Earthquakes.xml b/src/widgets/Query/QueryWidget_Earthquakes.xml index e78f407..e1bb787 100644 --- a/src/widgets/Query/QueryWidget_Earthquakes.xml +++ b/src/widgets/Query/QueryWidget_Earthquakes.xml @@ -1,24 +1,24 @@ - - - http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/Earthquakes/EarthquakesFromLastSevenDays/MapServer/0 - magnitude>3 - magnitude - - - - - - - - - region - Filter by region (e.g., California ) - - - 500000 - - - + + + http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/Earthquakes/EarthquakesFromLastSevenDays/MapServer/0 + magnitude>3 + magnitude + + + + + + + + + region + Filter by region (e.g., California ) + + + 500000 + + + diff --git a/src/widgets/Query/QueryWidget_Louisville_PoliceStations.xml b/src/widgets/Query/QueryWidget_Louisville_PoliceStations.xml index 833ec38..9b599a7 100644 --- a/src/widgets/Query/QueryWidget_Louisville_PoliceStations.xml +++ b/src/widgets/Query/QueryWidget_Louisville_PoliceStations.xml @@ -1,22 +1,22 @@ - - - http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Louisville/LOJIC_PublicSafety_Louisville/MapServer/3 - PD_NAME - - - - - - ADDRESS - Filter by ADDRESS (Example: 29TH ST ) - - - - 20000 - 1=1 - - - + + + http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Louisville/LOJIC_PublicSafety_Louisville/MapServer/3 + PD_NAME + + + + + + ADDRESS + Filter by ADDRESS (Example: 29TH ST ) + + + + 20000 + 1=1 + + + diff --git a/src/widgets/Query/QueryWidget_Louisville_TrafficCams.xml b/src/widgets/Query/QueryWidget_Louisville_TrafficCams.xml index 57703c9..5a2c9c9 100644 --- a/src/widgets/Query/QueryWidget_Louisville_TrafficCams.xml +++ b/src/widgets/Query/QueryWidget_Louisville_TrafficCams.xml @@ -1,23 +1,23 @@ - - - http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Louisville/LOJIC_PublicSafety_Louisville/MapServer/2 - DESCRIPTION - URL - - - - - - - - - - - 18000 - 1=1 - - - + + + http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Louisville/LOJIC_PublicSafety_Louisville/MapServer/2 + DESCRIPTION + URL + + + + + + + + + + + 18000 + 1=1 + + + diff --git a/src/widgets/Samples/HelloWorld/HelloWorldWidget.mxml b/src/widgets/Samples/HelloWorld/HelloWorldWidget.mxml index 0606b06..ac56330 100644 --- a/src/widgets/Samples/HelloWorld/HelloWorldWidget.mxml +++ b/src/widgets/Samples/HelloWorld/HelloWorldWidget.mxml @@ -1,48 +1,48 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + diff --git a/src/widgets/Samples/HelloWorld/HelloWorldWidget.xml b/src/widgets/Samples/HelloWorld/HelloWorldWidget.xml index 3be7ba2..d150e21 100644 --- a/src/widgets/Samples/HelloWorld/HelloWorldWidget.xml +++ b/src/widgets/Samples/HelloWorld/HelloWorldWidget.xml @@ -1,5 +1,5 @@ - - - Hello World ! - + + + Hello World ! + \ No newline at end of file diff --git a/src/widgets/Samples/TestOpenClose/TestOpenCloseWidget.mxml b/src/widgets/Samples/TestOpenClose/TestOpenCloseWidget.mxml index 95788d2..062280e 100644 --- a/src/widgets/Samples/TestOpenClose/TestOpenCloseWidget.mxml +++ b/src/widgets/Samples/TestOpenClose/TestOpenCloseWidget.mxml @@ -1,219 +1,219 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/widgets/Samples/TestOpenClose/TestOpenCloseWidget.xml b/src/widgets/Samples/TestOpenClose/TestOpenCloseWidget.xml index 5e88f92..483a0e5 100644 --- a/src/widgets/Samples/TestOpenClose/TestOpenCloseWidget.xml +++ b/src/widgets/Samples/TestOpenClose/TestOpenCloseWidget.xml @@ -1,2 +1,2 @@ - + \ No newline at end of file diff --git a/src/widgets/Samples/ThematicQuery/InfoColumnChartItemRenderer.mxml b/src/widgets/Samples/ThematicQuery/InfoColumnChartItemRenderer.mxml index 7d8ab1c..b268100 100644 --- a/src/widgets/Samples/ThematicQuery/InfoColumnChartItemRenderer.mxml +++ b/src/widgets/Samples/ThematicQuery/InfoColumnChartItemRenderer.mxml @@ -1,63 +1,63 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + diff --git a/src/widgets/Samples/ThematicQuery/InfoColumnChartWidget.mxml b/src/widgets/Samples/ThematicQuery/InfoColumnChartWidget.mxml index fa5ea64..0909597 100644 --- a/src/widgets/Samples/ThematicQuery/InfoColumnChartWidget.mxml +++ b/src/widgets/Samples/ThematicQuery/InfoColumnChartWidget.mxml @@ -1,191 +1,191 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/widgets/Samples/ThematicQuery/MapSwitcherWidget_Thematic.xml b/src/widgets/Samples/ThematicQuery/MapSwitcherWidget_Thematic.xml index 22ecc0a..650c51c 100644 --- a/src/widgets/Samples/ThematicQuery/MapSwitcherWidget_Thematic.xml +++ b/src/widgets/Samples/ThematicQuery/MapSwitcherWidget_Thematic.xml @@ -1,8 +1,8 @@ - - - - Unemployment - Population Density - Thematic Selection Layer - - + + + + Unemployment + Population Density + Thematic Selection Layer + + diff --git a/src/widgets/Samples/ThematicQuery/ThematicDataGroup.as b/src/widgets/Samples/ThematicQuery/ThematicDataGroup.as index 634da7c..0192647 100644 --- a/src/widgets/Samples/ThematicQuery/ThematicDataGroup.as +++ b/src/widgets/Samples/ThematicQuery/ThematicDataGroup.as @@ -1,36 +1,36 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2010-2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package widgets.Samples.ThematicQuery -{ - -import mx.core.ClassFactory; - -import spark.components.DataGroup; - -// This event bubble up from the ThematicItemRenderer -[Event(name="themeClick", type="flash.events.Event")] - -public class ThematicDataGroup extends DataGroup -{ - public function ThematicDataGroup() - { - super(); - - this.itemRenderer = new ClassFactory(ThematicItemRenderer); - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2010-2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package widgets.Samples.ThematicQuery +{ + +import mx.core.ClassFactory; + +import spark.components.DataGroup; + +// This event bubble up from the ThematicItemRenderer +[Event(name="themeClick", type="flash.events.Event")] + +public class ThematicDataGroup extends DataGroup +{ + public function ThematicDataGroup() + { + super(); + + this.itemRenderer = new ClassFactory(ThematicItemRenderer); + } +} + +} diff --git a/src/widgets/Samples/ThematicQuery/ThematicItemRenderer.mxml b/src/widgets/Samples/ThematicQuery/ThematicItemRenderer.mxml index 4f284bb..05f6cad 100644 --- a/src/widgets/Samples/ThematicQuery/ThematicItemRenderer.mxml +++ b/src/widgets/Samples/ThematicQuery/ThematicItemRenderer.mxml @@ -1,103 +1,103 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/widgets/Samples/ThematicQuery/ThematicQueryResult.as b/src/widgets/Samples/ThematicQuery/ThematicQueryResult.as index 4bcfd41..e22a18a 100644 --- a/src/widgets/Samples/ThematicQuery/ThematicQueryResult.as +++ b/src/widgets/Samples/ThematicQuery/ThematicQueryResult.as @@ -1,41 +1,41 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2010-2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package widgets.Samples.ThematicQuery -{ - -import com.esri.ags.geometry.Geometry; -import com.esri.ags.geometry.MapPoint; - -import flash.events.EventDispatcher; - -public class ThematicQueryResult extends EventDispatcher -{ - public var title:String; - - public var icon:String; - - public var content:String; - - public var attributes:Object; - - public var listFields:Array; - - public var columnChartFields:Array; - - public var point:MapPoint; -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2010-2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package widgets.Samples.ThematicQuery +{ + +import com.esri.ags.geometry.Geometry; +import com.esri.ags.geometry.MapPoint; + +import flash.events.EventDispatcher; + +public class ThematicQueryResult extends EventDispatcher +{ + public var title:String; + + public var icon:String; + + public var content:String; + + public var attributes:Object; + + public var listFields:Array; + + public var columnChartFields:Array; + + public var point:MapPoint; +} + +} diff --git a/src/widgets/Samples/ThematicQuery/ThematicQueryWidget.mxml b/src/widgets/Samples/ThematicQuery/ThematicQueryWidget.mxml index b6e09bc..1788819 100644 --- a/src/widgets/Samples/ThematicQuery/ThematicQueryWidget.mxml +++ b/src/widgets/Samples/ThematicQuery/ThematicQueryWidget.mxml @@ -1,519 +1,519 @@ - - - - - - - - - - - - - - - - 0)) - { - currentTheme = themeList.getItemAt(0); - - operationalLayerData = ht.find(currentTheme.labelref); - if (operationalLayerData) - { - operationalLayerData.visible = true - currentTheme.visible = true; - previousOperationalLayer = currentOperationalLayer = operationalLayerData.label; - currentQueryParameter = getCurrentQueryParameter(currentOperationalLayer); - if (currentQueryParameter) - { - sendLegendURL(currentQueryParameter.legendurl); - } - else - { - sendLegendURL(""); - } - } - AppEvent.dispatch(AppEvent.MAP_LAYER_VISIBLE, operationalLayerData); - - } - - - var data:Object = { - id: String(this.widgetId), - url: infoUrl, - config: null - }; - AppEvent.dispatch(AppEvent.DATA_CREATE_INFOWIDGET, data, infoReady); - } - } - - private var infoTemplate:IInfowindowTemplate; - - private function infoReady(event:AppEvent):void - { - var id:Number = Number(event.data.id); - if (id == this.widgetId) - { - infoTemplate = event.data.infoWidget; - map.addEventListener(MapMouseEvent.MAP_CLICK, onMapClick); - map.addEventListener(ExtentEvent.EXTENT_CHANGE, onExtentChange); - } - } - - private function onExtentChange(event:ExtentEvent):void - { - if (previousMapScale != map.scale) - { - var previousQueryLayer:String; - if (currentQueryParameter) - { - previousQueryLayer = currentQueryParameter.layer - } - currentQueryParameter = getCurrentQueryParameter(currentOperationalLayer); - //if matching query layer found, do query. - if (currentQueryParameter) - { - if (previousQueryLayer != currentQueryParameter.layer) - { - clearSelectionAndHideInfoWindow(); - sendLegendURL(currentQueryParameter.legendurl); - } - } - else - { - sendLegendURL(""); - } - previousMapScale = map.scale; - } - } - - private function onMapClick(event:MapMouseEvent):void - { - clearSelectionAndHideInfoWindow(); - var currentLocation:MapPoint = event.mapPoint; - currentQueryParameter = getCurrentQueryParameter(currentOperationalLayer); - //if matching query layer found, do query. - if (currentQueryParameter) - { - doQuery(currentLocation, currentQueryParameter); - } - } - - private function getCurrentQueryParameter(currentOpsLayer:String):Object - { - var mapScale:Number = map.scale; - var queryLayerMinScale:Number; - var queryLayerMaxScale:Number; - - //Check which query to use based on min and max scale of the map. - if (currentTheme) - { - for each (var queryParameter:Object in currentTheme.queryParameters) - { - queryLayerMinScale = ((queryParameter.minscale) && (queryParameter.minscale != 0)) ? queryParameter.minscale : Number.POSITIVE_INFINITY - queryLayerMaxScale = ((queryParameter.maxscale) && (queryParameter.maxscale != 0)) ? queryParameter.maxscale : Number.NEGATIVE_INFINITY - - //Set query fields and urls only if map scale is with specified scale range. - if (mapScale <= queryLayerMinScale && mapScale >= queryLayerMaxScale) - { - return queryParameter; - } - } - } - return null; - } - - private function doQuery(currentLocation:MapPoint, queryParam:Object):void - { - var outFields:Array = []; - - // Out fields is union of list fields and chart fields. - for each (var fld:Object in queryParam.listfields) - { - outFields.push(fld.name); - } - for each (var columnChartFld:Object in queryParam.columnchartfields) - { - outFields.push(columnChartFld.name); - } - - featureLayer.outFields = outFields; - selectionQuery.geometry = currentLocation; - var currentQueryURL:String = currentTheme.themeUrl + "/" + queryParam.layer - if (featureLayer.url == currentQueryURL) // do not wait for load event. - { - featureLayer.selectFeatures(selectionQuery); - } - else // set the url and perform select query on FeatureLayer Load Complete. - { - featureLayer.url = currentTheme.themeUrl + "/" + queryParam.layer; - } - } - - protected function featureLayer_selectionCompleteHandler(event:FeatureLayerEvent):void - { - if (event.featureLayer.selectedFeatures.length > 0) - { - var thematicQueryResult:ThematicQueryResult = new ThematicQueryResult(); - thematicQueryResult.point = selectionQuery.geometry as MapPoint; - thematicQueryResult.attributes = new FeatureSet(event.featureLayer.selectedFeatures).attributes; - thematicQueryResult.title = currentOperationalLayer; - thematicQueryResult.listFields = currentQueryParameter.listfields; - thematicQueryResult.columnChartFields = currentQueryParameter.columnchartfields; - - map.infoWindow.content = infoTemplate as UIComponent; - infoTemplate.data = thematicQueryResult; - map.infoWindow.show(thematicQueryResult.point); - } - } - - protected function featureLayer_loadHandler(event:LayerEvent):void - { - switch (FeatureLayer(event.layer).layerDetails.geometryType) - { - case Geometry.MAPPOINT: - case Geometry.MULTIPOINT: - { - featureLayer.symbol = selectionMarkerSymbol; - break; - } - case Geometry.POLYLINE: - { - featureLayer.symbol = selectionOutline; - break; - } - case Geometry.POLYGON: - { - featureLayer.symbol = selectionPolygonSymbol; - break; - } - } - featureLayer.selectFeatures(selectionQuery); - } - - private function widgetClosedHandler(event:Event):void - { - clearSelectionAndHideInfoWindow(); - featureLayer.visible = false; - sendLegendURL(""); - map.removeEventListener(MapMouseEvent.MAP_CLICK, onMapClick); - map.removeEventListener(ExtentEvent.EXTENT_CHANGE, onExtentChange); - var operationalLayerData:Object = ht.find(currentTheme.labelref); - operationalLayerData = ht.find(currentTheme.labelref); - if (operationalLayerData) - { - operationalLayerData.visible = false - currentTheme.visible = false; - previousOperationalLayer = currentOperationalLayer = operationalLayerData.label; - } - AppEvent.dispatch(AppEvent.MAP_LAYER_VISIBLE, operationalLayerData); - - - } - - private function widgetOpenedHandler(event:Event):void - { - if (featureLayer) - { - featureLayer.visible = true; - } - - - var currentOperationLayerData:Object = ht.find(currentOperationalLayer); - if (currentOperationLayerData) - { - currentTheme.visible = true; - currentOperationLayerData.visible = true; - AppEvent.dispatch(AppEvent.MAP_LAYER_VISIBLE, currentOperationLayerData); - } - - - var currentQueryParameter:Object = getCurrentQueryParameter(currentOperationalLayer); - if (currentQueryParameter) - { - sendLegendURL(currentQueryParameter.legendurl); - } - else - { - sendLegendURL(""); - } - map.addEventListener(MapMouseEvent.MAP_CLICK, onMapClick); - map.addEventListener(ExtentEvent.EXTENT_CHANGE, onExtentChange); - } - - private var currentOperationalLayer:String; - private var previousOperationalLayer:String; - - private function showTheme(event:Event):void - { - clearSelectionAndHideInfoWindow(); - if (!previousOperationalLayer) - { - previousOperationalLayer = currentOperationalLayer = ThematicItemRenderer(event.target).data.labelref; - - } - else - { - previousOperationalLayer = currentOperationalLayer; - currentOperationalLayer = ThematicItemRenderer(event.target).data.labelref; - - var previousOperationLayerData:Object = ht.find(previousOperationalLayer); - if (previousOperationLayerData) - { - previousOperationLayerData.visible = false; - AppEvent.dispatch(AppEvent.MAP_LAYER_VISIBLE, previousOperationLayerData); - } - } - currentTheme = themeHT.find(currentOperationalLayer); - var currentOperationLayerData:Object = ht.find(currentOperationalLayer); - if (currentOperationLayerData) - { - currentOperationLayerData.visible = true; - currentQueryParameter = getCurrentQueryParameter(currentOperationalLayer); - if (currentQueryParameter) - { - sendLegendURL(currentQueryParameter.legendurl); - } - else - { - sendLegendURL(""); - } - AppEvent.dispatch(AppEvent.MAP_LAYER_VISIBLE, currentOperationLayerData); - } - } - - private function clearSelectionAndHideInfoWindow():void - { - featureLayer.clearSelection(); - map.infoWindow.hide(); - } - - private function sendLegendURL(legendURL:String):void - { - this.addSharedData("imageurl", new ArrayCollection([ legendURL ])); - } - ]]> - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + 0)) + { + currentTheme = themeList.getItemAt(0); + + operationalLayerData = ht.find(currentTheme.labelref); + if (operationalLayerData) + { + operationalLayerData.visible = true + currentTheme.visible = true; + previousOperationalLayer = currentOperationalLayer = operationalLayerData.label; + currentQueryParameter = getCurrentQueryParameter(currentOperationalLayer); + if (currentQueryParameter) + { + sendLegendURL(currentQueryParameter.legendurl); + } + else + { + sendLegendURL(""); + } + } + AppEvent.dispatch(AppEvent.MAP_LAYER_VISIBLE, operationalLayerData); + + } + + + var data:Object = { + id: String(this.widgetId), + url: infoUrl, + config: null + }; + AppEvent.dispatch(AppEvent.DATA_CREATE_INFOWIDGET, data, infoReady); + } + } + + private var infoTemplate:IInfowindowTemplate; + + private function infoReady(event:AppEvent):void + { + var id:Number = Number(event.data.id); + if (id == this.widgetId) + { + infoTemplate = event.data.infoWidget; + map.addEventListener(MapMouseEvent.MAP_CLICK, onMapClick); + map.addEventListener(ExtentEvent.EXTENT_CHANGE, onExtentChange); + } + } + + private function onExtentChange(event:ExtentEvent):void + { + if (previousMapScale != map.scale) + { + var previousQueryLayer:String; + if (currentQueryParameter) + { + previousQueryLayer = currentQueryParameter.layer + } + currentQueryParameter = getCurrentQueryParameter(currentOperationalLayer); + //if matching query layer found, do query. + if (currentQueryParameter) + { + if (previousQueryLayer != currentQueryParameter.layer) + { + clearSelectionAndHideInfoWindow(); + sendLegendURL(currentQueryParameter.legendurl); + } + } + else + { + sendLegendURL(""); + } + previousMapScale = map.scale; + } + } + + private function onMapClick(event:MapMouseEvent):void + { + clearSelectionAndHideInfoWindow(); + var currentLocation:MapPoint = event.mapPoint; + currentQueryParameter = getCurrentQueryParameter(currentOperationalLayer); + //if matching query layer found, do query. + if (currentQueryParameter) + { + doQuery(currentLocation, currentQueryParameter); + } + } + + private function getCurrentQueryParameter(currentOpsLayer:String):Object + { + var mapScale:Number = map.scale; + var queryLayerMinScale:Number; + var queryLayerMaxScale:Number; + + //Check which query to use based on min and max scale of the map. + if (currentTheme) + { + for each (var queryParameter:Object in currentTheme.queryParameters) + { + queryLayerMinScale = ((queryParameter.minscale) && (queryParameter.minscale != 0)) ? queryParameter.minscale : Number.POSITIVE_INFINITY + queryLayerMaxScale = ((queryParameter.maxscale) && (queryParameter.maxscale != 0)) ? queryParameter.maxscale : Number.NEGATIVE_INFINITY + + //Set query fields and urls only if map scale is with specified scale range. + if (mapScale <= queryLayerMinScale && mapScale >= queryLayerMaxScale) + { + return queryParameter; + } + } + } + return null; + } + + private function doQuery(currentLocation:MapPoint, queryParam:Object):void + { + var outFields:Array = []; + + // Out fields is union of list fields and chart fields. + for each (var fld:Object in queryParam.listfields) + { + outFields.push(fld.name); + } + for each (var columnChartFld:Object in queryParam.columnchartfields) + { + outFields.push(columnChartFld.name); + } + + featureLayer.outFields = outFields; + selectionQuery.geometry = currentLocation; + var currentQueryURL:String = currentTheme.themeUrl + "/" + queryParam.layer + if (featureLayer.url == currentQueryURL) // do not wait for load event. + { + featureLayer.selectFeatures(selectionQuery); + } + else // set the url and perform select query on FeatureLayer Load Complete. + { + featureLayer.url = currentTheme.themeUrl + "/" + queryParam.layer; + } + } + + protected function featureLayer_selectionCompleteHandler(event:FeatureLayerEvent):void + { + if (event.featureLayer.selectedFeatures.length > 0) + { + var thematicQueryResult:ThematicQueryResult = new ThematicQueryResult(); + thematicQueryResult.point = selectionQuery.geometry as MapPoint; + thematicQueryResult.attributes = new FeatureSet(event.featureLayer.selectedFeatures).attributes; + thematicQueryResult.title = currentOperationalLayer; + thematicQueryResult.listFields = currentQueryParameter.listfields; + thematicQueryResult.columnChartFields = currentQueryParameter.columnchartfields; + + map.infoWindow.content = infoTemplate as UIComponent; + infoTemplate.data = thematicQueryResult; + map.infoWindow.show(thematicQueryResult.point); + } + } + + protected function featureLayer_loadHandler(event:LayerEvent):void + { + switch (FeatureLayer(event.layer).layerDetails.geometryType) + { + case Geometry.MAPPOINT: + case Geometry.MULTIPOINT: + { + featureLayer.symbol = selectionMarkerSymbol; + break; + } + case Geometry.POLYLINE: + { + featureLayer.symbol = selectionOutline; + break; + } + case Geometry.POLYGON: + { + featureLayer.symbol = selectionPolygonSymbol; + break; + } + } + featureLayer.selectFeatures(selectionQuery); + } + + private function widgetClosedHandler(event:Event):void + { + clearSelectionAndHideInfoWindow(); + featureLayer.visible = false; + sendLegendURL(""); + map.removeEventListener(MapMouseEvent.MAP_CLICK, onMapClick); + map.removeEventListener(ExtentEvent.EXTENT_CHANGE, onExtentChange); + var operationalLayerData:Object = ht.find(currentTheme.labelref); + operationalLayerData = ht.find(currentTheme.labelref); + if (operationalLayerData) + { + operationalLayerData.visible = false + currentTheme.visible = false; + previousOperationalLayer = currentOperationalLayer = operationalLayerData.label; + } + AppEvent.dispatch(AppEvent.MAP_LAYER_VISIBLE, operationalLayerData); + + + } + + private function widgetOpenedHandler(event:Event):void + { + if (featureLayer) + { + featureLayer.visible = true; + } + + + var currentOperationLayerData:Object = ht.find(currentOperationalLayer); + if (currentOperationLayerData) + { + currentTheme.visible = true; + currentOperationLayerData.visible = true; + AppEvent.dispatch(AppEvent.MAP_LAYER_VISIBLE, currentOperationLayerData); + } + + + var currentQueryParameter:Object = getCurrentQueryParameter(currentOperationalLayer); + if (currentQueryParameter) + { + sendLegendURL(currentQueryParameter.legendurl); + } + else + { + sendLegendURL(""); + } + map.addEventListener(MapMouseEvent.MAP_CLICK, onMapClick); + map.addEventListener(ExtentEvent.EXTENT_CHANGE, onExtentChange); + } + + private var currentOperationalLayer:String; + private var previousOperationalLayer:String; + + private function showTheme(event:Event):void + { + clearSelectionAndHideInfoWindow(); + if (!previousOperationalLayer) + { + previousOperationalLayer = currentOperationalLayer = ThematicItemRenderer(event.target).data.labelref; + + } + else + { + previousOperationalLayer = currentOperationalLayer; + currentOperationalLayer = ThematicItemRenderer(event.target).data.labelref; + + var previousOperationLayerData:Object = ht.find(previousOperationalLayer); + if (previousOperationLayerData) + { + previousOperationLayerData.visible = false; + AppEvent.dispatch(AppEvent.MAP_LAYER_VISIBLE, previousOperationLayerData); + } + } + currentTheme = themeHT.find(currentOperationalLayer); + var currentOperationLayerData:Object = ht.find(currentOperationalLayer); + if (currentOperationLayerData) + { + currentOperationLayerData.visible = true; + currentQueryParameter = getCurrentQueryParameter(currentOperationalLayer); + if (currentQueryParameter) + { + sendLegendURL(currentQueryParameter.legendurl); + } + else + { + sendLegendURL(""); + } + AppEvent.dispatch(AppEvent.MAP_LAYER_VISIBLE, currentOperationLayerData); + } + } + + private function clearSelectionAndHideInfoWindow():void + { + featureLayer.clearSelection(); + map.infoWindow.hide(); + } + + private function sendLegendURL(legendURL:String):void + { + this.addSharedData("imageurl", new ArrayCollection([ legendURL ])); + } + ]]> + + + + + + + + + + + + + + + + + diff --git a/src/widgets/Samples/ThematicQuery/ThematicQueryWidget.xml b/src/widgets/Samples/ThematicQuery/ThematicQueryWidget.xml index 3d01b4b..9f1d227 100644 --- a/src/widgets/Samples/ThematicQuery/ThematicQueryWidget.xml +++ b/src/widgets/Samples/ThematicQuery/ThematicQueryWidget.xml @@ -1,90 +1,90 @@ - - - widgets/Samples/ThematicQuery/InfoColumnChartWidget.swf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + widgets/Samples/ThematicQuery/InfoColumnChartWidget.swf + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/widgets/Search/SearchResultDataGroup.as b/src/widgets/Search/SearchResultDataGroup.as index e6b07fa..68d9c67 100644 --- a/src/widgets/Search/SearchResultDataGroup.as +++ b/src/widgets/Search/SearchResultDataGroup.as @@ -1,38 +1,38 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2010-2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package widgets.Search -{ - -import mx.core.ClassFactory; - -import spark.components.DataGroup; - -// these events bubble up from the SearchResultItemRenderer -[Event(name="searchResultClick", type="flash.events.Event")] -[Event(name="searchResultMouseOver", type="flash.events.Event")] -[Event(name="searchResultMouseOut", type="flash.events.Event")] - -public class SearchResultDataGroup extends DataGroup -{ - public function SearchResultDataGroup() - { - super(); - - this.itemRenderer = new ClassFactory(SearchResultItemRenderer); - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2010-2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package widgets.Search +{ + +import mx.core.ClassFactory; + +import spark.components.DataGroup; + +// these events bubble up from the SearchResultItemRenderer +[Event(name="searchResultClick", type="flash.events.Event")] +[Event(name="searchResultMouseOver", type="flash.events.Event")] +[Event(name="searchResultMouseOut", type="flash.events.Event")] + +public class SearchResultDataGroup extends DataGroup +{ + public function SearchResultDataGroup() + { + super(); + + this.itemRenderer = new ClassFactory(SearchResultItemRenderer); + } +} + +} diff --git a/src/widgets/Search/SearchResultItemRenderer.mxml b/src/widgets/Search/SearchResultItemRenderer.mxml index 9e79e4f..0293725 100644 --- a/src/widgets/Search/SearchResultItemRenderer.mxml +++ b/src/widgets/Search/SearchResultItemRenderer.mxml @@ -1,187 +1,187 @@ - - - - - - 0) - { - resultIcon.removeChildAt(0); - } - lastResultSymbol = searchResult.symbol; - lastResultSwatch = lastResultSymbol.createSwatch(20, 20); - } - - resultIcon.addChild(lastResultSwatch); - } - else - { - if (lastResultSwatch && (lastResultSwatch.parent == resultIcon)) - { - resultIcon.removeChild(lastResultSwatch); - } - } - } - - private function itemrenderer_clickHandler(event:MouseEvent):void - { - dispatchEvent(new Event(SEARCH_RESULT_CLICK, true)); // bubbles - } - - private function itemrenderer_mouseOverHandler(event:MouseEvent):void - { - dispatchEvent(new Event(SEARCH_RESULT_MOUSE_OVER, true)); // bubbles - } - - private function itemrenderer_mouseOutHandler(event:MouseEvent):void - { - dispatchEvent(new Event(SEARCH_RESULT_MOUSE_OUT, true)); // bubbles - } - - private function showLink(event:MouseEvent):void - { - event.stopImmediatePropagation(); // don't dispatch SEARCH_RESULT_CLICK since we don't want to zoom to feature - navigateToURL(new URLRequest(searchResultAttributes.link)); - } - - protected function resultLink_preinitializeHandler(event:FlexEvent):void - { - if (isRtl()) - { - resultLink.source = "assets/images/w_link_rtl.png"; - } - else - { - resultLink.source = "assets/images/w_link.png"; - } - } - - private function isRtl():Boolean - { - var result:Boolean = false; - try - { - result = (FlexGlobals.topLevelApplication as Application).layoutDirection == "rtl"; - } - catch (error:Error) - { - result = false; - } - return result; - } - ]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + 0) + { + resultIcon.removeChildAt(0); + } + lastResultSymbol = searchResult.symbol; + lastResultSwatch = lastResultSymbol.createSwatch(20, 20); + } + + resultIcon.addChild(lastResultSwatch); + } + else + { + if (lastResultSwatch && (lastResultSwatch.parent == resultIcon)) + { + resultIcon.removeChild(lastResultSwatch); + } + } + } + + private function itemrenderer_clickHandler(event:MouseEvent):void + { + dispatchEvent(new Event(SEARCH_RESULT_CLICK, true)); // bubbles + } + + private function itemrenderer_mouseOverHandler(event:MouseEvent):void + { + dispatchEvent(new Event(SEARCH_RESULT_MOUSE_OVER, true)); // bubbles + } + + private function itemrenderer_mouseOutHandler(event:MouseEvent):void + { + dispatchEvent(new Event(SEARCH_RESULT_MOUSE_OUT, true)); // bubbles + } + + private function showLink(event:MouseEvent):void + { + event.stopImmediatePropagation(); // don't dispatch SEARCH_RESULT_CLICK since we don't want to zoom to feature + navigateToURL(new URLRequest(searchResultAttributes.link)); + } + + protected function resultLink_preinitializeHandler(event:FlexEvent):void + { + if (isRtl()) + { + resultLink.source = "assets/images/w_link_rtl.png"; + } + else + { + resultLink.source = "assets/images/w_link.png"; + } + } + + private function isRtl():Boolean + { + var result:Boolean = false; + try + { + result = (FlexGlobals.topLevelApplication as Application).layoutDirection == "rtl"; + } + catch (error:Error) + { + result = false; + } + return result; + } + ]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/widgets/Search/SearchWidget.mxml b/src/widgets/Search/SearchWidget.mxml index 1744846..e3238b5 100644 --- a/src/widgets/Search/SearchWidget.mxml +++ b/src/widgets/Search/SearchWidget.mxml @@ -1,1161 +1,1161 @@ - - - - - - - - - - - - - - - - - - 0) - { - pointSearchTolerance = userTolerance; - } - - if (Number(configXML.zoomscale) > 0) - { - zoomScale = Number(configXML.zoomscale); - } - } - wTemplate.addTitlebarButton(ICON_URL + "i_searchgraphical.png", graphicalsearchLabel, showStateGraphicalSearch); - if (configSearchText.length) - { - wTemplate.addTitlebarButton(ICON_URL + "i_searchtext.png", textsearchLabel, showStateTextSearch); - } - wTemplate.addTitlebarButton(ICON_URL + "i_table.png", resultsLabel, showStateResults); - - setInitialView(configXML.initialview[0]); - fade.targets = [ graphicalInput, textInput, resultsList ]; - wTemplate.visible = true; - - setupTextSearch(); - setupGraphicalSearch(); - AppEvent.addListener(AppEvent.DATA_PUBLISH, sharedDataUpdated); - } - - private function searchLayer_loadHandler(event:LayerEvent):void - { - var layer:FeatureLayer = event.layer as FeatureLayer; - layer.removeEventListener(LayerEvent.LOAD, searchLayer_loadHandler); - layer.removeEventListener(LayerEvent.LOAD_ERROR, searchLayer_faultHandler); - - layer.layerDetails.minScale = 0; // removing scale dependency - layer.layerDetails.maxScale = 0; - } - - private function searchLayer_faultHandler(event:LayerEvent):void - { - var layer:FeatureLayer = event.currentTarget as FeatureLayer; - - layer.removeEventListener(LayerEvent.LOAD, searchLayer_loadHandler); - layer.removeEventListener(LayerEvent.LOAD_ERROR, searchLayer_faultHandler); - - showLoadErrorMessage(event); - } - - private function showLoadErrorMessage(event:LayerEvent):void - { - var errorMessage:String = getDefaultString("layerFailedToLoad", - event.layer.name, - ErrorMessageUtil.makeHTMLSafe(ErrorMessageUtil.buildFaultMessage(event.fault))); - - showError(errorMessage); - } - - private function setInitialView(view:String):void - { - if (view == "graphical") - { - showStateGraphicalSearch(); - } - else if (view == "text") - { - showStateTextSearch(); - } - } - - private function setupTextSearch():void - { - if (configSearchText.length) - { - cboLayerText.dataProvider = new ArrayList(configSearchText); - txtLabelText.text = configSearchText[0].textlabel; - if (configSearchText.length == 1) - { - boxText.visible = false; - boxText.includeInLayout = false; - } - } - else - { - boxText.visible = false; - txtLabelText.text = nolayerLabel; - } - } - - private function setupGraphicalSearch():void - { - if (configSearchGraphical.length) - { - cboLayerGraphical.dataProvider = configSearchGraphical; - txtLabelGraphical.text = configSearchGraphical[0].graphicallabel; - if (configSearchGraphical.length == 1) - { - boxGraphical.visible = false; - boxGraphical.includeInLayout = false; - } - } - else - { - boxGraphical.visible = false; - imageGroup.visible = false; - clearGroup.visible = false; - txtLabelGraphical.text = nolayerLabel; - } - } - - private function resultFeatureLayer_hideHandler(event:FlexEvent):void - { - hideInfoWindow(); - } - - private function searchLayerChangedText():void - { - var i:int = cboLayerText.selectedIndex; - txtLabelText.text = configSearchText[i].textlabel; - } - - private function searchLayerChangedGraphical():void - { - var i:int = cboLayerGraphical.selectedIndex; - txtLabelGraphical.text = configSearchGraphical[i].graphicallabel; - } - - private function activateDrawTool(event:MouseEvent):void - { - addSharedData("Deactivate_DrawTool", null); // to be able to deactivate drawTool on other widgets - - // apply glow - selectedDrawingIcon = FocusableImage(event.currentTarget); - clearSelectionFilter(); - selectedDrawingIcon.filters = [ glowFilter ]; - - finishDrawing = false; - - var status:String; - var value:String = selectedDrawingIcon.name; - switch (value) - { - case DrawTool.MAPPOINT: - { - status = pointLabel; - drawSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.STYLE_CIRCLE, 15, 0x3FAFDC, 1); - break; - } - case DrawTool.POLYLINE: - { - status = lineLabel; - drawSymbol = new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, 0x3FAFDC, 1, 1); - break; - } - case DrawTool.EXTENT: - { - status = rectangleLabel; - drawSymbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID, 0x3FAFDC, 0.5, new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, 0x3FAFDC, 1, 1)); - break; - } - case DrawTool.POLYGON: - { - status = polygonLabel; - drawSymbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID, 0x3FAFDC, 0.5, new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, 0x3FAFDC, 1, 1)); - break; - } - } - setMapAction(value, status, drawSymbol, searchDrawEnd); - } - - private function searchDrawEnd(event:DrawEvent):void - { - // deactivate the draw tool - finishDrawing = true; - - selectedDrawingIcon = null; - clearSelectionFilter(); - - event.target.deactivate(); - var geom:Geometry = event.graphic.geometry; - - if (geom is Polygon && GeometryUtil.polygonSelfIntersecting(geom as Polygon)) - { - geometryService.simplify([ geom ]); - } - else - { - //to improve search results - if (geom.type == Geometry.MAPPOINT) - { - geom = createExtentAroundMapPoint(geom as MapPoint, pointSearchTolerance); - } - - queryFeaturesGraphical(geom); - } - } - - private function createExtentAroundMapPoint(centerPoint:MapPoint, tolerance:Number):Extent - { - var screenPoint:Point = map.toScreen(centerPoint as MapPoint); - - var upperLeftScreenPoint:Point = new Point(screenPoint.x - tolerance, screenPoint.y - tolerance); - var lowerRightScreenPoint:Point = new Point(screenPoint.x + tolerance, screenPoint.y + tolerance); - - var upperLeftMapPoint:MapPoint = map.toMap(upperLeftScreenPoint); - var lowerRightMapPoint:MapPoint = map.toMap(lowerRightScreenPoint); - - return new Extent(upperLeftMapPoint.x, upperLeftMapPoint.y, lowerRightMapPoint.x, lowerRightMapPoint.y, map.spatialReference); - } - - private function queryFeaturesText():void - { - hideInfoWindow(); - - var i:int = cboLayerText.selectedIndex; - queryLayer = configSearchText[i].layer; - - if (queryLayer && !queryLayer.loaded) - { - queryLayer.addEventListener(LayerEvent.LOAD, queryLayer_loadHandler); - queryLayer.addEventListener(LayerEvent.LOAD_ERROR, queryLayer_loadErrorHandler); - - function queryLayer_loadHandler(event:LayerEvent):void - { - queryLayer.removeEventListener(LayerEvent.LOAD, queryLayer_loadHandler); - queryLayer.removeEventListener(LayerEvent.LOAD_ERROR, queryLayer_loadErrorHandler); - - queryFeaturesText(); - } - - function queryLayer_loadErrorHandler(event:LayerEvent):void - { - queryLayer.removeEventListener(LayerEvent.LOAD, queryLayer_loadHandler); - queryLayer.removeEventListener(LayerEvent.LOAD_ERROR, queryLayer_loadErrorHandler); - - showLoadErrorMessage(event); - } - return; - } - - queryExpr = configSearchText[i].expr; - queryFields = configSearchText[i].fields; - queryTitleField = configSearchText[i].titlefield; - queryLinkField = configSearchText[i].linkfield; - queryLinkAlias = configSearchText[i].linkalias; - - if (queryLayer && txtSearch.text) - { - var query:Query = new Query(); - var expr:String = queryExpr.replace(/\[value\]/g, txtSearch.text); - - query.where = expr; - query.outSpatialReference = map.spatialReference; - - const supportsServerSideSorting:Boolean = queryLayer.layerDetails - && queryLayer.layerDetails.version >= 10.1 - && queryLayer.layerDetails.supportsAdvancedQueries; - const orderByFields:Array = configSearchText[i].orderbyfields; - if (supportsServerSideSorting && orderByFields) - { - query.orderByFields = orderByFields; - } - - queryLayer.queryFeatures(query, new AsyncResponder(onResult, onFault, queryFields)); - showMessage(loadingLabel, true); - showStateResults(); - - function onResult(featureSet:FeatureSet, token:XMLList = null):void - { - try - { - if (!supportsServerSideSorting && orderByFields) - { - FeatureSetUtil.sortFeaturesByFieldName(featureSet, orderByFields); - } - - searchResultAC = createSearchResults(featureSet, token); - - addSharedData(widgetTitle, searchResultAC); - if (featureSet.features.length < 1) - { - showMessage(noResultLabel, false); - } - else - { - showMessage(selectionLabel + " " + featureSet.features.length, false); - } - } - catch (error:Error) - { - showMessage(error.message, false); - } - } - - function onFault(info:Object, token:Object = null):void - { - showMessage(info.toString(), false); - } - } - } - - private function queryFeaturesGraphical(geom:Geometry):void - { - hideInfoWindow(); - - var i:int = cboLayerGraphical.selectedIndex; - queryLayer = configSearchGraphical[i].layer; - - if (queryLayer && !queryLayer.loaded) - { - queryLayer.addEventListener(LayerEvent.LOAD, queryLayer_loadHandler); - queryLayer.addEventListener(LayerEvent.LOAD_ERROR, queryLayer_faultHandler); - - function queryLayer_loadHandler(event:LayerEvent):void - { - queryLayer.removeEventListener(LayerEvent.LOAD, queryLayer_loadHandler); - queryLayer.removeEventListener(LayerEvent.LOAD_ERROR, queryLayer_faultHandler); - - queryFeaturesGraphical(geom); - } - - function queryLayer_faultHandler(event:LayerEvent):void - { - queryLayer.removeEventListener(LayerEvent.LOAD, queryLayer_loadHandler); - queryLayer.removeEventListener(LayerEvent.LOAD_ERROR, queryLayer_faultHandler); - - showLoadErrorMessage(event); - } - return; - } - - queryGeom = geom; - queryFields = configSearchGraphical[i].fields; - queryTitleField = configSearchGraphical[i].titlefield; - queryLinkField = configSearchGraphical[i].linkfield; - queryLinkAlias = configSearchGraphical[i].linkalias; - - if (queryLayer) - { - var query:Query = new Query(); - query.geometry = queryGeom; - query.spatialRelationship = Query.SPATIAL_REL_INTERSECTS; - query.outSpatialReference = map.spatialReference; - - const supportsServerSideSorting:Boolean = queryLayer.layerDetails - && queryLayer.layerDetails.version >= 10.1 - && queryLayer.layerDetails.supportsAdvancedQueries; - const orderByFields:Array = configSearchText[i].orderbyfields; - if (supportsServerSideSorting && orderByFields) - { - query.orderByFields = orderByFields; - } - - queryLayer.queryFeatures(query, new AsyncResponder(onResult, onFault, queryFields)); - showMessage(loadingLabel, true); - showStateResults(); - - function onResult(featureSet:FeatureSet, token:XMLList = null):void - { - try - { - if (!supportsServerSideSorting && orderByFields) - { - FeatureSetUtil.sortFeaturesByFieldName(featureSet, orderByFields); - } - - searchResultAC = createSearchResults(featureSet, token); - - addSharedData(widgetTitle, searchResultAC); - if (featureSet.features.length < 1) - { - showMessage(noResultLabel, false); - } - else - { - showMessage(selectionLabel + " " + featureSet.features.length, false); - } - } - catch (error:Error) - { - showMessage(error.message, false); - } - } - - function onFault(info:Object, token:Object = null):void - { - showMessage(info.toString(), false); - } - } - } - - private function createSearchResults(featureSet:FeatureSet, queryFields:XMLList):ArrayCollection - { - var result:ArrayCollection = new ArrayCollection(); - - var layerDetails:LayerDetails = queryLayer.layerDetails; - if (!queryTitleField) - { - queryTitleField = featureSet.displayFieldName; - } - - for each (var graphic:Graphic in featureSet.features) - { - var resultAttributes:ResultAttributes = - ResultAttributes.toResultAttributes(queryFields, textDirection, graphic, featureSet, queryLayer, layerDetails, widgetTitle, queryTitleField, queryLinkField, queryLinkAlias); - - var searchResult:ResultItem = new ResultItem(graphic, resultAttributes); - result.addItem(searchResult); - - var infoWindowRenderer:ClassFactory = new ClassFactory(PopUpRenderer); - infoWindowRenderer.properties = { popUpInfo: configurePopUpInfo(resultAttributes)}; - graphic.infoWindowRenderer = infoWindowRenderer; - } - resultFeatureLayer.visible = true; - resultFeatureLayer.featureCollection = new FeatureCollection(featureSet, layerDetails); - switch (featureSet.geometryType) - { - case Geometry.MAPPOINT: - { - resultFeatureLayer.renderer = new SimpleRenderer(resultMarkerSymbol); - break; - } - case Geometry.POLYLINE: - { - resultFeatureLayer.renderer = new SimpleRenderer(resultLineSymbol); - break; - } - case Geometry.POLYGON: - { - resultFeatureLayer.renderer = new SimpleRenderer(resultFillSymbol); - break; - } - } - - return result; - } - - - private function configurePopUpInfo(resultAttributes:ResultAttributes):PopUpInfo - { - var popUpInfo:PopUpInfo = new PopUpInfo; - - popUpInfo.title = resultAttributes.title; - popUpInfo.description = resultAttributes.content; - - var link:String = resultAttributes.link; - var linkAlias:String = resultAttributes.linkAlias - if (link) - { - var pos:Number = link.length - 4; - var sfx:String = link.substr(pos, 4).toLowerCase(); - var isImageLink:Boolean = (sfx == ".jpg") || (sfx == ".png") || (sfx == ".gif"); - - if (isImageLink) - { - var popUpMediaInfo:PopUpMediaInfo = new PopUpMediaInfo; - popUpMediaInfo.imageLinkURL = link; - popUpMediaInfo.imageSourceURL = link; - popUpInfo.popUpMediaInfos = [ popUpMediaInfo ]; - } - else - { - var linkText:String = linkAlias ? linkAlias : link; - popUpInfo.description += "
    " + linkText + ""; - } - } - - return popUpInfo; - } - - private function clear():void - { - hideInfoWindow(); - if (resultFeatureLayer) - { - resultFeatureLayer.featureCollection = new FeatureCollection(new FeatureSet(), resultFeatureLayer.layerDetails); // empty featureset to clear - } - - clearMessage(); - txtSearch.text = ""; - if (searchResultAC) - { - searchResultAC.removeAll(); - } - } - - private var hitimer:uint; - - private function mouseOverSearchResult(event:Event):void - { - if (resultFeatureLayer.visible) - { - clearTimeout(hitimer); - var searchResult:ResultItem = ItemRenderer(event.target).data as ResultItem; - var mapExtentContainsSearchResult:Boolean = map.extent.containsXY(searchResult.center.x, searchResult.center.y); - - if (mapExtentContainsSearchResult) - { - hitimer = setTimeout(showHighlight, 300, [ searchResult ]); - } - else - { - hideInfoWindow(); - } - } - } - - private function mouseOutSearchResult(event:Event):void - { - clearTimeout(hitimer); - } - - private function clickSearchResult(event:Event):void - { - if (resultFeatureLayer.visible) - { - var searchResult:ResultItem = ItemRenderer(event.target).data as ResultItem; - if (searchResult.geometry) - { - if (searchResult.geometry.type == Geometry.MAPPOINT) - { - if (map.scale > zoomScale) - { - map.scale = zoomScale; - } - - map.centerAt(searchResult.center); - } - else - { - map.extent = searchResult.geometry.extent; - - if (!map.extent.contains(searchResult.geometry)) - { - map.level--; - } - } - } - clearTimeout(hitimer); - hitimer = setTimeout(showHighlight, 300, [ searchResult ]); - } - } - - private function showHighlight(params:Array):void - { - var searchResult:ResultItem = params[0]; - var showHighlightPoint:MapPoint = searchResult.center as MapPoint; - var linkAlias:String = searchResult.attributes.linkAlias; - - popUpRenderer.popUpInfo = configurePopUpInfo(searchResult.attributes); - popUpRenderer.graphic = searchResult.graphic; - - map.infoWindow.content = popUpRenderer; - map.infoWindow.contentOwner = popUpRenderer.graphic; - map.infoWindow.show(showHighlightPoint); - } - - private function showMessage(msg:String, swfVisible:Boolean):void - { - txtMessage.text = msg; - swfMessage.visible = swfVisible; - msgVisible = true; - } - - private function clearMessage():void - { - msgVisible = false; - } - - private function widgetClosedHandler(event:Event):void - { - if (shareResults) - { - map.removeLayer(resultFeatureLayer); - } - else - { - resultFeatureLayer.visible = false; - } - hideInfoWindow(); - setMapNavigation(null, null); - - finishDrawing = true; - if (selectedDrawingIcon) - { - selectedDrawingIcon.filters = []; - selectedDrawingIcon = null; - } - } - - private function widgetOpenedHandler(event:Event):void - { - if (resultFeatureLayer) - { - if (shareResults) - { - map.addLayer(resultFeatureLayer); - } - else - { - resultFeatureLayer.visible = true; - } - } - } - - private function showStateGraphicalSearch():void - { - this.currentState = "graphicalInput"; - wTemplate.selectedTitlebarButtonIndex = 0; - } - - private function showStateTextSearch():void - { - this.currentState = "textInput"; - wTemplate.selectedTitlebarButtonIndex = 1; - } - - private function showStateResults():void - { - this.currentState = "resultsList"; - wTemplate.selectedTitlebarButtonIndex = 2; - } - - private function iconRollOverHandler(event:MouseEvent):void - { - clearSelectionFilter(); - event.target.filters = [ glowFilter ]; - } - - private function iconRollOutHandler(event:MouseEvent):void - { - clearSelectionFilter(); - } - - private function clearSelectionFilter():void - { - for (var i:int = 0; i < imageGroup.numChildren; i++) - { - if (imageGroup.getChildAt(i).filters && imageGroup.getChildAt(i).filters.length > 0) - { - if (!(selectedDrawingIcon && imageGroup.getChildAt(i) === selectedDrawingIcon)) - { - imageGroup.getChildAt(i).filters = []; - } - } - } - } - - private function sharedDataUpdated(event:AppEvent):void - { - var data:Object = event.data; - - if (data.key == "Deactivate_DrawTool") - { - setMapAction(null, null, null, null); - if (selectedDrawingIcon) - { - selectedDrawingIcon.filters = []; - selectedDrawingIcon = null; - } - } - } - - private function hideInfoWindow():void - { - if (map.infoWindow.contentOwner && - ((map.infoWindow.contentOwner is Graphic && Graphic(map.infoWindow.contentOwner).graphicsLayer === resultFeatureLayer) || map.infoWindow.contentOwner is Map)) - { - map.infoWindow.hide(); - } - } - - private function geometryService_faultHandler(event:FaultEvent):void - { - showError(event.fault.toString()); - } - - private function geometryService_simplifyCompleteHandler(event:GeometryServiceEvent):void - { - queryFeaturesGraphical(event.result[0] as Polygon); - } - ]]> -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    + + + + + + + + + + + + + + + + + + 0) + { + pointSearchTolerance = userTolerance; + } + + if (Number(configXML.zoomscale) > 0) + { + zoomScale = Number(configXML.zoomscale); + } + } + wTemplate.addTitlebarButton(ICON_URL + "i_searchgraphical.png", graphicalsearchLabel, showStateGraphicalSearch); + if (configSearchText.length) + { + wTemplate.addTitlebarButton(ICON_URL + "i_searchtext.png", textsearchLabel, showStateTextSearch); + } + wTemplate.addTitlebarButton(ICON_URL + "i_table.png", resultsLabel, showStateResults); + + setInitialView(configXML.initialview[0]); + fade.targets = [ graphicalInput, textInput, resultsList ]; + wTemplate.visible = true; + + setupTextSearch(); + setupGraphicalSearch(); + AppEvent.addListener(AppEvent.DATA_PUBLISH, sharedDataUpdated); + } + + private function searchLayer_loadHandler(event:LayerEvent):void + { + var layer:FeatureLayer = event.layer as FeatureLayer; + layer.removeEventListener(LayerEvent.LOAD, searchLayer_loadHandler); + layer.removeEventListener(LayerEvent.LOAD_ERROR, searchLayer_faultHandler); + + layer.layerDetails.minScale = 0; // removing scale dependency + layer.layerDetails.maxScale = 0; + } + + private function searchLayer_faultHandler(event:LayerEvent):void + { + var layer:FeatureLayer = event.currentTarget as FeatureLayer; + + layer.removeEventListener(LayerEvent.LOAD, searchLayer_loadHandler); + layer.removeEventListener(LayerEvent.LOAD_ERROR, searchLayer_faultHandler); + + showLoadErrorMessage(event); + } + + private function showLoadErrorMessage(event:LayerEvent):void + { + var errorMessage:String = getDefaultString("layerFailedToLoad", + event.layer.name, + ErrorMessageUtil.makeHTMLSafe(ErrorMessageUtil.buildFaultMessage(event.fault))); + + showError(errorMessage); + } + + private function setInitialView(view:String):void + { + if (view == "graphical") + { + showStateGraphicalSearch(); + } + else if (view == "text") + { + showStateTextSearch(); + } + } + + private function setupTextSearch():void + { + if (configSearchText.length) + { + cboLayerText.dataProvider = new ArrayList(configSearchText); + txtLabelText.text = configSearchText[0].textlabel; + if (configSearchText.length == 1) + { + boxText.visible = false; + boxText.includeInLayout = false; + } + } + else + { + boxText.visible = false; + txtLabelText.text = nolayerLabel; + } + } + + private function setupGraphicalSearch():void + { + if (configSearchGraphical.length) + { + cboLayerGraphical.dataProvider = configSearchGraphical; + txtLabelGraphical.text = configSearchGraphical[0].graphicallabel; + if (configSearchGraphical.length == 1) + { + boxGraphical.visible = false; + boxGraphical.includeInLayout = false; + } + } + else + { + boxGraphical.visible = false; + imageGroup.visible = false; + clearGroup.visible = false; + txtLabelGraphical.text = nolayerLabel; + } + } + + private function resultFeatureLayer_hideHandler(event:FlexEvent):void + { + hideInfoWindow(); + } + + private function searchLayerChangedText():void + { + var i:int = cboLayerText.selectedIndex; + txtLabelText.text = configSearchText[i].textlabel; + } + + private function searchLayerChangedGraphical():void + { + var i:int = cboLayerGraphical.selectedIndex; + txtLabelGraphical.text = configSearchGraphical[i].graphicallabel; + } + + private function activateDrawTool(event:MouseEvent):void + { + addSharedData("Deactivate_DrawTool", null); // to be able to deactivate drawTool on other widgets + + // apply glow + selectedDrawingIcon = FocusableImage(event.currentTarget); + clearSelectionFilter(); + selectedDrawingIcon.filters = [ glowFilter ]; + + finishDrawing = false; + + var status:String; + var value:String = selectedDrawingIcon.name; + switch (value) + { + case DrawTool.MAPPOINT: + { + status = pointLabel; + drawSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.STYLE_CIRCLE, 15, 0x3FAFDC, 1); + break; + } + case DrawTool.POLYLINE: + { + status = lineLabel; + drawSymbol = new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, 0x3FAFDC, 1, 1); + break; + } + case DrawTool.EXTENT: + { + status = rectangleLabel; + drawSymbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID, 0x3FAFDC, 0.5, new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, 0x3FAFDC, 1, 1)); + break; + } + case DrawTool.POLYGON: + { + status = polygonLabel; + drawSymbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID, 0x3FAFDC, 0.5, new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, 0x3FAFDC, 1, 1)); + break; + } + } + setMapAction(value, status, drawSymbol, searchDrawEnd); + } + + private function searchDrawEnd(event:DrawEvent):void + { + // deactivate the draw tool + finishDrawing = true; + + selectedDrawingIcon = null; + clearSelectionFilter(); + + event.target.deactivate(); + var geom:Geometry = event.graphic.geometry; + + if (geom is Polygon && GeometryUtil.polygonSelfIntersecting(geom as Polygon)) + { + geometryService.simplify([ geom ]); + } + else + { + //to improve search results + if (geom.type == Geometry.MAPPOINT) + { + geom = createExtentAroundMapPoint(geom as MapPoint, pointSearchTolerance); + } + + queryFeaturesGraphical(geom); + } + } + + private function createExtentAroundMapPoint(centerPoint:MapPoint, tolerance:Number):Extent + { + var screenPoint:Point = map.toScreen(centerPoint as MapPoint); + + var upperLeftScreenPoint:Point = new Point(screenPoint.x - tolerance, screenPoint.y - tolerance); + var lowerRightScreenPoint:Point = new Point(screenPoint.x + tolerance, screenPoint.y + tolerance); + + var upperLeftMapPoint:MapPoint = map.toMap(upperLeftScreenPoint); + var lowerRightMapPoint:MapPoint = map.toMap(lowerRightScreenPoint); + + return new Extent(upperLeftMapPoint.x, upperLeftMapPoint.y, lowerRightMapPoint.x, lowerRightMapPoint.y, map.spatialReference); + } + + private function queryFeaturesText():void + { + hideInfoWindow(); + + var i:int = cboLayerText.selectedIndex; + queryLayer = configSearchText[i].layer; + + if (queryLayer && !queryLayer.loaded) + { + queryLayer.addEventListener(LayerEvent.LOAD, queryLayer_loadHandler); + queryLayer.addEventListener(LayerEvent.LOAD_ERROR, queryLayer_loadErrorHandler); + + function queryLayer_loadHandler(event:LayerEvent):void + { + queryLayer.removeEventListener(LayerEvent.LOAD, queryLayer_loadHandler); + queryLayer.removeEventListener(LayerEvent.LOAD_ERROR, queryLayer_loadErrorHandler); + + queryFeaturesText(); + } + + function queryLayer_loadErrorHandler(event:LayerEvent):void + { + queryLayer.removeEventListener(LayerEvent.LOAD, queryLayer_loadHandler); + queryLayer.removeEventListener(LayerEvent.LOAD_ERROR, queryLayer_loadErrorHandler); + + showLoadErrorMessage(event); + } + return; + } + + queryExpr = configSearchText[i].expr; + queryFields = configSearchText[i].fields; + queryTitleField = configSearchText[i].titlefield; + queryLinkField = configSearchText[i].linkfield; + queryLinkAlias = configSearchText[i].linkalias; + + if (queryLayer && txtSearch.text) + { + var query:Query = new Query(); + var expr:String = queryExpr.replace(/\[value\]/g, txtSearch.text); + + query.where = expr; + query.outSpatialReference = map.spatialReference; + + const supportsServerSideSorting:Boolean = queryLayer.layerDetails + && queryLayer.layerDetails.version >= 10.1 + && queryLayer.layerDetails.supportsAdvancedQueries; + const orderByFields:Array = configSearchText[i].orderbyfields; + if (supportsServerSideSorting && orderByFields) + { + query.orderByFields = orderByFields; + } + + queryLayer.queryFeatures(query, new AsyncResponder(onResult, onFault, queryFields)); + showMessage(loadingLabel, true); + showStateResults(); + + function onResult(featureSet:FeatureSet, token:XMLList = null):void + { + try + { + if (!supportsServerSideSorting && orderByFields) + { + FeatureSetUtil.sortFeaturesByFieldName(featureSet, orderByFields); + } + + searchResultAC = createSearchResults(featureSet, token); + + addSharedData(widgetTitle, searchResultAC); + if (featureSet.features.length < 1) + { + showMessage(noResultLabel, false); + } + else + { + showMessage(selectionLabel + " " + featureSet.features.length, false); + } + } + catch (error:Error) + { + showMessage(error.message, false); + } + } + + function onFault(info:Object, token:Object = null):void + { + showMessage(info.toString(), false); + } + } + } + + private function queryFeaturesGraphical(geom:Geometry):void + { + hideInfoWindow(); + + var i:int = cboLayerGraphical.selectedIndex; + queryLayer = configSearchGraphical[i].layer; + + if (queryLayer && !queryLayer.loaded) + { + queryLayer.addEventListener(LayerEvent.LOAD, queryLayer_loadHandler); + queryLayer.addEventListener(LayerEvent.LOAD_ERROR, queryLayer_faultHandler); + + function queryLayer_loadHandler(event:LayerEvent):void + { + queryLayer.removeEventListener(LayerEvent.LOAD, queryLayer_loadHandler); + queryLayer.removeEventListener(LayerEvent.LOAD_ERROR, queryLayer_faultHandler); + + queryFeaturesGraphical(geom); + } + + function queryLayer_faultHandler(event:LayerEvent):void + { + queryLayer.removeEventListener(LayerEvent.LOAD, queryLayer_loadHandler); + queryLayer.removeEventListener(LayerEvent.LOAD_ERROR, queryLayer_faultHandler); + + showLoadErrorMessage(event); + } + return; + } + + queryGeom = geom; + queryFields = configSearchGraphical[i].fields; + queryTitleField = configSearchGraphical[i].titlefield; + queryLinkField = configSearchGraphical[i].linkfield; + queryLinkAlias = configSearchGraphical[i].linkalias; + + if (queryLayer) + { + var query:Query = new Query(); + query.geometry = queryGeom; + query.spatialRelationship = Query.SPATIAL_REL_INTERSECTS; + query.outSpatialReference = map.spatialReference; + + const supportsServerSideSorting:Boolean = queryLayer.layerDetails + && queryLayer.layerDetails.version >= 10.1 + && queryLayer.layerDetails.supportsAdvancedQueries; + const orderByFields:Array = configSearchText[i].orderbyfields; + if (supportsServerSideSorting && orderByFields) + { + query.orderByFields = orderByFields; + } + + queryLayer.queryFeatures(query, new AsyncResponder(onResult, onFault, queryFields)); + showMessage(loadingLabel, true); + showStateResults(); + + function onResult(featureSet:FeatureSet, token:XMLList = null):void + { + try + { + if (!supportsServerSideSorting && orderByFields) + { + FeatureSetUtil.sortFeaturesByFieldName(featureSet, orderByFields); + } + + searchResultAC = createSearchResults(featureSet, token); + + addSharedData(widgetTitle, searchResultAC); + if (featureSet.features.length < 1) + { + showMessage(noResultLabel, false); + } + else + { + showMessage(selectionLabel + " " + featureSet.features.length, false); + } + } + catch (error:Error) + { + showMessage(error.message, false); + } + } + + function onFault(info:Object, token:Object = null):void + { + showMessage(info.toString(), false); + } + } + } + + private function createSearchResults(featureSet:FeatureSet, queryFields:XMLList):ArrayCollection + { + var result:ArrayCollection = new ArrayCollection(); + + var layerDetails:LayerDetails = queryLayer.layerDetails; + if (!queryTitleField) + { + queryTitleField = featureSet.displayFieldName; + } + + for each (var graphic:Graphic in featureSet.features) + { + var resultAttributes:ResultAttributes = + ResultAttributes.toResultAttributes(queryFields, textDirection, graphic, featureSet, queryLayer, layerDetails, widgetTitle, queryTitleField, queryLinkField, queryLinkAlias); + + var searchResult:ResultItem = new ResultItem(graphic, resultAttributes); + result.addItem(searchResult); + + var infoWindowRenderer:ClassFactory = new ClassFactory(PopUpRenderer); + infoWindowRenderer.properties = { popUpInfo: configurePopUpInfo(resultAttributes)}; + graphic.infoWindowRenderer = infoWindowRenderer; + } + resultFeatureLayer.visible = true; + resultFeatureLayer.featureCollection = new FeatureCollection(featureSet, layerDetails); + switch (featureSet.geometryType) + { + case Geometry.MAPPOINT: + { + resultFeatureLayer.renderer = new SimpleRenderer(resultMarkerSymbol); + break; + } + case Geometry.POLYLINE: + { + resultFeatureLayer.renderer = new SimpleRenderer(resultLineSymbol); + break; + } + case Geometry.POLYGON: + { + resultFeatureLayer.renderer = new SimpleRenderer(resultFillSymbol); + break; + } + } + + return result; + } + + + private function configurePopUpInfo(resultAttributes:ResultAttributes):PopUpInfo + { + var popUpInfo:PopUpInfo = new PopUpInfo; + + popUpInfo.title = resultAttributes.title; + popUpInfo.description = resultAttributes.content; + + var link:String = resultAttributes.link; + var linkAlias:String = resultAttributes.linkAlias + if (link) + { + var pos:Number = link.length - 4; + var sfx:String = link.substr(pos, 4).toLowerCase(); + var isImageLink:Boolean = (sfx == ".jpg") || (sfx == ".png") || (sfx == ".gif"); + + if (isImageLink) + { + var popUpMediaInfo:PopUpMediaInfo = new PopUpMediaInfo; + popUpMediaInfo.imageLinkURL = link; + popUpMediaInfo.imageSourceURL = link; + popUpInfo.popUpMediaInfos = [ popUpMediaInfo ]; + } + else + { + var linkText:String = linkAlias ? linkAlias : link; + popUpInfo.description += "
    " + linkText + ""; + } + } + + return popUpInfo; + } + + private function clear():void + { + hideInfoWindow(); + if (resultFeatureLayer) + { + resultFeatureLayer.featureCollection = new FeatureCollection(new FeatureSet(), resultFeatureLayer.layerDetails); // empty featureset to clear + } + + clearMessage(); + txtSearch.text = ""; + if (searchResultAC) + { + searchResultAC.removeAll(); + } + } + + private var hitimer:uint; + + private function mouseOverSearchResult(event:Event):void + { + if (resultFeatureLayer.visible) + { + clearTimeout(hitimer); + var searchResult:ResultItem = ItemRenderer(event.target).data as ResultItem; + var mapExtentContainsSearchResult:Boolean = map.extent.containsXY(searchResult.center.x, searchResult.center.y); + + if (mapExtentContainsSearchResult) + { + hitimer = setTimeout(showHighlight, 300, [ searchResult ]); + } + else + { + hideInfoWindow(); + } + } + } + + private function mouseOutSearchResult(event:Event):void + { + clearTimeout(hitimer); + } + + private function clickSearchResult(event:Event):void + { + if (resultFeatureLayer.visible) + { + var searchResult:ResultItem = ItemRenderer(event.target).data as ResultItem; + if (searchResult.geometry) + { + if (searchResult.geometry.type == Geometry.MAPPOINT) + { + if (map.scale > zoomScale) + { + map.scale = zoomScale; + } + + map.centerAt(searchResult.center); + } + else + { + map.extent = searchResult.geometry.extent; + + if (!map.extent.contains(searchResult.geometry)) + { + map.level--; + } + } + } + clearTimeout(hitimer); + hitimer = setTimeout(showHighlight, 300, [ searchResult ]); + } + } + + private function showHighlight(params:Array):void + { + var searchResult:ResultItem = params[0]; + var showHighlightPoint:MapPoint = searchResult.center as MapPoint; + var linkAlias:String = searchResult.attributes.linkAlias; + + popUpRenderer.popUpInfo = configurePopUpInfo(searchResult.attributes); + popUpRenderer.graphic = searchResult.graphic; + + map.infoWindow.content = popUpRenderer; + map.infoWindow.contentOwner = popUpRenderer.graphic; + map.infoWindow.show(showHighlightPoint); + } + + private function showMessage(msg:String, swfVisible:Boolean):void + { + txtMessage.text = msg; + swfMessage.visible = swfVisible; + msgVisible = true; + } + + private function clearMessage():void + { + msgVisible = false; + } + + private function widgetClosedHandler(event:Event):void + { + if (shareResults) + { + map.removeLayer(resultFeatureLayer); + } + else + { + resultFeatureLayer.visible = false; + } + hideInfoWindow(); + setMapNavigation(null, null); + + finishDrawing = true; + if (selectedDrawingIcon) + { + selectedDrawingIcon.filters = []; + selectedDrawingIcon = null; + } + } + + private function widgetOpenedHandler(event:Event):void + { + if (resultFeatureLayer) + { + if (shareResults) + { + map.addLayer(resultFeatureLayer); + } + else + { + resultFeatureLayer.visible = true; + } + } + } + + private function showStateGraphicalSearch():void + { + this.currentState = "graphicalInput"; + wTemplate.selectedTitlebarButtonIndex = 0; + } + + private function showStateTextSearch():void + { + this.currentState = "textInput"; + wTemplate.selectedTitlebarButtonIndex = 1; + } + + private function showStateResults():void + { + this.currentState = "resultsList"; + wTemplate.selectedTitlebarButtonIndex = 2; + } + + private function iconRollOverHandler(event:MouseEvent):void + { + clearSelectionFilter(); + event.target.filters = [ glowFilter ]; + } + + private function iconRollOutHandler(event:MouseEvent):void + { + clearSelectionFilter(); + } + + private function clearSelectionFilter():void + { + for (var i:int = 0; i < imageGroup.numChildren; i++) + { + if (imageGroup.getChildAt(i).filters && imageGroup.getChildAt(i).filters.length > 0) + { + if (!(selectedDrawingIcon && imageGroup.getChildAt(i) === selectedDrawingIcon)) + { + imageGroup.getChildAt(i).filters = []; + } + } + } + } + + private function sharedDataUpdated(event:AppEvent):void + { + var data:Object = event.data; + + if (data.key == "Deactivate_DrawTool") + { + setMapAction(null, null, null, null); + if (selectedDrawingIcon) + { + selectedDrawingIcon.filters = []; + selectedDrawingIcon = null; + } + } + } + + private function hideInfoWindow():void + { + if (map.infoWindow.contentOwner && + ((map.infoWindow.contentOwner is Graphic && Graphic(map.infoWindow.contentOwner).graphicsLayer === resultFeatureLayer) || map.infoWindow.contentOwner is Map)) + { + map.infoWindow.hide(); + } + } + + private function geometryService_faultHandler(event:FaultEvent):void + { + showError(event.fault.toString()); + } + + private function geometryService_simplifyCompleteHandler(event:GeometryServiceEvent):void + { + queryFeaturesGraphical(event.result[0] as Polygon); + } + ]]> +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    diff --git a/src/widgets/Search/SearchWidget_Louisville.xml b/src/widgets/Search/SearchWidget_Louisville.xml index 5a463e4..ded56a1 100644 --- a/src/widgets/Search/SearchWidget_Louisville.xml +++ b/src/widgets/Search/SearchWidget_Louisville.xml @@ -1,34 +1,34 @@ - - - - - Louisville Parcels - http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Louisville/LOJIC_LandRecords_Louisville/MapServer/0 - PARCELID like '[value]' - Search by Parcel ID [ Example: 181001490000 or 1810%] - PARCELID - - - - - - - Louisville Police Facilities - http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Louisville/LOJIC_PublicSafety_Louisville/MapServer/3 - PD_NAME like '[value]' - Search Police Stations by name... [ Example: 2ND DIVISION or 2%] - PD_NAME - - - - - - - - 10000 - - - + + + + + Louisville Parcels + http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Louisville/LOJIC_LandRecords_Louisville/MapServer/0 + PARCELID like '[value]' + Search by Parcel ID [ Example: 181001490000 or 1810%] + PARCELID + + + + + + + Louisville Police Facilities + http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Louisville/LOJIC_PublicSafety_Louisville/MapServer/3 + PD_NAME like '[value]' + Search Police Stations by name... [ Example: 2ND DIVISION or 2%] + PD_NAME + + + + + + + + 10000 + + + diff --git a/src/widgets/Splash/SplashWidget.mxml b/src/widgets/Splash/SplashWidget.mxml index 5189fe4..fd14dda 100644 --- a/src/widgets/Splash/SplashWidget.mxml +++ b/src/widgets/Splash/SplashWidget.mxml @@ -1,47 +1,47 @@ - - - - - - - + + + + + + + diff --git a/src/widgets/Splash/SplashWidget.xml b/src/widgets/Splash/SplashWidget.xml index 4d26221..e0007c9 100644 --- a/src/widgets/Splash/SplashWidget.xml +++ b/src/widgets/Splash/SplashWidget.xml @@ -1,21 +1,21 @@ - - - - - -
    - ArcGIS Viewer for Flex -

    - ]]> -
    -
    - - - + + + + + +
    + ArcGIS Viewer for Flex +

    + ]]> +
    +
    + + + diff --git a/src/widgets/StaticImage/StaticImageWidget.mxml b/src/widgets/StaticImage/StaticImageWidget.mxml index ab8c3f2..6d9f7f2 100644 --- a/src/widgets/StaticImage/StaticImageWidget.mxml +++ b/src/widgets/StaticImage/StaticImageWidget.mxml @@ -1,88 +1,88 @@ - - - - - - - - - - - + + + + + + + + + + + diff --git a/src/widgets/StaticImage/StaticImageWidget.xml b/src/widgets/StaticImage/StaticImageWidget.xml index e67d671..0df3928 100644 --- a/src/widgets/StaticImage/StaticImageWidget.xml +++ b/src/widgets/StaticImage/StaticImageWidget.xml @@ -1,11 +1,11 @@ - - - assets/images/globe.png - http://www.esri.com - http://www.esri.com - - - + + + assets/images/globe.png + http://www.esri.com + http://www.esri.com + + + diff --git a/src/widgets/Time/TimeWidget.mxml b/src/widgets/Time/TimeWidget.mxml index c271f67..1d31d8b 100644 --- a/src/widgets/Time/TimeWidget.mxml +++ b/src/widgets/Time/TimeWidget.mxml @@ -1,246 +1,246 @@ - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + diff --git a/src/widgets/Time/TimeWidget.xml b/src/widgets/Time/TimeWidget.xml index 5cbcc94..f62fba3 100644 --- a/src/widgets/Time/TimeWidget.xml +++ b/src/widgets/Time/TimeWidget.xml @@ -1,23 +1,23 @@ - - - - MMMM, YYYY - false - false - 1 - 1000 - - 2010/04/25 19:00:00 UTC - 2010/06/04 19:00:00 UTC - - - 1 - days - - - - - + + + + MMMM, YYYY + false + false + 1 + 1000 + + 2010/04/25 19:00:00 UTC + 2010/06/04 19:00:00 UTC + + + 1 + days + + + + + diff --git a/src/widgets/Time/TimeWidget_QuakesSince1970.xml b/src/widgets/Time/TimeWidget_QuakesSince1970.xml index f863ffa..8e869be 100644 --- a/src/widgets/Time/TimeWidget_QuakesSince1970.xml +++ b/src/widgets/Time/TimeWidget_QuakesSince1970.xml @@ -1,16 +1,16 @@ - - - - MMMM, YYYY - false - false - 1 - 1000 - - - - - + + + + MMMM, YYYY + false + false + 1 + 1000 + + + + + diff --git a/src/widgets/WidgetContainer/WidgetContainer.mxml b/src/widgets/WidgetContainer/WidgetContainer.mxml index 3b36be8..50a7d73 100644 --- a/src/widgets/WidgetContainer/WidgetContainer.mxml +++ b/src/widgets/WidgetContainer/WidgetContainer.mxml @@ -1,805 +1,805 @@ - - - - - - 0 - screenH + lastVisibleWidget.height + PADDING; - } - else if (dir == LEFT) - { - lastVisibleWidget = widgetContainer.getElementAt(widgetContainer.numElements - 1); - return widgetContainer.horizontalScrollPosition < widgetContainer.contentWidth - lastVisibleWidget.width - PADDING; - } - else if (dir == RIGHT) - { - lastVisibleWidget = widgetContainer.getElementAt(0); - return widgetContainer.horizontalScrollPosition > 0 - screenW + lastVisibleWidget.width + PADDING; - } - - return false; - } - - private function scrollToWidget(wObj:IVisualElement):void - { - setTimeout(scrollToWidgetStart, 1000, [ wObj ]); - } - - private function scrollToWidgetStart(params:Array):void - { - var wObj:DisplayObject = params[0]; - if (containWidget(wObj as IVisualElement) < 0) - { - //widget has been closed. - return; - } - - var boxRect:Rectangle = widgetContainer.getRect(this); - - var screenW:Number = boxRect.width; - var screenH:Number = boxRect.height; - - if (screenW <= 0 || screenH <= 0) - { - // safety guard - return; - } - - var horizonX:Number = widgetContainer.horizontalScrollPosition; - var verticalY:Number = widgetContainer.verticalScrollPosition; - - var wRect:Rectangle = wObj.getRect(widgetContainer); - - if (wRect.height <= 0 || wRect.width <= 0) - { - // safety guard - return; - } - - var wTop:Number = wRect.y; - var wBottom:Number = wTop + wRect.height; - var wLeft:Number = wRect.x; - var wRight:Number = wLeft + wRect.width; - - var rightDelta:Number = wRight - (screenW + horizonX); - var leftDelta:Number = horizonX - wLeft; - var topDelta:Number = verticalY - wTop; - var bottomDelta:Number = wBottom - (screenH + verticalY); - - if ((rightDelta > 0) || (leftDelta > 0) || (topDelta > 0) || (bottomDelta > 0)) - { - if (topDelta > 0) - { - scrolldist = topDelta; - scrolldir = UP; - } - else if (bottomDelta > 0) - { - scrolldist = bottomDelta; - scrolldir = DOWN; - } - else if (leftDelta > 0) - { - scrolldist = leftDelta; - scrolldir = RIGHT; - } - else if (rightDelta > 0) - { - scrolldist = rightDelta; - scrolldir = LEFT; - } - scrollinterval = setInterval(scrollToWidgetAction, 30, params); - dist = 0; - } - } - - private function scrollToWidgetAction(params:Array):void - { - if (dist < scrolldist) - { - if (scrolldir == UP) - { - widgetContainer.verticalScrollPosition -= 10; - } - else if (scrolldir == DOWN) - { - widgetContainer.verticalScrollPosition += 10; - } - else if (scrolldir == LEFT) - { - widgetContainer.horizontalScrollPosition += 10; - } - else if (scrolldir == RIGHT) - { - widgetContainer.horizontalScrollPosition -= 10; - } - dist += 10; - } - else - { - clearInterval(scrollinterval); - } - } - - //======================================================== - // Setting Layout - //======================================================== - //layout - /*TODO: only when there is widget opened the position controller shows up - */ - private var _widgetLayout:String; - - private function isConstrainedLayout():Boolean - { - return widgetlayout == HORIZONTAL || widgetlayout == VERTICAL || widgetlayout == TILE || widgetlayout == FIX; - } - - public function get widgetlayout():String - { - return _widgetLayout; - } - - private function setWidgetLayout(layout:String):void - { - if (_widgetLayout != layout) - { - _widgetLayout = layout; - - switch (layout) - { - case HORIZONTAL: - { - var hLayout:HorizontalLayout = new HorizontalLayout; - hLayout.verticalAlign = "bottom"; - hLayout.paddingLeft = 20; - hLayout.paddingBottom = 23; - hLayout.gap = 35; - widgetContainer.layout = hLayout; - isDraggable = false; - isResizeable = false; - break; - } - case VERTICAL: - { - var vLayout:VerticalLayout = new VerticalLayout; - vLayout.horizontalAlign = "right"; - vLayout.paddingBottom = 10; - vLayout.paddingRight = 25; - vLayout.paddingTop = 10; - vLayout.gap = 35; - widgetContainer.layout = vLayout; - isDraggable = false; - isResizeable = false; - break; - } - case TILE: - { - var tLayout:TileLayout = new TileLayout; - widgetContainer.layout = tLayout; - tLayout.verticalAlign = "bottom"; - isResizeable = false; - isDraggable = false; - break; - } - case FIX: - { - widgetContainer.layout = new BasicLayout; - isResizeable = false; - isDraggable = false; - break; - } - case FLOAT: - { - widgetContainer.layout = new BasicLayout(); - widgetContainer.clipAndEnableScrolling = false; - isResizeable = true; - isDraggable = true; - break; - } - default: - { - widgetContainer.layout = new BasicLayout(); - isResizeable = true; - isDraggable = true; - break; - } - } - - if (widgetAdded) - { - setHVcontrol(widgetlayout); - } - setWidgetControl(); - } - } - - [Bindable] - private var _hv:Boolean; - [Bindable] - private var _vv:Boolean; - - private function setHVcontrol(layout:String):void - { - switch (layout) - { - case HORIZONTAL: - { - _hv = true; - _vv = false; - break; - } - case VERTICAL: - { - _hv = false; - _vv = true; - break; - } - default: - { - _hv = false; - _vv = false; - break; - } - } - } - - /* go through widget to change it visual based on the layout */ - - private function setWidgetControl():void - { - var widget:IVisualElement; - for (var i:int = 0; i < widgetContainer.numElements; i++) - { - widget = widgetContainer.getElementAt(i); - - var baseWidget:IBaseWidget = widget as IBaseWidget; - baseWidget.isDraggable = isDraggable; - constrainWidget(baseWidget); - } - } - - private function constrainWidget(baseWidget:IBaseWidget):void - { - // if the layout is constained, override the base widget's settings, - // otherwise, the base widget's settings will be respected. - if (isConstrainedLayout()) - { - baseWidget.isResizeable = isResizeable; - } - } - - [Bindable] - private var containerWidth:Number; - [Bindable] - private var containerHeight:Number; - - private function toggleState(state:String):void - { - AppEvent.dispatch(AppEvent.TOC_HIDDEN); // always hide the toc layer menu - - if (state == VERTICAL) - { - containerWidth = widgetContainer.width; - if (currentState != "collapsedRight") - { - currentState = "collapsedRight"; - } - else - { - widgetContainer.clipAndEnableScrolling = true; - currentState = "normal"; - } - } - else if (state == HORIZONTAL) - { - containerHeight = widgetContainer.height; - if (currentState != "collapsedDown") - { - currentState = "collapsedDown"; - } - else - { - widgetContainer.clipAndEnableScrolling = true; - currentState = "normal"; - } - } - } - - protected function hControl_creationCompleteHandler(event:FlexEvent):void - { - hControl.setStyle("backgroundColor", getStyle("contentBackgroundColor")); - hControl.setStyle("backgroundAlpha", getStyle("backgroundAlpha")); - hControl.setStyle("borderColor", FlexGlobals.topLevelApplication.getStyle("color")); - } - - - protected function vControl_creationCompleteHandler(event:FlexEvent):void - { - vControl.setStyle("backgroundColor", getStyle("contentBackgroundColor")); - vControl.setStyle("backgroundAlpha", getStyle("backgroundAlpha")); - vControl.setStyle("borderColor", FlexGlobals.topLevelApplication.getStyle("color")); - } - - private function toNormal_effectEndHandler(event:EffectEvent):void - { - if (elmToAdd != null) - { - addWidget(elmToAdd); - elmToAdd = null; - } - } - ]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + 0 - screenH + lastVisibleWidget.height + PADDING; + } + else if (dir == LEFT) + { + lastVisibleWidget = widgetContainer.getElementAt(widgetContainer.numElements - 1); + return widgetContainer.horizontalScrollPosition < widgetContainer.contentWidth - lastVisibleWidget.width - PADDING; + } + else if (dir == RIGHT) + { + lastVisibleWidget = widgetContainer.getElementAt(0); + return widgetContainer.horizontalScrollPosition > 0 - screenW + lastVisibleWidget.width + PADDING; + } + + return false; + } + + private function scrollToWidget(wObj:IVisualElement):void + { + setTimeout(scrollToWidgetStart, 1000, [ wObj ]); + } + + private function scrollToWidgetStart(params:Array):void + { + var wObj:DisplayObject = params[0]; + if (containWidget(wObj as IVisualElement) < 0) + { + //widget has been closed. + return; + } + + var boxRect:Rectangle = widgetContainer.getRect(this); + + var screenW:Number = boxRect.width; + var screenH:Number = boxRect.height; + + if (screenW <= 0 || screenH <= 0) + { + // safety guard + return; + } + + var horizonX:Number = widgetContainer.horizontalScrollPosition; + var verticalY:Number = widgetContainer.verticalScrollPosition; + + var wRect:Rectangle = wObj.getRect(widgetContainer); + + if (wRect.height <= 0 || wRect.width <= 0) + { + // safety guard + return; + } + + var wTop:Number = wRect.y; + var wBottom:Number = wTop + wRect.height; + var wLeft:Number = wRect.x; + var wRight:Number = wLeft + wRect.width; + + var rightDelta:Number = wRight - (screenW + horizonX); + var leftDelta:Number = horizonX - wLeft; + var topDelta:Number = verticalY - wTop; + var bottomDelta:Number = wBottom - (screenH + verticalY); + + if ((rightDelta > 0) || (leftDelta > 0) || (topDelta > 0) || (bottomDelta > 0)) + { + if (topDelta > 0) + { + scrolldist = topDelta; + scrolldir = UP; + } + else if (bottomDelta > 0) + { + scrolldist = bottomDelta; + scrolldir = DOWN; + } + else if (leftDelta > 0) + { + scrolldist = leftDelta; + scrolldir = RIGHT; + } + else if (rightDelta > 0) + { + scrolldist = rightDelta; + scrolldir = LEFT; + } + scrollinterval = setInterval(scrollToWidgetAction, 30, params); + dist = 0; + } + } + + private function scrollToWidgetAction(params:Array):void + { + if (dist < scrolldist) + { + if (scrolldir == UP) + { + widgetContainer.verticalScrollPosition -= 10; + } + else if (scrolldir == DOWN) + { + widgetContainer.verticalScrollPosition += 10; + } + else if (scrolldir == LEFT) + { + widgetContainer.horizontalScrollPosition += 10; + } + else if (scrolldir == RIGHT) + { + widgetContainer.horizontalScrollPosition -= 10; + } + dist += 10; + } + else + { + clearInterval(scrollinterval); + } + } + + //======================================================== + // Setting Layout + //======================================================== + //layout + /*TODO: only when there is widget opened the position controller shows up + */ + private var _widgetLayout:String; + + private function isConstrainedLayout():Boolean + { + return widgetlayout == HORIZONTAL || widgetlayout == VERTICAL || widgetlayout == TILE || widgetlayout == FIX; + } + + public function get widgetlayout():String + { + return _widgetLayout; + } + + private function setWidgetLayout(layout:String):void + { + if (_widgetLayout != layout) + { + _widgetLayout = layout; + + switch (layout) + { + case HORIZONTAL: + { + var hLayout:HorizontalLayout = new HorizontalLayout; + hLayout.verticalAlign = "bottom"; + hLayout.paddingLeft = 20; + hLayout.paddingBottom = 23; + hLayout.gap = 35; + widgetContainer.layout = hLayout; + isDraggable = false; + isResizeable = false; + break; + } + case VERTICAL: + { + var vLayout:VerticalLayout = new VerticalLayout; + vLayout.horizontalAlign = "right"; + vLayout.paddingBottom = 10; + vLayout.paddingRight = 25; + vLayout.paddingTop = 10; + vLayout.gap = 35; + widgetContainer.layout = vLayout; + isDraggable = false; + isResizeable = false; + break; + } + case TILE: + { + var tLayout:TileLayout = new TileLayout; + widgetContainer.layout = tLayout; + tLayout.verticalAlign = "bottom"; + isResizeable = false; + isDraggable = false; + break; + } + case FIX: + { + widgetContainer.layout = new BasicLayout; + isResizeable = false; + isDraggable = false; + break; + } + case FLOAT: + { + widgetContainer.layout = new BasicLayout(); + widgetContainer.clipAndEnableScrolling = false; + isResizeable = true; + isDraggable = true; + break; + } + default: + { + widgetContainer.layout = new BasicLayout(); + isResizeable = true; + isDraggable = true; + break; + } + } + + if (widgetAdded) + { + setHVcontrol(widgetlayout); + } + setWidgetControl(); + } + } + + [Bindable] + private var _hv:Boolean; + [Bindable] + private var _vv:Boolean; + + private function setHVcontrol(layout:String):void + { + switch (layout) + { + case HORIZONTAL: + { + _hv = true; + _vv = false; + break; + } + case VERTICAL: + { + _hv = false; + _vv = true; + break; + } + default: + { + _hv = false; + _vv = false; + break; + } + } + } + + /* go through widget to change it visual based on the layout */ + + private function setWidgetControl():void + { + var widget:IVisualElement; + for (var i:int = 0; i < widgetContainer.numElements; i++) + { + widget = widgetContainer.getElementAt(i); + + var baseWidget:IBaseWidget = widget as IBaseWidget; + baseWidget.isDraggable = isDraggable; + constrainWidget(baseWidget); + } + } + + private function constrainWidget(baseWidget:IBaseWidget):void + { + // if the layout is constained, override the base widget's settings, + // otherwise, the base widget's settings will be respected. + if (isConstrainedLayout()) + { + baseWidget.isResizeable = isResizeable; + } + } + + [Bindable] + private var containerWidth:Number; + [Bindable] + private var containerHeight:Number; + + private function toggleState(state:String):void + { + AppEvent.dispatch(AppEvent.TOC_HIDDEN); // always hide the toc layer menu + + if (state == VERTICAL) + { + containerWidth = widgetContainer.width; + if (currentState != "collapsedRight") + { + currentState = "collapsedRight"; + } + else + { + widgetContainer.clipAndEnableScrolling = true; + currentState = "normal"; + } + } + else if (state == HORIZONTAL) + { + containerHeight = widgetContainer.height; + if (currentState != "collapsedDown") + { + currentState = "collapsedDown"; + } + else + { + widgetContainer.clipAndEnableScrolling = true; + currentState = "normal"; + } + } + } + + protected function hControl_creationCompleteHandler(event:FlexEvent):void + { + hControl.setStyle("backgroundColor", getStyle("contentBackgroundColor")); + hControl.setStyle("backgroundAlpha", getStyle("backgroundAlpha")); + hControl.setStyle("borderColor", FlexGlobals.topLevelApplication.getStyle("color")); + } + + + protected function vControl_creationCompleteHandler(event:FlexEvent):void + { + vControl.setStyle("backgroundColor", getStyle("contentBackgroundColor")); + vControl.setStyle("backgroundAlpha", getStyle("backgroundAlpha")); + vControl.setStyle("borderColor", FlexGlobals.topLevelApplication.getStyle("color")); + } + + private function toNormal_effectEndHandler(event:EffectEvent):void + { + if (elmToAdd != null) + { + addWidget(elmToAdd); + elmToAdd = null; + } + } + ]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/widgets/WidgetContainer/WidgetContainerWidget.mxml b/src/widgets/WidgetContainer/WidgetContainerWidget.mxml index 7ec5724..5bbb9d5 100644 --- a/src/widgets/WidgetContainer/WidgetContainerWidget.mxml +++ b/src/widgets/WidgetContainer/WidgetContainerWidget.mxml @@ -1,73 +1,73 @@ - - - - - - - - - - - + + + + + + + + + + + diff --git a/src/widgets/supportClasses/ResultAttributes.as b/src/widgets/supportClasses/ResultAttributes.as index ae04bfd..baf53ab 100644 --- a/src/widgets/supportClasses/ResultAttributes.as +++ b/src/widgets/supportClasses/ResultAttributes.as @@ -1,292 +1,292 @@ -package widgets.supportClasses -{ - -import com.esri.ags.FeatureSet; -import com.esri.ags.Graphic; -import com.esri.ags.layers.FeatureLayer; -import com.esri.ags.layers.supportClasses.CodedValue; -import com.esri.ags.layers.supportClasses.CodedValueDomain; -import com.esri.ags.layers.supportClasses.FeatureType; -import com.esri.ags.layers.supportClasses.Field; -import com.esri.ags.layers.supportClasses.LayerDetails; - -import mx.formatters.DateFormatter; - -[Bindable] -public class ResultAttributes -{ - public var attributes:Object; - public var title:String; - public var content:String; - public var link:String; - public var linkAlias:String; - - public static function toResultAttributes(fields:XMLList, - textDirection:String = null, - graphic:Graphic = null, - featureSet:FeatureSet = null, - layer:FeatureLayer = null, - layerDetails:LayerDetails = null, - widgetTitle:String = null, - titleField:String = null, - linkField:String = null, - linkAlias:String = null):ResultAttributes - { - var resultAttributes:ResultAttributes = new ResultAttributes; - - var value:String = ""; - var title:String = ""; - var content:String = ""; - var link:String = ""; - var linkAlias:String; - - var fieldsXMLList:XMLList = fields ? fields.field : null; - if (fields && fields[0].@all[0] == "true") - { - if (layerDetails.fields) - { - for each (var field:Field in layerDetails.fields) - { - if (field.name in graphic.attributes) - { - displayFields(field.name, getFieldXML(field.name, fieldsXMLList), field); - } - } - } - else - { - for (var fieldName:String in graphic.attributes) - { - displayFields(fieldName, getFieldXML(fieldName, fieldsXMLList), null); - } - } - } - else - { - for each (var fieldXML:XML in fieldsXMLList) // display the fields in the same order as specified - { - if (fieldXML.@name[0] in graphic.attributes) - { - displayFields(fieldXML.@name[0], fieldXML, getField(layer, fieldXML.@name[0])); - } - } - } - resultAttributes.attributes = graphic.attributes; - resultAttributes.title = title ? title : widgetTitle; - resultAttributes.content = content; - resultAttributes.link = link ? link : null; - resultAttributes.linkAlias = linkAlias; - - function displayFields(fieldName:String, fieldXML:XML, field:Field):void - { - value = graphic.attributes[fieldName] ? String(graphic.attributes[fieldName]) : ""; - - if (value) - { - var isDateField:Boolean; - var useUTC:Boolean; - var dateFormat:String; - if (fieldXML) - { - useUTC = fieldXML.format.@useutc[0] || fieldXML.@useutc[0] == "true"; - dateFormat = fieldXML.format.@dateformat[0] || fieldXML.@dateformat[0]; - if (dateFormat) - { - isDateField = true; - } - } - if (!isDateField && field) - { - isDateField = field.type == Field.TYPE_DATE; - } - if (isDateField) - { - var dateMS:Number = Number(value); - if (!isNaN(dateMS)) - { - value = msToDate(dateMS, dateFormat, useUTC); - } - } - else - { - var typeID:String = layerDetails.typeIdField ? graphic.attributes[layerDetails.typeIdField] : null; - if (fieldName == layerDetails.typeIdField) - { - var featureType:FeatureType = getFeatureType(layer, typeID); - if (featureType && featureType.name) - { - value = featureType.name; - } - } - else - { - var codedValue:CodedValue = getCodedValue(layer, fieldName, value, typeID); - if (codedValue) - { - value = codedValue.name; - } - } - } - } - - if (titleField && fieldName.toUpperCase() == titleField.toUpperCase()) - { - title = value; - } - else if (linkField && fieldName.toUpperCase() == linkField.toUpperCase()) - { - link = value; - linkAlias = linkAlias; - } - else if (fieldName.toUpperCase() != "SHAPE_LENGTH" && fieldName.toUpperCase() != "SHAPE_AREA") - { - var fieldLabel:String; - - if (fieldXML && fieldXML.@alias[0]) - { - fieldLabel = fieldXML.@alias[0]; - } - else - { - fieldLabel = featureSet.fieldAliases[fieldName]; - } - - if (textDirection && textDirection == "rtl") - { - content += value + " :" + fieldLabel + "\n"; - } - else - { - content += fieldLabel + ": " + value + "\n"; - } - } - } - - return resultAttributes; - } - - private static function getFieldXML(fieldName:String, fields:XMLList):XML - { - var result:XML; - - for each (var fieldXML:XML in fields) - { - if (fieldName == fieldXML.@name[0]) - { - result = fieldXML; - break; - } - } - - return result; - } - - private static function getField(layer:FeatureLayer, fieldName:String):Field - { - var result:Field; - - if (layer) - { - for each (var field:Field in layer.layerDetails.fields) - { - if (fieldName == field.name) - { - result = field; - break; - } - } - } - - return result; - } - - private static function getFeatureType(layer:FeatureLayer, typeID:String):FeatureType - { - var result:FeatureType; - - if (layer) - { - for each (var featureType:FeatureType in layer.layerDetails.types) - { - if (typeID == featureType.id) - { - result = featureType; - break; - } - } - } - - return result; - } - - private static function msToDate(ms:Number, dateFormat:String, useUTC:Boolean):String - { - var date:Date = new Date(ms); - if (date.milliseconds == 999) // workaround for REST bug - { - date.milliseconds++; - } - if (useUTC) - { - date.minutes += date.timezoneOffset; - } - - if (dateFormat) - { - var dateFormatter:DateFormatter = new DateFormatter(); - dateFormatter.formatString = dateFormat; - var result:String = dateFormatter.format(date); - if (result) - { - return result; - } - else - { - return dateFormatter.error; - } - } - else - { - return date.toLocaleString(); - } - } - - private static function getCodedValue(layer:FeatureLayer, fieldName:String, fieldValue:String, typeID:String):CodedValue - { - var result:CodedValue; - - var codedValueDomain:CodedValueDomain; - if (typeID) - { - var featureType:FeatureType = getFeatureType(layer, typeID); - if (featureType) - { - codedValueDomain = featureType.domains[fieldName] as CodedValueDomain; - } - } - else - { - var field:Field = getField(layer, fieldName); - if (field) - { - codedValueDomain = field.domain as CodedValueDomain; - } - } - - if (codedValueDomain) - { - for each (var codedValue:CodedValue in codedValueDomain.codedValues) - { - if (fieldValue == codedValue.code) - { - result = codedValue; - break; - } - } - } - - return result; - } -} - -} +package widgets.supportClasses +{ + +import com.esri.ags.FeatureSet; +import com.esri.ags.Graphic; +import com.esri.ags.layers.FeatureLayer; +import com.esri.ags.layers.supportClasses.CodedValue; +import com.esri.ags.layers.supportClasses.CodedValueDomain; +import com.esri.ags.layers.supportClasses.FeatureType; +import com.esri.ags.layers.supportClasses.Field; +import com.esri.ags.layers.supportClasses.LayerDetails; + +import mx.formatters.DateFormatter; + +[Bindable] +public class ResultAttributes +{ + public var attributes:Object; + public var title:String; + public var content:String; + public var link:String; + public var linkAlias:String; + + public static function toResultAttributes(fields:XMLList, + textDirection:String = null, + graphic:Graphic = null, + featureSet:FeatureSet = null, + layer:FeatureLayer = null, + layerDetails:LayerDetails = null, + widgetTitle:String = null, + titleField:String = null, + linkField:String = null, + linkAlias:String = null):ResultAttributes + { + var resultAttributes:ResultAttributes = new ResultAttributes; + + var value:String = ""; + var title:String = ""; + var content:String = ""; + var link:String = ""; + var linkAlias:String; + + var fieldsXMLList:XMLList = fields ? fields.field : null; + if (fields && fields[0].@all[0] == "true") + { + if (layerDetails.fields) + { + for each (var field:Field in layerDetails.fields) + { + if (field.name in graphic.attributes) + { + displayFields(field.name, getFieldXML(field.name, fieldsXMLList), field); + } + } + } + else + { + for (var fieldName:String in graphic.attributes) + { + displayFields(fieldName, getFieldXML(fieldName, fieldsXMLList), null); + } + } + } + else + { + for each (var fieldXML:XML in fieldsXMLList) // display the fields in the same order as specified + { + if (fieldXML.@name[0] in graphic.attributes) + { + displayFields(fieldXML.@name[0], fieldXML, getField(layer, fieldXML.@name[0])); + } + } + } + resultAttributes.attributes = graphic.attributes; + resultAttributes.title = title ? title : widgetTitle; + resultAttributes.content = content; + resultAttributes.link = link ? link : null; + resultAttributes.linkAlias = linkAlias; + + function displayFields(fieldName:String, fieldXML:XML, field:Field):void + { + value = graphic.attributes[fieldName] ? String(graphic.attributes[fieldName]) : ""; + + if (value) + { + var isDateField:Boolean; + var useUTC:Boolean; + var dateFormat:String; + if (fieldXML) + { + useUTC = fieldXML.format.@useutc[0] || fieldXML.@useutc[0] == "true"; + dateFormat = fieldXML.format.@dateformat[0] || fieldXML.@dateformat[0]; + if (dateFormat) + { + isDateField = true; + } + } + if (!isDateField && field) + { + isDateField = field.type == Field.TYPE_DATE; + } + if (isDateField) + { + var dateMS:Number = Number(value); + if (!isNaN(dateMS)) + { + value = msToDate(dateMS, dateFormat, useUTC); + } + } + else + { + var typeID:String = layerDetails.typeIdField ? graphic.attributes[layerDetails.typeIdField] : null; + if (fieldName == layerDetails.typeIdField) + { + var featureType:FeatureType = getFeatureType(layer, typeID); + if (featureType && featureType.name) + { + value = featureType.name; + } + } + else + { + var codedValue:CodedValue = getCodedValue(layer, fieldName, value, typeID); + if (codedValue) + { + value = codedValue.name; + } + } + } + } + + if (titleField && fieldName.toUpperCase() == titleField.toUpperCase()) + { + title = value; + } + else if (linkField && fieldName.toUpperCase() == linkField.toUpperCase()) + { + link = value; + linkAlias = linkAlias; + } + else if (fieldName.toUpperCase() != "SHAPE_LENGTH" && fieldName.toUpperCase() != "SHAPE_AREA") + { + var fieldLabel:String; + + if (fieldXML && fieldXML.@alias[0]) + { + fieldLabel = fieldXML.@alias[0]; + } + else + { + fieldLabel = featureSet.fieldAliases[fieldName]; + } + + if (textDirection && textDirection == "rtl") + { + content += value + " :" + fieldLabel + "\n"; + } + else + { + content += fieldLabel + ": " + value + "\n"; + } + } + } + + return resultAttributes; + } + + private static function getFieldXML(fieldName:String, fields:XMLList):XML + { + var result:XML; + + for each (var fieldXML:XML in fields) + { + if (fieldName == fieldXML.@name[0]) + { + result = fieldXML; + break; + } + } + + return result; + } + + private static function getField(layer:FeatureLayer, fieldName:String):Field + { + var result:Field; + + if (layer) + { + for each (var field:Field in layer.layerDetails.fields) + { + if (fieldName == field.name) + { + result = field; + break; + } + } + } + + return result; + } + + private static function getFeatureType(layer:FeatureLayer, typeID:String):FeatureType + { + var result:FeatureType; + + if (layer) + { + for each (var featureType:FeatureType in layer.layerDetails.types) + { + if (typeID == featureType.id) + { + result = featureType; + break; + } + } + } + + return result; + } + + private static function msToDate(ms:Number, dateFormat:String, useUTC:Boolean):String + { + var date:Date = new Date(ms); + if (date.milliseconds == 999) // workaround for REST bug + { + date.milliseconds++; + } + if (useUTC) + { + date.minutes += date.timezoneOffset; + } + + if (dateFormat) + { + var dateFormatter:DateFormatter = new DateFormatter(); + dateFormatter.formatString = dateFormat; + var result:String = dateFormatter.format(date); + if (result) + { + return result; + } + else + { + return dateFormatter.error; + } + } + else + { + return date.toLocaleString(); + } + } + + private static function getCodedValue(layer:FeatureLayer, fieldName:String, fieldValue:String, typeID:String):CodedValue + { + var result:CodedValue; + + var codedValueDomain:CodedValueDomain; + if (typeID) + { + var featureType:FeatureType = getFeatureType(layer, typeID); + if (featureType) + { + codedValueDomain = featureType.domains[fieldName] as CodedValueDomain; + } + } + else + { + var field:Field = getField(layer, fieldName); + if (field) + { + codedValueDomain = field.domain as CodedValueDomain; + } + } + + if (codedValueDomain) + { + for each (var codedValue:CodedValue in codedValueDomain.codedValues) + { + if (fieldValue == codedValue.code) + { + result = codedValue; + break; + } + } + } + + return result; + } +} + +} diff --git a/src/widgets/supportClasses/ResultItem.as b/src/widgets/supportClasses/ResultItem.as index 62dc728..018a282 100644 --- a/src/widgets/supportClasses/ResultItem.as +++ b/src/widgets/supportClasses/ResultItem.as @@ -1,111 +1,111 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2010-2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package widgets.supportClasses -{ - -import com.esri.ags.Graphic; -import com.esri.ags.geometry.Geometry; -import com.esri.ags.geometry.MapPoint; -import com.esri.ags.geometry.Multipoint; -import com.esri.ags.geometry.Polygon; -import com.esri.ags.geometry.Polyline; -import com.esri.ags.symbols.Symbol; - -[Bindable] -public class ResultItem -{ - public function ResultItem(graphic:Graphic, attributes:ResultAttributes) - { - _graphic = graphic; - _attributes = attributes; - _center = getGeomCenter(graphic); - } - private var _graphic:Graphic; - - public function get graphic():Graphic - { - return _graphic; - } - - private var _attributes:ResultAttributes; - - public function get attributes():ResultAttributes - { - return _attributes; - } - - private var _center:MapPoint; - - public function get center():MapPoint - { - return _center; - } - - public function get geometry():Geometry - { - return _graphic.geometry; - } - - public function get symbol():Symbol - { - return _graphic.symbol; - } - - private function getGeomCenter(graphic:Graphic):MapPoint - { - var point:MapPoint; - var geometry:Geometry = graphic.geometry; - - if (geometry) - { - switch (geometry.type) - { - case Geometry.MAPPOINT: - { - point = geometry as MapPoint; - break; - } - case Geometry.MULTIPOINT: - { - const multipoint:Multipoint = geometry as Multipoint; - point = multipoint.points && multipoint.points.length > 0 ? multipoint.points[0] as MapPoint : null; - break; - } - case Geometry.POLYLINE: - { - var pl:Polyline = geometry as Polyline; - var pathCount:Number = pl.paths.length; - var pathIndex:int = int((pathCount / 2) - 1); - var midPath:Array = pl.paths[pathIndex]; - var ptCount:Number = midPath.length; - var ptIndex:int = int((ptCount / 2) - 1); - point = pl.getPoint(pathIndex, ptIndex); - break; - } - case Geometry.POLYGON: - { - const poly:Polygon = geometry as Polygon; - point = poly.extent.center; - break; - } - } - } - - return point; - } -} - -} +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2010-2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package widgets.supportClasses +{ + +import com.esri.ags.Graphic; +import com.esri.ags.geometry.Geometry; +import com.esri.ags.geometry.MapPoint; +import com.esri.ags.geometry.Multipoint; +import com.esri.ags.geometry.Polygon; +import com.esri.ags.geometry.Polyline; +import com.esri.ags.symbols.Symbol; + +[Bindable] +public class ResultItem +{ + public function ResultItem(graphic:Graphic, attributes:ResultAttributes) + { + _graphic = graphic; + _attributes = attributes; + _center = getGeomCenter(graphic); + } + private var _graphic:Graphic; + + public function get graphic():Graphic + { + return _graphic; + } + + private var _attributes:ResultAttributes; + + public function get attributes():ResultAttributes + { + return _attributes; + } + + private var _center:MapPoint; + + public function get center():MapPoint + { + return _center; + } + + public function get geometry():Geometry + { + return _graphic.geometry; + } + + public function get symbol():Symbol + { + return _graphic.symbol; + } + + private function getGeomCenter(graphic:Graphic):MapPoint + { + var point:MapPoint; + var geometry:Geometry = graphic.geometry; + + if (geometry) + { + switch (geometry.type) + { + case Geometry.MAPPOINT: + { + point = geometry as MapPoint; + break; + } + case Geometry.MULTIPOINT: + { + const multipoint:Multipoint = geometry as Multipoint; + point = multipoint.points && multipoint.points.length > 0 ? multipoint.points[0] as MapPoint : null; + break; + } + case Geometry.POLYLINE: + { + var pl:Polyline = geometry as Polyline; + var pathCount:Number = pl.paths.length; + var pathIndex:int = int((pathCount / 2) - 1); + var midPath:Array = pl.paths[pathIndex]; + var ptCount:Number = midPath.length; + var ptIndex:int = int((ptCount / 2) - 1); + point = pl.getPoint(pathIndex, ptIndex); + break; + } + case Geometry.POLYGON: + { + const poly:Polygon = geometry as Polygon; + point = poly.extent.center; + break; + } + } + } + + return point; + } +} + +} From 514364986e760a6ac218bc494e2088c6ae7ea08c Mon Sep 17 00:00:00 2001 From: jcfranco Date: Wed, 16 Jan 2013 12:45:03 -0800 Subject: [PATCH 003/178] Fix search result display issues. * Add checks for invalid result extent coordinate values. * Add logic to project search result geometry. * Validate geometry of projected search results before displaying on map. --- locale/en_US/ViewerStrings.properties | 1 + .../singleLineSearch/SingleLineSearch.mxml | 363 ++++++++++++++---- 2 files changed, 294 insertions(+), 70 deletions(-) diff --git a/locale/en_US/ViewerStrings.properties b/locale/en_US/ViewerStrings.properties index 79163ef..7212f9e 100644 --- a/locale/en_US/ViewerStrings.properties +++ b/locale/en_US/ViewerStrings.properties @@ -102,6 +102,7 @@ cannotRunTaskExecutionTypeUnknownError=Cannot run task: execution type unknown. layerDataRetrievalError=Could not retrieve layer data. couldNotDeleteFeature=Could not delete feature couldNotUpdateFeatureError=Could not update feature, Restoring old value +cannotDisplayResult=Cannot display result on map. ########## Base Widget and MapManager configFileCrossDomain=Possible crossdomain issue: {0}{1} diff --git a/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml b/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml index e924fe4..f0aafce 100644 --- a/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml +++ b/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml @@ -26,10 +26,13 @@ -1) { - processSelectedSearchResult(resultList); + processSelectedSearchResult(); } else { From 80822fb5490fb22bd1e1ac68cfa1c571dc8da971 Mon Sep 17 00:00:00 2001 From: Bjorn Svensson Date: Tue, 22 Jan 2013 16:06:43 -0800 Subject: [PATCH 004/178] Adding four new locales Adding Danish, Hebrew, Lithuanian and Portuguese Portuguese. --- locale/da_DK/ViewerStrings.properties | 355 ++++++++++++++++++++++++++ locale/he_IL/ViewerStrings.properties | 355 ++++++++++++++++++++++++++ locale/lt_LT/ViewerStrings.properties | 355 ++++++++++++++++++++++++++ locale/pt_PT/ViewerStrings.properties | 355 ++++++++++++++++++++++++++ 4 files changed, 1420 insertions(+) create mode 100644 locale/da_DK/ViewerStrings.properties create mode 100644 locale/he_IL/ViewerStrings.properties create mode 100644 locale/lt_LT/ViewerStrings.properties create mode 100644 locale/pt_PT/ViewerStrings.properties diff --git a/locale/da_DK/ViewerStrings.properties b/locale/da_DK/ViewerStrings.properties new file mode 100644 index 0000000..30ff8ca --- /dev/null +++ b/locale/da_DK/ViewerStrings.properties @@ -0,0 +1,355 @@ + + +contextMenuText=Om ArcGIS Viewer for Flex... +aboutText=Denne applikation bruger ArcGIS Viewer for Flex version @VERSION@.\nBuild-dato @BUILD_DATE@. +aboutLearnMoreBtn=Lær mere +aboutCloseBtn=Luk + + + +close=Luk +minimize=Minimér + + + +panelExpandTooltip=Click to expand the panel +panelCollapseTooltip=Click to collapse the panel + + +locateExampleValueX=12.5683 +locateExampleValueY=55.6761 + + +clearLabel=Ryd +deleteLabel=Slet +loadingLabel=Indlæser... +okLabel=OK +errorLabel=Fejl +problemLabel=Problem +noFeatures=Ingen objekte fundet. +resultsLabel=Resultater +saveLabel=Gem + + +unitsFeet=Fod +unitsFeetAbbr=ft +unitsKilometers=Kilometer +unitsKilometersAbbr=km +unitsMeters=Meter +unitsMetersAbbr=m +unitsMiles=Miles +unitsMilesAbbr=mi +unitsYards=Yards +unitsYardsAbbr=yd + +unitsAcres=Acres +unitsAcresAbbr=ac +unitsHectares=Hektarer +unitsHectaresAbbr=ha +unitsSquareFeet=Square feet +unitsSquareFeetAbbr=sq ft +unitsSquareKilometers=Kvadratkilometer +unitsSquareKilometersAbbr=sq km +unitsSquareMeters=Kvadratmeter +unitsSquareMetersAbbr=sq m +unitsSquareMiles=Square miles +unitsSquareMilesAbbr=sq mi +unitsSquareYards=Square yards +unitsSquareYardsAbbr=sq yd + + +tocMapLayerZoomToLabel=Zoom til +tocMapLayerTransparencyLabel=Gennemsigtighed +tocMapLayerOpaqueLabel=Uigennemsigtig +tocMapLayerTransparentLabel=Gennemsigtig +tocMapLayerMoveUpLabel=Flyt op +tocMapLayerMoveDownLabel=Flyt ned +tocMapLayerRemoveLabel=Fjern +tocMapLayerDescriptionLabel=Beskrivelse +tocMapLayerDownloadLabel=Download + + +incorrectLayerTypeText={0} er ikke en understøttet lagtype. Brug "arcims", "bing", "csv", "dynamic", "feature", "georss", "image", "kml", "osm", "tiled", "wms" eller "wmts" i stedet for. + + +missingConfigFileText=Kunne ikke finde {0} +httpResponseStatus=http-svarstatus: {0} +faultCode=Fejlkode: {0} +faultInfo=Fejl-info: {0} +faultDetail=Fejldetaljer: {0} + + +parseConfigErrorText=Der opstod et problem under analyse af konfigurationsfilen {0} +standalonePlayerExternalInterfaceErrorText=Der opstod en fejl. ExternalInterface fungerer ikke sammen med den enkeltstående afspiller. +layerFailedToLoad:{0} lag kunne ikke indlæse: {1} +couldNotFetchBasemapData=Kunne ikke hente baggrundskortdata:\n{0} +couldNotConnectToPortal=Kunne ikke oprette forbindelse til portalen. +couldNotQueryPortal=Kunne ikke sende forespørgsel til portalen. +couldNotQueryPortalItems=Kunne ikke forespørge på portalelementer. +serverMissingCrossDomain=GIS-serveren mangler en tværdomænefil. +serviceIsInaccessible=Tjenesten findes ikke eller er utilgængelig. +unauthorizedAccess=Du har ikke adgangsrettigheder til denne tjeneste. +unknownErrorCause=Ukendt årsag til fejl. +resourceAccessDenied=Du har ikke adgangsrettigheder til denne ressource. +signInAborted=Log ind afbrudt. +invalidWidgetId=Ugyldigt widgetId: {0} +printTaskExecutionError=Fejl ved udførelse af udskriftsjob:\n\n{0} +gpServiceConnectionError=Kan ikke oprette forbindelse til GP-tjeneste:\n{0}\n\n{1}\n{2} +locatorServiceConnectionError=Kan ikke oprette forbindelse til lokatortjeneste:\n{0}\n\n{1}\n{2} +singleLineGeocodingNotSupportedError=Lokatortjenesten understøtter ikke enkeltlinje-geokodning. +rssFeedParsingError=Der opstod et problem under analyse af RSS-feed. {0} +httpResponseNotXMLError=HTTP-svar er ikke XML. +unknownRSSFeedTypeError=Kan ikke bestemme RSS-feed-type. +initializationError=Der opstod et problem under initialisering: {0} +unableToDetermineGPExecutionType=Kunne ikke bestemme eksekveringstype for geoprocessering: +projectionError=Fejl ved projektering af geometri: {0} +cannotRunTaskExecutionTypeUnknownError=Kan ikke køre opgave: eksekveringstype er ukendt. +layerDataRetrievalError=Kunne ikke hente lagdata. +couldNotDeleteFeature=Kunne ikke slette objekt +couldNotUpdateFeatureError=Kunne ikke opdatere objektet. Gendanner tidligere værdi. + + +configFileCrossDomain=Muligt tværdomæneproblem: {0}{1} + + +openToolTip=Klik for at åbne oversigtskort +closeToolTip=Klik for at lukke oversigtskort + + +layerListLabel=Mere... +basemap=Baggrundskort + + +aboutLabel=Om +searchPrompt=Indtast adresse +searchResultTitleLabel=Sted +noResultsFoundLabel=Ingen resultater fundet + + +fullExtentLabel=Fuld udstrækning +panDownLabel=Panorér ned +panLeftLabel=Panorér venstre +panRightLabel=Panorér højre +panUpLabel=Panorér op +previousExtentLabel=Forrige udstrækning +nextExtentLabel=Næste udstrækning +panLabel=Panorér +zoomInLabel=Zoom ind +zoomOutLabel=Zoom ud + + + + + + +addTextLabel=Tilføj tekst +drawPointLabel=Tegn punkt +drawLineLabel=Tegn linje +drawFreehandLineLabel=Tegn frihåndslinje +drawPolygonLabel=Tegn polygon +drawFreehandPolygonLabel=Tegn frihåndspolygon +drawRectangleLabel=Tegn rektangel +drawMapExtentLabel=Tegn kortudstrækning +drawCircleLabel=Tegn cirkel +drawEllipseLabel=Tegn ellipse +drawClearLabel=Ryd tegninger + +markerStyleCircle=Cirkel +markerStyleCross=Kryds +markerStyleDiamond=Ruder +markerStyleSquare=Kvadrat +markerStyleTriangle=Trekant +markerStyleX=X + +textFont1=Arial +textFont2=Courier New +textFont3=Broadway +textFont4=Comic Sans MS +textFont5=Algerian +textFont6=Verdana + +lineStyleSolid=Udfyldt +lineStyleDash=Streg +lineStyleDot=Prik +lineStyleDashDot=Streg-prik +lineStyleDashDotDot=Streg-prik-prik + +fillStyleSolid=Udfyldt +fillStyleBackwardDiagonal=Diagonalt bagud +fillStyleCross=Kryds +fillStyleForwardDiagonal=Diagonalt fremad +fillStyleHorizontal=Vandret +fillStyleVertical=Lodret + + + +markerAlphaLabel=Alfa +markerColorLabel=Mærkefarve +markerSizeLabel=Størrelse +markerStyleLabel=Typografi +markerOutlineColorLabel=Konturfarve +markerOutlineWidthLabel=Bredde +textLabel=Tekst +textColorLabel=Farve +textFontLabel=Skrifttype +textSizeLabel=Størrelse +textBoldLabel=F +textBoldTooltip=Fed +textItalicLabel=K +textItalicTooltip=Kursiv +textUnderlineLabel=U +textUnderlineTooltip=Understreget +lineAlphaLabel=Alfa +lineColorLabel=Linjefarve +lineStyleLabel=Typografi +lineWidthLabel=Bredde +fillAlphaLabel=Alfa +fillColorLabel=Udfyldningsfarve +fillStyleLabel=Typografi +fillOutlineColorLabel=Konturfarve +fillOutlineWidthLabel=Bredde + + + + +showMeasurementsLabel=Vis målinger +distanceUnitsLabel=Afstandsenheder +areaUnitsLabel=Områdeenheder +areaLabel=Område: +perimeterLabel=Omkreds: +lengthLabel=Længde: + + +bookmarksLabel=Bogmærker +addbookmarksLabel=Tilføj bogmærke +addLabel=Tilføj aktuel udstrækning som et navngivet bogmærke +bookmarkSubmitLabel=Tilføj bogmærke +bookmarkMissingNameLabel=Angiv et navn til bogmærket. +deleteBookmarkTooltip=Slet bogmærke + + +descLabel=Udtræk data, og hent zip-filen +step1Label=1. Vælg område +dataCurrentExtentLabel=1. Data vil blive udtrukket fra den aktuelle udstrækning. +step2Label=2. Vælg de lag, der skal udtrækkes +step3Label=3. Vælg filformat +step4Label=4. Vælg rasterformat +step5Label=5. GeografiskReference +extractButtonLabel=Udtræk +step1ErrorLabel=Vælg et interesseområde. +step2ErrorLabel=Vælg de lag, der skal udtrækkes. +emptyResultsLabel=Opgave fuldført, men der er ikke returneret nogen resultater. +saveDataFileLabel=Datafil oprettet. Vil du gemme den? + + +attributesLabel=Attributter +attachmentsLabel=Vedhæftninger +relatedRecordsLabel=Relaterede poster +featureLayerOutOfScaleText=Dette vektorlag ligger uden for målestoksforholdet +showAttachmentsText=Vedhæftninger +showRelatedRecordsText=Relaterede poster +showAttributesText=Gå tilbage +selectTemplateText=Vælg en skabelon til at oprette et objekt med +noEditableLayersText=Ingen redigérbare lag. +noCreateCapabilityLayersText=Ingen af lagene har oprettelsesfunktionalitet +layerNotSupportingAttachmentsText=Dette lag understøtter ikke vedhæftninger +noAttachmentsText=Ingen vedhæftninger +chooseFileText=Vælg en fil, du vil vedhæfte +attachmentSubmitLabel=Send +attachmentCancelLabel=Annullér +singleAttachmentText=Objektet har {0} vedhæftning +multipleAttachmentsText=Objektet har {0} vedhæftninger + + +layerListTitle=Lagsynlighed + + +locateSubmitLabel=Find +addressLabel=Adresse +coordinatesLabel=Koordinater +addressTitle=Indtast adressen +coordinatesTitle=Indtast koordinaterne +xLabel=Længde (X) +yLabel=Bredde (Y) +locationsLabel=Steder fundet: +bingCulture=en-US +requiredFields=Krævede felter: +requiredField=Krævet felt: +deleteResultTooltip=Slet resultat +resultScoreText=Score: +bingResultConfidenceText=Fortrolighed: + + +printSubmitLabel=Udskriv +printTitle= +printSubtitle= +printCopyright= +printTitleLabel=Titel +printSubtitleLabel=Undertitel +printCopyrightLabel=Copyright +printAuthorLabel=Forfatter +printLayoutTemplatesLabel=Layoutskabeloner +printFormatsLabel=Formater +printScaleLabel=Brug dette målestoksforhold + + +filterTitleBarTooltip=Filtrér resultater +showallTitleBarTooltip=Vis alle +filterButtonLabel=Filtrér +clearButtonLabel=Vis alle +featuresFoundLabel=Objekter fundet: {0} + + +drivingDirectionLabel=Kørselsvejledning +routeSubmitLabel=Hent vejledning +moveUpTooltip=Flyt op +moveDownTooltip=Flyt ned +addLocationTooltip=klik på kortet for at tilføje sted +optionsLabel=Indstillinger +bestSequenceLabel=Find bedste sekvens +milesLabel=Miles +metricLabel=Km +changeRouteSymbolLabel=Skift rutesymbol +editRouteLabel=Redigér rute + + +graphicalTitleBarTooltip=Vælg objekter +textTitleBarTooltip=Vælg efter attribut +graphicalsearchLabel=Vælg attributter efter +textsearchLabel=Vælg efter attribut +layerLabel=Vælg lag +nolayerLabel=Intet søgelag defineret. +searchSubmitLabel=Søg +selectionLabel=Objekter valgt: + + +latitudeLabel=Bredde +longitudeLabel=Længde + + +gpSubmitLabel=Send +inputLabel=Input +helpLabel=Hjælp +outputLabel=Output +copyToClipboard=Kopiér til udklipsholder +unsupportedInputType={0} input understøttes ikke +currentExtentWillBeUsedAsInput=Den aktuelle udstrækning vil blive brugt som input. + + +zoomLabel=Zoom til + + +helloContent=Redigér denne tekst i konfigurationsfilen. + + +widgetIDWidgetLabelTemplate=Widget-Id: {0}, widget-mærke: {1} +widgetIDWidgetStateTemplate=Widget-Id: {0}, widget-tilstand: {1} +itemLabelWidgetIDItemIDTemplate={0} Widget-ID: {1} + + +layerSelectionLabel=Vælg lag +drawToolMenuLabel=Vælg tegneværktøj +selectLabel=Vælg +noLayersLabel=Ingen lag +noChartDataToDisplayLabel=Ingen diagramdata at vise +featureLayerNotVisibleText=vektorlag er enten ikke synligt eller ligger uden for målestoksforholdet \ No newline at end of file diff --git a/locale/he_IL/ViewerStrings.properties b/locale/he_IL/ViewerStrings.properties new file mode 100644 index 0000000..c69ba8a --- /dev/null +++ b/locale/he_IL/ViewerStrings.properties @@ -0,0 +1,355 @@ + + +contextMenuText=אודות צפיין ArcGIS ל- Flex... +aboutText=אפליקציה זו משתמשת בצפיין ArcGIS לגרסת Flex @VERSION@.\nתאריך בניה @BUILD_DATE@. +aboutLearnMoreBtn=לימוד נוסף +aboutCloseBtn=סגור + + + +close=סגור +minimize=מזער + + + +panelExpandTooltip=Click to expand the panel +panelCollapseTooltip=Click to collapse the panel + + +locateExampleValueX=34.7932 +locateExampleValueY=32.0735 + + +clearLabel=נקה +deleteLabel=מחק +loadingLabel=טוען... +okLabel=אישור +errorLabel=שגיאה +problemLabel=בעיה +noFeatures=לא נמצאו ישויות +resultsLabel=תוצאות +saveLabel=שמור + + +unitsFeet=רגל +unitsFeetAbbr=רגל +unitsKilometers=קילומטרים +unitsKilometersAbbr=ק"מ +unitsMeters=מטרים +unitsMetersAbbr=מ' +unitsMiles=מיילים +unitsMilesAbbr=מיילים +unitsYards=יארד +unitsYardsAbbr=יארד + +unitsAcres=אקרים +unitsAcresAbbr=אקר +unitsHectares=הקטרים +unitsHectaresAbbr=הקטאר +unitsSquareFeet=רגל מרובע +unitsSquareFeetAbbr=ר' בריבוע +unitsSquareKilometers=ק"מ מרובע +unitsSquareKilometersAbbr=ק"מ בריבוע +unitsSquareMeters=מ' מרובע +unitsSquareMetersAbbr=מ' בריבוע +unitsSquareMiles=מיילים מרובעים +unitsSquareMilesAbbr=מייל בריבוע +unitsSquareYards=יארדים מרובעים +unitsSquareYardsAbbr=יארד בריבוע + + +tocMapLayerZoomToLabel=התמקדול +tocMapLayerTransparencyLabel=שקיפות +tocMapLayerOpaqueLabel=אטום +tocMapLayerTransparentLabel=שקוף +tocMapLayerMoveUpLabel=העבר למעלה +tocMapLayerMoveDownLabel=העבר למטה +tocMapLayerRemoveLabel=הסר +tocMapLayerDescriptionLabel=תיאור +tocMapLayerDownloadLabel=הורדה + + +incorrectLayerTypeText={0} אינו סוג שכבה נתמך. השתמש ב- "arcims", "bing", "csv", "dynamic", "feature", "georss", "image", "kml", "osm", "tiled", "wms" או "wmts" במקום. + + +missingConfigFileText=לא יכול למצוא {0} +httpResponseStatus=סטטוס תגובת http: {0} +faultCode=קוד תקלה: {0} +faultInfo=מידע על תקלה: {0} +faultDetail=פרטי תקלה: {0} + + +parseConfigErrorText=אירעה בעיה בזמן פריסת קובץ התצורה {0} +standalonePlayerExternalInterfaceErrorText=אירעה שגיאה כלשהי. ExternalInterface לא עובד ב- Standalone player. +layerFailedToLoad:טעינת שכבה {0} נכשלה: {1} +couldNotFetchBasemapData=לא יכול להביא נתוני מפת בסיס:\n{0} +couldNotConnectToPortal=לא יכול להתחבר לפורטל. +couldNotQueryPortal=לא יכול לתשאל פורטל. +couldNotQueryPortalItems=לא יכול לתשאל פרטי פורטל. +serverMissingCrossDomain=לשרת GIS חסר קובץ crossdomain +serviceIsInaccessible=שירות לא קיים או לא נגיש. +unauthorizedAccess=אין לך הרשאות לגשת לשירות זה. +unknownErrorCause=סיבת שגיאה לא ידועה. +resourceAccessDenied=אין לך הרשאות לגשת למקור זה. +signInAborted=הכניסה נכשלה +invalidWidgetId=widgetId לא תקין: {0} +printTaskExecutionError=שגיאה בביצוע משימת הדפסה:\n\n{0} +gpServiceConnectionError=לא יכול להתחבר לשירות GP:\n{0}\n\n{1}\n{2} +locatorServiceConnectionError=לא יכול להתחבר לשירות מגדיר עיגון כתובות:\n{0}\n\n{1}\n{2} +singleLineGeocodingNotSupportedError=שירות מגדיר עיגון כתובות לא תומך בעיגון כתובות שורה אחת. +rssFeedParsingError=אירעה בעיה בזמן פריסת ה- RSS feed. {0} +httpResponseNotXMLError=תגובת HTTP אינה XML. +unknownRSSFeedTypeError=לא מצליח לקבוע סוג RSS feed. +initializationError=אירעה בעיה בזמן אתחול: {0} +unableToDetermineGPExecutionType=לא יכול לקבוע סוג ביצוע geoprocessing: +projectionError=שגיאה בהיטל גיאומטרי: {0} +cannotRunTaskExecutionTypeUnknownError=לא יכול להריץ משימה: סוג ביצוע לא ידוע. +layerDataRetrievalError=לא יכול לקבל נתוני שכבה. +couldNotDeleteFeature=לא יכול למחוק ישות +couldNotUpdateFeatureError=לא יכול למחוק ישות, משחזר ערך קודם + + +configFileCrossDomain=נושא crossdomain אפשרי: {0}{1} + + +openToolTip=לחץ לפתוח מפת סקירה כללית +closeToolTip=לחץ לסגור מפת סקירה כללית + + +layerListLabel=עוד... +basemap=מפת בסיס + + +aboutLabel=אודות +searchPrompt=הכנס כתובת +searchResultTitleLabel=מיקום +noResultsFoundLabel=לא נמצאו תוצאות + + +fullExtentLabel=תיחום מלא +panDownLabel=הזז למטה +panLeftLabel=הזז שמאלה +panRightLabel=הזז ימינה +panUpLabel=הזז למעלה +previousExtentLabel=תיחום קודם +nextExtentLabel=תיחום הבא +panLabel=הזז +zoomInLabel=הגדלה +zoomOutLabel=הקטנה + + + + + + +addTextLabel=הוסף טקסט +drawPointLabel=שרטט נקודה +drawLineLabel=שרטט קו +drawFreehandLineLabel=שרטט קו ביד חופשית +drawPolygonLabel=שרטט פוליגון +drawFreehandPolygonLabel=שרטט פוליגון ביד חופשית +drawRectangleLabel=שרטט מלבן +drawMapExtentLabel=שרטט תיחום מפה +drawCircleLabel=שרטט עיגול +drawEllipseLabel=שרטט אליפסה +drawClearLabel=נקה שרטוטים + +markerStyleCircle=מעגל +markerStyleCross=צלב +markerStyleDiamond=יהלום +markerStyleSquare=ריבוע +markerStyleTriangle=משולש +markerStyleX=X + +textFont1=Arial +textFont2=Courier New +textFont3=Broadway +textFont4=Comic Sans MS +textFont5=אלג'יריאני +textFont6=Verdana + +lineStyleSolid=רציף +lineStyleDash=מקף +lineStyleDot=נקודה +lineStyleDashDot=Dash Dot +lineStyleDashDotDot=Dash Dot Dot + +fillStyleSolid=רציף +fillStyleBackwardDiagonal=אחורה באלכסון +fillStyleCross=צלב +fillStyleForwardDiagonal=קדימה באלכסון +fillStyleHorizontal=אופקי +fillStyleVertical=אנכי + + + +markerAlphaLabel=אלפא +markerColorLabel=צבע סימול +markerSizeLabel=גודל +markerStyleLabel=סגנון +markerOutlineColorLabel=צבע קו תוחם +markerOutlineWidthLabel=רוחב +textLabel=טקסט +textColorLabel=צבע +textFontLabel=גופן +textSizeLabel=גודל +textBoldLabel=B +textBoldTooltip=Bold +textItalicLabel=I +textItalicTooltip=Italic +textUnderlineLabel=U +textUnderlineTooltip=קו תחתון +lineAlphaLabel=אלפא +lineColorLabel=צבע קו +lineStyleLabel=סגנון +lineWidthLabel=רוחב +fillAlphaLabel=אלפא +fillColorLabel=צבע מילוי +fillStyleLabel=סגנון +fillOutlineColorLabel=צבע קו תוחם +fillOutlineWidthLabel=רוחב + + + + +showMeasurementsLabel=הצג מידות +distanceUnitsLabel=יחידות מרחק +areaUnitsLabel=יחידות שטח +areaLabel=שטח: +perimeterLabel=היקף: +lengthLabel=אורך: + + +bookmarksLabel=סימניות +addbookmarksLabel=הוסף סימניה +addLabel=הוסף תיחום נוכחי כסימניה בשם +bookmarkSubmitLabel=הוסף סימניה +bookmarkMissingNameLabel=אנא הכנס שם לסימניה +deleteBookmarkTooltip=מחק סימניה + + +descLabel=ייצא נתונים והורד קובץ zip +step1Label=1. בחר אזור +dataCurrentExtentLabel=1. הנתונים יופקו מתוך התיחום הנוכחי שלך. +step2Label=2. בחר שכבות להפקה +step3Label=2. בחר פורמט קובץ +step4Label=4. בחר פורמט רסטר +step5Label=5. SpatialReference +extractButtonLabel=ייצוא +step1ErrorLabel=אנא בחר אזור עניין. +step2ErrorLabel=אנא בחר שכבות להפקה +emptyResultsLabel=משימה הסתיימה אך לא הניבה תוצאות. +saveDataFileLabel=נוצר קובץ נתונים. האם ברצונך לשמור זאת? + + +attributesLabel=מאפיינים +attachmentsLabel=קישורים +relatedRecordsLabel=רשומות מקושרות +featureLayerOutOfScaleText=שכבת ישויות זו נמצאת מחוץ לטווח קנה מידה +showAttachmentsText=קישורים +showRelatedRecordsText=רשומות מקושרות +showAttributesText=חזור +selectTemplateText=בחר תבנית בכדי ליצור ישות +noEditableLayersText=לא נמצאו שכבות הניתנות לעריכה. +noCreateCapabilityLayersText=לאף אחת מהשכבות יש יכולת יצירה +layerNotSupportingAttachmentsText=השכבה לא תומכת בקבצים מצורפים +noAttachmentsText=אין קבצים מצורפים +chooseFileText=בחר קובץ לצרוף +attachmentSubmitLabel=הגש +attachmentCancelLabel=ביטול +singleAttachmentText=לישות יש קישור {0} +multipleAttachmentsText=לישות יש {0} קישורים + + +layerListTitle=ניראות של שכבה + + +locateSubmitLabel=אתר +addressLabel=כתובת +coordinatesLabel=קואורדינטות +addressTitle=הכנס את הכתובת +coordinatesTitle=הכנס את הקוארדינטות +xLabel=קו אורך (X) +yLabel=קו רוחב (Y) +locationsLabel=נמצאו מיקומים: +bingCulture=en-US +requiredFields=שדות נדרשים: +requiredField=שדה נדרש: +deleteResultTooltip=מחק תוצאה +resultScoreText=ציון: +bingResultConfidenceText=בטחון: + + +printSubmitLabel=הדפסה +printTitle= +printSubtitle= +printCopyright= +printTitleLabel=כותרת +printSubtitleLabel=תת כותרת +printCopyrightLabel=זכות יוצרים +printAuthorLabel=מחבר +printLayoutTemplatesLabel=תבניות מבט מפה +printFormatsLabel=פורמטים +printScaleLabel=השתמש בקנה מידה זה + + +filterTitleBarTooltip=תוצאות סינון +showallTitleBarTooltip=הצג הכל +filterButtonLabel=פילטר +clearButtonLabel=הצג הכל +featuresFoundLabel=ישויות שנמצאו: {0} + + +drivingDirectionLabel=הוראות נסיעה +routeSubmitLabel=קבל הוראות +moveUpTooltip=העבר למעלה +moveDownTooltip=העבר למטה +addLocationTooltip=לחץ על המפה בכדי להוסיף מיקום +optionsLabel=אפשרויות +bestSequenceLabel=מצא רצף טוב ביותר +milesLabel=מיילים +metricLabel=ק"מ +changeRouteSymbolLabel=שנה סמל מסלול +editRouteLabel=ערוך מסלול + + +graphicalTitleBarTooltip=בחר ישויות +textTitleBarTooltip=בחירה לפי מאפיינים +graphicalsearchLabel=בחר ישויות לפי +textsearchLabel=בחירה לפי מאפיינים +layerLabel=חיפוש שכבה +nolayerLabel=לא הוגדר חיפוש שכבה +searchSubmitLabel=חיפוש +selectionLabel=ישויות שנבחרו: + + +latitudeLabel=קו רוחב +longitudeLabel=קו אורך + + +gpSubmitLabel=הגש +inputLabel=קלט +helpLabel=עזרה +outputLabel=פלט +copyToClipboard=העתק ללוח עריכה +unsupportedInputType=קלט {0} לא נתמך +currentExtentWillBeUsedAsInput=התיחום הנוכחי יהיה הקלט. + + +zoomLabel=התמקדול + + +helloContent=שנה טקסט זה בקובץ התצורה + + +widgetIDWidgetLabelTemplate=Widget Id: {0}, תבנית widget: {1} +widgetIDWidgetStateTemplate=Widget Id: {0}, מצב widget: {1} +itemLabelWidgetIDItemIDTemplate={0} Widget ID: {1} + + +layerSelectionLabel=בחר שכבה +drawToolMenuLabel=בחר כלי שרטוט +selectLabel=בחר +noLayersLabel=אין שכבות +noChartDataToDisplayLabel=אין תרשים נתונים לתצוגה +featureLayerNotVisibleText=שכבת ישויות אינה נצפית או נמצאת מחוץ לטווח קנה מידה. \ No newline at end of file diff --git a/locale/lt_LT/ViewerStrings.properties b/locale/lt_LT/ViewerStrings.properties new file mode 100644 index 0000000..3c09474 --- /dev/null +++ b/locale/lt_LT/ViewerStrings.properties @@ -0,0 +1,355 @@ + + +contextMenuText=About ArcGIS Viewer for Flex... +aboutText=This application is using ArcGIS Viewer for Flex version @VERSION@.\nBuild date @BUILD_DATE@. +aboutLearnMoreBtn=Learn more +aboutCloseBtn=Close + + + +close=Close +minimize=Minimize + + + +panelExpandTooltip=Click to expand the panel +panelCollapseTooltip=Click to collapse the panel + + +locateExampleValueX=25.2833 +locateExampleValueY=54.6833 + + +clearLabel=Clear +deleteLabel=Delete +loadingLabel=Loading... +okLabel=OK +errorLabel=Error +problemLabel=Problem +noFeatures=No features found. +resultsLabel=Results +saveLabel=Save + + +unitsFeet=Feet +unitsFeetAbbr=ft +unitsKilometers=Kilometers +unitsKilometersAbbr=km +unitsMeters=Meters +unitsMetersAbbr=m +unitsMiles=Miles +unitsMilesAbbr=mi +unitsYards=Yards +unitsYardsAbbr=yd + +unitsAcres=Acres +unitsAcresAbbr=ac +unitsHectares=Hectares +unitsHectaresAbbr=ha +unitsSquareFeet=Square feet +unitsSquareFeetAbbr=sq ft +unitsSquareKilometers=Square kilometers +unitsSquareKilometersAbbr=sq km +unitsSquareMeters=Square meters +unitsSquareMetersAbbr=sq m +unitsSquareMiles=Square miles +unitsSquareMilesAbbr=sq mi +unitsSquareYards=Square yards +unitsSquareYardsAbbr=sq yd + + +tocMapLayerZoomToLabel=Zoom to +tocMapLayerTransparencyLabel=Transparency +tocMapLayerOpaqueLabel=Opaque +tocMapLayerTransparentLabel=Transparent +tocMapLayerMoveUpLabel=Move up +tocMapLayerMoveDownLabel=Move down +tocMapLayerRemoveLabel=Remove +tocMapLayerDescriptionLabel=Description +tocMapLayerDownloadLabel=Download + + +incorrectLayerTypeText={0} is not a supported layer type. Use "arcims", "bing", "csv", "dynamic", "feature", "georss", "image", "kml", "osm", "tiled", "wms" or "wmts" instead. + + +missingConfigFileText=Could not find {0} +httpResponseStatus=http response status: {0} +faultCode=Fault code: {0} +faultInfo=Fault info: {0} +faultDetail=Fault details: {0} + + +parseConfigErrorText=A problem occurred while parsing the configuration file {0} +standalonePlayerExternalInterfaceErrorText=Some error occurred. ExternalInterface doesn't work in Standalone player. +layerFailedToLoad:{0} layer failed to load: {1} +couldNotFetchBasemapData=Could not fetch basemap data:\n{0} +couldNotConnectToPortal=Could not connect to Portal. +couldNotQueryPortal=Could not query portal. +couldNotQueryPortalItems=Could not query portal items. +serverMissingCrossDomain=GIS Server is missing a crossdomain file. +serviceIsInaccessible=Service does not exist or is inaccessible. +unauthorizedAccess=You don't have permissions to access this service. +unknownErrorCause=Unknown error cause. +resourceAccessDenied=You do not have permissions to access this resource. +signInAborted=Sign in aborted. +invalidWidgetId=Invalid widgetId: {0} +printTaskExecutionError=Error executing print task:\n\n{0} +gpServiceConnectionError=Unable to connect to GP Service:\n{0}\n\n{1}\n{2} +locatorServiceConnectionError=Unable to connect to Locator Service:\n{0}\n\n{1}\n{2} +singleLineGeocodingNotSupportedError=Locator service does not support single-line geocoding. +rssFeedParsingError=A problem occurred while parsing the RSS feed. {0} +httpResponseNotXMLError=HTTP Response is not XML. +unknownRSSFeedTypeError=Unable to determine RSS feed type. +initializationError=A problem ocurred while initializing: {0} +unableToDetermineGPExecutionType=Could not determine geoprocessing execution type: +projectionError=Error projecting geometry: {0} +cannotRunTaskExecutionTypeUnknownError=Cannot run task: execution type unknown. +layerDataRetrievalError=Could not retrieve layer data. +couldNotDeleteFeature=Could not delete feature +couldNotUpdateFeatureError=Could not update feature, Restoring old value + + +configFileCrossDomain=Possible crossdomain issue: {0}{1} + + +openToolTip=Click to open overview map +closeToolTip=Click to close overview map + + +layerListLabel=More... +basemap=Basemap + + +aboutLabel=About +searchPrompt=Enter address +searchResultTitleLabel=Location +noResultsFoundLabel=No results found + + +fullExtentLabel=Full Extent +panDownLabel=Pan down +panLeftLabel=Pan left +panRightLabel=Pan right +panUpLabel=Pan up +previousExtentLabel=Previous Extent +nextExtentLabel=Next Extent +panLabel=Pan +zoomInLabel=Zoom in +zoomOutLabel=Zoom out + + + + + + +addTextLabel=Add Text +drawPointLabel=Draw Point +drawLineLabel=Draw Line +drawFreehandLineLabel=Draw Freehand Line +drawPolygonLabel=Draw Polygon +drawFreehandPolygonLabel=Draw Freehand Polygon +drawRectangleLabel=Draw Rectangle +drawMapExtentLabel=Draw Map Extent +drawCircleLabel=Draw Circle +drawEllipseLabel=Draw Ellipse +drawClearLabel=Clear drawings + +markerStyleCircle=Circle +markerStyleCross=Cross +markerStyleDiamond=Diamond +markerStyleSquare=Square +markerStyleTriangle=Triangle +markerStyleX=X + +textFont1=Arial +textFont2=Courier New +textFont3=Broadway +textFont4=Comic Sans MS +textFont5=Algerian +textFont6=Verdana + +lineStyleSolid=Solid +lineStyleDash=Dash +lineStyleDot=Dot +lineStyleDashDot=Dash Dot +lineStyleDashDotDot=Dash Dot Dot + +fillStyleSolid=Solid +fillStyleBackwardDiagonal=Backward Diagonal +fillStyleCross=Cross +fillStyleForwardDiagonal=Forward Diagonal +fillStyleHorizontal=Horizontal +fillStyleVertical=Vertical + + + +markerAlphaLabel=Alpha +markerColorLabel=Marker Color +markerSizeLabel=Size +markerStyleLabel=Style +markerOutlineColorLabel=Outline Color +markerOutlineWidthLabel=Width +textLabel=Text +textColorLabel=Color +textFontLabel=Font +textSizeLabel=Size +textBoldLabel=B +textBoldTooltip=Bold +textItalicLabel=I +textItalicTooltip=Italic +textUnderlineLabel=U +textUnderlineTooltip=Underline +lineAlphaLabel=Alpha +lineColorLabel=Line Color +lineStyleLabel=Style +lineWidthLabel=Width +fillAlphaLabel=Alpha +fillColorLabel=Fill Color +fillStyleLabel=Style +fillOutlineColorLabel=Outline Color +fillOutlineWidthLabel=Width + + + + +showMeasurementsLabel=Show Measurements +distanceUnitsLabel=Distance Units +areaUnitsLabel=Area Units +areaLabel=Area: +perimeterLabel=Perimeter: +lengthLabel=Length: + + +bookmarksLabel=Bookmarks +addbookmarksLabel=Add Bookmark +addLabel=Add current extent as a bookmark named +bookmarkSubmitLabel=Add Bookmark +bookmarkMissingNameLabel=Please enter a name for the bookmark. +deleteBookmarkTooltip=Delete bookmark + + +descLabel=Extract data and download zip file +step1Label=1. Select area +dataCurrentExtentLabel=1. Data will be extracted from your current extent. +step2Label=2. Select layers to extract +step3Label=3. Select file format +step4Label=4. Select raster format +step5Label=5. SpatialReference +extractButtonLabel=Extract +step1ErrorLabel=Please select an area of interest. +step2ErrorLabel=Please select layers to extract. +emptyResultsLabel=Task completed but didn't return any results. +saveDataFileLabel=Data file created. Would you like to save it? + + +attributesLabel=Attributes +attachmentsLabel=Attachments +relatedRecordsLabel=Related Records +featureLayerOutOfScaleText=This feature layer is out of scale range +showAttachmentsText=Attachments +showRelatedRecordsText=Related records +showAttributesText=Go back +selectTemplateText=Select template to create feature +noEditableLayersText=No editable layers. +noCreateCapabilityLayersText=None of the layers have create capability +layerNotSupportingAttachmentsText=This layer does not support attachments +noAttachmentsText=No attachments +chooseFileText=Choose a file to attach +attachmentSubmitLabel=Submit +attachmentCancelLabel=Cancel +singleAttachmentText=The feature has {0} attachment +multipleAttachmentsText=The feature has {0} attachments + + +layerListTitle=Layer Visibility + + +locateSubmitLabel=Locate +addressLabel=Address +coordinatesLabel=Coordinates +addressTitle=Enter the address +coordinatesTitle=Enter the coordinates +xLabel=Longitude (X) +yLabel=Latitude (Y) +locationsLabel=Locations found: +bingCulture=en-US +requiredFields=Required fields: +requiredField=Required field: +deleteResultTooltip=Delete result +resultScoreText=Score: +bingResultConfidenceText=Confidence: + + +printSubmitLabel=Print +printTitle= +printSubtitle= +printCopyright= +printTitleLabel=Title +printSubtitleLabel=Subtitle +printCopyrightLabel=Copyright +printAuthorLabel=Author +printLayoutTemplatesLabel=Layout templates +printFormatsLabel=Formats +printScaleLabel=Use this scale + + +filterTitleBarTooltip=Filter results +showallTitleBarTooltip=Show all +filterButtonLabel=Filter +clearButtonLabel=Show all +featuresFoundLabel=Features found: {0} + + +drivingDirectionLabel=Driving Directions +routeSubmitLabel=Get Directions +moveUpTooltip=Move up +moveDownTooltip=Move down +addLocationTooltip=click on map to add location +optionsLabel=Options +bestSequenceLabel=Find best sequence +milesLabel=Miles +metricLabel=Km +changeRouteSymbolLabel=Change route symbol +editRouteLabel=Edit Route + + +graphicalTitleBarTooltip=Select features +textTitleBarTooltip=Select by attribute +graphicalsearchLabel=Select features by +textsearchLabel=Select by attribute +layerLabel=Search layer +nolayerLabel=No search layer defined. +searchSubmitLabel=Search +selectionLabel=Features selected: + + +latitudeLabel=Latitude +longitudeLabel=Longitude + + +gpSubmitLabel=Submit +inputLabel=Input +helpLabel=Help +outputLabel=Output +copyToClipboard=Copy to Clipboard +unsupportedInputType={0} input is not supported +currentExtentWillBeUsedAsInput=The current extent will be used as input. + + +zoomLabel=Zoom to + + +helloContent=Change this text in config file. + + +widgetIDWidgetLabelTemplate=Widget Id: {0}, widget label: {1} +widgetIDWidgetStateTemplate=Widget Id: {0}, widget state: {1} +itemLabelWidgetIDItemIDTemplate={0} Widget ID: {1} + + +layerSelectionLabel=Select layer +drawToolMenuLabel=Select draw tool +selectLabel=Select +noLayersLabel=No layers +noChartDataToDisplayLabel=No chart data to display +featureLayerNotVisibleText=feature layer is either not visible or out of scale range \ No newline at end of file diff --git a/locale/pt_PT/ViewerStrings.properties b/locale/pt_PT/ViewerStrings.properties new file mode 100644 index 0000000..5374ee7 --- /dev/null +++ b/locale/pt_PT/ViewerStrings.properties @@ -0,0 +1,355 @@ + + +contextMenuText=Sobre o ArcGIS Viewer for Flex... +aboutText=Este aplicativo utiliza a versão @VERSION@ do ArcGIS Viewer for Flex.\nData de desenvolvimento @BUILD_DATE@. +aboutLearnMoreBtn=Obter mais informações +aboutCloseBtn=Fechar + + + +close=Fechar +minimize=Minimizar + + + +panelExpandTooltip=Click to expand the panel +panelCollapseTooltip=Click to collapse the panel + + +locateExampleValueX=-9.1497 +locateExampleValueY=38.7251 + + +clearLabel=Limpar +deleteLabel=Excluir +loadingLabel=Carregando... +okLabel=OK +errorLabel=Erro +problemLabel=Problema +noFeatures=Nenhuma feição foi encontrada. +resultsLabel=Resultados +saveLabel=Salvar + + +unitsFeet=Pés +unitsFeetAbbr=ft +unitsKilometers=Quilômetros +unitsKilometersAbbr=km +unitsMeters=Metros +unitsMetersAbbr=m +unitsMiles=Milhas +unitsMilesAbbr=mi +unitsYards=Jardas +unitsYardsAbbr=yd + +unitsAcres=Acres +unitsAcresAbbr=ac +unitsHectares=Hectares +unitsHectaresAbbr=ha +unitsSquareFeet=Pés Quadrados +unitsSquareFeetAbbr=sq ft +unitsSquareKilometers=Quilômetros Quadrados +unitsSquareKilometersAbbr=sq km +unitsSquareMeters=Metros Quadrados +unitsSquareMetersAbbr=sq m +unitsSquareMiles=Milhas Quadradas +unitsSquareMilesAbbr=sq mi +unitsSquareYards=Jardas Quadradas +unitsSquareYardsAbbr=sq yd + + +tocMapLayerZoomToLabel=Zoom para +tocMapLayerTransparencyLabel=Transparência +tocMapLayerOpaqueLabel=Opaco +tocMapLayerTransparentLabel=Transparente +tocMapLayerMoveUpLabel=Mover para cima +tocMapLayerMoveDownLabel=Mover para baixo +tocMapLayerRemoveLabel=Remover +tocMapLayerDescriptionLabel=Descrição +tocMapLayerDownloadLabel=Download + + +incorrectLayerTypeText={0} não é um tipo de camada suportado. Use "arcims", "bing", "csv", "dynamic", "feature", "georss", "image", "kml", "osm", "tiled", "wms" ou "wmts" + + +missingConfigFileText=Não foi possível encontrar {0} +httpResponseStatus=Status de resposta http: {0} +faultCode=Código de falha: {0} +faultInfo=Informações sobre a falha: {0} +faultDetail=Detalhes da falha: {0} + + +parseConfigErrorText=Ocorreu um problema ao analisar o arquivo de configuração {0} +standalonePlayerExternalInterfaceErrorText=Ocorreu algum erro . O ExternalInterface não funciona na reprodução Standalone. +layerFailedToLoad:{0} falha ao carregar camada: {1} +couldNotFetchBasemapData=Não foi possível obter os dados do mapa base:\n{0} +couldNotConnectToPortal=Não foi possível conectar ao Portal. +couldNotQueryPortal=Não foi possível consultar o portal. +couldNotQueryPortalItems=Não foi possível consultar os itens do portal. +serverMissingCrossDomain=O GIS Server não tem um arquivo de domínio cruzado. +serviceIsInaccessible=O serviço não existe ou está inacessível. +unauthorizedAccess=Você não tem permissões para acessar este serviço. +unknownErrorCause=Causa de erro desconhecida. +resourceAccessDenied=Não tem permissões para aceder a este recurso. +signInAborted=Início de sessão cancelado. +invalidWidgetId=Id de widget inválido: {0} +printTaskExecutionError=Erro ao executar a tarefa de impressão:\n\n{0} +gpServiceConnectionError=Não foi possível estabelecer ligação ao Serviço de GP:\n{0}\n\n{1}\n{2} +locatorServiceConnectionError=Não foi possível estabelecer ligação ao Serviço de Localizador:\n{0}\n\n{1}\n{2} +singleLineGeocodingNotSupportedError=O serviço do localizador não tem suporte para geocodificação de única linha. +rssFeedParsingError=Ocorreu um problema ao analisar o ficheiro RSS. {0} +httpResponseNotXMLError=A resposta de HTTP não é XML. +unknownRSSFeedTypeError=Não foi possível determinar o tipo de ficheiro RSS. +initializationError=Ocorreu um problema durante a inicialização: {0} +unableToDetermineGPExecutionType=Não foi possível determinar o tipo de execução de geoprocessamento: +projectionError=Erro ao projetar geometria: {0} +cannotRunTaskExecutionTypeUnknownError=Não é possível executar a tarefa: tipo de execução desconhecido. +layerDataRetrievalError=Não foi possível recuperar os dados da camada. +couldNotDeleteFeature=Não foi possível excluir a feição +couldNotUpdateFeatureError=Não foi possível atualizar a feição, Restaurando valor antigo + + +configFileCrossDomain=Possível problema de inter-domínio: {0}{1} + + +openToolTip=Clique para abrir um mapa de visão geral +closeToolTip=Clique para fechar um mapa de visão geral + + +layerListLabel=Mais... +basemap=Mapa Base + + +aboutLabel=Sobre +searchPrompt=Inserir endereço +searchResultTitleLabel=Local +noResultsFoundLabel=Nenhum resultado encontrado + + +fullExtentLabel=Extensão Total +panDownLabel=Mover para baixo +panLeftLabel=Mover para esquerda +panRightLabel=Mover para direita +panUpLabel=Mover para cima +previousExtentLabel=Extensão Anterior +nextExtentLabel=Próxima Extensão +panLabel=Mover +zoomInLabel=Mais zoom +zoomOutLabel=Menos zoom + + + + + + +addTextLabel=Adicionar Texto +drawPointLabel=Desenhar Ponto +drawLineLabel=Desenhar Linha +drawFreehandLineLabel=Desenhar Linha à Mão Livre +drawPolygonLabel=Desenhar Polígono +drawFreehandPolygonLabel=Desenhar Polígono à Mão Livre +drawRectangleLabel=Desenhar Retângulo +drawMapExtentLabel=Desenhar Extensão do Mapa +drawCircleLabel=Desenhar Círculo +drawEllipseLabel=Desenhar Eclipse +drawClearLabel=Limpar desenhos + +markerStyleCircle=Círculo +markerStyleCross=Cruz +markerStyleDiamond=Diamante +markerStyleSquare=Quadrado +markerStyleTriangle=Triângulo +markerStyleX=X + +textFont1=Arial +textFont2=Courier New +textFont3=Broadway +textFont4=Comic Sans MS +textFont5=Algerian +textFont6=Verdana + +lineStyleSolid=Sólido +lineStyleDash=Traço +lineStyleDot=Ponto +lineStyleDashDot=Traço e Ponto +lineStyleDashDotDot=Traço, Ponto e Ponto + +fillStyleSolid=Sólido +fillStyleBackwardDiagonal=Diagonal Posterior +fillStyleCross=Cruz +fillStyleForwardDiagonal=Diagonal Frontal +fillStyleHorizontal=Horizontal +fillStyleVertical=Vertical + + + +markerAlphaLabel=Alfa +markerColorLabel=Cor do Marcador +markerSizeLabel=Tamanho +markerStyleLabel=Estilo +markerOutlineColorLabel=Cor de Contorno +markerOutlineWidthLabel=Largura +textLabel=Texto +textColorLabel=Cor +textFontLabel=Fonte +textSizeLabel=Tamanho +textBoldLabel=N +textBoldTooltip=Negrito +textItalicLabel=I +textItalicTooltip=Itálico +textUnderlineLabel=S +textUnderlineTooltip=Sublinhado +lineAlphaLabel=Alfa +lineColorLabel=Cor da Linha +lineStyleLabel=Estilo +lineWidthLabel=Largura +fillAlphaLabel=Alfa +fillColorLabel=Cor de Preenchimento +fillStyleLabel=Estilo +fillOutlineColorLabel=Cor de Contorno +fillOutlineWidthLabel=Largura + + + + +showMeasurementsLabel=Exibir Medidas +distanceUnitsLabel=Unidades de Distância +areaUnitsLabel=Unidades de Área +areaLabel=Área: +perimeterLabel=Perímetro: +lengthLabel=Comprimento: + + +bookmarksLabel=Marcadores +addbookmarksLabel=Adicionar Marcador +addLabel=Adiciona a extensão atual como um marcador nomeado +bookmarkSubmitLabel=Adicionar Marcador +bookmarkMissingNameLabel=Insira um nome para o marcador. +deleteBookmarkTooltip=Excluir marcador + + +descLabel=Extrair dados e fazer download do arquivo zip +step1Label=1. Selecionar área +dataCurrentExtentLabel=1. Os dados serão extraídos da extensão atual. +step2Label=2. Selecionar camadas para extrair +step3Label=3. Selecionar formato de arquivo +step4Label=4. Selecionar o formato raster +step5Label=5. SpatialReference +extractButtonLabel=Extrair +step1ErrorLabel=Selecione uma área de interesse. +step2ErrorLabel=Selecione as camadas para extrair. +emptyResultsLabel=Tarefa concluída, mas não retornou nenhum resultado. +saveDataFileLabel=Arquivo de dados criado. Deseja salvá-lo? + + +attributesLabel=Atributos +attachmentsLabel=Anexos +relatedRecordsLabel=Registros Relacionados +featureLayerOutOfScaleText=Esta camada de feição está fora da faixa de escala +showAttachmentsText=Anexos +showRelatedRecordsText=Registros relacionados +showAttributesText=Voltar +selectTemplateText=Selecione o modelo para criar a feição +noEditableLayersText=Nenhuma camada pode ser editada. +noCreateCapabilityLayersText=Nenhuma das camadas criou o recurso +layerNotSupportingAttachmentsText=Esta camada não suporta anexos +noAttachmentsText=Sem anexos +chooseFileText=Escolha um arquivo para anexar +attachmentSubmitLabel=Enviar +attachmentCancelLabel=Cancelar +singleAttachmentText=A feição tem {0} anexo +multipleAttachmentsText=A feição tem {0} anexos + + +layerListTitle=Visibilidade da Camada + + +locateSubmitLabel=Localizar +addressLabel=Endereço +coordinatesLabel=Coordenadas +addressTitle=Insira o endereço +coordinatesTitle=Insira as coordenadas +xLabel=Longitude (X) +yLabel=Latitude (Y) +locationsLabel=Locais encontrados: +bingCulture=pt-BR +requiredFields=Campos obrigatórios: +requiredField=Campo obrigatório: +deleteResultTooltip=Excluir resultado +resultScoreText=Pontuação: +bingResultConfidenceText=Confiança: + + +printSubmitLabel=Imprimir +printTitle= +printSubtitle= +printCopyright= +printTitleLabel=Título +printSubtitleLabel=Subtítulo +printCopyrightLabel=Direitos Autorais +printAuthorLabel=Autor +printLayoutTemplatesLabel=Modelos de layout +printFormatsLabel=Formatos +printScaleLabel=Utilize esta escala + + +filterTitleBarTooltip=Filtrar resultados +showallTitleBarTooltip=Mostrar Todos +filterButtonLabel=Filtro +clearButtonLabel=Mostrar Todos +featuresFoundLabel=Feições encontradas: {0} + + +drivingDirectionLabel=Direção +routeSubmitLabel=Obter Direção +moveUpTooltip=Mover para cima +moveDownTooltip=Mover para baixo +addLocationTooltip=clique no mapa para adicionar a localização +optionsLabel=Opções +bestSequenceLabel=Encontrar a melhor sequência +milesLabel=Milhas +metricLabel=Km +changeRouteSymbolLabel=Alterar símbolo da rota +editRouteLabel=Editar rota + + +graphicalTitleBarTooltip=Selecionar feições +textTitleBarTooltip=Selecionar por atributo +graphicalsearchLabel=Selecionar feições por +textsearchLabel=Selecionar por atributo +layerLabel=Pesquisar camada +nolayerLabel=Nenhuma camada de pesquisa definida. +searchSubmitLabel=Pesquisar +selectionLabel=Feições selecionadas: + + +latitudeLabel=Latitude +longitudeLabel=Longitude + + +gpSubmitLabel=Enviar +inputLabel=Entrada +helpLabel=Ajuda +outputLabel=Saída +copyToClipboard=Copiar para Área de Transferência +unsupportedInputType=A entrada {0} não é suportada +currentExtentWillBeUsedAsInput=A extensão atual será utilizada como entrada. + + +zoomLabel=Zoom para + + +helloContent=Altere este texto no arquivo de configuração. + + +widgetIDWidgetLabelTemplate=Id do Widget: {0}, rótulo do widget: {1} +widgetIDWidgetStateTemplate=Id do Widget: {0}, status do widget: {1} +itemLabelWidgetIDItemIDTemplate={0} ID do Widget: {1} + + +layerSelectionLabel=Selecionar camada +drawToolMenuLabel=Selecionar ferramenta de desenho +selectLabel=Selecionar +noLayersLabel=Nenhum camada +noChartDataToDisplayLabel=Nenhum dado de gráfico para exibir +featureLayerNotVisibleText=a camada de feição não está visível ou está fora da faixa de escala \ No newline at end of file From 8c6c818f6b320dbd0952413de8be8012c5882700 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Tue, 15 Jan 2013 12:36:28 -0800 Subject: [PATCH 005/178] Allow map panning if pan starts on drawn graphic. --- src/widgets/Draw/DrawWidget.mxml | 127 ++++++++++++++++++++----------- 1 file changed, 81 insertions(+), 46 deletions(-) diff --git a/src/widgets/Draw/DrawWidget.mxml b/src/widgets/Draw/DrawWidget.mxml index 51fca10..30c3b13 100644 --- a/src/widgets/Draw/DrawWidget.mxml +++ b/src/widgets/Draw/DrawWidget.mxml @@ -433,6 +433,7 @@ cboArea.dataProvider = configArea; } } + AppEvent.addListener(AppEvent.DATA_PUBLISH, sharedDataUpdated); } @@ -500,7 +501,7 @@ if (data.key == "Deactivate_DrawTool") { setMapAction(null, null, null, null); - editTool.deactivate(); + resetEditing(); if (selectedDrawingIcon) { selectedDrawingIcon.filters = []; @@ -509,11 +510,21 @@ } } + private function resetEditing():void + { + isEditing = false; + if (editGraphic) + { + editGraphic.checkForMouseListeners = false; + } + editGraphic = null; + lastActiveEditType = "none"; + editTool.deactivate(); + } + private function activateDrawTool(event:MouseEvent):void { addSharedData("Deactivate_DrawTool", null); // to be able to deactivate drawTool on other widgets - editTool.deactivate(); - lastActiveEditType = "none"; // apply glow selectedDrawingIcon = FocusableImage(event.currentTarget); @@ -522,7 +533,9 @@ frmDraw.visible = true; showMeasurements = false; - isEditing = false; + + resetEditing(); + drawType = selectedDrawingIcon.name; switch (drawType) { @@ -613,7 +626,7 @@ private function clear():void { graphicsLayer.clear(); - editTool.deactivate(); + resetEditing(); updateHasDrawnGraphics(); clearGraphicToMeasurementGraphic(); } @@ -693,7 +706,8 @@ customContextMenu.customItems.push(menuItem); lastDrawnGraphic.contextMenu = customContextMenu; - lastDrawnGraphic.addEventListener(MouseEvent.CLICK, graphic_clickHandler, false, 0, true); + lastDrawnGraphic.addEventListener(MouseEvent.MOUSE_DOWN, graphic_mouseDownHandler, false, 0, true); + lastDrawnGraphic.checkForMouseListeners = false; graphicsLayer.add(lastDrawnGraphic); var geom:Geometry = lastDrawnGraphic.geometry; @@ -762,59 +776,63 @@ graphicsLayer.remove(drawnGraphic); // also remove measurement label if any graphicsLayer.remove(getMeasurementGraphic(drawnGraphic)); - editTool.deactivate(); + resetEditing(); updateHasDrawnGraphics(); } - private function moveMeasurementGraphicToTop(drawnGraphic:Graphic):void + protected function graphic_mouseDownHandler(event:MouseEvent):void { - const measurementGraphic:Graphic = getMeasurementGraphic(drawnGraphic); - if (measurementGraphic) - { - measurementGraphic.graphicsLayer.moveToTop(measurementGraphic); - } + var graphic:Graphic = event.currentTarget as Graphic; + graphic.removeEventListener(MouseEvent.MOUSE_DOWN, graphic_mouseDownHandler); + graphic.addEventListener(MouseEvent.MOUSE_MOVE, graphic_mouseMoveHandler); + graphic.addEventListener(MouseEvent.MOUSE_UP, graphic_mouseUpHandler); } - private function drawIcon_rollOverHandler(event:MouseEvent):void + protected function graphic_mouseMoveHandler(event:MouseEvent):void { - clearSelectionFilter(); - event.target.filters = [ glowFilter ]; + var graphic:Graphic = event.currentTarget as Graphic; + graphic.removeEventListener(MouseEvent.MOUSE_MOVE, graphic_mouseMoveHandler); + graphic.removeEventListener(MouseEvent.MOUSE_UP, graphic_mouseUpHandler); + graphic.addEventListener(MouseEvent.MOUSE_DOWN, graphic_mouseDownHandler); } - private function drawIcon_rollOutHandler(event:MouseEvent):void + protected function graphic_mouseUpHandler(event:MouseEvent):void { - clearSelectionFilter(); + var graphic:Graphic = event.currentTarget as Graphic; + graphic.removeEventListener(MouseEvent.MOUSE_MOVE, graphic_mouseMoveHandler); + graphic.removeEventListener(MouseEvent.MOUSE_UP, graphic_mouseUpHandler); + graphic.addEventListener(MouseEvent.MOUSE_DOWN, graphic_mouseDownHandler); + + handleGraphicClick(graphic); } - private function graphic_clickHandler(event:MouseEvent):void + private function handleGraphicClick(currentGraphic:Graphic):void { - if (editGraphic !== Graphic(event.currentTarget)) + if (editGraphic !== currentGraphic) { - editGraphic = Graphic(event.currentTarget); - lastActiveEditType = "none"; // make sure move and edit vertices is the 1st mode + resetEditing(); + editGraphic = currentGraphic; } + if (editGraphic.geometry is Polyline || editGraphic.geometry is Polygon) { if (lastActiveEditType == "none") { isEditing = true; lastActiveEditType = "moveEditVertices"; - editTool.activate(EditTool.MOVE | EditTool.EDIT_VERTICES, [ editGraphic ]); + activateEditing(EditTool.MOVE | EditTool.EDIT_VERTICES, editGraphic); CursorManager.setCursor(moveCursorIcon, CursorManagerPriority.HIGH, -16, -16); } else if (lastActiveEditType == "moveEditVertices") { isEditing = true; lastActiveEditType = "moveRotateScale"; - editTool.activate(EditTool.MOVE | EditTool.SCALE | EditTool.ROTATE, [ editGraphic ]); + activateEditing(EditTool.MOVE | EditTool.SCALE | EditTool.ROTATE, editGraphic); CursorManager.setCursor(moveCursorIcon, CursorManagerPriority.HIGH, -16, -16); } else if (lastActiveEditType == "moveRotateScale") { - isEditing = false; - editGraphic = null; - lastActiveEditType = "none"; - editTool.deactivate(); + resetEditing(); } } else if (editGraphic.geometry is Extent) @@ -823,15 +841,12 @@ { isEditing = true; lastActiveEditType = "moveScale"; - editTool.activate(EditTool.MOVE | EditTool.SCALE, [ editGraphic ]); + activateEditing(EditTool.MOVE | EditTool.SCALE, editGraphic); CursorManager.setCursor(moveCursorIcon, CursorManagerPriority.HIGH, -16, -16); } else { - isEditing = false; - editGraphic = null; - lastActiveEditType = "none"; - editTool.deactivate(); + resetEditing(); } } else @@ -840,15 +855,12 @@ { isEditing = true; lastActiveEditType = "moveEditVertices"; - editTool.activate(EditTool.EDIT_VERTICES | EditTool.MOVE, [ editGraphic ]); + activateEditing(EditTool.EDIT_VERTICES | EditTool.MOVE, editGraphic); CursorManager.setCursor(moveCursorIcon, CursorManagerPriority.HIGH, -16, -16); } else { - isEditing = false; - editGraphic = null; - lastActiveEditType = "none"; - editTool.deactivate(); + resetEditing(); } } @@ -863,6 +875,21 @@ } } + private function activateEditing(editMode:Number, graphic:Graphic):void + { + graphic.checkForMouseListeners = true; + editTool.activate(editMode, [ graphic ]); + } + + private function moveMeasurementGraphicToTop(drawnGraphic:Graphic):void + { + const measurementGraphic:Graphic = getMeasurementGraphic(drawnGraphic); + if (measurementGraphic) + { + measurementGraphic.graphicsLayer.moveToTop(measurementGraphic); + } + } + private function removeEditToolEventListeners():void { editTool.removeEventListener(EditEvent.GRAPHICS_MOVE_START, editTool_editStartHandler); @@ -897,10 +924,7 @@ map.removeEventListener(MouseEvent.MOUSE_UP, map_mouseUpHandler); map.removeEventListener(MouseEvent.MOUSE_MOVE, map_mouseMoveHandler); - isEditing = false; - editGraphic = null; - lastActiveEditType = "none"; - editTool.deactivate(); + resetEditing(); } } @@ -967,25 +991,25 @@ } if (lastActiveEditType == "moveEditVertices") { - editTool.activate(EditTool.MOVE | EditTool.EDIT_VERTICES, [ graphic ]); + activateEditing(EditTool.MOVE | EditTool.EDIT_VERTICES, graphic); } else if (lastActiveEditType == "moveRotateScale") { - editTool.activate(EditTool.MOVE | EditTool.SCALE | EditTool.ROTATE, [ graphic ]); + activateEditing(EditTool.MOVE | EditTool.SCALE | EditTool.ROTATE, graphic); } } else if (graphic.geometry is Extent) { if (lastActiveEditType == "moveScale") { - editTool.activate(EditTool.MOVE | EditTool.SCALE, [ graphic ]); + activateEditing(EditTool.MOVE | EditTool.SCALE, graphic); } } else { if (lastActiveEditType == "moveEditVertices") { - editTool.activate(EditTool.EDIT_VERTICES | EditTool.MOVE, [ graphic ]); + activateEditing(EditTool.EDIT_VERTICES | EditTool.MOVE, graphic); } } if (getMeasurementGraphic(graphic)) @@ -1402,6 +1426,17 @@ } return longest; } + + private function drawIcon_rollOverHandler(event:MouseEvent):void + { + clearSelectionFilter(); + event.target.filters = [ glowFilter ]; + } + + private function drawIcon_rollOutHandler(event:MouseEvent):void + { + clearSelectionFilter(); + } ]]> From 275da07cb2ed7b7987495677956463da574acef9 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Thu, 17 Jan 2013 15:35:31 -0800 Subject: [PATCH 006/178] Consolidate logic for managing graphic editing. --- src/widgets/Draw/DrawWidget.mxml | 63 +++++++++++++++++--------------- 1 file changed, 33 insertions(+), 30 deletions(-) diff --git a/src/widgets/Draw/DrawWidget.mxml b/src/widgets/Draw/DrawWidget.mxml index 30c3b13..83d68ae 100644 --- a/src/widgets/Draw/DrawWidget.mxml +++ b/src/widgets/Draw/DrawWidget.mxml @@ -194,6 +194,7 @@ [Embed(source="/assets/images/move_cursor.png")] private var moveCursorIcon:Class; + private var moveCursorIconId:int; private var graphicToMeasurementGraphic:Dictionary = new Dictionary(true); private function basewidget_initializeHandler():void @@ -501,7 +502,7 @@ if (data.key == "Deactivate_DrawTool") { setMapAction(null, null, null, null); - resetEditing(); + stopEditing(); if (selectedDrawingIcon) { selectedDrawingIcon.filters = []; @@ -510,7 +511,7 @@ } } - private function resetEditing():void + private function stopEditing():void { isEditing = false; if (editGraphic) @@ -534,7 +535,7 @@ frmDraw.visible = true; showMeasurements = false; - resetEditing(); + stopEditing(); drawType = selectedDrawingIcon.name; switch (drawType) @@ -626,7 +627,7 @@ private function clear():void { graphicsLayer.clear(); - resetEditing(); + stopEditing(); updateHasDrawnGraphics(); clearGraphicToMeasurementGraphic(); } @@ -776,7 +777,7 @@ graphicsLayer.remove(drawnGraphic); // also remove measurement label if any graphicsLayer.remove(getMeasurementGraphic(drawnGraphic)); - resetEditing(); + stopEditing(); updateHasDrawnGraphics(); } @@ -803,14 +804,14 @@ graphic.removeEventListener(MouseEvent.MOUSE_UP, graphic_mouseUpHandler); graphic.addEventListener(MouseEvent.MOUSE_DOWN, graphic_mouseDownHandler); - handleGraphicClick(graphic); + toggleEditing(graphic); } - private function handleGraphicClick(currentGraphic:Graphic):void + private function toggleEditing(currentGraphic:Graphic):void { if (editGraphic !== currentGraphic) { - resetEditing(); + stopEditing(); editGraphic = currentGraphic; } @@ -818,49 +819,45 @@ { if (lastActiveEditType == "none") { - isEditing = true; lastActiveEditType = "moveEditVertices"; - activateEditing(EditTool.MOVE | EditTool.EDIT_VERTICES, editGraphic); - CursorManager.setCursor(moveCursorIcon, CursorManagerPriority.HIGH, -16, -16); + startEditing(EditTool.MOVE | EditTool.EDIT_VERTICES, editGraphic); + showMoveCursor(); } else if (lastActiveEditType == "moveEditVertices") { - isEditing = true; lastActiveEditType = "moveRotateScale"; - activateEditing(EditTool.MOVE | EditTool.SCALE | EditTool.ROTATE, editGraphic); - CursorManager.setCursor(moveCursorIcon, CursorManagerPriority.HIGH, -16, -16); + startEditing(EditTool.MOVE | EditTool.SCALE | EditTool.ROTATE, editGraphic); + showMoveCursor(); } else if (lastActiveEditType == "moveRotateScale") { - resetEditing(); + stopEditing(); } } else if (editGraphic.geometry is Extent) { if (lastActiveEditType == "none") { - isEditing = true; lastActiveEditType = "moveScale"; - activateEditing(EditTool.MOVE | EditTool.SCALE, editGraphic); - CursorManager.setCursor(moveCursorIcon, CursorManagerPriority.HIGH, -16, -16); + startEditing(EditTool.MOVE | EditTool.SCALE, editGraphic); + showMoveCursor(); } else { - resetEditing(); + stopEditing(); } } else { if (lastActiveEditType == "none") { - isEditing = true; lastActiveEditType = "moveEditVertices"; - activateEditing(EditTool.EDIT_VERTICES | EditTool.MOVE, editGraphic); - CursorManager.setCursor(moveCursorIcon, CursorManagerPriority.HIGH, -16, -16); + startEditing(EditTool.EDIT_VERTICES | EditTool.MOVE, editGraphic); + showMoveCursor(); } else { - resetEditing(); + stopEditing(); } } @@ -875,12 +872,19 @@ } } - private function activateEditing(editMode:Number, graphic:Graphic):void + private function startEditing(editMode:Number, graphic:Graphic):void { + isEditing = true; graphic.checkForMouseListeners = true; editTool.activate(editMode, [ graphic ]); } + private function showMoveCursor():void + { + CursorManager.setCursor( + moveCursorIcon, CursorManagerPriority.HIGH, -16, -16); + } + private function moveMeasurementGraphicToTop(drawnGraphic:Graphic):void { const measurementGraphic:Graphic = getMeasurementGraphic(drawnGraphic); @@ -924,7 +928,7 @@ map.removeEventListener(MouseEvent.MOUSE_UP, map_mouseUpHandler); map.removeEventListener(MouseEvent.MOUSE_MOVE, map_mouseMoveHandler); - resetEditing(); + stopEditing(); } } @@ -982,7 +986,6 @@ { var normalizedGeometries:Array = item as Array; graphic.geometry = normalizedGeometries[0]; - isEditing = true; if (graphic.geometry is Polyline || graphic.geometry is Polygon) { if (lastActiveEditType == "moveScale") @@ -991,25 +994,25 @@ } if (lastActiveEditType == "moveEditVertices") { - activateEditing(EditTool.MOVE | EditTool.EDIT_VERTICES, graphic); + startEditing(EditTool.MOVE | EditTool.EDIT_VERTICES, graphic); } else if (lastActiveEditType == "moveRotateScale") { - activateEditing(EditTool.MOVE | EditTool.SCALE | EditTool.ROTATE, graphic); + startEditing(EditTool.MOVE | EditTool.SCALE | EditTool.ROTATE, graphic); } } else if (graphic.geometry is Extent) { if (lastActiveEditType == "moveScale") { - activateEditing(EditTool.MOVE | EditTool.SCALE, graphic); + startEditing(EditTool.MOVE | EditTool.SCALE, graphic); } } else { if (lastActiveEditType == "moveEditVertices") { - activateEditing(EditTool.EDIT_VERTICES | EditTool.MOVE, graphic); + startEditing(EditTool.EDIT_VERTICES | EditTool.MOVE, graphic); } } if (getMeasurementGraphic(graphic)) From 21aa06b15c79b0aa96f1f89d0d6398cd6d0ae638 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Thu, 17 Jan 2013 16:08:14 -0800 Subject: [PATCH 007/178] Add logic for removing unused move cursors. --- src/widgets/Draw/DrawWidget.mxml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/widgets/Draw/DrawWidget.mxml b/src/widgets/Draw/DrawWidget.mxml index 83d68ae..88df79c 100644 --- a/src/widgets/Draw/DrawWidget.mxml +++ b/src/widgets/Draw/DrawWidget.mxml @@ -881,7 +881,13 @@ private function showMoveCursor():void { - CursorManager.setCursor( + var hasMoveCursorIdBeenSet:Boolean = (moveCursorIconId > 0); + if (hasMoveCursorIdBeenSet) + { + CursorManager.removeCursor(moveCursorIconId); + } + + moveCursorIconId = CursorManager.setCursor( moveCursorIcon, CursorManagerPriority.HIGH, -16, -16); } From 4bd17d4fc25ed757b47407bbcde012a4d9d9a82f Mon Sep 17 00:00:00 2001 From: jcfranco Date: Fri, 11 Jan 2013 17:25:58 -0800 Subject: [PATCH 008/178] Add top padding to graphical & text search views. --- src/widgets/Search/SearchWidget.mxml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/widgets/Search/SearchWidget.mxml b/src/widgets/Search/SearchWidget.mxml index e3238b5..af3cc5e 100644 --- a/src/widgets/Search/SearchWidget.mxml +++ b/src/widgets/Search/SearchWidget.mxml @@ -1003,7 +1003,9 @@ visible="false" visible.graphicalInput="true"> - + - + Date: Fri, 11 Jan 2013 14:04:23 -0800 Subject: [PATCH 009/178] Defer to Map#zoomTo wherever applicable. --- .../components/toc/tocClasses/TocLayerMenu.mxml | 6 +----- .../Geoprocessing/GeoprocessingWidget.mxml | 17 ++--------------- src/widgets/Query/QueryWidget.mxml | 10 +--------- src/widgets/Search/SearchWidget.mxml | 11 +---------- 4 files changed, 5 insertions(+), 39 deletions(-) diff --git a/src/com/esri/viewer/components/toc/tocClasses/TocLayerMenu.mxml b/src/com/esri/viewer/components/toc/tocClasses/TocLayerMenu.mxml index 4e50c3a..eae56d9 100644 --- a/src/com/esri/viewer/components/toc/tocClasses/TocLayerMenu.mxml +++ b/src/com/esri/viewer/components/toc/tocClasses/TocLayerMenu.mxml @@ -183,11 +183,7 @@ private function updateMapExtent(layerExtent:Extent):void { - _layer.map.extent = layerExtent; - if (!_layer.map.extent.contains(layerExtent)) - { - _layer.map.level--; - } + _layer.map.zoomTo(layerExtent); } private function transparencyLabel_clickHandler(event:MouseEvent):void diff --git a/src/widgets/Geoprocessing/GeoprocessingWidget.mxml b/src/widgets/Geoprocessing/GeoprocessingWidget.mxml index 351d1b4..9c4b1be 100644 --- a/src/widgets/Geoprocessing/GeoprocessingWidget.mxml +++ b/src/widgets/Geoprocessing/GeoprocessingWidget.mxml @@ -793,8 +793,7 @@ private function zoomToOutputFeatures():void { - var outputFeaturesExtent:Extent = gpParamHandler.getOutputFeaturesExtent(); - updateMapExtent(outputFeaturesExtent); + map.zoomTo(gpParamHandler.getOutputFeaturesExtent()); } protected function menuItem_contextMenuDeleteHandler(event:ContextMenuEvent):void @@ -936,7 +935,7 @@ private function zoomToResultImageLayers():void { - updateMapExtent(largestResultImageLayerExtent); + map.zoomTo(largestResultImageLayerExtent); } private function extractLargestResultImageLayerExtent():void @@ -981,18 +980,6 @@ } } - private function updateMapExtent(newExtent:Extent):void - { - if (newExtent) - { - map.extent = newExtent; - if (!map.extent.contains(newExtent)) - { - map.level--; - } - } - } - private function showAllResultImageLayers():void { for each (var resultImageLayer:GPResultImageLayer in resultImageLayersOnMap) diff --git a/src/widgets/Query/QueryWidget.mxml b/src/widgets/Query/QueryWidget.mxml index 78933cc..9d94bd8 100644 --- a/src/widgets/Query/QueryWidget.mxml +++ b/src/widgets/Query/QueryWidget.mxml @@ -506,17 +506,9 @@ { map.scale = zoomScale; } - map.centerAt(queryResult.center); } - else - { - map.extent = queryResult.geometry.extent; - if (!map.extent.contains(queryResult.geometry)) - { - map.level--; - } - } + map.zoomTo(queryResult.center); } clearTimeout(hitimer); hitimer = setTimeout(showHighlight, 300, [ queryResult ]); diff --git a/src/widgets/Search/SearchWidget.mxml b/src/widgets/Search/SearchWidget.mxml index af3cc5e..2f4b5c7 100644 --- a/src/widgets/Search/SearchWidget.mxml +++ b/src/widgets/Search/SearchWidget.mxml @@ -824,18 +824,9 @@ { map.scale = zoomScale; } - - map.centerAt(searchResult.center); } - else - { - map.extent = searchResult.geometry.extent; - if (!map.extent.contains(searchResult.geometry)) - { - map.level--; - } - } + map.zoomTo(searchResult.geometry); } clearTimeout(hitimer); hitimer = setTimeout(showHighlight, 300, [ searchResult ]); From 5263d57403f4f46543566ce2b47e3a450ec7ea5b Mon Sep 17 00:00:00 2001 From: jcfranco Date: Fri, 11 Jan 2013 10:18:51 -0800 Subject: [PATCH 010/178] Update version.xml to 3.101. --- src/version.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/version.xml b/src/version.xml index b68cca6..ecf7e00 100644 --- a/src/version.xml +++ b/src/version.xml @@ -1,2 +1,2 @@ - + From 4ab7c7d9fda1653236066157ec82b805f3c8c842 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Thu, 24 Jan 2013 10:37:38 -0800 Subject: [PATCH 011/178] Ensure search results are displayed after search is complete. --- .../components/singleLineSearch/SingleLineSearch.mxml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml b/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml index f0aafce..f9d26d7 100644 --- a/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml +++ b/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml @@ -350,13 +350,13 @@ private function search():void { - currentState = "normal"; - if (!searchTerm) { return; } + currentState = "searching"; + const hasCurrentSearchInProgress:Boolean = totalResultsToProcess > 0; if (hasCurrentSearchInProgress) { @@ -930,7 +930,10 @@ return; } - currentState = "normal"; + if (currentState != "searching") + { + currentState = "normal"; + } } protected function searchInput_changeHandler(event:TextOperationEvent):void @@ -1052,6 +1055,7 @@ + From f0a7b4021db7bd28c93081dbee00927bca1e007e Mon Sep 17 00:00:00 2001 From: Sarthak Date: Wed, 23 Jan 2013 10:54:01 -0800 Subject: [PATCH 012/178] Localize panel collapse/expand tooltip --- locale/en_US/ViewerStrings.properties | 5 +++++ src/com/esri/viewer/utils/PanelBox.as | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/locale/en_US/ViewerStrings.properties b/locale/en_US/ViewerStrings.properties index 7212f9e..c11b425 100644 --- a/locale/en_US/ViewerStrings.properties +++ b/locale/en_US/ViewerStrings.properties @@ -10,6 +10,11 @@ aboutCloseBtn=Close close=Close minimize=Minimize +# -- Panel Strings -- +# +panelExpandTooltip=Click to expand the panel +panelCollapseTooltip=Click to collapse the panel + # --- general locale specifics locateExampleValueX=-77.03655 locateExampleValueY=38.89767 diff --git a/src/com/esri/viewer/utils/PanelBox.as b/src/com/esri/viewer/utils/PanelBox.as index 18de954..f311557 100644 --- a/src/com/esri/viewer/utils/PanelBox.as +++ b/src/com/esri/viewer/utils/PanelBox.as @@ -49,8 +49,8 @@ public class PanelBox extends DividedBox private var alphas:Array = [ 1, 1 ]; private var ratios:Array = [ 0, 255 ]; - private var expandPanelTooltip:String = "Click to expand the panel"; - private var collapsePanelTooltip:String = "Click to collapse the panel"; + private var expandPanelTooltip:String = LocalizationUtil.getDefaultString("panelExpandTooltip"); + private var collapsePanelTooltip:String = LocalizationUtil.getDefaultString("panelCollapseTooltip"); private var _buttonIndexToSelection:Dictionary = new Dictionary(); From b461b071f733e08936665c74efee6abf2fe1f96c Mon Sep 17 00:00:00 2001 From: sarthakdatt Date: Wed, 23 Jan 2013 10:08:35 -0800 Subject: [PATCH 013/178] Include legend items in the TOC component --- src/com/esri/viewer/components/toc/TOC.as | 30 ++++- .../components/toc/tocClasses/TocItem.as | 9 +- .../toc/tocClasses/TocItemRenderer.as | 64 +++++++++-- .../toc/tocClasses/TocLegendItem.as | 51 +++++++++ .../toc/tocClasses/TocMapLayerItem.as | 108 ++++++++++++++++-- src/widgets/LayerList/LayerListWidget.mxml | 6 + .../MapSwitcher/MapSwitcherWidget.mxml | 7 +- 7 files changed, 256 insertions(+), 19 deletions(-) create mode 100644 src/com/esri/viewer/components/toc/tocClasses/TocLegendItem.as diff --git a/src/com/esri/viewer/components/toc/TOC.as b/src/com/esri/viewer/components/toc/TOC.as index d557a86..6cadff6 100644 --- a/src/com/esri/viewer/components/toc/TOC.as +++ b/src/com/esri/viewer/components/toc/TOC.as @@ -106,8 +106,8 @@ public class TOC extends Tree private var _useLayerFadeEffect:Boolean = false; private var _useLayerFadeEffectChanged:Boolean = false; - // show layer menu - private var _showLayerMenu:Boolean = true; + // include legend items + private var _includeLegendItems:Boolean; //-------------------------------------------------------------------------- // @@ -311,6 +311,30 @@ public class TOC extends Tree } } + //-------------------------------------------------------------------------- + // includeLegendItems + //-------------------------------------------------------------------------- + + [Bindable("includeLegendItemsChanged")] + /** + * Whether to include legend items. + */ + public function get includeLegendItems():Boolean + { + return _includeLegendItems; + } + + /** + * @private + */ + public function set includeLegendItems(value:Boolean):void + { + _includeLegendItems = value; + + onFilterChange(); + dispatchEvent(new Event("includeLegendItemsChanged")); + } + //-------------------------------------------------------------------------- // // Overriden Methods @@ -613,7 +637,7 @@ public class TOC extends Tree setLayerFadeEffect(layer); } - var tocItem:TocMapLayerItem = new TocMapLayerItem(layer, _labelFunction, _isMapServiceOnly); + var tocItem:TocMapLayerItem = new TocMapLayerItem(layer, _labelFunction, _isMapServiceOnly, _includeLegendItems); // need to get the true index of this layer in the map, removing any graphics layers from the equation if necessary as well as any exclude layers var trueMapLayerIndex:Number = 0; for each (var mapLayer:Layer in this.map.layers) diff --git a/src/com/esri/viewer/components/toc/tocClasses/TocItem.as b/src/com/esri/viewer/components/toc/tocClasses/TocItem.as index d8a0c37..43ac992 100644 --- a/src/com/esri/viewer/components/toc/tocClasses/TocItem.as +++ b/src/com/esri/viewer/components/toc/tocClasses/TocItem.as @@ -273,7 +273,14 @@ public class TocItem extends EventDispatcher */ public function isGroupLayer():Boolean { - return children && children.length > 0; + var result:Boolean; + + if (children && children.length > 0) + { + result = children.getItemAt(0) is TocLegendItem ? false : true; + } + + return result; } /** diff --git a/src/com/esri/viewer/components/toc/tocClasses/TocItemRenderer.as b/src/com/esri/viewer/components/toc/tocClasses/TocItemRenderer.as index 2505bf5..3ea1884 100644 --- a/src/com/esri/viewer/components/toc/tocClasses/TocItemRenderer.as +++ b/src/com/esri/viewer/components/toc/tocClasses/TocItemRenderer.as @@ -18,6 +18,8 @@ package com.esri.viewer.components.toc.tocClasses import com.esri.ags.layers.Layer; import com.esri.ags.layers.TiledMapServiceLayer; +import com.esri.ags.symbols.CompositeSymbol; +import com.esri.ags.symbols.Symbol; import com.esri.viewer.AppEvent; import com.esri.viewer.components.toc.TOC; import com.esri.viewer.components.toc.controls.CheckBoxIndeterminate; @@ -30,6 +32,8 @@ import mx.controls.treeClasses.TreeItemRenderer; import mx.controls.treeClasses.TreeListData; import mx.core.FlexGlobals; +import spark.components.Group; + /** * A custom tree item renderer for a map Table of Contents. * @@ -52,6 +56,8 @@ public class TocItemRenderer extends TreeItemRenderer private static const POST_CHECKBOX_GAP:Number = 4; + private static const LEGEND_SWATCH_SIZE:Number = 20; + private var _tocLayerMenu:TocLayerMenu; [Embed(source="assets/images/Context_menu11.png")] @@ -59,6 +65,7 @@ public class TocItemRenderer extends TreeItemRenderer public var contextCls:Class; private var _layerMenuImage:Image; + private var _legendSwatchContainer:Group; //-------------------------------------------------------------------------- // @@ -73,6 +80,30 @@ public class TocItemRenderer extends TreeItemRenderer addEventListener(MouseEvent.CLICK, itemClickHandler); } + //-------------------------------------------------------------------------- + // + // Overriden Properties + // + //-------------------------------------------------------------------------- + + /** + * @private + */ + override public function set data(value:Object):void + { + super.data = value; + + if (value is TocLegendItem) + { + var symbol:Symbol = TocLegendItem(value).legendItemInfo.symbol; + if (symbol && !(symbol is CompositeSymbol)) + { + _legendSwatchContainer.removeAllElements(); + _legendSwatchContainer.addElement(symbol.createSwatch(LEGEND_SWATCH_SIZE, LEGEND_SWATCH_SIZE)); + } + } + } + //-------------------------------------------------------------------------- // // Overriden Methods @@ -109,6 +140,12 @@ public class TocItemRenderer extends TreeItemRenderer this._layerMenuImage.addEventListener(MouseEvent.CLICK, onLayerMenuImageClick); this._layerMenuImage.addEventListener(MouseEvent.DOUBLE_CLICK, onLayerMenuImageDoubleClick); } + + if (!_legendSwatchContainer) + { + _legendSwatchContainer = new Group(); + addChild(_legendSwatchContainer); + } } /** @@ -129,12 +166,15 @@ public class TocItemRenderer extends TreeItemRenderer // Hide the checkbox for child items of tiled map services var checkboxVisible:Boolean = true; - if (isTiledLayerChild(item)) + if (isTiledLayerChild(item) || (item is TocLegendItem)) { checkboxVisible = false; } _checkbox.visible = checkboxVisible; + // show legend for TocLegendItem + _legendSwatchContainer.visible = item is TocLegendItem; + // hide the option button if this is not a layer if (!isLayerItem(item)) { @@ -179,6 +219,7 @@ public class TocItemRenderer extends TreeItemRenderer { var w:Number = measuredWidth; w += _checkbox.measuredWidth; + w += _legendSwatchContainer.measuredWidth; w += _layerMenuImage.measuredWidth; w += 2 * (PRE_CHECKBOX_GAP + POST_CHECKBOX_GAP); // once for the checkbox and once for the option image measuredWidth = w; @@ -203,12 +244,21 @@ public class TocItemRenderer extends TreeItemRenderer } startx += PRE_CHECKBOX_GAP; - // Position the checkbox between the disclosure icon and the item icon - _checkbox.x = startx; - _checkbox.setActualSize(_checkbox.measuredWidth, _checkbox.measuredHeight); - _checkbox.y = (unscaledHeight - _checkbox.height) / 2; - startx = _checkbox.x + _checkbox.width + POST_CHECKBOX_GAP; - + if (_checkbox.visible) + { + // Position the checkbox between the disclosure icon and the item icon + _checkbox.x = startx; + _checkbox.setActualSize(_checkbox.measuredWidth, _checkbox.measuredHeight); + _checkbox.y = (unscaledHeight - _checkbox.height) / 2; + startx = _checkbox.x + _checkbox.width + POST_CHECKBOX_GAP; + } + else if (data is TocLegendItem) + { + startx += TocLegendItem(data).parent is TocMapLayerItem ? 0 : POST_CHECKBOX_GAP; + _legendSwatchContainer.x = startx; + _legendSwatchContainer.y = -(_legendSwatchContainer.height / 2); + startx = _legendSwatchContainer.x + LEGEND_SWATCH_SIZE + POST_CHECKBOX_GAP; + } if (icon) { diff --git a/src/com/esri/viewer/components/toc/tocClasses/TocLegendItem.as b/src/com/esri/viewer/components/toc/tocClasses/TocLegendItem.as new file mode 100644 index 0000000..9660940 --- /dev/null +++ b/src/com/esri/viewer/components/toc/tocClasses/TocLegendItem.as @@ -0,0 +1,51 @@ +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2010-2013 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package com.esri.viewer.components.toc.tocClasses +{ + +import com.esri.ags.layers.supportClasses.LegendItemInfo; + +/** + * A TOC item representing a legend item of an ArcGIS map service. + * + * @private + */ +public class TocLegendItem extends TocItem +{ + public function TocLegendItem(parentItem:TocItem, legendItemInfo:LegendItemInfo) + { + super(parentItem); + + _legendItemInfo = legendItemInfo; + label = legendItemInfo.label; + } + + //-------------------------------------------------------------------------- + // Property: legendItemInfo + //-------------------------------------------------------------------------- + + private var _legendItemInfo:LegendItemInfo; + + /** + * The map layer info that backs this TOC item. + */ + public function get legendItemInfo():LegendItemInfo + { + return _legendItemInfo; + } +} + +} diff --git a/src/com/esri/viewer/components/toc/tocClasses/TocMapLayerItem.as b/src/com/esri/viewer/components/toc/tocClasses/TocMapLayerItem.as index 62d163e..ddc5a84 100644 --- a/src/com/esri/viewer/components/toc/tocClasses/TocMapLayerItem.as +++ b/src/com/esri/viewer/components/toc/tocClasses/TocMapLayerItem.as @@ -22,11 +22,14 @@ import com.esri.ags.events.LayerEvent; import com.esri.ags.layers.ArcGISDynamicMapServiceLayer; import com.esri.ags.layers.ArcGISTiledMapServiceLayer; import com.esri.ags.layers.ArcIMSMapServiceLayer; +import com.esri.ags.layers.ILegendSupport; import com.esri.ags.layers.KMLLayer; import com.esri.ags.layers.Layer; import com.esri.ags.layers.supportClasses.KMLFeatureInfo; import com.esri.ags.layers.supportClasses.KMLFolder; import com.esri.ags.layers.supportClasses.LayerInfo; +import com.esri.ags.layers.supportClasses.LayerLegendInfo; +import com.esri.ags.layers.supportClasses.LegendItemInfo; import com.esri.viewer.ViewerContainer; import com.esri.viewer.components.toc.utils.MapUtil; import com.esri.viewer.utils.MapServiceUtil; @@ -37,6 +40,8 @@ import mx.binding.utils.ChangeWatcher; import mx.collections.ArrayCollection; import mx.events.CollectionEvent; import mx.events.FlexEvent; +import mx.rpc.AsyncResponder; +import mx.rpc.Fault; /** * A TOC item representing a map service or graphics layer. @@ -54,6 +59,8 @@ public class TocMapLayerItem extends TocItem private var _isMSOnly:Boolean = false; private var _isVisibleLayersSet:Boolean = false; private var _layer:Layer; + private var _includeLegendItems:Boolean = false; + private var _layerLegendInfos:Array; private var _labelFunction:Function; private var _visibleLayersChangeWatcher:ChangeWatcher; private var _dynamicMapServiceLayerInfos:Array; @@ -67,12 +74,13 @@ public class TocMapLayerItem extends TocItem /** * Creates a new TocMapLayerItem */ - public function TocMapLayerItem(layer:Layer, labelFunction:Function = null, isMapServiceOnly:Boolean = false) + public function TocMapLayerItem(layer:Layer, labelFunction:Function = null, isMapServiceOnly:Boolean = false, inlcudeLegendItems:Boolean = false) { super(); _layer = layer; _isMSOnly = isMapServiceOnly; + _includeLegendItems = inlcudeLegendItems; // Set the initial visibility without causing a layer refresh setVisible(layer.visible, false); // Indicate whether the item is in scale range without causing a layer refresh @@ -106,8 +114,15 @@ public class TocMapLayerItem extends TocItem if (layer.loaded) { // Process the layer info immediately - createChildren(); layer.map.addEventListener(ExtentEvent.EXTENT_CHANGE, onExtentChange, false, 0, true); + if (layer is ILegendSupport && _includeLegendItems) + { + ILegendSupport(layer).getLegendInfos(new AsyncResponder(getLegendResult, getLegendFault)); + } + else + { + createChildren(); + } } } @@ -272,14 +287,46 @@ public class TocMapLayerItem extends TocItem } } + private function getLegendResult(layerLegendInfos:Array, token:Object = null):void + { + _layerLegendInfos = []; + getLayerLegendInfos(layerLegendInfos); // get all layerLegendInfos as these can be nested + + createChildren(); + } + + private function getLayerLegendInfos(arr:Array):void + { + for each (var layerLegendInfo:LayerLegendInfo in arr) + { + _layerLegendInfos.push(layerLegendInfo); + if (layerLegendInfo.layerLegendInfos) + { + getLayerLegendInfos(layerLegendInfo.layerLegendInfos); + } + } + } + + private function getLegendFault(fault:Fault, token:Object = null):void + { + createChildren(); + } + private function onLayerLoad(event:LayerEvent):void { // Relabel this item, since map layer URL or service name might have changed. label = _labelFunction(layer); if (!_isMSOnly) { - createChildren(); layer.map.addEventListener(ExtentEvent.EXTENT_CHANGE, onExtentChange, false, 0, true); + if (layer is ILegendSupport && _includeLegendItems) + { + ILegendSupport(layer).getLegendInfos(new AsyncResponder(getLegendResult, getLegendFault)); + } + else + { + createChildren(); + } } } @@ -302,9 +349,13 @@ public class TocMapLayerItem extends TocItem { if (layer is ArcGISDynamicMapServiceLayer || layer is ArcGISTiledMapServiceLayer) { - for each (var tocLayerInfoItem:TocLayerInfoItem in children) + for each (var tocItem:TocItem in children) { - updateEnabledBasedOnScale(tocLayerInfoItem, isTocLayerInfoItemInScale(tocLayerInfoItem.layerInfo)); + if (tocItem is TocLayerInfoItem) + { + var tocLayerInfoItem:TocLayerInfoItem = tocItem as TocLayerInfoItem; + updateEnabledBasedOnScale(tocLayerInfoItem, isTocLayerInfoItemInScale(tocLayerInfoItem.layerInfo)); + } } } } @@ -314,9 +365,13 @@ public class TocMapLayerItem extends TocItem if (tocLayerInfoItem.children && tocLayerInfoItem.children.length) { tocLayerInfoItem.isInScaleRange = isInScaleRange; - for each (var childTocLayerInfoItem:TocLayerInfoItem in tocLayerInfoItem.children.toArray()) + for each (var childTocItem:TocItem in tocLayerInfoItem.children.toArray()) { - updateEnabledBasedOnScale(childTocLayerInfoItem, tocLayerInfoItem.isInScaleRange && isTocLayerInfoItemInScale(childTocLayerInfoItem.layerInfo)); + if (childTocItem is TocLayerInfoItem) + { + var childTocLayerInfoItem:TocLayerInfoItem = childTocItem as TocLayerInfoItem; + updateEnabledBasedOnScale(childTocLayerInfoItem, tocLayerInfoItem.isInScaleRange && isTocLayerInfoItemInScale(childTocLayerInfoItem.layerInfo)); + } } } else @@ -409,6 +464,17 @@ public class TocMapLayerItem extends TocItem addChild(createTocLayer(this, layerInfo1, layerInfos, layerInfo1.defaultVisibility, isTocLayerInfoItemInScale(layerInfo1))); } } + else if (_layerLegendInfos && _layerLegendInfos.length) + { + var layerLegendInfo:LayerLegendInfo = _layerLegendInfos[0]; + if (layerLegendInfo) + { + for each (var legendItemInfo:LegendItemInfo in layerLegendInfo.legendItemInfos) + { + addChild(new TocLegendItem(this, legendItemInfo)); + } + } + } } private function getActualVisibleLayers(layerIds:Array, layerInfos:Array):Array @@ -558,9 +624,37 @@ public class TocMapLayerItem extends TocItem } } } + else + { + var layerLegendInfo:LayerLegendInfo = getLayerLegendInfo(layerInfo.layerId); + if (layerLegendInfo) + { + for each (var legendItemInfo:LegendItemInfo in layerLegendInfo.legendItemInfos) + { + item.addChild(new TocLegendItem(item, legendItemInfo)); + } + } + } + return item; } + private function getLayerLegendInfo(layerId:Number):LayerLegendInfo + { + var result:LayerLegendInfo; + + for each (var layerLegendInfo:LayerLegendInfo in _layerLegendInfos) + { + if (Number(layerLegendInfo.layerId) == layerId) + { + result = layerLegendInfo; + break; + } + } + + return result; + } + private function createKmlFolderTocItem(parentItem:TocItem, folder:KMLFolder, folders:Array, layer:KMLLayer):TocKmlFolderItem { var item:TocKmlFolderItem = new TocKmlFolderItem(parentItem, folder, layer); diff --git a/src/widgets/LayerList/LayerListWidget.mxml b/src/widgets/LayerList/LayerListWidget.mxml index af81def..6e5a01a 100644 --- a/src/widgets/LayerList/LayerListWidget.mxml +++ b/src/widgets/LayerList/LayerListWidget.mxml @@ -31,6 +31,7 @@ [Bindable] private var title:String; + private var includeLegendItems:Boolean = true; // include legend items in the TOC private function basewidget_initializeHandler():void { @@ -54,6 +55,10 @@ title = configXML.labels.title || getDefaultString("layerListTitle"); // added in version 2.5 expandLayerItems = configXML.expandlayeritems == "true"; + if (configXML.includelegenditems.length()) + { + includeLegendItems = configXML.includelegenditems == "true"; + } } if (configData && configData.opLayers.length > 0) // do not initialize TOC if there are no operational layers @@ -69,6 +74,7 @@ toc.excludeLayers = getExcludeLayers(); toc.basemapLayers = getBasemapLayers(); toc.excludeGraphicsLayers = true; + toc.includeLegendItems = includeLegendItems; if (expandLayerItems) { toc.expandLayerItems(); diff --git a/src/widgets/MapSwitcher/MapSwitcherWidget.mxml b/src/widgets/MapSwitcher/MapSwitcherWidget.mxml index 9ff6b9c..279f241 100644 --- a/src/widgets/MapSwitcher/MapSwitcherWidget.mxml +++ b/src/widgets/MapSwitcher/MapSwitcherWidget.mxml @@ -40,6 +40,7 @@ private var hideSuspended:Boolean = false; private var expandLayerItems:Boolean; + private var includeLegendItems:Boolean = true; // include legend items in the TOC private var basemapSelectionComponent:ListBase; private var previousConfigBasemapsTotal:int; @@ -65,7 +66,11 @@ opLayerListButtonLabel = configXML.labels.layerlistlabel || getDefaultString("layerListLabel"); basemapsLabel = configXML.labels.basemapslabel || getDefaultString("basemap"); expandLayerItems = (configXML.expandlayeritems == "true"); - + if (configXML.includelegenditems.length()) + { + includeLegendItems = (configXML.includelegenditems == "true"); + } + var needToInitTOC:Boolean = (!configXML.layerlist.@visible[0] || configXML.layerlist.@visible[0] == "true"); if (needToInitTOC) { From d24120a6d1643363d7c20b451f1efe9bf8b0d6ba Mon Sep 17 00:00:00 2001 From: Sarthak Date: Wed, 23 Jan 2013 11:54:10 -0800 Subject: [PATCH 014/178] Show results from Search and Query widget in the Attribute Table Widget --- src/widgets/Query/QueryWidget.mxml | 1 + src/widgets/Search/SearchWidget.mxml | 1 + 2 files changed, 2 insertions(+) diff --git a/src/widgets/Query/QueryWidget.mxml b/src/widgets/Query/QueryWidget.mxml index 9d94bd8..d85c46d 100644 --- a/src/widgets/Query/QueryWidget.mxml +++ b/src/widgets/Query/QueryWidget.mxml @@ -245,6 +245,7 @@ queryLayer.url = layerURL; } resultFeatureLayer = new FeatureLayer(); + resultFeatureLayer.outFields = queryLayer.outFields; resultFeatureLayer.visible = false; resultFeatureLayer.isEditable = false; diff --git a/src/widgets/Search/SearchWidget.mxml b/src/widgets/Search/SearchWidget.mxml index 2f4b5c7..8b9b5b4 100644 --- a/src/widgets/Search/SearchWidget.mxml +++ b/src/widgets/Search/SearchWidget.mxml @@ -712,6 +712,7 @@ infoWindowRenderer.properties = { popUpInfo: configurePopUpInfo(resultAttributes)}; graphic.infoWindowRenderer = infoWindowRenderer; } + resultFeatureLayer.outFields = queryLayer.outFields; resultFeatureLayer.visible = true; resultFeatureLayer.featureCollection = new FeatureCollection(featureSet, layerDetails); switch (featureSet.geometryType) From d5836c758682d335b62520bb7f855d45ad014d9d Mon Sep 17 00:00:00 2001 From: Sarthak Date: Wed, 23 Jan 2013 12:03:45 -0800 Subject: [PATCH 015/178] Allow excluding layers within a map service from legend in the print widget --- src/widgets/Print/ExportWebMapForm.mxml | 30 +++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/widgets/Print/ExportWebMapForm.mxml b/src/widgets/Print/ExportWebMapForm.mxml index 5af0bdd..0220034 100644 --- a/src/widgets/Print/ExportWebMapForm.mxml +++ b/src/widgets/Print/ExportWebMapForm.mxml @@ -10,9 +10,12 @@ Date: Tue, 22 Jan 2013 11:07:24 -0800 Subject: [PATCH 016/178] Handle case where search result might not have result extent (e.g., FindResult) when validating geometry. --- .../viewer/components/singleLineSearch/SingleLineSearch.mxml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml b/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml index f9d26d7..5d68de5 100644 --- a/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml +++ b/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml @@ -649,8 +649,8 @@ { GeometryServiceSingleton.instance.showBusyCursor = previousShowBusyCursorValue; - if (hasValidGeometry(searchResult.geometry) - && hasValidGeometry(searchResult.extent)) + if (hasValidGeometry(searchResult.geometry) && !searchResult.extent || + hasValidGeometry(searchResult.geometry) && hasValidGeometry(searchResult.extent)) { showSearchResultOnMap(searchResult); } From 2df841af83f162ca8e70a16d1962336ec8f1adc0 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Tue, 22 Jan 2013 11:11:29 -0800 Subject: [PATCH 017/178] Improve geometry validation logic. --- .../singleLineSearch/SingleLineSearch.mxml | 94 +++++++++++-------- 1 file changed, 56 insertions(+), 38 deletions(-) diff --git a/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml b/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml index 5d68de5..d49b1ab 100644 --- a/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml +++ b/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml @@ -669,35 +669,38 @@ private function hasValidGeometry(geometry:Geometry):Boolean { - if (geometry.type == Geometry.MAPPOINT) - { - return isValidMapPoint(geometry as MapPoint); - } - else if (geometry.type == Geometry.MULTIPOINT) - { - return isValidMultiPoint(geometry as Multipoint); - } - else if (geometry.type == Geometry.EXTENT) - { - return isValidPolygon((geometry as Extent).toPolygon()); - } - else if (geometry.type == Geometry.POLYGON) - { - return isValidPolygon(geometry as Polygon); - } - else if (geometry.type == Geometry.POLYLINE) - { - return isValidPolyline(geometry as Polyline); - } - else + var isValid:Boolean; + + if (geometry) { - return false; + if (geometry.type == Geometry.MAPPOINT) + { + isValid = isValidMapPoint(geometry as MapPoint); + } + else if (geometry.type == Geometry.MULTIPOINT) + { + isValid = isValidMultiPoint(geometry as Multipoint); + } + else if (geometry.type == Geometry.EXTENT) + { + isValid = isValidPolygon((geometry as Extent).toPolygon()); + } + else if (geometry.type == Geometry.POLYGON) + { + isValid = isValidPolygon(geometry as Polygon); + } + else if (geometry.type == Geometry.POLYLINE) + { + isValid = isValidPolyline(geometry as Polyline); + } } + + return isValid; } private function isValidMapPoint(point:MapPoint):Boolean { - return !isNaN(point.x) && !isNaN(point.y); + return point && !isNaN(point.x) && !isNaN(point.y); } private function isValidMultiPoint(multiPoint:Multipoint):Boolean @@ -707,14 +710,19 @@ private function hasValidMapPoints(points:Array):Boolean { - var isValid:Boolean = true; + var isValid:Boolean; - for each (var point:MapPoint in points) + if (points && points.length > 0) { - if (!isValidMapPoint(point)) + isValid = true; + + for each (var point:MapPoint in points) { - isValid = false; - break; + if (!isValidMapPoint(point)) + { + isValid = false; + break; + } } } @@ -723,14 +731,19 @@ private function isValidPolyline(polyline:Polyline):Boolean { - var isValid:Boolean = true; + var isValid:Boolean; - for each (var path:Array in polyline.paths) + if (polyline && polyline.paths && polyline.paths.length > 0) { - if (!hasValidMapPoints(path)) + isValid = true; + + for each (var path:Array in polyline.paths) { - isValid = false; - break; + if (!hasValidMapPoints(path)) + { + isValid = false; + break; + } } } @@ -739,14 +752,19 @@ private function isValidPolygon(polygon:Polygon):Boolean { - var isValid:Boolean = true; + var isValid:Boolean; - for each (var ring:Array in polygon.rings) + if (polygon && polygon.rings && polygon.rings.length > 0) { - if (!hasValidMapPoints(ring)) + isValid = true; + + for each (var ring:Array in polygon.rings) { - isValid = false; - break; + if (!hasValidMapPoints(ring)) + { + isValid = false; + break; + } } } From 6c067c7a18c091b2a3eaedeff01f213e2575bc37 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Tue, 22 Jan 2013 11:26:13 -0800 Subject: [PATCH 018/178] Reorder geometry validation conditions to least-expensive first. --- .../viewer/components/singleLineSearch/SingleLineSearch.mxml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml b/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml index d49b1ab..2b421d1 100644 --- a/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml +++ b/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml @@ -649,7 +649,7 @@ { GeometryServiceSingleton.instance.showBusyCursor = previousShowBusyCursorValue; - if (hasValidGeometry(searchResult.geometry) && !searchResult.extent || + if (!searchResult.extent && hasValidGeometry(searchResult.geometry) || hasValidGeometry(searchResult.geometry) && hasValidGeometry(searchResult.extent)) { showSearchResultOnMap(searchResult); From 7d0c76e2f2e835be3524335b4d8554d77b9f897f Mon Sep 17 00:00:00 2001 From: jcfranco Date: Thu, 24 Jan 2013 12:29:29 -0800 Subject: [PATCH 019/178] Improve readability of geometry validation conditions. --- .../components/singleLineSearch/SingleLineSearch.mxml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml b/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml index 2b421d1..15fc10b 100644 --- a/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml +++ b/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml @@ -649,8 +649,11 @@ { GeometryServiceSingleton.instance.showBusyCursor = previousShowBusyCursorValue; - if (!searchResult.extent && hasValidGeometry(searchResult.geometry) || - hasValidGeometry(searchResult.geometry) && hasValidGeometry(searchResult.extent)) + var resultHasValidGeometry:Boolean = hasValidGeometry(searchResult.geometry); + var resultHasExtentAndIsValid:Boolean = searchResult.extent && hasValidGeometry(searchResult.extent); + + if (resultHasExtentAndIsValid && resultHasValidGeometry + || resultHasValidGeometry) { showSearchResultOnMap(searchResult); } From 16ff057f061e5bf399acc15bf6ac28d24aa56008 Mon Sep 17 00:00:00 2001 From: Dasa Paddock Date: Wed, 16 Jan 2013 17:22:20 -0800 Subject: [PATCH 020/178] clean whitespace --- .actionScriptProperties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.actionScriptProperties b/.actionScriptProperties index eb43d28..e9b93ed 100644 --- a/.actionScriptProperties +++ b/.actionScriptProperties @@ -17,7 +17,7 @@ - + From e98eb3f79606ebc8215a1866b489c7bec80ac0f9 Mon Sep 17 00:00:00 2001 From: Dasa Paddock Date: Wed, 16 Jan 2013 17:23:07 -0800 Subject: [PATCH 021/178] Remove extra license file --- src/license.txt | 107 ------------------------------------------------ 1 file changed, 107 deletions(-) delete mode 100644 src/license.txt diff --git a/src/license.txt b/src/license.txt deleted file mode 100644 index b902cc4..0000000 --- a/src/license.txt +++ /dev/null @@ -1,107 +0,0 @@ -Copyright (c) 2010 Esri. All Rights Reserved. - -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control -with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management -of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial -ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, -and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to -compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice -that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the -editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes -of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, -the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work -or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual -or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of -electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on -electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for -the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing -by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and -subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, -worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, -publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, -non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, -sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are -necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was - submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You - under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, - and in Source or Object form, provided that You meet the following conditions: - - 1. You must give any other recipients of the Work or Derivative Works a copy of this License; and - - 2. You must cause any modified files to carry prominent notices stating that You changed the files; and - - 3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices - from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - - 4. If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a - readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the - Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the - Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever - such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. - You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, - provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to - Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your - modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You -to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, -nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except -as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides -its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, -any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for -determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under -this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required - by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, -including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the -use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or -any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a -fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting -such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree -to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your - accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS \ No newline at end of file From e940f81e11248a512ac170c4a68a64466868387f Mon Sep 17 00:00:00 2001 From: Dasa Paddock Date: Wed, 16 Jan 2013 17:23:45 -0800 Subject: [PATCH 022/178] remove src/apps folder --- src/apps/ar/HeaderControllerWidget.xml | 25 ------------ src/apps/ar/config.xml | 46 ----------------------- src/apps/de_DE/BookmarkWidget.xml | 16 -------- src/apps/de_DE/HeaderControllerWidget.xml | 25 ------------ src/apps/de_DE/config.xml | 45 ---------------------- src/apps/es_ES/BookmarkWidget.xml | 16 -------- src/apps/es_ES/HeaderControllerWidget.xml | 25 ------------ src/apps/es_ES/config.xml | 45 ---------------------- src/apps/fr_FR/BookmarkWidget.xml | 16 -------- src/apps/fr_FR/HeaderControllerWidget.xml | 25 ------------ src/apps/fr_FR/config.xml | 45 ---------------------- src/apps/it_IT/HeaderControllerWidget.xml | 25 ------------ src/apps/it_IT/config.xml | 45 ---------------------- src/apps/ja_JP/BookmarkWidget.xml | 16 -------- src/apps/ja_JP/CoordinateWidget.xml | 10 ----- src/apps/ja_JP/HeaderControllerWidget.xml | 25 ------------ src/apps/ja_JP/config.xml | 46 ----------------------- src/apps/ko_KR/BookmarkWidget.xml | 17 --------- src/apps/ko_KR/CoordinateWidget.xml | 10 ----- src/apps/ko_KR/HeaderControllerWidget.xml | 25 ------------ src/apps/ko_KR/config.xml | 45 ---------------------- src/apps/nb_NO/BookmarkWidget.xml | 17 --------- src/apps/nb_NO/HeaderControllerWidget.xml | 25 ------------ src/apps/nb_NO/config.xml | 45 ---------------------- src/apps/nl_NL/BookmarkWidget.xml | 17 --------- src/apps/nl_NL/HeaderControllerWidget.xml | 25 ------------ src/apps/nl_NL/config.xml | 45 ---------------------- src/apps/pl_PL/BookmarkWidget.xml | 17 --------- src/apps/pl_PL/HeaderControllerWidget.xml | 25 ------------ src/apps/pl_PL/config.xml | 45 ---------------------- src/apps/pt_BR/HeaderControllerWidget.xml | 25 ------------ src/apps/pt_BR/config.xml | 45 ---------------------- src/apps/ro_RO/BookmarkWidget.xml | 17 --------- src/apps/ro_RO/HeaderControllerWidget.xml | 25 ------------ src/apps/ro_RO/config.xml | 45 ---------------------- src/apps/ru_RU/HeaderControllerWidget.xml | 25 ------------ src/apps/ru_RU/config.xml | 45 ---------------------- src/apps/sv_SE/BookmarkWidget.xml | 17 --------- src/apps/sv_SE/DrawWidget.xml | 17 --------- src/apps/sv_SE/HeaderControllerWidget.xml | 25 ------------ src/apps/sv_SE/config.xml | 45 ---------------------- src/apps/zh_CN/BookmarkWidget.xml | 16 -------- src/apps/zh_CN/CoordinateWidget.xml | 10 ----- src/apps/zh_CN/HeaderControllerWidget.xml | 25 ------------ src/apps/zh_CN/config.xml | 46 ----------------------- 45 files changed, 1282 deletions(-) delete mode 100644 src/apps/ar/HeaderControllerWidget.xml delete mode 100644 src/apps/ar/config.xml delete mode 100644 src/apps/de_DE/BookmarkWidget.xml delete mode 100644 src/apps/de_DE/HeaderControllerWidget.xml delete mode 100644 src/apps/de_DE/config.xml delete mode 100644 src/apps/es_ES/BookmarkWidget.xml delete mode 100644 src/apps/es_ES/HeaderControllerWidget.xml delete mode 100644 src/apps/es_ES/config.xml delete mode 100644 src/apps/fr_FR/BookmarkWidget.xml delete mode 100644 src/apps/fr_FR/HeaderControllerWidget.xml delete mode 100644 src/apps/fr_FR/config.xml delete mode 100644 src/apps/it_IT/HeaderControllerWidget.xml delete mode 100644 src/apps/it_IT/config.xml delete mode 100644 src/apps/ja_JP/BookmarkWidget.xml delete mode 100644 src/apps/ja_JP/CoordinateWidget.xml delete mode 100644 src/apps/ja_JP/HeaderControllerWidget.xml delete mode 100644 src/apps/ja_JP/config.xml delete mode 100644 src/apps/ko_KR/BookmarkWidget.xml delete mode 100644 src/apps/ko_KR/CoordinateWidget.xml delete mode 100644 src/apps/ko_KR/HeaderControllerWidget.xml delete mode 100644 src/apps/ko_KR/config.xml delete mode 100644 src/apps/nb_NO/BookmarkWidget.xml delete mode 100644 src/apps/nb_NO/HeaderControllerWidget.xml delete mode 100644 src/apps/nb_NO/config.xml delete mode 100644 src/apps/nl_NL/BookmarkWidget.xml delete mode 100644 src/apps/nl_NL/HeaderControllerWidget.xml delete mode 100644 src/apps/nl_NL/config.xml delete mode 100644 src/apps/pl_PL/BookmarkWidget.xml delete mode 100644 src/apps/pl_PL/HeaderControllerWidget.xml delete mode 100644 src/apps/pl_PL/config.xml delete mode 100644 src/apps/pt_BR/HeaderControllerWidget.xml delete mode 100644 src/apps/pt_BR/config.xml delete mode 100644 src/apps/ro_RO/BookmarkWidget.xml delete mode 100644 src/apps/ro_RO/HeaderControllerWidget.xml delete mode 100644 src/apps/ro_RO/config.xml delete mode 100644 src/apps/ru_RU/HeaderControllerWidget.xml delete mode 100644 src/apps/ru_RU/config.xml delete mode 100644 src/apps/sv_SE/BookmarkWidget.xml delete mode 100644 src/apps/sv_SE/DrawWidget.xml delete mode 100644 src/apps/sv_SE/HeaderControllerWidget.xml delete mode 100644 src/apps/sv_SE/config.xml delete mode 100644 src/apps/zh_CN/BookmarkWidget.xml delete mode 100644 src/apps/zh_CN/CoordinateWidget.xml delete mode 100644 src/apps/zh_CN/HeaderControllerWidget.xml delete mode 100644 src/apps/zh_CN/config.xml diff --git a/src/apps/ar/HeaderControllerWidget.xml b/src/apps/ar/HeaderControllerWidget.xml deleted file mode 100644 index 80bcf24..0000000 --- a/src/apps/ar/HeaderControllerWidget.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer - - - - - - - -
    - ArcGIS Viewer for Flex -

    - ]]> -
    - -
    -
    - \ No newline at end of file diff --git a/src/apps/ar/config.xml b/src/apps/ar/config.xml deleted file mode 100644 index 74ee333..0000000 --- a/src/apps/ar/config.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - ArcGIS Viewer for Flex - rtl - assets/images/logo.png - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/apps/de_DE/BookmarkWidget.xml b/src/apps/de_DE/BookmarkWidget.xml deleted file mode 100644 index 006dc52..0000000 --- a/src/apps/de_DE/BookmarkWidget.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - -13934000 2699500 -8034300 6710900 - -13638000 4541000 -13632000 4551000 - -9559973 4601704 -9529513 4621654 - -13211400 3993400 -13119200 4056100 - 13917200 3452300 16908700 5477600 - -1039800 4665500 -993700 4696800 - -8732266 -8111526 -6810170 -1859588 - - - diff --git a/src/apps/de_DE/HeaderControllerWidget.xml b/src/apps/de_DE/HeaderControllerWidget.xml deleted file mode 100644 index d9d2bc3..0000000 --- a/src/apps/de_DE/HeaderControllerWidget.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer - - - - - - - -
    - ArcGIS Viewer for Flex -

    - ]]> -
    - -
    -
    - \ No newline at end of file diff --git a/src/apps/de_DE/config.xml b/src/apps/de_DE/config.xml deleted file mode 100644 index 081800a..0000000 --- a/src/apps/de_DE/config.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - ArcGIS Viewer for Flex - assets/images/logo.png - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/apps/es_ES/BookmarkWidget.xml b/src/apps/es_ES/BookmarkWidget.xml deleted file mode 100644 index 80eeb33..0000000 --- a/src/apps/es_ES/BookmarkWidget.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - -13934000 2699500 -8034300 6710900 - -13638000 4541000 -13632000 4551000 - -9559973 4601704 -9529513 4621654 - -13211400 3993400 -13119200 4056100 - 13917200 3452300 16908700 5477600 - -1039800 4665500 -993700 4696800 - -8732266 -8111526 -6810170 -1859588 - - - diff --git a/src/apps/es_ES/HeaderControllerWidget.xml b/src/apps/es_ES/HeaderControllerWidget.xml deleted file mode 100644 index 845c4ff..0000000 --- a/src/apps/es_ES/HeaderControllerWidget.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer - - - - - - - -
    - ArcGIS Viewer for Flex -

    - ]]> -
    - -
    -
    - \ No newline at end of file diff --git a/src/apps/es_ES/config.xml b/src/apps/es_ES/config.xml deleted file mode 100644 index 003fa04..0000000 --- a/src/apps/es_ES/config.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - ArcGIS Viewer for Flex - assets/images/logo.png - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/apps/fr_FR/BookmarkWidget.xml b/src/apps/fr_FR/BookmarkWidget.xml deleted file mode 100644 index 6267eaf..0000000 --- a/src/apps/fr_FR/BookmarkWidget.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - -13934000 2699500 -8034300 6710900 - -13638000 4541000 -13632000 4551000 - -9559973 4601704 -9529513 4621654 - -13211400 3993400 -13119200 4056100 - 13917200 3452300 16908700 5477600 - -1039800 4665500 -993700 4696800 - -8732266 -8111526 -6810170 -1859588 - - - diff --git a/src/apps/fr_FR/HeaderControllerWidget.xml b/src/apps/fr_FR/HeaderControllerWidget.xml deleted file mode 100644 index 13baebe..0000000 --- a/src/apps/fr_FR/HeaderControllerWidget.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer - - - - - - - -
    - ArcGIS Viewer for Flex -

    - ]]> -
    - -
    -
    - \ No newline at end of file diff --git a/src/apps/fr_FR/config.xml b/src/apps/fr_FR/config.xml deleted file mode 100644 index db6a338..0000000 --- a/src/apps/fr_FR/config.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - ArcGIS Viewer for Flex - assets/images/logo.png - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/apps/it_IT/HeaderControllerWidget.xml b/src/apps/it_IT/HeaderControllerWidget.xml deleted file mode 100644 index 70711e0..0000000 --- a/src/apps/it_IT/HeaderControllerWidget.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer - - - - - - - -
    - ArcGIS Viewer for Flex -

    - ]]> -
    - -
    -
    - \ No newline at end of file diff --git a/src/apps/it_IT/config.xml b/src/apps/it_IT/config.xml deleted file mode 100644 index 698b724..0000000 --- a/src/apps/it_IT/config.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - ArcGIS Viewer for Flex - assets/images/logo.png - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/apps/ja_JP/BookmarkWidget.xml b/src/apps/ja_JP/BookmarkWidget.xml deleted file mode 100644 index 6f287ae..0000000 --- a/src/apps/ja_JP/BookmarkWidget.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - -13934000 2699500 -8034300 6710900 - -13638000 4541000 -13632000 4551000 - -9559973 4601704 -9529513 4621654 - -13211400 3993400 -13119200 4056100 - 13917200 3452300 16908700 5477600 - -1039800 4665500 -993700 4696800 - -8732266 -8111526 -6810170 -1859588 - - - diff --git a/src/apps/ja_JP/CoordinateWidget.xml b/src/apps/ja_JP/CoordinateWidget.xml deleted file mode 100644 index 9c511d6..0000000 --- a/src/apps/ja_JP/CoordinateWidget.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - geo - - diff --git a/src/apps/ja_JP/HeaderControllerWidget.xml b/src/apps/ja_JP/HeaderControllerWidget.xml deleted file mode 100644 index 815b117..0000000 --- a/src/apps/ja_JP/HeaderControllerWidget.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer - - - - - - - -
    - ArcGIS Viewer for Flex -

    - ]]> -
    - -
    -
    - \ No newline at end of file diff --git a/src/apps/ja_JP/config.xml b/src/apps/ja_JP/config.xml deleted file mode 100644 index 4355847..0000000 --- a/src/apps/ja_JP/config.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - ArcGIS Viewer for Flex - assets/images/logo.png - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/apps/ko_KR/BookmarkWidget.xml b/src/apps/ko_KR/BookmarkWidget.xml deleted file mode 100644 index c52ac41..0000000 --- a/src/apps/ko_KR/BookmarkWidget.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - -13934000 2699500 -8034300 6710900 - -13638000 4541000 -13632000 4551000 - -9559973 4601704 -9529513 4621654 - -13211400 3993400 -13119200 4056100 - 13917200 3452300 16908700 5477600 - -1039800 4665500 -993700 4696800 - -8732266 -8111526 -6810170 -1859588 - - - - diff --git a/src/apps/ko_KR/CoordinateWidget.xml b/src/apps/ko_KR/CoordinateWidget.xml deleted file mode 100644 index 9c511d6..0000000 --- a/src/apps/ko_KR/CoordinateWidget.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - geo - - diff --git a/src/apps/ko_KR/HeaderControllerWidget.xml b/src/apps/ko_KR/HeaderControllerWidget.xml deleted file mode 100644 index 58c954c..0000000 --- a/src/apps/ko_KR/HeaderControllerWidget.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer - - - - - - - -
    - ArcGIS Viewer for Flex -

    - ]]> -
    - -
    -
    - \ No newline at end of file diff --git a/src/apps/ko_KR/config.xml b/src/apps/ko_KR/config.xml deleted file mode 100644 index 4ad6090..0000000 --- a/src/apps/ko_KR/config.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - ArcGIS Viewer for Flex - assets/images/logo.png - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/apps/nb_NO/BookmarkWidget.xml b/src/apps/nb_NO/BookmarkWidget.xml deleted file mode 100644 index c52ac41..0000000 --- a/src/apps/nb_NO/BookmarkWidget.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - -13934000 2699500 -8034300 6710900 - -13638000 4541000 -13632000 4551000 - -9559973 4601704 -9529513 4621654 - -13211400 3993400 -13119200 4056100 - 13917200 3452300 16908700 5477600 - -1039800 4665500 -993700 4696800 - -8732266 -8111526 -6810170 -1859588 - - - - diff --git a/src/apps/nb_NO/HeaderControllerWidget.xml b/src/apps/nb_NO/HeaderControllerWidget.xml deleted file mode 100644 index 892d2bf..0000000 --- a/src/apps/nb_NO/HeaderControllerWidget.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer - - - - - - - -
    - ArcGIS Viewer for Flex -

    - ]]> -
    - -
    -
    - \ No newline at end of file diff --git a/src/apps/nb_NO/config.xml b/src/apps/nb_NO/config.xml deleted file mode 100644 index fa9eed3..0000000 --- a/src/apps/nb_NO/config.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - ArcGIS Viewer for Flex - assets/images/logo.png - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/apps/nl_NL/BookmarkWidget.xml b/src/apps/nl_NL/BookmarkWidget.xml deleted file mode 100644 index c52ac41..0000000 --- a/src/apps/nl_NL/BookmarkWidget.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - -13934000 2699500 -8034300 6710900 - -13638000 4541000 -13632000 4551000 - -9559973 4601704 -9529513 4621654 - -13211400 3993400 -13119200 4056100 - 13917200 3452300 16908700 5477600 - -1039800 4665500 -993700 4696800 - -8732266 -8111526 -6810170 -1859588 - - - - diff --git a/src/apps/nl_NL/HeaderControllerWidget.xml b/src/apps/nl_NL/HeaderControllerWidget.xml deleted file mode 100644 index f587b7f..0000000 --- a/src/apps/nl_NL/HeaderControllerWidget.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer - - - - - - - -
    - ArcGIS Viewer for Flex -

    - ]]> -
    - -
    -
    - \ No newline at end of file diff --git a/src/apps/nl_NL/config.xml b/src/apps/nl_NL/config.xml deleted file mode 100644 index 87b342f..0000000 --- a/src/apps/nl_NL/config.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - ArcGIS Viewer for Flex - assets/images/logo.png - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/apps/pl_PL/BookmarkWidget.xml b/src/apps/pl_PL/BookmarkWidget.xml deleted file mode 100644 index c52ac41..0000000 --- a/src/apps/pl_PL/BookmarkWidget.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - -13934000 2699500 -8034300 6710900 - -13638000 4541000 -13632000 4551000 - -9559973 4601704 -9529513 4621654 - -13211400 3993400 -13119200 4056100 - 13917200 3452300 16908700 5477600 - -1039800 4665500 -993700 4696800 - -8732266 -8111526 -6810170 -1859588 - - - - diff --git a/src/apps/pl_PL/HeaderControllerWidget.xml b/src/apps/pl_PL/HeaderControllerWidget.xml deleted file mode 100644 index 2d3443d..0000000 --- a/src/apps/pl_PL/HeaderControllerWidget.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer - - - - - - - -
    - ArcGIS Viewer for Flex -

    - ]]> -
    - -
    -
    - \ No newline at end of file diff --git a/src/apps/pl_PL/config.xml b/src/apps/pl_PL/config.xml deleted file mode 100644 index 5dda8ee..0000000 --- a/src/apps/pl_PL/config.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - ArcGIS Viewer for Flex - assets/images/logo.png - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/apps/pt_BR/HeaderControllerWidget.xml b/src/apps/pt_BR/HeaderControllerWidget.xml deleted file mode 100644 index 7adc2cc..0000000 --- a/src/apps/pt_BR/HeaderControllerWidget.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer - - - - - - - -
    - ArcGIS Viewer for Flex -

    - ]]> -
    - -
    -
    - \ No newline at end of file diff --git a/src/apps/pt_BR/config.xml b/src/apps/pt_BR/config.xml deleted file mode 100644 index 4c0bf61..0000000 --- a/src/apps/pt_BR/config.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - ArcGIS Viewer for Flex - assets/images/logo.png - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/apps/ro_RO/BookmarkWidget.xml b/src/apps/ro_RO/BookmarkWidget.xml deleted file mode 100644 index c52ac41..0000000 --- a/src/apps/ro_RO/BookmarkWidget.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - -13934000 2699500 -8034300 6710900 - -13638000 4541000 -13632000 4551000 - -9559973 4601704 -9529513 4621654 - -13211400 3993400 -13119200 4056100 - 13917200 3452300 16908700 5477600 - -1039800 4665500 -993700 4696800 - -8732266 -8111526 -6810170 -1859588 - - - - diff --git a/src/apps/ro_RO/HeaderControllerWidget.xml b/src/apps/ro_RO/HeaderControllerWidget.xml deleted file mode 100644 index 8514dc7..0000000 --- a/src/apps/ro_RO/HeaderControllerWidget.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer - - - - - - - -
    - ArcGIS Viewer for Flex -

    - ]]> -
    - -
    -
    - \ No newline at end of file diff --git a/src/apps/ro_RO/config.xml b/src/apps/ro_RO/config.xml deleted file mode 100644 index 0a1d822..0000000 --- a/src/apps/ro_RO/config.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - ArcGIS Viewer for Flex - assets/images/logo.png - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/apps/ru_RU/HeaderControllerWidget.xml b/src/apps/ru_RU/HeaderControllerWidget.xml deleted file mode 100644 index 6ec4cfe..0000000 --- a/src/apps/ru_RU/HeaderControllerWidget.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer - - - - - - - -
    - ArcGIS Viewer for Flex -

    - ]]> -
    - -
    -
    - \ No newline at end of file diff --git a/src/apps/ru_RU/config.xml b/src/apps/ru_RU/config.xml deleted file mode 100644 index 9f0bcc0..0000000 --- a/src/apps/ru_RU/config.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - ArcGIS Viewer for Flex - assets/images/logo.png - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/apps/sv_SE/BookmarkWidget.xml b/src/apps/sv_SE/BookmarkWidget.xml deleted file mode 100644 index c52ac41..0000000 --- a/src/apps/sv_SE/BookmarkWidget.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - -13934000 2699500 -8034300 6710900 - -13638000 4541000 -13632000 4551000 - -9559973 4601704 -9529513 4621654 - -13211400 3993400 -13119200 4056100 - 13917200 3452300 16908700 5477600 - -1039800 4665500 -993700 4696800 - -8732266 -8111526 -6810170 -1859588 - - - - diff --git a/src/apps/sv_SE/DrawWidget.xml b/src/apps/sv_SE/DrawWidget.xml deleted file mode 100644 index ad87430..0000000 --- a/src/apps/sv_SE/DrawWidget.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - diff --git a/src/apps/sv_SE/HeaderControllerWidget.xml b/src/apps/sv_SE/HeaderControllerWidget.xml deleted file mode 100644 index 892d2bf..0000000 --- a/src/apps/sv_SE/HeaderControllerWidget.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer - - - - - - - -
    - ArcGIS Viewer for Flex -

    - ]]> -
    - -
    -
    - \ No newline at end of file diff --git a/src/apps/sv_SE/config.xml b/src/apps/sv_SE/config.xml deleted file mode 100644 index e45b0ac..0000000 --- a/src/apps/sv_SE/config.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - ArcGIS Viewer for Flex - assets/images/logo.png - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/apps/zh_CN/BookmarkWidget.xml b/src/apps/zh_CN/BookmarkWidget.xml deleted file mode 100644 index b77643c..0000000 --- a/src/apps/zh_CN/BookmarkWidget.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - -13934000 2699500 -8034300 6710900 - -13638000 4541000 -13632000 4551000 - -9559973 4601704 -9529513 4621654 - -13211400 3993400 -13119200 4056100 - 13917200 3452300 16908700 5477600 - -1039800 4665500 -993700 4696800 - -8732266 -8111526 -6810170 -1859588 - - - diff --git a/src/apps/zh_CN/CoordinateWidget.xml b/src/apps/zh_CN/CoordinateWidget.xml deleted file mode 100644 index 9c511d6..0000000 --- a/src/apps/zh_CN/CoordinateWidget.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - geo - - diff --git a/src/apps/zh_CN/HeaderControllerWidget.xml b/src/apps/zh_CN/HeaderControllerWidget.xml deleted file mode 100644 index 8fb0cb1..0000000 --- a/src/apps/zh_CN/HeaderControllerWidget.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer - - - - - - - -
    - ArcGIS Viewer for Flex -

    - ]]> -
    - -
    -
    - \ No newline at end of file diff --git a/src/apps/zh_CN/config.xml b/src/apps/zh_CN/config.xml deleted file mode 100644 index 3bf4230..0000000 --- a/src/apps/zh_CN/config.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - ArcGIS Viewer for Flex - assets/images/logo.png - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From bcd021964a1821e70e72820fd5676fe8b3502764 Mon Sep 17 00:00:00 2001 From: Dasa Paddock Date: Thu, 24 Jan 2013 15:12:06 -0800 Subject: [PATCH 023/178] Removed build date from "aboutText". --- locale/en_US/ViewerStrings.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/locale/en_US/ViewerStrings.properties b/locale/en_US/ViewerStrings.properties index c11b425..51fdb2d 100644 --- a/locale/en_US/ViewerStrings.properties +++ b/locale/en_US/ViewerStrings.properties @@ -1,7 +1,7 @@ # -- UI related messages for the context menu on the map, in addition to messages from the api -- # contextMenuText=About ArcGIS Viewer for Flex... -aboutText=This application is using ArcGIS Viewer for Flex version 3.1.\nBuild date 2012-12-12. +aboutText=This application is using ArcGIS Viewer for Flex version 3.1. aboutLearnMoreBtn=Learn more aboutCloseBtn=Close From cdf77a2c06cc37f86fef52f42c2fd8cf5651bea7 Mon Sep 17 00:00:00 2001 From: Dasa Paddock Date: Thu, 24 Jan 2013 17:22:25 -0800 Subject: [PATCH 024/178] Change "-locale en_US" to "-locale=en_US" to be consistent. --- .actionScriptProperties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.actionScriptProperties b/.actionScriptProperties index e9b93ed..7a6136a 100644 --- a/.actionScriptProperties +++ b/.actionScriptProperties @@ -1,6 +1,6 @@ - + From c6587813a1efe6bef8233f003c750406e230594b Mon Sep 17 00:00:00 2001 From: Dasa Paddock Date: Thu, 24 Jan 2013 17:28:16 -0800 Subject: [PATCH 025/178] Add ant build files --- .gitignore | 11 ++ build.properties | 12 ++ build.xml | 229 ++++++++++++++++++++++++++++++++++++++ env-template.properties | 36 ++++++ fbbuild.bat | 7 ++ fbbuild.sh | 9 ++ fbbuild.xml | 15 +++ local-template.properties | 32 ++++++ 8 files changed, 351 insertions(+) create mode 100644 .gitignore create mode 100644 build.properties create mode 100644 build.xml create mode 100644 env-template.properties create mode 100644 fbbuild.bat create mode 100755 fbbuild.sh create mode 100644 fbbuild.xml create mode 100644 local-template.properties diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f1a697f --- /dev/null +++ b/.gitignore @@ -0,0 +1,11 @@ +# Ant build files +env.properties +local.properties + +# Build and Release Folders +bin-debug/ +bin-release/ +dist/ + +# Other files +*.swc diff --git a/build.properties b/build.properties new file mode 100644 index 0000000..7eef2e8 --- /dev/null +++ b/build.properties @@ -0,0 +1,12 @@ +# The distribution directory +dist.dir=dist + +# Flash Builder's locale compiler vaule +# For example, -locale=en_US +fb.locale=en_US + +# Flash Builder's debug directory +fb.debug.dir=bin-debug + +# The name of the Flex Viewer project in the workspace set in local.properties +fb.workspace.project.name=FlexViewer diff --git a/build.xml b/build.xml new file mode 100644 index 0000000..b92a4b5 --- /dev/null +++ b/build.xml @@ -0,0 +1,229 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/env-template.properties b/env-template.properties new file mode 100644 index 0000000..526eae4 --- /dev/null +++ b/env-template.properties @@ -0,0 +1,36 @@ +# If you chose to use this file, copy it to env.properties and uncomment the +# properties you wish to set. + +# For each of +# +# FLEX_HOME +# +# you need to set an environment variable with that name or set the property here +# prefixed with "env.". If a property is set in this file, and the corresponding +# environment variable is also set, the property set here takes precedence over the +# corresponding environment variable. +# +# Use absolute file paths. +# +# This is a Java property file. On Windows, you can use the '/' file separator, +# or if you use the '\' file separator, you must use "\\", but not escape spaces, for example, +# +# env.FLEX_HOME=C:\\Program Files (x86)\\Adobe\\Adobe Flash Builder 4.6\\sdks\\4.6.0 + +# +# Set this to the directory that contains the Adobe Flex SDK +# for your platform. +# +# On Windows (32-bit), if installed to the default location, the setting would be +# env.FLEX_HOME=C:\\Program Files\\Adobe\\Adobe Flash Builder 4.6\\sdks\\4.6.0 +# +# or on a 64-bit version of Windows +# env.FLEX_HOME=C:\\Program Files (x86)\\Adobe\\Adobe Flash Builder 4.6\\sdks\\4.6.0 +# +# Note: the folder "Program Files" (or "Program Files (x86)") might have a different name +# depending on the language of your Windows installation. +# +# On Mac, if installed to the default location, the setting would be +# env.FLEX_HOME=/Applications/Adobe Flash Builder 4.6/sdks/4.6.0 +# +#env.FLEX_HOME= diff --git a/fbbuild.bat b/fbbuild.bat new file mode 100644 index 0000000..9b63fc7 --- /dev/null +++ b/fbbuild.bat @@ -0,0 +1,7 @@ +REM works with either FlashBuilderC.exe or eclipsec.exe +"%FB_PATH%" ^ + --launcher.suppressErrors ^ + -noSplash ^ + -application org.eclipse.ant.core.antRunner ^ + -data "%WORKSPACE%" ^ + -file "%cd%\fbbuild.xml" main diff --git a/fbbuild.sh b/fbbuild.sh new file mode 100755 index 0000000..b45baab --- /dev/null +++ b/fbbuild.sh @@ -0,0 +1,9 @@ +#!/bin/sh -e + +# works with either FlashBuilder.app or Eclipse.app +"$FB_PATH" \ + --launcher.suppressErrors \ + -noSplash \ + -application org.eclipse.ant.core.antRunner \ + -data "$WORKSPACE" \ + -file "$(pwd)/fbbuild.xml" main diff --git a/fbbuild.xml b/fbbuild.xml new file mode 100644 index 0000000..a234391 --- /dev/null +++ b/fbbuild.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + diff --git a/local-template.properties b/local-template.properties new file mode 100644 index 0000000..5a3d119 --- /dev/null +++ b/local-template.properties @@ -0,0 +1,32 @@ +# Save a copy of this as local.properties and set the properties below. + +# You may also override any build.properties here since this takes precedence +# over the corresponding property in build.properties. +# +# Use absolute file paths. +# +# This is a Java property file. On Windows, you can use the '/' file separator, +# or if you use the '\' file separator, you must use "\\", but not escape spaces. + +# +# The path to the Flash Builder executable. +# +# Mac OS X example +# fb.path=/Applications/Adobe Flash Builder 4.6/Adobe Flash Builder 4.6.app/Contents/MacOS/Adobe Flash Builder 4.6 +# +# Windows example +# fb.path=C:/Program Files/Adobe/Adobe Flash Builder 4.6/FlashBuilderC.exe +# +#fb.path= + +# +# The path to the Flash Builder workspace where the Flex Viewer project is. +# +# Mac OS X example +# fb.workspace.path=/Users/jack/Documents/Adobe Flash Builder 4.6 +# +# Windows examples +# fb.workspace.path=C:/Users/jack/Adobe Flash Builder 4.6 +# fb.workspace.path=C:/Documents and Settings/jack/Adobe Flash Builder 4.6 +# +#fb.workspace.path= From 72ea883ca1dac8a1c7375e7aad37fd21e9cdf61f Mon Sep 17 00:00:00 2001 From: Dasa Paddock Date: Fri, 25 Jan 2013 09:03:01 -0800 Subject: [PATCH 026/178] Change "builddate" to a token. --- src/version.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/version.xml b/src/version.xml index ecf7e00..5d84655 100644 --- a/src/version.xml +++ b/src/version.xml @@ -1,2 +1,2 @@ - - + + From b9cca539251cf1c854df42a54b7d45b6e54205ea Mon Sep 17 00:00:00 2001 From: Dasa Paddock Date: Fri, 25 Jan 2013 09:04:27 -0800 Subject: [PATCH 027/178] Fix typo in "copy-version.xml" target name. --- build.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.xml b/build.xml index b92a4b5..d099173 100644 --- a/build.xml +++ b/build.xml @@ -28,7 +28,7 @@ description="Runs Flash Builder"/> @@ -213,7 +213,7 @@ - + From 335fc43017724b18e76793cf5db5e094c76f33a3 Mon Sep 17 00:00:00 2001 From: Dasa Paddock Date: Sat, 26 Jan 2013 13:14:02 -0800 Subject: [PATCH 028/178] format --- src/widgets/MapSwitcher/MapSwitcherWidget.mxml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/widgets/MapSwitcher/MapSwitcherWidget.mxml b/src/widgets/MapSwitcher/MapSwitcherWidget.mxml index 279f241..e981995 100644 --- a/src/widgets/MapSwitcher/MapSwitcherWidget.mxml +++ b/src/widgets/MapSwitcher/MapSwitcherWidget.mxml @@ -70,7 +70,7 @@ { includeLegendItems = (configXML.includelegenditems == "true"); } - + var needToInitTOC:Boolean = (!configXML.layerlist.@visible[0] || configXML.layerlist.@visible[0] == "true"); if (needToInitTOC) { From 2d8c9349435d2d05b0354e1244928e2b61daab13 Mon Sep 17 00:00:00 2001 From: Dasa Paddock Date: Sat, 26 Jan 2013 13:14:57 -0800 Subject: [PATCH 029/178] Add Flex Formatter properties file --- FlexFormatter.properties | 201 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 201 insertions(+) create mode 100644 FlexFormatter.properties diff --git a/FlexFormatter.properties b/FlexFormatter.properties new file mode 100644 index 0000000..1f32f96 --- /dev/null +++ b/FlexFormatter.properties @@ -0,0 +1,201 @@ +#FlexPrettyPrintSettings +#Mon Nov 19 11:04:32 PST 2012 +ActionScript.metatagsOnSameLineAsTargetFunction=Bindable +Actionscript.advancedSpacesInsideParensInParameterLists=0 +MXML.keepRelativeIndentInMultilineComments=true +MXML.attrsPerLine=1 +MXML.blankLinesBeforeTags=0 +ASRearr_GroupGettersAndSettersWithStaticProperties=false +Actionscript.keepBlankLines=true +MXML.tagsDoNotFormatInside=.*\:Model,.*\:XML, +Actionscript.blankLinesAtFunctionEnd=0 +ASRearr_RemoveExistingCopyrightHeaders=false +ASRearr_ElementSortNamespaces=true +Actionscript.advancedCRBeforeBraceSettings=2047 +ASRearr_SortGettersAndSettersWithAssociatedProperties=true +Actionscript.DocCommentKeepBlankLines=true +Actionscript.useGlobalSpacesAroundColons=true +Actionscript.newLineBeforeBindableFunction=true +ASRearr_UseElementPropertyVisibilityOrder=true +Actionscript.useGlobalSpacesInsideParens=false +MXML.KeepScriptCDataOnSameLine=false +Actionscript.wrapExpressionMode=4 +Actionscript.blankLinesAtFunctionStart=0 +MXML.spacesInsideAttributeBraces=0 +Actionscript.breakLinesBeforeArithmeticOperator=false +ASRearr_ElementFunctionVisibilityOrder=public\:true,protected\:true,internal\:true,private\:true, +Actionscript.wrapMethodDeclMode=4 +MXML.ScriptIndentTabs=1 +ASRearr_ElementStaticPropertyVisibilityOrder=public\:true,protected\:true,internal\:true,private\:true, +Actionscript.useGlobalCRBeforeBrace=true +Actionscript.addBracesToCases=8 +Actionscript.wrapArrayDeclMode=4 +Actionscript.useGnuBraceIndent=false +MXML.sortAttrData=%xml_namespaces%,\\n\n%identification%,\\n\n%layout-attributes%,\\n\n%layout-constraints%,\\n\n%extent%,\\n\n +Actionscript.advancedSpacesAroundEqualsInMetatags=0 +ActionScript.keepRelativeIndentInDocComments=true +ASRearr_ElementOrder=Import,Include,Namespace Definition,Default Namespace,Namespace Use,Static Property,Static Function,Static Initializer,Constructor,Property,Function, +Actionscript.noNewCRsBeforeContinue=false +Actionscript.blankLinesBeforeFunctions=1 +Actionscript.advancedWrappingAllArrayItems=false +Actionscript.useLineCommentWrapping=false +MXML.maxLineLength=80 +ASRearr_MajorSectionHeader=style\=1|width\=80|blankLines\=2|fillChar\=-|text\=|linesBefore\=1| +ASRearr_ModifierOrder_Function=,override,native,public,private,protected,internal,static,dynamic,final +MXML.blankLinesAfterParentTags=0 +Actionscript.wrapMethodCallMode=4 +Actionscript.noNewCRsBeforeThrow=false +ASRearr_RemoveExistingSectionHeaders=false +Actionscript.MLCommentHeaderOnSeparateLine=false +ASRearr_UseElementFunctionVisibilityOrder=true +Actionscript.spacesBeforeControlOpenParen=1 +Actionscript.noNewCRsBeforeBreak=false +MXML.attrsToKeepOnSameLine=2 +ASRearr_UseModifierOrder_Function=true +Actionscript.putEmptyStatementsOnNewLine=true +Actionscript.spacesAroundBinarySymbolicOperator=1 +Actionscript.useDocCommentWrapping=false +Flex.useTabs=false +Actionscript.doRearrangeWhileFormatting=false +MXML.sortAttrMode=2 +ASRearr_UseGlobalModifierOrder=true +Actionscript.docCommentReflow=false +Actionscript.breakLinesBeforeLogicalOperator=false +ASRearr_ImportOrder=adobe,com,flash,mx, +Actionscript.advancedSpacesInsideParensInOtherPlaces=0 +Actionscript.dontIndentSwitchCases=false +MXMLRearr_RearrangeWhileFormatting=false +Actionscript.advancedWrappingGraceColumns=5 +Actionscript.advancedSpacesInsideArrayRefBrackets=0 +MXML.doRemoveNamespacesWhileFormatting=true +ActionScript.spacesBeforeFormalParameters=0 +MXML.blankLinesBetweenSiblingTags=0 +Actionscript.putElseOnNewLine=true +ASRearr_SectionHeaderMap=\#\n\#Mon Nov 19 11\:04\:32 PST 2012\n +Actionscript.alwaysGenerateIndent=false +Actionscript.advancedWrappingAllArgs=false +Actionscript.advancedWrappingFirstArrayItem=false +MXML.blankLinesAfterSpecificParentTags=0 +ASRearr_SortGettersAndSettersWithAssociatedStaticProperties=true +Actionscript.blankLinesBeforeClasses=1 +ASRearr_ElementStaticFunctionVisibilityOrder=public\:true,protected\:true,internal\:true,private\:true, +MXML.blankLinesBeforeClosingTags=0 +Actionscript.putWhileOnNewLine=false +MXML.parentTagsToHaveBlankLinesAddedAfterThem= +Actionscript.maxLineLength=80 +MXML.attrWrapMode=52 +Actionscript.unindentExpressionTerminators=false +MXML.tagsCanFormat=mx\:List,fx\:List, +MXML.wrapIndentStyle=1001 +ActionScript.metatagsOnSameLineAsTargetProperty=Bindable, +ASRearr_UseMetatagOrder=false +MXML.spacesAroundEquals=0 +Actionscript.advancedSpacesAroundEqualsInOptionalParameters=1 +ASRearr_CopyrightHeader=style\=1|width\=80|blankLines\=2|fillChar\=-|text\= Copyright 2010\n All rights reserved.|linesBefore\=1| +Actionscript.blankLinesBeforeProperties=0 +Actionscript.putOpenBraceOnNewLine=true +Actionscript.advancedWrappingPreservePhrases=true +Actionscript.keepElseIfOnSameLine=true +ASRearr_ElementSortStaticFunctions=true +ASRearr_ElementSortIncludes=true +Actionscript.blankLinesBeforeImportBlock=1 +Actionscript.newLineBeforeBindableProperty=true +Actionscript.advancedUseSpacesAroundEqualsInMetatags=true +ASRearr_ElementSortMetatags=false +MXML.blankLinesAtCDataStart=0 +MXML.addNewlineAfterLastAttr=false +MXML.useFormattingOfBoundAttributes=false +Actionscript.advancedWrappingFirstParm=false +ASRearr_UseImportOrder=true +ASRearr_ElementSortStaticProperties=true +Actionscript.keepSpacesBeforeLineComments=false +MXML.indentTagClose=true +Actionscript.advancedWrappingEnforceMax=false +ASRearr_BlankLinesBeforeElement= +Actionscript.advancedWrappingElements=165 +Actionscript.keepSLCommentsOnColumn1=true +ASRearr_UseCopyrightGeneration=false +MXMLRearr_UseRearrangeTagOrdering=false +Actionscript.collapseSpacesForAdjacentParens=true +ASRearr_ModifierOrder_Property=,override,native,public,private,protected,internal,static,dynamic,final +Actionscript.useAdvancedWrapping=false +MXML.sortExtraAttrs=true +Actionscript.MLCommentReflowLines=false +Actionscript.blankLinesToKeep=0 +Actionscript.spacesAfterLabel=1 +ASRearr_ElementSortImports=true +Actionscript.MLCommentAsteriskMode=0 +ASRearr_AddDefaultHeaderForProperties=1 +Actionscript.blankLinesBeforeControlStatements=0 +ASRearr_MoveImportsOutsideClass=true +Actionscript.advancedSpacesInsideLiteralBraces=1 +Actionscript.alignDeclEqualsMode=1 +Actionscript.putCatchOnNewLine=true +ASRearr_GroupGettersAndSettersWithProperties=false +Actionscript.breakLinesBeforeComma=false +Actionscript.wrapIndentStyle=1001 +Actionscript.tabCountForHangingIndent=1 +Actionscript.advancedWrappingAllObjectItems=false +ASRearr_UseElementStaticPropertyVisibilityOrder=true +Actionscript.spacesBeforeColonsInDeclarations=0 +Actionscript.breakLinesBeforeAssignment=false +MXML.useSpacesInsideAttributeBraces=false +ASRearr_UseSectionHeadersInMXML=false +MXML.onlyFormatASIfCDATABlock=false +Actionscript.leaveSingleLineFunctions=false +MXML.tagsWithASContent=.*\:add,.*\:added,.*\:activate,.*\:addedToStage,.*\:buttonDown,.*\:change,.*\:childAdd,.*\:childIndexChange,.*\:childRemove,.*\:clickHandler,.*\:clear,.*\:click,.*\:complete,.*\:contextMenu,.*\:copy,.*\:creationComplete,.*\:currentStateChange,.*\:currentStateChanging,.*\:cut,.*\:dataChange,.*\:deactivate,.*\:doubleClick,.*\:dragComplete,.*\:dragDrop,.*\:dragEnter,.*\:dragExit,.*\:dragOver,.*\:dragStart,.*\:effectEnd,.*\:effectStart,.*\:enterFrame,.*\:enterState,.*\:exitFrame,.*\:exitState,.*\:focusIn,.*\:focusOut,.*\:frameConstructed,.*\:hide,.*\:httpStatus,.*\:init,.*\:initialize,.*\:invalid,.*\:ioError,.*\:itemClick,.*\:itemRollOut,.*\:itemRollOver,.*\:keyDown,.*\:keyFocusChange,.*\:keyUp,.*\:menuHide,.*\:menuShow,.*\:middleClick,.*\:middleMouseDown,.*\:middleMouseUp,.*\:mouseDown,.*\:mouseUp,.*\:mouseOver,.*\:mouseMove,.*\:mouseOut,.*\:mouseFocusChange,.*\:mouseWheel,.*\:mouseDownOutside,.*\:mouseWheelOutside,.*\:move,.*\:nativeDragComplete,.*\:nativeDragDrop,.*\:nativeDragEnter,.*\:nativeDragExit,.*\:nativeDragOver,.*\:nativeDragStart,.*\:nativeDragUpdate,.*\:open,.*\:paste,.*\:preinitialize,.*\:progress,.*\:record,.*\:remove,.*\:removed,.*\:removedFromStage,.*\:render,.*\:resize,.*\:rightClick,.*\:rightMouseDown,.*\:rightMouseUp,.*\:rollOut,.*\:rollOver,.*\:scroll,.*\:securityError,.*\:selectAll,.*\:show,.*\:tabChildrenChange,.*\:tabEnabledChange,.*\:tabIndexChange,.*\:thumbDrag,.*\:thumbPress,.*\:thumbRelease,.*\:toolTipCreate,.*\:toolTipEnd,.*\:toolTipHide,.*\:toolTipShow,.*\:toolTipShown,.*\:toolTipStart,.*\:updateComplete,.*\:unload,.*\:valid,.*\:valueCommit,.*\:Script, +Actionscript.advancedSpacesInsideArrayDeclBrackets=1 +ASRearr_UseModifierOrder_Property=true +Actionscript.advancedUseSpacesAroundEqualsInOptionalParameters=true +MXML.tagsCannotFormat=mx\:String,fx\:String, +MXML.useTagsDoNotFormatInside=true +Actionscript.wrapEmbeddedXMLMode=2 +Actionscript.advancedSpacesInsideParensInArgumentLists=0 +Actionscript.useMLCommentWrapping=false +Actionscript.spacesAfterColonsInFunctions=0 +MXML.spacesBeforeEmptyTagEnd=0 +MXML.alwaysUseMaxLineLength=true +Actionscript.MLCommentKeepBlankLines=true +Actionscript.advancedWrappingFirstObjectItem=false +ASRearr_UseElementOrder=true +ASRearr_UseSectionHeaders=false +Actionscript.addBracesToLoops=2 +ActionScript.spacesBeforeArguments=0 +ASRearr_ModifierOrder_Class=,override,native,public,private,protected,internal,static,dynamic,final +ASRearr_UseElementStaticFunctionVisibilityOrder=true +Actionscript.noNewCRsBeforeReturn=false +ASRearr_MetatagOrder=ArrayElementType,Bindable,DefaultProperty,Deprecated,Effect,Embed,Event,Exclude,ExcludeClass,IconFile,Inspectable,InstanceType,NonCommittingChangeEvent,RemoteClass,Style,SWF,Transient, +Actionscript.dontIndentPackageItems=true +MXML.tabCountForHangingIndent=1 +MXML.tagsToHaveBlankLinesAddedBeforeThem= +Actionscript.advancedWrappingAlignArrayItems=false +MXMLRearr_RearrangeTagOrdering=.*\:Binding,.*\:Component,.*\:Declarations,.*\:Definition,.*\:DesignLayer,.*\:Library,.*\:Metadata,.*\:Model,.*\:Private,.*\:Reparent,.*\:Script,.*\:Style,.*\:XML,.*\:XMLList,.*\:operation,.*\:request,.*\:method,.*\:arguments,.*\:states,.*\:layout,\#\#\#UnmatchedTags\#\#\#, +ASRearr_UseModifierOrder_Class=true +Actionscript.alignDeclEquals=false +Actionscript.useBraceStyle=true +Actionscript.advancedWrappingAlignObjectItems=false +Actionscript.docCommentHangingIndentTabs=0 +MXML.useAttrsToKeepOnSameLine=true +Actionscript.spacesBeforeComma=0 +ASRearr_ElementPropertyVisibilityOrder=public\:true,protected\:true,internal\:true,private\:true, +Actionscript.advancedWrappingFirstArg=false +Actionscript.alignLineCommentsAtColumn=0 +Actionscript.spacesBeforeColonsInFunctions=0 +Actionscript.spacesAroundColons=0 +Actionscript.spacesInsideParens=0 +Actionscript.noNewCRsBeforeExpression=false +MXML.blankLinesBeforeComments=0 +Actionscript.spacesAroundAssignment=1 +Actionscript.spacesAfterComma=1 +ASRearr_ElementSortFunctions=true +MXML.ScriptCDataIndentTabs=1 +ASRearr_AddDefaultHeaderForStaticProperties=1 +MXML.attrGroups=name\=properties|sort\=11|includeStates\=true|wrap\=54|attrs\=allowDisjointSelection,allowMultipleSelection,allowThumbOverlap,allowTrackClick,autoLayout,autoRepeat,automationName,cachePolicy,class,clipContent,condenseWhite,conversion,creationIndex,creationPolicy,currentState,data,dataDescriptor,dataProvider,dataTipFormatFunction,dayNames,defaultButton,direction,disabledDays,disabledRanges,displayedMonth,displayedYear,doubleClickEnabled,emphasized,enabled,explicitHeight,explicitMaxHeight,explicitMaxWidth,explicitMinHeight,explicitMinWidth,explicitWidth,firstDayOfWeek,focusEnabled,fontContext,height,horizontalLineScrollSize,horizontalPageScrollSize,horizontalScrollBar,horizontalScrollPolicy,horizontalScrollPosition,htmlText,icon,iconField,id,imeMode,includeInLayout,indeterminate,label,labelField,labelFunction,labelPlacement,labels,layout,lineScrollSize,listData,liveDragging,maxChars,maxHeight,maxScrollPosition,maxWidth,maxYear,maximum,measuredHeight,measuredMinHeight,measuredMinWidth,measuredWidth,menuBarItemRenderer,menuBarItems,menus,minHeight,minScrollPosition,minWidth,minYear,minimum,mode,monthNames,monthSymbol,mouseFocusEnabled,pageScrollSize,pageSize,percentHeight,percentWidth,scaleX,scaleY,scrollPosition,selectable,selectableRange,selected,selectedDate,selectedField,selectedIndex,selectedRanges,showDataTip,showRoot,showToday,sliderDataTipClass,sliderThumbClass,snapInterval,source,states,stepSize,stickyHighlighting,styleName,text,text,thumbCount,tickInterval,tickValues,toggle,toolTip,transitions,truncateToFit,validationSubField,value,value,verticalLineScrollSize,verticalPageScrollSize,verticalScrollBar,verticalScrollPolicy,verticalScrollPosition,width,x,y,yearNavigationEnabled,yearSymbol,|data\=-1|\nname\=xml_namespaces|sort\=14|includeStates\=true|wrap\=54|attrs\=xmlns,xmlns\:.*,|data\=-1|\nname\=events|sort\=11|includeStates\=true|wrap\=54|attrs\=add,added,activate,addedToStage,buttonDown,change,childAdd,childIndexChange,childRemove,clickHandler,clear,click,complete,contextMenu,copy,creationComplete,currentStateChange,currentStateChanging,cut,dataChange,deactivate,doubleClick,dragComplete,dragDrop,dragEnter,dragExit,dragOver,dragStart,effectEnd,effectStart,enterFrame,enterState,exitFrame,exitState,focusIn,focusOut,frameConstructed,hide,httpStatus,init,initialize,invalid,ioError,itemClick,itemRollOut,itemRollOver,keyDown,keyFocusChange,keyUp,menuHide,menuShow,middleClick,middleMouseDown,middleMouseUp,mouseDown,mouseUp,mouseOver,mouseMove,mouseOut,mouseFocusChange,mouseWheel,mouseDownOutside,mouseWheelOutside,move,nativeDragComplete,nativeDragDrop,nativeDragEnter,nativeDragExit,nativeDragOver,nativeDragStart,nativeDragUpdate,open,paste,preinitialize,progress,record,remove,removed,removedFromStage,render,resize,rightClick,rightMouseDown,rightMouseUp,rollOut,rollOver,scroll,securityError,selectAll,show,tabChildrenChange,tabEnabledChange,tabIndexChange,thumbDrag,thumbPress,thumbRelease,toolTipCreate,toolTipEnd,toolTipHide,toolTipShow,toolTipShown,toolTipStart,updateComplete,unload,valid,valueCommit,|data\=-1|\nname\=styles|sort\=11|includeStates\=true|wrap\=54|attrs\=backgroundAlpha,backgroundAttachment,backgroundColor,backgroundDisabledColor,backgroundImage,backgroundSize,backgroundSkin,barColor,barSkin,borderColor,borderSides,borderSkin,borderStyle,borderThickness,bottom,color,cornerRadius,dataTipOffset,dataTipPrecision,dataTipStyleName,disabledColor,disabledIcon,disabledIconColor,disabledSkin,disbledOverlayAlpha,downArrowDisabledSkin,downArrowDownSkin,downArrowOverSkin,downArrowUpSkin,downIcon,downSkin,dropShadowColor,dropShadowEnabled,errorColor,fillAlphas,fillColors,focusAlpha,focusBlendMode,focusRoundedCorners,focusSkin,focusThickness,fontAntiAliasType,fontFamily,fontGridFitType,fontSharpness,fontSize,fontStyle,fontThickness,fontWeight,fontfamily,headerColors,headerStyleName,highlightAlphas,horizontalAlign,horizontalCenter,horizontalGap,horizontalScrollBarStyleName,icon,iconColor,indeterminateMoveInterval,indeterminateSkin,itemDownSkin,itemOverSkin,itemUpSkin,kerning,labelOffset,labelStyleName,labelWidth,leading,left,letterSpacing,maskSkin,menuStyleName,nextMonthDisabledSkin,nextMonthDownSkin,nextMonthOverSkin,nextMonthSkin,nextMonthUpSkin,nextYearDisabledSkin,nextYearDownSkin,nextYearOverSkin,nextYearSkin,nextYearUpSkin,overIcon,overSkin,paddingBottom,paddingLeft,paddingRight,paddingTop,prevMonthDisabledSkin,prevMonthDownSkin,prevMonthOverSkin,prevMonthSkin,prevMonthUpSkin,prevYearDisabledSkin,prevYearDownSkin,prevYearOverSkin,prevYearSkin,prevYearUpSkin,repeatDelay,repeatInterval,right,rollOverColor,rollOverIndicatorSkin,selectedDisabledIcon,selectedDisabledSkin,selectedDownIcon,selectedDownSkin,selectedOverIcon,selectedOverSkin,selectedUpIcon,selectedUpSkin,selectionColor,selectionIndicatorSkin,shadowColor,shadowDirection,shadowDistance,showTrackHighlight,skin,slideDuration,slideEasingFunction,strokeColor,strokeWidth,textAlign,textDecoration,textIndent,textRollOverColor,textSelectedColor,themeColor,thumbDisabledSkin,thumbDownSkin,thumbIcon,thumbOffset,thumbOverSkin,thumbUpSkin,tickColor,tickLength,tickOffset,tickThickness,todayColor,todayIndicatorSkin,todayStyleName,top,tracHighlightSkin,trackColors,trackHeight,trackMargin,trackSkin,upArrowDisabledSkin,upArrowDownSkin,upArrowOverSkin,upArrowUpSkin,upIcon,upSkin,verticalAlign,verticalCenter,verticalGap,verticalScrollBarStyleName,weekDayStyleName,|data\=-1|\nname\=effects|sort\=11|includeStates\=true|wrap\=54|attrs\=addedEffect,completeEffect,creationCompleteEffect,focusInEffect,focusOutEffect,hideEffect,mouseDownEffect,mouseUpEffect,moveEffect,removedEffect,resizeEffect,rollOutEffect,rollOverEffect,showEffect,|data\=-1|\nname\=layout-attributes|sort\=13|includeStates\=true|wrap\=53|attrs\=x,y,width,height,|data\=-1|\nname\=identification|sort\=13|includeStates\=true|wrap\=53|attrs\=id,layerId,name,automationName,|data\=-1|\nname\=layout-constraints|sort\=13|includeStates\=true|wrap\=53|attrs\=left,right,top,bottom,|data\=-1|\nname\=xmlns|sort\=14|includeStates\=true|wrap\=52|attrs\=xmlns,xmlns\:.*,|data\=-1|\nname\=extent|sort\=13|includeStates\=true|wrap\=53|attrs\=xmin,minlon,ymin,minlat,xmax,maxlon,ymax,maxlat,lon,lat,|data\=-1|\nname\=Special_Group--Other Attributes|sort\=11|includeStates\=true|wrap\=54|attrs\=|data\=-1|\n +Actionscript.leaveExtraWhitespaceAroundVarDecls=false +Actionscript.advancedWrappingAllParms=false +Actionscript.addBracesToConditionals=2 +Actionscript.spacesAfterColonsInDeclarations=0 +ASRearr_MinorSectionHeader=style\=1|width\=40|blankLines\=0|fillChar\=-|text\=|linesBefore\=1| +Actionscript.braceStyle=5 +ASRearr_ElementSortProperties=true +MXML.keepBlankLines=true From 2fbbd403642e890dde8e78bfc6616cb9449d1e6d Mon Sep 17 00:00:00 2001 From: jcfranco Date: Sun, 27 Jan 2013 19:03:29 -0800 Subject: [PATCH 030/178] Handle null search result to label. --- .../viewer/components/singleLineSearch/SearchResultUtil.as | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/com/esri/viewer/components/singleLineSearch/SearchResultUtil.as b/src/com/esri/viewer/components/singleLineSearch/SearchResultUtil.as index f52ec1c..fe80fdd 100644 --- a/src/com/esri/viewer/components/singleLineSearch/SearchResultUtil.as +++ b/src/com/esri/viewer/components/singleLineSearch/SearchResultUtil.as @@ -33,6 +33,10 @@ public class SearchResultUtil { return (searchResult as AddressCandidate).address as String; } + else if (searchResult == null) + { + return ""; + } else { return searchResult as String; From 4ce4c9048c1aeb74bb79e8b79aadef8d39be41e3 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Sun, 27 Jan 2013 19:05:29 -0800 Subject: [PATCH 031/178] Acquire search result SharedObject storage on initialization instead of on each import/export history call. --- .../singleLineSearch/SingleLineSearch.mxml | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml b/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml index 15fc10b..b4c973f 100644 --- a/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml +++ b/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml @@ -86,6 +86,7 @@ private var searchLayersConfigured:Boolean; private var locatorConfigured:Boolean; private var searchResultHistory:ItemHistory = new ItemHistory(); + private var searchResultHistoryStorage:SharedObject; private var searchResultGraphic:com.esri.ags.Graphic; private var lastSearchTimestamp:int; @@ -135,6 +136,9 @@ { registerClassAlias("com.esri.ags.tasks.supportClasses.FindResult", FindResult); registerClassAlias("com.esri.ags.tasks.supportClasses.AddressCandidate", AddressCandidate); + + searchResultHistoryStorage = + SharedObject.getLocal(SEARCH_RESULT_SHARED_OBJECT_NAME); } private function init():void @@ -321,11 +325,8 @@ { try { - const storedSearchResultHistory:SharedObject = - SharedObject.getLocal(SEARCH_RESULT_SHARED_OBJECT_NAME); - searchResultHistory.importHistory - (storedSearchResultHistory.data.searchResultHistory as Array); + (searchResultHistoryStorage.data.searchResultHistory as Array); } catch (err:Error) { @@ -491,12 +492,9 @@ { try { - const searchResultHistoryToStore:SharedObject = - SharedObject.getLocal(SEARCH_RESULT_SHARED_OBJECT_NAME); - - searchResultHistoryToStore.data.searchResultHistory = + searchResultHistoryStorage.data.searchResultHistory = searchResultHistory.exportHistory(); - searchResultHistoryToStore.flush(); + searchResultHistoryStorage.flush(); } catch (err:Error) { From 8ba9b76beabaea7d0b0bd75e8608d39c867f6a37 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Sun, 27 Jan 2013 19:17:05 -0800 Subject: [PATCH 032/178] Remove unnecessary result list index reset. --- .../viewer/components/singleLineSearch/SingleLineSearch.mxml | 1 - 1 file changed, 1 deletion(-) diff --git a/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml b/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml index b4c973f..b54a0ec 100644 --- a/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml +++ b/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml @@ -819,7 +819,6 @@ private function resetSearchResultSelection():void { - resultList.selectedIndex = -1; resultList.dataProvider.removeAll(); currentState = "normal"; } From ae57ab06d027f1fd5147b05534e8d6a80d6c92cc Mon Sep 17 00:00:00 2001 From: jcfranco Date: Sun, 27 Jan 2013 19:18:52 -0800 Subject: [PATCH 033/178] Process only valid search result selection. --- .../singleLineSearch/SingleLineSearch.mxml | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml b/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml index b54a0ec..0f77ddd 100644 --- a/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml +++ b/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml @@ -810,11 +810,14 @@ private function processSelectedSearchResult():void { - storeSearchResult(resultList.selectedItem); - var searchResult:Object = getSearchResult(resultList.selectedItem); - searchTerm = searchResult.label; - projectToMapSpatialReferenceAndShowResultOnMap(searchResult); - resetSearchResultSelection(); + if (resultList.selectedItem) + { + storeSearchResult(resultList.selectedItem); + var searchResult:Object = getSearchResult(resultList.selectedItem); + searchTerm = searchResult.label; + projectToMapSpatialReferenceAndShowResultOnMap(searchResult); + resetSearchResultSelection(); + } } private function resetSearchResultSelection():void @@ -1046,7 +1049,10 @@ protected function resultList_changeHandler(event:IndexChangeEvent):void { - processSelectedSearchResult(); + if (resultList.selectedIndex > -1) + { + processSelectedSearchResult(); + } } protected function searchInput_enterHandler(event:FlexEvent):void From 0aaf50048d6daab25ecfd5b581092477d0c95911 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Mon, 7 Jan 2013 16:46:58 -0800 Subject: [PATCH 034/178] Allow disabling of geocoder search. * Add enabled property for geocode & find searches. * Show relevant result history entries based on enabled searches. --- .../singleLineSearch/SingleLineSearch.mxml | 48 ++++++++++++------- 1 file changed, 30 insertions(+), 18 deletions(-) diff --git a/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml b/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml index 0f77ddd..c08c883 100644 --- a/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml +++ b/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml @@ -70,6 +70,7 @@ private var singleAddressFieldName:String; private var findTask:FindTask = new FindTask(); + private var isGeocodeEnabled:Boolean; private var isFindEnabled:Boolean; private var searchLayers:Array = []; private var zoomScale:Number = 10000; @@ -160,15 +161,19 @@ searchPrompt = configXML.labels.searchprompt[0] || hostBaseWidget.getDefaultString("searchPrompt"); noResultsFoundLabel = configXML.labels.noresults[0] || hostBaseWidget.getDefaultString("noResultsFoundLabel"); searchResultTitleLabel = configXML.labels.searchresulttitle[0] || hostBaseWidget.getDefaultString("searchResultTitleLabel"); - isFindEnabled = (configXML.searchlayers[0] != null); configureResultSymbols(); configureResultGraphic(); importSearchResultHistory(); - configureLocator(); + isGeocodeEnabled = (configXML.geocoding.@enabled[0] != "false"); + if (isGeocodeEnabled) + { + configureLocator(); + } + isFindEnabled = (configXML.searchlayers.@enabled[0] != "false" && configXML.searchlayers[0] != null); if (isFindEnabled) { configureSearchLayers(); @@ -220,7 +225,7 @@ { super.commitProperties(); - if (locatorConfigured + if (isGeocodeEnabled && locatorConfigured || (isFindEnabled && searchLayersConfigured)) { configureSearchInput(); @@ -351,7 +356,7 @@ private function search():void { - if (!searchTerm) + if (!searchTerm || (!isGeocodeEnabled && !isFindEnabled)) { return; } @@ -369,27 +374,27 @@ totalResultsToProcess = 0; searchResults.removeAll(); - totalResultsToProcess++; + lastSearchTimestamp = getTimer(); - if (isFindEnabled) + if (isGeocodeEnabled) { - totalResultsToProcess += searchLayers.length; - } - - lastSearchTimestamp = getTimer(); + totalResultsToProcess++; - const addressData:Object = {}; - addressData[singleAddressFieldName] = searchTerm; - var locatorParams:AddressToLocationsParameters = new AddressToLocationsParameters(); - locatorParams.address = addressData; - locatorParams.outFields = [ "Ymax", "Ymin", "Xmax", "Xmin" ]; - locatorParams.location = map.extent.center; - locatorParams.distance = calculateExtentRadius(); + const addressData:Object = {}; + addressData[singleAddressFieldName] = searchTerm; + var locatorParams:AddressToLocationsParameters = new AddressToLocationsParameters(); + locatorParams.address = addressData; + locatorParams.outFields = [ "Ymax", "Ymin", "Xmax", "Xmin" ]; + locatorParams.location = map.extent.center; + locatorParams.distance = calculateExtentRadius(); - locator.addressToLocations(locatorParams, new AsyncResponder(locator_resultHandler, locator_faultHandler, lastSearchTimestamp)); + locator.addressToLocations(locatorParams, new AsyncResponder(locator_resultHandler, locator_faultHandler, lastSearchTimestamp)); + } if (isFindEnabled) { + totalResultsToProcess += searchLayers.length; + var searchLayer:SearchLayer; for (var i1:Number = 0; i1 < searchLayers.length; i1++) { @@ -995,6 +1000,13 @@ for (var i:int = searchResultItems.length - 1; i >= 0; i--) { searchResult = searchResultItems[i]; + + if (searchResult is FindResult && !isFindEnabled + || searchResult is AddressCandidate && !isGeocodeEnabled) + { + continue; + } + if (SearchResultUtil.searchResultToLabel(searchResult).toLowerCase().indexOf(input) != -1) { matches.unshift(searchResult); From 54e6bb8e0878f7e7d2e4e25bccf5a70ea98bc60a Mon Sep 17 00:00:00 2001 From: Sarthak Datt Date: Tue, 29 Jan 2013 10:07:22 -0800 Subject: [PATCH 035/178] set TOC.includeLegendItems --- src/widgets/MapSwitcher/MapSwitcherWidget.mxml | 1 + 1 file changed, 1 insertion(+) diff --git a/src/widgets/MapSwitcher/MapSwitcherWidget.mxml b/src/widgets/MapSwitcher/MapSwitcherWidget.mxml index e981995..8a342a2 100644 --- a/src/widgets/MapSwitcher/MapSwitcherWidget.mxml +++ b/src/widgets/MapSwitcher/MapSwitcherWidget.mxml @@ -173,6 +173,7 @@ toc.excludeLayers = getExcludeLayers(); toc.basemapLayers = getBasemapLayers(); toc.excludeGraphicsLayers = true; + toc.includeLegendItems = includeLegendItems; if (expandLayerItems) { toc.expandLayerItems(); From b23ed3530c906af9189fd5ed41f258a2633b9741 Mon Sep 17 00:00:00 2001 From: Sarthak Datt Date: Tue, 29 Jan 2013 10:33:07 -0800 Subject: [PATCH 036/178] Honor fields order set in the config for Edit and Attribute Table widget --- .../AttributeTable/AttributeTableWidget.mxml | 71 ++++++++++--------- src/widgets/Edit/EditWidget.mxml | 44 +++++++----- 2 files changed, 63 insertions(+), 52 deletions(-) diff --git a/src/widgets/AttributeTable/AttributeTableWidget.mxml b/src/widgets/AttributeTable/AttributeTableWidget.mxml index efbd216..4017036 100644 --- a/src/widgets/AttributeTable/AttributeTableWidget.mxml +++ b/src/widgets/AttributeTable/AttributeTableWidget.mxml @@ -832,7 +832,44 @@ const settings:Object = featureLayerToSettings[settingsKey]; if (settings) { - applyFieldInspectors(featureLayer, settings, attributeTable); + var outFields:Array = settings.outFields as Array; + if (outFields && outFields.length) + { + var attributeTableFieldInspectors:Array = []; + var fieldInspector:FieldInspector; + for each (var fieldObject:Object in outFields) + { + fieldInspector = new FieldInspector; + fieldInspector.featureLayer = featureLayer; + fieldInspector.visible = true; + fieldInspector.fieldName = fieldObject.name; + fieldInspector.label = fieldObject.alias; + fieldInspector.toolTip = fieldObject.tooltip; + + attributeTableFieldInspectors.push(fieldInspector); + } + for each (var field:Field in getFields(featureLayer)) + { + if (outFields.indexOf(field.name) == -1) + { + fieldInspector = new FieldInspector; + fieldInspector.featureLayer = featureLayer; + fieldInspector.visible = false; + fieldInspector.fieldName = field.name; + + attributeTableFieldInspectors.push(fieldInspector); + } + } + attributeTable.fieldInspectors = attributeTableFieldInspectors; + attributeTable.columnsOrder = AttributeTable.FIELD_INSPECTOR_ORDER; + } + else + { + if (settings.columnsOrder) + { + attributeTable.columnsOrder = settings.columnsOrder; + } + } if (settings.showObjectId) { attributeTable.showObjectID = settings.showObjectId == "true"; @@ -853,10 +890,6 @@ { attributeTable.showRelatedRecords = settings.showRelatedRecords == "true"; } - if (settings.columnsOrder) - { - attributeTable.columnsOrder = settings.columnsOrder; - } } attributeTable.showTitle = false; attributeTable.percentWidth = 100; @@ -884,34 +917,6 @@ } } - private function applyFieldInspectors(featureLayer:FeatureLayer, settings:Object, attributeTable:AttributeTable):void - { - var outFields:Array = settings.outFields as Array; - if (outFields && outFields.length) - { - var attributeTableFieldInspectors:Array = []; - for each (var field:Field in getFields(featureLayer)) - { - var fieldInspector:FieldInspector = new FieldInspector; - fieldInspector.featureLayer = featureLayer; - fieldInspector.fieldName = field.name; - fieldInspector.visible = false; - for each (var fieldObject:Object in outFields) - { - if (fieldObject.name == field.name) - { - fieldInspector.label = fieldObject.alias; - fieldInspector.toolTip = fieldObject.tooltip; - fieldInspector.visible = true; - break; - } - } - attributeTableFieldInspectors.push(fieldInspector); - } - attributeTable.fieldInspectors = attributeTableFieldInspectors; - } - } - private function featureLayer_loadHandler(event:LayerEvent):void { getAllFeatureLayers(layersUsedInAttributeTable.indexOf(event.layer), featureLayers); diff --git a/src/widgets/Edit/EditWidget.mxml b/src/widgets/Edit/EditWidget.mxml index bcbea23..55104ef 100644 --- a/src/widgets/Edit/EditWidget.mxml +++ b/src/widgets/Edit/EditWidget.mxml @@ -1319,40 +1319,46 @@ if (outFields && outFields.length) { var attributeInspectorFieldInspectors:Array = []; - for each (var field:Field in featureLayer.layerDetails.fields) + var fieldInspector:FieldInspector; + for each (var fieldObject:Object in outFields) { - var fieldInspector:FieldInspector = new FieldInspector; + fieldInspector = new FieldInspector; fieldInspector.featureLayer = featureLayer; - fieldInspector.fieldName = field.name; - fieldInspector.visible = false; - for each (var fieldObject:Object in outFields) + fieldInspector.visible = true; + fieldInspector.fieldName = fieldObject.name; + fieldInspector.label = fieldObject.alias; + fieldInspector.toolTip = fieldObject.tooltip; + + attributeInspectorFieldInspectors.push(fieldInspector); + } + for each (var field:Field in featureLayer.layerDetails.fields) + { + if (outFields.indexOf(field.name) == -1) { - if (fieldObject.name == field.name) - { - fieldInspector.label = fieldObject.alias; - fieldInspector.toolTip = fieldObject.tooltip; - fieldInspector.visible = true; - break; - } + fieldInspector = new FieldInspector; + fieldInspector.featureLayer = featureLayer; + fieldInspector.visible = false; + fieldInspector.fieldName = field.name; + + attributeInspectorFieldInspectors.push(fieldInspector); } - attributeInspectorFieldInspectors.push(fieldInspector); } editor.attributeInspector.fieldInspectors = attributeInspectorFieldInspectors; + editor.attributeInspector.formFieldsOrder = AttributeInspector.FIELD_INSPECTOR_ORDER; } else { - editor.attributeInspector.fieldInspectors = []; + var formFieldsOrder:String = settingsObject.formFieldsOrder; + if (formFieldsOrder) + { + editor.attributeInspector.formFieldsOrder = formFieldsOrder; + } } var singleToMultilineThreshold:Number = settingsObject.singleToMultilineThreshold; if (singleToMultilineThreshold && !isNaN(singleToMultilineThreshold)) { editor.attributeInspector.singleToMultilineThreshold = singleToMultilineThreshold; } - var formFieldsOrder:String = settingsObject.formFieldsOrder; - if (formFieldsOrder) - { - editor.attributeInspector.formFieldsOrder = formFieldsOrder; - } var showObjectID:String = settingsObject.showObjectID; if (showObjectID) { From e96c19be957a876d5ab9e0c67ae869786995a51d Mon Sep 17 00:00:00 2001 From: Dasa Paddock Date: Wed, 30 Jan 2013 11:45:44 -0800 Subject: [PATCH 037/178] Update "build-all-resoure-modules" and "update-index.html" targets with new locales --- build.xml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/build.xml b/build.xml index d099173..459b8a9 100644 --- a/build.xml +++ b/build.xml @@ -86,6 +86,9 @@ + + + @@ -98,6 +101,9 @@ + + + @@ -107,6 +113,9 @@ + + + @@ -119,6 +128,9 @@ + + + @@ -178,18 +190,24 @@ flashvars.resourceModuleURLs = "assets/locale/${fb.locale}.swf"; //flashvars.localeChain = "ar"; //flashvars.resourceModuleURLs = "assets/locale/ar.swf"; + //flashvars.localeChain = "da_DK"; + //flashvars.resourceModuleURLs = "assets/locale/da_DK.swf"; //flashvars.localeChain = "de_DE"; //flashvars.resourceModuleURLs = "assets/locale/de_DE.swf"; //flashvars.localeChain = "es_ES"; //flashvars.resourceModuleURLs = "assets/locale/es_ES.swf"; //flashvars.localeChain = "fr_FR"; //flashvars.resourceModuleURLs = "assets/locale/fr_FR.swf"; + //flashvars.localeChain = "he_IL"; + //flashvars.resourceModuleURLs = "assets/locale/he_IL.swf"; //flashvars.localeChain = "it_IT"; //flashvars.resourceModuleURLs = "assets/locale/it_IT.swf"; //flashvars.localeChain = "ja_JP"; //flashvars.resourceModuleURLs = "assets/locale/ja_JP.swf"; //flashvars.localeChain = "ko_KR"; //flashvars.resourceModuleURLs = "assets/locale/ko_KR.swf"; + //flashvars.localeChain = "lt_LT"; + //flashvars.resourceModuleURLs = "assets/locale/lt_LT.swf"; //flashvars.localeChain = "nb_NO"; //flashvars.resourceModuleURLs = "assets/locale/nb_NO.swf"; //flashvars.localeChain = "nl_NL"; @@ -198,6 +216,8 @@ //flashvars.resourceModuleURLs = "assets/locale/pl_PL.swf"; //flashvars.localeChain = "pt_BR"; //flashvars.resourceModuleURLs = "assets/locale/pt_BR.swf"; + //flashvars.localeChain = "pt_PT"; + //flashvars.resourceModuleURLs = "assets/locale/pt_PT.swf"; //flashvars.localeChain = "ro_RO"; //flashvars.resourceModuleURLs = "assets/locale/ro_RO.swf"; //flashvars.localeChain = "ru_RU"; From 8b3d94b82591704ecc596cbb5591eef002f8b785 Mon Sep 17 00:00:00 2001 From: Dasa Paddock Date: Mon, 4 Feb 2013 15:44:28 -0800 Subject: [PATCH 038/178] Set focus on the app when the page loads. This is only supported in IE. --- html-template/index.template.html | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/html-template/index.template.html b/html-template/index.template.html index 505045c..29ffcae 100644 --- a/html-template/index.template.html +++ b/html-template/index.template.html @@ -56,6 +56,19 @@ flashvars, params, attributes); // JavaScript enabled so display the flashContent div in case it is not replaced with a swf object. swfobject.createCSS("#flashContent", "display:block;text-align:left;"); + if (swfobject.ua.ie && swfobject.ua.win) + { + swfobject.addLoadEvent( + function() + { + var app = swfobject.getObjectById("${application}"); + if (app) + { + app.focus(); + } + } + ); + } From 269ef1f27fd24ff4cb28242edb03751d531bc1ac Mon Sep 17 00:00:00 2001 From: Dasa Paddock Date: Mon, 4 Feb 2013 15:45:44 -0800 Subject: [PATCH 039/178] Set focus on the map on creationComplete. --- src/com/esri/viewer/ViewerContainer.mxml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/com/esri/viewer/ViewerContainer.mxml b/src/com/esri/viewer/ViewerContainer.mxml index 82e4041..4ebf831 100644 --- a/src/com/esri/viewer/ViewerContainer.mxml +++ b/src/com/esri/viewer/ViewerContainer.mxml @@ -126,7 +126,11 @@ AppEvent.addListener(AppEvent.CONFIG_LOADED, configLoadedHandler); - //tell the modules it's on business. + if (mapManager.map) + { + mapManager.map.setFocus(); + } + AppEvent.dispatch(ViewerContainer.CONTAINER_INITIALIZED); } From 52cd2fd5f488ef451545f0a5180a128564895f00 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Wed, 23 Jan 2013 10:48:38 -0800 Subject: [PATCH 040/178] Use GP server metadata request to get execution type. --- .../Geoprocessing/GeoprocessingWidget.mxml | 30 ++++++------------- 1 file changed, 9 insertions(+), 21 deletions(-) diff --git a/src/widgets/Geoprocessing/GeoprocessingWidget.mxml b/src/widgets/Geoprocessing/GeoprocessingWidget.mxml index 9c4b1be..05a71b8 100644 --- a/src/widgets/Geoprocessing/GeoprocessingWidget.mxml +++ b/src/widgets/Geoprocessing/GeoprocessingWidget.mxml @@ -148,7 +148,6 @@ } } gp.outSpatialReference = map.spatialReference; - getExecutionType(); autoSubmit = (configXML.autosubmit[0] == "true"); if (configXML.useamf.length() > 0) @@ -198,26 +197,6 @@ } } - private function getExecutionType():void - { - var gpTaskInspector:JSONTask = new JSONTask(); - var urlVars:URLVariables = new URLVariables(); - urlVars.f = "json"; - gpTaskInspector.url = gp.url; - gpTaskInspector.proxyURL = gp.proxyURL; - gpTaskInspector.execute(urlVars, new AsyncResponder(gpTaskInspector_resultHandler, gpTaskInspector_faultHandler)); - } - - private function gpTaskInspector_resultHandler(serviceDescription:Object, token:Object = null):void - { - executionType = serviceDescription.executionType; - } - - private function gpTaskInspector_faultHandler(fault:Fault, token:Object = null):void - { - showError(getDefaultString("unableToDetermineGPExecutionType", ErrorMessageUtil.makeHTMLSafe(fault.toString()))); - } - private function fetchGPServerDescription():void { var gpServerInspector:JSONTask = new JSONTask(); @@ -236,13 +215,21 @@ private function gpServerInspector_resultHandler(gpServerDescription:Object, token:Object = null):void { + getExecutionType(gpServerDescription); + if (!hasUseAMFBeenSet) { checkAMFSupport(gpServerDescription); } + checkResultMapServerSupport(gpServerDescription); } + private function getExecutionType(gpServerDescription:Object):void + { + executionType = gpServerDescription.executionType; + } + private function checkAMFSupport(gpServerDescription:Object):void { var version:Number = gpServerDescription.currentVersion; @@ -263,6 +250,7 @@ private function gpServerInspector_faultHandler(fault:Fault, token:Object = null):void { //Could not fetch service capabilities + showError(getDefaultString("unableToDetermineGPExecutionType", ErrorMessageUtil.makeHTMLSafe(fault.toString()))); } private function buildUI(config:XML):void From 4564eed0c4cc90fdf26576c12474780da5c44e2b Mon Sep 17 00:00:00 2001 From: jcfranco Date: Wed, 23 Jan 2013 10:53:10 -0800 Subject: [PATCH 041/178] Consolidate logic that handles GP server metadata. --- .../Geoprocessing/GeoprocessingWidget.mxml | 31 ++----------------- 1 file changed, 2 insertions(+), 29 deletions(-) diff --git a/src/widgets/Geoprocessing/GeoprocessingWidget.mxml b/src/widgets/Geoprocessing/GeoprocessingWidget.mxml index 05a71b8..15ab91d 100644 --- a/src/widgets/Geoprocessing/GeoprocessingWidget.mxml +++ b/src/widgets/Geoprocessing/GeoprocessingWidget.mxml @@ -214,37 +214,10 @@ } private function gpServerInspector_resultHandler(gpServerDescription:Object, token:Object = null):void - { - getExecutionType(gpServerDescription); - - if (!hasUseAMFBeenSet) - { - checkAMFSupport(gpServerDescription); - } - - checkResultMapServerSupport(gpServerDescription); - } - - private function getExecutionType(gpServerDescription:Object):void { executionType = gpServerDescription.executionType; - } - - private function checkAMFSupport(gpServerDescription:Object):void - { - var version:Number = gpServerDescription.currentVersion; - if (version >= 10.1) - { - gp.useAMF = true; - } - } - - private function checkResultMapServerSupport(gpServerDescription:Object):void - { - if (gpServerDescription.resultMapServerName) - { - hasResultMapServer = true; - } + gp.useAMF = !hasUseAMFBeenSet && (gpServerDescription.currentVersion >= 10.1); + hasResultMapServer = Boolean(gpServerDescription.resultMapServerName); } private function gpServerInspector_faultHandler(fault:Fault, token:Object = null):void From 581234cc5f7d913c6e4ea558f3c1421cd9450801 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Wed, 23 Jan 2013 11:17:29 -0800 Subject: [PATCH 042/178] Store GP service info in params. --- .../Geoprocessing/GeoprocessingWidget.mxml | 1 + .../Geoprocessing/parameters/BaseParameter.as | 16 ++++++++++++++++ .../Geoprocessing/parameters/IGPParameter.as | 3 +++ .../supportClasses/GPParamHandler.as | 11 ++++++++++- 4 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/widgets/Geoprocessing/GeoprocessingWidget.mxml b/src/widgets/Geoprocessing/GeoprocessingWidget.mxml index 15ab91d..f3ed238 100644 --- a/src/widgets/Geoprocessing/GeoprocessingWidget.mxml +++ b/src/widgets/Geoprocessing/GeoprocessingWidget.mxml @@ -218,6 +218,7 @@ executionType = gpServerDescription.executionType; gp.useAMF = !hasUseAMFBeenSet && (gpServerDescription.currentVersion >= 10.1); hasResultMapServer = Boolean(gpServerDescription.resultMapServerName); + gpParamHandler.setServiceInfo(gpServerDescription); } private function gpServerInspector_faultHandler(fault:Fault, token:Object = null):void diff --git a/src/widgets/Geoprocessing/parameters/BaseParameter.as b/src/widgets/Geoprocessing/parameters/BaseParameter.as index cc9071b..f29cbd8 100644 --- a/src/widgets/Geoprocessing/parameters/BaseParameter.as +++ b/src/widgets/Geoprocessing/parameters/BaseParameter.as @@ -24,6 +24,22 @@ public class BaseParameter implements IGPParameter // //-------------------------------------------------------------------------- + //---------------------------------- + // serviceInfo + //---------------------------------- + + private var _serviceInfo:Object; + + public function get serviceInfo():Object + { + return _serviceInfo ||= {}; + } + + public function set serviceInfo(value:Object):void + { + _serviceInfo = value; + } + //---------------------------------- // label //---------------------------------- diff --git a/src/widgets/Geoprocessing/parameters/IGPParameter.as b/src/widgets/Geoprocessing/parameters/IGPParameter.as index 692d5f4..27dd1d8 100644 --- a/src/widgets/Geoprocessing/parameters/IGPParameter.as +++ b/src/widgets/Geoprocessing/parameters/IGPParameter.as @@ -18,6 +18,9 @@ package widgets.Geoprocessing.parameters public interface IGPParameter { + function get serviceInfo():Object; + function set serviceInfo(value:Object):void; + function get name():String; function get label():String; function get type():String; diff --git a/src/widgets/Geoprocessing/supportClasses/GPParamHandler.as b/src/widgets/Geoprocessing/supportClasses/GPParamHandler.as index 681b414..477144d 100644 --- a/src/widgets/Geoprocessing/supportClasses/GPParamHandler.as +++ b/src/widgets/Geoprocessing/supportClasses/GPParamHandler.as @@ -35,7 +35,6 @@ import widgets.Geoprocessing.parameters.IGPParameter; import widgets.Geoprocessing.parameters.InputParamParser; import widgets.Geoprocessing.parameters.OutputParamParser; - public class GPParamHandler { public function GPParamHandler(paramsXML:XML) @@ -408,5 +407,15 @@ public class GPParamHandler } } } + + public function setServiceInfo(serviceInfo:Object):void + { + var allParams:Array = _inputParams.concat(_outputParams); + + for each (var param:IGPParameter in allParams) + { + param.serviceInfo = serviceInfo; + } + } } } From 9c324cb8e833400746e485cc8fff51e841e220a2 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Wed, 23 Jan 2013 12:36:55 -0800 Subject: [PATCH 043/178] Store data file parameter in input renderer. --- .../input/GPInputDataFileParamItemRenderer.mxml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/widgets/Geoprocessing/renderers/input/GPInputDataFileParamItemRenderer.mxml b/src/widgets/Geoprocessing/renderers/input/GPInputDataFileParamItemRenderer.mxml index 0b0fdaf..bcb359c 100644 --- a/src/widgets/Geoprocessing/renderers/input/GPInputDataFileParamItemRenderer.mxml +++ b/src/widgets/Geoprocessing/renderers/input/GPInputDataFileParamItemRenderer.mxml @@ -24,6 +24,10 @@ creationComplete="init()"> From b2615fdb26c72e9c9098060ca65cd4a8193ac22d Mon Sep 17 00:00:00 2001 From: jcfranco Date: Sun, 27 Jan 2013 19:58:11 -0800 Subject: [PATCH 044/178] Remove unused DataFileParameter method. --- .../Geoprocessing/parameters/DataFileParameter.as | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/src/widgets/Geoprocessing/parameters/DataFileParameter.as b/src/widgets/Geoprocessing/parameters/DataFileParameter.as index bd543fb..0be90a0 100644 --- a/src/widgets/Geoprocessing/parameters/DataFileParameter.as +++ b/src/widgets/Geoprocessing/parameters/DataFileParameter.as @@ -30,17 +30,6 @@ public class DataFileParameter extends BaseParameter private static const VALID_URL_REGEX:RegExp = /^(ht|f)tps?:\/\/[^\s\.]+(\.[^\s\.]+)*((\/|\.)[^\s\.]+)+\/?$/; - //-------------------------------------------------------------------------- - // - // Methods - // - //-------------------------------------------------------------------------- - - private function dataFileString():String - { - return URL_DELIMITER + _defaultValue.url; - } - //-------------------------------------------------------------------------- // // Overridden properties From 174ce396034ccc173ed804817ed3d234a62acd6e Mon Sep 17 00:00:00 2001 From: jcfranco Date: Mon, 28 Jan 2013 09:51:02 -0800 Subject: [PATCH 045/178] Update DataFileParameter to handle item ID. --- .../parameters/DataFileParameter.as | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/widgets/Geoprocessing/parameters/DataFileParameter.as b/src/widgets/Geoprocessing/parameters/DataFileParameter.as index 0be90a0..a5422d4 100644 --- a/src/widgets/Geoprocessing/parameters/DataFileParameter.as +++ b/src/widgets/Geoprocessing/parameters/DataFileParameter.as @@ -27,6 +27,7 @@ public class DataFileParameter extends BaseParameter //-------------------------------------------------------------------------- private static const URL_DELIMITER:String = "url:"; + private static const ITEM_ID_DELIMITER:String = "itemID:"; private static const VALID_URL_REGEX:RegExp = /^(ht|f)tps?:\/\/[^\s\.]+(\.[^\s\.]+)*((\/|\.)[^\s\.]+)+\/?$/; @@ -49,7 +50,7 @@ public class DataFileParameter extends BaseParameter override public function set defaultValue(value:Object):void { - _defaultValue = new DataFile(value.url); + _defaultValue = new DataFile(value.url, value.itemID); } //---------------------------------- @@ -69,13 +70,27 @@ public class DataFileParameter extends BaseParameter override public function defaultValueFromString(description:String):void { - var url:String = description.substr(URL_DELIMITER.length, description.length); - _defaultValue = new DataFile(url); + var dataFile:DataFile = new DataFile(); + + if (description.indexOf(URL_DELIMITER) == 0) + { + dataFile.url = description.substr(URL_DELIMITER.length); + } + else if (description.indexOf(ITEM_ID_DELIMITER) == 0) + { + dataFile.itemID = description.substr(ITEM_ID_DELIMITER.length); + } + + _defaultValue = dataFile; } override public function hasValidValue():Boolean { - if (_defaultValue.url) + if (_defaultValue.itemID) + { + return true; + } + else if (_defaultValue.url) { var validURLIndex:int = _defaultValue.url.search(VALID_URL_REGEX); return validURLIndex == 0; From 70562a9a6e3cecc2aff41117930e29dea4163ce0 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Mon, 28 Jan 2013 10:47:37 -0800 Subject: [PATCH 046/178] Store GP server URL within server metadata object. --- src/widgets/Geoprocessing/GeoprocessingWidget.mxml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/widgets/Geoprocessing/GeoprocessingWidget.mxml b/src/widgets/Geoprocessing/GeoprocessingWidget.mxml index f3ed238..64a9161 100644 --- a/src/widgets/Geoprocessing/GeoprocessingWidget.mxml +++ b/src/widgets/Geoprocessing/GeoprocessingWidget.mxml @@ -204,7 +204,9 @@ urlVars.f = "json"; gpServerInspector.url = getGPServerURL(gp.url); gpServerInspector.proxyURL = gp.proxyURL; - gpServerInspector.execute(urlVars, new AsyncResponder(gpServerInspector_resultHandler, gpServerInspector_faultHandler)); + gpServerInspector.execute(urlVars, new AsyncResponder(gpServerInspector_resultHandler, + gpServerInspector_faultHandler, + gpServerInspector.url)); } private function getGPServerURL(url:String):String @@ -213,11 +215,14 @@ return url.substr(0, lastPathIndex); } - private function gpServerInspector_resultHandler(gpServerDescription:Object, token:Object = null):void + private function gpServerInspector_resultHandler(gpServerDescription:Object, gpServerURL:String):void { executionType = gpServerDescription.executionType; gp.useAMF = !hasUseAMFBeenSet && (gpServerDescription.currentVersion >= 10.1); hasResultMapServer = Boolean(gpServerDescription.resultMapServerName); + + gpServerDescription.url = gpServerURL; + gpServerDescription.proxyURL = gp.proxyURL; gpParamHandler.setServiceInfo(gpServerDescription); } From 548afb01db3f50c579b5c5b319b4dc7ca7713cdf Mon Sep 17 00:00:00 2001 From: jcfranco Date: Mon, 28 Jan 2013 11:36:50 -0800 Subject: [PATCH 047/178] Store upload info in GP server metadata object. Defer GP UI initialization until metadata requests have finished. --- .../Geoprocessing/GeoprocessingWidget.mxml | 97 +++++++++++++------ 1 file changed, 68 insertions(+), 29 deletions(-) diff --git a/src/widgets/Geoprocessing/GeoprocessingWidget.mxml b/src/widgets/Geoprocessing/GeoprocessingWidget.mxml index 64a9161..9f9703d 100644 --- a/src/widgets/Geoprocessing/GeoprocessingWidget.mxml +++ b/src/widgets/Geoprocessing/GeoprocessingWidget.mxml @@ -95,6 +95,8 @@ private var hasUseAMFBeenSet:Boolean; private var largestResultImageLayerExtent:Extent; private var graphicEditor:GraphicEditor; + private var inputLabel:String; + private var outputLabel:String; [Bindable] private var submitLabel:String; @@ -156,39 +158,13 @@ hasUseAMFBeenSet = true; } - fetchGPServerDescription(); - submitLabel = configXML.labels.submitlabel || getDefaultString('gpSubmitLabel'); clearFeatureLabel = configXML.labels.clearfeaturelabel || getDefaultString("clearLabel"); helpLabel = configXML.labels.helplabel || getDefaultString("helpLabel"); - var inputLabel:String = configXML.labels.inputlabel || getDefaultString("inputLabel"); - var outputLabel:String = configXML.labels.outputlabel || getDefaultString("outputLabel"); - - buildUI(configXML); - - initGraphicContextMenu(); - drawTool.map = map; - graphicEditor = new GraphicEditor(map); - - visibleGraphicsLayersWatcher.map = map; - visibleGraphicsLayersWatcher.startWatching(); - inputParamsDataGroup.visibleGraphicsLayers = visibleGraphicsLayersWatcher.visibleGraphicsLayers; + inputLabel = configXML.labels.inputlabel || getDefaultString("inputLabel"); + outputLabel = configXML.labels.outputlabel || getDefaultString("outputLabel"); - inputParamsDataGroup.addEventListener(FeatureInputParamEvent.DRAW, inputParamsDataGroup_drawFeatureHandler, false, 0, true); - inputParamsDataGroup.addEventListener(FeatureInputParamEvent.CLEAR, inputParamsDataGroup_clearFeatureHandler, false, 0, true); - - if (gpParamHandler.hasMapExtentInputParams()) - { - map.addEventListener(ExtentEvent.EXTENT_CHANGE, map_extentChangeHandler); - gpParamHandler.updateMapExtentInputParams(map.extent) - } - - needsToShowOutputView = gpParamHandler.hasVisibleOutput(); - if (needsToShowOutputView) - { - wTemplate.addTitlebarButton("assets/images/GeoprocessingTool16.png", inputLabel, inputTitlebarButton_clickHandler); - wTemplate.addTitlebarButton("assets/images/i_table.png", outputLabel, outputTitlebarButton_clickHandler); - } + fetchGPServerDescription(); } catch (error:Error) { @@ -223,13 +199,76 @@ gpServerDescription.url = gpServerURL; gpServerDescription.proxyURL = gp.proxyURL; + checkIfUploadSupported(gpServerDescription); gpParamHandler.setServiceInfo(gpServerDescription); } + private function checkIfUploadSupported(gpServerDescription:Object):void + { + if (gpServerDescription.currentVersion >= 10.1) + { + var uploadsInfoRequest:JSONTask = new JSONTask(gpServerDescription.url + "uploads/info"); + uploadsInfoRequest.proxyURL = gpServerDescription.proxyURL; + var urlVars:URLVariables = new URLVariables(); + urlVars.f = "json"; + uploadsInfoRequest.execute(urlVars, new AsyncResponder(uploadsInfoRequest_resultHandler, + uploadsInfoRequest_faultHandler, + gpServerDescription)); + } + else + { + gpServerDescription.supportsUploads = false; + continueInitialization(); + } + } + + private function uploadsInfoRequest_resultHandler(response:Object, gpServerDescription:Object):void + { + gpServerDescription.maxUploadFileSize = response.maxUploadFileSize; //TODO: needs validation? + gpServerDescription.supportsUploads = true; + continueInitialization(); + } + + protected function uploadsInfoRequest_faultHandler(fault:Fault, gpServerDescription:Object):void + { + gpServerDescription.supportsUploads = false; + continueInitialization(); + } + private function gpServerInspector_faultHandler(fault:Fault, token:Object = null):void { //Could not fetch service capabilities showError(getDefaultString("unableToDetermineGPExecutionType", ErrorMessageUtil.makeHTMLSafe(fault.toString()))); + continueInitialization(); + } + + private function continueInitialization():void + { + buildUI(configXML); + + initGraphicContextMenu(); + drawTool.map = map; + graphicEditor = new GraphicEditor(map); + + visibleGraphicsLayersWatcher.map = map; + visibleGraphicsLayersWatcher.startWatching(); + inputParamsDataGroup.visibleGraphicsLayers = visibleGraphicsLayersWatcher.visibleGraphicsLayers; + + inputParamsDataGroup.addEventListener(FeatureInputParamEvent.DRAW, inputParamsDataGroup_drawFeatureHandler, false, 0, true); + inputParamsDataGroup.addEventListener(FeatureInputParamEvent.CLEAR, inputParamsDataGroup_clearFeatureHandler, false, 0, true); + + if (gpParamHandler.hasMapExtentInputParams()) + { + map.addEventListener(ExtentEvent.EXTENT_CHANGE, map_extentChangeHandler); + gpParamHandler.updateMapExtentInputParams(map.extent) + } + + needsToShowOutputView = gpParamHandler.hasVisibleOutput(); + if (needsToShowOutputView) + { + wTemplate.addTitlebarButton("assets/images/GeoprocessingTool16.png", inputLabel, inputTitlebarButton_clickHandler); + wTemplate.addTitlebarButton("assets/images/i_table.png", outputLabel, outputTitlebarButton_clickHandler); + } } private function buildUI(config:XML):void From ed99b84f6f38a6d3fb4cfc2f31b1647b4f151a8e Mon Sep 17 00:00:00 2001 From: jcfranco Date: Mon, 28 Jan 2013 16:12:03 -0800 Subject: [PATCH 048/178] Remove unused draw & edit tools. --- src/widgets/Geoprocessing/GeoprocessingWidget.mxml | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/widgets/Geoprocessing/GeoprocessingWidget.mxml b/src/widgets/Geoprocessing/GeoprocessingWidget.mxml index 9f9703d..669698c 100644 --- a/src/widgets/Geoprocessing/GeoprocessingWidget.mxml +++ b/src/widgets/Geoprocessing/GeoprocessingWidget.mxml @@ -247,7 +247,6 @@ buildUI(configXML); initGraphicContextMenu(); - drawTool.map = map; graphicEditor = new GraphicEditor(map); visibleGraphicsLayersWatcher.map = map; @@ -1005,8 +1004,6 @@ getResultDataComplete="gp_resultDataCompleteHandler(event)" jobComplete="gp_jobCompleteHandler(event)" useAMF="false"/> - - From 61400712726375e10bf0121af17d05f2f91cd1ee Mon Sep 17 00:00:00 2001 From: jcfranco Date: Mon, 28 Jan 2013 16:12:53 -0800 Subject: [PATCH 049/178] Improve readability of GeoprocessingWidget. --- src/widgets/Geoprocessing/GeoprocessingWidget.mxml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/widgets/Geoprocessing/GeoprocessingWidget.mxml b/src/widgets/Geoprocessing/GeoprocessingWidget.mxml index 669698c..3ea8b5e 100644 --- a/src/widgets/Geoprocessing/GeoprocessingWidget.mxml +++ b/src/widgets/Geoprocessing/GeoprocessingWidget.mxml @@ -997,6 +997,7 @@ } ]]> + + + + + + + + + + + Date: Mon, 28 Jan 2013 16:33:03 -0800 Subject: [PATCH 050/178] Add support for uploading files for GP DataFile input params. --- locale/en_US/ViewerStrings.properties | 9 + .../GPInputDataFileParamItemRenderer.mxml | 212 ++++++++++++++++-- 2 files changed, 208 insertions(+), 13 deletions(-) diff --git a/locale/en_US/ViewerStrings.properties b/locale/en_US/ViewerStrings.properties index 51fdb2d..824084c 100644 --- a/locale/en_US/ViewerStrings.properties +++ b/locale/en_US/ViewerStrings.properties @@ -108,6 +108,12 @@ layerDataRetrievalError=Could not retrieve layer data. couldNotDeleteFeature=Could not delete feature couldNotUpdateFeatureError=Could not update feature, Restoring old value cannotDisplayResult=Cannot display result on map. +uploadSecurityError=Encountered security error while uploading file: {0} +uploadIOError=Encountered IO error while uploading file: {0} +uploadUnknownError=Unknown error occurred while uploading file. +couldNotProcessUploadResponse=Could not process upload complete response. +fileExceedsAllowedUploadSize=File exceeds max allowed upload size. ({0} MB) +fileUploadError=File upload error ########## Base Widget and MapManager configFileCrossDomain=Possible crossdomain issue: {0}{1} @@ -335,6 +341,9 @@ outputLabel=Output copyToClipboard=Copy to Clipboard unsupportedInputType={0} input is not supported currentExtentWillBeUsedAsInput=The current extent will be used as input. +fileURL=File URL +uploadFile=Upload file +or=or ########## Popups zoomLabel=Zoom to diff --git a/src/widgets/Geoprocessing/renderers/input/GPInputDataFileParamItemRenderer.mxml b/src/widgets/Geoprocessing/renderers/input/GPInputDataFileParamItemRenderer.mxml index bcb359c..1e37215 100644 --- a/src/widgets/Geoprocessing/renderers/input/GPInputDataFileParamItemRenderer.mxml +++ b/src/widgets/Geoprocessing/renderers/input/GPInputDataFileParamItemRenderer.mxml @@ -20,26 +20,29 @@ xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" width="100%" - autoDrawBackground="false" - creationComplete="init()"> + autoDrawBackground="false"> @@ -55,20 +203,58 @@ + valid="updateURL()"/> + + + + + + + + + + + + + + + + + + + + + From f68ee3e8c94dcf4afa90f9c5aff89339e13f110d Mon Sep 17 00:00:00 2001 From: jcfranco Date: Tue, 29 Jan 2013 10:24:41 -0800 Subject: [PATCH 051/178] Use proxy URL (if available) for uploading. --- .../input/GPInputDataFileParamItemRenderer.mxml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/widgets/Geoprocessing/renderers/input/GPInputDataFileParamItemRenderer.mxml b/src/widgets/Geoprocessing/renderers/input/GPInputDataFileParamItemRenderer.mxml index 1e37215..96211c2 100644 --- a/src/widgets/Geoprocessing/renderers/input/GPInputDataFileParamItemRenderer.mxml +++ b/src/widgets/Geoprocessing/renderers/input/GPInputDataFileParamItemRenderer.mxml @@ -82,8 +82,14 @@ if (toMegaBytes(fileRef.size) <= maxAllowedUploadSizeInMB) { addFileReferenceListeners(); - fileRef.upload(createURLRequest(data.serviceInfo.url + "uploads/upload"), - UPLOAD_FILE_PARAM_NAME); + + var uploadURL:String = param.serviceInfo.url + "uploads/upload"; + if (param.serviceInfo.proxyURL) + { + uploadURL = param.serviceInfo.proxyURL + "?" + uploadURL; + } + + fileRef.upload(createURLRequest(uploadURL), UPLOAD_FILE_PARAM_NAME); currentState = "uploading"; progressBar.setProgress(0, toMegaBytes(fileRef.size)); } From ef443631593b59742c16c89e0803ff5fb7a9dbc1 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Tue, 29 Jan 2013 12:00:35 -0800 Subject: [PATCH 052/178] Add support for dispatching errors from input GP param item renderers. --- .../Geoprocessing/GeoprocessingWidget.mxml | 9 +++- .../GPInputDataFileParamItemRenderer.mxml | 6 +-- .../supportClasses/InputParamDataGroup.mxml | 3 ++ .../supportClasses/ParamErrorEvent.as | 51 +++++++++++++++++++ 4 files changed, 64 insertions(+), 5 deletions(-) create mode 100644 src/widgets/Geoprocessing/supportClasses/ParamErrorEvent.as diff --git a/src/widgets/Geoprocessing/GeoprocessingWidget.mxml b/src/widgets/Geoprocessing/GeoprocessingWidget.mxml index 3ea8b5e..b1305bb 100644 --- a/src/widgets/Geoprocessing/GeoprocessingWidget.mxml +++ b/src/widgets/Geoprocessing/GeoprocessingWidget.mxml @@ -71,6 +71,7 @@ import widgets.Geoprocessing.supportClasses.GPParamHandler; import widgets.Geoprocessing.supportClasses.GraphicEditor; import widgets.Geoprocessing.supportClasses.LayerOrderer; + import widgets.Geoprocessing.supportClasses.ParamErrorEvent; import widgets.Geoprocessing.supportClasses.VisibleGraphicsLayersWatcher; private const SYNCHRONOUS:String = "esriExecutionTypeSynchronous"; @@ -995,6 +996,11 @@ } } } + + protected function paramDataGroup_errorHandler(event:ParamErrorEvent):void + { + showError(event.message, event.title); + } ]]> @@ -1029,7 +1035,8 @@ includeIn="input" itemCreationPolicy="immediate"> + width="100%" height="100%" + error="paramDataGroup_errorHandler(event)"/> + + [Event(name="error", type="widgets.Geoprocessing.supportClasses.ParamErrorEvent")] + Date: Tue, 29 Jan 2013 12:39:17 -0800 Subject: [PATCH 053/178] Remove config XML dependency for initializing GP widget UI. --- .../Geoprocessing/GeoprocessingWidget.mxml | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/src/widgets/Geoprocessing/GeoprocessingWidget.mxml b/src/widgets/Geoprocessing/GeoprocessingWidget.mxml index b1305bb..6344513 100644 --- a/src/widgets/Geoprocessing/GeoprocessingWidget.mxml +++ b/src/widgets/Geoprocessing/GeoprocessingWidget.mxml @@ -98,6 +98,8 @@ private var graphicEditor:GraphicEditor; private var inputLabel:String; private var outputLabel:String; + private var taskDescription:String; + private var taskHelpURL:String; [Bindable] private var submitLabel:String; @@ -159,6 +161,9 @@ hasUseAMFBeenSet = true; } + taskDescription = configXML.description[0]; + taskHelpURL = configXML.helpurl[0]; + submitLabel = configXML.labels.submitlabel || getDefaultString('gpSubmitLabel'); clearFeatureLabel = configXML.labels.clearfeaturelabel || getDefaultString("clearLabel"); helpLabel = configXML.labels.helplabel || getDefaultString("helpLabel"); @@ -245,7 +250,7 @@ private function continueInitialization():void { - buildUI(configXML); + buildUI(); initGraphicContextMenu(); graphicEditor = new GraphicEditor(map); @@ -271,22 +276,19 @@ } } - private function buildUI(config:XML):void + private function buildUI():void { - if (configXML.description[0]) + if (taskDescription) { - descriptionText.text = configXML.description; - if (descriptionText.text) - { - descriptionText.visible = true; - descriptionText.includeInLayout = true; - } + descriptionText.text = taskDescription; + descriptionText.visible = true; + descriptionText.includeInLayout = true; } - if (configXML.helpurl[0]) + if (taskHelpURL) { var color:uint = getStyle('color'); - var linkText:String = "" + helpLabel + ""; + var linkText:String = "" + helpLabel + ""; helpLink.textFlow = TextConverter.importToFlow(linkText, TextConverter.TEXT_FIELD_HTML_FORMAT); } From c137a493f8193f34ee895d059e71a299b9cb98c8 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Tue, 29 Jan 2013 14:53:40 -0800 Subject: [PATCH 054/178] Show loading icon when making GP server metadata requests. --- src/widgets/Geoprocessing/GeoprocessingWidget.mxml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/widgets/Geoprocessing/GeoprocessingWidget.mxml b/src/widgets/Geoprocessing/GeoprocessingWidget.mxml index 6344513..c015860 100644 --- a/src/widgets/Geoprocessing/GeoprocessingWidget.mxml +++ b/src/widgets/Geoprocessing/GeoprocessingWidget.mxml @@ -274,6 +274,8 @@ wTemplate.addTitlebarButton("assets/images/GeoprocessingTool16.png", inputLabel, inputTitlebarButton_clickHandler); wTemplate.addTitlebarButton("assets/images/i_table.png", outputLabel, outputTitlebarButton_clickHandler); } + + setInputState(); } private function buildUI():void @@ -1016,6 +1018,7 @@ + @@ -1028,6 +1031,8 @@ + + Date: Tue, 29 Jan 2013 18:06:40 -0800 Subject: [PATCH 055/178] Update GP file upload UX. --- .../GPInputDataFileParamItemRenderer.mxml | 65 ++++++++++++------- 1 file changed, 43 insertions(+), 22 deletions(-) diff --git a/src/widgets/Geoprocessing/renderers/input/GPInputDataFileParamItemRenderer.mxml b/src/widgets/Geoprocessing/renderers/input/GPInputDataFileParamItemRenderer.mxml index 61496b2..c051b0b 100644 --- a/src/widgets/Geoprocessing/renderers/input/GPInputDataFileParamItemRenderer.mxml +++ b/src/widgets/Geoprocessing/renderers/input/GPInputDataFileParamItemRenderer.mxml @@ -53,7 +53,7 @@ if (!param || !param.serviceInfo.supportsUploads) { - currentState = "urlInputOnly"; + currentState = "urlInputModeOnly"; } } @@ -133,7 +133,7 @@ catch (error:Error) { dispatchError(LocalizationUtil.getDefaultString('couldNotProcessUploadResponse'), LocalizationUtil.getDefaultString('fileUploadError')); - currentState = "noFileSet"; + currentState = "inputModeSelection"; } } @@ -148,12 +148,12 @@ else if (response.error) { dispatchError(response.error.message, LocalizationUtil.getDefaultString('fileUploadError')); - currentState = "noFileSet"; + currentState = "inputModeSelection"; } else { dispatchError(LocalizationUtil.getDefaultString('uploadUnknownError'), LocalizationUtil.getDefaultString('fileUploadError')); - currentState = "noFileSet"; + currentState = "inputModeSelection"; } } @@ -166,7 +166,7 @@ { fileRef.cancel(); removeFileReferenceListeners(); - currentState = "noFileSet"; + currentState = "inputModeSelection"; } private function removeFileReferenceListeners():void @@ -181,14 +181,14 @@ { removeFileReferenceListeners(); dispatchError(LocalizationUtil.getDefaultString('uploadIOError', event.errorID), LocalizationUtil.getDefaultString('fileUploadError')); - currentState = "noFileSet"; + currentState = "inputModeSelection"; } private function fileRef_securityErrorHandler(event:SecurityErrorEvent):void { removeFileReferenceListeners(); dispatchError(LocalizationUtil.getDefaultString('uploadSecurityError', event.errorID), LocalizationUtil.getDefaultString('fileUploadError')); - currentState = "noFileSet"; + currentState = "inputModeSelection"; } private function dispatchError(message:String, title:String = null):void @@ -199,13 +199,23 @@ private function removeFile():void { param.defaultValue.itemID = null; - currentState = "noFileSet"; + currentState = "inputModeSelection"; + } + + private function removeURL():void + { + clearURL(); + urlInput.text = ""; + currentState = "inputModeSelection"; } ]]> - - + + - + + + - - - - - + + + + + + label="{LocalizationUtil.getDefaultString('attachmentCancelLabel')}"/> + + + + From 44ab9a8c1170e87a3323fcb2d8240d9bd53bae88 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Thu, 31 Jan 2013 17:35:21 -0800 Subject: [PATCH 056/178] Use different label for URL input mode (GPDataFile). --- locale/en_US/ViewerStrings.properties | 1 + .../renderers/input/GPInputDataFileParamItemRenderer.mxml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/locale/en_US/ViewerStrings.properties b/locale/en_US/ViewerStrings.properties index 824084c..2fddf38 100644 --- a/locale/en_US/ViewerStrings.properties +++ b/locale/en_US/ViewerStrings.properties @@ -341,6 +341,7 @@ outputLabel=Output copyToClipboard=Copy to Clipboard unsupportedInputType={0} input is not supported currentExtentWillBeUsedAsInput=The current extent will be used as input. +byURL=By URL fileURL=File URL uploadFile=Upload file or=or diff --git a/src/widgets/Geoprocessing/renderers/input/GPInputDataFileParamItemRenderer.mxml b/src/widgets/Geoprocessing/renderers/input/GPInputDataFileParamItemRenderer.mxml index c051b0b..ea2d8c3 100644 --- a/src/widgets/Geoprocessing/renderers/input/GPInputDataFileParamItemRenderer.mxml +++ b/src/widgets/Geoprocessing/renderers/input/GPInputDataFileParamItemRenderer.mxml @@ -246,7 +246,7 @@ + label="{LocalizationUtil.getDefaultString('byURL')}"/> Date: Thu, 31 Jan 2013 17:37:36 -0800 Subject: [PATCH 057/178] Use text instead of buttons to reset GPDataFile input mode selection. Change text of URL input mode option. --- .../GPInputDataFileParamItemRenderer.mxml | 27 ++++++++++++------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/src/widgets/Geoprocessing/renderers/input/GPInputDataFileParamItemRenderer.mxml b/src/widgets/Geoprocessing/renderers/input/GPInputDataFileParamItemRenderer.mxml index ea2d8c3..16d4b03 100644 --- a/src/widgets/Geoprocessing/renderers/input/GPInputDataFileParamItemRenderer.mxml +++ b/src/widgets/Geoprocessing/renderers/input/GPInputDataFileParamItemRenderer.mxml @@ -255,9 +255,12 @@ labelPlacement="center" mode="manual"/> - + - + - + From 4415e959a02d1a10abd80fbd5241a04063bad341 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Thu, 31 Jan 2013 22:19:46 -0800 Subject: [PATCH 058/178] Fix issue where previous URL could be seen briefly when clearing URL and selecting URL input again. --- .../renderers/input/GPInputDataFileParamItemRenderer.mxml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/widgets/Geoprocessing/renderers/input/GPInputDataFileParamItemRenderer.mxml b/src/widgets/Geoprocessing/renderers/input/GPInputDataFileParamItemRenderer.mxml index 16d4b03..a9df7ad 100644 --- a/src/widgets/Geoprocessing/renderers/input/GPInputDataFileParamItemRenderer.mxml +++ b/src/widgets/Geoprocessing/renderers/input/GPInputDataFileParamItemRenderer.mxml @@ -206,6 +206,8 @@ { clearURL(); urlInput.text = ""; + urlInput.errorString = ""; + urlInput.validateNow(); currentState = "inputModeSelection"; } ]]> From 13fa7de61e848758ff4eda3895b9c657d8e5b5c9 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Tue, 5 Feb 2013 15:06:56 -0800 Subject: [PATCH 059/178] Disable file upload mode if max upload file size is invalid. --- src/widgets/Geoprocessing/GeoprocessingWidget.mxml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/widgets/Geoprocessing/GeoprocessingWidget.mxml b/src/widgets/Geoprocessing/GeoprocessingWidget.mxml index c015860..828c461 100644 --- a/src/widgets/Geoprocessing/GeoprocessingWidget.mxml +++ b/src/widgets/Geoprocessing/GeoprocessingWidget.mxml @@ -230,8 +230,8 @@ private function uploadsInfoRequest_resultHandler(response:Object, gpServerDescription:Object):void { - gpServerDescription.maxUploadFileSize = response.maxUploadFileSize; //TODO: needs validation? - gpServerDescription.supportsUploads = true; + gpServerDescription.maxUploadFileSize = response.maxUploadFileSize; + gpServerDescription.supportsUploads = !isNaN(gpServerDescription.maxUploadFileSize); continueInitialization(); } From bbd6530f8dab662984fe6358692e698fae6f0c7e Mon Sep 17 00:00:00 2001 From: Robert Scheitlin Date: Thu, 31 Jan 2013 12:48:52 -0600 Subject: [PATCH 060/178] Fix look of widgetgoup hover state --- .../WidgetListItemRenderer.mxml | 53 ++++++++++++++++--- 1 file changed, 45 insertions(+), 8 deletions(-) diff --git a/src/widgets/HeaderController/WidgetListItemRenderer.mxml b/src/widgets/HeaderController/WidgetListItemRenderer.mxml index 1f75b99..455365b 100644 --- a/src/widgets/HeaderController/WidgetListItemRenderer.mxml +++ b/src/widgets/HeaderController/WidgetListItemRenderer.mxml @@ -21,7 +21,7 @@ xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:HeaderController="widgets.HeaderController.*" width="100%" - autoDrawBackground="true" + autoDrawBackground="false" buttonMode="true" click="itemrenderer_clickHandler(event)" dataChange="itemrenderer_dataChangeHandler(event)" @@ -40,6 +40,18 @@ [Bindable] private var widgetItem:WidgetItem; + + [Bindable] + private var ulRad:int = 0; + + [Bindable] + private var urRad:int = 0; + + [Bindable] + private var llRad:int = 0; + + [Bindable] + private var lrRad:int = 0; private function itemrenderer_dataChangeHandler(event:FlexEvent):void { @@ -51,6 +63,31 @@ // set style on the label widgetLabel.setStyle("textAlign", TextAlign.CENTER); widgetLabel.text = widgetItem.label; + + if(itemIndex == 0) + { + llRad = 0; + lrRad = 0; + ulRad = 4; + urRad = 4; + scs.alpha = 0.3; + } + else if(itemIndex == event.currentTarget.parent.dataProvider.length -1) + { + llRad = 4; + lrRad = 4; + ulRad = 0; + urRad = 0; + scs.alpha = 0; + } + else + { + llRad = 0; + lrRad = 0; + ulRad = 0; + urRad = 0; + scs.alpha = 0.3; + } } private function itemrenderer_clickHandler(event:MouseEvent):void @@ -66,9 +103,9 @@
    - + - + - @@ -106,4 +144,3 @@ - From 3544fe6a3043974758a9a904f9f1a3cb09ae819d Mon Sep 17 00:00:00 2001 From: jcfranco Date: Thu, 31 Jan 2013 14:23:00 -0800 Subject: [PATCH 061/178] Apply formatting. --- .../WidgetListItemRenderer.mxml | 28 ++++++++++++------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/src/widgets/HeaderController/WidgetListItemRenderer.mxml b/src/widgets/HeaderController/WidgetListItemRenderer.mxml index 455365b..14d6513 100644 --- a/src/widgets/HeaderController/WidgetListItemRenderer.mxml +++ b/src/widgets/HeaderController/WidgetListItemRenderer.mxml @@ -40,16 +40,16 @@ [Bindable] private var widgetItem:WidgetItem; - + [Bindable] private var ulRad:int = 0; - + [Bindable] private var urRad:int = 0; - + [Bindable] private var llRad:int = 0; - + [Bindable] private var lrRad:int = 0; @@ -63,8 +63,8 @@ // set style on the label widgetLabel.setStyle("textAlign", TextAlign.CENTER); widgetLabel.text = widgetItem.label; - - if(itemIndex == 0) + + if (itemIndex == 0) { llRad = 0; lrRad = 0; @@ -72,7 +72,7 @@ urRad = 4; scs.alpha = 0.3; } - else if(itemIndex == event.currentTarget.parent.dataProvider.length -1) + else if (itemIndex == event.currentTarget.parent.dataProvider.length - 1) { llRad = 4; lrRad = 4; @@ -104,8 +104,14 @@ + bottomLeftRadiusX="{llRad}" + bottomLeftRadiusY="{llRad}" + bottomRightRadiusX="{lrRad}" + bottomRightRadiusY="{lrRad}" + topLeftRadiusX="{ulRad}" + topLeftRadiusY="{ulRad}" + topRightRadiusX="{urRad}" + topRightRadiusY="{urRad}"> Date: Thu, 31 Jan 2013 16:09:00 -0800 Subject: [PATCH 062/178] Replace divider ID with comment since it's not referenced. --- src/widgets/HeaderController/WidgetListItemRenderer.mxml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/widgets/HeaderController/WidgetListItemRenderer.mxml b/src/widgets/HeaderController/WidgetListItemRenderer.mxml index 14d6513..099f519 100644 --- a/src/widgets/HeaderController/WidgetListItemRenderer.mxml +++ b/src/widgets/HeaderController/WidgetListItemRenderer.mxml @@ -141,7 +141,9 @@ maxDisplayedLines="3" showTruncationTip="true"/> - + + + Date: Thu, 31 Jan 2013 16:34:06 -0800 Subject: [PATCH 063/178] Clean up logic to determine if widget list item renderer is last. --- .../HeaderController/WidgetListItemRenderer.mxml | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/widgets/HeaderController/WidgetListItemRenderer.mxml b/src/widgets/HeaderController/WidgetListItemRenderer.mxml index 099f519..c8a5cb5 100644 --- a/src/widgets/HeaderController/WidgetListItemRenderer.mxml +++ b/src/widgets/HeaderController/WidgetListItemRenderer.mxml @@ -36,6 +36,8 @@ import mx.events.FlexEvent; + import spark.components.DataGroup; + private const WIDGET_ITEM_CLICK:String = "widgetListItemClick"; [Bindable] @@ -53,6 +55,8 @@ [Bindable] private var lrRad:int = 0; + private var isLastItem:Boolean; + private function itemrenderer_dataChangeHandler(event:FlexEvent):void { widgetItem = data as WidgetItem; @@ -72,7 +76,7 @@ urRad = 4; scs.alpha = 0.3; } - else if (itemIndex == event.currentTarget.parent.dataProvider.length - 1) + else if (isLastItem) { llRad = 4; lrRad = 4; @@ -90,6 +94,14 @@ } } + override public function set itemIndex(value:int):void + { + super.itemIndex = value; + + var dataGroup:DataGroup = parent as DataGroup; + isLastItem = (dataGroup && (value == dataGroup.numElements - 1)); + } + private function itemrenderer_clickHandler(event:MouseEvent):void { dispatchEvent(new Event(WIDGET_ITEM_CLICK, true)); // bubbles From 370ce437ccc07076d929e9672e7e60e077047e41 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Mon, 4 Feb 2013 10:07:13 -0800 Subject: [PATCH 064/178] Consolidate radius variables to upper & lower. --- .../WidgetListItemRenderer.mxml | 50 ++++++++----------- 1 file changed, 22 insertions(+), 28 deletions(-) diff --git a/src/widgets/HeaderController/WidgetListItemRenderer.mxml b/src/widgets/HeaderController/WidgetListItemRenderer.mxml index c8a5cb5..1518e77 100644 --- a/src/widgets/HeaderController/WidgetListItemRenderer.mxml +++ b/src/widgets/HeaderController/WidgetListItemRenderer.mxml @@ -44,16 +44,10 @@ private var widgetItem:WidgetItem; [Bindable] - private var ulRad:int = 0; + private var upperRad:int = 0; [Bindable] - private var urRad:int = 0; - - [Bindable] - private var llRad:int = 0; - - [Bindable] - private var lrRad:int = 0; + private var lowerRad:int = 0; private var isLastItem:Boolean; @@ -70,26 +64,26 @@ if (itemIndex == 0) { - llRad = 0; - lrRad = 0; - ulRad = 4; - urRad = 4; + lowerRad = 0; + lowerRad = 0; + upperRad = 4; + upperRad = 4; scs.alpha = 0.3; } else if (isLastItem) { - llRad = 4; - lrRad = 4; - ulRad = 0; - urRad = 0; + lowerRad = 4; + lowerRad = 4; + upperRad = 0; + upperRad = 0; scs.alpha = 0; } else { - llRad = 0; - lrRad = 0; - ulRad = 0; - urRad = 0; + lowerRad = 0; + lowerRad = 0; + upperRad = 0; + upperRad = 0; scs.alpha = 0.3; } } @@ -116,14 +110,14 @@ + bottomLeftRadiusX="{lowerRad}" + bottomLeftRadiusY="{lowerRad}" + bottomRightRadiusX="{lowerRad}" + bottomRightRadiusY="{lowerRad}" + topLeftRadiusX="{upperRad}" + topLeftRadiusY="{upperRad}" + topRightRadiusX="{upperRad}" + topRightRadiusY="{upperRad}"> Date: Wed, 6 Feb 2013 10:19:06 -0800 Subject: [PATCH 065/178] Remove redundant radius variable setting. --- src/widgets/HeaderController/WidgetListItemRenderer.mxml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/widgets/HeaderController/WidgetListItemRenderer.mxml b/src/widgets/HeaderController/WidgetListItemRenderer.mxml index 1518e77..c06759f 100644 --- a/src/widgets/HeaderController/WidgetListItemRenderer.mxml +++ b/src/widgets/HeaderController/WidgetListItemRenderer.mxml @@ -65,24 +65,18 @@ if (itemIndex == 0) { lowerRad = 0; - lowerRad = 0; - upperRad = 4; upperRad = 4; scs.alpha = 0.3; } else if (isLastItem) { - lowerRad = 4; lowerRad = 4; upperRad = 0; - upperRad = 0; scs.alpha = 0; } else { lowerRad = 0; - lowerRad = 0; - upperRad = 0; upperRad = 0; scs.alpha = 0.3; } From f0fd79bd5edc62599bfe4830b4ba726e4a7533f5 Mon Sep 17 00:00:00 2001 From: Sarthak Datt Date: Wed, 6 Feb 2013 11:36:26 -0800 Subject: [PATCH 066/178] Avoid default label for doc legend item --- src/com/esri/viewer/components/toc/tocClasses/TocLegendItem.as | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/esri/viewer/components/toc/tocClasses/TocLegendItem.as b/src/com/esri/viewer/components/toc/tocClasses/TocLegendItem.as index 9660940..1393696 100644 --- a/src/com/esri/viewer/components/toc/tocClasses/TocLegendItem.as +++ b/src/com/esri/viewer/components/toc/tocClasses/TocLegendItem.as @@ -30,7 +30,7 @@ public class TocLegendItem extends TocItem super(parentItem); _legendItemInfo = legendItemInfo; - label = legendItemInfo.label; + label = legendItemInfo.label ? legendItemInfo.label : " "; } //-------------------------------------------------------------------------- From 5ef4594a94af95ea7c4c6ff18fe6ac9ef76cf0ef Mon Sep 17 00:00:00 2001 From: Sarthak Datt Date: Wed, 6 Feb 2013 11:38:05 -0800 Subject: [PATCH 067/178] check for null layerLegendInfo --- .../viewer/components/toc/tocClasses/TocMapLayerItem.as | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/com/esri/viewer/components/toc/tocClasses/TocMapLayerItem.as b/src/com/esri/viewer/components/toc/tocClasses/TocMapLayerItem.as index ddc5a84..bc8e61e 100644 --- a/src/com/esri/viewer/components/toc/tocClasses/TocMapLayerItem.as +++ b/src/com/esri/viewer/components/toc/tocClasses/TocMapLayerItem.as @@ -299,10 +299,13 @@ public class TocMapLayerItem extends TocItem { for each (var layerLegendInfo:LayerLegendInfo in arr) { - _layerLegendInfos.push(layerLegendInfo); - if (layerLegendInfo.layerLegendInfos) + if (layerLegendInfo) // check if layerLegendInfo exists { - getLayerLegendInfos(layerLegendInfo.layerLegendInfos); + _layerLegendInfos.push(layerLegendInfo); + if (layerLegendInfo.layerLegendInfos) + { + getLayerLegendInfos(layerLegendInfo.layerLegendInfos); + } } } } From 6a4d3303785088d5053684aeb60e4b8c05180b29 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Mon, 4 Feb 2013 21:06:31 -0800 Subject: [PATCH 068/178] Ignore GP output parameters with visible property set to false. --- src/widgets/Geoprocessing/GeoprocessingWidget.mxml | 11 +++++++++++ .../Geoprocessing/parameters/OutputParamParser.as | 1 + 2 files changed, 12 insertions(+) diff --git a/src/widgets/Geoprocessing/GeoprocessingWidget.mxml b/src/widgets/Geoprocessing/GeoprocessingWidget.mxml index 828c461..dce9a47 100644 --- a/src/widgets/Geoprocessing/GeoprocessingWidget.mxml +++ b/src/widgets/Geoprocessing/GeoprocessingWidget.mxml @@ -615,6 +615,12 @@ private function processResultImageLayer(paramName:String):void { + var outputParam:IGPParameter = gpParamHandler.findOutputParamByName(paramName); + if (!outputParam.visible) + { + return; + } + var lastExecutedJob:JobInfo = gp.submitJobLastResult; var resultImageLayer:GPResultImageLayer = gp.getResultImageLayer(lastExecutedJob.jobId, paramName); resultImageLayer.id = paramName; @@ -637,6 +643,11 @@ var resultDataType:String = parameterValue.dataType; var outputParam:IGPParameter = gpParamHandler.findOutputParamByName(parameterValue.paramName); + if (!outputParam.visible) + { + return; + } + if (resultDataType == GPParameterTypes.GP_DATA_FILE) { fileDownloader.url = (parameterValue.value as DataFile).url; diff --git a/src/widgets/Geoprocessing/parameters/OutputParamParser.as b/src/widgets/Geoprocessing/parameters/OutputParamParser.as index 9e9d377..d0e3dc9 100644 --- a/src/widgets/Geoprocessing/parameters/OutputParamParser.as +++ b/src/widgets/Geoprocessing/parameters/OutputParamParser.as @@ -30,6 +30,7 @@ public class OutputParamParser extends BaseParamParser param = GPParameterFactory.getGPParamFromType(paramXML.@type); param.label = paramXML.@label; param.name = paramXML.@name; + param.visible = (paramXML.@visible == "true"); param.toolTip = paramXML.@tooltip; var featureParam:IGPFeatureParameter = param as IGPFeatureParameter; From 23fb6fc6a4823ed21b74ed69afdf28c3cdac52ce Mon Sep 17 00:00:00 2001 From: jcfranco Date: Wed, 6 Feb 2013 14:56:44 -0800 Subject: [PATCH 069/178] Improve ResultAttribute#toResultAttributes field value handling. --- src/widgets/supportClasses/ResultAttributes.as | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/widgets/supportClasses/ResultAttributes.as b/src/widgets/supportClasses/ResultAttributes.as index baf53ab..ea6d950 100644 --- a/src/widgets/supportClasses/ResultAttributes.as +++ b/src/widgets/supportClasses/ResultAttributes.as @@ -79,7 +79,8 @@ public class ResultAttributes function displayFields(fieldName:String, fieldXML:XML, field:Field):void { - value = graphic.attributes[fieldName] ? String(graphic.attributes[fieldName]) : ""; + var fieldNameTextValue:String = graphic.attributes[fieldName]; + value = fieldNameTextValue ? fieldNameTextValue : ""; if (value) { From 89eb4075fcce1fe87758e0ba65a0d7c9be58f26e Mon Sep 17 00:00:00 2001 From: jcfranco Date: Wed, 6 Feb 2013 16:10:05 -0800 Subject: [PATCH 070/178] Rename default title argument name in ResultAttributes#toResultAttributes. --- src/widgets/supportClasses/ResultAttributes.as | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/widgets/supportClasses/ResultAttributes.as b/src/widgets/supportClasses/ResultAttributes.as index ea6d950..db3f251 100644 --- a/src/widgets/supportClasses/ResultAttributes.as +++ b/src/widgets/supportClasses/ResultAttributes.as @@ -27,7 +27,7 @@ public class ResultAttributes featureSet:FeatureSet = null, layer:FeatureLayer = null, layerDetails:LayerDetails = null, - widgetTitle:String = null, + fallbackTitle:String = null, titleField:String = null, linkField:String = null, linkAlias:String = null):ResultAttributes @@ -71,8 +71,9 @@ public class ResultAttributes } } } + resultAttributes.attributes = graphic.attributes; - resultAttributes.title = title ? title : widgetTitle; + resultAttributes.title = title ? title : fallbackTitle; resultAttributes.content = content; resultAttributes.link = link ? link : null; resultAttributes.linkAlias = linkAlias; From fda2426765dcd56858a6cce7900f9ddc839dc214 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Wed, 6 Feb 2013 16:11:08 -0800 Subject: [PATCH 071/178] No longer require direction argument in ResultAttributes#toResultAttributes. --- src/widgets/Query/QueryWidget.mxml | 5 +---- src/widgets/Search/SearchWidget.mxml | 5 +---- src/widgets/supportClasses/ResultAttributes.as | 5 +++-- 3 files changed, 5 insertions(+), 10 deletions(-) diff --git a/src/widgets/Query/QueryWidget.mxml b/src/widgets/Query/QueryWidget.mxml index d85c46d..bdd3d70 100644 --- a/src/widgets/Query/QueryWidget.mxml +++ b/src/widgets/Query/QueryWidget.mxml @@ -98,7 +98,6 @@ private var mouseDownStageX:Number; private var mouseDownStageY:Number; private var dateFormatter:DateFormatter = new DateFormatter(); - private var textDirection:String; private var loadingLabel:String; private var textFilterClear:String; @@ -137,8 +136,6 @@ { if (configXML) { - textDirection = getStyle("direction"); - loadingLabel = configXML.labels.loading || configXML.labels.loadinglabel || getDefaultString("loadingLabel"); // other widgets use "loadinglabel" in their xml and so should this, but since 2.1 was released with "loading", we'll keep QueryWidget slightly inconsistent textFilterLabel = configXML.labels.filterresults || getDefaultString("filterTitleBarTooltip"); textFilterClear = configXML.labels.filterclear || getDefaultString("showallTitleBarTooltip"); @@ -409,7 +406,7 @@ for each (var graphic:Graphic in featureSet.features) { var resultAttributes:ResultAttributes = - ResultAttributes.toResultAttributes(queryFields, textDirection, graphic, featureSet, queryLayer, layerDetails, widgetTitle, queryTitleField, queryLinkField, queryLinkAlias); + ResultAttributes.toResultAttributes(queryFields, graphic, featureSet, queryLayer, layerDetails, widgetTitle, queryTitleField, queryLinkField, queryLinkAlias); graphicToResultAttributes[graphic] = resultAttributes; var searchResult:ResultItem = new ResultItem(graphic, resultAttributes); diff --git a/src/widgets/Search/SearchWidget.mxml b/src/widgets/Search/SearchWidget.mxml index 8b9b5b4..e9a9629 100644 --- a/src/widgets/Search/SearchWidget.mxml +++ b/src/widgets/Search/SearchWidget.mxml @@ -104,7 +104,6 @@ private var selectedDrawingIcon:FocusableImage; private var textsearchLabel:String; private var zoomScale:Number = 50000; - private var textDirection:String; [Bindable] private var clearLabel:String; @@ -162,8 +161,6 @@ { if (configXML) { - textDirection = getStyle("direction"); - geometryService.url = GeometryServiceSingleton.instance.url; geometryService.token = GeometryServiceSingleton.instance.token; geometryService.proxyURL = GeometryServiceSingleton.instance.proxyURL; @@ -703,7 +700,7 @@ for each (var graphic:Graphic in featureSet.features) { var resultAttributes:ResultAttributes = - ResultAttributes.toResultAttributes(queryFields, textDirection, graphic, featureSet, queryLayer, layerDetails, widgetTitle, queryTitleField, queryLinkField, queryLinkAlias); + ResultAttributes.toResultAttributes(queryFields, graphic, featureSet, queryLayer, layerDetails, widgetTitle, queryTitleField, queryLinkField, queryLinkAlias); var searchResult:ResultItem = new ResultItem(graphic, resultAttributes); result.addItem(searchResult); diff --git a/src/widgets/supportClasses/ResultAttributes.as b/src/widgets/supportClasses/ResultAttributes.as index db3f251..00378d5 100644 --- a/src/widgets/supportClasses/ResultAttributes.as +++ b/src/widgets/supportClasses/ResultAttributes.as @@ -10,6 +10,8 @@ import com.esri.ags.layers.supportClasses.FeatureType; import com.esri.ags.layers.supportClasses.Field; import com.esri.ags.layers.supportClasses.LayerDetails; +import mx.core.FlexGlobals; +import mx.core.LayoutDirection; import mx.formatters.DateFormatter; [Bindable] @@ -22,7 +24,6 @@ public class ResultAttributes public var linkAlias:String; public static function toResultAttributes(fields:XMLList, - textDirection:String = null, graphic:Graphic = null, featureSet:FeatureSet = null, layer:FeatureLayer = null, @@ -153,7 +154,7 @@ public class ResultAttributes fieldLabel = featureSet.fieldAliases[fieldName]; } - if (textDirection && textDirection == "rtl") + if (FlexGlobals.topLevelApplication.layoutDirection == LayoutDirection.RTL) { content += value + " :" + fieldLabel + "\n"; } From d27831e53ccae4f831767a03d3ab441398529cc0 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Mon, 4 Feb 2013 11:23:46 -0800 Subject: [PATCH 072/178] Add LabelUtil. --- src/com/esri/viewer/utils/LabelUtil.as | 52 ++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/com/esri/viewer/utils/LabelUtil.as diff --git a/src/com/esri/viewer/utils/LabelUtil.as b/src/com/esri/viewer/utils/LabelUtil.as new file mode 100644 index 0000000..8b61bff --- /dev/null +++ b/src/com/esri/viewer/utils/LabelUtil.as @@ -0,0 +1,52 @@ +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package com.esri.viewer.utils +{ + +import mx.core.FlexGlobals; + +import spark.utils.LabelUtil; + +public final class LabelUtil +{ + public static function findLongestItemLabel(items:Array, + labelField:String = null, + labelFunction:Function = null):String + { + var currentItemWidth:Number; + var longestItemLabel:String = ""; + var longestItemLabelWidth:Number = 0; + var currentItemLabel:String; + + for each (var item:Object in items) + { + currentItemLabel = + spark.utils.LabelUtil.itemToLabel(item, labelField, labelFunction); + + currentItemWidth = + FlexGlobals.topLevelApplication.measureText(currentItemLabel).width; + + if (currentItemWidth > longestItemLabelWidth) + { + longestItemLabelWidth = currentItemWidth; + longestItemLabel = currentItemLabel; + } + } + + return longestItemLabel; + } +} +} From 60cac433943bc0da6cf6bd1d6e3fa1ffde91a3cc Mon Sep 17 00:00:00 2001 From: jcfranco Date: Mon, 4 Feb 2013 11:24:14 -0800 Subject: [PATCH 073/178] Replace mx:ComboBox with s:DropDownList. --- src/widgets/Chart/ChartWidget.mxml | 8 ++++++-- .../GPInputFeatureParamItemRenderer.mxml | 15 ++++++++------- .../GPInputLinearUnitParamItemRenderer.mxml | 9 +++++---- .../input/GPInputStringParamItemRenderer.mxml | 11 ++++++----- src/widgets/Search/SearchWidget.mxml | 19 ++++++++++++++++--- 5 files changed, 41 insertions(+), 21 deletions(-) diff --git a/src/widgets/Chart/ChartWidget.mxml b/src/widgets/Chart/ChartWidget.mxml index 0302003..d632534 100644 --- a/src/widgets/Chart/ChartWidget.mxml +++ b/src/widgets/Chart/ChartWidget.mxml @@ -41,6 +41,7 @@ import com.esri.ags.symbols.Symbol; import com.esri.ags.tasks.supportClasses.Query; import com.esri.ags.tools.DrawTool; + import com.esri.viewer.utils.LabelUtil; import com.esri.viewer.utils.PopUpInfoParser; import mx.collections.ArrayCollection; @@ -173,6 +174,7 @@ var chartLayerDefinitions:Array = getValidChartLayerDefinitions(configXML.layers.layer); hasChartLayerDefinitions = (chartLayerDefinitions.length > 0); layerSelection.dataProvider = new ArrayList(chartLayerDefinitions); + layerSelection.typicalItem = LabelUtil.findLongestItemLabel(chartLayerDefinitions, "label"); } private function getValidChartLayerDefinitions(layers:XMLList):Array @@ -552,7 +554,7 @@ private function updateLayerSelectionMessage():void { - layerNotVisibleOrOutOfScaleRangeMessage = (layerSelection.selectedLabel + ' ' + layerSourceNotVisibleLabel); + layerNotVisibleOrOutOfScaleRangeMessage = (layerSelection.selectedItem.label + ' ' + layerSourceNotVisibleLabel); } private function clearChartAndSelectionHighlights():void @@ -653,7 +655,9 @@ includeInLayout="{hasChartLayerDefinitions}" visible="{hasChartLayerDefinitions}"> - + diff --git a/src/widgets/Geoprocessing/renderers/input/GPInputFeatureParamItemRenderer.mxml b/src/widgets/Geoprocessing/renderers/input/GPInputFeatureParamItemRenderer.mxml index 846dda5..758a1d3 100644 --- a/src/widgets/Geoprocessing/renderers/input/GPInputFeatureParamItemRenderer.mxml +++ b/src/widgets/Geoprocessing/renderers/input/GPInputFeatureParamItemRenderer.mxml @@ -373,13 +373,14 @@ - + - + diff --git a/src/widgets/Geoprocessing/renderers/input/GPInputStringParamItemRenderer.mxml b/src/widgets/Geoprocessing/renderers/input/GPInputStringParamItemRenderer.mxml index 69ef217..e5c7406 100644 --- a/src/widgets/Geoprocessing/renderers/input/GPInputStringParamItemRenderer.mxml +++ b/src/widgets/Geoprocessing/renderers/input/GPInputStringParamItemRenderer.mxml @@ -72,10 +72,11 @@ toolTip="{data.toolTip}" visible="{!hasChoiceList}"/> - + diff --git a/src/widgets/Search/SearchWidget.mxml b/src/widgets/Search/SearchWidget.mxml index e9a9629..7368986 100644 --- a/src/widgets/Search/SearchWidget.mxml +++ b/src/widgets/Search/SearchWidget.mxml @@ -71,6 +71,7 @@ import com.esri.viewer.AppEvent; import com.esri.viewer.utils.ClustererParser; import com.esri.viewer.utils.ErrorMessageUtil; + import com.esri.viewer.utils.LabelUtil; import mx.collections.ArrayCollection; import mx.collections.ArrayList; @@ -377,6 +378,10 @@ boxText.visible = false; boxText.includeInLayout = false; } + else + { + cboLayerText.typicalItem = LabelUtil.findLongestItemLabel(configSearchText, "label"); + } } else { @@ -389,13 +394,17 @@ { if (configSearchGraphical.length) { - cboLayerGraphical.dataProvider = configSearchGraphical; + cboLayerGraphical.dataProvider = new ArrayList(configSearchGraphical); txtLabelGraphical.text = configSearchGraphical[0].graphicallabel; if (configSearchGraphical.length == 1) { boxGraphical.visible = false; boxGraphical.includeInLayout = false; } + else + { + cboLayerGraphical.typicalItem = LabelUtil.findLongestItemLabel(configSearchGraphical, "label"); + } } else { @@ -1002,7 +1011,9 @@ horizontalAlign="center" verticalAlign="middle"> - + - +
    Date: Mon, 4 Feb 2013 12:18:07 -0800 Subject: [PATCH 074/178] Use LabelUtil to dynamically size s:DropDownList & s:ComboBox to longest item. --- src/widgets/Draw/DrawWidget.mxml | 63 ++++--------------- src/widgets/Print/ExportWebMapForm.mxml | 7 ++- .../TestOpenClose/TestOpenCloseWidget.mxml | 2 + 3 files changed, 18 insertions(+), 54 deletions(-) diff --git a/src/widgets/Draw/DrawWidget.mxml b/src/widgets/Draw/DrawWidget.mxml index 88df79c..79596fe 100644 --- a/src/widgets/Draw/DrawWidget.mxml +++ b/src/widgets/Draw/DrawWidget.mxml @@ -51,6 +51,7 @@ import com.esri.ags.utils.GeometryUtil; import com.esri.ags.utils.WebMercatorUtil; import com.esri.viewer.AppEvent; + import com.esri.viewer.utils.LabelUtil; import mx.managers.CursorManager; import mx.managers.CursorManagerPriority; @@ -226,6 +227,9 @@ initializeFontList(); + //setting typical text since using typicalItem will set TextInput#widthInChars, which produces extra long width + fontNameSelection.textInput.typicalText = LabelUtil.findLongestItemLabel(fontList.source); + defaultDrawColor = configXML.defaultdrawcolor || 0x3FAFDC; defaultTextFontSize = configXML.defaulttextfontsize || 20; // drawing labels @@ -349,6 +353,7 @@ configDistance.addItem(dUnit); } cboDistance.dataProvider = configDistance; + cboDistance.typicalItem = LabelUtil.findLongestItemLabel(configDistance.source, 'name'); } // area units @@ -432,9 +437,15 @@ configArea.addItem(aUnit); } cboArea.dataProvider = configArea; + cboArea.typicalItem = LabelUtil.findLongestItemLabel(configArea.source, 'name'); } } + markerStyle.typicalItem = LabelUtil.findLongestItemLabel(markerStyle.dataProvider.toArray(), 'name'); + lineStyle.typicalItem = LabelUtil.findLongestItemLabel(lineStyle.dataProvider.toArray(), 'name'); + fillStyle.typicalItem = LabelUtil.findLongestItemLabel(fillStyle.dataProvider.toArray(), 'name'); + + AppEvent.addListener(AppEvent.DATA_PUBLISH, sharedDataUpdated); } @@ -1425,17 +1436,6 @@ moveMeasurementGraphicToTop(drawnGraphic); } - protected function getLongestString(... rest):String - { - var longest:String = ""; - for (var i:int = 0; i < rest.length; i++) - { - var n:String = getDefaultString(rest[i]); - longest = n.length > longest.length ? n : longest; - } - return longest; - } - private function drawIcon_rollOverHandler(event:MouseEvent):void { clearSelectionFilter(); @@ -1681,13 +1681,6 @@ width="100%" labelField="name" selectedIndex="0"> - - - @@ -1765,14 +1758,6 @@ width="100%" labelField="name" selectedIndex="0"> - - - @@ -1838,15 +1823,6 @@ width="100%" labelField="name" selectedIndex="0"> - - - @@ -1903,16 +1879,6 @@ labelField="name" requireSelection="true" selectedIndex="0"> - - - - - - @@ -518,7 +522,6 @@ includeInLayout="{shouldShowFormatOptions}" visible="{shouldShowFormatOptions}"> diff --git a/src/widgets/Samples/TestOpenClose/TestOpenCloseWidget.mxml b/src/widgets/Samples/TestOpenClose/TestOpenCloseWidget.mxml index 062280e..4754343 100644 --- a/src/widgets/Samples/TestOpenClose/TestOpenCloseWidget.mxml +++ b/src/widgets/Samples/TestOpenClose/TestOpenCloseWidget.mxml @@ -26,6 +26,7 @@ import com.esri.viewer.AppEvent; import com.esri.viewer.IBaseWidget; import com.esri.viewer.ViewerContainer; + import com.esri.viewer.utils.LabelUtil; import mx.collections.ArrayCollection; @@ -70,6 +71,7 @@ widgetLabels.dataProvider = widgetItems; widgetLabels.labelField = "label"; + widgetLabels.typicalItem = LabelUtil.findLongestItemLabel(widgetItems.source, 'label'); } protected function button1_clickHandler(event:MouseEvent):void From 9a5b73d90aeeeb3ed1c17bcd6eb57683e2baf4bc Mon Sep 17 00:00:00 2001 From: jcfranco Date: Fri, 8 Feb 2013 10:27:19 -0800 Subject: [PATCH 075/178] Clean up. * Rename LabelUtil#findfindLongestItemLabel to LabelUtil#findLongestLabel. * Apply formatting. --- src/com/esri/viewer/utils/LabelUtil.as | 7 ++++--- src/widgets/Chart/ChartWidget.mxml | 2 +- src/widgets/Draw/DrawWidget.mxml | 12 ++++++------ src/widgets/Print/ExportWebMapForm.mxml | 4 ++-- .../Samples/TestOpenClose/TestOpenCloseWidget.mxml | 2 +- src/widgets/Search/SearchWidget.mxml | 4 ++-- 6 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/com/esri/viewer/utils/LabelUtil.as b/src/com/esri/viewer/utils/LabelUtil.as index 8b61bff..2fb0a1f 100644 --- a/src/com/esri/viewer/utils/LabelUtil.as +++ b/src/com/esri/viewer/utils/LabelUtil.as @@ -22,9 +22,9 @@ import spark.utils.LabelUtil; public final class LabelUtil { - public static function findLongestItemLabel(items:Array, - labelField:String = null, - labelFunction:Function = null):String + public static function findLongestLabel(items:Array, + labelField:String = null, + labelFunction:Function = null):String { var currentItemWidth:Number; var longestItemLabel:String = ""; @@ -49,4 +49,5 @@ public final class LabelUtil return longestItemLabel; } } + } diff --git a/src/widgets/Chart/ChartWidget.mxml b/src/widgets/Chart/ChartWidget.mxml index d632534..5bb99de 100644 --- a/src/widgets/Chart/ChartWidget.mxml +++ b/src/widgets/Chart/ChartWidget.mxml @@ -174,7 +174,7 @@ var chartLayerDefinitions:Array = getValidChartLayerDefinitions(configXML.layers.layer); hasChartLayerDefinitions = (chartLayerDefinitions.length > 0); layerSelection.dataProvider = new ArrayList(chartLayerDefinitions); - layerSelection.typicalItem = LabelUtil.findLongestItemLabel(chartLayerDefinitions, "label"); + layerSelection.typicalItem = LabelUtil.findLongestLabel(chartLayerDefinitions, "label"); } private function getValidChartLayerDefinitions(layers:XMLList):Array diff --git a/src/widgets/Draw/DrawWidget.mxml b/src/widgets/Draw/DrawWidget.mxml index 79596fe..e1c66e9 100644 --- a/src/widgets/Draw/DrawWidget.mxml +++ b/src/widgets/Draw/DrawWidget.mxml @@ -228,7 +228,7 @@ initializeFontList(); //setting typical text since using typicalItem will set TextInput#widthInChars, which produces extra long width - fontNameSelection.textInput.typicalText = LabelUtil.findLongestItemLabel(fontList.source); + fontNameSelection.textInput.typicalText = LabelUtil.findLongestLabel(fontList.source); defaultDrawColor = configXML.defaultdrawcolor || 0x3FAFDC; defaultTextFontSize = configXML.defaulttextfontsize || 20; @@ -353,7 +353,7 @@ configDistance.addItem(dUnit); } cboDistance.dataProvider = configDistance; - cboDistance.typicalItem = LabelUtil.findLongestItemLabel(configDistance.source, 'name'); + cboDistance.typicalItem = LabelUtil.findLongestLabel(configDistance.source, 'name'); } // area units @@ -437,13 +437,13 @@ configArea.addItem(aUnit); } cboArea.dataProvider = configArea; - cboArea.typicalItem = LabelUtil.findLongestItemLabel(configArea.source, 'name'); + cboArea.typicalItem = LabelUtil.findLongestLabel(configArea.source, 'name'); } } - markerStyle.typicalItem = LabelUtil.findLongestItemLabel(markerStyle.dataProvider.toArray(), 'name'); - lineStyle.typicalItem = LabelUtil.findLongestItemLabel(lineStyle.dataProvider.toArray(), 'name'); - fillStyle.typicalItem = LabelUtil.findLongestItemLabel(fillStyle.dataProvider.toArray(), 'name'); + markerStyle.typicalItem = LabelUtil.findLongestLabel(markerStyle.dataProvider.toArray(), 'name'); + lineStyle.typicalItem = LabelUtil.findLongestLabel(lineStyle.dataProvider.toArray(), 'name'); + fillStyle.typicalItem = LabelUtil.findLongestLabel(fillStyle.dataProvider.toArray(), 'name'); AppEvent.addListener(AppEvent.DATA_PUBLISH, sharedDataUpdated); diff --git a/src/widgets/Print/ExportWebMapForm.mxml b/src/widgets/Print/ExportWebMapForm.mxml index d0e2d61..6f7b8ae 100644 --- a/src/widgets/Print/ExportWebMapForm.mxml +++ b/src/widgets/Print/ExportWebMapForm.mxml @@ -383,7 +383,7 @@ layoutTemplatesDDL.selectedItem = printParameters.layoutTemplate; } - layoutTemplatesDDL.typicalItem = LabelUtil.findLongestItemLabel(layoutTemplates.toArray()); + layoutTemplatesDDL.typicalItem = LabelUtil.findLongestLabel(layoutTemplates.toArray()); } private function isContained(item:*, list:IList):Boolean @@ -443,7 +443,7 @@ formatsDDL.selectedItem = printParameters.format; } - formatsDDL.typicalItem = LabelUtil.findLongestItemLabel(formats.toArray()); + formatsDDL.typicalItem = LabelUtil.findLongestLabel(formats.toArray()); } private function printTask_jobCompleteHandler(event:PrintEvent):void diff --git a/src/widgets/Samples/TestOpenClose/TestOpenCloseWidget.mxml b/src/widgets/Samples/TestOpenClose/TestOpenCloseWidget.mxml index 4754343..29d921e 100644 --- a/src/widgets/Samples/TestOpenClose/TestOpenCloseWidget.mxml +++ b/src/widgets/Samples/TestOpenClose/TestOpenCloseWidget.mxml @@ -71,7 +71,7 @@ widgetLabels.dataProvider = widgetItems; widgetLabels.labelField = "label"; - widgetLabels.typicalItem = LabelUtil.findLongestItemLabel(widgetItems.source, 'label'); + widgetLabels.typicalItem = LabelUtil.findLongestLabel(widgetItems.source, 'label'); } protected function button1_clickHandler(event:MouseEvent):void diff --git a/src/widgets/Search/SearchWidget.mxml b/src/widgets/Search/SearchWidget.mxml index 7368986..efa1a94 100644 --- a/src/widgets/Search/SearchWidget.mxml +++ b/src/widgets/Search/SearchWidget.mxml @@ -380,7 +380,7 @@ } else { - cboLayerText.typicalItem = LabelUtil.findLongestItemLabel(configSearchText, "label"); + cboLayerText.typicalItem = LabelUtil.findLongestLabel(configSearchText, "label"); } } else @@ -403,7 +403,7 @@ } else { - cboLayerGraphical.typicalItem = LabelUtil.findLongestItemLabel(configSearchGraphical, "label"); + cboLayerGraphical.typicalItem = LabelUtil.findLongestLabel(configSearchGraphical, "label"); } } else From 1394ad50614825da9282071431a533e09d0957fd Mon Sep 17 00:00:00 2001 From: Bjorn Svensson Date: Tue, 12 Feb 2013 10:42:59 -0800 Subject: [PATCH 076/178] Improve inline asdoc documentation --- src/com/esri/viewer/BaseWidget.as | 31 +++++++++++++++++-- src/com/esri/viewer/WidgetStates.as | 2 +- .../esri/viewer/managers/WidgetManager.mxml | 15 ++++++--- 3 files changed, 41 insertions(+), 7 deletions(-) diff --git a/src/com/esri/viewer/BaseWidget.as b/src/com/esri/viewer/BaseWidget.as index 3fda7a4..36f86ab 100644 --- a/src/com/esri/viewer/BaseWidget.as +++ b/src/com/esri/viewer/BaseWidget.as @@ -58,6 +58,9 @@ public class BaseWidget extends Module implements IBaseWidget // //-------------------------------------------------------------------------- + /** + * Creates a new BaseWidget component. + */ public function BaseWidget() { this.autoLayout = true; @@ -131,8 +134,9 @@ public class BaseWidget extends Module implements IBaseWidget private var _configXML:XML; /** - * The XML type of configuration data. - * @see configData + * The XML for the widget configuration. + * + * @see configData() */ public function get configXML():XML { @@ -608,11 +612,25 @@ public class BaseWidget extends Module implements IBaseWidget _initialHeight = value; } + /** + * Used by WidgetManager to place a widget at a specific location (as specified with x and y properties in the configuration file). + * + * @param x The x coordinate for the widget location. + * @param y The y coordinate for the widget location. + */ public function setXYPosition(x:Number, y:Number):void { this.setLayoutBoundsPosition(x, y); } + /** + * Used by WidgetManager to place a widget at a specific location based on the left, right, top and bottom properties specified in the configuration file. + * + * @param left The left coordinate for the widget location. + * @param right The right coordinate for the widget location. + * @param top The top coordinate for the widget location. + * @param bottom The bottom coordinate for the widget location. + */ public function setRelativePosition(left:String, right:String, top:String, bottom:String):void { if (left) @@ -640,6 +658,15 @@ public class BaseWidget extends Module implements IBaseWidget isDraggable = true; } + /** + * Gets the localized String of a specified resource from the ViewerStrings resource bundle, + * after substituting specified values for placeholders. + * + *

    If the specified resource is not found, this method returns null.

    + * + * @param resourceName The name of a resource in the ViewerStrings resource bundle. + * @param params An Array of parameters that are substituted for the placeholders. Each parameter is converted to a String with the toString() method before being substituted. + */ public function getDefaultString(resourceName:String, ... params):String { //use Function#apply to avoid passing rest argument as Array diff --git a/src/com/esri/viewer/WidgetStates.as b/src/com/esri/viewer/WidgetStates.as index b2652b3..d948325 100644 --- a/src/com/esri/viewer/WidgetStates.as +++ b/src/com/esri/viewer/WidgetStates.as @@ -22,7 +22,7 @@ package com.esri.viewer public final class WidgetStates { /** - * Indicates the widget is opened. + * Indicates the widget is open. */ public static const WIDGET_OPENED:String = "open"; diff --git a/src/com/esri/viewer/managers/WidgetManager.mxml b/src/com/esri/viewer/managers/WidgetManager.mxml index e2128d2..60c11b1 100644 --- a/src/com/esri/viewer/managers/WidgetManager.mxml +++ b/src/com/esri/viewer/managers/WidgetManager.mxml @@ -169,7 +169,7 @@ * @param widgetId The widget ID. * @param openWidgetIfNot Indicates whether to open the widget if it is not already in the open state. * - * @return The widget for the ID, null if the widget has not been loaded. + * @return The widget for the specified widget ID, null if the widget has not been loaded. * * @throws ArgumentError The widget ID does not exist. * @@ -215,7 +215,10 @@ } /** - * @return Returns an array of the widget IDs that have already been loaded. + * Returns an array of widget IDs for widgets that have already been loaded, whether or not they still are open. + * Note that closing a widget does not unload it, thus this method will return all widgets that are, or have been, opened. + * + * @return Array of widget IDs that have already been loaded. * */ public function getAllLoadedWidgetIds():Array @@ -224,7 +227,9 @@ } /** - * @return Returns the total number of widgets. + * Returns the total number of widgets in application. + * + * @return Total number of widgets. * */ public function getNumWidgets():Number @@ -233,7 +238,9 @@ } /** - * @return Returns the widget ID for a specific widget based on the widget label. + * Returns the widget ID for a specific widget based on the widget label. + * + * @return Widget ID for the specified widget. * */ public function getWidgetId(widgetLabel:String):Number From 7756c96fcda6d6277eb88d0c227f9d2f27051f23 Mon Sep 17 00:00:00 2001 From: Bjorn Svensson Date: Tue, 12 Feb 2013 10:46:15 -0800 Subject: [PATCH 077/178] Cleanup --- src/com/esri/viewer/managers/WidgetManager.mxml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/com/esri/viewer/managers/WidgetManager.mxml b/src/com/esri/viewer/managers/WidgetManager.mxml index 60c11b1..e948bff 100644 --- a/src/com/esri/viewer/managers/WidgetManager.mxml +++ b/src/com/esri/viewer/managers/WidgetManager.mxml @@ -380,7 +380,7 @@ { mapManager.visible = true; - // before loading controls position the "panel" containers + // before loading controls position the "panel" containers positionPanelContainers(); startLoadControls(); } @@ -388,7 +388,7 @@ private function positionPanelContainers():void { - // before loading controls position the containers + // before loading controls position the containers if (bottomContainer || leftContainer || rightContainer) { this.removeAllElements(); @@ -406,7 +406,7 @@ vPanelBox.setStyle("dividerThickness", 10); vPanelBox.percentHeight = 100; vPanelBox.percentWidth = 100; - if (bottomContainer && leftContainer && rightContainer) // all three + if (bottomContainer && leftContainer && rightContainer) // all three { var lorder:int = Math.min(bcOrder, lcOrder, rcOrder); if (bcOrder == lorder) @@ -967,7 +967,7 @@ //===================================================================== // Load widgets that are part of a panel - //===================================================================== + //===================================================================== private function startLoadPanelWidgets():void { for (var i:Number = 0; i < configData.widgets.length; i++) From 4a83298df5fd48358ad48d2d274392e6c7a3b611 Mon Sep 17 00:00:00 2001 From: Bjorn Svensson Date: Thu, 14 Feb 2013 17:54:00 -0800 Subject: [PATCH 078/178] Adding CONTRIBUTING.md with how to contribute --- CONTRIBUTING.md | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 CONTRIBUTING.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..4bb95f1 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,35 @@ +# Contributing to ArcGIS Viewer for Flex + +There are many ways you can contribute to the [ArcGIS Viewer for Flex](http://links.esri.com/flexviewer). + +* Be active on the [forum](http://forums.arcgis.com/forums/111-ArcGIS-Viewer-for-Flex). +* Suggest enhancements on [ArcGIS Ideas](http://ideas.arcgis.com/). +* Create and share your own (custom) widgets. +* Report potential bugs to [Esri Support](http://support.esri.com/). +* Contribute to the ArcGIS Viewer for Flex source code. + +This guide describes how you can contribute improvements to the ArcGIS Viewer for Flex source code. + +The [ArcGIS Viewer for Flex](http://links.esri.com/flexviewer) is built by the Flex Team at [Esri](http://www.esri.com) and contributors like you. We are excited that you are interested in improving the Flex Viewer source code. This guide will help make sure your contribution (pull request) will be accepted and easily merged. + +1. Make sure you have a [GitHub account](https://github.com/signup/free). +2. [Fork](https://help.github.com/articles/fork-a-repo) the [Flex Viewer repo](https://github.com/Esri/arcgis-viewer-flex/) on GitHub. +3. Clone it to your local machine. +4. Checkout the [develop branch](https://github.com/Esri/arcgis-viewer-flex/tree/develop). +5. Create a new feature branch on your local machine. + * The name of the branch doesn't matter, but as a best practice use a descriptive name like "fix-look-of-widgetgroup-hover-state". +6. Write code to add an enhancement or fix the problem. + * Follow the coding conventions already used in the Flex Viewer source code (spaces instead of tabs, proper indentation, use [Flex Formatter](http://sourceforge.net/projects/flexformatter/files/) along with our [Flex Formatter settings](https://github.com/Esri/arcgis-viewer-flex/blob/develop/FlexFormatter.properties)). + * Document your code. + * Make commits of logical units. + * Use [clear and descriptive commit messages](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html). +7. Test your code. + +### Submitting changes +1. Read the License section below. +2. Push the changes in your feature branch to your repo. +3. Submit a [pull request](https://help.github.com/articles/using-pull-requests) against the "develop" branch. Submitting a pull request will open a GitHub issue. + * Clearly describe the issue including steps to reproduce; or if an enhancement, indicate the functionality you built. + +## License +By contributing your code, you agree to license your contribution under the terms of the [Apache License 2.0](https://github.com/Esri/arcgis-viewer-flex/blob/master/license.txt). See item 5 of [https://github.com/Esri/arcgis-viewer-flex/blob/master/license.txt](https://github.com/Esri/arcgis-viewer-flex/blob/master/license.txt) for more details. From 47694022ddeb3efde3500df714ff8f5051a81428 Mon Sep 17 00:00:00 2001 From: Bjorn Svensson Date: Thu, 14 Feb 2013 17:56:51 -0800 Subject: [PATCH 079/178] Add CONTRIBUTING links and clean up --- README.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 7ad73d2..52a00ad 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,8 @@ Optionally: * [ArcGIS API for Flex Resource Center](http://links.esri.com/flex) * [Flex Viewer License agreement](http://www.apache.org/licenses/LICENSE-2.0.html) * [Flex API License agreement](http://www.esri.com/legal/pdfs/mla_e204_e300/english.pdf) -* [ArcGIS Blog](http://blogs.esri.com/esri/arcgis/) +* [Flex Viewer forum](http://forums.arcgis.com/forums/111-ArcGIS-Viewer-for-Flex) +* [ArcGIS Blog](http://blogs.esri.com/esri/arcgis/tag/flex/) * [twitter@esri](http://twitter.com/esri) ## Issues @@ -63,10 +64,10 @@ Find a bug or want to request a new feature? Please let us know by submitting a ## Contributing -Anyone and everyone is welcome to contribute. +Anyone and everyone is welcome to [contribute](CONTRIBUTING.md). ## Licensing -Copyright 2012 Esri +Copyright 2012-2013 Esri Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -80,7 +81,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -A copy of the license is available in the repository's [license.txt]( https://raw.github.com/Esri/arcgis-viewer-flex/master/license.txt) file. +A copy of the license is available in the repository's [license.txt](https://raw.github.com/Esri/arcgis-viewer-flex/master/license.txt) file. [](Esri Tags: ArcGIS Web Flex Viewer Map Library API) [](Esri Language: ActionScript) From b888967f83b20b59becb9408d2404a5d965dad14 Mon Sep 17 00:00:00 2001 From: Bjorn Svensson Date: Fri, 15 Feb 2013 10:58:20 -0800 Subject: [PATCH 080/178] Remove hardcoded default label in example --- src/widgets/HeaderController/HeaderControllerWidget.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/widgets/HeaderController/HeaderControllerWidget.xml b/src/widgets/HeaderController/HeaderControllerWidget.xml index bb29764..8cf2f1c 100644 --- a/src/widgets/HeaderController/HeaderControllerWidget.xml +++ b/src/widgets/HeaderController/HeaderControllerWidget.xml @@ -6,7 +6,7 @@ - + From 609b909f43c53a905e65990f8dfb0c2c634db65e Mon Sep 17 00:00:00 2001 From: Bjorn Svensson Date: Fri, 15 Feb 2013 10:58:40 -0800 Subject: [PATCH 081/178] Cleanup --- src/widgets/HeaderController/HeaderControllerWidget.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/widgets/HeaderController/HeaderControllerWidget.xml b/src/widgets/HeaderController/HeaderControllerWidget.xml index 8cf2f1c..025fc67 100644 --- a/src/widgets/HeaderController/HeaderControllerWidget.xml +++ b/src/widgets/HeaderController/HeaderControllerWidget.xml @@ -12,7 +12,8 @@


    - ArcGIS Viewer for Flex +
    + ArcGIS Viewer for Flex

    ]]>
    From dc77561b52ef5189a48640f8bdc3fd6c5f508548 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Fri, 15 Feb 2013 12:13:54 -0800 Subject: [PATCH 082/178] Restore HTML pop-up text wrapping. * No longer require explicit line breaks. * Add workaround for potential content scrolling issues (e.g., tall content with images). --- src/com/esri/viewer/components/HTMLPopup.mxml | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/com/esri/viewer/components/HTMLPopup.mxml b/src/com/esri/viewer/components/HTMLPopup.mxml index 0a2b7e2..943009e 100644 --- a/src/com/esri/viewer/components/HTMLPopup.mxml +++ b/src/com/esri/viewer/components/HTMLPopup.mxml @@ -111,6 +111,21 @@ { closeButton.drawFocus(true); } + + protected function scroller_creationCompleteHandler(event:FlexEvent):void + { + // TLF does scrolling in real numbers. If the scroller doesn't + // round to ints then the sets of verticalScrollPosition and + // horizontalScrollPosition will be no-ops which is desirable. + if (scroller.horizontalScrollBar) + { + scroller.horizontalScrollBar.snapInterval = 0; + } + if (scroller.verticalScrollBar) + { + scroller.verticalScrollBar.snapInterval = 0; + } + } ]]> @@ -126,14 +141,14 @@ - - Date: Fri, 15 Feb 2013 12:15:50 -0800 Subject: [PATCH 083/178] Clean up. --- src/com/esri/viewer/components/HTMLPopup.mxml | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/com/esri/viewer/components/HTMLPopup.mxml b/src/com/esri/viewer/components/HTMLPopup.mxml index 943009e..da5db09 100644 --- a/src/com/esri/viewer/components/HTMLPopup.mxml +++ b/src/com/esri/viewer/components/HTMLPopup.mxml @@ -27,14 +27,6 @@ creationComplete="htmlPopup_creationCompleteHandler(event)" show="showHandler(event)" tabFocusEnabled="true"> - - - - + + + + + + @@ -154,6 +154,7 @@ paddingTop="5" textFlow="{TextConverter.importToFlow(content, TextConverter.TEXT_FIELD_HTML_FORMAT)}"/> + Date: Tue, 19 Feb 2013 15:21:32 -0800 Subject: [PATCH 084/178] fix index conditional logic --- src/com/esri/viewer/components/toc/TOC.as | 2 +- src/widgets/AttributeTable/AttributeTableWidget.mxml | 2 +- src/widgets/Edit/EditWidget.mxml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/com/esri/viewer/components/toc/TOC.as b/src/com/esri/viewer/components/toc/TOC.as index 6cadff6..b5de39b 100644 --- a/src/com/esri/viewer/components/toc/TOC.as +++ b/src/com/esri/viewer/components/toc/TOC.as @@ -472,7 +472,7 @@ public class TOC extends Tree } } } - else if ((newLayerIds.length - _tocRoots.length) < index < newLayerIds.length) + else if ((newLayerIds.length - _tocRoots.length < index) && (index < newLayerIds.length)) { // index of item to move currentTOCIndex = getCurrentTOCIndex(); diff --git a/src/widgets/AttributeTable/AttributeTableWidget.mxml b/src/widgets/AttributeTable/AttributeTableWidget.mxml index 4017036..7ec57ec 100644 --- a/src/widgets/AttributeTable/AttributeTableWidget.mxml +++ b/src/widgets/AttributeTable/AttributeTableWidget.mxml @@ -1039,7 +1039,7 @@ } } } - else if (newLayerIds.length - arrFinalLayers.length < index < newLayerIds.length) + else if ((newLayerIds.length - arrFinalLayers.length < index) && (index < newLayerIds.length)) { if (layer is FeatureLayer && featureLayers.indexOf(layer) != -1) { diff --git a/src/widgets/Edit/EditWidget.mxml b/src/widgets/Edit/EditWidget.mxml index 55104ef..78d25a9 100644 --- a/src/widgets/Edit/EditWidget.mxml +++ b/src/widgets/Edit/EditWidget.mxml @@ -835,7 +835,7 @@ } } } - else if (newLayerIds.length - arrFinalLayers.length < index < newLayerIds.length) + else if ((newLayerIds.length - arrFinalLayers.length < index) && (index < newLayerIds.length)) { if (layer is FeatureLayer && featureLayers.indexOf(layer) != -1) { From 37c55b5059cfb0d8b688aa2ed24e34a5673681ef Mon Sep 17 00:00:00 2001 From: jcfranco Date: Wed, 13 Feb 2013 12:56:32 -0800 Subject: [PATCH 085/178] Update GP widget to use FeatureLayer instead of GraphicsLayer. --- .../Geoprocessing/GeoprocessingWidget.mxml | 54 ++++++------- .../parameters/FeatureLayerParameter.as | 20 ++--- .../parameters/IGPFeatureParameter.as | 6 +- .../GPInputFeatureParamItemRenderer.mxml | 30 ++++++-- .../FeatureLayerCollectionHandler.as | 75 +++++++++++++++++++ .../supportClasses/GPParamHandler.as | 18 ++--- 6 files changed, 150 insertions(+), 53 deletions(-) create mode 100644 src/widgets/Geoprocessing/supportClasses/FeatureLayerCollectionHandler.as diff --git a/src/widgets/Geoprocessing/GeoprocessingWidget.mxml b/src/widgets/Geoprocessing/GeoprocessingWidget.mxml index dce9a47..c754a05 100644 --- a/src/widgets/Geoprocessing/GeoprocessingWidget.mxml +++ b/src/widgets/Geoprocessing/GeoprocessingWidget.mxml @@ -37,8 +37,8 @@ import com.esri.ags.geometry.Extent; import com.esri.ags.geometry.Geometry; import com.esri.ags.geometry.MapPoint; + import com.esri.ags.layers.FeatureLayer; import com.esri.ags.layers.GPResultImageLayer; - import com.esri.ags.layers.GraphicsLayer; import com.esri.ags.layers.supportClasses.ImageParameters; import com.esri.ags.layers.supportClasses.MapImage; import com.esri.ags.renderers.SimpleRenderer; @@ -56,7 +56,6 @@ import flashx.textLayout.conversion.TextConverter; import mx.collections.ArrayList; - import mx.collections.IList; import mx.controls.Alert; import mx.events.CloseEvent; import mx.rpc.AsyncResponder; @@ -67,6 +66,7 @@ import widgets.Geoprocessing.parameters.IGPFeatureParameter; import widgets.Geoprocessing.parameters.IGPParameter; import widgets.Geoprocessing.supportClasses.FeatureInputParamEvent; + import widgets.Geoprocessing.supportClasses.FeatureLayerCollectionHandler; import widgets.Geoprocessing.supportClasses.FileDownloader; import widgets.Geoprocessing.supportClasses.GPParamHandler; import widgets.Geoprocessing.supportClasses.GraphicEditor; @@ -79,7 +79,7 @@ private var executionType:String; private var autoSubmit:Boolean; - private var currentGraphicsLayer:GraphicsLayer; + private var currentLayer:FeatureLayer; private var visibleGraphicsLayersWatcher:VisibleGraphicsLayersWatcher = new VisibleGraphicsLayersWatcher(); private var layerOrderer:LayerOrderer; private var gpParamHandler:GPParamHandler; @@ -90,7 +90,7 @@ private var totalProcessedAsyncResults:int; private var totalProjectedFeatures:int private var asyncResultMap:Dictionary; - private var outputGraphicsLayers:Array; + private var outputLayers:Array; private var resultImageLayersOnMap:Array; private var hasResultMapServer:Boolean; private var hasUseAMFBeenSet:Boolean; @@ -310,13 +310,13 @@ private function inputParamsDataGroup_drawFeatureHandler(event:FeatureInputParamEvent):void { var featureParam:IGPFeatureParameter = event.featureParam; - currentGraphicsLayer = featureParam.layer; + currentLayer = featureParam.layer; setMapAction(event.drawType, null, featureParam.defaultSymbol, map_drawEndHandler); } private function inputParamsDataGroup_clearFeatureHandler(event:FeatureInputParamEvent):void { - event.featureParam.layer.clear(); + FeatureLayerCollectionHandler.clear(event.featureParam.layer); } protected function map_extentChangeHandler(event:ExtentEvent):void @@ -339,10 +339,10 @@ drawnGraphic.geometry = extent.toPolygon(); } - currentGraphicsLayer.add(drawnGraphic); - if (!currentGraphicsLayer.map) + FeatureLayerCollectionHandler.add(drawnGraphic, currentLayer); + if (!currentLayer.map) { - map.addLayer(currentGraphicsLayer); + map.addLayer(currentLayer); } inputParamsDataGroup.dispatchEvent(event); @@ -658,21 +658,21 @@ { if (totalProcessedOutputFeatures == 0) { - outputGraphicsLayers = []; + outputLayers = []; hideOutputFeaturesClearButton(); } var featureParam:IGPFeatureParameter = (outputParam as IGPFeatureParameter); - var graphicsLayer:GraphicsLayer = featureParam.layer; - graphicsLayer.infoWindowRenderer = featureParam.popUpRenderer; - graphicsLayer.addEventListener(GraphicsLayerEvent.GRAPHICS_CLEAR, ouputGraphicsLayer_graphicsClearHandler, false, 0, true); - graphicsLayer.addEventListener(GraphicEvent.GRAPHIC_REMOVE, ouputGraphicsLayer_graphicsRemoveHandler, false, 0, true); - outputGraphicsLayers.push(graphicsLayer); + var featureLayer:FeatureLayer = featureParam.layer; + featureLayer.infoWindowRenderer = featureParam.popUpRenderer; + featureLayer.addEventListener(GraphicsLayerEvent.GRAPHICS_CLEAR, ouputGraphicsLayer_graphicsClearHandler, false, 0, true); + featureLayer.addEventListener(GraphicEvent.GRAPHIC_REMOVE, ouputGraphicsLayer_graphicsRemoveHandler, false, 0, true); + outputLayers.push(featureLayer); var resultFeatures:Array = (parameterValue.value as FeatureSet).features; - graphicsLayer.graphicProvider = resultFeatures; + FeatureLayerCollectionHandler.updateFeatures(resultFeatures, featureLayer); // if renderer is null, set the renderer based on result geometry - if (!graphicsLayer.renderer && resultFeatures && resultFeatures.length) + if (!featureLayer.renderer && resultFeatures && resultFeatures.length) { var geometryType:String = Graphic(resultFeatures[0]).geometry.type; var renderer:SimpleRenderer = new SimpleRenderer; @@ -694,13 +694,13 @@ break; } } - graphicsLayer.renderer = renderer; + featureLayer.renderer = renderer; } addContextMenuToGraphics(resultFeatures); - if (!graphicsLayer.map) + if (!featureLayer.map) { - map.addLayer(graphicsLayer); + map.addLayer(featureLayer); layerOrderer.orderLayers(); } @@ -734,7 +734,8 @@ var outputFeatureParams:Array = gpParamHandler.getOutputFeatureParams(); for each (var featureParam:IGPFeatureParameter in outputFeatureParams) { - if (featureParam.popUpInfo) + if (featureParam.popUpInfo + && FeatureLayerCollectionHandler.hasFeatures(featureParam.layer)) { featureParamPopUpToDisplay = featureParam; break; @@ -753,7 +754,8 @@ map.infoWindow.content = contentNavigator; } - var graphic:Graphic = (featureParam.layer.graphicProvider as IList).getItemAt(0) as Graphic; + var graphic:Graphic = featureParam.layer.featureCollection.featureSet.features[0]; + graphic.infoWindowRenderer = featureParam.popUpRenderer; contentNavigator.dataProvider = new ArrayList([ graphic ]); map.infoWindow.show(graphic.geometry is MapPoint ? graphic.geometry as MapPoint : graphic.geometry.extent.center); } @@ -780,9 +782,9 @@ private function showInputViewIfAllOutputFeaturesCleared():void { var allGraphicsLayersCleared:Boolean = true; - for each (var graphicsLayer:GraphicsLayer in outputGraphicsLayers) + for each (var featureLayer:FeatureLayer in outputLayers) { - if (graphicsLayer.numGraphics > 0) + if (featureLayer.featureCollection.featureSet.features.length > 0) { allGraphicsLayersCleared = false; break; @@ -820,8 +822,8 @@ protected function menuItem_contextMenuDeleteHandler(event:ContextMenuEvent):void { var graphic:Graphic = event.contextMenuOwner as Graphic; - var graphicsLayer:GraphicsLayer = graphic.graphicsLayer; - graphicsLayer.remove(graphic); + var featureLayer:FeatureLayer = graphic.graphicsLayer as FeatureLayer; + FeatureLayerCollectionHandler.remove(graphic, featureLayer); } private function gp_jobCompleteHandler(event:GeoprocessorEvent):void diff --git a/src/widgets/Geoprocessing/parameters/FeatureLayerParameter.as b/src/widgets/Geoprocessing/parameters/FeatureLayerParameter.as index 55b0a79..5365ca1 100644 --- a/src/widgets/Geoprocessing/parameters/FeatureLayerParameter.as +++ b/src/widgets/Geoprocessing/parameters/FeatureLayerParameter.as @@ -18,16 +18,17 @@ package widgets.Geoprocessing.parameters import com.esri.ags.FeatureSet; import com.esri.ags.SpatialReference; -import com.esri.ags.layers.GraphicsLayer; +import com.esri.ags.layers.FeatureLayer; +import com.esri.ags.layers.supportClasses.FeatureCollection; +import com.esri.ags.layers.supportClasses.LayerDetails; +import com.esri.ags.portal.PopUpRenderer; +import com.esri.ags.portal.supportClasses.PopUpInfo; import com.esri.ags.renderers.ClassBreaksRenderer; import com.esri.ags.renderers.IRenderer; import com.esri.ags.renderers.SimpleRenderer; import com.esri.ags.renderers.UniqueValueRenderer; import com.esri.ags.symbols.Symbol; -import com.esri.ags.portal.PopUpRenderer; -import com.esri.ags.portal.supportClasses.PopUpInfo; -import mx.collections.ArrayCollection; import mx.core.ClassFactory; public class FeatureLayerParameter extends BaseParameter implements IGPFeatureParameter @@ -63,7 +64,8 @@ public class FeatureLayerParameter extends BaseParameter implements IGPFeaturePa public function FeatureLayerParameter() { - _layer = new GraphicsLayer(); + _layer = new FeatureLayer(); + _layer.featureCollection = new FeatureCollection(new FeatureSet([]), new LayerDetails()); } //-------------------------------------------------------------------------- @@ -140,9 +142,9 @@ public class FeatureLayerParameter extends BaseParameter implements IGPFeaturePa // layer //---------------------------------- - private var _layer:GraphicsLayer; + private var _layer:FeatureLayer; - public function get layer():GraphicsLayer + public function get layer():FeatureLayer { return _layer; } @@ -272,12 +274,12 @@ public class FeatureLayerParameter extends BaseParameter implements IGPFeaturePa override public function hasValidValue():Boolean { - return (_layer.graphicProvider as ArrayCollection).length > 0; + return _layer.featureCollection.featureSet.features.length > 0; } public override function getRequestObjectValue():Object { - return new FeatureSet((_layer.graphicProvider as ArrayCollection).source); + return _layer.featureCollection.featureSet; } } diff --git a/src/widgets/Geoprocessing/parameters/IGPFeatureParameter.as b/src/widgets/Geoprocessing/parameters/IGPFeatureParameter.as index 5f39f93..c1300de 100644 --- a/src/widgets/Geoprocessing/parameters/IGPFeatureParameter.as +++ b/src/widgets/Geoprocessing/parameters/IGPFeatureParameter.as @@ -17,10 +17,10 @@ package widgets.Geoprocessing.parameters { import com.esri.ags.SpatialReference; -import com.esri.ags.layers.GraphicsLayer; +import com.esri.ags.layers.FeatureLayer; +import com.esri.ags.portal.supportClasses.PopUpInfo; import com.esri.ags.renderers.IRenderer; import com.esri.ags.symbols.Symbol; -import com.esri.ags.portal.supportClasses.PopUpInfo; import mx.core.ClassFactory; @@ -30,7 +30,7 @@ public interface IGPFeatureParameter extends IGPParameter function get mode():String; function get layerNames():Array; function get popUpInfo():PopUpInfo; - function get layer():GraphicsLayer; + function get layer():FeatureLayer; function get renderer():IRenderer; function get defaultSymbol():Symbol; function get layerName():String; diff --git a/src/widgets/Geoprocessing/renderers/input/GPInputFeatureParamItemRenderer.mxml b/src/widgets/Geoprocessing/renderers/input/GPInputFeatureParamItemRenderer.mxml index 758a1d3..3d170d5 100644 --- a/src/widgets/Geoprocessing/renderers/input/GPInputFeatureParamItemRenderer.mxml +++ b/src/widgets/Geoprocessing/renderers/input/GPInputFeatureParamItemRenderer.mxml @@ -38,13 +38,14 @@ import widgets.Geoprocessing.parameters.FeatureLayerParameter; import widgets.Geoprocessing.parameters.IGPFeatureParameter; import widgets.Geoprocessing.supportClasses.FeatureInputParamEvent; + import widgets.Geoprocessing.supportClasses.FeatureLayerCollectionHandler; import widgets.Geoprocessing.supportClasses.InputParamDataGroup; import widgets.Geoprocessing.supportClasses.VisibleGraphicsLayersWatcher; [Bindable] private var visibleValidGraphicsLayers:ArrayList; [Bindable] - private var graphicsProvider:ArrayCollection; + private var hasFeatures:Boolean; [Bindable] private var singleGraphicsLayerSelectionName:String; @@ -252,11 +253,12 @@ if (selectedGraphicsLayer) { var selectedLayerGraphicProvider:ArrayCollection = selectedGraphicsLayer.graphicProvider as ArrayCollection; - featureParam.layer.graphicProvider = ObjectUtil.copy(selectedLayerGraphicProvider) as ArrayCollection; + var graphicProvider:ArrayCollection = ObjectUtil.copy(selectedLayerGraphicProvider) as ArrayCollection; + FeatureLayerCollectionHandler.updateFeatures(graphicProvider.source, featureParam.layer); } else { - featureParam.layer.graphicProvider = null; + FeatureLayerCollectionHandler.clear(featureParam.layer); } } } @@ -275,11 +277,29 @@ private function initializeAndSetDrawSelectionMode():void { - graphicsProvider = featureParam.layer.graphicProvider as ArrayCollection; + featureParam.layer.addEventListener(GraphicEvent.GRAPHIC_ADD, outputLayer_graphicsRemoveHandler, false, 0, true); + featureParam.layer.addEventListener(GraphicEvent.GRAPHIC_REMOVE, outputLayer_graphicsRemoveHandler, false, 0, true); + featureParam.layer.addEventListener(GraphicsLayerEvent.GRAPHICS_CLEAR, ouputLayer_graphicsClearHandler, false, 0, true); + updateFeatureCount(); inputParamDataGroup.addEventListener(DrawEvent.DRAW_END, map_drawEndHandler, false, 0, true); setDrawSelectionMode(); } + private function updateFeatureCount():void + { + hasFeatures = featureParam.layer.featureCollection.featureSet.features.length > 0; + } + + protected function ouputLayer_graphicsClearHandler(event:GraphicsLayerEvent):void + { + updateFeatureCount(); + } + + protected function outputLayer_graphicsRemoveHandler(event:GraphicEvent):void + { + updateFeatureCount(); + } + private function map_drawEndHandler(event:DrawEvent):void { selectedDrawingIcon = null; @@ -481,6 +501,6 @@ text="{LocalizationUtil.getDefaultString('clearLabel')}" textDecoration="underline" toolTip="{LocalizationUtil.getDefaultString('drawClearLabel')}" - visible="{graphicsProvider.length > 0}"/> + visible="{hasFeatures}"/> diff --git a/src/widgets/Geoprocessing/supportClasses/FeatureLayerCollectionHandler.as b/src/widgets/Geoprocessing/supportClasses/FeatureLayerCollectionHandler.as new file mode 100644 index 0000000..46e8106 --- /dev/null +++ b/src/widgets/Geoprocessing/supportClasses/FeatureLayerCollectionHandler.as @@ -0,0 +1,75 @@ +/////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011 Esri. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// +package widgets.Geoprocessing.supportClasses +{ + +import com.esri.ags.FeatureSet; +import com.esri.ags.Graphic; +import com.esri.ags.events.GraphicEvent; +import com.esri.ags.events.GraphicsLayerEvent; +import com.esri.ags.layers.FeatureLayer; +import com.esri.ags.layers.supportClasses.FeatureCollection; + +public final class FeatureLayerCollectionHandler +{ + public static function add(graphic:Graphic, featureLayer:FeatureLayer):void + { + var featureSet:FeatureSet = featureLayer.featureCollection.featureSet; + featureSet.features.push(graphic); + refreshCollection(featureLayer); + featureLayer.dispatchEvent(new GraphicEvent(GraphicEvent.GRAPHIC_ADD, graphic)); + } + + private static function refreshCollection(featureLayer:FeatureLayer):void + { + var featureCollection:FeatureCollection = featureLayer.featureCollection; + featureLayer.featureCollection = null; + featureLayer.featureCollection = featureCollection; + } + + public static function remove(graphic:Graphic, featureLayer:FeatureLayer):void + { + var featureSet:FeatureSet = featureLayer.featureCollection.featureSet; + var graphicIndex:int = featureSet.features.indexOf(graphic); + if (graphicIndex > -1) + { + featureSet.features.splice(graphicIndex, 1); + refreshCollection(featureLayer); + featureLayer.dispatchEvent(new GraphicEvent(GraphicEvent.GRAPHIC_REMOVE, graphic)); + } + } + + public static function clear(featureLayer:FeatureLayer):void + { + featureLayer.featureCollection.featureSet.features = []; + refreshCollection(featureLayer); + featureLayer.dispatchEvent(new GraphicsLayerEvent(GraphicsLayerEvent.GRAPHICS_CLEAR)); + } + + public static function updateFeatures(features:Array, featureLayer:FeatureLayer):void + { + featureLayer.featureCollection.featureSet.features = features; + refreshCollection(featureLayer); + } + + public static function hasFeatures(featureLayer:FeatureLayer):Boolean + { + return featureLayer.featureCollection.featureSet.features + && featureLayer.featureCollection.featureSet.features.length > 0; + } +} + +} diff --git a/src/widgets/Geoprocessing/supportClasses/GPParamHandler.as b/src/widgets/Geoprocessing/supportClasses/GPParamHandler.as index 477144d..fe6d3e8 100644 --- a/src/widgets/Geoprocessing/supportClasses/GPParamHandler.as +++ b/src/widgets/Geoprocessing/supportClasses/GPParamHandler.as @@ -25,8 +25,6 @@ import com.esri.ags.utils.GraphicUtil; import flash.utils.Dictionary; -import mx.collections.ArrayCollection; - import widgets.Geoprocessing.parameters.BaseParamParser; import widgets.Geoprocessing.parameters.FeatureLayerParameter; import widgets.Geoprocessing.parameters.GPParameterTypes; @@ -297,20 +295,20 @@ public class GPParamHandler public function getOutputFeaturesExtent():Extent { var featureParam:IGPFeatureParameter; - var featureGraphicProvider:ArrayCollection; - var features:Array = []; + var features:Array; + var mergedFeatures:Array = []; for each (var param:IGPParameter in _outputParams) { if (param.type == GPParameterTypes.FEATURE_RECORD_SET_LAYER) { featureParam = (param as IGPFeatureParameter); - featureGraphicProvider = featureParam.layer.graphicProvider as ArrayCollection; - features = features.concat(featureGraphicProvider.source); + features = featureParam.layer.featureCollection.featureSet.features; + mergedFeatures = mergedFeatures.concat(features); } } - return GraphicUtil.getGraphicsExtent(features); + return GraphicUtil.getGraphicsExtent(mergedFeatures); } public function graphicsLayerBelongsToFeatureParam(graphicsLayer:GraphicsLayer):Boolean @@ -364,7 +362,7 @@ public class GPParamHandler { if (param.type == GPParameterTypes.FEATURE_RECORD_SET_LAYER) { - (param as IGPFeatureParameter).layer.clear(); + FeatureLayerCollectionHandler.clear((param as IGPFeatureParameter).layer); } } } @@ -402,8 +400,8 @@ public class GPParamHandler featureParam = param as IGPFeatureParameter; if (featureParam && featureParam.mode == FeatureLayerParameter.MAP_EXTENT_SOURCE) { - featureParam.layer.clear(); - featureParam.layer.add(new Graphic(extentPolygon)); + FeatureLayerCollectionHandler.clear(featureParam.layer); + FeatureLayerCollectionHandler.add(new Graphic(extentPolygon), featureParam.layer); } } } From 719b4c5541c41256c796eb7fbb4e832c8496ca6c Mon Sep 17 00:00:00 2001 From: jcfranco Date: Wed, 13 Feb 2013 13:34:11 -0800 Subject: [PATCH 086/178] Add support for sharing GP results. --- .../Geoprocessing/GeoprocessingWidget.mxml | 18 +++++++++++++++++- .../supportClasses/GPParamHandler.as | 18 ++++++++++++++---- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/src/widgets/Geoprocessing/GeoprocessingWidget.mxml b/src/widgets/Geoprocessing/GeoprocessingWidget.mxml index c754a05..9307d84 100644 --- a/src/widgets/Geoprocessing/GeoprocessingWidget.mxml +++ b/src/widgets/Geoprocessing/GeoprocessingWidget.mxml @@ -100,6 +100,7 @@ private var outputLabel:String; private var taskDescription:String; private var taskHelpURL:String; + private var shareResults:Boolean; [Bindable] private var submitLabel:String; @@ -131,6 +132,21 @@ try { gpParamHandler = new GPParamHandler(configXML); + + for each (var inputFeatureParam:IGPFeatureParameter in gpParamHandler.getInputFeatureParams()) + { + inputFeatureParam.layerName = "hiddenLayer_" + inputFeatureParam.layerName; + } + + shareResults = configXML.shareresults[0] == "true"; + if (!shareResults) + { + for each (var outputFeatureParam:IGPFeatureParameter in gpParamHandler.getOutputFeatureParams()) + { + outputFeatureParam.layerName = "hiddenLayer_" + outputFeatureParam.layerName; + } + } + layerOrderer = new LayerOrderer(); if (configXML.layerorder[0]) { @@ -624,7 +640,7 @@ var lastExecutedJob:JobInfo = gp.submitJobLastResult; var resultImageLayer:GPResultImageLayer = gp.getResultImageLayer(lastExecutedJob.jobId, paramName); resultImageLayer.id = paramName; - resultImageLayer.name = ("hiddenLayer_" + paramName); + resultImageLayer.name = shareResults ? paramName : "hiddenLayer_" + paramName; resultImageLayersOnMap.push(resultImageLayer); map.addLayer(resultImageLayer); layerOrderer.orderLayers(); diff --git a/src/widgets/Geoprocessing/supportClasses/GPParamHandler.as b/src/widgets/Geoprocessing/supportClasses/GPParamHandler.as index fe6d3e8..ca56ba4 100644 --- a/src/widgets/Geoprocessing/supportClasses/GPParamHandler.as +++ b/src/widgets/Geoprocessing/supportClasses/GPParamHandler.as @@ -277,19 +277,29 @@ public class GPParamHandler toggleFeatureParameterLayerVisibility(false); } + public function getInputFeatureParams():Array + { + return getFeatureParams(_inputParams); + } + public function getOutputFeatureParams():Array { - var outputFeatureParams:Array = []; + return getFeatureParams(_outputParams); + } + + private function getFeatureParams(params:Array):Array + { + var featureParams:Array = []; - for each (var param:IGPParameter in _outputParams) + for each (var param:IGPParameter in params) { if (param.type == GPParameterTypes.FEATURE_RECORD_SET_LAYER) { - outputFeatureParams.push(param); + featureParams.push(param); } } - return outputFeatureParams; + return featureParams; } public function getOutputFeaturesExtent():Extent From 424006d56c07a3f8daa77e29f5f52bc33ef86cde Mon Sep 17 00:00:00 2001 From: Bjorn Svensson Date: Wed, 20 Feb 2013 12:08:41 -0800 Subject: [PATCH 087/178] Add Estonian and Latvian --- locale/et_EE/ViewerStrings.properties | 366 ++++++++++++++++++++++++++ locale/lv_LV/ViewerStrings.properties | 366 ++++++++++++++++++++++++++ 2 files changed, 732 insertions(+) create mode 100644 locale/et_EE/ViewerStrings.properties create mode 100644 locale/lv_LV/ViewerStrings.properties diff --git a/locale/et_EE/ViewerStrings.properties b/locale/et_EE/ViewerStrings.properties new file mode 100644 index 0000000..fb1bd9b --- /dev/null +++ b/locale/et_EE/ViewerStrings.properties @@ -0,0 +1,366 @@ + + +contextMenuText=ArcGIS Viewer for Flex rakendusest... +aboutText=See rakendus on loodud ArcGIS Viewer for Flex versioonil 3.1. +aboutLearnMoreBtn=Loe lähemalt +aboutCloseBtn=Sule + + + +close=Sule +minimize=Minimeeri + + + +panelExpandTooltip=Kliki paneeli avamiseks +panelCollapseTooltip=Kliki paneeli sulgemiseks + + +locateExampleValueX=24.7453 +locateExampleValueY=59.4372 + + +clearLabel=Tühjenda +deleteLabel=Kustuta +loadingLabel=Laen... +okLabel=OK +errorLabel=Viga +problemLabel=Probleem +noFeatures=Objekte ei leitud. +resultsLabel=Tulemused +saveLabel=Salvesta + + +unitsFeet=Jalga +unitsFeetAbbr=ft +unitsKilometers=Kilomeetrit +unitsKilometersAbbr=km +unitsMeters=Meetrit +unitsMetersAbbr=m +unitsMiles=Miili +unitsMilesAbbr=mi +unitsYards=Jardi +unitsYardsAbbr=yd + +unitsAcres=Aakrit +unitsAcresAbbr=ac +unitsHectares=Hektarit +unitsHectaresAbbr=ha +unitsSquareFeet=Ruutjalga +unitsSquareFeetAbbr=ft² +unitsSquareKilometers=Ruutkilomeetrit +unitsSquareKilometersAbbr=km² +unitsSquareMeters=Ruutmeetrit +unitsSquareMetersAbbr=m² +unitsSquareMiles=Ruutmiili +unitsSquareMilesAbbr=mi² +unitsSquareYards=Ruutjardi +unitsSquareYardsAbbr=yd² + + +tocMapLayerZoomToLabel=Suumi juurde +tocMapLayerTransparencyLabel=Läbipaistvus +tocMapLayerOpaqueLabel=Läbipaistmatu +tocMapLayerTransparentLabel=Läbipaistvus +tocMapLayerMoveUpLabel=Liiguta üles +tocMapLayerMoveDownLabel=Liiguta alla +tocMapLayerRemoveLabel=Eemalda +tocMapLayerDescriptionLabel=Kirjeldus +tocMapLayerDownloadLabel=Lae alla + + +incorrectLayerTypeText={0} ei ole toetatud kihi tüüp. Palun kasutada "arcims", "bing", "csv", "dynamic", "feature", "georss", "image", "kml", "osm", "tiled", "wms" või "wmts" tüüpe. + + +missingConfigFileText=Ei leidnud {0} +httpResponseStatus=http vastuse staatus: {0} +faultCode=Vea kood: {0} +faultInfo=Vea info: {0} +faultDetail=Vea detailid: {0} + + +parseConfigErrorText=Konfiguratsiooni faili parsimisel esines probleem: {0} +standalonePlayerExternalInterfaceErrorText=Tekkis viga. ExternalInterface ei toimi iseseisvas mängijas. +layerFailedToLoad:{0} kihi laadimine ebaõnnestus: {1} +couldNotFetchBasemapData=Ei õnnestunud saada aluskaardi andmeid:\n{0} +couldNotConnectToPortal=Ei õnnestunud portaaliga ühendust saada. +couldNotQueryPortal=Ei õnnestunud portaali pärida. +couldNotQueryPortalItems=Ei õnnestunud portaali sisu pärida. +serverMissingCrossDomain=GIS serveril puudub crossdomain fail. +serviceIsInaccessible=Teenuse ei eksisteeri või pole kättesaadav +unauthorizedAccess=Teil puudub ligipääs teenusele ligipääsuks +unknownErrorCause=Teadmata vea põhjus. +resourceAccessDenied=Teil puuduvad õigused sellele ressursile ligipääsuks +signInAborted=Sisselogimine katkestatud +invalidWidgetId=Vale widgetId: {0} +printTaskExecutionError=Probleem printimise ülesandega:\n\n{0} +gpServiceConnectionError=Ei saa geotöötluse teenusega ühendust:\n{0}\n\n{1}\n{2} +locatorServiceConnectionError=Ei saa lokaatori teenusega ühendust:\n{0}\n\n{1}\n{2} +singleLineGeocodingNotSupportedError=Lokaatori teenus ei toeta single-line geokodeerimist. +rssFeedParsingError=RSS voo parsimisel tekkis viga. {0} +httpResponseNotXMLError=HTTP vastus ei ole XML-is. +unknownRSSFeedTypeError=Ei suuda tuvastada RSS tüüpi. +initializationError=Laadimisel tekkis viga: {0} +unableToDetermineGPExecutionType=Ei õnnestunud selgitada geotöötluse tüüpi: +projectionError=Geomeetria projekteerimise viga: {0} +cannotRunTaskExecutionTypeUnknownError=Ei saa jooksutada ülesannet: tüüp tundmatu. +layerDataRetrievalError=Ei saa kihi andmeid kätte +couldNotDeleteFeature=Ei saanud objekti kustutada +couldNotUpdateFeatureError=Ei saanud uuendada objekti, taastan vana väärtuse +cannotDisplayResult=Ei saa kuvada tulemust kaardil. +uploadSecurityError=Faili üleslaadimisel tekkis turvalisuse viga: {0} +uploadIOError=Faili üleslaadimisel tekkis IO viga: {0} +uploadUnknownError=Faili üleslaadimisel tekkis tundmatu viga. +couldNotProcessUploadResponse=Üleslaadimise täieliku vastuse käsitlemine ebaõnnestus. +fileExceedsAllowedUploadSize=Fail ületab maksimaalselt lubatud mahtu. ({0} MB) +fileUploadError=Faili üleslaadimise viga + + +configFileCrossDomain=Võimalik crossdomain probleem: {0}{1} + + +openToolTip=Kliki ülevaatekaardi avamiseks +closeToolTip=Kliki ülevaatekaardi sulgemiseks + + +layerListLabel=Rohkem... +basemap=Aluskaardid + + +aboutLabel=Lisainfo +searchPrompt=Sisesta aadress +searchResultTitleLabel=Asukoht +noResultsFoundLabel=Tulemusi ei leitud + + +fullExtentLabel=Täielik kuvaulatus +panDownLabel=Nihuta alla +panLeftLabel=Nihuta vasakule +panRightLabel=Nihuta paremale +panUpLabel=Nihuta üles +previousExtentLabel=Eelmine kuvaulatus +nextExtentLabel=Järgmine kuvaulatus +panLabel=Nihuta +zoomInLabel=Suumi sisse +zoomOutLabel=Suumi välja + + + + + + +addTextLabel=Lisa tekst +drawPointLabel=Joonista punkt +drawLineLabel=Joonista joon +drawFreehandLineLabel=Joonista vabakäeline joon +drawPolygonLabel=Joonista pind +drawFreehandPolygonLabel=Joonista vabakäeline pind +drawRectangleLabel=Joonista ristkülik +drawMapExtentLabel=Joonista kaardi kuvaulatus +drawCircleLabel=Joonista ring +drawEllipseLabel=Joonista ellips +drawClearLabel=Tühista kaardimärkmed + +markerStyleCircle=Ring +markerStyleCross=Rist +markerStyleDiamond=Romb +markerStyleSquare=Ruut +markerStyleTriangle=Kolmnurk +markerStyleX=X + +textFont1=Arial +textFont2=Courier New +textFont3=Broadway +textFont4=Comic Sans MS +textFont5=Algerian +textFont6=Verdana + +lineStyleSolid=Pidev +lineStyleDash=Kriipsudega +lineStyleDot=Punktidega +lineStyleDashDot=Kriips punkt +lineStyleDashDotDot=Kriips punkt punkt + +fillStyleSolid=Pidev +fillStyleBackwardDiagonal=Tagurpidine diagonaal +fillStyleCross=Rist +fillStyleForwardDiagonal=Edaspidine diagonaal +fillStyleHorizontal=Horisontaalne +fillStyleVertical=Vertikaalne + + + +markerAlphaLabel=Alfa +markerColorLabel=Märgise värv +markerSizeLabel=Suurus +markerStyleLabel=Stiil +markerOutlineColorLabel=Äärejoone värv +markerOutlineWidthLabel=Laius +textLabel=Tekst +textColorLabel=Värv +textFontLabel=Kirjastiil +textSizeLabel=Suurus +textBoldLabel=B +textBoldTooltip=Bold +textItalicLabel=I +textItalicTooltip=Italic +textUnderlineLabel=U +textUnderlineTooltip=Underline +lineAlphaLabel=Alfa +lineColorLabel=Joone värv +lineStyleLabel=Stiil +lineWidthLabel=Laius +fillAlphaLabel=Alfa +fillColorLabel=Täitevärv +fillStyleLabel=Stiil +fillOutlineColorLabel=Äärejoone värv +fillOutlineWidthLabel=Laius + + + + +showMeasurementsLabel=Näita mõõdistusi +distanceUnitsLabel=Vahemaa ühikud +areaUnitsLabel=Ala ühikud +areaLabel=Ala: +perimeterLabel=Ümbermõõt: +lengthLabel=Pikkus: + + +bookmarksLabel=Järjehoidjad +addbookmarksLabel=Lisa järjehoidja +addLabel=Lisa hetke kuvaulatus järjehoidjana nimega +bookmarkSubmitLabel=Lisa järjehoidja +bookmarkMissingNameLabel=Palun sisestage järjehoidja nimi. +deleteBookmarkTooltip=Kustuta järjehoidja + + +descLabel=Eralda andmed ja lae zip fail alla +step1Label=1. Vali ala +dataCurrentExtentLabel=1. Andmed eraldatakse hetke kuvaulatust arvestades +step2Label=2. Vali eraldatavad kihid +step3Label=3. Vali andmete formaat +step4Label=4. Vali rastri formaat +step5Label=5. Koordinaatsüsteem +extractButtonLabel=Tee väljavõte +step1ErrorLabel=Palun valige huvipiirkond. +step2ErrorLabel=Palun valige väljavõtte kihid. +emptyResultsLabel=Ülesanne lõpetatud edukalt, kuid ei tagastanud ühtegi tulemust. +saveDataFileLabel=Fail andmetega loodud. Kas te soovite seda alla laadida? + + +attributesLabel=Atribuudid +attachmentsLabel=Manused +relatedRecordsLabel=Seotud kirjed +featureLayerOutOfScaleText=Objektikiht on väljaspool skaala vahemikku +showAttachmentsText=Manused +showRelatedRecordsText=Seotud kirjed +showAttributesText=Mine tagasi +selectTemplateText=Objekti loomiseks vali mall +noEditableLayersText=Redigeeritavad kihid puuduvad +noCreateCapabilityLayersText=Ühelgi kihil ei ole objektide loomise võimalust +layerNotSupportingAttachmentsText=Antud kiht ei toeta manuseid +noAttachmentsText=Manused puuduvad +chooseFileText=Vali manus +attachmentSubmitLabel=Saada +attachmentCancelLabel=Tühista +singleAttachmentText=Antud objektil on {0} manust +multipleAttachmentsText=Antud objektil on {0} manust + + +layerListTitle=Kihi nähtavus + + +locateSubmitLabel=Leia asukoht +addressLabel=Aadress +coordinatesLabel=Koordinaadid +addressTitle=Sisesta aadress +coordinatesTitle=Sisesta koordinaadid +xLabel=Pikkuskraadid (X) +yLabel=Laiuskraadid (Y) +locationsLabel=Leitud asukohti: +bingCulture=en-US +requiredFields=Nõutud väljad: +requiredField=Nõutud väli: +deleteResultTooltip=Kustuta tulemus +resultScoreText=Sobivus: +bingResultConfidenceText=Kindlus: + + +printSubmitLabel=Prindi +printTitle= +printSubtitle= +printCopyright= +printTitleLabel=Pealkiri +printSubtitleLabel=Alampealkiri +printCopyrightLabel=Autoriõigused +printAuthorLabel=Autor +printLayoutTemplatesLabel=Asetuse mallid +printFormatsLabel=Formaadid +printScaleLabel=Kasuta seda skaalat + + +filterTitleBarTooltip=Filtreeri tulemusi +showallTitleBarTooltip=Näita kõiki +filterButtonLabel=Filtreeri +clearButtonLabel=Näita kõiki +featuresFoundLabel=Objekte leitud: {0} + + +drivingDirectionLabel=Marsruut +routeSubmitLabel=Hangi marsruut +moveUpTooltip=Liiguta üles +moveDownTooltip=Liiguta alla +addLocationTooltip=asukoha lisamiseks kliki kaardil +optionsLabel=Seaded +bestSequenceLabel=Leia parim jada +milesLabel=Miili +metricLabel=km +changeRouteSymbolLabel=Muuda marsruudi sümbolit +editRouteLabel=Muuta marsruuti + + +graphicalTitleBarTooltip=Vali objektid +textTitleBarTooltip=Vali atribuudi järgi +graphicalsearchLabel=Vali objektid +textsearchLabel=Vali atribuudi järgi +layerLabel=Otsi kihist +nolayerLabel=Otsitavaid kihte pole defineeritud. +searchSubmitLabel=Otsi +selectionLabel=Objekte valitud: + + +latitudeLabel=Laiuskraad +longitudeLabel=Pikkuskraad + + +gpSubmitLabel=Saada +inputLabel=Sisend +helpLabel=Abi +outputLabel=Väljund +copyToClipboard=Kopeeri lõikelauale +unsupportedInputType={0} sisend ei ole toetatud +currentExtentWillBeUsedAsInput=Hetke kuvaulatust kasutatakse kui sisendit. +byURL=URL-i abil +fileURL=Faili URL +uploadFile=Lae fail üles +or=või + + +zoomLabel=Suumi juurde + + +helloContent=Muutke see tekst config failis. + + +widgetIDWidgetLabelTemplate=Mooduli Id: {0}, Mooduli silt: {1} +widgetIDWidgetStateTemplate=Mooduli Id: {0}, Mooduli olek: {1} +itemLabelWidgetIDItemIDTemplate={0} Mooduli ID: {1} + + +layerSelectionLabel=Vali kiht +drawToolMenuLabel=Vali joonistamise tööriist +selectLabel=Vali +noLayersLabel=Kihid puuduvad +noChartDataToDisplayLabel=Andmed diagrammi kuvamiseks puuduvad +featureLayerNotVisibleText=objektikiht ei ole nähtav või ei kuulu skaala vahemikku \ No newline at end of file diff --git a/locale/lv_LV/ViewerStrings.properties b/locale/lv_LV/ViewerStrings.properties new file mode 100644 index 0000000..0967e61 --- /dev/null +++ b/locale/lv_LV/ViewerStrings.properties @@ -0,0 +1,366 @@ + + +contextMenuText=Par ArcGIS Viewer for Flex... +aboutText=Šī aplikācija izmanto ArcGIS Viewer for Flex version @VERSION@.\nIzveidošanas datums @BUILD_DATE@. +aboutLearnMoreBtn=Uzziniet vairāk +aboutCloseBtn=Aizvērt + + + +close=Aizvērt +minimize=Minimizēt + + + +panelExpandTooltip=Noklikšķiniet, lai paplašinātu paneli +panelCollapseTooltip=Noklikšķiniet, lai kolapsētu paneli + + +locateExampleValueX=24.1131 +locateExampleValueY=56.9514 + + +clearLabel=Notīrīt +deleteLabel=Izdzēst +loadingLabel=Ielādē... +okLabel=Labi +errorLabel=Kļūda +problemLabel=Problēma +noFeatures=Nav atrasti elementi. +resultsLabel=Rezultāti +saveLabel=Saglabāt + + +unitsFeet=Pēdas +unitsFeetAbbr=pēda +unitsKilometers=Kilometri +unitsKilometersAbbr=km +unitsMeters=Metri +unitsMetersAbbr=m +unitsMiles=Jūdzes +unitsMilesAbbr=jūdzes +unitsYards=Jardi +unitsYardsAbbr=jardi + +unitsAcres=Akri +unitsAcresAbbr=akri +unitsHectares=Hektāri +unitsHectaresAbbr=ha +unitsSquareFeet=kvadrātpēdas +unitsSquareFeetAbbr=kvadrātpēdas +unitsSquareKilometers=Kvadrātkilometri +unitsSquareKilometersAbbr=kv. km +unitsSquareMeters=Kvadrātmetri +unitsSquareMetersAbbr=kv.m +unitsSquareMiles=Kvadrātjūdzes +unitsSquareMilesAbbr=kvadrātjūdzes +unitsSquareYards=Kvadrātjardi +unitsSquareYardsAbbr=kvadrātjardi + + +tocMapLayerZoomToLabel=Pietuvināt +tocMapLayerTransparencyLabel=Caurspīdīgums +tocMapLayerOpaqueLabel=Necaurredzams +tocMapLayerTransparentLabel=Caurspīdīgs +tocMapLayerMoveUpLabel=Pārvietot uz augšu +tocMapLayerMoveDownLabel=Pārvietot uz leju +tocMapLayerRemoveLabel=Izņemt +tocMapLayerDescriptionLabel=Apraksts +tocMapLayerDownloadLabel=Lejupielāde + + +incorrectLayerTypeText={0} nav atbalstīta slāņa tips. Lietojiet "arcims", "bing", "csv", "dynamic", "feature", "georss", "image", "kml", "osm", "tiled", "wms" or "wmts" vietā. + + +missingConfigFileText=Neizdevās atrast {0} +httpResponseStatus=http atbildes statuss: {0} +faultCode=Kļūdas kods: {0} +faultInfo=Kļūdas informācija: {0} +faultDetail=Kļūdas detaļas: {0} + + +parseConfigErrorText=Problēma radās analizējot konfigurācijas failu {0} +standalonePlayerExternalInterfaceErrorText=Kļūda. Savrupajā atskaņotājā ārējais interfeiss nedarbojas. +layerFailedToLoad:{0} slāni neizdevās ielādēt: {1} +couldNotFetchBasemapData=Neizdevās saistīt pamatkartes datus:\n{0} +couldNotConnectToPortal=Nevarēja izveidot savienojumu ar portālu. +couldNotQueryPortal=Vaicājums portālam neizdevās. +couldNotQueryPortalItems=Vaicājums portāla vienībām neizdevās. +serverMissingCrossDomain=ĢIS Serverī trūkst šķērsdomēna fails. +serviceIsInaccessible=Serviss neeksistē vai nav pieejams. +unauthorizedAccess=Jums nav atļaujas piekļuvei šim servisam. +unknownErrorCause=Nezināms kļūdas iemesls. +resourceAccessDenied=Jums nav atļaujas, lai piekļūtu šim resursam. +signInAborted=Pierakstīšanās neveiksme. +invalidWidgetId=Nederīgs logrīka Id: {0} +printTaskExecutionError=Kļūda izpildot drukas uzdevumu:\n\n{0} +gpServiceConnectionError=Nevar izveidot savienojumu ar GP Service:\n{0}\n\n{1}\n{2} +locatorServiceConnectionError=Nevar izveidot savienojumu ar Locator Service:\n{0}\n\n{1}\n{2} +singleLineGeocodingNotSupportedError=Lokālais serviss neatbalsta vienas līnijas ģeokodēšanu. +rssFeedParsingError=Problēma, analizējot RSS padevi. {0} +httpResponseNotXMLError=HTTP atbilde nav XML. +unknownRSSFeedTypeError=Nevar noteikt RSS padeves tipu. +initializationError=Problēma, kamēr inicializē: {0} +unableToDetermineGPExecutionType=Neizdevās noteikt ģeodatu apstrādes izpildes tipu: +projectionError=Kļūda, projektējot ģeometriju: {0} +cannotRunTaskExecutionTypeUnknownError=Nevar palaist uzdevumu: izpildes tips nezināms. +layerDataRetrievalError=Nevarēja atgūt slāņa datus. +couldNotDeleteFeature=Nevarēja izdzēst elementu +couldNotUpdateFeatureError=Nevarēja atjaunināt elementu, atjauno veco vērtību +cannotDisplayResult=Nevar parādīt rezultātu kartē. +uploadSecurityError=Radusies drošības kļūda augšupielādējot failu: {0} +uploadIOError=Radusies IO kļūda augšupielādējot failu: {0} +uploadUnknownError=Nezināma kļūda augšupielādējot failu. +couldNotProcessUploadResponse=Nevarēja augšupielādēt pilnīgu atbildi. +fileExceedsAllowedUploadSize=Fails pārsniedz maksimāli atļauto augšupielādes lielumu. ({0} MB) +fileUploadError=Faila augšupielādes kļūda + + +configFileCrossDomain=Iespējams šķērsdomēna jautājums: {0}{1} + + +openToolTip=Noklikšķiniet, lai atvērtu pārskata karti +closeToolTip=Noklikšķiniet, lai aizvērtu pārskata karti + + +layerListLabel=Vairāk... +basemap=Pamatkarte + + +aboutLabel=Par +searchPrompt=Ievadīt adresi +searchResultTitleLabel=Izvietojums +noResultsFoundLabel=Rezultāti nav atrasti + + +fullExtentLabel=Pilns pārklājums +panDownLabel=Panoramēt uz leju +panLeftLabel=Panoramēt pa kreisi +panRightLabel=Panoramēt pa labi +panUpLabel=Panoramēt uz augšu +previousExtentLabel=Iepriekšējais pārklājums +nextExtentLabel=Nākošais pārklājums +panLabel=Panoramēt +zoomInLabel=Pietuvināt +zoomOutLabel=Attālināt + + + + + + +addTextLabel=Pievienot tekstu +drawPointLabel=Zīmēt punktu +drawLineLabel=Zīmēt līniju +drawFreehandLineLabel=Zīmēt brīvrokas līniju +drawPolygonLabel=Zīmēt laukumu +drawFreehandPolygonLabel=Zīmēt brīvrokas laukumu +drawRectangleLabel=Zīmēt taisnstūri +drawMapExtentLabel=Zīmēt kartes pārklājumu +drawCircleLabel=Zīmēt apli +drawEllipseLabel=Zīmēt elipsi +drawClearLabel=Notīrīt zīmējumus + +markerStyleCircle=Aplis +markerStyleCross=Krusts +markerStyleDiamond=Dimants +markerStyleSquare=Kvadrāts +markerStyleTriangle=Trijstūris +markerStyleX=X + +textFont1=Arial +textFont2=Courier New +textFont3=Broadway +textFont4=Comic Sans MS +textFont5=Algerian +textFont6=Verdana + +lineStyleSolid=Tīrtoņa krāsa +lineStyleDash=Svītra +lineStyleDot=Punkts +lineStyleDashDot=Svītra punkts +lineStyleDashDotDot=Svītra punkts punkts + +fillStyleSolid=Tīrtoņa krāsa +fillStyleBackwardDiagonal=Atpakaļējas diagonāles +fillStyleCross=Krusts +fillStyleForwardDiagonal=Priekšējas diagonāles +fillStyleHorizontal=Horizontāls +fillStyleVertical=Vertikāls + + + +markerAlphaLabel=Alfa +markerColorLabel=Marķiera krāsa +markerSizeLabel=Lielums +markerStyleLabel=Stils +markerOutlineColorLabel=Kontūras krāsa +markerOutlineWidthLabel=Platums +textLabel=Teksts +textColorLabel=Krāsa +textFontLabel=Fonts +textSizeLabel=Lielums +textBoldLabel=B +textBoldTooltip=Treknraksts +textItalicLabel=I +textItalicTooltip=Kursīvs +textUnderlineLabel=U +textUnderlineTooltip=Pasvītrojums +lineAlphaLabel=Alfa +lineColorLabel=Līnijas krāsa +lineStyleLabel=Stils +lineWidthLabel=Platums +fillAlphaLabel=Alfa +fillColorLabel=Aizpildījuma krāsa +fillStyleLabel=Stils +fillOutlineColorLabel=Kontūras krāsa +fillOutlineWidthLabel=Platums + + + + +showMeasurementsLabel=Rādīt mērījumus +distanceUnitsLabel=Attāluma vienības +areaUnitsLabel=Laukuma vienības +areaLabel=Laukums: +perimeterLabel=Perimetrs: +lengthLabel=Garums: + + +bookmarksLabel=Grāmatzīmes +addbookmarksLabel=Pievienot grāmatzīmi +addLabel=Pievienot pašreizējo pārklājumu kā grāmatzīmi ar nosaukumu +bookmarkSubmitLabel=Pievienot grāmatzīmi +bookmarkMissingNameLabel=Lūdzu ievadiet grāmatzīmes nosaukumu. +deleteBookmarkTooltip=Izdzēst grāmatzīmi + + +descLabel=Iegūt datus un lejupielādēt zip failu +step1Label=1. Izvēlieties laukumu +dataCurrentExtentLabel=1. Dati tiks iegūti no pašreizējā pārklājuma. +step2Label=2. Izvēlieties slāņus, lai iegūtu +step3Label=3. Izvēlieties faila formātu +step4Label=4. Izvēlieties rastra formātu +step5Label=5. Telpiskā atskaite +extractButtonLabel=Iegūt +step1ErrorLabel=Lūdzu, izvēlieties interesējošo laukumu. +step2ErrorLabel=Lūdzu, izvēlieties slāņus, ko iegūt. +emptyResultsLabel=Uzdevums izpildīts, bet nav nekādu rezultātu. +saveDataFileLabel=Datu fails izveidots. Vai vēlaties to saglabāt? + + +attributesLabel=Atribūti +attachmentsLabel=Piesaistes +relatedRecordsLabel=Saistītie Ieraksti +featureLayerOutOfScaleText=Šī elementu slānis ir ārpus mēroga diapazona +showAttachmentsText=Piesaistes +showRelatedRecordsText=Saistītie ieraksti +showAttributesText=Iet atpakaļ +selectTemplateText=Izvēlieties šablonu, lai izveidotu elementu +noEditableLayersText=Nav rediģējamu slāņu. +noCreateCapabilityLayersText=Neviens no slāņiem nerada iespējas +layerNotSupportingAttachmentsText=Šis slānis neatbalsta piesaistes +noAttachmentsText=Nav piesaistes +chooseFileText=Izvēlieties piesaistes failu +attachmentSubmitLabel=Pakļauties +attachmentCancelLabel=Atcelt +singleAttachmentText=Elementam ir {0} piesaiste +multipleAttachmentsText=Elementam ir {0} piesaistes + + +layerListTitle=Slāņa redzamība + + +locateSubmitLabel=Izvietot +addressLabel=Adreses +coordinatesLabel=Koordinātes +addressTitle=Ievadiet adresi +coordinatesTitle=Ievadiet koordinātes +xLabel=Garums (X) +yLabel=Platums (Y) +locationsLabel=Izvietojums atrasts: +bingCulture=angļu-ASV +requiredFields=Nepieciešamie lauki: +requiredField=Nepieciešamais lauks: +deleteResultTooltip=Dzēst rezultātu +resultScoreText=Punktu skaits: +bingResultConfidenceText=Pārliecība: + + +printSubmitLabel=Drukāt +printTitle= +printSubtitle= +printCopyright= +printTitleLabel=Virsraksts +printSubtitleLabel=Apakšvirsraksts +printCopyrightLabel=Autortiesības +printAuthorLabel=Autors +printLayoutTemplatesLabel=Izkārtojuma šabloni +printFormatsLabel=Formāts +printScaleLabel=Lietojiet šo mērogu + + +filterTitleBarTooltip=Filtrēt rezultātus +showallTitleBarTooltip=Rādīt visu +filterButtonLabel=Filtrs +clearButtonLabel=Rādīt visu +featuresFoundLabel=Elementi atrasti: {0} + + +drivingDirectionLabel=Braukšanas virzieni +routeSubmitLabel=Saņemt virzienus +moveUpTooltip=Pārvietot uz augšu +moveDownTooltip=Pārvietot uz leju +addLocationTooltip=noklikšķiniet uz kartes, lai pievienotu izvietojumu +optionsLabel=Opcijas +bestSequenceLabel=Atrast labāko secību +milesLabel=Jūdzes +metricLabel=Km +changeRouteSymbolLabel=Mainīt maršruta simbolu +editRouteLabel=Rediģēt maršrutu + + +graphicalTitleBarTooltip=Izvēlēties elementus +textTitleBarTooltip=Izvēlēties pēc atribūta +graphicalsearchLabel=Izvēlēties elementus pēc +textsearchLabel=Izvēlēties pēc atribūta +layerLabel=Meklēšanas slānis +nolayerLabel=Nav definēts meklēšanas slānis. +searchSubmitLabel=Meklēt +selectionLabel=Izvēlētie elementi: + + +latitudeLabel=Platums +longitudeLabel=Garums + + +gpSubmitLabel=Pakļauties +inputLabel=Ievade +helpLabel=Palīdzība +outputLabel=Izvade +copyToClipboard=Kopēt uz starpliktuvi +unsupportedInputType={0} ievade netiek atbalstīta +currentExtentWillBeUsedAsInput=Pašreizējais pārklājums tiks lietots kā ievade. +byURL=Ar URL +fileURL=Faila URL +uploadFile=Augšupielādēt failu +or=vai + + +zoomLabel=Pietuvināt + + +helloContent=Mainīt šo tekstu konfigurācijas failā. + + +widgetIDWidgetLabelTemplate=Logrīka Id: {0}, logrīka etiķete: {1} +widgetIDWidgetStateTemplate=Logrīka Id: {0}, logrīka stāvoklis: {1} +itemLabelWidgetIDItemIDTemplate={0} Logrīka ID: {1} + + +layerSelectionLabel=Izvēlieties slāni +drawToolMenuLabel=Izvēlieties zīmēšanas rīku +selectLabel=Izvēlēties +noLayersLabel=Nav slāņu +noChartDataToDisplayLabel=Nav diagrammas datu, ko parādīt +featureLayerNotVisibleText=elementu slānis vai nu nav redzams, vai atrodas ārpus mēroga diapazona \ No newline at end of file From 78ee31597a01edf32f98b0b8204def3a5bbe1d2d Mon Sep 17 00:00:00 2001 From: Bjorn Svensson Date: Wed, 20 Feb 2013 12:15:37 -0800 Subject: [PATCH 088/178] Updated localized viewerstrings --- locale/ar/ViewerStrings.properties | 20 +- locale/da_DK/ViewerStrings.properties | 17 +- locale/de_DE/ViewerStrings.properties | 18 +- locale/es_ES/ViewerStrings.properties | 18 +- locale/fr_FR/ViewerStrings.properties | 18 +- locale/he_IL/ViewerStrings.properties | 17 +- locale/it_IT/ViewerStrings.properties | 18 +- locale/ja_JP/ViewerStrings.properties | 24 +- locale/ko_KR/ViewerStrings.properties | 20 +- locale/lt_LT/ViewerStrings.properties | 617 +++++++++++++------------- locale/nb_NO/ViewerStrings.properties | 18 +- locale/nl_NL/ViewerStrings.properties | 20 +- locale/pl_PL/ViewerStrings.properties | 18 +- locale/pt_BR/ViewerStrings.properties | 18 +- locale/pt_PT/ViewerStrings.properties | 147 +++--- locale/ro_RO/ViewerStrings.properties | 18 +- locale/ru_RU/ViewerStrings.properties | 18 +- locale/sv_SE/ViewerStrings.properties | 18 +- locale/zh_CN/ViewerStrings.properties | 26 +- 19 files changed, 686 insertions(+), 402 deletions(-) diff --git a/locale/ar/ViewerStrings.properties b/locale/ar/ViewerStrings.properties index abeea0a..561e46e 100644 --- a/locale/ar/ViewerStrings.properties +++ b/locale/ar/ViewerStrings.properties @@ -1,7 +1,7 @@ contextMenuText=حول ArcGIS Viewer for Flex... -aboutText=هذا التطبيق يستخدم الإصدار 3.1 من ArcGIS Viewer for Flex. تاريخ الإصدار 2012-12-12 . +aboutText=هذا التطبيق يستخدم الإصدار 3.1 من ArcGIS Viewer for Flex. aboutLearnMoreBtn=تعلم المزيد aboutCloseBtn=إغلاق @@ -11,6 +11,11 @@ close=إغلاق minimize=تصغير + +panelExpandTooltip=انقر لتوسيع اللوحة +panelCollapseTooltip=انقر لطي اللوحة + + locateExampleValueX=31.1311 locateExampleValueY=29.9761 @@ -86,7 +91,7 @@ serviceIsInaccessible=الخدمة غير موجودة أو متعذر الحص unauthorizedAccess=ليس لديك أذونات للوصول إلى هذه الخدمة. unknownErrorCause=سبب الخطأ غير معروف. resourceAccessDenied=لا تتوفر لديك أذونات للوصول إلى هذا المورد. -signInAborted=تم إحباظ تسجيل الدخول. +signInAborted=تم إحباط تسجيل الدخول. invalidWidgetId=widgetId غير صالح: {0} printTaskExecutionError=حدث خطأ أثناء تنفيذ مهمة الطباعة:\n\n{0} gpServiceConnectionError=يتعذر الاتصال بخدمة GP:\n{0}\n\n{1}\n{2} @@ -102,6 +107,13 @@ cannotRunTaskExecutionTypeUnknownError=يتعذر تشغيل المهمة: نو layerDataRetrievalError=تعذر إرجاع بيانات الطبقة. couldNotDeleteFeature=تعذر حذف المعلم couldNotUpdateFeatureError=تعذر تحديث المعلم، استعادة القيمة القديمة +cannotDisplayResult=لا يمكن عرض النتيجة على الخريطة. +uploadSecurityError=تمت مواجهة خطأ أمان أثناء تحميل الملف: {0} +uploadIOError=تمت مواجهة خطأ إدخال/إخراج أثناء تحميل الملف: {0} +uploadUnknownError=حدث خطأ غير معروف أثناء تحميل الملف. +couldNotProcessUploadResponse=تعذرت معالجة تحميل الاستجابة الكاملة. +fileExceedsAllowedUploadSize=يتجاوز الملف الحد الأقصى المسموح به لحجم التحميل. ({0} ميجابايت) +fileUploadError=خطأ في تحميل الملف configFileCrossDomain=مشكلة محتملة عبر المجالات: {0}{1} @@ -329,6 +341,10 @@ outputLabel=المخرجات copyToClipboard=نسخ إلى الحافظة unsupportedInputType=إدخال {0} غير مدعوم currentExtentWillBeUsedAsInput=سيتم استخدام الحد الحالي كإدخال. +byURL=حسب عنوان URL +fileURL=عنوان URL للملف +uploadFile=تحميل ملف +or=أو zoomLabel=تقريب إلى diff --git a/locale/da_DK/ViewerStrings.properties b/locale/da_DK/ViewerStrings.properties index 30ff8ca..f59e30f 100644 --- a/locale/da_DK/ViewerStrings.properties +++ b/locale/da_DK/ViewerStrings.properties @@ -1,7 +1,7 @@ contextMenuText=Om ArcGIS Viewer for Flex... -aboutText=Denne applikation bruger ArcGIS Viewer for Flex version @VERSION@.\nBuild-dato @BUILD_DATE@. +aboutText=Denne applikation bruger ArcGIS Viewer for Flex version 3.1. aboutLearnMoreBtn=Lær mere aboutCloseBtn=Luk @@ -12,8 +12,8 @@ minimize=Minimér -panelExpandTooltip=Click to expand the panel -panelCollapseTooltip=Click to collapse the panel +panelExpandTooltip=Klik for at udvide panelet +panelCollapseTooltip=Klik for at trække panelet sammen locateExampleValueX=12.5683 @@ -107,6 +107,13 @@ cannotRunTaskExecutionTypeUnknownError=Kan ikke køre opgave: eksekveringstype e layerDataRetrievalError=Kunne ikke hente lagdata. couldNotDeleteFeature=Kunne ikke slette objekt couldNotUpdateFeatureError=Kunne ikke opdatere objektet. Gendanner tidligere værdi. +cannotDisplayResult=Kan ikke vise resultat på kort. +uploadSecurityError=Stødte på sikkerhedsfejl under overførsel af fil: {0} +uploadIOError=Stødte på IO-fejl under overførsel af fil: {0} +uploadUnknownError=Der opstod en ukendt fejl under overførsel af fil. +couldNotProcessUploadResponse=Kunne ikke behandle komplet respons for overførsel. +fileExceedsAllowedUploadSize=Fil overskrider den maksimalt tilladte størrelse, som kan overføres ({0} MB). +fileUploadError=Fejl ved overførsel af fil configFileCrossDomain=Muligt tværdomæneproblem: {0}{1} @@ -334,6 +341,10 @@ outputLabel=Output copyToClipboard=Kopiér til udklipsholder unsupportedInputType={0} input understøttes ikke currentExtentWillBeUsedAsInput=Den aktuelle udstrækning vil blive brugt som input. +byURL=Vha. URL +fileURL=Fil-URL +uploadFile=Overfør fil +or=eller zoomLabel=Zoom til diff --git a/locale/de_DE/ViewerStrings.properties b/locale/de_DE/ViewerStrings.properties index 8d3d158..2683045 100644 --- a/locale/de_DE/ViewerStrings.properties +++ b/locale/de_DE/ViewerStrings.properties @@ -1,7 +1,7 @@ contextMenuText=Info zu ArcGIS Viewer for Flex... -aboutText=Diese Anwendung verwendet ArcGIS Viewer for Flex Version 3.1.\nBuild-Datum: 2012-12-12. +aboutText=Diese Anwendung verwendet die Version 3.1 von ArcGIS Viewer for Flex. aboutLearnMoreBtn=Weitere Informationen aboutCloseBtn=Schließen @@ -11,6 +11,11 @@ close=Schließen minimize=Minimieren + +panelExpandTooltip=Klicken Sie, um den Bereich zu erweitern. +panelCollapseTooltip=Klicken Sie, um den Bereich zu reduzieren. + + locateExampleValueX=13.376 locateExampleValueY=52.519 @@ -102,6 +107,13 @@ cannotRunTaskExecutionTypeUnknownError=Task kann nicht ausgeführt werden: Ausf layerDataRetrievalError=Layer-Daten konnten nicht abgerufen werden. couldNotDeleteFeature=Feature konnte nicht gelöscht werden couldNotUpdateFeatureError=Feature konnte nicht aktualisiert werden. Der alte Wert wird wiederhergestellt. +cannotDisplayResult=Das Ergebnis kann nicht auf der Karte angezeigt werden. +uploadSecurityError=Beim Hochladen folgender Datei wurde ein Sicherheitsfehler festgestellt: {0} +uploadIOError=Beim Hochladen der folgenden Datei wurde ein E/A-Fehler festgestellt: {0} +uploadUnknownError=Beim Hochladen der Datei ist ein unbekannter Fehler aufgetreten. +couldNotProcessUploadResponse=Die Antwort beim Hochladen konnte nicht vollständig verarbeitet werden. +fileExceedsAllowedUploadSize=Die Datei überschreitet die maximal zulässige Größe beim Hochladen. ({0} MB) +fileUploadError=Fehler beim Hochladen der Datei. configFileCrossDomain=Mögliches domänenübergreifendes Problem: {0} {1} @@ -329,6 +341,10 @@ outputLabel=Ausgabe copyToClipboard=In die Zwischenablage kopieren unsupportedInputType={0} Eingabe wird nicht unterstützt currentExtentWillBeUsedAsInput=Die aktuelle Ausdehnung wird als Eingabe verwendet. +byURL=Über die URL +fileURL=Datei-URL +uploadFile=Datei hochladen +or=oder zoomLabel=Zoomen auf diff --git a/locale/es_ES/ViewerStrings.properties b/locale/es_ES/ViewerStrings.properties index 75f97e7..d9c3aef 100644 --- a/locale/es_ES/ViewerStrings.properties +++ b/locale/es_ES/ViewerStrings.properties @@ -1,7 +1,7 @@ contextMenuText=Acerca de ArcGIS Viewer for Flex... -aboutText=Esta aplicación utiliza ArcGIS Viewer for Flex versión 3.1.\nFecha de compilación 2012-12-12. +aboutText=Esta aplicación utiliza ArcGIS Viewer for Flex versión 3.1. aboutLearnMoreBtn=Más información aboutCloseBtn=Cerrar @@ -11,6 +11,11 @@ close=Cerrar minimize=Minimizar + +panelExpandTooltip=Haga clic para expandir el panel +panelCollapseTooltip=Haga clic para contraer el panel + + locateExampleValueX=-3.7139 locateExampleValueY=40.4181 @@ -102,6 +107,13 @@ cannotRunTaskExecutionTypeUnknownError=No se puede ejecutar la tarea: tipo de ej layerDataRetrievalError=No se pudieron recuperar los datos de la capa. couldNotDeleteFeature=No se pudo eliminar la entidad couldNotUpdateFeatureError=No se pudo actualizar la entidad, restaurando valor anterior +cannotDisplayResult=No se puede mostrar el resultado en el mapa. +uploadSecurityError=Se ha encontrado un error de seguridad mientras se cargaba el archivo: {0} +uploadIOError=Se ha encontrado un error de E/S mientras se cargaba el archivo: {0} +uploadUnknownError=Ha ocurrido un error desconocido mientras se cargaba el archivo. +couldNotProcessUploadResponse=No se pudo procesar la respuesta de carga completa. +fileExceedsAllowedUploadSize=El archivo supera el tamaño de carga máximo permitido. ({0} MB) +fileUploadError=Error de carga de archivo configFileCrossDomain=Posible problema de crossdomain: {0}{1} @@ -329,6 +341,10 @@ outputLabel=Salida copyToClipboard=Copiar al portapapeles unsupportedInputType=No se admite la entrada {0} currentExtentWillBeUsedAsInput=Se usará la extensión actual como entrada. +byURL=Por dirección URL +fileURL=Dirección URL de archivo +uploadFile=Cargar archivo +or=o zoomLabel=Acercar a diff --git a/locale/fr_FR/ViewerStrings.properties b/locale/fr_FR/ViewerStrings.properties index ef6f674..d112a13 100644 --- a/locale/fr_FR/ViewerStrings.properties +++ b/locale/fr_FR/ViewerStrings.properties @@ -1,7 +1,7 @@ contextMenuText=A propos d’ArcGIS Viewer for Flex... -aboutText=Cette application utilise ArcGIS Viewer for Flex version 3.1.\nDate de la version 2012-12-12. +aboutText=Cette application utilise ArcGIS Viewer for Flex version 3.1. aboutLearnMoreBtn=En savoir plus aboutCloseBtn=Fermer @@ -11,6 +11,11 @@ close=Fermer minimize=Réduire + +panelExpandTooltip=Cliquez pour développer le volet +panelCollapseTooltip=Cliquez pour réduire le volet + + locateExampleValueX=2.2945 locateExampleValueY=48.8583 @@ -102,6 +107,13 @@ cannotRunTaskExecutionTypeUnknownError=Impossible d’exécuter la tâche : type layerDataRetrievalError=Impossible d’extraire les données de la couche. couldNotDeleteFeature=Impossible de supprimer l’entité couldNotUpdateFeatureError=Impossible de mettre à jour l’entité, rétablissement de l’ancienne valeur +cannotDisplayResult=Impossible d’afficher le résultat sur la carte. +uploadSecurityError=Une erreur de sécurité s’est produite durant le téléchargement du fichier : {0} +uploadIOError=Une erreur d’E/S s’est produite durant le téléchargement du fichier : {0} +uploadUnknownError=Une erreur inconnue s’est produite durant le téléchargement du fichier. +couldNotProcessUploadResponse=Impossible de traiter la réponse complète du téléchargement. +fileExceedsAllowedUploadSize=Le fichier dépasse la taille de téléchargement maximale autorisée. ({0} Mo) +fileUploadError=Erreur de téléchargement du fichier configFileCrossDomain=Problème possible de domaines croisés : {0}{1} @@ -329,6 +341,10 @@ outputLabel=Sortie copyToClipboard=Copy to Clipboard unsupportedInputType={0} l’entrée n’est pas prise en charge currentExtentWillBeUsedAsInput=L’étendue courante sera utilisée en entrée. +byURL=Par URL +fileURL=URL du fichier +uploadFile=Télécharger le fichier +or=ou zoomLabel=Zoom sur diff --git a/locale/he_IL/ViewerStrings.properties b/locale/he_IL/ViewerStrings.properties index c69ba8a..d1be892 100644 --- a/locale/he_IL/ViewerStrings.properties +++ b/locale/he_IL/ViewerStrings.properties @@ -1,7 +1,7 @@ contextMenuText=אודות צפיין ArcGIS ל- Flex... -aboutText=אפליקציה זו משתמשת בצפיין ArcGIS לגרסת Flex @VERSION@.\nתאריך בניה @BUILD_DATE@. +aboutText=אפליקציה זו משתמשת ב - ArcGIS Viewer for Flex version 3.1. aboutLearnMoreBtn=לימוד נוסף aboutCloseBtn=סגור @@ -12,8 +12,8 @@ minimize=מזער -panelExpandTooltip=Click to expand the panel -panelCollapseTooltip=Click to collapse the panel +panelExpandTooltip=הקלק להרחבת הפאנל +panelCollapseTooltip=הקלק לקיפול הפאנל locateExampleValueX=34.7932 @@ -107,6 +107,13 @@ cannotRunTaskExecutionTypeUnknownError=לא יכול להריץ משימה: סו layerDataRetrievalError=לא יכול לקבל נתוני שכבה. couldNotDeleteFeature=לא יכול למחוק ישות couldNotUpdateFeatureError=לא יכול למחוק ישות, משחזר ערך קודם +cannotDisplayResult=לא ניתן להציג את התוצאות על המפה. +uploadSecurityError=ארעה שגיאת אבטחה בזמן העלאת קובץ: {0} +uploadIOError=ארעה שגיאת IO בזמן העלאת קובץ: {0} +uploadUnknownError=שגיאה לא ידועה ארעה בזמן העלאת הקובץ. +couldNotProcessUploadResponse=לא ניתן לעבד את התגובה לסיום תהליך ההעלאה. +fileExceedsAllowedUploadSize=גודל הקובץ עולה על הגודל המקסימלי המותר בהעלאה. ({0} MB) +fileUploadError=שגיאת העלאת קובץ configFileCrossDomain=נושא crossdomain אפשרי: {0}{1} @@ -334,6 +341,10 @@ outputLabel=פלט copyToClipboard=העתק ללוח עריכה unsupportedInputType=קלט {0} לא נתמך currentExtentWillBeUsedAsInput=התיחום הנוכחי יהיה הקלט. +byURL=לפי URL +fileURL=קובץ URL +uploadFile=העלאת קובץ +or=או zoomLabel=התמקדול diff --git a/locale/it_IT/ViewerStrings.properties b/locale/it_IT/ViewerStrings.properties index 83c93a4..cf4dc0d 100644 --- a/locale/it_IT/ViewerStrings.properties +++ b/locale/it_IT/ViewerStrings.properties @@ -1,7 +1,7 @@ contextMenuText=Informazioni su ArcGIS Viewer for Flex... -aboutText=Questa applicazione utilizza ArcGIS Viewer for Flex versione 3.1.\nData build 2012-12-12. +aboutText=Questa applicazione utilizza ArcGIS Viewer for Flex versione 3.1. aboutLearnMoreBtn=Ulteriori informazioni aboutCloseBtn=Chiudi @@ -11,6 +11,11 @@ close=Chiudi minimize=Riduci a icona + +panelExpandTooltip=Fare clic per espandere il pannello +panelCollapseTooltip=Fare clic per comprimere il pannello + + locateExampleValueX=12.4832 locateExampleValueY=41.9060 @@ -102,6 +107,13 @@ cannotRunTaskExecutionTypeUnknownError=Impossibile eseguire l´attività: tipo d layerDataRetrievalError=Impossibile recuperare i dati del layer. couldNotDeleteFeature=Impossibile eliminare la feature couldNotUpdateFeatureError=Impossibile aggiornare la feature. Verrà ripristinato il vecchio valore. +cannotDisplayResult=Impossibile visualizzare il risultato nella mappa. +uploadSecurityError=Rilevato errore di sicurezza durante il caricamento del file: {0} +uploadIOError=Rilevato errore di I/O durante il caricamento del file: {0} +uploadUnknownError=Si è verificato un errore sconosciuto durante il caricamento del file. +couldNotProcessUploadResponse=Impossibile elaborare la risposta per il completamento del caricamento. +fileExceedsAllowedUploadSize=La dimensione del file supera quella massima consentita. ({0} MB) +fileUploadError=Errore di caricamento file configFileCrossDomain=Possibile problema di crossdomain: {0}{1} @@ -329,6 +341,10 @@ outputLabel=Output copyToClipboard=Copia negli Appunti unsupportedInputType=Input {0} non supportato currentExtentWillBeUsedAsInput=Come valore di input verrà utilizzata l´estensione corrente. +byURL=Per URL +fileURL=URL file +uploadFile=Carica file +or=o zoomLabel=Zoom a diff --git a/locale/ja_JP/ViewerStrings.properties b/locale/ja_JP/ViewerStrings.properties index dca8394..02bed7f 100644 --- a/locale/ja_JP/ViewerStrings.properties +++ b/locale/ja_JP/ViewerStrings.properties @@ -1,7 +1,7 @@ contextMenuText=ArcGIS Viewer for Flex について... -aboutText=このアプリケーションには ArcGIS Viewer for Flex version 3.1 が使用されています。\nビルド日付 2012-12-12 +aboutText=このアプリケーションには ArcGIS Viewer for Flex version 3.1 が使用されています。 aboutLearnMoreBtn=詳細 aboutCloseBtn=閉じる @@ -11,6 +11,11 @@ close=閉じる minimize=最小化 + +panelExpandTooltip=クリックしてパネルを展開 +panelCollapseTooltip=クリックしてパネルを折りたたみ + + locateExampleValueX=139.7671 locateExampleValueY=35.6809 @@ -78,7 +83,7 @@ parseConfigErrorText=構成ファイルの解析中に問題が発生しまし standalonePlayerExternalInterfaceErrorText=エラーが発生しました。スタンドアロン版プレイヤーでは ExternalInterface は機能しません。 layerFailedToLoad:{0} レイヤの読み込みに失敗しました: {1} couldNotFetchBasemapData=ベースマップ データをフェッチできません:\n{0} -couldNotConnectToPortal=Portal に接続できません。 +couldNotConnectToPortal=ポータルに接続できません。 couldNotQueryPortal=ポータルのクエリができません。 couldNotQueryPortalItems=ポータル アイテムのクエリができません。 serverMissingCrossDomain=GIS サーバにクロスドメイン ファイルがありません。 @@ -92,7 +97,7 @@ printTaskExecutionError=印刷タスクの実行エラー:\n\n{0} gpServiceConnectionError=ジオプロセシング サービスに接続できません:\n{0}\n\n{1}\n{2} locatorServiceConnectionError=ロケータ サービスに接続できません:\n{0}\n\n{1}\n{2} singleLineGeocodingNotSupportedError=ロケータ サービスはシングルライン ジオコーディングをサポートしていません。 -rssFeedParsingError=RSS フィードの解析中にエラーが発生しました。{0} +rssFeedParsingError=RSS フィードの解析中に問題が発生しました。{0} httpResponseNotXMLError=HTTP 応答が XML ではありません。 unknownRSSFeedTypeError=RSS フィード タイプを特定できません。 initializationError=初期化中に問題が発生しました: {0} @@ -102,6 +107,13 @@ cannotRunTaskExecutionTypeUnknownError=タスクを実行できません: 実行 layerDataRetrievalError=レイヤ データを取得できません。 couldNotDeleteFeature=フィーチャを削除できません。 couldNotUpdateFeatureError=フィーチャを更新できません。古い値を復元します。 +cannotDisplayResult=結果をマップ上に表示できません。 +uploadSecurityError=ファイルのアップロード中にセキュリティ エラーが発生しました: {0} +uploadIOError=ファイルのアップロード中に IO エラーが発生しました: {0} +uploadUnknownError=ファイルのアップロード中に原因不明のエラーが発生しました。 +couldNotProcessUploadResponse=アップロード完了応答を処理できませんでした。 +fileExceedsAllowedUploadSize=ファイルが最大アップロード可能サイズ ({0} MB) を超えています。 +fileUploadError=ファイル アップロード エラー configFileCrossDomain=考えられるクロスドメインの問題: {0}{1} @@ -243,7 +255,7 @@ relatedRecordsLabel=関連データ featureLayerOutOfScaleText=このフィーチャ レイヤは縮尺の範囲外にあります showAttachmentsText=添付ファイル showRelatedRecordsText=関連データ -showAttributesText=前の表示範囲に戻る +showAttributesText=戻る selectTemplateText=フィーチャを作成するテンプレートの選択 noEditableLayersText=編集可能なレイヤがありません。 noCreateCapabilityLayersText=ケーパビリティを作成しているレイヤがありません @@ -329,6 +341,10 @@ outputLabel=出力 copyToClipboard=クリップボードにコピー unsupportedInputType={0} の入力はサポートされていません currentExtentWillBeUsedAsInput=現在の範囲が入力として使用されます。 +byURL=URL +fileURL=ファイル URL +uploadFile=ファイルのアップロード +or=または zoomLabel=ズーム diff --git a/locale/ko_KR/ViewerStrings.properties b/locale/ko_KR/ViewerStrings.properties index d7b576c..52b1b52 100644 --- a/locale/ko_KR/ViewerStrings.properties +++ b/locale/ko_KR/ViewerStrings.properties @@ -1,7 +1,7 @@ contextMenuText=ArcGIS Viewer for Flex 정보... -aboutText=이 응용프로그램은 ArcGIS Viewer for Flex 버전 3.1을(를) 사용 중입니다.\n빌드 날짜 2012-12-12. +aboutText=이 응용프로그램은 ArcGIS Viewer for Flex 버전 3.1을 사용 중입니다. aboutLearnMoreBtn=자세히 보기 aboutCloseBtn=닫기 @@ -11,6 +11,11 @@ close=닫기 minimize=최소화 + +panelExpandTooltip=패널을 확대하려면 클릭 +panelCollapseTooltip=패널을 축소하려면 클릭 + + locateExampleValueX=126.9779 locateExampleValueY=37.5665 @@ -102,6 +107,13 @@ cannotRunTaskExecutionTypeUnknownError=작업을 실행할 수 없습니다. 알 layerDataRetrievalError=레이어 데이터를 검색할 수 없습니다. couldNotDeleteFeature=피처를 삭제할 수 없음 couldNotUpdateFeatureError=피처를 업데이트할 수 없습니다. 이전 값을 복원합니다. +cannotDisplayResult=맵에 결과를 표시할 수 없습니다. +uploadSecurityError=파일을 업로드하는 중에 보안 오류가 발생했습니다. {0} +uploadIOError=파일을 업로드하는 중에 IO 오류가 발생했습니다. {0} +uploadUnknownError=파일을 업로드하는 중에 알 수 없는 오류가 발생했습니다. +couldNotProcessUploadResponse=업로드 완료 응답을 처리할 수 없습니다. +fileExceedsAllowedUploadSize=파일이 허용되는 최대 업로드 크기({0}MB)를 초과했습니다. +fileUploadError=파일 업로드 오류 configFileCrossDomain=가능한 교차 도메인 문제: {0}{1} @@ -328,7 +340,11 @@ helpLabel=도움말 outputLabel=출력 copyToClipboard=클립보드로 복사 unsupportedInputType={0} 입력은 지원되지 않습니다. -currentExtentWillBeUsedAsInput=현재 익스텐트가 입력으로 사용됩니다. +currentExtentWillBeUsedAsInput=현재 범위가 입력으로 사용됩니다. +byURL=URL순 +fileURL=파일 URL +uploadFile=파일 업로드 +or=또는 zoomLabel=확대 diff --git a/locale/lt_LT/ViewerStrings.properties b/locale/lt_LT/ViewerStrings.properties index 3c09474..ad658f7 100644 --- a/locale/lt_LT/ViewerStrings.properties +++ b/locale/lt_LT/ViewerStrings.properties @@ -1,164 +1,171 @@ -contextMenuText=About ArcGIS Viewer for Flex... -aboutText=This application is using ArcGIS Viewer for Flex version @VERSION@.\nBuild date @BUILD_DATE@. -aboutLearnMoreBtn=Learn more -aboutCloseBtn=Close +contextMenuText=Apie ArcGIS Viewer for Flex... +aboutText=Aplikacija sukurta naudojant ArcGIS Viewer for Flex versiją 3.1. +aboutLearnMoreBtn=Plačiau +aboutCloseBtn=Uždaryti -close=Close -minimize=Minimize +close=Uždaryti +minimize=Sumažinti -panelExpandTooltip=Click to expand the panel -panelCollapseTooltip=Click to collapse the panel +panelExpandTooltip=Paspaudę išskleisite +panelCollapseTooltip=Paspaudę suskleisite locateExampleValueX=25.2833 locateExampleValueY=54.6833 -clearLabel=Clear -deleteLabel=Delete -loadingLabel=Loading... -okLabel=OK -errorLabel=Error -problemLabel=Problem -noFeatures=No features found. -resultsLabel=Results -saveLabel=Save +clearLabel=Naikinti +deleteLabel=Trinti +loadingLabel=Įkeliama... +okLabel=Gerai +errorLabel=Klaida +problemLabel=Klaida +noFeatures=Objektų nerasta. +resultsLabel=Rezultatai +saveLabel=Išsaugoti -unitsFeet=Feet -unitsFeetAbbr=ft -unitsKilometers=Kilometers +unitsFeet=Pėdos +unitsFeetAbbr=pėd. +unitsKilometers=Kilometrai unitsKilometersAbbr=km -unitsMeters=Meters +unitsMeters=Metrai unitsMetersAbbr=m -unitsMiles=Miles -unitsMilesAbbr=mi -unitsYards=Yards -unitsYardsAbbr=yd - -unitsAcres=Acres -unitsAcresAbbr=ac -unitsHectares=Hectares +unitsMiles=Mylios +unitsMilesAbbr=myl. +unitsYards=Jardai +unitsYardsAbbr=jard. + +unitsAcres=Akrai +unitsAcresAbbr=akr. +unitsHectares=Hektarai unitsHectaresAbbr=ha -unitsSquareFeet=Square feet -unitsSquareFeetAbbr=sq ft -unitsSquareKilometers=Square kilometers -unitsSquareKilometersAbbr=sq km -unitsSquareMeters=Square meters -unitsSquareMetersAbbr=sq m -unitsSquareMiles=Square miles -unitsSquareMilesAbbr=sq mi -unitsSquareYards=Square yards -unitsSquareYardsAbbr=sq yd - - -tocMapLayerZoomToLabel=Zoom to -tocMapLayerTransparencyLabel=Transparency -tocMapLayerOpaqueLabel=Opaque -tocMapLayerTransparentLabel=Transparent -tocMapLayerMoveUpLabel=Move up -tocMapLayerMoveDownLabel=Move down -tocMapLayerRemoveLabel=Remove -tocMapLayerDescriptionLabel=Description -tocMapLayerDownloadLabel=Download - - -incorrectLayerTypeText={0} is not a supported layer type. Use "arcims", "bing", "csv", "dynamic", "feature", "georss", "image", "kml", "osm", "tiled", "wms" or "wmts" instead. - - -missingConfigFileText=Could not find {0} -httpResponseStatus=http response status: {0} -faultCode=Fault code: {0} -faultInfo=Fault info: {0} -faultDetail=Fault details: {0} - - -parseConfigErrorText=A problem occurred while parsing the configuration file {0} -standalonePlayerExternalInterfaceErrorText=Some error occurred. ExternalInterface doesn't work in Standalone player. -layerFailedToLoad:{0} layer failed to load: {1} -couldNotFetchBasemapData=Could not fetch basemap data:\n{0} -couldNotConnectToPortal=Could not connect to Portal. -couldNotQueryPortal=Could not query portal. -couldNotQueryPortalItems=Could not query portal items. -serverMissingCrossDomain=GIS Server is missing a crossdomain file. -serviceIsInaccessible=Service does not exist or is inaccessible. -unauthorizedAccess=You don't have permissions to access this service. -unknownErrorCause=Unknown error cause. -resourceAccessDenied=You do not have permissions to access this resource. -signInAborted=Sign in aborted. -invalidWidgetId=Invalid widgetId: {0} -printTaskExecutionError=Error executing print task:\n\n{0} -gpServiceConnectionError=Unable to connect to GP Service:\n{0}\n\n{1}\n{2} -locatorServiceConnectionError=Unable to connect to Locator Service:\n{0}\n\n{1}\n{2} -singleLineGeocodingNotSupportedError=Locator service does not support single-line geocoding. -rssFeedParsingError=A problem occurred while parsing the RSS feed. {0} -httpResponseNotXMLError=HTTP Response is not XML. -unknownRSSFeedTypeError=Unable to determine RSS feed type. -initializationError=A problem ocurred while initializing: {0} -unableToDetermineGPExecutionType=Could not determine geoprocessing execution type: -projectionError=Error projecting geometry: {0} -cannotRunTaskExecutionTypeUnknownError=Cannot run task: execution type unknown. -layerDataRetrievalError=Could not retrieve layer data. -couldNotDeleteFeature=Could not delete feature -couldNotUpdateFeatureError=Could not update feature, Restoring old value - - -configFileCrossDomain=Possible crossdomain issue: {0}{1} - - -openToolTip=Click to open overview map -closeToolTip=Click to close overview map - - -layerListLabel=More... -basemap=Basemap - - -aboutLabel=About -searchPrompt=Enter address -searchResultTitleLabel=Location -noResultsFoundLabel=No results found - - -fullExtentLabel=Full Extent -panDownLabel=Pan down -panLeftLabel=Pan left -panRightLabel=Pan right -panUpLabel=Pan up -previousExtentLabel=Previous Extent -nextExtentLabel=Next Extent -panLabel=Pan -zoomInLabel=Zoom in -zoomOutLabel=Zoom out - - - - - - -addTextLabel=Add Text -drawPointLabel=Draw Point -drawLineLabel=Draw Line -drawFreehandLineLabel=Draw Freehand Line -drawPolygonLabel=Draw Polygon -drawFreehandPolygonLabel=Draw Freehand Polygon -drawRectangleLabel=Draw Rectangle -drawMapExtentLabel=Draw Map Extent -drawCircleLabel=Draw Circle -drawEllipseLabel=Draw Ellipse -drawClearLabel=Clear drawings - -markerStyleCircle=Circle -markerStyleCross=Cross -markerStyleDiamond=Diamond -markerStyleSquare=Square -markerStyleTriangle=Triangle +unitsSquareFeet=kv. pėdos +unitsSquareFeetAbbr=kv. pėd. +unitsSquareKilometers=kv. kilometrai +unitsSquareKilometersAbbr=kv. km +unitsSquareMeters=kv. metrai +unitsSquareMetersAbbr=kv. m. +unitsSquareMiles=kv. mylios +unitsSquareMilesAbbr=kv. myl. +unitsSquareYards=kv. jardai +unitsSquareYardsAbbr=kv. jard. + + +tocMapLayerZoomToLabel=Artinti +tocMapLayerTransparencyLabel=Perregimumas +tocMapLayerOpaqueLabel=Neperregimas +tocMapLayerTransparentLabel=Perregimas +tocMapLayerMoveUpLabel=Aukščiau +tocMapLayerMoveDownLabel=Žemiau +tocMapLayerRemoveLabel=Šalinti +tocMapLayerDescriptionLabel=Aprašymas +tocMapLayerDownloadLabel=Atsisiųsti + + +incorrectLayerTypeText={0} yra nepalaikomas sluoksnio tipas. Naudokite "arcims", "bing", "csv", "dynamic", "feature", "georss", "image", "kml", "osm", "tiled", "wms" ar "wmts". + + +missingConfigFileText=Nepavyko rasti: {0} +httpResponseStatus=http atsakas: {0} +faultCode=Klaidos kodas: {0} +faultInfo=Klaida: {0} +faultDetail=Klaidos informacija: {0} + + +parseConfigErrorText=Problema apdorojant konfigūracijos failą: {0} +standalonePlayerExternalInterfaceErrorText=Klaida. ExternalInterface neveikia atskirame leistuve. +layerFailedToLoad:Sluoksnio {0} nepavyko įkelti: {1} +couldNotFetchBasemapData=Nepavyko gauti pagrindo žemėlapio duomenų:\n{0} +couldNotConnectToPortal=Nepavyko prisijungti prie Portalo. +couldNotQueryPortal=Nepavyko įvykdyti užklausos portale. +couldNotQueryPortalItems=Nepavyko įvykdyti portalo elementų užklausos. +serverMissingCrossDomain=GIS Serveryje trūksta crossdomain failo. +serviceIsInaccessible=Servisas nepasiekiamas arba jo nėra. +unauthorizedAccess=Jums nesuteikta teisė naudoti šį servisą. +unknownErrorCause=Nežinoma klaidos priežastis. +resourceAccessDenied=Jums nesuteikta teisė naudotis. +signInAborted=Prisijungimas atšauktas. +invalidWidgetId=Netinkamas widgetId: {0} +printTaskExecutionError=Klaida vykdant spausdinimą:\n\n{0} +gpServiceConnectionError=Nepavyko prisijungti prie GP serviso:\n{0}\n\n{1}\n{2} +locatorServiceConnectionError=Nepavyko prisijungti prie lokatoriaus serviso:\n{0}\n\n{1}\n{2} +singleLineGeocodingNotSupportedError=Lokatoriaus servisas nepalaiko vieno lauko geokodavimo. +rssFeedParsingError=Klaida apdorojant RSS giją. {0} +httpResponseNotXMLError=HTTP atsakas nėra XML. +unknownRSSFeedTypeError=Nepavyko nustatyti RSS gijos tipo. +initializationError=Problema inicijavimo metu: {0} +unableToDetermineGPExecutionType=Nepavyko nustatyti geoduomenų apdorojimo vykdymo tipo: +projectionError=Klaida projektuojant geometriją: {0} +cannotRunTaskExecutionTypeUnknownError=Nepavyko įvykdyti užduoties: nežinomas vykdymo tipas. +layerDataRetrievalError=Nepavyko gauti sluoksnio duomenų. +couldNotDeleteFeature=Nepavyko ištrinti objekto +couldNotUpdateFeatureError=Nepavyko pakeisti objekto, grąžinta ankstesnė reikšmė +cannotDisplayResult=Rezultato negalima parodyti žemėlapyje. +uploadSecurityError=Saugumo klaida įkeliant failą: {0} +uploadIOError=Įvesties/išvesties klaida įkeliant failą: {0} +uploadUnknownError=Nežinoma klaida įkeliant failą. +couldNotProcessUploadResponse=Negalima apdoroti įkėlimo pabaigos pranešimo. +fileExceedsAllowedUploadSize=Didesnis nei leidžiamas įkeliamo failo dydis. ({0} MB) +fileUploadError=Failo įkėlimo klaida + + +configFileCrossDomain=Galima skirtingų domenų problema: {0}{1} + + +openToolTip=Paspaudę atversite apžvalgos žemėlapį +closeToolTip=Paspaudę užversite apžvalgos žemėlapį + + +layerListLabel=Daugiau... +basemap=Pagrindas + + +aboutLabel=Apie +searchPrompt=Įveskite adresą +searchResultTitleLabel=Vieta +noResultsFoundLabel=Nieko nerasta + + +fullExtentLabel=Visa aprėptis +panDownLabel=Žemyn +panLeftLabel=Kairėn +panRightLabel=Dešinėn +panUpLabel=Į viršų +previousExtentLabel=Atgal +nextExtentLabel=Pirmyn +panLabel=Perstumti +zoomInLabel=Artinti +zoomOutLabel=Tolinti + + + + + + +addTextLabel=Tekstas +drawPointLabel=Taškas +drawLineLabel=Linija +drawFreehandLineLabel=Piešti liniją +drawPolygonLabel=Poligonas +drawFreehandPolygonLabel=Piešti poligoną +drawRectangleLabel=Stačiakampis +drawMapExtentLabel=Žemėlapio aprėptis +drawCircleLabel=Apskritimas +drawEllipseLabel=Elipsė +drawClearLabel=Iš naujo + +markerStyleCircle=Apskritimas +markerStyleCross=Kryžius +markerStyleDiamond=Rombas +markerStyleSquare=Kvadratas +markerStyleTriangle=Trikampis markerStyleX=X textFont1=Arial @@ -168,188 +175,192 @@ textFont4=Comic Sans MS textFont5=Algerian textFont6=Verdana -lineStyleSolid=Solid -lineStyleDash=Dash -lineStyleDot=Dot -lineStyleDashDot=Dash Dot -lineStyleDashDotDot=Dash Dot Dot - -fillStyleSolid=Solid -fillStyleBackwardDiagonal=Backward Diagonal -fillStyleCross=Cross -fillStyleForwardDiagonal=Forward Diagonal -fillStyleHorizontal=Horizontal -fillStyleVertical=Vertical - - - -markerAlphaLabel=Alpha -markerColorLabel=Marker Color -markerSizeLabel=Size -markerStyleLabel=Style -markerOutlineColorLabel=Outline Color -markerOutlineWidthLabel=Width -textLabel=Text -textColorLabel=Color -textFontLabel=Font -textSizeLabel=Size +lineStyleSolid=Tolydi +lineStyleDash=Brūkšniai +lineStyleDot=Taškai +lineStyleDashDot=Brūkšnys taškas +lineStyleDashDotDot=Brūkšnys taškas taškas + +fillStyleSolid=Tolydus +fillStyleBackwardDiagonal=Įžambiai kairėn +fillStyleCross=Langeliai +fillStyleForwardDiagonal=Įžambiai dešinėn +fillStyleHorizontal=Horizontaliai +fillStyleVertical=Vertikaliai + + + +markerAlphaLabel=Perregimumas +markerColorLabel=Ženklo spalva +markerSizeLabel=Dydis +markerStyleLabel=Stilius +markerOutlineColorLabel=Kontūro spalva +markerOutlineWidthLabel=Plotis +textLabel=Tekstas +textColorLabel=Spalva +textFontLabel=Šriftas +textSizeLabel=Dydis textBoldLabel=B -textBoldTooltip=Bold +textBoldTooltip=Pastorintas textItalicLabel=I -textItalicTooltip=Italic +textItalicTooltip=Kursyvas textUnderlineLabel=U -textUnderlineTooltip=Underline -lineAlphaLabel=Alpha -lineColorLabel=Line Color -lineStyleLabel=Style -lineWidthLabel=Width -fillAlphaLabel=Alpha -fillColorLabel=Fill Color -fillStyleLabel=Style -fillOutlineColorLabel=Outline Color -fillOutlineWidthLabel=Width - - - - -showMeasurementsLabel=Show Measurements -distanceUnitsLabel=Distance Units -areaUnitsLabel=Area Units -areaLabel=Area: -perimeterLabel=Perimeter: -lengthLabel=Length: - - -bookmarksLabel=Bookmarks -addbookmarksLabel=Add Bookmark -addLabel=Add current extent as a bookmark named -bookmarkSubmitLabel=Add Bookmark -bookmarkMissingNameLabel=Please enter a name for the bookmark. -deleteBookmarkTooltip=Delete bookmark - - -descLabel=Extract data and download zip file -step1Label=1. Select area -dataCurrentExtentLabel=1. Data will be extracted from your current extent. -step2Label=2. Select layers to extract -step3Label=3. Select file format -step4Label=4. Select raster format -step5Label=5. SpatialReference -extractButtonLabel=Extract -step1ErrorLabel=Please select an area of interest. -step2ErrorLabel=Please select layers to extract. -emptyResultsLabel=Task completed but didn't return any results. -saveDataFileLabel=Data file created. Would you like to save it? - - -attributesLabel=Attributes -attachmentsLabel=Attachments -relatedRecordsLabel=Related Records -featureLayerOutOfScaleText=This feature layer is out of scale range -showAttachmentsText=Attachments -showRelatedRecordsText=Related records -showAttributesText=Go back -selectTemplateText=Select template to create feature -noEditableLayersText=No editable layers. -noCreateCapabilityLayersText=None of the layers have create capability -layerNotSupportingAttachmentsText=This layer does not support attachments -noAttachmentsText=No attachments -chooseFileText=Choose a file to attach -attachmentSubmitLabel=Submit -attachmentCancelLabel=Cancel -singleAttachmentText=The feature has {0} attachment -multipleAttachmentsText=The feature has {0} attachments - - -layerListTitle=Layer Visibility - - -locateSubmitLabel=Locate -addressLabel=Address -coordinatesLabel=Coordinates -addressTitle=Enter the address -coordinatesTitle=Enter the coordinates -xLabel=Longitude (X) -yLabel=Latitude (Y) -locationsLabel=Locations found: +textUnderlineTooltip=Pabrauktas +lineAlphaLabel=Perregimumas +lineColorLabel=Linijos spalva +lineStyleLabel=Stilius +lineWidthLabel=Plotis +fillAlphaLabel=Perregimumas +fillColorLabel=Užpildo spalva +fillStyleLabel=Stilius +fillOutlineColorLabel=Kontūro spalva +fillOutlineWidthLabel=Plotis + + + + +showMeasurementsLabel=Rodyti išmatavimus +distanceUnitsLabel=Atstumo vienetai +areaUnitsLabel=Ploto vienetai +areaLabel=Plotas: +perimeterLabel=Perimetras: +lengthLabel=Ilgis: + + +bookmarksLabel=Erdvinės žymės +addbookmarksLabel=Pridėti erdvinę žymę +addLabel=Išsaugokite dabartinę žemėlapio aprėptį +bookmarkSubmitLabel=Pridėti erdvinę žymę +bookmarkMissingNameLabel=Prašome įvesti žymės pavadinimą. +deleteBookmarkTooltip=Šalinti žymę + + +descLabel=Duomenų eksportavimas ir parsisiuntimas zip failu +step1Label=1. Teritorija +dataCurrentExtentLabel=1. Duomenys dabartinėje žemėlapio aprėptyje. +step2Label=2. Sluoksniai +step3Label=3. Formatas +step4Label=4. Rastro formatas +step5Label=5. Koord. sistema +extractButtonLabel=Eksportuoti +step1ErrorLabel=Prašome nurodyti norimą teritoriją. +step2ErrorLabel=Prašome pasirinkti norimus sluoksnius. +emptyResultsLabel=Užduotis įvykdyta, bet nieko negauta. +saveDataFileLabel=Duomenų failas sukurtas. Ar norite išsaugoti? + + +attributesLabel=Atributai +attachmentsLabel=Priedai +relatedRecordsLabel=Susieti įrašai +featureLayerOutOfScaleText=Elementų sluoksnis nepasiekiamas šiame mastelyje +showAttachmentsText=Priedai +showRelatedRecordsText=Susieti įrašai +showAttributesText=Atgal +selectTemplateText=Pasirinkite +noEditableLayersText=Nėra redaguojamų sluoksnių. +noCreateCapabilityLayersText=Nėra galimybės kurti objektus nė viename sluoksnyje. +layerNotSupportingAttachmentsText=Šio sluoksnio objektai negali turėti priedų +noAttachmentsText=Priedų nėra +chooseFileText=Pasirinkite failą +attachmentSubmitLabel=Vykdyti +attachmentCancelLabel=Atšaukti +singleAttachmentText=Priedai: {0} +multipleAttachmentsText=Priedai: {0} + + +layerListTitle=Rodymas + + +locateSubmitLabel=Ieškoti +addressLabel=Adresas +coordinatesLabel=Koordinatės +addressTitle=Įveskite adresą +coordinatesTitle=Įveskite koordinates +xLabel=Ilguma (X) +yLabel=Platuma (Y) +locationsLabel=Rastos vietos: bingCulture=en-US -requiredFields=Required fields: -requiredField=Required field: -deleteResultTooltip=Delete result -resultScoreText=Score: -bingResultConfidenceText=Confidence: +requiredFields=Būtini laukai: +requiredField=Būtinas laukas: +deleteResultTooltip=Trinti rezultatą +resultScoreText=Tikslumas: +bingResultConfidenceText=Patikimumas: -printSubmitLabel=Print +printSubmitLabel=Spausdinimas printTitle= printSubtitle= printCopyright= -printTitleLabel=Title -printSubtitleLabel=Subtitle -printCopyrightLabel=Copyright -printAuthorLabel=Author -printLayoutTemplatesLabel=Layout templates -printFormatsLabel=Formats -printScaleLabel=Use this scale - - -filterTitleBarTooltip=Filter results -showallTitleBarTooltip=Show all -filterButtonLabel=Filter -clearButtonLabel=Show all -featuresFoundLabel=Features found: {0} - - -drivingDirectionLabel=Driving Directions -routeSubmitLabel=Get Directions -moveUpTooltip=Move up -moveDownTooltip=Move down -addLocationTooltip=click on map to add location -optionsLabel=Options -bestSequenceLabel=Find best sequence -milesLabel=Miles +printTitleLabel=Pavadinimas +printSubtitleLabel=Poraštė +printCopyrightLabel=Teisės +printAuthorLabel=Autorius +printLayoutTemplatesLabel=Šablonai +printFormatsLabel=Formatai +printScaleLabel=Naudoti mastelį + + +filterTitleBarTooltip=Filtruoti rezultatus +showallTitleBarTooltip=Rodyti visus +filterButtonLabel=Filtras +clearButtonLabel=Rodyti visus +featuresFoundLabel=Rasti objektai: {0} + + +drivingDirectionLabel=Instrukcijos +routeSubmitLabel=Formuoti maršrutą +moveUpTooltip=Aukščiau +moveDownTooltip=Žemiau +addLocationTooltip=paspaudę žemėlapyje įveskite vietą +optionsLabel=Parinktys +bestSequenceLabel=Rasti geriausią seką +milesLabel=Mylios metricLabel=Km -changeRouteSymbolLabel=Change route symbol -editRouteLabel=Edit Route +changeRouteSymbolLabel=Pakeisti maršruto ženklą +editRouteLabel=Keisti maršrutą -graphicalTitleBarTooltip=Select features -textTitleBarTooltip=Select by attribute -graphicalsearchLabel=Select features by -textsearchLabel=Select by attribute -layerLabel=Search layer -nolayerLabel=No search layer defined. -searchSubmitLabel=Search -selectionLabel=Features selected: +graphicalTitleBarTooltip=Išrinkimas +textTitleBarTooltip=Išrinkti pagal atributus +graphicalsearchLabel=Išrinkti objektus +textsearchLabel=Išrinkti pagal atributus +layerLabel=Sluoksnis +nolayerLabel=Nepasirinktas paieškos sluoksnis +searchSubmitLabel=Išrinkti +selectionLabel=Išrinkti objektai: -latitudeLabel=Latitude -longitudeLabel=Longitude +latitudeLabel=Platuma +longitudeLabel=Ilguma -gpSubmitLabel=Submit -inputLabel=Input -helpLabel=Help -outputLabel=Output -copyToClipboard=Copy to Clipboard -unsupportedInputType={0} input is not supported -currentExtentWillBeUsedAsInput=The current extent will be used as input. +gpSubmitLabel=Vykdyti +inputLabel=Įvestis +helpLabel=Pagalba +outputLabel=Išvestis +copyToClipboard=Kopijuoti +unsupportedInputType={0} neleidžiama +currentExtentWillBeUsedAsInput=Bus naudojama esama žemėlapio aprėptis. +byURL=Pagal URL +fileURL=Failo URL +uploadFile=Įkelti failą +or=arba -zoomLabel=Zoom to +zoomLabel=Artinti -helloContent=Change this text in config file. +helloContent=Pakeiskite šį tekstą konfigūracijos faile. -widgetIDWidgetLabelTemplate=Widget Id: {0}, widget label: {1} -widgetIDWidgetStateTemplate=Widget Id: {0}, widget state: {1} -itemLabelWidgetIDItemIDTemplate={0} Widget ID: {1} +widgetIDWidgetLabelTemplate=Įrankis: {0}, antraštė: {1} +widgetIDWidgetStateTemplate=Įrankis: {0}, būsena: {1} +itemLabelWidgetIDItemIDTemplate={0} Įrankio ID: {1} -layerSelectionLabel=Select layer -drawToolMenuLabel=Select draw tool -selectLabel=Select -noLayersLabel=No layers -noChartDataToDisplayLabel=No chart data to display -featureLayerNotVisibleText=feature layer is either not visible or out of scale range \ No newline at end of file +layerSelectionLabel=Pasirinkite sluoksnį +drawToolMenuLabel=Pasirinkite įrankį +selectLabel=Išrinkti +noLayersLabel=Nėra sluoksnių +noChartDataToDisplayLabel=Nėra atvaizduotinų duomenų +featureLayerNotVisibleText=elementų sluoksnis išjungtas arba nepasiekiamas šiame mastelyje \ No newline at end of file diff --git a/locale/nb_NO/ViewerStrings.properties b/locale/nb_NO/ViewerStrings.properties index 6a149cb..cef8542 100644 --- a/locale/nb_NO/ViewerStrings.properties +++ b/locale/nb_NO/ViewerStrings.properties @@ -1,7 +1,7 @@ contextMenuText=Om ArcGIS Viewer for Flex... -aboutText=Dette programmet bruker ArcGIS Viewer for Flex versjon 3.1.\nByggdato 2012-12-12. +aboutText=Dette programmet bruker ArcGIS Viewer for Flex versjon 3.1. aboutLearnMoreBtn=Lær mer aboutCloseBtn=Lukk @@ -11,6 +11,11 @@ close=Lukk minimize=Minimer + +panelExpandTooltip=Klikk for å utvide panelet +panelCollapseTooltip=Klikk for å redusere panelet + + locateExampleValueX=10.7276 locateExampleValueY=59.9169 @@ -102,6 +107,13 @@ cannotRunTaskExecutionTypeUnknownError=Kan ikke kjøre oppgave: Ukjent utføring layerDataRetrievalError=Kunne ikke hente kartlagdata. couldNotDeleteFeature=Kunne ikke slette geoobjekt couldNotUpdateFeatureError=Kunne ikke oppdatere geoobjekt, gjenoppretter gammel verdi +cannotDisplayResult=Kan ikke vise resultatet på kartet. +uploadSecurityError=Det oppstod en sikkerhetsfeil under opplasting av filen: {0} +uploadIOError=Det oppstod en IO-feil under opplasting av filen: {0} +uploadUnknownError=Det oppstod en ukjent feil under opplasting av filen. +couldNotProcessUploadResponse=Kunne ikke behandle opplasting fullført-responsen. +fileExceedsAllowedUploadSize=Filen overstiger maks. tillatt opplastingsstørrelse. ({0} MB) +fileUploadError=Feil ved filopplasting configFileCrossDomain=Mulig kryssdomeneproblem: {0}{1} @@ -329,6 +341,10 @@ outputLabel=Resultat copyToClipboard=Kopier til utklippstavle unsupportedInputType={0} inndata støttes ikke currentExtentWillBeUsedAsInput=Gjeldende utstrekning vil bli brukt som inndata. +byURL=Etter URL +fileURL=Fil-URL +uploadFile=Last opp fil +or=eller zoomLabel=Zoom til diff --git a/locale/nl_NL/ViewerStrings.properties b/locale/nl_NL/ViewerStrings.properties index 9b00852..22892e2 100644 --- a/locale/nl_NL/ViewerStrings.properties +++ b/locale/nl_NL/ViewerStrings.properties @@ -1,7 +1,7 @@ contextMenuText=Informatie over ArcGIS Viewer for Flex... -aboutText=Deze applicatie maakt gebruik van ArcGIS Viewer for Flex-versie 3.1.\nVersiedatum 2012-12-12. +aboutText=Deze applicatie maakt gebruik van ArcGIS Viewer for Flex-versie 3.1. aboutLearnMoreBtn=Meer informatie aboutCloseBtn=Sluiten @@ -11,6 +11,11 @@ close=Sluiten minimize=Minimaliseren + +panelExpandTooltip=Klik om het deelvenster uit te vouwen +panelCollapseTooltip=Klik om het deelvenster samen te vouwen + + locateExampleValueX=4.884 locateExampleValueY=52.3753 @@ -84,7 +89,7 @@ couldNotQueryPortalItems=Kan geen query uitvoeren op portaalitems. serverMissingCrossDomain=Een crossdomain-bestand ontbreekt op GIS Server. serviceIsInaccessible=Service bestaat niet of is ontoegankelijk. unauthorizedAccess=U beschikt niet over de nodige machtigingen om toegang te krijgen tot deze service. -unknownErrorCause=Oorzaak van onbekende fout. +unknownErrorCause=Onbekende oorzaak van fout. resourceAccessDenied=U hebt geen toegangsmachtigingen voor deze bron. signInAborted=Aanmelding afgebroken. invalidWidgetId=Ongeldige widgetId: {0} @@ -102,6 +107,13 @@ cannotRunTaskExecutionTypeUnknownError=Kan taak niet uitvoeren: uitvoeringstype layerDataRetrievalError=Kan geen laaggegevens ophalen. couldNotDeleteFeature=Kan object niet verwijderen couldNotUpdateFeatureError=Kan object niet bijwerken, oude waarde wordt hersteld +cannotDisplayResult=Kan het resultaat op de kaart niet weergeven. +uploadSecurityError=Beveiligingsfout opgetreden tijdens het uploaden van bestand: {0} +uploadIOError=IO-fout opgetreden tijdens het uploaden van bestand: {0} +uploadUnknownError=Onbekende fout opgetreden tijdens het uploaden van het bestand. +couldNotProcessUploadResponse=Kan antwoord voor voltooien van upload niet verwerken. +fileExceedsAllowedUploadSize=Bestand overschrijdt maximaal toegestane uploadgrootte. ({0} MB) +fileUploadError=Fout tijdens uploaden van bestand configFileCrossDomain=Mogelijk probleem tussen domeinen: {0}{1} @@ -329,6 +341,10 @@ outputLabel=Uitvoer copyToClipboard=Kopiëren naar Klembord unsupportedInputType=Niet-ondersteunde invoer: {0} currentExtentWillBeUsedAsInput=Het huidige extent wordt gebruikt als invoer. +byURL=Op URL +fileURL=Bestands-URL +uploadFile=Bestand uploaden +or=of zoomLabel=Zoomen naar diff --git a/locale/pl_PL/ViewerStrings.properties b/locale/pl_PL/ViewerStrings.properties index b73d341..dc4564b 100644 --- a/locale/pl_PL/ViewerStrings.properties +++ b/locale/pl_PL/ViewerStrings.properties @@ -1,7 +1,7 @@ contextMenuText=O aplikacji ArcGIS Viewer for Flex... -aboutText=Ta aplikacja korzysta z produktu ArcGIS Viewer for Flex w wersji 3.1.\nData kompilacji 2012-12-12. +aboutText=Ta aplikacja korzysta z produktu ArcGIS Viewer for Flex w wersji 3.1. aboutLearnMoreBtn=Dowiedz się więcej aboutCloseBtn=Zamknij @@ -11,6 +11,11 @@ close=Zamknij minimize=Minimalizuj + +panelExpandTooltip=Kliknij, aby rozwinąć panel +panelCollapseTooltip=Kliknij, aby zwinąć panel + + locateExampleValueX=21.011 locateExampleValueY=52.23 @@ -102,6 +107,13 @@ cannotRunTaskExecutionTypeUnknownError=Nie można uruchomić zadania: nieznany t layerDataRetrievalError=Pobieranie danych warstw nie powiodło się. couldNotDeleteFeature=Usunięcie obiektu nie powiodło się couldNotUpdateFeatureError=Aktualizacja obiektu nie powiodła się, przywracanie poprzedniej wartości +cannotDisplayResult=Nie można wyświetlić wyniku na mapie. +uploadSecurityError=Podczas wczytywania pliku wystąpił błąd bezpieczeństwa: {0} +uploadIOError=Podczas wczytywania pliku wystąpił błąd We/Wy: {0} +uploadUnknownError=Podczas wczytywania pliku wystąpił nieznany błąd. +couldNotProcessUploadResponse=Przetwarzanie komunikatu o zakończeniu wczytywania nie powiodło się. +fileExceedsAllowedUploadSize=Rozmiar pliku przekracza maksymalną dopuszczalną wartość. ({0} MB) +fileUploadError=Błąd podczas wczytywania pliku configFileCrossDomain=Możliwy problem z ruchem międzydomenowym: {0}{1} @@ -329,6 +341,10 @@ outputLabel=Dane wynikowe copyToClipboard=Kopiuj do schowka unsupportedInputType={0} dane wejściowe nie są obsługiwane currentExtentWillBeUsedAsInput=Bieżący zasięg zostanie użyty jako wejściowy. +byURL=Według adresu URL +fileURL=Adres URL pliku +uploadFile=Wczytaj plik +or=lub zoomLabel=Powiększ do diff --git a/locale/pt_BR/ViewerStrings.properties b/locale/pt_BR/ViewerStrings.properties index 0a6f63f..8def92d 100644 --- a/locale/pt_BR/ViewerStrings.properties +++ b/locale/pt_BR/ViewerStrings.properties @@ -1,7 +1,7 @@ contextMenuText=Sobre o ArcGIS Viewer for Flex... -aboutText=Este aplicativo utiliza a versão 3.1 do ArcGIS Viewer for Flex.\nData de desenvolvimento 2012-12-12. +aboutText=Este aplicativo utiliza o ArcGIS Viewer for Flex version 3.1. aboutLearnMoreBtn=Obter mais informações aboutCloseBtn=Fechar @@ -11,6 +11,11 @@ close=Fechar minimize=Minimizar + +panelExpandTooltip=Clique para expandir o painel +panelCollapseTooltip=Clique para recolher o painel + + locateExampleValueX=-43.1807 locateExampleValueY=-22.9670 @@ -102,6 +107,13 @@ cannotRunTaskExecutionTypeUnknownError=Não é possível executar a tarefa: tipo layerDataRetrievalError=Não foi possível recuperar os dados da camada. couldNotDeleteFeature=Não foi possível excluir a feição couldNotUpdateFeatureError=Não foi possível atualizar a feição, Restaurando valor antigo +cannotDisplayResult=Não é possível exibir o resultado no mapa. +uploadSecurityError=Erro de segurança ao transferir arquivo: {0} +uploadIOError=Erro de E/S ao transferir arquivo: {0} +uploadUnknownError=Erro desconhecido ao transferir arquivo. +couldNotProcessUploadResponse=Não foi possível processar a resposta completa da transferência. +fileExceedsAllowedUploadSize=O arquivo excedeu o tamanho máximo de transferência permitido. ({0} MB) +fileUploadError=Erro ao carregar arquivo configFileCrossDomain=Possível problema de inter-domínio: {0}{1} @@ -329,6 +341,10 @@ outputLabel=Saída copyToClipboard=Copiar para Área de Transferência unsupportedInputType=A entrada {0} não é suportada currentExtentWillBeUsedAsInput=A extensão atual será utilizada como entrada. +byURL=Por URL +fileURL=URL do Arquivo +uploadFile=Carregar arquivo +or=ou zoomLabel=Zoom para diff --git a/locale/pt_PT/ViewerStrings.properties b/locale/pt_PT/ViewerStrings.properties index 5374ee7..2d906ff 100644 --- a/locale/pt_PT/ViewerStrings.properties +++ b/locale/pt_PT/ViewerStrings.properties @@ -1,7 +1,7 @@ contextMenuText=Sobre o ArcGIS Viewer for Flex... -aboutText=Este aplicativo utiliza a versão @VERSION@ do ArcGIS Viewer for Flex.\nData de desenvolvimento @BUILD_DATE@. +aboutText=Esta aplicação utiliza o ArcGIS Viewer for Flex versão 3.1. aboutLearnMoreBtn=Obter mais informações aboutCloseBtn=Fechar @@ -12,8 +12,8 @@ minimize=Minimizar -panelExpandTooltip=Click to expand the panel -panelCollapseTooltip=Click to collapse the panel +panelExpandTooltip=Clique para expandir o painel +panelCollapseTooltip=Clique para fechar o painel locateExampleValueX=-9.1497 @@ -21,19 +21,19 @@ locateExampleValueY=38.7251 clearLabel=Limpar -deleteLabel=Excluir -loadingLabel=Carregando... +deleteLabel=Eliminar +loadingLabel=A carregar... okLabel=OK errorLabel=Erro problemLabel=Problema -noFeatures=Nenhuma feição foi encontrada. +noFeatures=Não foram encontrados nenhuns elementos. resultsLabel=Resultados -saveLabel=Salvar +saveLabel=Guardar unitsFeet=Pés unitsFeetAbbr=ft -unitsKilometers=Quilômetros +unitsKilometers=Quilómetros unitsKilometersAbbr=km unitsMeters=Metros unitsMetersAbbr=m @@ -48,7 +48,7 @@ unitsHectares=Hectares unitsHectaresAbbr=ha unitsSquareFeet=Pés Quadrados unitsSquareFeetAbbr=sq ft -unitsSquareKilometers=Quilômetros Quadrados +unitsSquareKilometers=Quilómetros Quadrados unitsSquareKilometersAbbr=sq km unitsSquareMeters=Metros Quadrados unitsSquareMetersAbbr=sq m @@ -58,7 +58,7 @@ unitsSquareYards=Jardas Quadradas unitsSquareYardsAbbr=sq yd -tocMapLayerZoomToLabel=Zoom para +tocMapLayerZoomToLabel=Efetuar zoom para tocMapLayerTransparencyLabel=Transparência tocMapLayerOpaqueLabel=Opaco tocMapLayerTransparentLabel=Transparente @@ -66,37 +66,37 @@ tocMapLayerMoveUpLabel=Mover para cima tocMapLayerMoveDownLabel=Mover para baixo tocMapLayerRemoveLabel=Remover tocMapLayerDescriptionLabel=Descrição -tocMapLayerDownloadLabel=Download +tocMapLayerDownloadLabel=Descarregar -incorrectLayerTypeText={0} não é um tipo de camada suportado. Use "arcims", "bing", "csv", "dynamic", "feature", "georss", "image", "kml", "osm", "tiled", "wms" ou "wmts" +incorrectLayerTypeText={0} não é um tipo de camada suportado. Utilize "arcims", "bing", "csv", "dynamic", "feature", "georss", "image", "kml", "osm", "tiled", "wms" ou "wmts" missingConfigFileText=Não foi possível encontrar {0} -httpResponseStatus=Status de resposta http: {0} -faultCode=Código de falha: {0} +httpResponseStatus=Estado da resposta http: {0} +faultCode=Código da falha: {0} faultInfo=Informações sobre a falha: {0} faultDetail=Detalhes da falha: {0} -parseConfigErrorText=Ocorreu um problema ao analisar o arquivo de configuração {0} +parseConfigErrorText=Ocorreu um problema ao analisar o ficheiro de configuração {0} standalonePlayerExternalInterfaceErrorText=Ocorreu algum erro . O ExternalInterface não funciona na reprodução Standalone. layerFailedToLoad:{0} falha ao carregar camada: {1} couldNotFetchBasemapData=Não foi possível obter os dados do mapa base:\n{0} -couldNotConnectToPortal=Não foi possível conectar ao Portal. +couldNotConnectToPortal=Não foi possível ligar ao Portal. couldNotQueryPortal=Não foi possível consultar o portal. couldNotQueryPortalItems=Não foi possível consultar os itens do portal. -serverMissingCrossDomain=O GIS Server não tem um arquivo de domínio cruzado. +serverMissingCrossDomain=O servidor SIG (GIS Server) não tem um ficheiro de crossdomain. serviceIsInaccessible=O serviço não existe ou está inacessível. -unauthorizedAccess=Você não tem permissões para acessar este serviço. +unauthorizedAccess=Não tem permissões para aceder a este serviço. unknownErrorCause=Causa de erro desconhecida. resourceAccessDenied=Não tem permissões para aceder a este recurso. signInAborted=Início de sessão cancelado. -invalidWidgetId=Id de widget inválido: {0} +invalidWidgetId=Id de widget não válido: {0} printTaskExecutionError=Erro ao executar a tarefa de impressão:\n\n{0} gpServiceConnectionError=Não foi possível estabelecer ligação ao Serviço de GP:\n{0}\n\n{1}\n{2} -locatorServiceConnectionError=Não foi possível estabelecer ligação ao Serviço de Localizador:\n{0}\n\n{1}\n{2} -singleLineGeocodingNotSupportedError=O serviço do localizador não tem suporte para geocodificação de única linha. +locatorServiceConnectionError=Não foi possível estabelecer ligação ao Serviço de Localização:\n{0}\n\n{1}\n{2} +singleLineGeocodingNotSupportedError=O serviço de localização não suporta geocodificação de linha única. rssFeedParsingError=Ocorreu um problema ao analisar o ficheiro RSS. {0} httpResponseNotXMLError=A resposta de HTTP não é XML. unknownRSSFeedTypeError=Não foi possível determinar o tipo de ficheiro RSS. @@ -105,15 +105,22 @@ unableToDetermineGPExecutionType=Não foi possível determinar o tipo de execuç projectionError=Erro ao projetar geometria: {0} cannotRunTaskExecutionTypeUnknownError=Não é possível executar a tarefa: tipo de execução desconhecido. layerDataRetrievalError=Não foi possível recuperar os dados da camada. -couldNotDeleteFeature=Não foi possível excluir a feição -couldNotUpdateFeatureError=Não foi possível atualizar a feição, Restaurando valor antigo +couldNotDeleteFeature=Não foi possível eliminar o elemento +couldNotUpdateFeatureError=Não foi possível atualizar o elemento, a restaurar o valor antigo +cannotDisplayResult=Não é possível exibir o resultado no mapa. +uploadSecurityError=Ocorreu um erro de segurança durante o carregamento do ficheiro: {0} +uploadIOError=Ocorreu um erro de IO durante o carregamento do ficheiro: {0} +uploadUnknownError=Ocorreu um erro desconhecido durante o carregamento do ficheiro. +couldNotProcessUploadResponse=Não foi possível processar a resposta de carregamento concluído. +fileExceedsAllowedUploadSize=O ficheiro excede o tamanho de carregamento máximo permitido. ({0} MB) +fileUploadError=Erro no carregamento do ficheiro -configFileCrossDomain=Possível problema de inter-domínio: {0}{1} +configFileCrossDomain=Possível problema de crossdomain: {0}{1} -openToolTip=Clique para abrir um mapa de visão geral -closeToolTip=Clique para fechar um mapa de visão geral +openToolTip=Clique para abrir mapa de visão geral +closeToolTip=Clique para fechar mapa de visão geral layerListLabel=Mais... @@ -121,7 +128,7 @@ basemap=Mapa Base aboutLabel=Sobre -searchPrompt=Inserir endereço +searchPrompt=Introduzir endereço searchResultTitleLabel=Local noResultsFoundLabel=Nenhum resultado encontrado @@ -134,8 +141,8 @@ panUpLabel=Mover para cima previousExtentLabel=Extensão Anterior nextExtentLabel=Próxima Extensão panLabel=Mover -zoomInLabel=Mais zoom -zoomOutLabel=Menos zoom +zoomInLabel=Aumentar zoom +zoomOutLabel=Reduzir zoom @@ -212,7 +219,7 @@ fillOutlineWidthLabel=Largura -showMeasurementsLabel=Exibir Medidas +showMeasurementsLabel=Exibir Medições distanceUnitsLabel=Unidades de Distância areaUnitsLabel=Unidades de Área areaLabel=Área: @@ -222,43 +229,43 @@ lengthLabel=Comprimento: bookmarksLabel=Marcadores addbookmarksLabel=Adicionar Marcador -addLabel=Adiciona a extensão atual como um marcador nomeado +addLabel=Adicionar a extensão atual como um marcador nomeado bookmarkSubmitLabel=Adicionar Marcador bookmarkMissingNameLabel=Insira um nome para o marcador. -deleteBookmarkTooltip=Excluir marcador +deleteBookmarkTooltip=Eliminar marcador -descLabel=Extrair dados e fazer download do arquivo zip +descLabel=Extrair dados e descarregar o ficheiro zip step1Label=1. Selecionar área -dataCurrentExtentLabel=1. Os dados serão extraídos da extensão atual. -step2Label=2. Selecionar camadas para extrair -step3Label=3. Selecionar formato de arquivo +dataCurrentExtentLabel=1. Os dados serão extraídos na extensão atual. +step2Label=2. Selecionar as camadas a extrair +step3Label=3. Selecionar o formato de ficheiro step4Label=4. Selecionar o formato raster -step5Label=5. SpatialReference +step5Label=5. Referência espacial extractButtonLabel=Extrair step1ErrorLabel=Selecione uma área de interesse. -step2ErrorLabel=Selecione as camadas para extrair. -emptyResultsLabel=Tarefa concluída, mas não retornou nenhum resultado. -saveDataFileLabel=Arquivo de dados criado. Deseja salvá-lo? +step2ErrorLabel=Selecione as camadas a extrair. +emptyResultsLabel=A tarefa foi concluída mas não retornou nenhum resultado. +saveDataFileLabel=Ficheiro de dados criado. Deseja guardá-lo? attributesLabel=Atributos attachmentsLabel=Anexos -relatedRecordsLabel=Registros Relacionados -featureLayerOutOfScaleText=Esta camada de feição está fora da faixa de escala +relatedRecordsLabel=Registos Relacionados +featureLayerOutOfScaleText=Esta camada de elementos está fora do intervalo de escala showAttachmentsText=Anexos -showRelatedRecordsText=Registros relacionados +showRelatedRecordsText=Registos relacionados showAttributesText=Voltar -selectTemplateText=Selecione o modelo para criar a feição +selectTemplateText=Selecione o modelo para criar elementos noEditableLayersText=Nenhuma camada pode ser editada. -noCreateCapabilityLayersText=Nenhuma das camadas criou o recurso +noCreateCapabilityLayersText=Nenhuma das camadas tem capacidade para criar layerNotSupportingAttachmentsText=Esta camada não suporta anexos noAttachmentsText=Sem anexos -chooseFileText=Escolha um arquivo para anexar +chooseFileText=Escolha um ficheiro para anexar attachmentSubmitLabel=Enviar attachmentCancelLabel=Cancelar -singleAttachmentText=A feição tem {0} anexo -multipleAttachmentsText=A feição tem {0} anexos +singleAttachmentText=O elemento tem {0} anexo +multipleAttachmentsText=O elemento tem {0} anexos layerListTitle=Visibilidade da Camada @@ -267,15 +274,15 @@ layerListTitle=Visibilidade da Camada locateSubmitLabel=Localizar addressLabel=Endereço coordinatesLabel=Coordenadas -addressTitle=Insira o endereço -coordinatesTitle=Insira as coordenadas +addressTitle=Introduza o endereço +coordinatesTitle=Introduza as coordenadas xLabel=Longitude (X) yLabel=Latitude (Y) locationsLabel=Locais encontrados: -bingCulture=pt-BR +bingCulture=en-US requiredFields=Campos obrigatórios: requiredField=Campo obrigatório: -deleteResultTooltip=Excluir resultado +deleteResultTooltip=Eliminar resultado resultScoreText=Pontuação: bingResultConfidenceText=Confiança: @@ -286,22 +293,22 @@ printSubtitle= printCopyright= printTitleLabel=Título printSubtitleLabel=Subtítulo -printCopyrightLabel=Direitos Autorais +printCopyrightLabel=Direitos de Autor printAuthorLabel=Autor printLayoutTemplatesLabel=Modelos de layout printFormatsLabel=Formatos -printScaleLabel=Utilize esta escala +printScaleLabel=Utilizar esta escala filterTitleBarTooltip=Filtrar resultados -showallTitleBarTooltip=Mostrar Todos +showallTitleBarTooltip=Exibir todos filterButtonLabel=Filtro -clearButtonLabel=Mostrar Todos -featuresFoundLabel=Feições encontradas: {0} +clearButtonLabel=Exibir todos +featuresFoundLabel=Elementos encontrados: {0} -drivingDirectionLabel=Direção -routeSubmitLabel=Obter Direção +drivingDirectionLabel=Direções de condução +routeSubmitLabel=Obter Direções de condução moveUpTooltip=Mover para cima moveDownTooltip=Mover para baixo addLocationTooltip=clique no mapa para adicionar a localização @@ -313,14 +320,14 @@ changeRouteSymbolLabel=Alterar símbolo da rota editRouteLabel=Editar rota -graphicalTitleBarTooltip=Selecionar feições +graphicalTitleBarTooltip=Selecionar elementos textTitleBarTooltip=Selecionar por atributo -graphicalsearchLabel=Selecionar feições por +graphicalsearchLabel=Selecionar elementos por textsearchLabel=Selecionar por atributo layerLabel=Pesquisar camada nolayerLabel=Nenhuma camada de pesquisa definida. searchSubmitLabel=Pesquisar -selectionLabel=Feições selecionadas: +selectionLabel=Elementos selecionados: latitudeLabel=Latitude @@ -334,22 +341,26 @@ outputLabel=Saída copyToClipboard=Copiar para Área de Transferência unsupportedInputType=A entrada {0} não é suportada currentExtentWillBeUsedAsInput=A extensão atual será utilizada como entrada. +byURL=Por URL +fileURL=URL de Ficheiro +uploadFile=Carregar ficheiro +or=ou -zoomLabel=Zoom para +zoomLabel=Efetuar zoom para -helloContent=Altere este texto no arquivo de configuração. +helloContent=Altere este texto no ficheiro de configuração. widgetIDWidgetLabelTemplate=Id do Widget: {0}, rótulo do widget: {1} -widgetIDWidgetStateTemplate=Id do Widget: {0}, status do widget: {1} +widgetIDWidgetStateTemplate=Id do Widget: {0}, estado do widget: {1} itemLabelWidgetIDItemIDTemplate={0} ID do Widget: {1} layerSelectionLabel=Selecionar camada drawToolMenuLabel=Selecionar ferramenta de desenho selectLabel=Selecionar -noLayersLabel=Nenhum camada -noChartDataToDisplayLabel=Nenhum dado de gráfico para exibir -featureLayerNotVisibleText=a camada de feição não está visível ou está fora da faixa de escala \ No newline at end of file +noLayersLabel=Nenhuma camada +noChartDataToDisplayLabel=Nenhuns dados de gráficos para exibir +featureLayerNotVisibleText=a camada de elementos não está visível ou está fora do intervalo de escala visivel \ No newline at end of file diff --git a/locale/ro_RO/ViewerStrings.properties b/locale/ro_RO/ViewerStrings.properties index 6f3389e..585feb7 100644 --- a/locale/ro_RO/ViewerStrings.properties +++ b/locale/ro_RO/ViewerStrings.properties @@ -1,7 +1,7 @@ contextMenuText=Despre ArcGIS Viewer for Flex... -aboutText=Această aplicaţie utilizează ArcGIS Viewer for Flex versiunea 3.1.\nData creării 2012-12-12. +aboutText=Această aplicaţie utilizează ArcGIS Viewer for Flex versiunea 3.1. aboutLearnMoreBtn=Aflaţi mai multe aboutCloseBtn=Închidere @@ -11,6 +11,11 @@ close=Închidere minimize=Minimizare + +panelExpandTooltip=Faceţi clic pentru a extinde panoul +panelCollapseTooltip=Faceţi clic pentru a restrânge panoul + + locateExampleValueX=26.0875 locateExampleValueY=44.4275 @@ -102,6 +107,13 @@ cannotRunTaskExecutionTypeUnknownError=Nu se poate executa procesul de lucru: ti layerDataRetrievalError=Nu au putut fi preluate date pentru stratul tematic. couldNotDeleteFeature=Obiectul spaţial nu a putut fi şters couldNotUpdateFeatureError=Obiectul spaţial nu a putut fi actualizat, se restaurează valoarea veche +cannotDisplayResult=Rezultatele nu pot fi afişate pe hartă. +uploadSecurityError=S-a întâlnit o eroare de securitate în timpul încărcării fişierului: {0} +uploadIOError=S-a întâlnit o eroare IO în timpul încărcării fişierului: {0} +uploadUnknownError=A survenit o eroare necunoscută în timpul încărcării fişierului. +couldNotProcessUploadResponse=Nu a putut fi procesat răspunsul de finalizare a încărcării. +fileExceedsAllowedUploadSize=Fişierul depăşeşte dimensiunea maximă permisă pentru încărcare. ({0} MB) +fileUploadError=Eroare la încărcarea fişierului configFileCrossDomain=Posibilă problemă interdomenii: {0}{1} @@ -329,6 +341,10 @@ outputLabel=Ieşire copyToClipboard=Copiere în Clipboard unsupportedInputType=Intrarea {0} nu este acceptată currentExtentWillBeUsedAsInput=Extinderea curentă va fi utilizată ca parametru de intrare. +byURL=După URL +fileURL=URL fişier +uploadFile=Încărcare fişier +or=sau zoomLabel=Transfocare la diff --git a/locale/ru_RU/ViewerStrings.properties b/locale/ru_RU/ViewerStrings.properties index e07c14d..953a2ed 100644 --- a/locale/ru_RU/ViewerStrings.properties +++ b/locale/ru_RU/ViewerStrings.properties @@ -1,7 +1,7 @@ contextMenuText=О программе ArcGIS Viewer for Flex... -aboutText=Это приложение использует ArcGIS Viewer for Flex версии 3.1.\nДата сборки: 2012-12-12. +aboutText=Это приложение использует ArcGIS Viewer for Flex версии 3.1. aboutLearnMoreBtn=См. Справку aboutCloseBtn=Закрыть @@ -11,6 +11,11 @@ close=Закрыть minimize=Свернуть + +panelExpandTooltip=Нажмите, чтобы развернуть панель +panelCollapseTooltip=Нажмите, чтобы свернуть панель + + locateExampleValueX=37.6178 locateExampleValueY=55.7517 @@ -102,6 +107,13 @@ cannotRunTaskExecutionTypeUnknownError=Не удается запустить з layerDataRetrievalError=Не удалось извлечь данные из слоя. couldNotDeleteFeature=Не удалось удалить объект couldNotUpdateFeatureError=Не удалось обновить объект, восстановление старого значения +cannotDisplayResult=Невозможно отобразить результат на карте. +uploadSecurityError=Обнаружена ошибка безопасности при загрузке файла: {0} +uploadIOError=Обнаружена ошибка ввода-вывода при загрузке файла: {0} +uploadUnknownError=Произошла неизвестная ошибка при загрузке файла. +couldNotProcessUploadResponse=Не удалось провести загрузку полного ответа. +fileExceedsAllowedUploadSize=Файл превышает максимально допустимый размер загрузки. ({0} МБ) +fileUploadError=Ошибка загрузки файла configFileCrossDomain=Возможная ошибка междоменного запроса: {0}{1} @@ -329,6 +341,10 @@ outputLabel=Выходные данные copyToClipboard=Копировать в буфер обмена unsupportedInputType={0} Входные данные не поддерживаются currentExtentWillBeUsedAsInput=Текущий экстент будет использоваться в качестве входных данных. +byURL=По URL-адресу +fileURL=URL-адрес файла +uploadFile=Загрузить файл +or=или zoomLabel=Приблизить к diff --git a/locale/sv_SE/ViewerStrings.properties b/locale/sv_SE/ViewerStrings.properties index f1d03d9..ad464c6 100644 --- a/locale/sv_SE/ViewerStrings.properties +++ b/locale/sv_SE/ViewerStrings.properties @@ -1,7 +1,7 @@ contextMenuText=Om ArcGIS Viewer for Flex... -aboutText=Det här programmet använder ArcGIS Viewer for Flex version 3.1.\nKompileringsdatum 2012-12-12. +aboutText=Det här programmet använder ArcGIS Viewer for Flex version 3.1. aboutLearnMoreBtn=Läs mer aboutCloseBtn=Stäng @@ -11,6 +11,11 @@ close=Stäng minimize=Minimera + +panelExpandTooltip=Klicka för att visa panelen +panelCollapseTooltip=Klicka för att dölja panelen + + locateExampleValueX=13.1933 locateExampleValueY=55.7058 @@ -102,6 +107,13 @@ cannotRunTaskExecutionTypeUnknownError=Det går inte att köra åtgärden: okän layerDataRetrievalError=Det gick inte att hämta lagerdata. couldNotDeleteFeature=Det gick inte att ta bort objektet couldNotUpdateFeatureError=Det gick inte att uppdatera objektet: det gamla värdet återställs +cannotDisplayResult=Det går inte att visa resultatet på kartan. +uploadSecurityError=Ett säkerhetsfel uppstod när filen överfördes: {0} +uploadIOError=Ett IO-fel uppstod när filen överfördes: {0} +uploadUnknownError=Okänt fel uppstod när filen överfördes. +couldNotProcessUploadResponse=Det gick inte att bearbeta svaret för slutförd överföring. +fileExceedsAllowedUploadSize=Filen är större än den maximala tillåtna överföringsstorleken. ({0} MB) +fileUploadError=Fel vid filöverföring configFileCrossDomain=Möjligt korsdomänproblem: {0}{1} @@ -329,6 +341,10 @@ outputLabel=Utdata copyToClipboard=Kopiera till Urklipp unsupportedInputType={0} indata stöds inte currentExtentWillBeUsedAsInput=Den aktuella utsträckningen kommer att användas som indata. +byURL=Efter URL +fileURL=Fil-URL +uploadFile=Överför fil +or=eller zoomLabel=Zooma till diff --git a/locale/zh_CN/ViewerStrings.properties b/locale/zh_CN/ViewerStrings.properties index 10b5c86..c2d96b6 100644 --- a/locale/zh_CN/ViewerStrings.properties +++ b/locale/zh_CN/ViewerStrings.properties @@ -1,7 +1,7 @@ contextMenuText=关于 ArcGIS Viewer for Flex... -aboutText=此应用程序是使用 ArcGIS Viewer for Flex 3.1 版本构建而成的。\n创建日期 2012-12-12。 +aboutText=此应用程序是使用 ArcGIS Viewer for Flex 版本 3.1 构建而成的。 aboutLearnMoreBtn=了解更多信息 aboutCloseBtn=关闭 @@ -11,6 +11,11 @@ close=关闭 minimize=最小化 + +panelExpandTooltip=单击以展开面板 +panelCollapseTooltip=单击以隐藏面板 + + locateExampleValueX=116.3906 locateExampleValueY=39.9147 @@ -77,10 +82,10 @@ faultDetail=详细的错误信息: {0} parseConfigErrorText=解析配置文件 {0} 时出现问题 standalonePlayerExternalInterfaceErrorText=出现了某个错误。ExternalInterface 在单独的播放器中无法正常运行。 layerFailedToLoad:{0} 图层加载失败:{1} -couldNotFetchBasemapData=无法取得底图数据:{0} +couldNotFetchBasemapData=无法获取底图数据:{0} couldNotConnectToPortal=无法连接到门户。 couldNotQueryPortal=无法查询门户。 -couldNotQueryPortalItems=无法查询门户项。 +couldNotQueryPortalItems=无法查询门户项目。 serverMissingCrossDomain=GIS Server 缺少跨域文件。 serviceIsInaccessible=服务不存在或不可访问。 unauthorizedAccess=您没有访问此服务的权限。 @@ -91,17 +96,24 @@ invalidWidgetId=无效的微件 ID:{0} printTaskExecutionError=执行打印任务时出错:\n\n{0} gpServiceConnectionError=无法连接到 GP 服务:\n{0}\n\n{1}\n{2} locatorServiceConnectionError=无法连接到定位器服务:\n{0}\n\n{1}\n{2} -singleLineGeocodingNotSupportedError=定位器服务不支持单行。 +singleLineGeocodingNotSupportedError=定位器服务不支持单行地理编码。 rssFeedParsingError=解析 RSS feed 时出现问题。{0} httpResponseNotXMLError=HTTP 响应不是 XML。 unknownRSSFeedTypeError=无法确定 RSS feed 类型。 initializationError=初始化 {0} 时出现问题 unableToDetermineGPExecutionType=无法确定 Geoprocessing 执行类型: -projectionError=投影几何形状 {0} 时出错 +projectionError=对几何 {0} 进行投影时出错 cannotRunTaskExecutionTypeUnknownError=无法运行任务:未知的执行类型。 layerDataRetrievalError=无法检索图层数据。 couldNotDeleteFeature=无法删除要素 couldNotUpdateFeatureError=无法更新要素,正在恢复旧值 +cannotDisplayResult=无法在地图上显示结果。 +uploadSecurityError=上传文件 {0} 时遇到安全错误 +uploadIOError=上传文件 {0} 时遇到 IO 错误 +uploadUnknownError=上传文件时出现未知错误。 +couldNotProcessUploadResponse=无法处理上传完成响应。 +fileExceedsAllowedUploadSize=文件超出允许的最大上传大小。({0} MB) +fileUploadError=文件上传错误 configFileCrossDomain=可能发生跨域问题: {0}{1} @@ -329,6 +341,10 @@ outputLabel=输出 copyToClipboard=复制到剪贴板 unsupportedInputType=不支持 {0} 输入 currentExtentWillBeUsedAsInput=当前范围将用作输入。 +byURL=按 URL +fileURL=文件 URL +uploadFile=上传文件 +or=或者 zoomLabel=缩放至 From d4653c7a86c6ec0163ac5efb39777c0c796a9696 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Tue, 5 Feb 2013 14:53:26 -0800 Subject: [PATCH 089/178] Process result image layers only for supported output parameters. --- src/widgets/Geoprocessing/GeoprocessingWidget.mxml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/widgets/Geoprocessing/GeoprocessingWidget.mxml b/src/widgets/Geoprocessing/GeoprocessingWidget.mxml index 9307d84..992ffd7 100644 --- a/src/widgets/Geoprocessing/GeoprocessingWidget.mxml +++ b/src/widgets/Geoprocessing/GeoprocessingWidget.mxml @@ -611,7 +611,8 @@ paramName = param.name; if (asyncResultMap[paramName]) { - if (hasResultMapServer) + if (hasResultMapServer + && isResultMapServerOutputType(param.type)) { processResultImageLayer(paramName); } @@ -629,6 +630,12 @@ } } + private function isResultMapServerOutputType(type:String):Boolean + { + return type == GPParameterTypes.FEATURE_RECORD_SET_LAYER + || type == GPParameterTypes.RASTER_DATA_LAYER; + } + private function processResultImageLayer(paramName:String):void { var outputParam:IGPParameter = gpParamHandler.findOutputParamByName(paramName); From a921529a32f8e2b1ea7f75af5935b80f5c7dc80a Mon Sep 17 00:00:00 2001 From: jcfranco Date: Wed, 20 Feb 2013 12:23:04 -0800 Subject: [PATCH 090/178] Use param label for GP result image layer names. --- src/widgets/Geoprocessing/GeoprocessingWidget.mxml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/widgets/Geoprocessing/GeoprocessingWidget.mxml b/src/widgets/Geoprocessing/GeoprocessingWidget.mxml index 992ffd7..2bbcaed 100644 --- a/src/widgets/Geoprocessing/GeoprocessingWidget.mxml +++ b/src/widgets/Geoprocessing/GeoprocessingWidget.mxml @@ -647,7 +647,7 @@ var lastExecutedJob:JobInfo = gp.submitJobLastResult; var resultImageLayer:GPResultImageLayer = gp.getResultImageLayer(lastExecutedJob.jobId, paramName); resultImageLayer.id = paramName; - resultImageLayer.name = shareResults ? paramName : "hiddenLayer_" + paramName; + resultImageLayer.name = shareResults ? outputParam.label : "hiddenLayer_" + paramName; resultImageLayersOnMap.push(resultImageLayer); map.addLayer(resultImageLayer); layerOrderer.orderLayers(); From 717227dd38b53140e2394b3b73ec8bc67d09cf51 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Tue, 19 Feb 2013 23:09:40 -0800 Subject: [PATCH 091/178] Position MapSwitcherWidget pop-ups based on largest available space. --- .../MapSwitcher/MapSwitcherWidget.mxml | 49 ++++++++++++++----- 1 file changed, 38 insertions(+), 11 deletions(-) diff --git a/src/widgets/MapSwitcher/MapSwitcherWidget.mxml b/src/widgets/MapSwitcher/MapSwitcherWidget.mxml index 8a342a2..a1e75b3 100644 --- a/src/widgets/MapSwitcher/MapSwitcherWidget.mxml +++ b/src/widgets/MapSwitcher/MapSwitcherWidget.mxml @@ -262,19 +262,32 @@ } } - private function updateContainerPosition(anchorComponent:DisplayObject, container:UIComponent):void + private function updateContainerPosition(anchorComponent:UIComponent, container:UIComponent):void { - var containerGlobalBottomRightPoint:Point = anchorComponent.localToGlobal(new Point(container.width, container.height)); - positionContainerHorizontally(containerGlobalBottomRightPoint.x, anchorComponent, container); - positionContainerVertically(containerGlobalBottomRightPoint.y, anchorComponent, container); + positionContainerHorizontally(anchorComponent, container); + positionContainerVertically(anchorComponent, container); } - private function positionContainerHorizontally(x:Number, anchorComponent:DisplayObject, container:UIComponent):void + private function positionContainerHorizontally(anchorComponent:UIComponent, container:UIComponent):void { - var appWidth:Number = FlexGlobals.topLevelApplication.width; - if (x > appWidth) + var app:UIComponent = FlexGlobals.topLevelApplication as UIComponent; + + var appRect:Rectangle = app.screen; + var anchorRect:Rectangle = anchorComponent.getBounds(app as DisplayObject); + + var leftContainerRect:Rectangle = container.getBounds(app as DisplayObject); + leftContainerRect.x = anchorRect.x + anchorRect.width - container.width; + leftContainerRect.y = 0; + + var rightContainerRect:Rectangle = leftContainerRect.clone(); + rightContainerRect.x = anchorRect.x; + + var leftIntersectionRect:Rectangle = appRect.intersection(leftContainerRect); + var rightIntersectionRect:Rectangle = appRect.intersection(rightContainerRect); + + if (leftIntersectionRect.width > rightIntersectionRect.width) { - container.x = anchorComponent.x - container.width + anchorComponent.width; + container.x = anchorComponent.x + anchorComponent.width - container.width; } else { @@ -282,10 +295,24 @@ } } - private function positionContainerVertically(y:Number, anchorComponent:DisplayObject, container:UIComponent):void + private function positionContainerVertically(anchorComponent:UIComponent, container:UIComponent):void { - var appHeight:Number = FlexGlobals.topLevelApplication.height; - if (y > appHeight) + var app:UIComponent = FlexGlobals.topLevelApplication as UIComponent; + + var appRect:Rectangle = app.screen; + var anchorRect:Rectangle = anchorComponent.getBounds(app as DisplayObject); + + var bottomContainerRect:Rectangle = container.getBounds(app as DisplayObject); + bottomContainerRect.x = 0; + bottomContainerRect.y = anchorRect.y + anchorRect.height; + + var topContainerRect:Rectangle = bottomContainerRect.clone(); + topContainerRect.y = anchorRect.y + 1 - container.height; + + var bottomIntersectionRect:Rectangle = appRect.intersection(bottomContainerRect); + var topIntersectionRect:Rectangle = appRect.intersection(topContainerRect); + + if (topIntersectionRect.height > bottomIntersectionRect.height) { container.y = anchorComponent.y + 1 - container.height; } From f1d8b495d6405fd43d26e18d1e3e8da1f27f84e4 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Wed, 20 Feb 2013 09:42:25 -0800 Subject: [PATCH 092/178] Update smart MapSwitcher pop-ups for RTL. --- src/widgets/MapSwitcher/MapSwitcherWidget.mxml | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/widgets/MapSwitcher/MapSwitcherWidget.mxml b/src/widgets/MapSwitcher/MapSwitcherWidget.mxml index a1e75b3..bc880e2 100644 --- a/src/widgets/MapSwitcher/MapSwitcherWidget.mxml +++ b/src/widgets/MapSwitcher/MapSwitcherWidget.mxml @@ -29,6 +29,7 @@ import mx.collections.ArrayCollection; import mx.collections.ArrayList; import mx.core.FlexGlobals; + import mx.core.LayoutDirection; import mx.core.UIComponent; import mx.events.CollectionEvent; import mx.events.CollectionEventKind; @@ -275,23 +276,27 @@ var appRect:Rectangle = app.screen; var anchorRect:Rectangle = anchorComponent.getBounds(app as DisplayObject); + var isLTR:Boolean = (layoutDirection == LayoutDirection.LTR); + var leftOffset:Number = isLTR ? anchorComponent.width - container.width : 0; + var rightOffset:Number = isLTR ? 0 : anchorComponent.width - container.width; + var leftContainerRect:Rectangle = container.getBounds(app as DisplayObject); - leftContainerRect.x = anchorRect.x + anchorRect.width - container.width; + leftContainerRect.x = anchorRect.x + leftOffset; leftContainerRect.y = 0; var rightContainerRect:Rectangle = leftContainerRect.clone(); - rightContainerRect.x = anchorRect.x; + rightContainerRect.x = anchorRect.x + rightOffset; var leftIntersectionRect:Rectangle = appRect.intersection(leftContainerRect); var rightIntersectionRect:Rectangle = appRect.intersection(rightContainerRect); if (leftIntersectionRect.width > rightIntersectionRect.width) { - container.x = anchorComponent.x + anchorComponent.width - container.width; + container.x = anchorComponent.x + leftOffset; } else { - container.x = anchorComponent.x; + container.x = anchorComponent.x + rightOffset; } } From ef6124d5963d635c00651c8ea1988ed0e08c9676 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Wed, 20 Feb 2013 11:26:35 -0800 Subject: [PATCH 093/178] Consolidate vertical/horizontal pop-up positioning logic. --- .../MapSwitcher/MapSwitcherWidget.mxml | 38 +++++-------------- 1 file changed, 10 insertions(+), 28 deletions(-) diff --git a/src/widgets/MapSwitcher/MapSwitcherWidget.mxml b/src/widgets/MapSwitcher/MapSwitcherWidget.mxml index bc880e2..eec6416 100644 --- a/src/widgets/MapSwitcher/MapSwitcherWidget.mxml +++ b/src/widgets/MapSwitcher/MapSwitcherWidget.mxml @@ -264,31 +264,31 @@ } private function updateContainerPosition(anchorComponent:UIComponent, container:UIComponent):void - { - positionContainerHorizontally(anchorComponent, container); - positionContainerVertically(anchorComponent, container); - } - - private function positionContainerHorizontally(anchorComponent:UIComponent, container:UIComponent):void { var app:UIComponent = FlexGlobals.topLevelApplication as UIComponent; var appRect:Rectangle = app.screen; var anchorRect:Rectangle = anchorComponent.getBounds(app as DisplayObject); + var containerRect:Rectangle = new Rectangle(0, 0, container.width, container.height); var isLTR:Boolean = (layoutDirection == LayoutDirection.LTR); var leftOffset:Number = isLTR ? anchorComponent.width - container.width : 0; var rightOffset:Number = isLTR ? 0 : anchorComponent.width - container.width; - var leftContainerRect:Rectangle = container.getBounds(app as DisplayObject); - leftContainerRect.x = anchorRect.x + leftOffset; - leftContainerRect.y = 0; + var leftContainerRect:Rectangle = containerRect.clone(); + var rightContainerRect:Rectangle = containerRect.clone(); + var bottomContainerRect:Rectangle = containerRect.clone(); + var topContainerRect:Rectangle = containerRect.clone(); - var rightContainerRect:Rectangle = leftContainerRect.clone(); + leftContainerRect.x = anchorRect.x + leftOffset; rightContainerRect.x = anchorRect.x + rightOffset; + bottomContainerRect.y = anchorRect.y + anchorRect.height; + topContainerRect.y = anchorRect.y + 1 - container.height; var leftIntersectionRect:Rectangle = appRect.intersection(leftContainerRect); var rightIntersectionRect:Rectangle = appRect.intersection(rightContainerRect); + var bottomIntersectionRect:Rectangle = appRect.intersection(bottomContainerRect); + var topIntersectionRect:Rectangle = appRect.intersection(topContainerRect); if (leftIntersectionRect.width > rightIntersectionRect.width) { @@ -298,24 +298,6 @@ { container.x = anchorComponent.x + rightOffset; } - } - - private function positionContainerVertically(anchorComponent:UIComponent, container:UIComponent):void - { - var app:UIComponent = FlexGlobals.topLevelApplication as UIComponent; - - var appRect:Rectangle = app.screen; - var anchorRect:Rectangle = anchorComponent.getBounds(app as DisplayObject); - - var bottomContainerRect:Rectangle = container.getBounds(app as DisplayObject); - bottomContainerRect.x = 0; - bottomContainerRect.y = anchorRect.y + anchorRect.height; - - var topContainerRect:Rectangle = bottomContainerRect.clone(); - topContainerRect.y = anchorRect.y + 1 - container.height; - - var bottomIntersectionRect:Rectangle = appRect.intersection(bottomContainerRect); - var topIntersectionRect:Rectangle = appRect.intersection(topContainerRect); if (topIntersectionRect.height > bottomIntersectionRect.height) { From 6b048c29fea056ce4e77cfd948161829a984f86f Mon Sep 17 00:00:00 2001 From: jcfranco Date: Thu, 21 Feb 2013 15:08:25 -0800 Subject: [PATCH 094/178] Include Estonian & Latvian in Ant build. --- build.xml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/build.xml b/build.xml index 459b8a9..3ce46b8 100644 --- a/build.xml +++ b/build.xml @@ -98,6 +98,9 @@ + + + @@ -116,6 +119,9 @@ + + + @@ -196,6 +202,8 @@ //flashvars.resourceModuleURLs = "assets/locale/de_DE.swf"; //flashvars.localeChain = "es_ES"; //flashvars.resourceModuleURLs = "assets/locale/es_ES.swf"; + //flashvars.localeChain = "et_EE"; + //flashvars.resourceModuleURLs = "assets/locale/et_EE.swf"; //flashvars.localeChain = "fr_FR"; //flashvars.resourceModuleURLs = "assets/locale/fr_FR.swf"; //flashvars.localeChain = "he_IL"; @@ -208,6 +216,8 @@ //flashvars.resourceModuleURLs = "assets/locale/ko_KR.swf"; //flashvars.localeChain = "lt_LT"; //flashvars.resourceModuleURLs = "assets/locale/lt_LT.swf"; + //flashvars.localeChain = "lv_LV"; + //flashvars.resourceModuleURLs = "assets/locale/lv_LV.swf"; //flashvars.localeChain = "nb_NO"; //flashvars.resourceModuleURLs = "assets/locale/nb_NO.swf"; //flashvars.localeChain = "nl_NL"; From a818653c958da168a97e6a0d901cacb3367f5f39 Mon Sep 17 00:00:00 2001 From: Sarthak Datt Date: Thu, 21 Feb 2013 17:26:34 -0800 Subject: [PATCH 095/178] check for null visibleLayers on dynamic map service --- .../components/toc/tocClasses/TocMapLayerItem.as | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/com/esri/viewer/components/toc/tocClasses/TocMapLayerItem.as b/src/com/esri/viewer/components/toc/tocClasses/TocMapLayerItem.as index bc8e61e..357c42b 100644 --- a/src/com/esri/viewer/components/toc/tocClasses/TocMapLayerItem.as +++ b/src/com/esri/viewer/components/toc/tocClasses/TocMapLayerItem.as @@ -423,9 +423,18 @@ public class TocMapLayerItem extends TocItem else if (layer is ArcGISDynamicMapServiceLayer) { var arcGISDynamicMapServiceLayer:ArcGISDynamicMapServiceLayer = ArcGISDynamicMapServiceLayer(layer); - arcGISDynamicMapServiceLayer.visibleLayers.addEventListener(CollectionEvent.COLLECTION_CHANGE, visibleLayersChangeHandler); + if (arcGISDynamicMapServiceLayer.visibleLayers) + { + arcGISDynamicMapServiceLayer.visibleLayers.addEventListener(CollectionEvent.COLLECTION_CHANGE, visibleLayersChangeHandler); + } + else + { + var visLayers:Array = getActualVisibleLayers(MapServiceUtil.getVisibleSubLayers(_dynamicMapServiceLayerInfos), _dynamicMapServiceLayerInfos); + ArcGISDynamicMapServiceLayer(layer).visibleLayers = new ArrayCollection(visLayers); + ArcGISDynamicMapServiceLayer(layer).visibleLayers.addEventListener(CollectionEvent.COLLECTION_CHANGE, visibleLayersChangeHandler); + } + _visibleLayersChangeWatcher = ChangeWatcher.watch(arcGISDynamicMapServiceLayer, "visibleLayers", visibleLayersChange); - _dynamicMapServiceLayerInfos = arcGISDynamicMapServiceLayer.dynamicLayerInfos ? arcGISDynamicMapServiceLayer.dynamicLayerInfos : arcGISDynamicMapServiceLayer.layerInfos; if (_isVisibleLayersSet) { From af115f09bb08c4734b78c0c12693de8f7a570c6c Mon Sep 17 00:00:00 2001 From: Sarthak Datt Date: Thu, 21 Feb 2013 18:19:28 -0800 Subject: [PATCH 096/178] code clean-up --- .../components/toc/tocClasses/TocMapLayerItem.as | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/com/esri/viewer/components/toc/tocClasses/TocMapLayerItem.as b/src/com/esri/viewer/components/toc/tocClasses/TocMapLayerItem.as index 357c42b..591a777 100644 --- a/src/com/esri/viewer/components/toc/tocClasses/TocMapLayerItem.as +++ b/src/com/esri/viewer/components/toc/tocClasses/TocMapLayerItem.as @@ -423,16 +423,12 @@ public class TocMapLayerItem extends TocItem else if (layer is ArcGISDynamicMapServiceLayer) { var arcGISDynamicMapServiceLayer:ArcGISDynamicMapServiceLayer = ArcGISDynamicMapServiceLayer(layer); - if (arcGISDynamicMapServiceLayer.visibleLayers) - { - arcGISDynamicMapServiceLayer.visibleLayers.addEventListener(CollectionEvent.COLLECTION_CHANGE, visibleLayersChangeHandler); - } - else + if (!arcGISDynamicMapServiceLayer.visibleLayers) { var visLayers:Array = getActualVisibleLayers(MapServiceUtil.getVisibleSubLayers(_dynamicMapServiceLayerInfos), _dynamicMapServiceLayerInfos); - ArcGISDynamicMapServiceLayer(layer).visibleLayers = new ArrayCollection(visLayers); - ArcGISDynamicMapServiceLayer(layer).visibleLayers.addEventListener(CollectionEvent.COLLECTION_CHANGE, visibleLayersChangeHandler); - } + arcGISDynamicMapServiceLayer.visibleLayers = new ArrayCollection(visLayers); + } + arcGISDynamicMapServiceLayer.visibleLayers.addEventListener(CollectionEvent.COLLECTION_CHANGE, visibleLayersChangeHandler); _visibleLayersChangeWatcher = ChangeWatcher.watch(arcGISDynamicMapServiceLayer, "visibleLayers", visibleLayersChange); _dynamicMapServiceLayerInfos = arcGISDynamicMapServiceLayer.dynamicLayerInfos ? arcGISDynamicMapServiceLayer.dynamicLayerInfos : arcGISDynamicMapServiceLayer.layerInfos; From 2c93fce9fa0bbb30c7342c702c79e03601c63916 Mon Sep 17 00:00:00 2001 From: Bjorn Svensson Date: Mon, 25 Feb 2013 10:48:07 -0800 Subject: [PATCH 097/178] Remove retired GP example Example no longer works because the underlying service no longer works. --- .../GeoprocessingWidget_SurfaceProfile.xml | 70 ------------------- 1 file changed, 70 deletions(-) delete mode 100644 src/widgets/Geoprocessing/GeoprocessingWidget_SurfaceProfile.xml diff --git a/src/widgets/Geoprocessing/GeoprocessingWidget_SurfaceProfile.xml b/src/widgets/Geoprocessing/GeoprocessingWidget_SurfaceProfile.xml deleted file mode 100644 index 22f5dec..0000000 --- a/src/widgets/Geoprocessing/GeoprocessingWidget_SurfaceProfile.xml +++ /dev/null @@ -1,70 +0,0 @@ - - - - http://sampleserver2.arcgisonline.com/ArcGIS/rest/services/Elevation/ESRI_Elevation_World/GPServer/ProfileService - http://sampleserver2.arcgisonline.com/arcgisoutput/Elevation_ESRI_Elevation_World/ProfileService.htm - - - - - - - - - - - - - - - - Surface Profile - - - - - - - - - - - - Output_Profiles,Input_Polylines - - - From abd127cf371c44cd8d7e097378c916c0902e9d2e Mon Sep 17 00:00:00 2001 From: jcfranco Date: Thu, 21 Feb 2013 15:56:57 -0800 Subject: [PATCH 098/178] Add option to avoid using GP task result map service. --- src/widgets/Geoprocessing/GeoprocessingWidget.mxml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/widgets/Geoprocessing/GeoprocessingWidget.mxml b/src/widgets/Geoprocessing/GeoprocessingWidget.mxml index 2bbcaed..4f39ed9 100644 --- a/src/widgets/Geoprocessing/GeoprocessingWidget.mxml +++ b/src/widgets/Geoprocessing/GeoprocessingWidget.mxml @@ -92,6 +92,7 @@ private var asyncResultMap:Dictionary; private var outputLayers:Array; private var resultImageLayersOnMap:Array; + private var useResultMapServer:Boolean; private var hasResultMapServer:Boolean; private var hasUseAMFBeenSet:Boolean; private var largestResultImageLayerExtent:Extent; @@ -177,6 +178,8 @@ hasUseAMFBeenSet = true; } + useResultMapServer = configXML.useresultmapserver[0] != "false"; + taskDescription = configXML.description[0]; taskHelpURL = configXML.helpurl[0]; @@ -217,7 +220,7 @@ { executionType = gpServerDescription.executionType; gp.useAMF = !hasUseAMFBeenSet && (gpServerDescription.currentVersion >= 10.1); - hasResultMapServer = Boolean(gpServerDescription.resultMapServerName); + hasResultMapServer = useResultMapServer && Boolean(gpServerDescription.resultMapServerName); gpServerDescription.url = gpServerURL; gpServerDescription.proxyURL = gp.proxyURL; From b54302f095c841980a96a9927a11f21becf1b09e Mon Sep 17 00:00:00 2001 From: jcfranco Date: Mon, 25 Feb 2013 16:39:11 -0800 Subject: [PATCH 099/178] Clean up logic that determines whether to use the GP result map server. --- src/widgets/Geoprocessing/GeoprocessingWidget.mxml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/widgets/Geoprocessing/GeoprocessingWidget.mxml b/src/widgets/Geoprocessing/GeoprocessingWidget.mxml index 4f39ed9..da89019 100644 --- a/src/widgets/Geoprocessing/GeoprocessingWidget.mxml +++ b/src/widgets/Geoprocessing/GeoprocessingWidget.mxml @@ -220,7 +220,7 @@ { executionType = gpServerDescription.executionType; gp.useAMF = !hasUseAMFBeenSet && (gpServerDescription.currentVersion >= 10.1); - hasResultMapServer = useResultMapServer && Boolean(gpServerDescription.resultMapServerName); + hasResultMapServer = useResultMapServer && gpServerDescription.resultMapServerName; gpServerDescription.url = gpServerURL; gpServerDescription.proxyURL = gp.proxyURL; From a7711fc5b3c4eacb5a322675a7edf09c520764e3 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Tue, 5 Feb 2013 18:14:52 -0800 Subject: [PATCH 100/178] Defer SingleLineSearch logic to Geocoder component (requires ArcGIS API for Flex 3.2). --- .../singleLineSearch/SingleLineSearch.mxml | 788 ++++-------------- 1 file changed, 148 insertions(+), 640 deletions(-) diff --git a/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml b/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml index c08c883..f448c82 100644 --- a/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml +++ b/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml @@ -19,15 +19,16 @@ + xmlns:components="com.esri.ags.components.*"> 0) + { + useProxy = configXML.useproxy == "true"; + } + const configZoomScale:Number = parseFloat(configXML.zoomscale[0]); if (configZoomScale > 0) { @@ -153,89 +110,73 @@ } const configMinScore:Number = parseFloat(configXML.geocoding.minscore[0]); - if (configMinScore > 0) - { - minscore = configMinScore; - } + geocoder.minScore = (configMinScore > 0) ? configMinScore : 40; - searchPrompt = configXML.labels.searchprompt[0] || hostBaseWidget.getDefaultString("searchPrompt"); - noResultsFoundLabel = configXML.labels.noresults[0] || hostBaseWidget.getDefaultString("noResultsFoundLabel"); + geocoder.prompt = configXML.labels.searchprompt[0] || hostBaseWidget.getDefaultString("searchPrompt"); + geocoder.noResultsText = configXML.labels.noresults[0] || hostBaseWidget.getDefaultString("noResultsFoundLabel"); searchResultTitleLabel = configXML.labels.searchresulttitle[0] || hostBaseWidget.getDefaultString("searchResultTitleLabel"); configureResultSymbols(); configureResultGraphic(); - importSearchResultHistory(); - - isGeocodeEnabled = (configXML.geocoding.@enabled[0] != "false"); - if (isGeocodeEnabled) - { - configureLocator(); - } - - isFindEnabled = (configXML.searchlayers.@enabled[0] != "false" && configXML.searchlayers[0] != null); - if (isFindEnabled) - { - configureSearchLayers(); - } + configureLocatorServices(); + configureFindServices(); } } - private function configureLocator():void + private function configureLocatorServices():void { - const url:String = configXML.geocoding.locator[0] || DEFAULT_LOCATOR_URL; - - if (configXML.useproxy.length() > 0) + var isGeocodeEnabled:Boolean = (configXML.geocoding.@enabled[0] != "false"); + if (!isGeocodeEnabled) { - useProxy = configXML.useproxy == "true"; + locatorConfigured = true; + return; } - const locatorService:JSONTask = new JSONTask(); + const url:String = configXML.geocoding.locator[0] || DEFAULT_LOCATOR_URL; + + var locatorService:GeocoderLocatorService = new GeocoderLocatorService(); locatorService.url = url; - locator.url = url; + locatorService.outFields = [ "Ymax", "Ymin", "Xmax", "Xmin" ]; + + const locatorInfoRequest:JSONTask = new JSONTask(); + locatorInfoRequest.url = url; if (useProxy && configData.proxyUrl) { locatorService.proxyURL = configData.proxyUrl; - locator.proxyURL = configData.proxyUrl; + locatorInfoRequest.proxyURL = configData.proxyUrl; } var urlVars:URLVariables = new URLVariables(); urlVars.f = "json"; - locatorService.execute(urlVars, new AsyncResponder(locatorService_resultHandler, locatorService_faultHandler)); + locatorInfoRequest.execute(urlVars, + new AsyncResponder(locatorInfoRequest_resultHandler, + locatorInfoRequest_faultHandler, + locatorService)); } - private function locatorService_resultHandler(addressFieldData:Object, token:Object = null):void + private function locatorInfoRequest_resultHandler(addressFieldData:Object, locatorService:GeocoderLocatorService):void { if (addressFieldData.singleLineAddressField) { - singleAddressFieldName = addressFieldData.singleLineAddressField.name; + locatorService.singleLineAddressFieldName = addressFieldData.singleLineAddressField.name; } else { showError(hostBaseWidget.getDefaultString("singleLineGeocodingNotSupportedError"), SINGLE_LINE_SEARCH); } + geocoder.locatorServices = [ locatorService ]; locatorConfigured = true; invalidateProperties(); } - override protected function commitProperties():void - { - super.commitProperties(); - - if (isGeocodeEnabled && locatorConfigured - || (isFindEnabled && searchLayersConfigured)) - { - configureSearchInput(); - } - } - - private function locatorService_faultHandler(fault:Fault, token:Object = null):void + private function locatorInfoRequest_faultHandler(fault:Fault, locatorService:GeocoderLocatorService):void { const errorMessage:String = hostBaseWidget.getDefaultString("locatorServiceConnectionError", - locator.url, + locatorService.url, ErrorMessageUtil.getKnownErrorCauseMessage(fault), ErrorMessageUtil.makeHTMLSafe(fault.toString())); showError(errorMessage, SINGLE_LINE_SEARCH); @@ -243,24 +184,35 @@ invalidateProperties(); } - private function showError(message:String, title:String = null):void + private function configureFindServices():void { - _hostBaseWidget.showError(message, title); - } + var isFindEnabled:Boolean = + configXML.searchlayers.@enabled[0] != "false" && configXML.searchlayers[0] != null; - private function configureSearchLayers():void - { - if (configXML.searchlayers.length() > 0) + if (isFindEnabled) { - var searchLayer:SearchLayer; - for each (var layerInfo:XML in configXML.searchlayers.searchlayer) + + if (configXML.searchlayers.length() > 0) { - searchLayer = new SearchLayer(); - searchLayer.layerIds = layerInfo.layerids.toString().split(","); - searchLayer.layerURL = layerInfo.url.toString(); - searchLayer.searchFields = layerInfo.searchfields.toString().split(","); + var findService:GeocoderMapService; + var findServices:Array = []; + + for each (var layerInfo:XML in configXML.searchlayers.searchlayer) + { + findService = new GeocoderMapService(); + findService.layerIds = layerInfo.layerids.toString().split(","); + findService.url = layerInfo.url.toString(); + findService.searchFields = layerInfo.searchfields.toString().split(","); - searchLayers.push(searchLayer); + if (useProxy && configData.proxyUrl) + { + findService.proxyURL = configData.proxyUrl; + } + + findServices.push(findService); + } + + geocoder.mapServices = findServices; } } @@ -326,16 +278,13 @@ map.defaultGraphicsLayer.remove(searchResultGraphic); } - private function importSearchResultHistory():void + override protected function commitProperties():void { - try - { - searchResultHistory.importHistory - (searchResultHistoryStorage.data.searchResultHistory as Array); - } - catch (err:Error) + super.commitProperties(); + + if (locatorConfigured && searchLayersConfigured) { - //ignore + configureSearchInput(); } } @@ -344,8 +293,8 @@ const urlSearchTerm:String = getURLSearchTerm(); if (urlSearchTerm) { - searchTerm = urlSearchTerm; - search(); + geocoder.text = urlSearchTerm; + geocoder.search(); } } @@ -354,203 +303,115 @@ return ViewerContainer.urlConfigParams.search; } - private function search():void + //assumes search result SR compatible with map's + private function showSearchResultOnMap(searchResult:GeocoderSearchResult):void { - if (!searchTerm || (!isGeocodeEnabled && !isFindEnabled)) + if (!searchResult) { return; } - currentState = "searching"; + searchResultGraphic.geometry = searchResult.geometry; + searchResultGraphic.symbol = getSymbolForGeometryType(searchResultGraphic.geometry.type); + var resultExtent:Extent = searchResult.extent; - const hasCurrentSearchInProgress:Boolean = totalResultsToProcess > 0; - if (hasCurrentSearchInProgress) - { - cursorManager.removeBusyCursor(); - } + const popUpInfo:PopUpInfo = new PopUpInfo(); + popUpInfo.description = searchResult.label; + popUpInfo.title = searchResultTitleLabel; + popUpInfo.showZoomToButton = false; //hide the zoom to button as map would be zoomed-in - cursorManager.setBusyCursor(); - map.infoWindow.hide(); - totalResultsToProcess = 0; - searchResults.removeAll(); + const infoWindowRenderer:ClassFactory = new ClassFactory(PopUpRenderer); + infoWindowRenderer.properties = { popUpInfo: popUpInfo }; + searchResultGraphic.infoWindowRenderer = infoWindowRenderer; - lastSearchTimestamp = getTimer(); + popUpRenderer.popUpInfo = popUpInfo; + popUpRenderer.graphic = searchResultGraphic; - if (isGeocodeEnabled) + map.defaultGraphicsLayer.remove(searchResultGraphic); + if (searchResultGraphic.symbol) { - totalResultsToProcess++; - - const addressData:Object = {}; - addressData[singleAddressFieldName] = searchTerm; - var locatorParams:AddressToLocationsParameters = new AddressToLocationsParameters(); - locatorParams.address = addressData; - locatorParams.outFields = [ "Ymax", "Ymin", "Xmax", "Xmin" ]; - locatorParams.location = map.extent.center; - locatorParams.distance = calculateExtentRadius(); - - locator.addressToLocations(locatorParams, new AsyncResponder(locator_resultHandler, locator_faultHandler, lastSearchTimestamp)); + map.defaultGraphicsLayer.add(searchResultGraphic); } - if (isFindEnabled) - { - totalResultsToProcess += searchLayers.length; + const resultPoint:MapPoint = getGeometryCenter(searchResultGraphic.geometry); - var searchLayer:SearchLayer; - for (var i1:Number = 0; i1 < searchLayers.length; i1++) - { - searchLayer = searchLayers[i1]; - findTask.url = searchLayer.layerURL; - var findParams:FindParameters = new FindParameters(); - findParams.contains = true; - findParams.layerIds = searchLayer.layerIds; - findParams.searchFields = searchLayer.searchFields; - findParams.searchText = searchTerm; - findParams.outSpatialReference = map.spatialReference; - findParams.returnGeometry = true; - - findTask.execute(findParams, new AsyncResponder(findTask_resultHandler, findTask_faultHandler, lastSearchTimestamp)); - } + if (resultExtent) + { + map.zoomTo(resultExtent); } - } - - private function calculateExtentRadius():Number - { - var radius:Number; - - if (map.spatialReference.wkid == 4326 - || map.spatialReference.isWebMercator()) + else { - const currentExtent:Extent = map.extent; - var diagonal:Polyline = new Polyline([[ new MapPoint(currentExtent.xmin, currentExtent.ymin), - new MapPoint(currentExtent.xmax, currentExtent.ymax)]]); - - if (map.spatialReference.isWebMercator()) + if (searchResultGraphic.geometry.type == Geometry.MAPPOINT) { - diagonal = WebMercatorUtil.webMercatorToGeographic(diagonal) as Polyline; + if (map.scale > zoomScale) + { + map.scale = zoomScale; + } } - const diagonalLength:Number = GeometryUtil.geodesicLengths([ diagonal ], Units.METERS)[0]; - - radius = Math.round(diagonalLength * 0.5); + map.zoomTo(searchResultGraphic.geometry); } - return radius; + infoWindowShow(resultPoint); } - private function locator_resultHandler(results:Array, searchTimestamp:int):void + private function getSymbolForGeometryType(geometryType:String):Symbol { - if (searchTimestamp != lastSearchTimestamp) - { - return; - } + var symbol:Symbol; - for each (var addressCandidate:AddressCandidate in results) + switch (geometryType) { - if (addressCandidate.score >= minscore) + case Geometry.POLYLINE: + { + symbol = resultSimpleLineSymbol; + break; + } + case Geometry.POLYGON: { - searchResults.addItem(addressCandidate); + symbol = resultSimpleFillSymbol; + break; + } + case Geometry.MAPPOINT: + default: + { + symbol = resultSimpleMarkerSymbol; } } - decreaseProcessedResultCount(); - } - - private function decreaseProcessedResultCount():void - { - totalResultsToProcess--; - - if (totalResultsToProcess == 0) - { - showSearchResults(); - } + return symbol; } - private function showSearchResults():void + private function getGeometryCenter(geometry:Geometry):MapPoint { - cursorManager.removeBusyCursor(); + var center:MapPoint; - if (searchResults.length > 1) - { - currentState = "showingSearchResults"; - resultList.selectedIndex = -1; - } - else if (searchResults.length == 1) + if (geometry is MapPoint) { - storeSearchResult(searchResults.getItemAt(0)); - var searchResult:Object = getSearchResult(searchResults.getItemAt(0)); - searchTerm = searchResult.label; - projectToMapSpatialReferenceAndShowResultOnMap(searchResult); + center = geometry as MapPoint; } - else + else if (geometry) { - currentState = "noResults"; + center = geometry.extent.center; } - } - - private function storeSearchResult(searchResult:Object):void - { - searchResultHistory.addItem(searchResult); - exportSearchResultHistory(); - } - private function exportSearchResultHistory():void - { - try - { - searchResultHistoryStorage.data.searchResultHistory = - searchResultHistory.exportHistory(); - searchResultHistoryStorage.flush(); - } - catch (err:Error) - { - //ignore - } + return center; } - private function getSearchResult(searchResult:Object):Object + private function infoWindowShow(point:MapPoint):void { - var result:Object; - - if (searchResult is FindResult) - { - result = {}; - const findResult:FindResult = searchResult as FindResult; - result.label = findResult.value; - result.geometry = findResult.feature.geometry; - result.extent = null; - } - else if (searchResult is AddressCandidate) - { - result = {}; - const addressCandidate:AddressCandidate = searchResult as AddressCandidate; - result.label = addressCandidate.address; - result.geometry = addressCandidate.location; - result.extent = getGeographicResultExtent(addressCandidate); - } - - return result; + map.infoWindow.content = popUpRenderer; + map.infoWindow.contentOwner = popUpRenderer.graphic; + map.infoWindow.show(point); } - private function getGeographicResultExtent(addressCandidate:AddressCandidate):Extent + protected function geocoder_searchCompleteHandler(event:GeocoderEvent):void { - const canCreateResultExtent:Boolean = addressCandidate - && addressCandidate.attributes - && Boolean(addressCandidate.attributes.Xmin) && Boolean(addressCandidate.attributes.Ymin) - && Boolean(addressCandidate.attributes.Xmax) && Boolean(addressCandidate.attributes.Ymax) - && !isNaN(addressCandidate.attributes.Xmin) && !isNaN(addressCandidate.attributes.Ymin) - && !isNaN(addressCandidate.attributes.Xmax) && !isNaN(addressCandidate.attributes.Ymax); - - return canCreateResultExtent ? new Extent(addressCandidate.attributes.Xmin, - addressCandidate.attributes.Ymin, - addressCandidate.attributes.Xmax, - addressCandidate.attributes.Ymax, - new SpatialReference(4326)) : null; + projectToMapSpatialReferenceAndShowResultOnMap(event.searchResult); } - private function projectToMapSpatialReferenceAndShowResultOnMap(searchResult:Object):void + private function projectToMapSpatialReferenceAndShowResultOnMap(searchResult:GeocoderSearchResult):void { var needToProjectGeometryServerSide:Boolean; - if (map.spatialReference.isWebMercator() && searchResult.geometry.spatialReference && searchResult.geometry.spatialReference.wkid == 4326) @@ -569,13 +430,12 @@ } var needToProjectExtentServerSide:Boolean; - if (searchResult.extent) { if (map.spatialReference.isWebMercator() && searchResult.extent.spatialReference.wkid == 4326) { - searchResult.extent = WebMercatorUtil.geographicToWebMercator(searchResult.extent); + searchResult.extent = WebMercatorUtil.geographicToWebMercator(searchResult.extent) as Extent; } else if (map.spatialReference.wkid == 4326 && searchResult.extent.spatialReference @@ -590,7 +450,6 @@ } var previousShowBusyCursorValue:Boolean = GeometryServiceSingleton.instance.showBusyCursor; - if (needToProjectGeometryServerSide) { projectGeometryServerSide(); @@ -609,7 +468,6 @@ var projectionParams:ProjectParameters = new ProjectParameters(); projectionParams.geometries = [ searchResult.geometry ]; projectionParams.outSpatialReference = map.spatialReference; - GeometryServiceSingleton.instance.showBusyCursor = true; GeometryServiceSingleton.instance.project( projectionParams, new AsyncResponder(projectGeometryResultHandler, @@ -619,7 +477,6 @@ function projectGeometryResultHandler(geometry:Array, token:Object = null):void { searchResult.geometry = geometry[0]; - if (needToProjectExtentServerSide) { projectExtentServerSide(); @@ -635,7 +492,6 @@ var projectionParams:ProjectParameters = new ProjectParameters(); projectionParams.geometries = [ searchResult.extent ]; projectionParams.outSpatialReference = map.spatialReference; - GeometryServiceSingleton.instance.showBusyCursor = true; GeometryServiceSingleton.instance.project( projectionParams, new AsyncResponder(projectExtentResultHandler, @@ -651,10 +507,8 @@ function handleProjectionComplete():void { GeometryServiceSingleton.instance.showBusyCursor = previousShowBusyCursorValue; - var resultHasValidGeometry:Boolean = hasValidGeometry(searchResult.geometry); var resultHasExtentAndIsValid:Boolean = searchResult.extent && hasValidGeometry(searchResult.extent); - if (resultHasExtentAndIsValid && resultHasValidGeometry || resultHasValidGeometry) { @@ -676,7 +530,6 @@ private function hasValidGeometry(geometry:Geometry):Boolean { var isValid:Boolean; - if (geometry) { if (geometry.type == Geometry.MAPPOINT) @@ -700,7 +553,6 @@ isValid = isValidPolyline(geometry as Polyline); } } - return isValid; } @@ -717,11 +569,9 @@ private function hasValidMapPoints(points:Array):Boolean { var isValid:Boolean; - if (points && points.length > 0) { isValid = true; - for each (var point:MapPoint in points) { if (!isValidMapPoint(point)) @@ -731,18 +581,15 @@ } } } - return isValid; } private function isValidPolyline(polyline:Polyline):Boolean { var isValid:Boolean; - if (polyline && polyline.paths && polyline.paths.length > 0) { isValid = true; - for each (var path:Array in polyline.paths) { if (!hasValidMapPoints(path)) @@ -752,18 +599,15 @@ } } } - return isValid; } private function isValidPolygon(polygon:Polygon):Boolean { var isValid:Boolean; - if (polygon && polygon.rings && polygon.rings.length > 0) { isValid = true; - for each (var ring:Array in polygon.rings) { if (!hasValidMapPoints(ring)) @@ -773,363 +617,27 @@ } } } - return isValid; } - private function locator_faultHandler(info:Object, searchTimestamp:int):void - { - if (searchTimestamp != lastSearchTimestamp) - { - return; - } - - showError(info.toString(), SINGLE_LINE_SEARCH); - decreaseProcessedResultCount(); - } - - private function findTask_resultHandler(results:Array, searchTimestamp:int):void - { - if (searchTimestamp != lastSearchTimestamp) - { - return; - } - - for each (var findResult:FindResult in results) - { - searchResults.addItem(findResult); - } - - decreaseProcessedResultCount(); - } - - private function findTask_faultHandler(error:Fault, searchTimestamp:int):void - { - if (searchTimestamp != lastSearchTimestamp) - { - return; - } - - decreaseProcessedResultCount(); - } - - private function processSelectedSearchResult():void - { - if (resultList.selectedItem) - { - storeSearchResult(resultList.selectedItem); - var searchResult:Object = getSearchResult(resultList.selectedItem); - searchTerm = searchResult.label; - projectToMapSpatialReferenceAndShowResultOnMap(searchResult); - resetSearchResultSelection(); - } - } - - private function resetSearchResultSelection():void + protected function geocoder_faultHandler(event:FaultEvent):void { - resultList.dataProvider.removeAll(); - currentState = "normal"; + showError(ErrorMessageUtil.buildFaultMessage(event.fault), SINGLE_LINE_SEARCH); } - //assumes search result SR compatible with map's - private function showSearchResultOnMap(searchResult:Object):void - { - if (!searchResult) - { - return; - } - - searchResultGraphic.geometry = searchResult.geometry; - searchResultGraphic.symbol = getSymbolForGeometryType(searchResultGraphic.geometry.type); - var resultExtent:Extent = searchResult.extent; - - const popUpInfo:PopUpInfo = new PopUpInfo(); - popUpInfo.description = searchResult.label; - popUpInfo.title = searchResultTitleLabel; - popUpInfo.showZoomToButton = false; //hide the zoom to button as map would be zoomed-in - - const infoWindowRenderer:ClassFactory = new ClassFactory(PopUpRenderer); - infoWindowRenderer.properties = { popUpInfo: popUpInfo }; - searchResultGraphic.infoWindowRenderer = infoWindowRenderer; - - popUpRenderer.popUpInfo = popUpInfo; - popUpRenderer.graphic = searchResultGraphic; - - map.defaultGraphicsLayer.remove(searchResultGraphic); - if (searchResultGraphic.symbol) - { - map.defaultGraphicsLayer.add(searchResultGraphic); - } - - const resultPoint:MapPoint = getGeometryCenter(searchResultGraphic.geometry); - - if (resultExtent) - { - map.zoomTo(resultExtent); - } - else - { - if (searchResultGraphic.geometry.type == Geometry.MAPPOINT) - { - if (map.scale > zoomScale) - { - map.scale = zoomScale; - } - } - - map.zoomTo(searchResultGraphic.geometry); - } - - infoWindowShow(resultPoint); - } - - private function getSymbolForGeometryType(geometryType:String):Symbol - { - var symbol:Symbol; - - switch (geometryType) - { - case Geometry.POLYLINE: - { - symbol = resultSimpleLineSymbol; - break; - } - case Geometry.POLYGON: - { - symbol = resultSimpleFillSymbol; - break; - } - case Geometry.MAPPOINT: - default: - { - symbol = resultSimpleMarkerSymbol; - } - } - - return symbol; - } - - private function getGeometryCenter(geometry:Geometry):MapPoint - { - var center:MapPoint; - - if (geometry is MapPoint) - { - center = geometry as MapPoint; - } - else if (geometry) - { - center = geometry.extent.center; - } - - return center; - } - - private function infoWindowShow(point:MapPoint):void - { - map.infoWindow.content = popUpRenderer; - map.infoWindow.contentOwner = popUpRenderer.graphic; - map.infoWindow.show(point); - } - - protected function searchInput_focusInHandler(event:FocusEvent):void - { - if (currentState == "normal") - { - if (searchResults.length > 1) - { - currentState = "showingSearchResults"; - resultList.selectedIndex = -1; - } - else - { - processSearchResult(); - } - } - } - - protected function this_focusOutHandler(event:FocusEvent):void - { - if (event.relatedObject == resultList - || event.relatedObject == searchInput) - { - return; - } - - if (currentState != "searching") - { - currentState = "normal"; - } - } - - protected function searchInput_changeHandler(event:TextOperationEvent):void - { - processSearchResult(); - } - - private function processSearchResult():void - { - if (searchResults.length > 0) - { - searchResults.removeAll(); - } - - const searchResultMatches:Array = searchInHistory(searchTerm); - searchResultHistoryList.source = searchResultMatches; - if (searchResultMatches.length > 0) - { - currentState = "showingPreviousSearchResults"; - resultList.selectedIndex = -1; - } - else - { - currentState = "normal"; - } - } - - private function searchInHistory(input:String):Array - { - const matches:Array = []; - - if (input) - { - input = input.toLowerCase(); - - const searchResultItems:Array = searchResultHistory.items; - var searchResult:Object; - for (var i:int = searchResultItems.length - 1; i >= 0; i--) - { - searchResult = searchResultItems[i]; - - if (searchResult is FindResult && !isFindEnabled - || searchResult is AddressCandidate && !isGeocodeEnabled) - { - continue; - } - - if (SearchResultUtil.searchResultToLabel(searchResult).toLowerCase().indexOf(input) != -1) - { - matches.unshift(searchResult); - if (matches.length >= 10) - { - break; - } - } - } - } - - return matches; - } - - protected function searchInput_keyDownHandler(event:KeyboardEvent):void - { - if (event.keyCode == Keyboard.ESCAPE) - { - currentState = "normal"; - } - - if (event.keyCode == Keyboard.DOWN) - { - processDownKey(); - } - - if (event.keyCode == Keyboard.UP) - { - processUpKey(); - } - } - - private function processUpKey():void - { - if (currentState == "showingPreviousSearchResults" - || currentState == "showingSearchResults") - { - resultList.selectedIndex--; - resultList.ensureIndexIsVisible(resultList.selectedIndex); - } - } - - private function processDownKey():void - { - if (currentState == "showingPreviousSearchResults" - || currentState == "showingSearchResults") - { - resultList.selectedIndex++; - resultList.ensureIndexIsVisible(resultList.selectedIndex); - } - } - - protected function resultList_changeHandler(event:IndexChangeEvent):void - { - if (resultList.selectedIndex > -1) - { - processSelectedSearchResult(); - } - } - - protected function searchInput_enterHandler(event:FlexEvent):void + private function showError(message:String, title:String = null):void { - if (resultList.selectedIndex > -1) - { - processSelectedSearchResult(); - } - else - { - search(); - } + _hostBaseWidget.showError(message, title); } ]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - + From 59605e6db564ef053ac5d4e6deab452fc479aa35 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Wed, 6 Feb 2013 12:45:18 -0800 Subject: [PATCH 101/178] Delete unnecessary SingleLineSearch files. --- .../components/singleLineSearch/ResultList.as | 26 -- .../ResultListItemRenderer.mxml | 28 -- .../singleLineSearch/SearchInputSkin.mxml | 288 ------------------ .../singleLineSearch/SearchLayer.as | 25 -- .../singleLineSearch/SearchResultUtil.as | 55 ---- 5 files changed, 422 deletions(-) delete mode 100644 src/com/esri/viewer/components/singleLineSearch/ResultList.as delete mode 100644 src/com/esri/viewer/components/singleLineSearch/ResultListItemRenderer.mxml delete mode 100644 src/com/esri/viewer/components/singleLineSearch/SearchInputSkin.mxml delete mode 100644 src/com/esri/viewer/components/singleLineSearch/SearchLayer.as delete mode 100644 src/com/esri/viewer/components/singleLineSearch/SearchResultUtil.as diff --git a/src/com/esri/viewer/components/singleLineSearch/ResultList.as b/src/com/esri/viewer/components/singleLineSearch/ResultList.as deleted file mode 100644 index 527bacf..0000000 --- a/src/com/esri/viewer/components/singleLineSearch/ResultList.as +++ /dev/null @@ -1,26 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2010-2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package com.esri.viewer.components.singleLineSearch -{ - -import spark.components.List; - -public class ResultList extends List -{ - [Bindable] - public var searchText:String = ""; -} -} diff --git a/src/com/esri/viewer/components/singleLineSearch/ResultListItemRenderer.mxml b/src/com/esri/viewer/components/singleLineSearch/ResultListItemRenderer.mxml deleted file mode 100644 index 064bdec..0000000 --- a/src/com/esri/viewer/components/singleLineSearch/ResultListItemRenderer.mxml +++ /dev/null @@ -1,28 +0,0 @@ - - - - $&"); - suggestionLabel.textFlow = TextConverter.importToFlow(suggestionText, TextConverter.TEXT_FIELD_HTML_FORMAT); - } - ]]> - - - - diff --git a/src/com/esri/viewer/components/singleLineSearch/SearchInputSkin.mxml b/src/com/esri/viewer/components/singleLineSearch/SearchInputSkin.mxml deleted file mode 100644 index 4cd2406..0000000 --- a/src/com/esri/viewer/components/singleLineSearch/SearchInputSkin.mxml +++ /dev/null @@ -1,288 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/com/esri/viewer/components/singleLineSearch/SearchLayer.as b/src/com/esri/viewer/components/singleLineSearch/SearchLayer.as deleted file mode 100644 index 56e8559..0000000 --- a/src/com/esri/viewer/components/singleLineSearch/SearchLayer.as +++ /dev/null @@ -1,25 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2010-2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package com.esri.viewer.components.singleLineSearch -{ - -public class SearchLayer -{ - public var layerIds:Array; - public var layerURL:String; - public var searchFields:Array; -} -} diff --git a/src/com/esri/viewer/components/singleLineSearch/SearchResultUtil.as b/src/com/esri/viewer/components/singleLineSearch/SearchResultUtil.as deleted file mode 100644 index fe80fdd..0000000 --- a/src/com/esri/viewer/components/singleLineSearch/SearchResultUtil.as +++ /dev/null @@ -1,55 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2010-2011 Esri. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/////////////////////////////////////////////////////////////////////////// -package com.esri.viewer.components.singleLineSearch -{ - -import com.esri.ags.tasks.supportClasses.AddressCandidate; -import com.esri.ags.tasks.supportClasses.FindResult; - -import mx.utils.StringUtil; - -public class SearchResultUtil -{ - public static function searchResultToLabel(searchResult:Object):String - { - if (searchResult is FindResult) - { - return findResultToLabel(searchResult as FindResult); - } - else if (searchResult is AddressCandidate) - { - return (searchResult as AddressCandidate).address as String; - } - else if (searchResult == null) - { - return ""; - } - else - { - return searchResult as String; - } - } - - private static function findResultToLabel(findResult:FindResult):String - { - return StringUtil.substitute('{0} - {1} - {2} ({3})', - findResult.value, - findResult.foundFieldName, - findResult.layerName, - findResult.layerId); - } -} -} From 91f5f86ecaa1cb27210be3c7e2a1ef4f16447e68 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Mon, 11 Feb 2013 21:54:41 -0800 Subject: [PATCH 102/178] Clean up SingleLineSearch. * Rename variables. * Inline method. --- .../singleLineSearch/SingleLineSearch.mxml | 59 +++++++++---------- 1 file changed, 27 insertions(+), 32 deletions(-) diff --git a/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml b/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml index f448c82..8b5dc3b 100644 --- a/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml +++ b/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml @@ -57,8 +57,8 @@ private const SINGLE_LINE_SEARCH:String = "SingleLineSearch"; private const DEFAULT_LOCATOR_URL:String = "http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer"; - private var searchLayersConfigured:Boolean; - private var locatorConfigured:Boolean; + private var mapServicesConfigured:Boolean; + private var locatorServicesConfigured:Boolean; private var zoomScale:Number = 10000; private var resultSimpleMarkerSymbol:SimpleMarkerSymbol; private var resultSimpleLineSymbol:SimpleLineSymbol; @@ -120,16 +120,16 @@ configureResultGraphic(); configureLocatorServices(); - configureFindServices(); + configureMapServices(); } } private function configureLocatorServices():void { - var isGeocodeEnabled:Boolean = (configXML.geocoding.@enabled[0] != "false"); - if (!isGeocodeEnabled) + var locatorServicesEnabled:Boolean = (configXML.geocoding.@enabled[0] != "false"); + if (!locatorServicesEnabled) { - locatorConfigured = true; + locatorServicesConfigured = true; return; } @@ -157,11 +157,11 @@ locatorService)); } - private function locatorInfoRequest_resultHandler(addressFieldData:Object, locatorService:GeocoderLocatorService):void + private function locatorInfoRequest_resultHandler(locatorInfo:Object, locatorService:GeocoderLocatorService):void { - if (addressFieldData.singleLineAddressField) + if (locatorInfo.singleLineAddressField) { - locatorService.singleLineAddressFieldName = addressFieldData.singleLineAddressField.name; + locatorService.singleLineAddressFieldName = locatorInfo.singleLineAddressField.name; } else { @@ -169,7 +169,7 @@ } geocoder.locatorServices = [ locatorService ]; - locatorConfigured = true; + locatorServicesConfigured = true; invalidateProperties(); } @@ -180,43 +180,43 @@ ErrorMessageUtil.getKnownErrorCauseMessage(fault), ErrorMessageUtil.makeHTMLSafe(fault.toString())); showError(errorMessage, SINGLE_LINE_SEARCH); - locatorConfigured = true; + locatorServicesConfigured = true; invalidateProperties(); } - private function configureFindServices():void + private function configureMapServices():void { - var isFindEnabled:Boolean = + var mapServicesEnabled:Boolean = configXML.searchlayers.@enabled[0] != "false" && configXML.searchlayers[0] != null; - if (isFindEnabled) + if (mapServicesEnabled) { if (configXML.searchlayers.length() > 0) { - var findService:GeocoderMapService; - var findServices:Array = []; + var mapService:GeocoderMapService; + var mapServices:Array = []; - for each (var layerInfo:XML in configXML.searchlayers.searchlayer) + for each (var searchLayerXML:XML in configXML.searchlayers.searchlayer) { - findService = new GeocoderMapService(); - findService.layerIds = layerInfo.layerids.toString().split(","); - findService.url = layerInfo.url.toString(); - findService.searchFields = layerInfo.searchfields.toString().split(","); + mapService = new GeocoderMapService(); + mapService.layerIds = searchLayerXML.layerids.toString().split(","); + mapService.url = searchLayerXML.url.toString(); + mapService.searchFields = searchLayerXML.searchfields.toString().split(","); if (useProxy && configData.proxyUrl) { - findService.proxyURL = configData.proxyUrl; + mapService.proxyURL = configData.proxyUrl; } - findServices.push(findService); + mapServices.push(mapService); } - geocoder.mapServices = findServices; + geocoder.mapServices = mapServices; } } - searchLayersConfigured = true; + mapServicesConfigured = true; invalidateProperties(); } @@ -282,7 +282,7 @@ { super.commitProperties(); - if (locatorConfigured && searchLayersConfigured) + if (locatorServicesConfigured && mapServicesConfigured) { configureSearchInput(); } @@ -290,7 +290,7 @@ private function configureSearchInput():void { - const urlSearchTerm:String = getURLSearchTerm(); + const urlSearchTerm:String = ViewerContainer.urlConfigParams.search; if (urlSearchTerm) { geocoder.text = urlSearchTerm; @@ -298,11 +298,6 @@ } } - private function getURLSearchTerm():String - { - return ViewerContainer.urlConfigParams.search; - } - //assumes search result SR compatible with map's private function showSearchResultOnMap(searchResult:GeocoderSearchResult):void { From 5c27940b1d0e9519cb477943081653b3a82b0eae Mon Sep 17 00:00:00 2001 From: jcfranco Date: Mon, 11 Feb 2013 22:21:19 -0800 Subject: [PATCH 103/178] Add support for Geocoder properties. --- .../singleLineSearch/SingleLineSearch.mxml | 65 ++++++++++++++++--- 1 file changed, 56 insertions(+), 9 deletions(-) diff --git a/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml b/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml index 8b5dc3b..04d17a2 100644 --- a/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml +++ b/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml @@ -55,10 +55,7 @@ import mx.rpc.events.FaultEvent; private const SINGLE_LINE_SEARCH:String = "SingleLineSearch"; - private const DEFAULT_LOCATOR_URL:String = "http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer"; - private var mapServicesConfigured:Boolean; - private var locatorServicesConfigured:Boolean; private var zoomScale:Number = 10000; private var resultSimpleMarkerSymbol:SimpleMarkerSymbol; private var resultSimpleLineSymbol:SimpleLineSymbol; @@ -75,6 +72,32 @@ [Bindable] private var searchResultTitleLabel:String; + private var _mapServicesConfigured:Boolean; + + public function get mapServicesConfigured():Boolean + { + return _mapServicesConfigured; + } + + public function set mapServicesConfigured(value:Boolean):void + { + _mapServicesConfigured = value; + invalidateProperties(); + } + + private var _locatorServicesConfigured:Boolean; + + public function get locatorServicesConfigured():Boolean + { + return _locatorServicesConfigured; + } + + public function set locatorServicesConfigured(value:Boolean):void + { + _locatorServicesConfigured = value; + invalidateProperties(); + } + private var _hostBaseWidget:BaseWidget; public function get hostBaseWidget():BaseWidget @@ -109,9 +132,30 @@ zoomScale = configZoomScale; } - const configMinScore:Number = parseFloat(configXML.geocoding.minscore[0]); + //backwards compatibility + const configMinScore:Number = parseFloat(configXML.minscore[0]) || parseFloat(configXML.geocoding.minscore[0]); geocoder.minScore = (configMinScore > 0) ? configMinScore : 40; + geocoder.autoComplete = configXML.autocomplete != "false"; + + const configMaxLocations:int = parseInt(configXML.maxlocations[0]) + if (!isNaN(configMaxLocations) && configMaxLocations > 0) + { + geocoder.maxLocations = configMaxLocations; + } + + const configMinChars:int = parseInt(configXML.minchars[0]) + if (configMinChars && configMinChars > 0) + { + geocoder.minCharacters = configMinChars; + } + + const configSearchDelay:int = parseInt(configXML.searchdelay[0]) + if (configSearchDelay && configSearchDelay > 0) + { + geocoder.searchDelay = configSearchDelay; + } + geocoder.prompt = configXML.labels.searchprompt[0] || hostBaseWidget.getDefaultString("searchPrompt"); geocoder.noResultsText = configXML.labels.noresults[0] || hostBaseWidget.getDefaultString("noResultsFoundLabel"); searchResultTitleLabel = configXML.labels.searchresulttitle[0] || hostBaseWidget.getDefaultString("searchResultTitleLabel"); @@ -133,7 +177,14 @@ return; } - const url:String = configXML.geocoding.locator[0] || DEFAULT_LOCATOR_URL; + const url:String = configXML.geocoding.locator[0]; + + if (!url) + { + geocoder.useDefaultLocator = true; + locatorServicesConfigured = true; + return; + } var locatorService:GeocoderLocatorService = new GeocoderLocatorService(); locatorService.url = url; @@ -170,7 +221,6 @@ geocoder.locatorServices = [ locatorService ]; locatorServicesConfigured = true; - invalidateProperties(); } private function locatorInfoRequest_faultHandler(fault:Fault, locatorService:GeocoderLocatorService):void @@ -181,7 +231,6 @@ ErrorMessageUtil.makeHTMLSafe(fault.toString())); showError(errorMessage, SINGLE_LINE_SEARCH); locatorServicesConfigured = true; - invalidateProperties(); } private function configureMapServices():void @@ -217,7 +266,6 @@ } mapServicesConfigured = true; - invalidateProperties(); } private function configureResultSymbols():void @@ -629,7 +677,6 @@ Date: Mon, 11 Feb 2013 22:25:31 -0800 Subject: [PATCH 104/178] Add support for GeocoderMapService properties. --- .../components/singleLineSearch/SingleLineSearch.mxml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml b/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml index 04d17a2..671c507 100644 --- a/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml +++ b/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml @@ -240,11 +240,11 @@ if (mapServicesEnabled) { - if (configXML.searchlayers.length() > 0) { var mapService:GeocoderMapService; var mapServices:Array = []; + var mapServiceProxyURL:String; for each (var searchLayerXML:XML in configXML.searchlayers.searchlayer) { @@ -252,10 +252,12 @@ mapService.layerIds = searchLayerXML.layerids.toString().split(","); mapService.url = searchLayerXML.url.toString(); mapService.searchFields = searchLayerXML.searchfields.toString().split(","); + mapService.name = searchLayerXML.name.toString(); + mapServiceProxyURL = searchLayerXML.proxyurl.toString() || configData.proxyUrl; - if (useProxy && configData.proxyUrl) + if (useProxy && mapServiceProxyURL) { - mapService.proxyURL = configData.proxyUrl; + mapService.proxyURL = mapServiceProxyURL; } mapServices.push(mapService); From 4b7b547a8d605784a4fee89e3d15a7ef618124b4 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Mon, 11 Feb 2013 22:46:17 -0800 Subject: [PATCH 105/178] Add support for GeocoderLocatorService properties. --- .../singleLineSearch/SingleLineSearch.mxml | 128 ++++++++++++------ 1 file changed, 87 insertions(+), 41 deletions(-) diff --git a/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml b/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml index 671c507..fa1dc7b 100644 --- a/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml +++ b/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml @@ -177,60 +177,106 @@ return; } - const url:String = configXML.geocoding.locator[0]; - - if (!url) + if (!configXML.geocoding.locator[0]) { geocoder.useDefaultLocator = true; locatorServicesConfigured = true; return; } + //backwards compatibility + else if (configXML.geocoding.locator.hasSimpleContent()) + { + //convert URL to locator XML + var url:String = configXML.geocoding.locator[0]; + delete configXML.geocoding.locator[0]; + configXML.geocoding.appendChild({url}); + } - var locatorService:GeocoderLocatorService = new GeocoderLocatorService(); - locatorService.url = url; - locatorService.outFields = [ "Ymax", "Ymin", "Xmax", "Xmin" ]; - - const locatorInfoRequest:JSONTask = new JSONTask(); - locatorInfoRequest.url = url; + var locatorsToConfigure:int = configXML.geocoding.locator.length(); + var locatorServices:Array = []; + var locatorService:GeocoderLocatorService; - if (useProxy && configData.proxyUrl) + for each (var locatorXML:XML in configXML.geocoding.locator) { - locatorService.proxyURL = configData.proxyUrl; - locatorInfoRequest.proxyURL = configData.proxyUrl; - } + locatorService = new GeocoderLocatorService(); + locatorService.url = locatorXML.url.toString(); + locatorService.name = locatorXML.name.toString(); + locatorService.sourceCountry = locatorXML.sourcecountry.toString(); + locatorService.prefix = locatorXML.prefix.toString(); + locatorService.suffix = locatorXML.suffix.toString(); - var urlVars:URLVariables = new URLVariables(); - urlVars.f = "json"; + var configOutFields:String = locatorXML.outfields.toString(); + if (configOutFields) + { + locatorService.outFields = configOutFields.split(','); + } - locatorInfoRequest.execute(urlVars, - new AsyncResponder(locatorInfoRequest_resultHandler, - locatorInfoRequest_faultHandler, - locatorService)); - } + var locatorServiceProxyURL:String = locatorXML.proxyurl.toString() || configData.proxyUrl; + if (useProxy && locatorServiceProxyURL) + { + locatorService.proxyURL = locatorServiceProxyURL; + } - private function locatorInfoRequest_resultHandler(locatorInfo:Object, locatorService:GeocoderLocatorService):void - { - if (locatorInfo.singleLineAddressField) - { - locatorService.singleLineAddressFieldName = locatorInfo.singleLineAddressField.name; - } - else - { - showError(hostBaseWidget.getDefaultString("singleLineGeocodingNotSupportedError"), SINGLE_LINE_SEARCH); - } + var singleLineAddressField:String = locatorXML.singlelineaddressfield.toString(); + if (singleLineAddressField) + { + locatorService.singleLineAddressFieldName = singleLineAddressField; + locatorServices.push(locatorService); + locatorProcessed(); + } + else + { + const locatorInfoRequest:JSONTask = new JSONTask(); + locatorInfoRequest.url = locatorService.url; + if (useProxy && locatorServiceProxyURL) + { + locatorInfoRequest.proxyURL = locatorService.proxyURL; + } - geocoder.locatorServices = [ locatorService ]; - locatorServicesConfigured = true; - } + var urlVars:URLVariables = new URLVariables(); + urlVars.f = "json"; - private function locatorInfoRequest_faultHandler(fault:Fault, locatorService:GeocoderLocatorService):void - { - const errorMessage:String = hostBaseWidget.getDefaultString("locatorServiceConnectionError", - locatorService.url, - ErrorMessageUtil.getKnownErrorCauseMessage(fault), - ErrorMessageUtil.makeHTMLSafe(fault.toString())); - showError(errorMessage, SINGLE_LINE_SEARCH); - locatorServicesConfigured = true; + locatorInfoRequest.execute(urlVars, + new AsyncResponder(locatorInfoRequest_resultHandler, + locatorInfoRequest_faultHandler, + locatorService)); + + function locatorInfoRequest_resultHandler(locatorInfo:Object, locatorService:GeocoderLocatorService):void + { + if (locatorInfo.singleLineAddressField) + { + locatorService.singleLineAddressFieldName = locatorInfo.singleLineAddressField.name; + } + else + { + showError(hostBaseWidget.getDefaultString("singleLineGeocodingNotSupportedError"), SINGLE_LINE_SEARCH); + } + + locatorServices.push(locatorService); + locatorProcessed(); + } + + function locatorInfoRequest_faultHandler(fault:Fault, locatorService:GeocoderLocatorService):void + { + const errorMessage:String = hostBaseWidget.getDefaultString("locatorServiceConnectionError", + locatorService.url, + ErrorMessageUtil.getKnownErrorCauseMessage(fault), + ErrorMessageUtil.makeHTMLSafe(fault.toString())); + showError(errorMessage, SINGLE_LINE_SEARCH); + locatorProcessed(); + } + } + + function locatorProcessed():void + { + locatorsToConfigure--; + if (locatorsToConfigure == 0) + { + geocoder.locatorServices = locatorServices; + locatorServicesConfigured = true; + } + } + } } private function configureMapServices():void From 0b77d550dcdb8693bdb23f605a56a89efa650d77 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Tue, 12 Feb 2013 11:03:39 -0800 Subject: [PATCH 106/178] Move SingleLineSearch into components package. --- .../{singleLineSearch => }/SingleLineSearch.mxml | 0 src/widgets/HeaderController/HeaderControllerWidget.mxml | 9 ++++----- 2 files changed, 4 insertions(+), 5 deletions(-) rename src/com/esri/viewer/components/{singleLineSearch => }/SingleLineSearch.mxml (100%) diff --git a/src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml b/src/com/esri/viewer/components/SingleLineSearch.mxml similarity index 100% rename from src/com/esri/viewer/components/singleLineSearch/SingleLineSearch.mxml rename to src/com/esri/viewer/components/SingleLineSearch.mxml diff --git a/src/widgets/HeaderController/HeaderControllerWidget.mxml b/src/widgets/HeaderController/HeaderControllerWidget.mxml index 2a88653..572f610 100644 --- a/src/widgets/HeaderController/HeaderControllerWidget.mxml +++ b/src/widgets/HeaderController/HeaderControllerWidget.mxml @@ -22,7 +22,6 @@ xmlns:viewer="com.esri.viewer.*" xmlns:components="com.esri.viewer.components.*" xmlns:HeaderController="widgets.HeaderController.*" - xmlns:singleLineSearch="com.esri.viewer.components.singleLineSearch.*" width="100%" borderSkin="{null}" creationComplete="creationCompleteHandler(event)" @@ -477,10 +476,10 @@
    - + Date: Fri, 15 Feb 2013 09:54:46 -0800 Subject: [PATCH 107/178] Add support for using default locator (vs. automatically enabling it if no locators provided). --- .../esri/viewer/components/SingleLineSearch.mxml | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/com/esri/viewer/components/SingleLineSearch.mxml b/src/com/esri/viewer/components/SingleLineSearch.mxml index fa1dc7b..7398438 100644 --- a/src/com/esri/viewer/components/SingleLineSearch.mxml +++ b/src/com/esri/viewer/components/SingleLineSearch.mxml @@ -177,14 +177,14 @@ return; } - if (!configXML.geocoding.locator[0]) + if (configXML.geocoding.@usedefaultlocator[0] != "false") { geocoder.useDefaultLocator = true; - locatorServicesConfigured = true; - return; } + //backwards compatibility - else if (configXML.geocoding.locator.hasSimpleContent()) + if (configXML.geocoding.locator[0] + && configXML.geocoding.locator.hasSimpleContent()) { //convert URL to locator XML var url:String = configXML.geocoding.locator[0]; @@ -193,6 +193,12 @@ } var locatorsToConfigure:int = configXML.geocoding.locator.length(); + if (locatorsToConfigure == 0) + { + locatorServicesConfigured = true; + return; + } + var locatorServices:Array = []; var locatorService:GeocoderLocatorService; From fa5eda20cdf76ee805021c831da93369c641d60e Mon Sep 17 00:00:00 2001 From: Sarthak Datt Date: Tue, 26 Feb 2013 14:56:13 -0800 Subject: [PATCH 108/178] _dynamicServiceLayerInfos is populated before setting visible layers --- .../viewer/components/toc/tocClasses/TocMapLayerItem.as | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/com/esri/viewer/components/toc/tocClasses/TocMapLayerItem.as b/src/com/esri/viewer/components/toc/tocClasses/TocMapLayerItem.as index 591a777..ded886b 100644 --- a/src/com/esri/viewer/components/toc/tocClasses/TocMapLayerItem.as +++ b/src/com/esri/viewer/components/toc/tocClasses/TocMapLayerItem.as @@ -423,15 +423,14 @@ public class TocMapLayerItem extends TocItem else if (layer is ArcGISDynamicMapServiceLayer) { var arcGISDynamicMapServiceLayer:ArcGISDynamicMapServiceLayer = ArcGISDynamicMapServiceLayer(layer); + _dynamicMapServiceLayerInfos = arcGISDynamicMapServiceLayer.dynamicLayerInfos ? arcGISDynamicMapServiceLayer.dynamicLayerInfos : arcGISDynamicMapServiceLayer.layerInfos; if (!arcGISDynamicMapServiceLayer.visibleLayers) { var visLayers:Array = getActualVisibleLayers(MapServiceUtil.getVisibleSubLayers(_dynamicMapServiceLayerInfos), _dynamicMapServiceLayerInfos); arcGISDynamicMapServiceLayer.visibleLayers = new ArrayCollection(visLayers); } - arcGISDynamicMapServiceLayer.visibleLayers.addEventListener(CollectionEvent.COLLECTION_CHANGE, visibleLayersChangeHandler); - - _visibleLayersChangeWatcher = ChangeWatcher.watch(arcGISDynamicMapServiceLayer, "visibleLayers", visibleLayersChange); - _dynamicMapServiceLayerInfos = arcGISDynamicMapServiceLayer.dynamicLayerInfos ? arcGISDynamicMapServiceLayer.dynamicLayerInfos : arcGISDynamicMapServiceLayer.layerInfos; + arcGISDynamicMapServiceLayer.visibleLayers.addEventListener(CollectionEvent.COLLECTION_CHANGE, visibleLayersChangeHandler); + _visibleLayersChangeWatcher = ChangeWatcher.watch(arcGISDynamicMapServiceLayer, "visibleLayers", visibleLayersChange); if (_isVisibleLayersSet) { layerInfos = []; From a58c05eff7c05dc4af92ff40e566a6a8d45c0a54 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Tue, 26 Feb 2013 16:15:43 -0800 Subject: [PATCH 109/178] Update event handlers used to process search result selection. --- src/com/esri/viewer/components/SingleLineSearch.mxml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/com/esri/viewer/components/SingleLineSearch.mxml b/src/com/esri/viewer/components/SingleLineSearch.mxml index 7398438..060ca6a 100644 --- a/src/com/esri/viewer/components/SingleLineSearch.mxml +++ b/src/com/esri/viewer/components/SingleLineSearch.mxml @@ -501,9 +501,9 @@ map.infoWindow.show(point); } - protected function geocoder_searchCompleteHandler(event:GeocoderEvent):void + protected function geocoder_resultSelectedHandler(event:GeocoderEvent):void { - projectToMapSpatialReferenceAndShowResultOnMap(event.searchResult); + projectToMapSpatialReferenceAndShowResultOnMap(event.result); } private function projectToMapSpatialReferenceAndShowResultOnMap(searchResult:GeocoderSearchResult):void @@ -733,7 +733,8 @@ left="0" right="0" top="0" bottom="0" fault="geocoder_faultHandler(event)" map="{map}" - searchComplete="geocoder_searchCompleteHandler(event)" + resultAutoSelected="geocoder_resultSelectedHandler(event)" + resultSelected="geocoder_resultSelectedHandler(event)" skinClass="com.esri.ags.skins.GeocoderSkin" useDefaultLocator="false"/> From 1704a208f6ddcff135bb1e6c423f03d346f29004 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Tue, 26 Feb 2013 16:17:06 -0800 Subject: [PATCH 110/178] Clean up SingleLineSearch. --- .../viewer/components/SingleLineSearch.mxml | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/com/esri/viewer/components/SingleLineSearch.mxml b/src/com/esri/viewer/components/SingleLineSearch.mxml index 060ca6a..2eddbfe 100644 --- a/src/com/esri/viewer/components/SingleLineSearch.mxml +++ b/src/com/esri/viewer/components/SingleLineSearch.mxml @@ -19,12 +19,11 @@ + xmlns:esri="http://www.esri.com/2008/ags"> - + From 37a958366122fdc267543e4a508cfd8c7ed2fa00 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Wed, 27 Feb 2013 16:00:28 -0800 Subject: [PATCH 111/178] Set default locator's proxy URL (SingleLineSearch). --- src/com/esri/viewer/components/SingleLineSearch.mxml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/com/esri/viewer/components/SingleLineSearch.mxml b/src/com/esri/viewer/components/SingleLineSearch.mxml index 2eddbfe..a1a7d5e 100644 --- a/src/com/esri/viewer/components/SingleLineSearch.mxml +++ b/src/com/esri/viewer/components/SingleLineSearch.mxml @@ -179,6 +179,11 @@ if (configXML.geocoding.@usedefaultlocator[0] != "false") { geocoder.useDefaultLocator = true; + + if (useProxy && configData.proxyUrl) + { + geocoder.defaultLocatorProxyURL = configData.proxyUrl; + } } //backwards compatibility From b9f6d629c094e23e4b120611aed50c8019430c75 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Wed, 27 Feb 2013 16:00:40 -0800 Subject: [PATCH 112/178] Clean up SingleLineSearch. --- src/com/esri/viewer/components/SingleLineSearch.mxml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/com/esri/viewer/components/SingleLineSearch.mxml b/src/com/esri/viewer/components/SingleLineSearch.mxml index a1a7d5e..cee0c2f 100644 --- a/src/com/esri/viewer/components/SingleLineSearch.mxml +++ b/src/com/esri/viewer/components/SingleLineSearch.mxml @@ -120,10 +120,7 @@ { if (configXML) { - if (configXML.useproxy.length() > 0) - { - useProxy = configXML.useproxy == "true"; - } + useProxy = configXML.useproxy[0] == "true"; const configZoomScale:Number = parseFloat(configXML.zoomscale[0]); if (configZoomScale > 0) From fe8f8e0437520314313a5a64a14f9136a5ba0949 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Fri, 1 Mar 2013 10:36:51 -0800 Subject: [PATCH 113/178] Use global proxy URL (SingleLineSearch). * Replace with . --- .../esri/viewer/components/SingleLineSearch.mxml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/com/esri/viewer/components/SingleLineSearch.mxml b/src/com/esri/viewer/components/SingleLineSearch.mxml index cee0c2f..b080669 100644 --- a/src/com/esri/viewer/components/SingleLineSearch.mxml +++ b/src/com/esri/viewer/components/SingleLineSearch.mxml @@ -218,10 +218,10 @@ locatorService.outFields = configOutFields.split(','); } - var locatorServiceProxyURL:String = locatorXML.proxyurl.toString() || configData.proxyUrl; - if (useProxy && locatorServiceProxyURL) + var useLocatorProxy:Boolean = locatorXML.useproxy[0] == "true"; + if (useLocatorProxy && configData.proxyUrl) { - locatorService.proxyURL = locatorServiceProxyURL; + locatorService.proxyURL = configData.proxyUrl; } var singleLineAddressField:String = locatorXML.singlelineaddressfield.toString(); @@ -235,7 +235,7 @@ { const locatorInfoRequest:JSONTask = new JSONTask(); locatorInfoRequest.url = locatorService.url; - if (useProxy && locatorServiceProxyURL) + if (useLocatorProxy && configData.proxyUrl) { locatorInfoRequest.proxyURL = locatorService.proxyURL; } @@ -297,6 +297,7 @@ { var mapService:GeocoderMapService; var mapServices:Array = []; + var useMapServiceProxy:Boolean; var mapServiceProxyURL:String; for each (var searchLayerXML:XML in configXML.searchlayers.searchlayer) @@ -306,11 +307,11 @@ mapService.url = searchLayerXML.url.toString(); mapService.searchFields = searchLayerXML.searchfields.toString().split(","); mapService.name = searchLayerXML.name.toString(); - mapServiceProxyURL = searchLayerXML.proxyurl.toString() || configData.proxyUrl; + useMapServiceProxy = searchLayerXML.useproxy[0] == "true"; - if (useProxy && mapServiceProxyURL) + if (useMapServiceProxy && configData.proxyUrl) { - mapService.proxyURL = mapServiceProxyURL; + mapService.proxyURL = configData.proxyUrl; } mapServices.push(mapService); From e58978572f60d10d8c2da6b56c5fa47cf1920b05 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Fri, 1 Mar 2013 12:59:56 -0800 Subject: [PATCH 114/178] Update SingleLineSearch to use new Geocoder properties. --- .../viewer/components/SingleLineSearch.mxml | 213 ++++++++---------- 1 file changed, 90 insertions(+), 123 deletions(-) diff --git a/src/com/esri/viewer/components/SingleLineSearch.mxml b/src/com/esri/viewer/components/SingleLineSearch.mxml index b080669..7da7dd3 100644 --- a/src/com/esri/viewer/components/SingleLineSearch.mxml +++ b/src/com/esri/viewer/components/SingleLineSearch.mxml @@ -24,7 +24,7 @@ 0) { zoomScale = configZoomScale; } - //backwards compatibility - const configMinScore:Number = parseFloat(configXML.minscore[0]) || parseFloat(configXML.geocoding.minscore[0]); + const configMinScore:Number = parseFloat(configXML.minscore[0]); geocoder.minScore = (configMinScore > 0) ? configMinScore : 40; geocoder.autoComplete = configXML.autocomplete != "false"; @@ -159,166 +155,138 @@ configureResultSymbols(); configureResultGraphic(); - configureLocatorServices(); + configureLocator(); configureMapServices(); } } - private function configureLocatorServices():void + private function configureLocator():void { - var locatorServicesEnabled:Boolean = (configXML.geocoding.@enabled[0] != "false"); - if (!locatorServicesEnabled) + var locatorDisabled:Boolean = (configXML.usemapservicesonly[0] == "true"); + if (locatorDisabled) { + geocoder.url = null; locatorServicesConfigured = true; return; } - if (configXML.geocoding.@usedefaultlocator[0] != "false") + var locatorURL:String = configXML.url.toString(); + if (locatorURL) { - geocoder.useDefaultLocator = true; - - if (useProxy && configData.proxyUrl) - { - geocoder.defaultLocatorProxyURL = configData.proxyUrl; - } + geocoder.url = locatorURL; } - //backwards compatibility - if (configXML.geocoding.locator[0] - && configXML.geocoding.locator.hasSimpleContent()) + var useProxy:Boolean = configXML.useproxy[0] == "true"; + if (useProxy && configData.proxyUrl) { - //convert URL to locator XML - var url:String = configXML.geocoding.locator[0]; - delete configXML.geocoding.locator[0]; - configXML.geocoding.appendChild({url}); + geocoder.proxyURL = configData.proxyUrl; } - var locatorsToConfigure:int = configXML.geocoding.locator.length(); - if (locatorsToConfigure == 0) - { - locatorServicesConfigured = true; - return; - } + geocoder.locatorOptions = parseLocatorOptions(configXML.locatoroptions[0]); - var locatorServices:Array = []; - var locatorService:GeocoderLocatorService; + var hasUserDefinedLocatorWithMissingSingleLineAddressField:Boolean = + locatorURL && !geocoder.locatorOptions.singleLineAddressFieldName; - for each (var locatorXML:XML in configXML.geocoding.locator) + if (hasUserDefinedLocatorWithMissingSingleLineAddressField) { - locatorService = new GeocoderLocatorService(); - locatorService.url = locatorXML.url.toString(); - locatorService.name = locatorXML.name.toString(); - locatorService.sourceCountry = locatorXML.sourcecountry.toString(); - locatorService.prefix = locatorXML.prefix.toString(); - locatorService.suffix = locatorXML.suffix.toString(); - - var configOutFields:String = locatorXML.outfields.toString(); - if (configOutFields) + const locatorInfoRequest:JSONTask = new JSONTask(); + locatorInfoRequest.url = locatorURL; + if (useProxy && configData.proxyUrl) { - locatorService.outFields = configOutFields.split(','); + locatorInfoRequest.proxyURL = configData.proxyUrl; } - var useLocatorProxy:Boolean = locatorXML.useproxy[0] == "true"; - if (useLocatorProxy && configData.proxyUrl) - { - locatorService.proxyURL = configData.proxyUrl; - } + var urlVars:URLVariables = new URLVariables(); + urlVars.f = "json"; - var singleLineAddressField:String = locatorXML.singlelineaddressfield.toString(); - if (singleLineAddressField) - { - locatorService.singleLineAddressFieldName = singleLineAddressField; - locatorServices.push(locatorService); - locatorProcessed(); - } - else + locatorInfoRequest.execute(urlVars, + new AsyncResponder(locatorInfoRequest_resultHandler, + locatorInfoRequest_faultHandler)); + + function locatorInfoRequest_resultHandler(locatorInfo:Object, token:Object = null):void { - const locatorInfoRequest:JSONTask = new JSONTask(); - locatorInfoRequest.url = locatorService.url; - if (useLocatorProxy && configData.proxyUrl) + if (locatorInfo.singleLineAddressField) { - locatorInfoRequest.proxyURL = locatorService.proxyURL; + geocoder.locatorOptions.singleLineAddressFieldName = locatorInfo.singleLineAddressField.name; } - - var urlVars:URLVariables = new URLVariables(); - urlVars.f = "json"; - - locatorInfoRequest.execute(urlVars, - new AsyncResponder(locatorInfoRequest_resultHandler, - locatorInfoRequest_faultHandler, - locatorService)); - - function locatorInfoRequest_resultHandler(locatorInfo:Object, locatorService:GeocoderLocatorService):void + else { - if (locatorInfo.singleLineAddressField) - { - locatorService.singleLineAddressFieldName = locatorInfo.singleLineAddressField.name; - } - else - { - showError(hostBaseWidget.getDefaultString("singleLineGeocodingNotSupportedError"), SINGLE_LINE_SEARCH); - } - - locatorServices.push(locatorService); - locatorProcessed(); + showError(hostBaseWidget.getDefaultString("singleLineGeocodingNotSupportedError"), SINGLE_LINE_SEARCH); } - function locatorInfoRequest_faultHandler(fault:Fault, locatorService:GeocoderLocatorService):void - { - const errorMessage:String = hostBaseWidget.getDefaultString("locatorServiceConnectionError", - locatorService.url, - ErrorMessageUtil.getKnownErrorCauseMessage(fault), - ErrorMessageUtil.makeHTMLSafe(fault.toString())); - showError(errorMessage, SINGLE_LINE_SEARCH); - locatorProcessed(); - } + locatorServicesConfigured = true; } - function locatorProcessed():void + function locatorInfoRequest_faultHandler(fault:Fault, token:Object = null):void { - locatorsToConfigure--; - if (locatorsToConfigure == 0) - { - geocoder.locatorServices = locatorServices; - locatorServicesConfigured = true; - } + const errorMessage:String = hostBaseWidget.getDefaultString("locatorServiceConnectionError", + locatorInfoRequest.url, + ErrorMessageUtil.getKnownErrorCauseMessage(fault), + ErrorMessageUtil.makeHTMLSafe(fault.toString())); + showError(errorMessage, SINGLE_LINE_SEARCH); + locatorServicesConfigured = true; } } + else + { + locatorServicesConfigured = true; + } } - private function configureMapServices():void + private function parseLocatorOptions(locatorOptionsXML:XML):GeocoderLocatorOptions { - var mapServicesEnabled:Boolean = - configXML.searchlayers.@enabled[0] != "false" && configXML.searchlayers[0] != null; + var locatorOptions:GeocoderLocatorOptions = new GeocoderLocatorOptions(); - if (mapServicesEnabled) + if (locatorOptionsXML) { - if (configXML.searchlayers.length() > 0) + locatorOptions.name = locatorOptionsXML.name.toString(); + locatorOptions.sourceCountry = locatorOptionsXML.sourcecountry.toString(); + locatorOptions.prefix = locatorOptionsXML.prefix.toString(); + locatorOptions.suffix = locatorOptionsXML.suffix.toString(); + + var configOutFields:String = locatorOptionsXML.outfields.toString(); + if (configOutFields) { - var mapService:GeocoderMapService; - var mapServices:Array = []; - var useMapServiceProxy:Boolean; - var mapServiceProxyURL:String; + locatorOptions.outFields = configOutFields.split(','); + } - for each (var searchLayerXML:XML in configXML.searchlayers.searchlayer) + var singleLineAddressField:String = locatorOptionsXML.singlelineaddressfield.toString(); + if (singleLineAddressField) + { + locatorOptions.singleLineAddressFieldName = singleLineAddressField; + } + } + + return locatorOptions; + } + + private function configureMapServices():void + { + if (configXML.mapservices.length() > 0) + { + var mapService:GeocoderMapService; + var mapServices:Array = []; + var useMapServiceProxy:Boolean; + var mapServiceProxyURL:String; + + for each (var mapServiceXML:XML in configXML.mapservices.mapservice) + { + mapService = new GeocoderMapService(); + mapService.layerIds = mapServiceXML.layerids.toString().split(","); + mapService.url = mapServiceXML.url.toString(); + mapService.searchFields = mapServiceXML.searchfields.toString().split(","); + mapService.name = mapServiceXML.name.toString(); + useMapServiceProxy = mapServiceXML.useproxy[0] == "true"; + + if (useMapServiceProxy && configData.proxyUrl) { - mapService = new GeocoderMapService(); - mapService.layerIds = searchLayerXML.layerids.toString().split(","); - mapService.url = searchLayerXML.url.toString(); - mapService.searchFields = searchLayerXML.searchfields.toString().split(","); - mapService.name = searchLayerXML.name.toString(); - useMapServiceProxy = searchLayerXML.useproxy[0] == "true"; - - if (useMapServiceProxy && configData.proxyUrl) - { - mapService.proxyURL = configData.proxyUrl; - } - - mapServices.push(mapService); + mapService.proxyURL = configData.proxyUrl; } - geocoder.mapServices = mapServices; + mapServices.push(mapService); } + + geocoder.mapServices = mapServices; } mapServicesConfigured = true; @@ -736,6 +704,5 @@ fault="geocoder_faultHandler(event)" map="{map}" resultAutoSelected="geocoder_resultSelectedHandler(event)" - resultSelected="geocoder_resultSelectedHandler(event)" - useDefaultLocator="false"/> + resultSelected="geocoder_resultSelectedHandler(event)"/> From c7b835d1825f570e3df8bbf98818b391f7ff6708 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Fri, 1 Mar 2013 13:19:00 -0800 Subject: [PATCH 115/178] Add method for migrating SingleLineSearch config. --- .../viewer/components/SingleLineSearch.mxml | 61 ++++++++++++++++++- .../HeaderControllerWidget.mxml | 6 +- 2 files changed, 64 insertions(+), 3 deletions(-) diff --git a/src/com/esri/viewer/components/SingleLineSearch.mxml b/src/com/esri/viewer/components/SingleLineSearch.mxml index 7da7dd3..bf0cbfa 100644 --- a/src/com/esri/viewer/components/SingleLineSearch.mxml +++ b/src/com/esri/viewer/components/SingleLineSearch.mxml @@ -108,13 +108,72 @@ _hostBaseWidget = value; if (_hostBaseWidget) { - configXML = _hostBaseWidget.configXML.search[0]; + configXML = ensureLatestConfig(_hostBaseWidget.configXML.search[0] + || _hostBaseWidget.configXML.geocoder[0]); configData = _hostBaseWidget.configData; map = _hostBaseWidget.map; init(); } } + private function ensureLatestConfig(configXML:XML):XML + { + if (configXML.name() == "search") + { + configXML.setName("geocoder"); + + var geocodingXML:XML = configXML.geocoding[0]; + if (geocodingXML) + { + var geocoderEnabled:Boolean = geocodingXML.@enabled != "false"; + if (geocoderEnabled) + { + var locatorURL:String = geocodingXML.locator[0]; + if (locatorURL) + { + configXML.appendChild({locatorURL}); + } + } + else + { + configXML.appendChild(true); + } + + var minScore:Number = parseFloat(geocodingXML.minscore[0]); + if (!isNaN(minScore)) + { + configXML.appendChild({minScore}); + } + + delete configXML.geocoding[0]; + } + + var searchLayersXML:XML = configXML.searchlayers[0]; + if (searchLayersXML) + { + var searchLayersEnabled:Boolean = searchLayersXML.@enabled != "false"; + + if (searchLayersEnabled) + { + searchLayersXML.setName("mapservices"); + + for each (var searchLayerXML:XML in searchLayersXML.searchlayer) + { + searchLayerXML.setName("mapservice"); + } + + delete searchLayersXML.@enabled; + } + else + { + delete configXML.searchlayers; + } + } + } + + return configXML; + } + private function init():void { if (configXML) diff --git a/src/widgets/HeaderController/HeaderControllerWidget.mxml b/src/widgets/HeaderController/HeaderControllerWidget.mxml index 572f610..138b991 100644 --- a/src/widgets/HeaderController/HeaderControllerWidget.mxml +++ b/src/widgets/HeaderController/HeaderControllerWidget.mxml @@ -119,8 +119,10 @@ { if (configXML) { - const shouldEnableSearch:Boolean = (configXML.search.@visible[0] == "true") - || (configXML.search[0] && !configXML.search.@visible[0]); + var searchConfig:XML = configXML.geocoder[0] || configXML.search[0]; + + const shouldEnableSearch:Boolean = (searchConfig.@visible[0] == "true") + || (searchConfig[0] && !searchConfig.@visible[0]); if (shouldEnableSearch) { singleLineSearch.hostBaseWidget = this; From 150ec1488ee71c30211c4c33019c3d212fc03c7a Mon Sep 17 00:00:00 2001 From: jcfranco Date: Fri, 1 Mar 2013 13:48:08 -0800 Subject: [PATCH 116/178] Rename SingleLineSearch to GeocoderComponent. --- .../{SingleLineSearch.mxml => GeocoderComponent.mxml} | 0 src/widgets/HeaderController/HeaderControllerWidget.mxml | 8 ++++---- 2 files changed, 4 insertions(+), 4 deletions(-) rename src/com/esri/viewer/components/{SingleLineSearch.mxml => GeocoderComponent.mxml} (100%) diff --git a/src/com/esri/viewer/components/SingleLineSearch.mxml b/src/com/esri/viewer/components/GeocoderComponent.mxml similarity index 100% rename from src/com/esri/viewer/components/SingleLineSearch.mxml rename to src/com/esri/viewer/components/GeocoderComponent.mxml diff --git a/src/widgets/HeaderController/HeaderControllerWidget.mxml b/src/widgets/HeaderController/HeaderControllerWidget.mxml index 138b991..348776c 100644 --- a/src/widgets/HeaderController/HeaderControllerWidget.mxml +++ b/src/widgets/HeaderController/HeaderControllerWidget.mxml @@ -478,10 +478,10 @@ - + Date: Fri, 1 Mar 2013 16:01:16 -0800 Subject: [PATCH 117/178] Update HeaderControllerWidget config with latest geocoder structure. --- src/widgets/HeaderController/HeaderControllerWidget.xml | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/widgets/HeaderController/HeaderControllerWidget.xml b/src/widgets/HeaderController/HeaderControllerWidget.xml index 025fc67..8b6191c 100644 --- a/src/widgets/HeaderController/HeaderControllerWidget.xml +++ b/src/widgets/HeaderController/HeaderControllerWidget.xml @@ -1,10 +1,7 @@ - - - http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer - - + + From 860e193e56855d9b7df0849a17875ca4247a0aa7 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Fri, 1 Mar 2013 16:01:40 -0800 Subject: [PATCH 118/178] Fix issue caused by missing . --- src/widgets/HeaderController/HeaderControllerWidget.mxml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/widgets/HeaderController/HeaderControllerWidget.mxml b/src/widgets/HeaderController/HeaderControllerWidget.mxml index 348776c..fa65790 100644 --- a/src/widgets/HeaderController/HeaderControllerWidget.mxml +++ b/src/widgets/HeaderController/HeaderControllerWidget.mxml @@ -121,8 +121,7 @@ { var searchConfig:XML = configXML.geocoder[0] || configXML.search[0]; - const shouldEnableSearch:Boolean = (searchConfig.@visible[0] == "true") - || (searchConfig[0] && !searchConfig.@visible[0]); + const shouldEnableSearch:Boolean = searchConfig && (searchConfig.@visible[0] != "false"); if (shouldEnableSearch) { singleLineSearch.hostBaseWidget = this; From 7ff6a22d47ecb8a44138ff5eaace81d5862615fb Mon Sep 17 00:00:00 2001 From: jcfranco Date: Fri, 1 Mar 2013 16:02:26 -0800 Subject: [PATCH 119/178] Clean up. --- src/widgets/HeaderController/HeaderControllerWidget.mxml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/widgets/HeaderController/HeaderControllerWidget.mxml b/src/widgets/HeaderController/HeaderControllerWidget.mxml index fa65790..4fe2ef4 100644 --- a/src/widgets/HeaderController/HeaderControllerWidget.mxml +++ b/src/widgets/HeaderController/HeaderControllerWidget.mxml @@ -119,10 +119,10 @@ { if (configXML) { - var searchConfig:XML = configXML.geocoder[0] || configXML.search[0]; + var geocoderXML:XML = configXML.geocoder[0] || configXML.search[0]; - const shouldEnableSearch:Boolean = searchConfig && (searchConfig.@visible[0] != "false"); - if (shouldEnableSearch) + const shouldEnableGeocoder:Boolean = geocoderXML && (geocoderXML.@visible[0] != "false"); + if (shouldEnableGeocoder) { singleLineSearch.hostBaseWidget = this; singleLineSearch.includeInLayout = true; From 98a8ca31b3ec3288baf79070b884d2bd09a6a3b2 Mon Sep 17 00:00:00 2001 From: Bjorn Svensson Date: Tue, 26 Feb 2013 11:26:46 -0800 Subject: [PATCH 120/178] Updating name in Hebrew --- locale/he_IL/ViewerStrings.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/locale/he_IL/ViewerStrings.properties b/locale/he_IL/ViewerStrings.properties index d1be892..92ed427 100644 --- a/locale/he_IL/ViewerStrings.properties +++ b/locale/he_IL/ViewerStrings.properties @@ -1,6 +1,6 @@ -contextMenuText=אודות צפיין ArcGIS ל- Flex... +contextMenuText=אודות ArcGIS Viewer for Flex... aboutText=אפליקציה זו משתמשת ב - ArcGIS Viewer for Flex version 3.1. aboutLearnMoreBtn=לימוד נוסף aboutCloseBtn=סגור From 37575d77233f7b605d8bef4b7441fe600512fb0b Mon Sep 17 00:00:00 2001 From: Bjorn Svensson Date: Fri, 1 Mar 2013 16:18:57 -0800 Subject: [PATCH 121/178] Remove example excludelayer tags --- src/widgets/LayerList/LayerListWidget.xml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/widgets/LayerList/LayerListWidget.xml b/src/widgets/LayerList/LayerListWidget.xml index dd0371d..228ce96 100644 --- a/src/widgets/LayerList/LayerListWidget.xml +++ b/src/widgets/LayerList/LayerListWidget.xml @@ -1,7 +1,5 @@ - - Europe - Pirates + + + + 0) + { + var locatorDisabled:Boolean = (configXML.geocoderoptions.usemapservicesonly[0] == "true"); + if (locatorDisabled) + { + directions.locatorURL = null; + } + + var geocoderOptionsXML:XMLList = configXML.geocoderoptions as XMLList; + var directionsGeocoderOptions:DirectionsGeocoderOptions = new DirectionsGeocoderOptions; + + const configMinScore:Number = parseFloat(geocoderOptionsXML.minscore[0]); + directionsGeocoderOptions.minScore = (configMinScore > 0) ? configMinScore : 40; + + directionsGeocoderOptions.autoComplete = geocoderOptionsXML.autocomplete != "false"; + + const configMaxLocations:int = parseInt(geocoderOptionsXML.maxlocations[0]) + if (!isNaN(configMaxLocations) && configMaxLocations > 0) + { + directionsGeocoderOptions.maxLocations = configMaxLocations; + } + + const configMinChars:int = parseInt(geocoderOptionsXML.minchars[0]) + if (configMinChars && configMinChars > 0) + { + directionsGeocoderOptions.minCharacters = configMinChars; + } + + const configSearchDelay:int = parseInt(geocoderOptionsXML.searchdelay[0]) + if (configSearchDelay && configSearchDelay > 0) + { + directionsGeocoderOptions.searchDelay = configSearchDelay; + } + if (geocoderOptionsXML.locatoroptions.length() > 0 && !locatorDisabled) + { + directionsGeocoderOptions.locatorOptions = parseLocatorOptions(configXML.locatoroptions[0]); + } + if (geocoderOptionsXML.mapservices.length() > 0) + { + directionsGeocoderOptions.mapServices = configureMapServices(geocoderOptionsXML.mapservices); + } + + directions.geocoderOptions = directionsGeocoderOptions; + } + + // route options + if (configXML.routeoptions.length() > 0) + { + var directionsRouteOptions:DirectionsRouteOptions = new DirectionsRouteOptions; + var routeOptionsXML:XMLList = configXML.routeoptions; + + var directionsLanguage:String = routeOptionsXML.directionslanguage.toString(); + directionsRouteOptions.directionsLanguage = directionsLanguage || resourceManager.localeChain[0]; + + var directionsLengthUnits:String = routeOptionsXML.directionslengthunits.toString(); + if (directionsLengthUnits) + { + directionsRouteOptions.directionsLengthUnits = toDirectionsLengthUnits(directionsLengthUnits); + } + + var directionsOutputType:String = routeOptionsXML.directionsoutputtype.toString(); + if (directionsOutputType) + { + directionsRouteOptions.directionsOutputType = toDirectionsOutputType(directionsOutputType); + } + + directions.routeOptions = directionsRouteOptions; + } + } + AppEvent.addListener(AppEvent.DATA_PUBLISH, sharedDataUpdated); + } + + private function parseLocatorOptions(locatorOptionsXML:XML):GeocoderLocatorOptions + { + var locatorOptions:GeocoderLocatorOptions = new GeocoderLocatorOptions(); + + locatorOptions.name = locatorOptionsXML.name.toString(); + locatorOptions.sourceCountry = locatorOptionsXML.sourcecountry.toString(); + locatorOptions.prefix = locatorOptionsXML.prefix.toString(); + locatorOptions.suffix = locatorOptionsXML.suffix.toString(); + + var configOutFields:String = locatorOptionsXML.outfields.toString(); + if (configOutFields) + { + locatorOptions.outFields = configOutFields.split(','); + } + + var singleLineAddressField:String = locatorOptionsXML.singlelineaddressfield.toString(); + if (singleLineAddressField) + { + locatorOptions.singleLineAddressFieldName = singleLineAddressField; + } + + return locatorOptions; + } + + private function configureMapServices(mapServicesXMLList:XMLList):Array + { + var mapServices:Array = []; + + var mapService:GeocoderMapService; + var useMapServiceProxy:Boolean; + var mapServiceProxyURL:String; + + for each (var mapServiceXML:XML in mapServicesXMLList.mapservice) + { + mapService = new GeocoderMapService(); + mapService.layerIds = mapServiceXML.layerids.toString().split(","); + mapService.url = mapServiceXML.url.toString(); + mapService.searchFields = mapServiceXML.searchfields.toString().split(","); + mapService.name = mapServiceXML.name.toString(); + useMapServiceProxy = mapServiceXML.useproxy[0] == "true"; + + if (useMapServiceProxy && configData.proxyUrl) + { + mapService.proxyURL = configData.proxyUrl; + } + + mapServices.push(mapService); + } + + return mapServices + } + + private function toDirectionsLengthUnits(lengthUnits:String):String + { + switch (lengthUnits) + { + case "kilometers": + { + return Units.KILOMETERS; + } + case "miles": + default: + { + return Units.MILES; + } + } + } + + private function toDirectionsOutputType(outputType:String):String + { + switch (outputType) + { + case "complete": + { + return "esriDOTComplete"; + } + case "completenoevents": + { + return "esriDOTCompleteNoEvents"; + } + case "instructionsonly": + { + return "esriDOTInstructionsOnly"; + } + case "summaryonly": + { + return "esriDOTSummaryOnly"; + } + case "standard": + default: + { + return "esriDOTStandard"; + } + } + } + + private function sharedDataUpdated(event:AppEvent):void + { + var data:Object = event.data; + if (data.key == "Deactivate_DrawTool") + { + setMapAction(null, null, null, null); + } + } + + private function widgetClosedHandler(event:Event):void + { + directions.clear(); + } + ]]> + + + + + diff --git a/src/widgets/Directions/DirectionsWidget.xml b/src/widgets/Directions/DirectionsWidget.xml new file mode 100644 index 0000000..542d1a3 --- /dev/null +++ b/src/widgets/Directions/DirectionsWidget.xml @@ -0,0 +1,8 @@ + + + + + From 9f0432929eb266e23359d3a8f00a362ffe420843 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Mon, 4 Mar 2013 15:07:14 -0800 Subject: [PATCH 135/178] Fix subdomain parsing typo. --- src/com/esri/viewer/managers/ConfigManager.as | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/esri/viewer/managers/ConfigManager.as b/src/com/esri/viewer/managers/ConfigManager.as index b08f0a5..a08447c 100644 --- a/src/com/esri/viewer/managers/ConfigManager.as +++ b/src/com/esri/viewer/managers/ConfigManager.as @@ -1209,7 +1209,7 @@ public class ConfigManager extends EventDispatcher } if (webTiledLayer.subDomains) { - lyrXML.@subdomains = webTiledLayer.displayLevels.join(); + lyrXML.@subdomains = webTiledLayer.subDomains.join(); } } else if (layer is WMSLayer) From f255d9be410a957d0cf3d447be11e8af81e07982 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Mon, 4 Mar 2013 15:08:09 -0800 Subject: [PATCH 136/178] Remove non-applicable display level parsing. --- src/com/esri/viewer/managers/ConfigManager.as | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/com/esri/viewer/managers/ConfigManager.as b/src/com/esri/viewer/managers/ConfigManager.as index a08447c..008a01b 100644 --- a/src/com/esri/viewer/managers/ConfigManager.as +++ b/src/com/esri/viewer/managers/ConfigManager.as @@ -1186,10 +1186,6 @@ public class ConfigManager extends EventDispatcher visible={veLyr.visible} alpha={veLyr.alpha} style={veLyr.mapStyle}/>; - if (veLyr.displayLevels) - { - lyrXML.@displaylevels = veLyr.displayLevels.join(); - } } else if (layer is WebTiledLayer) { @@ -1203,10 +1199,6 @@ public class ConfigManager extends EventDispatcher { lyrXML.@copyright = webTiledLayer.copyright; } - if (webTiledLayer.displayLevels) - { - lyrXML.@displaylevels = webTiledLayer.displayLevels.join(); - } if (webTiledLayer.subDomains) { lyrXML.@subdomains = webTiledLayer.subDomains.join(); From 36ab5fcfab6ba7cd82cf39b2f4476648650872c0 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Mon, 4 Mar 2013 15:23:41 -0800 Subject: [PATCH 137/178] Remove unnecessary symbol to XML conversion. --- src/com/esri/viewer/managers/ConfigManager.as | 101 ------------------ 1 file changed, 101 deletions(-) diff --git a/src/com/esri/viewer/managers/ConfigManager.as b/src/com/esri/viewer/managers/ConfigManager.as index 008a01b..3b4506b 100644 --- a/src/com/esri/viewer/managers/ConfigManager.as +++ b/src/com/esri/viewer/managers/ConfigManager.as @@ -32,11 +32,6 @@ import com.esri.ags.layers.WebTiledLayer; import com.esri.ags.layers.supportClasses.Field; import com.esri.ags.layers.supportClasses.LOD; import com.esri.ags.portal.WebMapUtil; -import com.esri.ags.symbols.PictureMarkerSymbol; -import com.esri.ags.symbols.SimpleFillSymbol; -import com.esri.ags.symbols.SimpleLineSymbol; -import com.esri.ags.symbols.SimpleMarkerSymbol; -import com.esri.ags.symbols.Symbol; import com.esri.ags.tasks.GeometryServiceSingleton; import com.esri.ags.virtualearth.VETiledLayer; import com.esri.viewer.AppEvent; @@ -1148,18 +1143,6 @@ public class ConfigManager extends EventDispatcher { lyrXML.@serviceurl = geoRSSLayer.serviceURL; } - if (geoRSSLayer.pointSymbol) - { - lyrXML.appendChild(getPointSymbolXML(geoRSSLayer.pointSymbol)); - } - if (geoRSSLayer.polylineSymbol) - { - lyrXML.appendChild(getLineSymbolXML(geoRSSLayer.polylineSymbol)); - } - if (geoRSSLayer.polygonSymbol) - { - lyrXML.appendChild(getPolygonSymbolXML(geoRSSLayer.polygonSymbol)); - } } else if (layer is KMLLayer) { @@ -1236,90 +1219,6 @@ public class ConfigManager extends EventDispatcher return lyrXML; } - private function getPointSymbolXML(pointSymbol:Symbol):XML - { - var pointSymbolXML:XML; - - if (pointSymbol) - { - if (pointSymbol is SimpleMarkerSymbol) - { - var sms:SimpleMarkerSymbol = pointSymbol as SimpleMarkerSymbol; - - pointSymbolXML = ; - - if (sms.outline) - { - pointSymbolXML.appendChild(); - } - } - else if (pointSymbol is PictureMarkerSymbol) - { - var pms:PictureMarkerSymbol = pointSymbol as PictureMarkerSymbol; - - pointSymbolXML = ; - } - } - - return pointSymbolXML; - } - - private function getLineSymbolXML(polylineSymbol:Symbol):XML - { - var polylineSymbolXML:XML; - - if (polylineSymbol) - { - var sls:SimpleLineSymbol = polylineSymbol as SimpleLineSymbol; - - polylineSymbolXML = ; - } - - return polylineSymbolXML; - } - - private function getPolygonSymbolXML(polygonSymbol:Symbol):XML - { - var polygonSymbolXML:XML; - - if (polygonSymbol) - { - var sfs:SimpleFillSymbol = polygonSymbol as SimpleFillSymbol; - - polygonSymbolXML = ; - - if (sfs.outline) - { - polygonSymbolXML.appendChild(); - } - } - - return polygonSymbolXML; - } - private function appendPortalBasemaps(portalURL:String):void { var basemapAppender:PortalBasemapAppender = new PortalBasemapAppender(portalURL, configData); From 6bf47ac029639814ce3ff4b61982d800b4fcf548 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Mon, 4 Mar 2013 15:34:02 -0800 Subject: [PATCH 138/178] Fix typo that prevented parsing PictureMarkerSymbols. --- src/com/esri/viewer/utils/LayerObjectUtil.as | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/esri/viewer/utils/LayerObjectUtil.as b/src/com/esri/viewer/utils/LayerObjectUtil.as index b1e6f13..9fb84be 100644 --- a/src/com/esri/viewer/utils/LayerObjectUtil.as +++ b/src/com/esri/viewer/utils/LayerObjectUtil.as @@ -202,7 +202,7 @@ public class LayerObjectUtil { markerSymbol = symbolParser.parseSimpleMarkerSymbol(obj.simplemarkersymbol[0]); } - else if (obj.simplemarkersymbol[0]) + else if (obj.picturemarkersymbol[0]) { markerSymbol = symbolParser.parsePictureMarkerSymbol(obj.picturemarkersymbol[0]); } From 7332ce81d2e17f64efe700e3db088bbb86ac1223 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Mon, 4 Mar 2013 15:38:06 -0800 Subject: [PATCH 139/178] Add Base64 source property to . --- src/com/esri/viewer/utils/SymbolParser.as | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/com/esri/viewer/utils/SymbolParser.as b/src/com/esri/viewer/utils/SymbolParser.as index ec597a5..024fab8 100644 --- a/src/com/esri/viewer/utils/SymbolParser.as +++ b/src/com/esri/viewer/utils/SymbolParser.as @@ -22,6 +22,10 @@ import com.esri.ags.symbols.SimpleLineSymbol; import com.esri.ags.symbols.SimpleMarkerSymbol; import com.esri.ags.symbols.Symbol; +import flash.utils.ByteArray; + +import mx.utils.Base64Decoder; + public class SymbolParser { public function parseSymbol(symbolXML:XML):Symbol @@ -138,7 +142,18 @@ public class SymbolParser public function parsePictureMarkerSymbol(pmsXML:XML):PictureMarkerSymbol { - const url:String = pmsXML.@url; + const url:String = pmsXML.@url[0]; + const source:String = pmsXML.@source[0]; + + var sourceData:ByteArray; + if (source) + { + var decoder:Base64Decoder = new Base64Decoder(); + decoder.decode(source); + sourceData = decoder.toByteArray(); + } + + const pictureSource:Object = sourceData ? sourceData : url; const parsedHeight:Number = parseFloat(pmsXML.@height[0]); const parsedWidth:Number = parseFloat(pmsXML.@width[0]); @@ -152,7 +167,7 @@ public class SymbolParser const yOffset:Number = !isNaN(parsedYOffset) ? parsedYOffset : 0; const angle:Number = !isNaN(parsedAngle) ? parsedAngle : 0; - return new PictureMarkerSymbol(url, width, height, xOffset, yOffset, angle); + return new PictureMarkerSymbol(pictureSource, width, height, xOffset, yOffset, angle); } public function parseSimpleLineSymbol(slsXML:XML):SimpleLineSymbol From 968b2bb6397e6bc8bd65532b75cdf98a3e51a289 Mon Sep 17 00:00:00 2001 From: Sarthak Datt Date: Mon, 4 Mar 2013 16:43:54 -0800 Subject: [PATCH 140/178] Add Directions widget to config-all.xml --- src/config-all.xml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/config-all.xml b/src/config-all.xml index ee1de34..51aaf4a 100644 --- a/src/config-all.xml +++ b/src/config-all.xml @@ -124,9 +124,14 @@ url="widgets/Time/TimeWidget.swf"/> - + + + + From 7f9607aed9bee59b12f236b6503d46df49de3c00 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Mon, 4 Mar 2013 16:51:08 -0800 Subject: [PATCH 141/178] Remove non-applicable service URL parsing. --- src/com/esri/viewer/managers/ConfigManager.as | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/com/esri/viewer/managers/ConfigManager.as b/src/com/esri/viewer/managers/ConfigManager.as index 3b4506b..e48bd7c 100644 --- a/src/com/esri/viewer/managers/ConfigManager.as +++ b/src/com/esri/viewer/managers/ConfigManager.as @@ -1139,10 +1139,6 @@ public class ConfigManager extends EventDispatcher visible={geoRSSLayer.visible} alpha={geoRSSLayer.alpha} url={geoRSSLayer.url}/>; - if (geoRSSLayer.serviceURL) - { - lyrXML.@serviceurl = geoRSSLayer.serviceURL; - } } else if (layer is KMLLayer) { From cc6e04593163e89a802e65968a19418e915aa7fa Mon Sep 17 00:00:00 2001 From: Bjorn Svensson Date: Mon, 4 Mar 2013 16:57:58 -0800 Subject: [PATCH 142/178] Update version.xml for version 3.2 --- src/version.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/version.xml b/src/version.xml index 5d84655..d7377f6 100644 --- a/src/version.xml +++ b/src/version.xml @@ -1,2 +1,2 @@ - + From 617b8c1441db7c5353b72309db00a2d25d0e55e7 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Mon, 4 Mar 2013 16:08:50 -0800 Subject: [PATCH 143/178] Add support for Layer#showInLegend and ArcGISTiledMapServiceLayer#showInLegendHiddenLayers/ArcGISDynamicMapServiceLayer#showInLegendHiddenLayers. --- src/com/esri/viewer/managers/ConfigManager.as | 24 ++++++++++++++++++ .../managers/LayerCreationProperties.as | 4 +++ src/com/esri/viewer/managers/LayerCreator.as | 25 +++++++++++++++++++ src/com/esri/viewer/utils/LayerObjectUtil.as | 10 ++++++++ 4 files changed, 63 insertions(+) diff --git a/src/com/esri/viewer/managers/ConfigManager.as b/src/com/esri/viewer/managers/ConfigManager.as index e48bd7c..0eca815 100644 --- a/src/com/esri/viewer/managers/ConfigManager.as +++ b/src/com/esri/viewer/managers/ConfigManager.as @@ -1049,8 +1049,13 @@ public class ConfigManager extends EventDispatcher type="dynamic" visible={dynLyr.visible} alpha={dynLyr.alpha} + showinlegend={dynLyr.showInLegend} useproxy={dynLyr.proxyURL != null} url={dynLyr.url}/>; + if (dynLyr.showInLegend && dynLyr.showInLegendHiddenLayers) + { + lyrXML.@showinlegendhiddenlayers = dynLyr.showInLegendHiddenLayers.join(); + } if (dynLyr.visibleLayers) { lyrXML.@visiblelayers = dynLyr.visibleLayers.toArray().join(); @@ -1063,6 +1068,7 @@ public class ConfigManager extends EventDispatcher type="image" visible={imgLyr.visible} alpha={imgLyr.alpha} + showinlegend={imgLyr.showInLegend} useproxy={imgLyr.proxyURL != null} url={imgLyr.url}/>; if (imgLyr.bandIds) @@ -1076,6 +1082,7 @@ public class ConfigManager extends EventDispatcher lyrXML = ; @@ -1083,6 +1090,14 @@ public class ConfigManager extends EventDispatcher { lyrXML.@displaylevels = tiledLyr.displayLevels.join(); } + if (tiledLyr.showInLegend && tiledLyr.showInLegendHiddenLayers) + { + lyrXML.@showinlegendhiddenlayers = tiledLyr.showInLegendHiddenLayers.join(); + } + else + { + lyrXML.@showinlegend = tiledLyr.showInLegend; + } } else if (layer is CSVLayer) { @@ -1090,6 +1105,7 @@ public class ConfigManager extends EventDispatcher lyrXML = @@ -1123,6 +1140,7 @@ public class ConfigManager extends EventDispatcher { lyrXML = ; @@ -1145,6 +1164,7 @@ public class ConfigManager extends EventDispatcher var kmlLayer:KMLLayer = layer as KMLLayer; lyrXML = ; @@ -1155,6 +1175,7 @@ public class ConfigManager extends EventDispatcher lyrXML = ; } else if (layer is VETiledLayer) @@ -1162,6 +1183,7 @@ public class ConfigManager extends EventDispatcher var veLyr:VETiledLayer = layer as VETiledLayer; lyrXML = ; @@ -1171,6 +1193,7 @@ public class ConfigManager extends EventDispatcher var webTiledLayer:WebTiledLayer = layer as WebTiledLayer; lyrXML = ; @@ -1188,6 +1211,7 @@ public class ConfigManager extends EventDispatcher var wmsLayer:WMSLayer = layer as WMSLayer; lyrXML = 0) { setInterval(dynLayer.refresh, layerCreationProperties.autoRefresh * 1000); @@ -208,6 +222,7 @@ public class LayerCreator featureLayer.useMapTime = layerCreationProperties.useMapTime; featureLayer.clusterer = layerCreationProperties.clusterer; featureLayer.disableClientCaching = layerCreationProperties.disableClientCaching; + featureLayer.showInLegend = layerCreationProperties.showInLegend; if (layerCreationProperties.renderer) { featureLayer.renderer = layerCreationProperties.renderer; @@ -263,6 +278,7 @@ public class LayerCreator veTiledLayer.key = layerCreationProperties.bingMapKey; veTiledLayer.visible = layerCreationProperties.visible; veTiledLayer.alpha = layerCreationProperties.alpha; + veTiledLayer.showInLegend = layerCreationProperties.showInLegend; if (layerCreationProperties.style) { veTiledLayer.mapStyle = layerCreationProperties.style; @@ -302,6 +318,7 @@ public class LayerCreator imgLayer.noData = layerCreationProperties.noData; imgLayer.useMapTime = layerCreationProperties.useMapTime; imgLayer.disableClientCaching = layerCreationProperties.disableClientCaching; + imgLayer.showInLegend = layerCreationProperties.showInLegend; if (layerCreationProperties.imageFormat) { imgLayer.imageFormat = layerCreationProperties.imageFormat; @@ -339,6 +356,7 @@ public class LayerCreator arcimsLayer.visible = layerCreationProperties.visible; arcimsLayer.serviceHost = layerCreationProperties.serviceHost; arcimsLayer.serviceName = layerCreationProperties.serviceName; + arcimsLayer.showInLegend = layerCreationProperties.showInLegend; if (layerCreationProperties.autoRefresh > 0) { setInterval(arcimsLayer.refresh, layerCreationProperties.autoRefresh * 1000); @@ -381,6 +399,7 @@ public class LayerCreator wmsLayer.name = layerCreationProperties.label; wmsLayer.visible = layerCreationProperties.visible; wmsLayer.disableClientCaching = layerCreationProperties.disableClientCaching; + wmsLayer.showInLegend = layerCreationProperties.showInLegend; if (layerCreationProperties.wkid) { wmsLayer.spatialReference = new SpatialReference(layerCreationProperties.wkid); @@ -442,6 +461,7 @@ public class LayerCreator wmtsLayer.id = layerCreationProperties.label; wmtsLayer.name = layerCreationProperties.label; wmtsLayer.visible = layerCreationProperties.visible; + wmtsLayer.showInLegend = layerCreationProperties.showInLegend; if (layerCreationProperties.imageFormat) { wmtsLayer.imageFormat = layerCreationProperties.imageFormat; @@ -485,6 +505,7 @@ public class LayerCreator osmLayer.id = layerCreationProperties.label; osmLayer.name = layerCreationProperties.label; osmLayer.visible = layerCreationProperties.visible; + osmLayer.showInLegend = layerCreationProperties.showInLegend; if (!isNaN(layerCreationProperties.minScale)) { osmLayer.minScale = layerCreationProperties.minScale; @@ -505,6 +526,7 @@ public class LayerCreator kmlLayer.id = layerCreationProperties.label; kmlLayer.name = layerCreationProperties.label; kmlLayer.disableClientCaching = layerCreationProperties.disableClientCaching; + kmlLayer.showInLegend = layerCreationProperties.showInLegend; if (layerCreationProperties.serviceURL) { kmlLayer.serviceURL = layerCreationProperties.serviceURL; @@ -531,6 +553,7 @@ public class LayerCreator csvLayer.name = layerCreationProperties.label; csvLayer.latitudeFieldName = layerCreationProperties.latitudeFieldName; csvLayer.longitudeFieldName = layerCreationProperties.longitudeFieldName; + csvLayer.showInLegend = layerCreationProperties.showInLegend; if (layerCreationProperties.renderer) { csvLayer.renderer = layerCreationProperties.renderer; @@ -578,6 +601,7 @@ public class LayerCreator geoRSSLayer.id = layerCreationProperties.label; geoRSSLayer.name = layerCreationProperties.label; geoRSSLayer.disableClientCaching = layerCreationProperties.disableClientCaching; + geoRSSLayer.showInLegend = layerCreationProperties.showInLegend; geoRSSLayer.visible = layerCreationProperties.visible; if (layerCreationProperties.serviceURL) @@ -617,6 +641,7 @@ public class LayerCreator webTiledLayer.name = layerCreationProperties.label; webTiledLayer.visible = layerCreationProperties.visible; webTiledLayer.copyright = layerCreationProperties.copyright; + webTiledLayer.showInLegend = layerCreationProperties.showInLegend; if (layerCreationProperties.displayLevels) { diff --git a/src/com/esri/viewer/utils/LayerObjectUtil.as b/src/com/esri/viewer/utils/LayerObjectUtil.as index 9fb84be..a4a08f8 100644 --- a/src/com/esri/viewer/utils/LayerObjectUtil.as +++ b/src/com/esri/viewer/utils/LayerObjectUtil.as @@ -161,6 +161,14 @@ public class LayerObjectUtil } var culture:String = obj.@culture[0] ? obj.@culture : ""; + var showInLegend:Boolean = true; + if (obj.@showinlegend[0]) + { + showInLegend = obj.showinlegend == "true"; + } + + var showInLegendHiddenLayers:String = obj.@showinlegendhiddenlayers; + // arcims layer var serviceHost:String = obj.@servicehost[0] ? obj.@servicehost : ""; var serviceName:String = obj.@servicename[0] ? obj.@servicename : ""; @@ -258,6 +266,8 @@ public class LayerObjectUtil serviceName: serviceName, serviceMode: serviceMode, serviceURL: serviceURL, + showInLegend: showInLegend, + showInLegendHiddenLayers: showInLegendHiddenLayers, skipGetCapabilities: skipGetCapabilities, sourceFields: sourceFields, style: style, From 94e709d9b6d7aeb4cd626e2dd1316acbcec7c4c2 Mon Sep 17 00:00:00 2001 From: Bjorn Svensson Date: Tue, 5 Mar 2013 11:13:53 -0800 Subject: [PATCH 144/178] Prepare for version 3.2 release --- locale/en_US/ViewerStrings.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/locale/en_US/ViewerStrings.properties b/locale/en_US/ViewerStrings.properties index c941ce7..02314fc 100644 --- a/locale/en_US/ViewerStrings.properties +++ b/locale/en_US/ViewerStrings.properties @@ -1,7 +1,7 @@ # -- UI related messages for the context menu on the map, in addition to messages from the api -- # contextMenuText=About ArcGIS Viewer for Flex... -aboutText=This application is using ArcGIS Viewer for Flex version 3.1. +aboutText=This application is using ArcGIS Viewer for Flex version 3.2. aboutLearnMoreBtn=Learn more aboutCloseBtn=Close From 97c63eb118b626c76f20cbb6a1c92082c2c1a290 Mon Sep 17 00:00:00 2001 From: Bjorn Svensson Date: Wed, 6 Mar 2013 11:26:49 -0800 Subject: [PATCH 145/178] Update version number in localized properties files --- locale/ar/ViewerStrings.properties | 2 +- locale/da_DK/ViewerStrings.properties | 2 +- locale/de_DE/ViewerStrings.properties | 2 +- locale/es_ES/ViewerStrings.properties | 2 +- locale/fr_FR/ViewerStrings.properties | 2 +- locale/he_IL/ViewerStrings.properties | 2 +- locale/it_IT/ViewerStrings.properties | 2 +- locale/ja_JP/ViewerStrings.properties | 2 +- locale/ko_KR/ViewerStrings.properties | 2 +- locale/lv_LV/ViewerStrings.properties | 2 +- locale/nb_NO/ViewerStrings.properties | 2 +- locale/nl_NL/ViewerStrings.properties | 2 +- locale/pt_BR/ViewerStrings.properties | 2 +- locale/ro_RO/ViewerStrings.properties | 2 +- locale/ru_RU/ViewerStrings.properties | 2 +- locale/sv_SE/ViewerStrings.properties | 2 +- 16 files changed, 16 insertions(+), 16 deletions(-) diff --git a/locale/ar/ViewerStrings.properties b/locale/ar/ViewerStrings.properties index 561e46e..02e6b3a 100644 --- a/locale/ar/ViewerStrings.properties +++ b/locale/ar/ViewerStrings.properties @@ -1,7 +1,7 @@ contextMenuText=حول ArcGIS Viewer for Flex... -aboutText=هذا التطبيق يستخدم الإصدار 3.1 من ArcGIS Viewer for Flex. +aboutText=هذا التطبيق يستخدم الإصدار 3.2 من ArcGIS Viewer for Flex. aboutLearnMoreBtn=تعلم المزيد aboutCloseBtn=إغلاق diff --git a/locale/da_DK/ViewerStrings.properties b/locale/da_DK/ViewerStrings.properties index f59e30f..dda70c7 100644 --- a/locale/da_DK/ViewerStrings.properties +++ b/locale/da_DK/ViewerStrings.properties @@ -1,7 +1,7 @@ contextMenuText=Om ArcGIS Viewer for Flex... -aboutText=Denne applikation bruger ArcGIS Viewer for Flex version 3.1. +aboutText=Denne applikation bruger ArcGIS Viewer for Flex version 3.2. aboutLearnMoreBtn=Lær mere aboutCloseBtn=Luk diff --git a/locale/de_DE/ViewerStrings.properties b/locale/de_DE/ViewerStrings.properties index 2683045..884b438 100644 --- a/locale/de_DE/ViewerStrings.properties +++ b/locale/de_DE/ViewerStrings.properties @@ -1,7 +1,7 @@ contextMenuText=Info zu ArcGIS Viewer for Flex... -aboutText=Diese Anwendung verwendet die Version 3.1 von ArcGIS Viewer for Flex. +aboutText=Diese Anwendung verwendet die Version 3.2 von ArcGIS Viewer for Flex. aboutLearnMoreBtn=Weitere Informationen aboutCloseBtn=Schließen diff --git a/locale/es_ES/ViewerStrings.properties b/locale/es_ES/ViewerStrings.properties index d9c3aef..c142ce3 100644 --- a/locale/es_ES/ViewerStrings.properties +++ b/locale/es_ES/ViewerStrings.properties @@ -1,7 +1,7 @@ contextMenuText=Acerca de ArcGIS Viewer for Flex... -aboutText=Esta aplicación utiliza ArcGIS Viewer for Flex versión 3.1. +aboutText=Esta aplicación utiliza ArcGIS Viewer for Flex versión 3.2. aboutLearnMoreBtn=Más información aboutCloseBtn=Cerrar diff --git a/locale/fr_FR/ViewerStrings.properties b/locale/fr_FR/ViewerStrings.properties index d112a13..5816e1a 100644 --- a/locale/fr_FR/ViewerStrings.properties +++ b/locale/fr_FR/ViewerStrings.properties @@ -1,7 +1,7 @@ contextMenuText=A propos d’ArcGIS Viewer for Flex... -aboutText=Cette application utilise ArcGIS Viewer for Flex version 3.1. +aboutText=Cette application utilise ArcGIS Viewer for Flex version 3.2. aboutLearnMoreBtn=En savoir plus aboutCloseBtn=Fermer diff --git a/locale/he_IL/ViewerStrings.properties b/locale/he_IL/ViewerStrings.properties index 92ed427..0287701 100644 --- a/locale/he_IL/ViewerStrings.properties +++ b/locale/he_IL/ViewerStrings.properties @@ -1,7 +1,7 @@ contextMenuText=אודות ArcGIS Viewer for Flex... -aboutText=אפליקציה זו משתמשת ב - ArcGIS Viewer for Flex version 3.1. +aboutText=This application is using ArcGIS Viewer for Flex version 3.2. aboutLearnMoreBtn=לימוד נוסף aboutCloseBtn=סגור diff --git a/locale/it_IT/ViewerStrings.properties b/locale/it_IT/ViewerStrings.properties index cf4dc0d..b80c1f9 100644 --- a/locale/it_IT/ViewerStrings.properties +++ b/locale/it_IT/ViewerStrings.properties @@ -1,7 +1,7 @@ contextMenuText=Informazioni su ArcGIS Viewer for Flex... -aboutText=Questa applicazione utilizza ArcGIS Viewer for Flex versione 3.1. +aboutText=Questa applicazione utilizza ArcGIS Viewer per Flex versione 3.1. aboutLearnMoreBtn=Ulteriori informazioni aboutCloseBtn=Chiudi diff --git a/locale/ja_JP/ViewerStrings.properties b/locale/ja_JP/ViewerStrings.properties index 02bed7f..5c0a0af 100644 --- a/locale/ja_JP/ViewerStrings.properties +++ b/locale/ja_JP/ViewerStrings.properties @@ -1,7 +1,7 @@ contextMenuText=ArcGIS Viewer for Flex について... -aboutText=このアプリケーションには ArcGIS Viewer for Flex version 3.1 が使用されています。 +aboutText=このアプリケーションには ArcGIS Viewer for Flex version 3.2 が使用されています。 aboutLearnMoreBtn=詳細 aboutCloseBtn=閉じる diff --git a/locale/ko_KR/ViewerStrings.properties b/locale/ko_KR/ViewerStrings.properties index 52b1b52..c43e395 100644 --- a/locale/ko_KR/ViewerStrings.properties +++ b/locale/ko_KR/ViewerStrings.properties @@ -1,7 +1,7 @@ contextMenuText=ArcGIS Viewer for Flex 정보... -aboutText=이 응용프로그램은 ArcGIS Viewer for Flex 버전 3.1을 사용 중입니다. +aboutText=이 응용프로그램에서는 ArcGIS Viewer for Flex 버전 3.2를 사용합니다. aboutLearnMoreBtn=자세히 보기 aboutCloseBtn=닫기 diff --git a/locale/lv_LV/ViewerStrings.properties b/locale/lv_LV/ViewerStrings.properties index 0967e61..fd6dfe9 100644 --- a/locale/lv_LV/ViewerStrings.properties +++ b/locale/lv_LV/ViewerStrings.properties @@ -1,7 +1,7 @@ contextMenuText=Par ArcGIS Viewer for Flex... -aboutText=Šī aplikācija izmanto ArcGIS Viewer for Flex version @VERSION@.\nIzveidošanas datums @BUILD_DATE@. +aboutText=Šī aplikācija izmanto ArcGIS Viewer for Flex versiju 3.2. aboutLearnMoreBtn=Uzziniet vairāk aboutCloseBtn=Aizvērt diff --git a/locale/nb_NO/ViewerStrings.properties b/locale/nb_NO/ViewerStrings.properties index cef8542..92ce772 100644 --- a/locale/nb_NO/ViewerStrings.properties +++ b/locale/nb_NO/ViewerStrings.properties @@ -1,7 +1,7 @@ contextMenuText=Om ArcGIS Viewer for Flex... -aboutText=Dette programmet bruker ArcGIS Viewer for Flex versjon 3.1. +aboutText=Dette programmet bruker ArcGIS Viewer for Flex versjon 3.2. aboutLearnMoreBtn=Lær mer aboutCloseBtn=Lukk diff --git a/locale/nl_NL/ViewerStrings.properties b/locale/nl_NL/ViewerStrings.properties index 22892e2..7238c6b 100644 --- a/locale/nl_NL/ViewerStrings.properties +++ b/locale/nl_NL/ViewerStrings.properties @@ -1,7 +1,7 @@ contextMenuText=Informatie over ArcGIS Viewer for Flex... -aboutText=Deze applicatie maakt gebruik van ArcGIS Viewer for Flex-versie 3.1. +aboutText=Deze applicatie maakt gebruik van ArcGIS Viewer for Flex-versie 3.2. aboutLearnMoreBtn=Meer informatie aboutCloseBtn=Sluiten diff --git a/locale/pt_BR/ViewerStrings.properties b/locale/pt_BR/ViewerStrings.properties index 8def92d..7e7ac09 100644 --- a/locale/pt_BR/ViewerStrings.properties +++ b/locale/pt_BR/ViewerStrings.properties @@ -1,7 +1,7 @@ contextMenuText=Sobre o ArcGIS Viewer for Flex... -aboutText=Este aplicativo utiliza o ArcGIS Viewer for Flex version 3.1. +aboutText=Este aplicativo utiliza o ArcGIS Viewer for Flex version 3.2. aboutLearnMoreBtn=Obter mais informações aboutCloseBtn=Fechar diff --git a/locale/ro_RO/ViewerStrings.properties b/locale/ro_RO/ViewerStrings.properties index 585feb7..92bf477 100644 --- a/locale/ro_RO/ViewerStrings.properties +++ b/locale/ro_RO/ViewerStrings.properties @@ -1,7 +1,7 @@ contextMenuText=Despre ArcGIS Viewer for Flex... -aboutText=Această aplicaţie utilizează ArcGIS Viewer for Flex versiunea 3.1. +aboutText=Această aplicaţie utilizează ArcGIS Viewer for Flex versiunea 3.2. aboutLearnMoreBtn=Aflaţi mai multe aboutCloseBtn=Închidere diff --git a/locale/ru_RU/ViewerStrings.properties b/locale/ru_RU/ViewerStrings.properties index 953a2ed..1134346 100644 --- a/locale/ru_RU/ViewerStrings.properties +++ b/locale/ru_RU/ViewerStrings.properties @@ -1,7 +1,7 @@ contextMenuText=О программе ArcGIS Viewer for Flex... -aboutText=Это приложение использует ArcGIS Viewer for Flex версии 3.1. +aboutText=Это приложение использует ArcGIS Viewer for Flex версии 3.2. aboutLearnMoreBtn=См. Справку aboutCloseBtn=Закрыть diff --git a/locale/sv_SE/ViewerStrings.properties b/locale/sv_SE/ViewerStrings.properties index ad464c6..d6d5804 100644 --- a/locale/sv_SE/ViewerStrings.properties +++ b/locale/sv_SE/ViewerStrings.properties @@ -1,7 +1,7 @@ contextMenuText=Om ArcGIS Viewer for Flex... -aboutText=Det här programmet använder ArcGIS Viewer for Flex version 3.1. +aboutText=Det här programmet använder ArcGIS Viewer for Flex version 3.2. aboutLearnMoreBtn=Läs mer aboutCloseBtn=Stäng From 9969de51c44806399c52edbdb5a9e32195003640 Mon Sep 17 00:00:00 2001 From: Bjorn Svensson Date: Wed, 6 Mar 2013 11:27:31 -0800 Subject: [PATCH 146/178] Update version number, and translations, in localized properties files --- locale/et_EE/ViewerStrings.properties | 20 ++++++++-------- locale/lt_LT/ViewerStrings.properties | 34 +++++++++++++-------------- locale/pl_PL/ViewerStrings.properties | 4 ++-- locale/pt_PT/ViewerStrings.properties | 4 ++-- locale/zh_CN/ViewerStrings.properties | 4 ++-- 5 files changed, 33 insertions(+), 33 deletions(-) diff --git a/locale/et_EE/ViewerStrings.properties b/locale/et_EE/ViewerStrings.properties index fb1bd9b..dbf5022 100644 --- a/locale/et_EE/ViewerStrings.properties +++ b/locale/et_EE/ViewerStrings.properties @@ -1,13 +1,13 @@ contextMenuText=ArcGIS Viewer for Flex rakendusest... -aboutText=See rakendus on loodud ArcGIS Viewer for Flex versioonil 3.1. +aboutText=See rakendus on loodud ArcGIS Viewer for Flex versioonil 3.2. aboutLearnMoreBtn=Loe lähemalt -aboutCloseBtn=Sule +aboutCloseBtn=Sulge -close=Sule +close=Sulge minimize=Minimeeri @@ -58,7 +58,7 @@ unitsSquareYards=Ruutjardi unitsSquareYardsAbbr=yd² -tocMapLayerZoomToLabel=Suumi juurde +tocMapLayerZoomToLabel=Suumi tocMapLayerTransparencyLabel=Läbipaistvus tocMapLayerOpaqueLabel=Läbipaistmatu tocMapLayerTransparentLabel=Läbipaistvus @@ -87,11 +87,11 @@ couldNotConnectToPortal=Ei õnnestunud portaaliga ühendust saada. couldNotQueryPortal=Ei õnnestunud portaali pärida. couldNotQueryPortalItems=Ei õnnestunud portaali sisu pärida. serverMissingCrossDomain=GIS serveril puudub crossdomain fail. -serviceIsInaccessible=Teenuse ei eksisteeri või pole kättesaadav -unauthorizedAccess=Teil puudub ligipääs teenusele ligipääsuks -unknownErrorCause=Teadmata vea põhjus. -resourceAccessDenied=Teil puuduvad õigused sellele ressursile ligipääsuks -signInAborted=Sisselogimine katkestatud +serviceIsInaccessible=Teenus ei eksisteeri või pole kättesaadav. +unauthorizedAccess=Teil puudub ligipääs teenusele ligipääsuks. +unknownErrorCause=Tundmatu vea põhjus. +resourceAccessDenied=Teil puuduvad õigused sellele ressursile ligipääsuks. +signInAborted=Sisselogimine on katkestatud. invalidWidgetId=Vale widgetId: {0} printTaskExecutionError=Probleem printimise ülesandega:\n\n{0} gpServiceConnectionError=Ei saa geotöötluse teenusega ühendust:\n{0}\n\n{1}\n{2} @@ -205,7 +205,7 @@ textBoldTooltip=Bold textItalicLabel=I textItalicTooltip=Italic textUnderlineLabel=U -textUnderlineTooltip=Underline +textUnderlineTooltip=Allajoonitud lineAlphaLabel=Alfa lineColorLabel=Joone värv lineStyleLabel=Stiil diff --git a/locale/lt_LT/ViewerStrings.properties b/locale/lt_LT/ViewerStrings.properties index ad658f7..e9dffe4 100644 --- a/locale/lt_LT/ViewerStrings.properties +++ b/locale/lt_LT/ViewerStrings.properties @@ -1,7 +1,7 @@ contextMenuText=Apie ArcGIS Viewer for Flex... -aboutText=Aplikacija sukurta naudojant ArcGIS Viewer for Flex versiją 3.1. +aboutText=Aplikacija sukurta naudojant ArcGIS Viewer for Flex versiją 3.2. aboutLearnMoreBtn=Plačiau aboutCloseBtn=Uždaryti @@ -26,9 +26,9 @@ loadingLabel=Įkeliama... okLabel=Gerai errorLabel=Klaida problemLabel=Klaida -noFeatures=Objektų nerasta. +noFeatures=Elementų nerasta. resultsLabel=Rezultatai -saveLabel=Išsaugoti +saveLabel=Įrašyti unitsFeet=Pėdos @@ -87,16 +87,16 @@ couldNotConnectToPortal=Nepavyko prisijungti prie Portalo. couldNotQueryPortal=Nepavyko įvykdyti užklausos portale. couldNotQueryPortalItems=Nepavyko įvykdyti portalo elementų užklausos. serverMissingCrossDomain=GIS Serveryje trūksta crossdomain failo. -serviceIsInaccessible=Servisas nepasiekiamas arba jo nėra. -unauthorizedAccess=Jums nesuteikta teisė naudoti šį servisą. +serviceIsInaccessible=Paslauga nepasiekiama arba jos nėra. +unauthorizedAccess=Jums nesuteikta teisė naudoti šią paslaugą. unknownErrorCause=Nežinoma klaidos priežastis. resourceAccessDenied=Jums nesuteikta teisė naudotis. signInAborted=Prisijungimas atšauktas. invalidWidgetId=Netinkamas widgetId: {0} printTaskExecutionError=Klaida vykdant spausdinimą:\n\n{0} -gpServiceConnectionError=Nepavyko prisijungti prie GP serviso:\n{0}\n\n{1}\n{2} -locatorServiceConnectionError=Nepavyko prisijungti prie lokatoriaus serviso:\n{0}\n\n{1}\n{2} -singleLineGeocodingNotSupportedError=Lokatoriaus servisas nepalaiko vieno lauko geokodavimo. +gpServiceConnectionError=Nepavyko prisijungti prie GP paslaugos:\n{0}\n\n{1}\n{2} +locatorServiceConnectionError=Nepavyko prisijungti prie lokatoriaus paslaugos:\n{0}\n\n{1}\n{2} +singleLineGeocodingNotSupportedError=Lokatoriaus paslauga nepalaiko geokodavimo iš vieno lauko. rssFeedParsingError=Klaida apdorojant RSS giją. {0} httpResponseNotXMLError=HTTP atsakas nėra XML. unknownRSSFeedTypeError=Nepavyko nustatyti RSS gijos tipo. @@ -105,8 +105,8 @@ unableToDetermineGPExecutionType=Nepavyko nustatyti geoduomenų apdorojimo vykdy projectionError=Klaida projektuojant geometriją: {0} cannotRunTaskExecutionTypeUnknownError=Nepavyko įvykdyti užduoties: nežinomas vykdymo tipas. layerDataRetrievalError=Nepavyko gauti sluoksnio duomenų. -couldNotDeleteFeature=Nepavyko ištrinti objekto -couldNotUpdateFeatureError=Nepavyko pakeisti objekto, grąžinta ankstesnė reikšmė +couldNotDeleteFeature=Nepavyko ištrinti elemento +couldNotUpdateFeatureError=Nepavyko pakeisti elemento, grąžinta ankstesnė reikšmė cannotDisplayResult=Rezultato negalima parodyti žemėlapyje. uploadSecurityError=Saugumo klaida įkeliant failą: {0} uploadIOError=Įvesties/išvesties klaida įkeliant failą: {0} @@ -246,17 +246,17 @@ extractButtonLabel=Eksportuoti step1ErrorLabel=Prašome nurodyti norimą teritoriją. step2ErrorLabel=Prašome pasirinkti norimus sluoksnius. emptyResultsLabel=Užduotis įvykdyta, bet nieko negauta. -saveDataFileLabel=Duomenų failas sukurtas. Ar norite išsaugoti? +saveDataFileLabel=Duomenų failas sukurtas. Ar norite įrašyti? attributesLabel=Atributai attachmentsLabel=Priedai relatedRecordsLabel=Susieti įrašai -featureLayerOutOfScaleText=Elementų sluoksnis nepasiekiamas šiame mastelyje +featureLayerOutOfScaleText=Elementų sluoksnis šiame mastelyje nerodomas showAttachmentsText=Priedai showRelatedRecordsText=Susieti įrašai showAttributesText=Atgal -selectTemplateText=Pasirinkite +selectTemplateText=Pasirinkite šabloną noEditableLayersText=Nėra redaguojamų sluoksnių. noCreateCapabilityLayersText=Nėra galimybės kurti objektus nė viename sluoksnyje. layerNotSupportingAttachmentsText=Šio sluoksnio objektai negali turėti priedų @@ -304,7 +304,7 @@ filterTitleBarTooltip=Filtruoti rezultatus showallTitleBarTooltip=Rodyti visus filterButtonLabel=Filtras clearButtonLabel=Rodyti visus -featuresFoundLabel=Rasti objektai: {0} +featuresFoundLabel=Rasti elementai: {0} drivingDirectionLabel=Instrukcijos @@ -320,14 +320,14 @@ changeRouteSymbolLabel=Pakeisti maršruto ženklą editRouteLabel=Keisti maršrutą -graphicalTitleBarTooltip=Išrinkimas +graphicalTitleBarTooltip=Išrinkti elementus textTitleBarTooltip=Išrinkti pagal atributus -graphicalsearchLabel=Išrinkti objektus +graphicalsearchLabel=Išrinkti elementus pagal textsearchLabel=Išrinkti pagal atributus layerLabel=Sluoksnis nolayerLabel=Nepasirinktas paieškos sluoksnis searchSubmitLabel=Išrinkti -selectionLabel=Išrinkti objektai: +selectionLabel=Išrinkti elementai: latitudeLabel=Platuma diff --git a/locale/pl_PL/ViewerStrings.properties b/locale/pl_PL/ViewerStrings.properties index dc4564b..a295b82 100644 --- a/locale/pl_PL/ViewerStrings.properties +++ b/locale/pl_PL/ViewerStrings.properties @@ -1,7 +1,7 @@ contextMenuText=O aplikacji ArcGIS Viewer for Flex... -aboutText=Ta aplikacja korzysta z produktu ArcGIS Viewer for Flex w wersji 3.1. +aboutText=Ta aplikacja korzysta z produktu ArcGIS Viewer for Flex w wersji 3.2. aboutLearnMoreBtn=Dowiedz się więcej aboutCloseBtn=Zamknij @@ -308,7 +308,7 @@ featuresFoundLabel=Znalezione obiekty: {0} drivingDirectionLabel=Informacje dla kierowców -routeSubmitLabel=Wyznacz trasę +routeSubmitLabel=Wyznacz kierunki moveUpTooltip=Przesuń w górę moveDownTooltip=Przesuń w dół addLocationTooltip=kliknij obszar na mapie, aby dodać lokalizację diff --git a/locale/pt_PT/ViewerStrings.properties b/locale/pt_PT/ViewerStrings.properties index 2d906ff..f96793b 100644 --- a/locale/pt_PT/ViewerStrings.properties +++ b/locale/pt_PT/ViewerStrings.properties @@ -1,7 +1,7 @@ contextMenuText=Sobre o ArcGIS Viewer for Flex... -aboutText=Esta aplicação utiliza o ArcGIS Viewer for Flex versão 3.1. +aboutText=Esta aplicação utiliza o ArcGIS Viewer for Flex versão 3.2. aboutLearnMoreBtn=Obter mais informações aboutCloseBtn=Fechar @@ -86,7 +86,7 @@ couldNotFetchBasemapData=Não foi possível obter os dados do mapa base:\n{0} couldNotConnectToPortal=Não foi possível ligar ao Portal. couldNotQueryPortal=Não foi possível consultar o portal. couldNotQueryPortalItems=Não foi possível consultar os itens do portal. -serverMissingCrossDomain=O servidor SIG (GIS Server) não tem um ficheiro de crossdomain. +serverMissingCrossDomain=O servidor SIG (GIS Server) não possui um ficheiro crossdomain. serviceIsInaccessible=O serviço não existe ou está inacessível. unauthorizedAccess=Não tem permissões para aceder a este serviço. unknownErrorCause=Causa de erro desconhecida. diff --git a/locale/zh_CN/ViewerStrings.properties b/locale/zh_CN/ViewerStrings.properties index c2d96b6..df19d13 100644 --- a/locale/zh_CN/ViewerStrings.properties +++ b/locale/zh_CN/ViewerStrings.properties @@ -1,7 +1,7 @@ contextMenuText=关于 ArcGIS Viewer for Flex... -aboutText=此应用程序是使用 ArcGIS Viewer for Flex 版本 3.1 构建而成的。 +aboutText=此应用程序是使用 ArcGIS Viewer for Flex 版本 3.2 构建而成的。 aboutLearnMoreBtn=了解更多信息 aboutCloseBtn=关闭 @@ -235,7 +235,7 @@ bookmarkMissingNameLabel=请输入书签的名称。 deleteBookmarkTooltip=删除书签 -descLabel=提取数据并下载 zip 文件 +descLabel=提取数据并保存为 zip 文件 step1Label=1. 选择区域 dataCurrentExtentLabel=1. 将从当前范围提取数据。 step2Label=2. 选择要提取的图层 From 428741ae25eebcb2333b9ad4b15ca43379179674 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Tue, 5 Mar 2013 15:25:52 -0800 Subject: [PATCH 147/178] Update GeocoderComponent to handle latest GeocoderComponent changes. --- src/com/esri/viewer/components/GeocoderComponent.mxml | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/com/esri/viewer/components/GeocoderComponent.mxml b/src/com/esri/viewer/components/GeocoderComponent.mxml index 9a2b6bc..af39119 100644 --- a/src/com/esri/viewer/components/GeocoderComponent.mxml +++ b/src/com/esri/viewer/components/GeocoderComponent.mxml @@ -208,7 +208,6 @@ } geocoder.prompt = configXML.labels.searchprompt[0] || hostBaseWidget.getDefaultString("searchPrompt"); - geocoder.noResultsText = configXML.labels.noresults[0] || hostBaseWidget.getDefaultString("noResultsFoundLabel"); searchResultTitleLabel = configXML.labels.searchresulttitle[0] || hostBaseWidget.getDefaultString("searchResultTitleLabel"); configureResultSymbols(); @@ -762,6 +761,5 @@ left="0" right="0" top="0" bottom="0" fault="geocoder_faultHandler(event)" map="{map}" - resultAutoSelected="geocoder_resultSelectedHandler(event)" resultSelected="geocoder_resultSelectedHandler(event)"/> From 2fc91ba37d60449f029ca5af96644d43e9ad2bda Mon Sep 17 00:00:00 2001 From: jcfranco Date: Tue, 5 Mar 2013 15:27:35 -0800 Subject: [PATCH 148/178] Fix error caused by expecting the config to have main geocoder/search tag. --- src/com/esri/viewer/components/GeocoderComponent.mxml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/esri/viewer/components/GeocoderComponent.mxml b/src/com/esri/viewer/components/GeocoderComponent.mxml index af39119..ed73807 100644 --- a/src/com/esri/viewer/components/GeocoderComponent.mxml +++ b/src/com/esri/viewer/components/GeocoderComponent.mxml @@ -118,7 +118,7 @@ private function ensureLatestConfig(configXML:XML):XML { - if (configXML.name() == "search") + if (configXML && configXML.name() == "search") { configXML.setName("geocoder"); From 722904a40816aeafd0add2c66870ebb7a88d1ab3 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Wed, 6 Mar 2013 13:27:51 -0800 Subject: [PATCH 149/178] Add config option to enable/disable map services. --- src/com/esri/viewer/components/GeocoderComponent.mxml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/com/esri/viewer/components/GeocoderComponent.mxml b/src/com/esri/viewer/components/GeocoderComponent.mxml index ed73807..dfab444 100644 --- a/src/com/esri/viewer/components/GeocoderComponent.mxml +++ b/src/com/esri/viewer/components/GeocoderComponent.mxml @@ -320,7 +320,8 @@ private function configureMapServices():void { - if (configXML.mapservices.length() > 0) + if (configXML.mapservices.length() > 0 + && configXML.mapservices.@enabled != "false") { var mapService:GeocoderMapService; var mapServices:Array = []; From a79eadf04710b12af4059945ebb7ac277a590e80 Mon Sep 17 00:00:00 2001 From: Sarthak Datt Date: Wed, 6 Mar 2013 14:54:07 -0800 Subject: [PATCH 150/178] Add padding to show full result count for arabic --- src/widgets/Search/SearchWidget.mxml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/widgets/Search/SearchWidget.mxml b/src/widgets/Search/SearchWidget.mxml index 3be5c8f..1fc2a91 100644 --- a/src/widgets/Search/SearchWidget.mxml +++ b/src/widgets/Search/SearchWidget.mxml @@ -1136,7 +1136,7 @@ visible="false" visible.resultsList="true"> - + Date: Wed, 6 Mar 2013 14:56:01 -0800 Subject: [PATCH 151/178] unselect draw tool icon when clear is clicked --- src/widgets/DataExtract/DataExtractWidget.mxml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/widgets/DataExtract/DataExtractWidget.mxml b/src/widgets/DataExtract/DataExtractWidget.mxml index 321a704..ae6d402 100644 --- a/src/widgets/DataExtract/DataExtractWidget.mxml +++ b/src/widgets/DataExtract/DataExtractWidget.mxml @@ -468,6 +468,11 @@ private function clear():void { onTurnOnNav(); + if (selectedDrawingIcon) + { + selectedDrawingIcon.filters = []; + selectedDrawingIcon = null; + } graphicsLayer.clear(); } From 2efbc66cff1c0f3c6e3abedfebe504e05f502f21 Mon Sep 17 00:00:00 2001 From: Sarthak Datt Date: Thu, 7 Mar 2013 16:05:02 -0800 Subject: [PATCH 152/178] prevent table options to be hidden when lot of operational layers are added --- .../AttributeTable/AttributeTableWidget.mxml | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/widgets/AttributeTable/AttributeTableWidget.mxml b/src/widgets/AttributeTable/AttributeTableWidget.mxml index 7ec57ec..582cb7d 100644 --- a/src/widgets/AttributeTable/AttributeTableWidget.mxml +++ b/src/widgets/AttributeTable/AttributeTableWidget.mxml @@ -1250,13 +1250,29 @@ featureLayer.clearSelection(); } } + + private function updateTabBar():void + { + if (5 <= viewStack.numChildren) + { + tabBar.percentWidth = 100; + tabBar.right = 150; + } + else + { + tabBar.percentWidth = NaN + tabBar.right = null; + } + } ]]> + left="5" top="5" + childAdd="updateTabBar()" + childRemove="updateTabBar()"/> From 9aead6b432ebd8fbbea2f72cebac853a45ad20fc Mon Sep 17 00:00:00 2001 From: Sarthak Datt Date: Thu, 7 Mar 2013 16:20:10 -0800 Subject: [PATCH 153/178] rename to i_directions --- .../images/{Directions16.png => i_directions.png} | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename src/assets/images/{Directions16.png => i_directions.png} (100%) diff --git a/src/assets/images/Directions16.png b/src/assets/images/i_directions.png similarity index 100% rename from src/assets/images/Directions16.png rename to src/assets/images/i_directions.png From 716e37d083f7b53c142567e42744aed81cb91a9f Mon Sep 17 00:00:00 2001 From: Sarthak Datt Date: Thu, 7 Mar 2013 16:20:57 -0800 Subject: [PATCH 154/178] check for enabled attribute on --- src/widgets/Directions/DirectionsWidget.mxml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/widgets/Directions/DirectionsWidget.mxml b/src/widgets/Directions/DirectionsWidget.mxml index 7a8efdf..7f80468 100644 --- a/src/widgets/Directions/DirectionsWidget.mxml +++ b/src/widgets/Directions/DirectionsWidget.mxml @@ -117,7 +117,7 @@ { directionsGeocoderOptions.locatorOptions = parseLocatorOptions(configXML.locatoroptions[0]); } - if (geocoderOptionsXML.mapservices.length() > 0) + if (geocoderOptionsXML.mapservices.length() > 0 && geocoderOptionsXML.mapservices.@enabled != "false") { directionsGeocoderOptions.mapServices = configureMapServices(geocoderOptionsXML.mapservices); } From 36b934047f863a9c53de230e97dd31254e0b2ee2 Mon Sep 17 00:00:00 2001 From: Bjorn Svensson Date: Thu, 7 Mar 2013 23:23:56 -0800 Subject: [PATCH 155/178] Localize aboutText for Hebrew --- locale/he_IL/ViewerStrings.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/locale/he_IL/ViewerStrings.properties b/locale/he_IL/ViewerStrings.properties index 0287701..2f091cd 100644 --- a/locale/he_IL/ViewerStrings.properties +++ b/locale/he_IL/ViewerStrings.properties @@ -1,7 +1,7 @@ contextMenuText=אודות ArcGIS Viewer for Flex... -aboutText=This application is using ArcGIS Viewer for Flex version 3.2. +aboutText=אפליקציה זו משתמשת ב - ArcGIS Viewer for Flex version 3.2. aboutLearnMoreBtn=לימוד נוסף aboutCloseBtn=סגור From be3ce091229cde46cd3aecb68bad156ced32438b Mon Sep 17 00:00:00 2001 From: Sarthak Datt Date: Fri, 8 Mar 2013 09:24:38 -0800 Subject: [PATCH 156/178] wrap noChartDataToDisplayLabel --- src/widgets/Chart/ChartWidget.mxml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/widgets/Chart/ChartWidget.mxml b/src/widgets/Chart/ChartWidget.mxml index 1a246e0..d107651 100644 --- a/src/widgets/Chart/ChartWidget.mxml +++ b/src/widgets/Chart/ChartWidget.mxml @@ -731,7 +731,9 @@ left="10" includeIn="chart" itemCreationPolicy="immediate"> - Date: Thu, 7 Mar 2013 20:35:30 -0800 Subject: [PATCH 157/178] Set layer min/max scale when converting web map. --- src/com/esri/viewer/managers/ConfigManager.as | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/com/esri/viewer/managers/ConfigManager.as b/src/com/esri/viewer/managers/ConfigManager.as index 0eca815..abd1d36 100644 --- a/src/com/esri/viewer/managers/ConfigManager.as +++ b/src/com/esri/viewer/managers/ConfigManager.as @@ -1049,6 +1049,8 @@ public class ConfigManager extends EventDispatcher type="dynamic" visible={dynLyr.visible} alpha={dynLyr.alpha} + minscale={dynLyr.minScale} + maxscale={dynLyr.maxScale} showinlegend={dynLyr.showInLegend} useproxy={dynLyr.proxyURL != null} url={dynLyr.url}/>; @@ -1068,6 +1070,8 @@ public class ConfigManager extends EventDispatcher type="image" visible={imgLyr.visible} alpha={imgLyr.alpha} + minscale={imgLyr.minScale} + maxscale={imgLyr.maxScale} showinlegend={imgLyr.showInLegend} useproxy={imgLyr.proxyURL != null} url={imgLyr.url}/>; @@ -1082,6 +1086,8 @@ public class ConfigManager extends EventDispatcher lyrXML = } @@ -1142,6 +1152,8 @@ public class ConfigManager extends EventDispatcher type="feature" showinlegend={feaLyr.showInLegend} visible={feaLyr.visible} + minscale={feaLyr.minScale} + maxscale={feaLyr.maxScale} alpha={feaLyr.alpha} mode={feaLyr.mode} useproxy={feaLyr.proxyURL != null} @@ -1156,6 +1168,8 @@ public class ConfigManager extends EventDispatcher type="georss" showinlegend={geoRSSLayer.showInLegend} visible={geoRSSLayer.visible} + minscale={geoRSSLayer.minScale} + maxscale={geoRSSLayer.maxScale} alpha={geoRSSLayer.alpha} url={geoRSSLayer.url}/>; } @@ -1166,6 +1180,8 @@ public class ConfigManager extends EventDispatcher type="kml" showinlegend={kmlLayer.showInLegend} visible={kmlLayer.visible} + minscale={kmlLayer.minScale} + maxscale={kmlLayer.maxScale} alpha={kmlLayer.alpha} url={kmlLayer.url}/>; } @@ -1175,6 +1191,8 @@ public class ConfigManager extends EventDispatcher lyrXML = ; } @@ -1185,6 +1203,8 @@ public class ConfigManager extends EventDispatcher type="bing" showinlegend={veLyr.showInLegend} visible={veLyr.visible} + minscale={veLyr.minScale} + maxscale={veLyr.maxScale} alpha={veLyr.alpha} style={veLyr.mapStyle}/>; } @@ -1195,6 +1215,8 @@ public class ConfigManager extends EventDispatcher type="webtiled" showinlegend={webTiledLayer.showInLegend} visible={webTiledLayer.visible} + minscale={webTiledLayer.minScale} + maxscale={webTiledLayer.maxScale} alpha={webTiledLayer.alpha} url={webTiledLayer.urlTemplate}/>; if (webTiledLayer.copyright) @@ -1213,6 +1235,8 @@ public class ConfigManager extends EventDispatcher type="wms" showinlegend={wmsLayer.showInLegend} visible={wmsLayer.visible} + minscale={wmsLayer.minScale} + maxscale={wmsLayer.maxScale} alpha={wmsLayer.alpha} version={wmsLayer.version} skipgetcapabilities={wmsLayer.skipGetCapabilities} From 81a6ee5a1304af3ae5bd860563a2054bde7be2ff Mon Sep 17 00:00:00 2001 From: jcfranco Date: Wed, 27 Feb 2013 17:25:50 -0800 Subject: [PATCH 158/178] Handle result image layers generically wherever applicable. --- .../Geoprocessing/GeoprocessingWidget.mxml | 66 ++++++++++--------- 1 file changed, 34 insertions(+), 32 deletions(-) diff --git a/src/widgets/Geoprocessing/GeoprocessingWidget.mxml b/src/widgets/Geoprocessing/GeoprocessingWidget.mxml index da89019..c9ada20 100644 --- a/src/widgets/Geoprocessing/GeoprocessingWidget.mxml +++ b/src/widgets/Geoprocessing/GeoprocessingWidget.mxml @@ -39,6 +39,7 @@ import com.esri.ags.geometry.MapPoint; import com.esri.ags.layers.FeatureLayer; import com.esri.ags.layers.GPResultImageLayer; + import com.esri.ags.layers.Layer; import com.esri.ags.layers.supportClasses.ImageParameters; import com.esri.ags.layers.supportClasses.MapImage; import com.esri.ags.renderers.SimpleRenderer; @@ -91,11 +92,11 @@ private var totalProjectedFeatures:int private var asyncResultMap:Dictionary; private var outputLayers:Array; - private var resultImageLayersOnMap:Array; + private var resultLayersOnMap:Array; private var useResultMapServer:Boolean; private var hasResultMapServer:Boolean; private var hasUseAMFBeenSet:Boolean; - private var largestResultImageLayerExtent:Extent; + private var largestResultLayerExtent:Extent; private var graphicEditor:GraphicEditor; private var inputLabel:String; private var outputLabel:String; @@ -603,8 +604,8 @@ { if (hasResultMapServer) { - hideAllResultImageLayers(); - resultImageLayersOnMap = []; + hideAllResultLayers(); + resultLayersOnMap = []; } var outputParams:Array = gpParamHandler.outputParams; @@ -626,10 +627,10 @@ } } - if (resultImageLayersOnMap) + if (resultLayersOnMap) { showOutputFeaturesClearButton(); - extractLargestResultImageLayerExtent(); + extractLargestResultLayerExtent(); } } @@ -648,19 +649,19 @@ } var lastExecutedJob:JobInfo = gp.submitJobLastResult; - var resultImageLayer:GPResultImageLayer = gp.getResultImageLayer(lastExecutedJob.jobId, paramName); + var resultImageLayer:Layer = gp.getResultImageLayer(lastExecutedJob.jobId, paramName); resultImageLayer.id = paramName; resultImageLayer.name = shareResults ? outputParam.label : "hiddenLayer_" + paramName; - resultImageLayersOnMap.push(resultImageLayer); + resultLayersOnMap.push(resultImageLayer); map.addLayer(resultImageLayer); layerOrderer.orderLayers(); } - private function hideAllResultImageLayers():void + private function hideAllResultLayers():void { - for each (var resultImageLayer:GPResultImageLayer in resultImageLayersOnMap) + for each (var resultLayer:Layer in resultLayersOnMap) { - map.removeLayer(resultImageLayer); + map.removeLayer(resultLayer); } } @@ -907,7 +908,7 @@ if (hasResultMapServer) { - hideAllResultImageLayers(); + hideAllResultLayers(); } if (gpParamHandler) @@ -945,7 +946,7 @@ if (hasResultMapServer) { - showAllResultImageLayers(); + showAllResultLayers(); layerOrderer.orderLayers(); } @@ -974,51 +975,52 @@ private function clearResultMapLayers():void { - for each (var resultImageLayer:GPResultImageLayer in resultImageLayersOnMap) + for each (var resultLayer:Layer in resultLayersOnMap) { - map.removeLayer(resultImageLayer); + map.removeLayer(resultLayer); } - resultImageLayersOnMap = null; + resultLayersOnMap = null; } - private function zoomToResultImageLayers():void + private function zoomToResultLayers():void { - map.zoomTo(largestResultImageLayerExtent); + map.zoomTo(largestResultLayerExtent); } - private function extractLargestResultImageLayerExtent():void + private function extractLargestResultLayerExtent():void { - largestResultImageLayerExtent = null; - var remainingResultImages:int = resultImageLayersOnMap.length; + largestResultLayerExtent = null; + var remainingResultLayers:int = resultLayersOnMap.length; var imageParams:ImageParameters = new ImageParameters(); imageParams.imageSpatialReference = map.spatialReference; - for each (var resultImageLayer:GPResultImageLayer in resultImageLayersOnMap) + for each (var resultLayer:Layer in resultLayersOnMap) { + var resultImageLayer:GPResultImageLayer = resultLayer as GPResultImageLayer; gp.getResultImage(resultImageLayer.jobId, resultImageLayer.parameterName, imageParams, new AsyncResponder(resultImageSuccess, resultImageFailure, resultImageLayer)); function resultImageSuccess(paramValue:ParameterValue, resultImageLayer:GPResultImageLayer):void { var resultImage:MapImage = paramValue.value as MapImage; aggregateExtent(resultImage.extent); - remainingResultImages--; - if (remainingResultImages == 0) + remainingResultLayers--; + if (remainingResultLayers == 0) { - zoomToResultImageLayers(); + zoomToResultLayers(); } } function aggregateExtent(extent:Extent):void { - if (largestResultImageLayerExtent) + if (largestResultLayerExtent) { - largestResultImageLayerExtent = extent.union(largestResultImageLayerExtent); + largestResultLayerExtent = extent.union(largestResultLayerExtent); } else { - largestResultImageLayerExtent = extent; + largestResultLayerExtent = extent; } } @@ -1029,13 +1031,13 @@ } } - private function showAllResultImageLayers():void + private function showAllResultLayers():void { - for each (var resultImageLayer:GPResultImageLayer in resultImageLayersOnMap) + for each (var resultLayer:Layer in resultLayersOnMap) { - if (!map.getLayer(resultImageLayer.id)) + if (!map.getLayer(resultLayer.id)) { - map.addLayer(resultImageLayer); + map.addLayer(resultLayer); } } } From 2c952177d605beae445fe08f3452fc06b3e4ce15 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Wed, 27 Feb 2013 17:28:01 -0800 Subject: [PATCH 159/178] Clean up GeoprocessingWidget#extractLargestResultLayerExtent(). * Remove unused token in result images request logic. * Update pending result layers to process when result image request fails. * Rename pending result layers count variable. --- .../Geoprocessing/GeoprocessingWidget.mxml | 25 +++++++++++-------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/src/widgets/Geoprocessing/GeoprocessingWidget.mxml b/src/widgets/Geoprocessing/GeoprocessingWidget.mxml index c9ada20..b2505de 100644 --- a/src/widgets/Geoprocessing/GeoprocessingWidget.mxml +++ b/src/widgets/Geoprocessing/GeoprocessingWidget.mxml @@ -991,7 +991,7 @@ private function extractLargestResultLayerExtent():void { largestResultLayerExtent = null; - var remainingResultLayers:int = resultLayersOnMap.length; + var totalResultLayersToProcess:int = resultLayersOnMap.length; var imageParams:ImageParameters = new ImageParameters(); imageParams.imageSpatialReference = map.spatialReference; @@ -999,17 +999,13 @@ for each (var resultLayer:Layer in resultLayersOnMap) { var resultImageLayer:GPResultImageLayer = resultLayer as GPResultImageLayer; - gp.getResultImage(resultImageLayer.jobId, resultImageLayer.parameterName, imageParams, new AsyncResponder(resultImageSuccess, resultImageFailure, resultImageLayer)); + gp.getResultImage(resultImageLayer.jobId, resultImageLayer.parameterName, imageParams, new AsyncResponder(resultImageSuccess, resultImageFailure)); - function resultImageSuccess(paramValue:ParameterValue, resultImageLayer:GPResultImageLayer):void + function resultImageSuccess(paramValue:ParameterValue, token:Object = null):void { var resultImage:MapImage = paramValue.value as MapImage; aggregateExtent(resultImage.extent); - remainingResultLayers--; - if (remainingResultLayers == 0) - { - zoomToResultLayers(); - } + updateProcessedResultLayers(); } function aggregateExtent(extent:Extent):void @@ -1024,9 +1020,18 @@ } } - function resultImageFailure(fault:Fault, token:Object):void + function updateProcessedResultLayers():void + { + totalResultLayersToProcess--; + if (totalResultLayersToProcess == 0) + { + zoomToResultLayers(); + } + } + + function resultImageFailure(fault:Fault, token:Object = null):void { - //Swallow error + updateProcessedResultLayers(); } } } From 8de595cadc7b57a9ba1ff241ecd21b3a8392a2f8 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Thu, 7 Feb 2013 21:31:54 -0800 Subject: [PATCH 160/178] Handle 10.1+ result map services. --- .../Geoprocessing/GeoprocessingWidget.mxml | 157 +++++++++++++++--- 1 file changed, 135 insertions(+), 22 deletions(-) diff --git a/src/widgets/Geoprocessing/GeoprocessingWidget.mxml b/src/widgets/Geoprocessing/GeoprocessingWidget.mxml index b2505de..632f12b 100644 --- a/src/widgets/Geoprocessing/GeoprocessingWidget.mxml +++ b/src/widgets/Geoprocessing/GeoprocessingWidget.mxml @@ -34,9 +34,11 @@ import com.esri.ags.events.GeoprocessorEvent; import com.esri.ags.events.GraphicEvent; import com.esri.ags.events.GraphicsLayerEvent; + import com.esri.ags.events.LayerEvent; import com.esri.ags.geometry.Extent; import com.esri.ags.geometry.Geometry; import com.esri.ags.geometry.MapPoint; + import com.esri.ags.layers.ArcGISDynamicMapServiceLayer; import com.esri.ags.layers.FeatureLayer; import com.esri.ags.layers.GPResultImageLayer; import com.esri.ags.layers.Layer; @@ -52,6 +54,7 @@ import com.esri.ags.tasks.supportClasses.JobInfo; import com.esri.ags.tasks.supportClasses.ParameterValue; import com.esri.ags.tasks.supportClasses.ProjectParameters; + import com.esri.ags.utils.WebMercatorUtil; import com.esri.viewer.utils.ErrorMessageUtil; import flashx.textLayout.conversion.TextConverter; @@ -104,6 +107,8 @@ private var taskHelpURL:String; private var shareResults:Boolean; + private var version:Number; + [Bindable] private var submitLabel:String; [Bindable] @@ -223,6 +228,8 @@ gp.useAMF = !hasUseAMFBeenSet && (gpServerDescription.currentVersion >= 10.1); hasResultMapServer = useResultMapServer && gpServerDescription.resultMapServerName; + version = gpServerDescription.currentVersion; + gpServerDescription.url = gpServerURL; gpServerDescription.proxyURL = gp.proxyURL; checkIfUploadSupported(gpServerDescription); @@ -439,7 +446,10 @@ const projectParameters:ProjectParameters = new ProjectParameters; projectParameters.geometries = inputGeometryMap[key]; projectParameters.outSpatialReference = inputParam.spatialReference; - GeometryServiceSingleton.instance.project(projectParameters, new AsyncResponder(projectionResultHandler, projectionFaultHandler, inputParam)) + GeometryServiceSingleton.instance.project(projectParameters, + new AsyncResponder(projectionResultHandler, + projectionFaultHandler, + inputParam)); } function projectionResultHandler(geometries:Array, inputParameter:IGPFeatureParameter):void @@ -618,7 +628,14 @@ if (hasResultMapServer && isResultMapServerOutputType(param.type)) { - processResultImageLayer(paramName); + if (version >= 10.1) + { + processResultMapServiceLayer(param as IGPFeatureParameter); + } + else + { + processResultImageLayer(paramName); + } } else { @@ -998,40 +1015,126 @@ for each (var resultLayer:Layer in resultLayersOnMap) { - var resultImageLayer:GPResultImageLayer = resultLayer as GPResultImageLayer; - gp.getResultImage(resultImageLayer.jobId, resultImageLayer.parameterName, imageParams, new AsyncResponder(resultImageSuccess, resultImageFailure)); - - function resultImageSuccess(paramValue:ParameterValue, token:Object = null):void + if (resultLayer is GPResultImageLayer) { - var resultImage:MapImage = paramValue.value as MapImage; - aggregateExtent(resultImage.extent); - updateProcessedResultLayers(); - } + var resultImageLayer:GPResultImageLayer = resultLayer as GPResultImageLayer; + gp.getResultImage(resultImageLayer.jobId, resultImageLayer.parameterName, imageParams, new AsyncResponder(resultImageSuccess, resultImageFailure)); - function aggregateExtent(extent:Extent):void + function resultImageSuccess(paramValue:ParameterValue, token:Object = null):void + { + var resultImage:MapImage = paramValue.value as MapImage; + aggregateExtent(resultImage.extent); + updateProcessedResultLayers(); + } + + function resultImageFailure(fault:Fault, token:Object = null):void + { + updateProcessedResultLayers(); + } + } + else if (resultLayer is ArcGISDynamicMapServiceLayer) { - if (largestResultLayerExtent) + var dynamicLayer:ArcGISDynamicMapServiceLayer = resultLayer as ArcGISDynamicMapServiceLayer; + if (dynamicLayer.loaded) { - largestResultLayerExtent = extent.union(largestResultLayerExtent); + aggregateExtent(dynamicLayer.initialExtent); + updateProcessedResultLayers(); } else { - largestResultLayerExtent = extent; + dynamicLayer.addEventListener(LayerEvent.LOAD, dynamicLayer_loadHandler, false, 0, true); + dynamicLayer.addEventListener(LayerEvent.LOAD_ERROR, dynamicLayer_loadErrorHandler, false, 0, true); + + function dynamicLayer_loadHandler(event:LayerEvent):void + { + dynamicLayer.removeEventListener(LayerEvent.LOAD, dynamicLayer_loadHandler); + dynamicLayer.removeEventListener(LayerEvent.LOAD_ERROR, dynamicLayer_loadErrorHandler); + + if (map.spatialReference.equals(event.layer.spatialReference)) + { + aggregateExtent(dynamicLayer.initialExtent); + updateProcessedResultLayers(); + } + else + { + var layerExtent:Extent = event.layer.initialExtent; + if (!layerExtent) + { + updateProcessedResultLayers(); + return; + } + + if (map.spatialReference.isWebMercator() + && event.layer.spatialReference + && event.layer.spatialReference.wkid == 4326) + { + // clip the layer extent, so it's not going to Infinity; otherwise gives an error + layerExtent.xmin = Math.max(layerExtent.xmin, -180); + layerExtent.xmax = Math.min(layerExtent.xmax, 180); + layerExtent.ymin = Math.max(layerExtent.ymin, -89.99); + layerExtent.ymax = Math.min(layerExtent.ymax, 89.99); + layerExtent = WebMercatorUtil.geographicToWebMercator(layerExtent) as Extent; + aggregateExtent(layerExtent); + } + else if (event.layer.spatialReference + && event.layer.spatialReference.isWebMercator() + && map.spatialReference.wkid == 4326) + { + layerExtent = WebMercatorUtil.webMercatorToGeographic(layerExtent) as Extent; + aggregateExtent(layerExtent); + } + else + { + const projectParameters:ProjectParameters = new ProjectParameters; + projectParameters.geometries = [ layerExtent ]; + projectParameters.outSpatialReference = map.spatialReference + GeometryServiceSingleton.instance.project( + projectParameters, + new AsyncResponder(projectionResult, + projectionFault)); + + function projectionResult(geometries:Array, token:Object = null):void + { + aggregateExtent(geometries[0]); + updateProcessedResultLayers(); + } + + function projectionFault(fault:Fault, token:Object = null):void + { + updateProcessedResultLayers(); + } + } + } + } + + function dynamicLayer_loadErrorHandler(event:LayerEvent):void + { + dynamicLayer.removeEventListener(LayerEvent.LOAD, dynamicLayer_loadHandler); + dynamicLayer.removeEventListener(LayerEvent.LOAD_ERROR, dynamicLayer_loadErrorHandler); + updateProcessedResultLayers(); + } } } + } - function updateProcessedResultLayers():void + function updateProcessedResultLayers():void + { + totalResultLayersToProcess--; + if (totalResultLayersToProcess == 0) { - totalResultLayersToProcess--; - if (totalResultLayersToProcess == 0) - { - zoomToResultLayers(); - } + zoomToResultLayers(); } + } - function resultImageFailure(fault:Fault, token:Object = null):void + function aggregateExtent(extent:Extent):void + { + if (largestResultLayerExtent) { - updateProcessedResultLayers(); + largestResultLayerExtent = extent.union(largestResultLayerExtent); + } + else + { + largestResultLayerExtent = extent; } } } @@ -1051,6 +1154,16 @@ { showError(event.message, event.title); } + + private function processResultMapServiceLayer(param:IGPFeatureParameter):void + { + var lastExecutedJob:JobInfo = gp.submitJobLastResult; + var resultMapServiceLayer:ArcGISDynamicMapServiceLayer = gp.getResultMapServiceLayer(lastExecutedJob.jobId); + resultMapServiceLayer.name = shareResults ? widgetTitle : "hiddenLayer_" + widgetTitle; + resultLayersOnMap.push(resultMapServiceLayer); + map.addLayer(resultMapServiceLayer); + layerOrderer.orderLayers(); + } ]]> From 3cb40a1bbec823ab2d63986d83379711b9d669d7 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Wed, 27 Feb 2013 18:09:13 -0800 Subject: [PATCH 161/178] Clean up. --- src/widgets/Geoprocessing/GeoprocessingWidget.mxml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/widgets/Geoprocessing/GeoprocessingWidget.mxml b/src/widgets/Geoprocessing/GeoprocessingWidget.mxml index 632f12b..1592fc2 100644 --- a/src/widgets/Geoprocessing/GeoprocessingWidget.mxml +++ b/src/widgets/Geoprocessing/GeoprocessingWidget.mxml @@ -1018,7 +1018,8 @@ if (resultLayer is GPResultImageLayer) { var resultImageLayer:GPResultImageLayer = resultLayer as GPResultImageLayer; - gp.getResultImage(resultImageLayer.jobId, resultImageLayer.parameterName, imageParams, new AsyncResponder(resultImageSuccess, resultImageFailure)); + gp.getResultImage(resultImageLayer.jobId, resultImageLayer.parameterName, imageParams, + new AsyncResponder(resultImageSuccess, resultImageFailure)); function resultImageSuccess(paramValue:ParameterValue, token:Object = null):void { @@ -1089,9 +1090,7 @@ projectParameters.geometries = [ layerExtent ]; projectParameters.outSpatialReference = map.spatialReference GeometryServiceSingleton.instance.project( - projectParameters, - new AsyncResponder(projectionResult, - projectionFault)); + projectParameters, new AsyncResponder(projectionResult, projectionFault)); function projectionResult(geometries:Array, token:Object = null):void { From 5286942970800b5cdb8c7a19ba365646a97ca6dd Mon Sep 17 00:00:00 2001 From: Bjorn Svensson Date: Fri, 8 Mar 2013 21:45:54 -0800 Subject: [PATCH 162/178] Update some Korean and Latvian strings --- locale/ko_KR/ViewerStrings.properties | 6 +++--- locale/lv_LV/ViewerStrings.properties | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/locale/ko_KR/ViewerStrings.properties b/locale/ko_KR/ViewerStrings.properties index c43e395..b44eada 100644 --- a/locale/ko_KR/ViewerStrings.properties +++ b/locale/ko_KR/ViewerStrings.properties @@ -252,7 +252,7 @@ saveDataFileLabel=데이터 파일이 생성되었습니다. 저장하시겠습 attributesLabel=속성 attachmentsLabel=첨부 relatedRecordsLabel=관련 레코드 -featureLayerOutOfScaleText=이 피처 레이어는 배율 범위를 벗어났습니다. +featureLayerOutOfScaleText=이 피처 레이어는 축척 범위를 벗어났습니다. showAttachmentsText=첨부 showRelatedRecordsText=관련 레코드 showAttributesText=뒤로 이동 @@ -297,7 +297,7 @@ printCopyrightLabel=저작권 printAuthorLabel=작성자 printLayoutTemplatesLabel=레이아웃 템플릿 printFormatsLabel=형식 -printScaleLabel=이 배율 사용 +printScaleLabel=이 축척 사용 filterTitleBarTooltip=필터 결과 @@ -363,4 +363,4 @@ drawToolMenuLabel=그리기 도구 선택 selectLabel=선택 noLayersLabel=레이어 없음 noChartDataToDisplayLabel=디스플레이할 차트 데이터 없음 -featureLayerNotVisibleText=피처 레이어가 표시되지 않거나 배율 범위를 벗어났습니다. \ No newline at end of file +featureLayerNotVisibleText=피처 레이어가 표시되지 않거나 축척 범위를 벗어났습니다. \ No newline at end of file diff --git a/locale/lv_LV/ViewerStrings.properties b/locale/lv_LV/ViewerStrings.properties index fd6dfe9..16fc498 100644 --- a/locale/lv_LV/ViewerStrings.properties +++ b/locale/lv_LV/ViewerStrings.properties @@ -175,13 +175,13 @@ textFont4=Comic Sans MS textFont5=Algerian textFont6=Verdana -lineStyleSolid=Tīrtoņa krāsa +lineStyleSolid=Nepārtraukts lineStyleDash=Svītra lineStyleDot=Punkts lineStyleDashDot=Svītra punkts lineStyleDashDotDot=Svītra punkts punkts -fillStyleSolid=Tīrtoņa krāsa +fillStyleSolid=Nepārtraukts fillStyleBackwardDiagonal=Atpakaļējas diagonāles fillStyleCross=Krusts fillStyleForwardDiagonal=Priekšējas diagonāles From 3af5b42272b939812cc0ff188e5c94039605c767 Mon Sep 17 00:00:00 2001 From: Sarthak Datt Date: Sun, 10 Mar 2013 13:33:19 -0700 Subject: [PATCH 163/178] hide infowindow on directionsComplete and widget config loaded --- src/widgets/Directions/DirectionsWidget.mxml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/widgets/Directions/DirectionsWidget.mxml b/src/widgets/Directions/DirectionsWidget.mxml index 7f80468..99fa8d0 100644 --- a/src/widgets/Directions/DirectionsWidget.mxml +++ b/src/widgets/Directions/DirectionsWidget.mxml @@ -55,6 +55,8 @@ private function basewidget_widgetConfigLoaded():void { + // hide map infowindow if any + map.infoWindow.hide(); if (configXML) { var url:String = configXML.url[0]; @@ -266,6 +268,7 @@ From f844f136a7bd58d75796633644d880485a354e3d Mon Sep 17 00:00:00 2001 From: Sarthak Datt Date: Mon, 11 Mar 2013 11:08:00 -0700 Subject: [PATCH 164/178] allow closing layer list layer menu on widget move --- src/com/esri/viewer/WidgetTemplate.as | 8 ++++++++ src/widgets/LayerList/LayerListWidget.mxml | 3 ++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/com/esri/viewer/WidgetTemplate.as b/src/com/esri/viewer/WidgetTemplate.as index a040c06..644e418 100644 --- a/src/com/esri/viewer/WidgetTemplate.as +++ b/src/com/esri/viewer/WidgetTemplate.as @@ -37,6 +37,8 @@ import spark.components.SkinnableContainer; [Event(name="open", type="flash.events.Event")] [Event(name="minimized", type="flash.events.Event")] [Event(name="closed", type="flash.events.Event")] +[Event(name="startDrag", type="flash.events.Event")] +[Event(name="stopDrag", type="flash.events.Event")] [SkinState("open")] [SkinState("minimized")] @@ -94,6 +96,10 @@ public class WidgetTemplate extends SkinnableContainer implements IWidgetTemplat private static const WIDGET_MINIMIZED:String = "minimized"; private static const WIDGET_CLOSED:String = "closed"; + + private static const WIDGET_START_DRAG:String = "startDrag"; + + private static const WIDGET_STOP_DRAG:String = "stopDrag"; private var _widgetId:Number; @@ -355,6 +361,7 @@ public class WidgetTemplate extends SkinnableContainer implements IWidgetTemplat if (!DragManager.isDragging) { widget.startDrag(); + dispatchEvent(new Event(WIDGET_START_DRAG)); } if (_resizable) @@ -376,6 +383,7 @@ public class WidgetTemplate extends SkinnableContainer implements IWidgetTemplat var widget:UIComponent = parent as UIComponent; widget.stopDrag(); + dispatchEvent(new Event(WIDGET_STOP_DRAG)); var appHeight:Number = FlexGlobals.topLevelApplication.height; var appWidth:Number = FlexGlobals.topLevelApplication.width; diff --git a/src/widgets/LayerList/LayerListWidget.mxml b/src/widgets/LayerList/LayerListWidget.mxml index 6e5a01a..37c6b88 100644 --- a/src/widgets/LayerList/LayerListWidget.mxml +++ b/src/widgets/LayerList/LayerListWidget.mxml @@ -116,7 +116,8 @@ + minimized="AppEvent.dispatch(AppEvent.TOC_HIDDEN)" + startDrag="AppEvent.dispatch(AppEvent.TOC_HIDDEN)"> From 6894a7c21312c89edd4fe9bed03cdb8dadd73002 Mon Sep 17 00:00:00 2001 From: Sarthak Datt Date: Mon, 11 Mar 2013 18:08:33 -0700 Subject: [PATCH 165/178] always set the directionsLanguage --- src/widgets/Directions/DirectionsWidget.mxml | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/widgets/Directions/DirectionsWidget.mxml b/src/widgets/Directions/DirectionsWidget.mxml index 99fa8d0..7142d11 100644 --- a/src/widgets/Directions/DirectionsWidget.mxml +++ b/src/widgets/Directions/DirectionsWidget.mxml @@ -126,15 +126,19 @@ directions.geocoderOptions = directionsGeocoderOptions; } - - // route options + + var directionsRouteOptions:DirectionsRouteOptions = new DirectionsRouteOptions; + directionsRouteOptions.directionsLanguage = resourceManager.localeChain[0]; // always set directionsLanguage + //route options if (configXML.routeoptions.length() > 0) - { - var directionsRouteOptions:DirectionsRouteOptions = new DirectionsRouteOptions; + { var routeOptionsXML:XMLList = configXML.routeoptions; var directionsLanguage:String = routeOptionsXML.directionslanguage.toString(); - directionsRouteOptions.directionsLanguage = directionsLanguage || resourceManager.localeChain[0]; + if (directionsLanguage) + { + directionsRouteOptions.directionsLanguage = directionsLanguage; + } var directionsLengthUnits:String = routeOptionsXML.directionslengthunits.toString(); if (directionsLengthUnits) @@ -147,9 +151,8 @@ { directionsRouteOptions.directionsOutputType = toDirectionsOutputType(directionsOutputType); } - - directions.routeOptions = directionsRouteOptions; } + directions.routeOptions = directionsRouteOptions; } AppEvent.addListener(AppEvent.DATA_PUBLISH, sharedDataUpdated); } From 82328c8739fdea16b8a79decdca71152169a53bf Mon Sep 17 00:00:00 2001 From: Sarthak Datt Date: Tue, 12 Mar 2013 12:57:25 -0700 Subject: [PATCH 166/178] when toolbar is not visible, remove redundant selection color --- src/widgets/Edit/EditWidget.mxml | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/src/widgets/Edit/EditWidget.mxml b/src/widgets/Edit/EditWidget.mxml index 78d25a9..a456a35 100644 --- a/src/widgets/Edit/EditWidget.mxml +++ b/src/widgets/Edit/EditWidget.mxml @@ -78,8 +78,8 @@ private var updateGeometry:Boolean = true; private var updateAttributes:Boolean = true; private var dictionary:Dictionary = new Dictionary /*layer,renderer*/; - private var featureLayerToDynamicMapService:Dictionary = new Dictionary /*FeatureLayer,ArcGISDynamicMapServiceLayer*/ - private var hiddenFeatureLayerToSettingsName:Dictionary = new Dictionary /*FeatureLayer,String*/ + private var featureLayerToDynamicMapService:Dictionary = new Dictionary /*FeatureLayer,ArcGISDynamicMapServiceLayer*/; + private var hiddenFeatureLayerToSettingsName:Dictionary = new Dictionary /*FeatureLayer,String*/; private var excludeLayers:Array; private var lastState:String; @@ -99,6 +99,7 @@ private var visibleLayersChangeWatcher:ChangeWatcher; private var activeFeatureChangeWatcher:ChangeWatcher; private var layerToSettings:Dictionary = new Dictionary /*layer,settingsObject*/; + private var featureLayerToSelectionColor:Dictionary = new Dictionary /*FeatureLayer,SelectionColor*/; private function basewidget_initializeHandler():void { @@ -466,6 +467,7 @@ //store the renderer info for each layer on map storeInfoWindowRenderer(); editor.map = map; + updateSelectionColor(featureLayers); editor.featureLayers = featureLayers; // infowindowLabel on the AttributeInspetor editor.attributeInspector.infoWindowLabel = attributesLabel; @@ -602,6 +604,7 @@ else { deactivateEditor(); + updateSelectionColor(featureLayers); editor.featureLayers = featureLayers; //store the renderer info for each layer on map storeInfoWindowRenderer(); @@ -759,6 +762,7 @@ featureLayers.unshift(event.layer); deactivateEditor(); editor.map = map; + updateSelectionColor(featureLayers); editor.featureLayers = featureLayers; } else if (event.layer is ArcGISDynamicMapServiceLayer) @@ -1372,6 +1376,21 @@ } } + private function updateSelectionColor(featureLayers:Array):void + { + if (!editor.toolbarVisible) + { + for each (var featureLayer:FeatureLayer in featureLayers) + { + if (!featureLayerToSelectionColor[featureLayer]) + { + featureLayerToSelectionColor[featureLayer] = featureLayer.selectionColor; + featureLayer.selectionColor = NaN; + } + } + } + } + private function widgetClosedHandler(event:Event):void { disablePanZoomNavigationWidget = false; @@ -1381,7 +1400,11 @@ // clear feature layer selection for each (var featureLayer:FeatureLayer in featureLayers) - { + { + if (featureLayerToSelectionColor[featureLayer]) // restore selection color + { + featureLayer.selectionColor = featureLayerToSelectionColor[featureLayer]; + } if (featureLayer.selectedFeatures.length > 0) { featureLayer.clearSelection(); @@ -1389,7 +1412,7 @@ if (featureLayer.name.indexOf("hiddenLayer_") != -1) { map.removeLayer(featureLayer); - } + } } // assign back the renderer info for (var layer:Object in dictionary) From fe31b8b42426b7720c7ace5c93f2a48aca6add0c Mon Sep 17 00:00:00 2001 From: Lloyd Heberlie Date: Tue, 12 Mar 2013 17:12:07 -0500 Subject: [PATCH 167/178] Add link to coding conventions documentation. --- CONTRIBUTING.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4bb95f1..958204d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -19,7 +19,7 @@ The [ArcGIS Viewer for Flex](http://links.esri.com/flexviewer) is built by the F 5. Create a new feature branch on your local machine. * The name of the branch doesn't matter, but as a best practice use a descriptive name like "fix-look-of-widgetgroup-hover-state". 6. Write code to add an enhancement or fix the problem. - * Follow the coding conventions already used in the Flex Viewer source code (spaces instead of tabs, proper indentation, use [Flex Formatter](http://sourceforge.net/projects/flexformatter/files/) along with our [Flex Formatter settings](https://github.com/Esri/arcgis-viewer-flex/blob/develop/FlexFormatter.properties)). + * Follow the [coding conventions][1] already used in the Flex Viewer source code (spaces instead of tabs, proper indentation, use [Flex Formatter](http://sourceforge.net/projects/flexformatter/files/) along with our [Flex Formatter settings](https://github.com/Esri/arcgis-viewer-flex/blob/develop/FlexFormatter.properties)). * Document your code. * Make commits of logical units. * Use [clear and descriptive commit messages](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html). @@ -33,3 +33,5 @@ The [ArcGIS Viewer for Flex](http://links.esri.com/flexviewer) is built by the F ## License By contributing your code, you agree to license your contribution under the terms of the [Apache License 2.0](https://github.com/Esri/arcgis-viewer-flex/blob/master/license.txt). See item 5 of [https://github.com/Esri/arcgis-viewer-flex/blob/master/license.txt](https://github.com/Esri/arcgis-viewer-flex/blob/master/license.txt) for more details. + +[1]: https://github.com/Esri/arcgis-viewer-flex/wiki/Coding-Conventions \ No newline at end of file From 5c6fe66cbe86520c316b3606c364526a3481ed2f Mon Sep 17 00:00:00 2001 From: Sarthak Datt Date: Tue, 12 Mar 2013 15:11:14 -0700 Subject: [PATCH 168/178] when toolbar is not visible, remove redundant selection color from polyline and polygon feature layers --- src/widgets/Edit/EditWidget.mxml | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/widgets/Edit/EditWidget.mxml b/src/widgets/Edit/EditWidget.mxml index a456a35..a03869d 100644 --- a/src/widgets/Edit/EditWidget.mxml +++ b/src/widgets/Edit/EditWidget.mxml @@ -43,6 +43,7 @@ import com.esri.ags.events.FeatureLayerEvent; import com.esri.ags.events.LayerEvent; import com.esri.ags.events.MapEvent; + import com.esri.ags.geometry.Geometry; import com.esri.ags.layers.ArcGISDynamicMapServiceLayer; import com.esri.ags.layers.ArcGISTiledMapServiceLayer; import com.esri.ags.layers.FeatureLayer; @@ -1213,7 +1214,7 @@ } else if (featureLayer.tableDetails is FeatureTableDetails) { - result = (featureLayer.layerDetails as FeatureTableDetails).isCreateAllowed; + result = (featureLayer.tableDetails as FeatureTableDetails).isCreateAllowed; } return result; @@ -1381,9 +1382,11 @@ if (!editor.toolbarVisible) { for each (var featureLayer:FeatureLayer in featureLayers) - { - if (!featureLayerToSelectionColor[featureLayer]) - { + { + if (!featureLayerToSelectionColor[featureLayer] && + featureLayer.layerDetails && + (featureLayer.layerDetails.geometryType == Geometry.POLYGON || featureLayer.layerDetails.geometryType == Geometry.POLYLINE)) + { featureLayerToSelectionColor[featureLayer] = featureLayer.selectionColor; featureLayer.selectionColor = NaN; } From a8a90ea58c68b5feff203a10135288fb898757e6 Mon Sep 17 00:00:00 2001 From: Bjorn Svensson Date: Wed, 13 Mar 2013 10:14:32 -0700 Subject: [PATCH 169/178] Minor update to Arabic and German strings --- locale/ar/ViewerStrings.properties | 10 +++++----- locale/de_DE/ViewerStrings.properties | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/locale/ar/ViewerStrings.properties b/locale/ar/ViewerStrings.properties index 02e6b3a..c6a23e0 100644 --- a/locale/ar/ViewerStrings.properties +++ b/locale/ar/ViewerStrings.properties @@ -109,11 +109,11 @@ couldNotDeleteFeature=تعذر حذف المعلم couldNotUpdateFeatureError=تعذر تحديث المعلم، استعادة القيمة القديمة cannotDisplayResult=لا يمكن عرض النتيجة على الخريطة. uploadSecurityError=تمت مواجهة خطأ أمان أثناء تحميل الملف: {0} -uploadIOError=تمت مواجهة خطأ إدخال/إخراج أثناء تحميل الملف: {0} +uploadIOError=تمت مواجهة خطأ IO أثناء تحميل الملف: {0} uploadUnknownError=حدث خطأ غير معروف أثناء تحميل الملف. couldNotProcessUploadResponse=تعذرت معالجة تحميل الاستجابة الكاملة. -fileExceedsAllowedUploadSize=يتجاوز الملف الحد الأقصى المسموح به لحجم التحميل. ({0} ميجابايت) -fileUploadError=خطأ في تحميل الملف +fileExceedsAllowedUploadSize=تجاوز الملف الحد الأقصى المسموح به لحجم التحميل. ({0} ميجابايت) +fileUploadError=حدث خطأ أثناء تحميل الملف configFileCrossDomain=مشكلة محتملة عبر المجالات: {0}{1} @@ -341,9 +341,9 @@ outputLabel=المخرجات copyToClipboard=نسخ إلى الحافظة unsupportedInputType=إدخال {0} غير مدعوم currentExtentWillBeUsedAsInput=سيتم استخدام الحد الحالي كإدخال. -byURL=حسب عنوان URL +byURL=تبعًا لعنوان URL fileURL=عنوان URL للملف -uploadFile=تحميل ملف +uploadFile=تحميل الملف or=أو diff --git a/locale/de_DE/ViewerStrings.properties b/locale/de_DE/ViewerStrings.properties index 884b438..c583049 100644 --- a/locale/de_DE/ViewerStrings.properties +++ b/locale/de_DE/ViewerStrings.properties @@ -322,7 +322,7 @@ editRouteLabel=Route bearbeiten graphicalTitleBarTooltip=Features selektieren textTitleBarTooltip=Nach Attributen selektieren -graphicalsearchLabel=Features selektieren nach +graphicalsearchLabel=Features selektieren mit textsearchLabel=Nach Attributen selektieren layerLabel=Such-Layer nolayerLabel=Kein Such-Layer definiert. From b2cd8e5f2c036f21db5a1f316529787994231bb1 Mon Sep 17 00:00:00 2001 From: Dasa Paddock Date: Wed, 13 Mar 2013 12:56:28 -0700 Subject: [PATCH 170/178] Remove requiresActiveX=true meta tag --- html-template/index.template.html | 1 - 1 file changed, 1 deletion(-) diff --git a/html-template/index.template.html b/html-template/index.template.html index 29ffcae..6a881d1 100644 --- a/html-template/index.template.html +++ b/html-template/index.template.html @@ -3,7 +3,6 @@ ${title} - From 8f68e30bb0f8bfefdaf5a0d2d12193cdf58ba3f6 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Thu, 14 Mar 2013 11:42:20 -0700 Subject: [PATCH 171/178] Remove trailing ResultAttributes#toResultAttributes() content newlines. --- src/widgets/supportClasses/ResultAttributes.as | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/widgets/supportClasses/ResultAttributes.as b/src/widgets/supportClasses/ResultAttributes.as index 00378d5..724b8c8 100644 --- a/src/widgets/supportClasses/ResultAttributes.as +++ b/src/widgets/supportClasses/ResultAttributes.as @@ -75,7 +75,7 @@ public class ResultAttributes resultAttributes.attributes = graphic.attributes; resultAttributes.title = title ? title : fallbackTitle; - resultAttributes.content = content; + resultAttributes.content = content.replace(/\n$/, ''); resultAttributes.link = link ? link : null; resultAttributes.linkAlias = linkAlias; From 6fc473d30e13eb080f2b95c699eade23ce3966f3 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Thu, 14 Mar 2013 11:54:35 -0700 Subject: [PATCH 172/178] Clean up SearchWidget. --- src/widgets/Search/SearchWidget.mxml | 38 ++++++++++++++-------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/src/widgets/Search/SearchWidget.mxml b/src/widgets/Search/SearchWidget.mxml index 1fc2a91..b703e89 100644 --- a/src/widgets/Search/SearchWidget.mxml +++ b/src/widgets/Search/SearchWidget.mxml @@ -422,14 +422,12 @@ private function searchLayerChangedText():void { - var i:int = cboLayerText.selectedIndex; - txtLabelText.text = configSearchText[i].textlabel; + txtLabelText.text = cboLayerText.selectedItem.textlabel; } private function searchLayerChangedGraphical():void { - var i:int = cboLayerGraphical.selectedIndex; - txtLabelGraphical.text = configSearchGraphical[i].graphicallabel; + txtLabelGraphical.text = cboLayerGraphical.selectedItem.graphicallabel; } private function activateDrawTool(event:MouseEvent):void @@ -519,8 +517,9 @@ { hideInfoWindow(); - var i:int = cboLayerText.selectedIndex; - queryLayer = configSearchText[i].layer; + var searchLayer:Object = cboLayerText.selectedItem; + + queryLayer = searchLayer.layer; if (queryLayer && !queryLayer.loaded) { @@ -545,11 +544,11 @@ return; } - queryExpr = configSearchText[i].expr; - queryFields = configSearchText[i].fields; - queryTitleField = configSearchText[i].titlefield; - queryLinkField = configSearchText[i].linkfield; - queryLinkAlias = configSearchText[i].linkalias; + queryExpr = searchLayer.expr; + queryFields = searchLayer.fields; + queryTitleField = searchLayer.titlefield; + queryLinkField = searchLayer.linkfield; + queryLinkAlias = searchLayer.linkalias; if (queryLayer && txtSearch.text) { @@ -562,7 +561,7 @@ const supportsServerSideSorting:Boolean = queryLayer.layerDetails && queryLayer.layerDetails.version >= 10.1 && queryLayer.layerDetails.supportsAdvancedQueries; - const orderByFields:Array = configSearchText[i].orderbyfields; + const orderByFields:Array = searchLayer.orderbyfields; if (supportsServerSideSorting && orderByFields) { query.orderByFields = orderByFields; @@ -610,8 +609,9 @@ { hideInfoWindow(); - var i:int = cboLayerGraphical.selectedIndex; - queryLayer = configSearchGraphical[i].layer; + var searchLayer:Object = cboLayerGraphical.selectedItem; + + queryLayer = searchLayer.layer; if (queryLayer && !queryLayer.loaded) { @@ -637,10 +637,10 @@ } queryGeom = geom; - queryFields = configSearchGraphical[i].fields; - queryTitleField = configSearchGraphical[i].titlefield; - queryLinkField = configSearchGraphical[i].linkfield; - queryLinkAlias = configSearchGraphical[i].linkalias; + queryFields = searchLayer.fields; + queryTitleField = searchLayer.titlefield; + queryLinkField = searchLayer.linkfield; + queryLinkAlias = searchLayer.linkalias; if (queryLayer) { @@ -652,7 +652,7 @@ const supportsServerSideSorting:Boolean = queryLayer.layerDetails && queryLayer.layerDetails.version >= 10.1 && queryLayer.layerDetails.supportsAdvancedQueries; - const orderByFields:Array = configSearchText[i].orderbyfields; + const orderByFields:Array = searchLayer.orderbyfields; if (supportsServerSideSorting && orderByFields) { query.orderByFields = orderByFields; From 642a155a42f7df6e3361378efeef14548b7e809d Mon Sep 17 00:00:00 2001 From: jcfranco Date: Thu, 14 Mar 2013 10:58:21 -0700 Subject: [PATCH 173/178] Set valid layer copyright. --- src/com/esri/viewer/managers/LayerCreator.as | 65 ++++++++++++++++---- 1 file changed, 52 insertions(+), 13 deletions(-) diff --git a/src/com/esri/viewer/managers/LayerCreator.as b/src/com/esri/viewer/managers/LayerCreator.as index 7c83007..1f9a223 100644 --- a/src/com/esri/viewer/managers/LayerCreator.as +++ b/src/com/esri/viewer/managers/LayerCreator.as @@ -112,13 +112,16 @@ public class LayerCreator { var tiledLayer:ArcGISTiledMapServiceLayer = new ArcGISTiledMapServiceLayer(layerCreationProperties.url); tiledLayer.alpha = layerCreationProperties.alpha; - tiledLayer.copyright = layerCreationProperties.copyright; tiledLayer.id = layerCreationProperties.label; tiledLayer.name = layerCreationProperties.label; tiledLayer.showInLegend = layerCreationProperties.showInLegend; tiledLayer.token = layerCreationProperties.token; tiledLayer.visible = layerCreationProperties.visible; + if (layerCreationProperties.copyright != null) + { + tiledLayer.copyright = layerCreationProperties.copyright; + } if (layerCreationProperties.showInLegend && layerCreationProperties.showInLegendHiddenLayers) { @@ -151,7 +154,6 @@ public class LayerCreator { var dynLayer:ArcGISDynamicMapServiceLayer = new ArcGISDynamicMapServiceLayer(layerCreationProperties.url); dynLayer.alpha = layerCreationProperties.alpha; - dynLayer.copyright = layerCreationProperties.copyright; dynLayer.id = layerCreationProperties.label; dynLayer.gdbVersion = layerCreationProperties.gdbVersion; dynLayer.name = layerCreationProperties.label; @@ -161,6 +163,10 @@ public class LayerCreator dynLayer.useMapTime = layerCreationProperties.useMapTime; dynLayer.disableClientCaching = layerCreationProperties.disableClientCaching; + if (layerCreationProperties.copyright != null) + { + dynLayer.copyright = layerCreationProperties.copyright; + } if (layerCreationProperties.showInLegend && layerCreationProperties.showInLegendHiddenLayers) { @@ -211,7 +217,6 @@ public class LayerCreator var featureLayer:FeatureLayer = new FeatureLayer(layerCreationProperties.url); featureLayer.alpha = layerCreationProperties.alpha; - featureLayer.copyright = layerCreationProperties.copyright; featureLayer.id = layerCreationProperties.label; featureLayer.gdbVersion = layerCreationProperties.gdbVersion; featureLayer.name = layerCreationProperties.label; @@ -223,6 +228,10 @@ public class LayerCreator featureLayer.clusterer = layerCreationProperties.clusterer; featureLayer.disableClientCaching = layerCreationProperties.disableClientCaching; featureLayer.showInLegend = layerCreationProperties.showInLegend; + if (layerCreationProperties.copyright != null) + { + featureLayer.copyright = layerCreationProperties.copyright; + } if (layerCreationProperties.renderer) { featureLayer.renderer = layerCreationProperties.renderer; @@ -272,13 +281,16 @@ public class LayerCreator private static function createBingLayer(layerCreationProperties:LayerCreationProperties):VETiledLayer { var veTiledLayer:VETiledLayer = new VETiledLayer(); - veTiledLayer.copyright = layerCreationProperties.copyright; veTiledLayer.id = layerCreationProperties.label; veTiledLayer.name = layerCreationProperties.label; veTiledLayer.key = layerCreationProperties.bingMapKey; veTiledLayer.visible = layerCreationProperties.visible; veTiledLayer.alpha = layerCreationProperties.alpha; veTiledLayer.showInLegend = layerCreationProperties.showInLegend; + if (layerCreationProperties.copyright != null) + { + veTiledLayer.copyright = layerCreationProperties.copyright; + } if (layerCreationProperties.style) { veTiledLayer.mapStyle = layerCreationProperties.style; @@ -309,7 +321,6 @@ public class LayerCreator private static function createImageLayer(layerCreationProperties:LayerCreationProperties):ArcGISImageServiceLayer { var imgLayer:ArcGISImageServiceLayer = new ArcGISImageServiceLayer(layerCreationProperties.url); - imgLayer.copyright = layerCreationProperties.copyright; imgLayer.id = layerCreationProperties.label; imgLayer.name = layerCreationProperties.label; imgLayer.alpha = layerCreationProperties.alpha; @@ -319,6 +330,10 @@ public class LayerCreator imgLayer.useMapTime = layerCreationProperties.useMapTime; imgLayer.disableClientCaching = layerCreationProperties.disableClientCaching; imgLayer.showInLegend = layerCreationProperties.showInLegend; + if (layerCreationProperties.copyright != null) + { + imgLayer.copyright = layerCreationProperties.copyright; + } if (layerCreationProperties.imageFormat) { imgLayer.imageFormat = layerCreationProperties.imageFormat; @@ -350,13 +365,16 @@ public class LayerCreator { var arcimsLayer:ArcIMSMapServiceLayer = new ArcIMSMapServiceLayer(); arcimsLayer.alpha = layerCreationProperties.alpha; - arcimsLayer.copyright = layerCreationProperties.copyright; arcimsLayer.id = layerCreationProperties.label; arcimsLayer.name = layerCreationProperties.label; arcimsLayer.visible = layerCreationProperties.visible; arcimsLayer.serviceHost = layerCreationProperties.serviceHost; arcimsLayer.serviceName = layerCreationProperties.serviceName; arcimsLayer.showInLegend = layerCreationProperties.showInLegend; + if (layerCreationProperties.copyright != null) + { + arcimsLayer.copyright = layerCreationProperties.copyright; + } if (layerCreationProperties.autoRefresh > 0) { setInterval(arcimsLayer.refresh, layerCreationProperties.autoRefresh * 1000); @@ -394,12 +412,15 @@ public class LayerCreator { var wmsLayer:WMSLayer = new WMSLayer(layerCreationProperties.url); wmsLayer.alpha = layerCreationProperties.alpha; - wmsLayer.copyright = layerCreationProperties.copyright; wmsLayer.id = layerCreationProperties.label; wmsLayer.name = layerCreationProperties.label; wmsLayer.visible = layerCreationProperties.visible; wmsLayer.disableClientCaching = layerCreationProperties.disableClientCaching; wmsLayer.showInLegend = layerCreationProperties.showInLegend; + if (layerCreationProperties.copyright != null) + { + wmsLayer.copyright = layerCreationProperties.copyright; + } if (layerCreationProperties.wkid) { wmsLayer.spatialReference = new SpatialReference(layerCreationProperties.wkid); @@ -457,11 +478,14 @@ public class LayerCreator { var wmtsLayer:WMTSLayer = new WMTSLayer(layerCreationProperties.url); wmtsLayer.alpha = layerCreationProperties.alpha; - wmtsLayer.copyright = layerCreationProperties.copyright; wmtsLayer.id = layerCreationProperties.label; wmtsLayer.name = layerCreationProperties.label; wmtsLayer.visible = layerCreationProperties.visible; wmtsLayer.showInLegend = layerCreationProperties.showInLegend; + if (layerCreationProperties.copyright != null) + { + wmtsLayer.copyright = layerCreationProperties.copyright; + } if (layerCreationProperties.imageFormat) { wmtsLayer.imageFormat = layerCreationProperties.imageFormat; @@ -500,12 +524,15 @@ public class LayerCreator private static function createOSMLayer(layerCreationProperties:LayerCreationProperties):OpenStreetMapLayer { var osmLayer:OpenStreetMapLayer = new OpenStreetMapLayer(); - osmLayer.copyright = layerCreationProperties.copyright; osmLayer.alpha = layerCreationProperties.alpha; osmLayer.id = layerCreationProperties.label; osmLayer.name = layerCreationProperties.label; osmLayer.visible = layerCreationProperties.visible; osmLayer.showInLegend = layerCreationProperties.showInLegend; + if (layerCreationProperties.copyright != null) + { + osmLayer.copyright = layerCreationProperties.copyright; + } if (!isNaN(layerCreationProperties.minScale)) { osmLayer.minScale = layerCreationProperties.minScale; @@ -522,11 +549,14 @@ public class LayerCreator var kmlLayer:KMLLayer = new KMLLayer(layerCreationProperties.url); kmlLayer.alpha = layerCreationProperties.alpha; - kmlLayer.copyright = layerCreationProperties.copyright; kmlLayer.id = layerCreationProperties.label; kmlLayer.name = layerCreationProperties.label; kmlLayer.disableClientCaching = layerCreationProperties.disableClientCaching; kmlLayer.showInLegend = layerCreationProperties.showInLegend; + if (layerCreationProperties.copyright != null) + { + kmlLayer.copyright = layerCreationProperties.copyright; + } if (layerCreationProperties.serviceURL) { kmlLayer.serviceURL = layerCreationProperties.serviceURL; @@ -548,12 +578,15 @@ public class LayerCreator var csvLayer:CSVLayer = new CSVLayer(layerCreationProperties.url); csvLayer.alpha = layerCreationProperties.alpha; - csvLayer.copyright = layerCreationProperties.copyright; csvLayer.id = layerCreationProperties.label; csvLayer.name = layerCreationProperties.label; csvLayer.latitudeFieldName = layerCreationProperties.latitudeFieldName; csvLayer.longitudeFieldName = layerCreationProperties.longitudeFieldName; csvLayer.showInLegend = layerCreationProperties.showInLegend; + if (layerCreationProperties.copyright != null) + { + csvLayer.copyright = layerCreationProperties.copyright; + } if (layerCreationProperties.renderer) { csvLayer.renderer = layerCreationProperties.renderer; @@ -597,13 +630,16 @@ public class LayerCreator var geoRSSLayer:GeoRSSLayer = new GeoRSSLayer(layerCreationProperties.url); geoRSSLayer.alpha = layerCreationProperties.alpha; - geoRSSLayer.copyright = layerCreationProperties.copyright; geoRSSLayer.id = layerCreationProperties.label; geoRSSLayer.name = layerCreationProperties.label; geoRSSLayer.disableClientCaching = layerCreationProperties.disableClientCaching; geoRSSLayer.showInLegend = layerCreationProperties.showInLegend; geoRSSLayer.visible = layerCreationProperties.visible; + if (layerCreationProperties.copyright != null) + { + geoRSSLayer.copyright = layerCreationProperties.copyright; + } if (layerCreationProperties.serviceURL) { geoRSSLayer.serviceURL = layerCreationProperties.serviceURL; @@ -640,9 +676,12 @@ public class LayerCreator webTiledLayer.id = layerCreationProperties.label; webTiledLayer.name = layerCreationProperties.label; webTiledLayer.visible = layerCreationProperties.visible; - webTiledLayer.copyright = layerCreationProperties.copyright; webTiledLayer.showInLegend = layerCreationProperties.showInLegend; + if (layerCreationProperties.copyright != null) + { + webTiledLayer.copyright = layerCreationProperties.copyright; + } if (layerCreationProperties.displayLevels) { webTiledLayer.displayLevels = layerCreationProperties.displayLevels.split(","); From ba514d0d46e8160a397ec6c7a466145f7357d869 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Thu, 14 Mar 2013 17:21:47 -0700 Subject: [PATCH 174/178] Fix typo that prevented setting Layer#showInLegend. --- src/com/esri/viewer/utils/LayerObjectUtil.as | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/com/esri/viewer/utils/LayerObjectUtil.as b/src/com/esri/viewer/utils/LayerObjectUtil.as index a4a08f8..5877e92 100644 --- a/src/com/esri/viewer/utils/LayerObjectUtil.as +++ b/src/com/esri/viewer/utils/LayerObjectUtil.as @@ -161,11 +161,7 @@ public class LayerObjectUtil } var culture:String = obj.@culture[0] ? obj.@culture : ""; - var showInLegend:Boolean = true; - if (obj.@showinlegend[0]) - { - showInLegend = obj.showinlegend == "true"; - } + var showInLegend:Boolean = obj.@showinlegend[0] != "false"; var showInLegendHiddenLayers:String = obj.@showinlegendhiddenlayers; From 11117880bc2ec7b7d931f958431b9228e78f9079 Mon Sep 17 00:00:00 2001 From: jcfranco Date: Thu, 14 Mar 2013 17:52:09 -0700 Subject: [PATCH 175/178] Convert parsed hidden layer IDs to numbers. --- src/com/esri/viewer/managers/LayerCreator.as | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/com/esri/viewer/managers/LayerCreator.as b/src/com/esri/viewer/managers/LayerCreator.as index 1f9a223..83af827 100644 --- a/src/com/esri/viewer/managers/LayerCreator.as +++ b/src/com/esri/viewer/managers/LayerCreator.as @@ -125,7 +125,12 @@ public class LayerCreator if (layerCreationProperties.showInLegend && layerCreationProperties.showInLegendHiddenLayers) { - tiledLayer.showInLegendHiddenLayers = layerCreationProperties.showInLegendHiddenLayers.split(","); + var hiddenLayers:Array = layerCreationProperties.showInLegendHiddenLayers.split(","); + for (var i:int = 0; i < hiddenLayers.length; i++) + { + hiddenLayers[i] = Number(hiddenLayers[i]); // convert to Numbers + } + tiledLayer.showInLegendHiddenLayers = hiddenLayers; } if (layerCreationProperties.displayLevels) { @@ -170,7 +175,12 @@ public class LayerCreator if (layerCreationProperties.showInLegend && layerCreationProperties.showInLegendHiddenLayers) { - dynLayer.showInLegendHiddenLayers = layerCreationProperties.showInLegendHiddenLayers.split(","); + var hiddenLayers:Array = layerCreationProperties.showInLegendHiddenLayers.split(","); + for (var i:int = 0; i < hiddenLayers.length; i++) + { + hiddenLayers[i] = Number(hiddenLayers[i]); // convert to Numbers + } + dynLayer.showInLegendHiddenLayers = hiddenLayers; } if (layerCreationProperties.autoRefresh > 0) { From 19b3716f09fb0956e40340248a881c05cfd6152e Mon Sep 17 00:00:00 2001 From: jcfranco Date: Thu, 14 Mar 2013 18:01:05 -0700 Subject: [PATCH 176/178] Clean up LayerCreator. --- src/com/esri/viewer/managers/LayerCreator.as | 55 ++++++-------------- 1 file changed, 17 insertions(+), 38 deletions(-) diff --git a/src/com/esri/viewer/managers/LayerCreator.as b/src/com/esri/viewer/managers/LayerCreator.as index 83af827..dd55ea6 100644 --- a/src/com/esri/viewer/managers/LayerCreator.as +++ b/src/com/esri/viewer/managers/LayerCreator.as @@ -125,20 +125,11 @@ public class LayerCreator if (layerCreationProperties.showInLegend && layerCreationProperties.showInLegendHiddenLayers) { - var hiddenLayers:Array = layerCreationProperties.showInLegendHiddenLayers.split(","); - for (var i:int = 0; i < hiddenLayers.length; i++) - { - hiddenLayers[i] = Number(hiddenLayers[i]); // convert to Numbers - } - tiledLayer.showInLegendHiddenLayers = hiddenLayers; + tiledLayer.showInLegendHiddenLayers = toNumericArray(layerCreationProperties.showInLegendHiddenLayers.split(",")); } if (layerCreationProperties.displayLevels) { - tiledLayer.displayLevels = layerCreationProperties.displayLevels.split(","); - for (var i:int = 0; i < tiledLayer.displayLevels.length; i++) - { - tiledLayer.displayLevels[i] = Number(tiledLayer.displayLevels[i]); // convert to Numbers - } + tiledLayer.displayLevels = toNumericArray(layerCreationProperties.displayLevels.split(",")); } if (layerCreationProperties.proxyUrl && layerCreationProperties.useProxy) { @@ -155,6 +146,16 @@ public class LayerCreator return tiledLayer; } + private static function toNumericArray(textualNumberArray:Array):Array + { + var numericArray:Array = []; + for (var i:int = 0; i < textualNumberArray.length; i++) + { + numericArray.push(Number(textualNumberArray[i])); + } + return numericArray; + } + private static function createDynamicLayer(layerCreationProperties:LayerCreationProperties):ArcGISDynamicMapServiceLayer { var dynLayer:ArcGISDynamicMapServiceLayer = new ArcGISDynamicMapServiceLayer(layerCreationProperties.url); @@ -175,12 +176,7 @@ public class LayerCreator if (layerCreationProperties.showInLegend && layerCreationProperties.showInLegendHiddenLayers) { - var hiddenLayers:Array = layerCreationProperties.showInLegendHiddenLayers.split(","); - for (var i:int = 0; i < hiddenLayers.length; i++) - { - hiddenLayers[i] = Number(hiddenLayers[i]); // convert to Numbers - } - dynLayer.showInLegendHiddenLayers = hiddenLayers; + dynLayer.showInLegendHiddenLayers = toNumericArray(layerCreationProperties.showInLegendHiddenLayers.split(",")); } if (layerCreationProperties.autoRefresh > 0) { @@ -192,12 +188,7 @@ public class LayerCreator } if (layerCreationProperties.visibleLayers) { - var vizLayers:Array = layerCreationProperties.visibleLayers.split(","); - for (var i:int = 0; i < vizLayers.length; i++) - { - vizLayers[i] = Number(vizLayers[i]); // convert to Numbers - } - dynLayer.visibleLayers = new ArrayCollection(vizLayers); + dynLayer.visibleLayers = new ArrayCollection(toNumericArray(layerCreationProperties.visibleLayers.split(","))); } if (layerCreationProperties.proxyUrl && layerCreationProperties.useProxy) { @@ -311,11 +302,7 @@ public class LayerCreator } if (layerCreationProperties.displayLevels) { - veTiledLayer.displayLevels = layerCreationProperties.displayLevels.split(","); - for (var i:int = 0; i < veTiledLayer.displayLevels.length; i++) - { - veTiledLayer.displayLevels[i] = Number(veTiledLayer.displayLevels[i]); // convert to Numbers - } + veTiledLayer.displayLevels = toNumericArray(layerCreationProperties.displayLevels.split(",")); } if (!isNaN(layerCreationProperties.minScale)) { @@ -350,11 +337,7 @@ public class LayerCreator } if (layerCreationProperties.bandIds) { - imgLayer.bandIds = layerCreationProperties.bandIds.split(","); - for (var i:int = 0; i < imgLayer.bandIds.length; i++) - { - imgLayer.bandIds[i] = Number(imgLayer.bandIds[i]); // convert to Numbers - } + imgLayer.bandIds = toNumericArray(layerCreationProperties.bandIds.split(",")); } if (layerCreationProperties.proxyUrl && layerCreationProperties.useProxy) { @@ -694,11 +677,7 @@ public class LayerCreator } if (layerCreationProperties.displayLevels) { - webTiledLayer.displayLevels = layerCreationProperties.displayLevels.split(","); - for (var i:int = 0; i < webTiledLayer.displayLevels.length; i++) - { - webTiledLayer.displayLevels[i] = Number(webTiledLayer.displayLevels[i]); // convert to Numbers - } + webTiledLayer.displayLevels = toNumericArray(layerCreationProperties.displayLevels.split(",")); } if (!isNaN(layerCreationProperties.minScale)) { From 29f7d5e7ce0a628f1959f06b754b421fa6d51b26 Mon Sep 17 00:00:00 2001 From: Sarthak Datt Date: Fri, 15 Mar 2013 12:55:12 -0700 Subject: [PATCH 177/178] Allow configuring impedance attribute --- src/widgets/Directions/DirectionsWidget.mxml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/widgets/Directions/DirectionsWidget.mxml b/src/widgets/Directions/DirectionsWidget.mxml index 7142d11..0fe6436 100644 --- a/src/widgets/Directions/DirectionsWidget.mxml +++ b/src/widgets/Directions/DirectionsWidget.mxml @@ -151,6 +151,12 @@ { directionsRouteOptions.directionsOutputType = toDirectionsOutputType(directionsOutputType); } + + var impedanceAttribute:String = routeOptionsXML.impedanceattribute.toString(); + if (impedanceAttribute) + { + directionsRouteOptions.impedanceAttribute = impedanceAttribute; + } } directions.routeOptions = directionsRouteOptions; } From 65f831f603202c165bc87123882917cc68f588dd Mon Sep 17 00:00:00 2001 From: Dasa Paddock Date: Fri, 15 Mar 2013 15:30:20 -0700 Subject: [PATCH 178/178] format --- src/com/esri/viewer/WidgetTemplate.as | 4 ++-- .../components/toc/tocClasses/TocMapLayerItem.as | 6 +++--- src/widgets/Directions/DirectionsWidget.mxml | 8 ++++---- src/widgets/Edit/EditWidget.mxml | 10 +++++----- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/com/esri/viewer/WidgetTemplate.as b/src/com/esri/viewer/WidgetTemplate.as index 644e418..6b43858 100644 --- a/src/com/esri/viewer/WidgetTemplate.as +++ b/src/com/esri/viewer/WidgetTemplate.as @@ -96,9 +96,9 @@ public class WidgetTemplate extends SkinnableContainer implements IWidgetTemplat private static const WIDGET_MINIMIZED:String = "minimized"; private static const WIDGET_CLOSED:String = "closed"; - + private static const WIDGET_START_DRAG:String = "startDrag"; - + private static const WIDGET_STOP_DRAG:String = "stopDrag"; private var _widgetId:Number; diff --git a/src/com/esri/viewer/components/toc/tocClasses/TocMapLayerItem.as b/src/com/esri/viewer/components/toc/tocClasses/TocMapLayerItem.as index ded886b..164ca39 100644 --- a/src/com/esri/viewer/components/toc/tocClasses/TocMapLayerItem.as +++ b/src/com/esri/viewer/components/toc/tocClasses/TocMapLayerItem.as @@ -428,9 +428,9 @@ public class TocMapLayerItem extends TocItem { var visLayers:Array = getActualVisibleLayers(MapServiceUtil.getVisibleSubLayers(_dynamicMapServiceLayerInfos), _dynamicMapServiceLayerInfos); arcGISDynamicMapServiceLayer.visibleLayers = new ArrayCollection(visLayers); - } - arcGISDynamicMapServiceLayer.visibleLayers.addEventListener(CollectionEvent.COLLECTION_CHANGE, visibleLayersChangeHandler); - _visibleLayersChangeWatcher = ChangeWatcher.watch(arcGISDynamicMapServiceLayer, "visibleLayers", visibleLayersChange); + } + arcGISDynamicMapServiceLayer.visibleLayers.addEventListener(CollectionEvent.COLLECTION_CHANGE, visibleLayersChangeHandler); + _visibleLayersChangeWatcher = ChangeWatcher.watch(arcGISDynamicMapServiceLayer, "visibleLayers", visibleLayersChange); if (_isVisibleLayersSet) { layerInfos = []; diff --git a/src/widgets/Directions/DirectionsWidget.mxml b/src/widgets/Directions/DirectionsWidget.mxml index 0fe6436..b5c5b43 100644 --- a/src/widgets/Directions/DirectionsWidget.mxml +++ b/src/widgets/Directions/DirectionsWidget.mxml @@ -126,12 +126,12 @@ directions.geocoderOptions = directionsGeocoderOptions; } - - var directionsRouteOptions:DirectionsRouteOptions = new DirectionsRouteOptions; + + var directionsRouteOptions:DirectionsRouteOptions = new DirectionsRouteOptions; directionsRouteOptions.directionsLanguage = resourceManager.localeChain[0]; // always set directionsLanguage //route options if (configXML.routeoptions.length() > 0) - { + { var routeOptionsXML:XMLList = configXML.routeoptions; var directionsLanguage:String = routeOptionsXML.directionslanguage.toString(); @@ -151,7 +151,7 @@ { directionsRouteOptions.directionsOutputType = toDirectionsOutputType(directionsOutputType); } - + var impedanceAttribute:String = routeOptionsXML.impedanceattribute.toString(); if (impedanceAttribute) { diff --git a/src/widgets/Edit/EditWidget.mxml b/src/widgets/Edit/EditWidget.mxml index a03869d..28f107d 100644 --- a/src/widgets/Edit/EditWidget.mxml +++ b/src/widgets/Edit/EditWidget.mxml @@ -1382,11 +1382,11 @@ if (!editor.toolbarVisible) { for each (var featureLayer:FeatureLayer in featureLayers) - { - if (!featureLayerToSelectionColor[featureLayer] && + { + if (!featureLayerToSelectionColor[featureLayer] && featureLayer.layerDetails && (featureLayer.layerDetails.geometryType == Geometry.POLYGON || featureLayer.layerDetails.geometryType == Geometry.POLYLINE)) - { + { featureLayerToSelectionColor[featureLayer] = featureLayer.selectionColor; featureLayer.selectionColor = NaN; } @@ -1403,7 +1403,7 @@ // clear feature layer selection for each (var featureLayer:FeatureLayer in featureLayers) - { + { if (featureLayerToSelectionColor[featureLayer]) // restore selection color { featureLayer.selectionColor = featureLayerToSelectionColor[featureLayer]; @@ -1415,7 +1415,7 @@ if (featureLayer.name.indexOf("hiddenLayer_") != -1) { map.removeLayer(featureLayer); - } + } } // assign back the renderer info for (var layer:Object in dictionary)