Below is the BookMarksWidget.mxml minus the "Add Bookmark" functionality<?xml version="1.0" encoding="utf-8"?>
<!--
////////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2010 ESRI
//
// All rights reserved under the copyright laws of the United States.
// You may freely redistribute and use this software, with or
// without modification, provided you include the original copyright
// and use restrictions. See use restrictions in the file:
// <install location>/License.txt
//
////////////////////////////////////////////////////////////////////////////////
-->
<viewer:BaseWidget xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:viewer="com.esri.viewer.*"
xmlns:Bookmark="widgets.Bookmark.*"
x="600" y="300"
layout="absolute"
widgetConfigLoaded="init()">
<viewer:states>
<s:State name="bkmList"/>
</viewer:states>
<fx:Script>
<![CDATA[
import com.esri.ags.geometry.Extent;
import mx.collections.ArrayList;
import mx.controls.Alert;
import mx.events.EffectEvent;
import spark.components.supportClasses.ItemRenderer;
import spark.core.NavigationUnit;
private const BOOKMARKS:String = "bookmarks";
private const ICON_URL:String = "assets/images/";
//labels
private var bookmarksLabel:String;
private var addbookmarksLabel:String;
[Bindable]
private var addLabel:String;
[Bindable]
private var submitLabel:String;
private var errorLabel:String;
[Bindable]
private var bookmarkAL:ArrayList; // used by BookmarkDataGroup
private var bookmarkSO:SharedObject;
private var bookmarkSOAL:ArrayList; // stored in bookmarkSO
private var selectedindex:int = 0;
private function init():void
{
if (configXML)
{
//labels
bookmarksLabel = configXML.labels.bookmarkslabel || getDefaultString("bookmarksLabel");
addbookmarksLabel = configXML.labels.addbookmarkslabel || getDefaultString("addbookmarksLabel");
addLabel = configXML.labels.addlabel || getDefaultString("addLabel");
submitLabel = configXML.labels.submitlabel || getDefaultString("bookmarkSubmitLabel");
errorLabel = configXML.labels.errorlabel || getDefaultString("errorLabel");
}
wTemplate.addTitlebarButton(ICON_URL + "i_bookmark.png", bookmarksLabel, showBookmarksList);
bookmarkAL = new ArrayList();
try
{
bookmarkSO = SharedObject.getLocal(BOOKMARKS);
}
catch (err:Error)
{
trace(err);
}
loadBookmarks();
}
private function showBookmarksList():void
{
this.currentState = "bkmList";
wTemplate.selectedTitlebarButtonIndex = 0; // used to indicate selected titlebar button when automatically switching state
}
private function loadBookmarks():void
{
if (configXML)
{
var bookmarkList:XMLList = configXML..bookmark;
for (var i:int = 0; i < bookmarkList.length(); i++)
{
var name:String = bookmarkList.@name;
var icon:String = bookmarkList.@icon;
var extent:String = bookmarkList;
var extArray:Array = extent.split(" ");
var bookmark:Bookmark = new Bookmark();
bookmark.name = name;
bookmark.icon = icon;
bookmark.xmin = Number(extArray[0]);
bookmark.ymin = Number(extArray[1]);
bookmark.xmax = Number(extArray[2]);
bookmark.ymax = Number(extArray[3]);
bookmarkAL.addItem(bookmark);
}
}
if (bookmarkSO)
{
bookmarkSOAL = bookmarkSO.data[BOOKMARKS] as ArrayList;
if (!bookmarkSOAL)
{
bookmarkSOAL = new ArrayList();
bookmarkSO.data[BOOKMARKS] = bookmarkSOAL;
}
else
{
bookmarkAL.addAll(bookmarkSOAL);
}
}
}
private function showBookmark(event:Event):void
{
var bookmark:Bookmark = ItemRenderer(event.target).data as Bookmark;
var ext:Extent = new Extent(bookmark.xmin, bookmark.ymin, bookmark.xmax, bookmark.ymax);
map.extent = ext;
}
]]>
</fx:Script>
<viewer:WidgetTemplate id="wTemplate"
width="300" height="300">
<s:Group id="bkmList"
width="100%" height="100%"
visible="false"
visible.bkmList="true">
<s:Scroller width="100%" height="100%">
<Bookmark:BookmarkDataGroup id="bookmarkDG"
bookmarkClick="showBookmark(event)"
dataProvider="{bookmarkAL}">
<Bookmark:layout>
<s:VerticalLayout gap="2"
horizontalAlign="justify"
useVirtualLayout="true"/>
</Bookmark:layout>
</Bookmark:BookmarkDataGroup>
</s:Scroller>
</s:Group>
</viewer:WidgetTemplate>
</viewer:BaseWidget>