About the Add a custom bookmarks MultiItem to the ToolbarControl Sample
[C#]
SpatialBookmarks.cs
using System;
using ESRI.ArcGIS.SystemUI;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Controls;
using ESRI.ArcGIS.Carto;
namespace MultiItemBookmarks
{
public class SpatialBookmarks : IMultiItem
{
private IHookHelper m_HookHelper;
public SpatialBookmarks()
{
m_HookHelper = new HookHelperClass();
}
public int get_ItemBitmap(int index)
{
return 0;
}
public string get_ItemCaption(int index)
{
//Get the bookmarks of the focus map
IMapBookmarks mapBookmarks = (IMapBookmarks) m_HookHelper.FocusMap;
//Get bookmarks enumerator
IEnumSpatialBookmark enumSpatialBookmarks = mapBookmarks.Bookmarks;
enumSpatialBookmarks.Reset();
//Loop through the bookmarks to get bookmark names
ISpatialBookmark spatialBookmark = enumSpatialBookmarks.Next();
int bookmarkCount = 0;
while (spatialBookmark != null)
{
//Get the correct bookmark
if (bookmarkCount == index)
{
//Return the bookmark name
return spatialBookmark.Name;
}
bookmarkCount = bookmarkCount + 1;
spatialBookmark = enumSpatialBookmarks.Next();
}
return "";
}
public bool get_ItemChecked(int index)
{
return false;
}
public bool get_ItemEnabled(int index)
{
return true;
}
public void OnItemClick(int index)
{
//Get the bookmarks of the focus map
IMapBookmarks mapBookmarks = (IMapBookmarks) m_HookHelper.FocusMap;
//Get bookmarks enumerator
IEnumSpatialBookmark enumSpatialBookmarks = mapBookmarks.Bookmarks;
enumSpatialBookmarks.Reset();
//Loop through the bookmarks to get bookmark to zoom to
ISpatialBookmark spatialBookmark = enumSpatialBookmarks.Next();
int bookmarkCount = 0;
while (spatialBookmark != null)
{
//Get the correct bookmark
if (bookmarkCount == index)
{
//Zoom to the bookmark
spatialBookmark.ZoomTo(m_HookHelper.FocusMap);
//Refresh the map
m_HookHelper.ActiveView.Refresh();
}
bookmarkCount = bookmarkCount + 1;
spatialBookmark = enumSpatialBookmarks.Next();
}
}
public int OnPopup(object hook)
{
m_HookHelper.Hook = hook;
//Get the bookmarks of the focus map
IMapBookmarks mapBookmarks = (IMapBookmarks) m_HookHelper.FocusMap;
//Get bookmarks enumerator
IEnumSpatialBookmark enumSpatialBookmarks = mapBookmarks.Bookmarks;
enumSpatialBookmarks.Reset();
//Loop through the bookmarks to count them
ISpatialBookmark spatialBookmark = enumSpatialBookmarks.Next();
int bookmarkCount = 0;
while (spatialBookmark != null)
{
bookmarkCount = bookmarkCount + 1;
spatialBookmark = enumSpatialBookmarks.Next();
}
//Return the number of multiitems
return bookmarkCount;
}
public string Caption
{
get
{
return "Spatial Bookmarks";
}
}
public int HelpContextID
{
get
{
return 0;
}
}
public string HelpFile
{
get
{
return null;
}
}
public string Message
{
get
{
return "Spatial bookmarks in the focus map";
}
}
public string Name
{
get
{
return "Spatial Bookmarks";
}
}
}
}
[Visual Basic .NET]
SpatialBookmarks.vb
Option Strict Off
Option Explicit On
Imports ESRI.ArcGIS.SystemUI
Imports ESRI.ArcGIS.esriSystem
Imports ESRI.ArcGIS.Controls
Imports ESRI.ArcGIS.Carto
Friend Class SpatialBookmarksMultiItem
Implements IMultiItem
Private m_pHookHelper As IHookHelper
Public Sub New()
MyBase.New()
m_pHookHelper = New HookHelperClass
End Sub
Protected Overrides Sub Finalize()
m_pHookHelper = Nothing
End Sub
Private ReadOnly Property IMultiItem_Caption() As String Implements IMultiItem.Caption
Get
Return "Spatial Bookmarks"
End Get
End Property
Private ReadOnly Property IMultiItem_HelpContextID() As Integer Implements IMultiItem.HelpContextID
Get
'Not implemented
End Get
End Property
Private ReadOnly Property IMultiItem_HelpFile() As String Implements IMultiItem.HelpFile
Get
Return ""
End Get
End Property
Private ReadOnly Property IMultiItem_ItemCaption(ByVal index As Integer) As String Implements IMultiItem.ItemCaption
Get
'Get the bookmarks of the focus map
Dim pMapBookmarks As IMapBookmarks
pMapBookmarks = m_pHookHelper.FocusMap
'Get bookmarks enumerator
Dim pEnumSpatialBookmarks As IEnumSpatialBookmark
pEnumSpatialBookmarks = pMapBookmarks.Bookmarks
pEnumSpatialBookmarks.Reset()
'Loop through the bookmarks to get bookmark names
Dim pSpatialBookmark As ISpatialBookmark
Dim bookmarkCount As Integer
pSpatialBookmark = pEnumSpatialBookmarks.Next
bookmarkCount = 0
Do Until pSpatialBookmark Is Nothing
'Get the correct bookmark
If bookmarkCount = index Then
'Return the bookmark name
Return pSpatialBookmark.Name
Exit Do
End If
bookmarkCount = bookmarkCount + 1
pSpatialBookmark = pEnumSpatialBookmarks.Next
Loop
Return ""
End Get
End Property
Private ReadOnly Property IMultiItem_ItemChecked(ByVal index As Integer) As Boolean Implements IMultiItem.ItemChecked
Get
'Not implemented
End Get
End Property
Private ReadOnly Property IMultiItem_ItemEnabled(ByVal index As Integer) As Boolean Implements IMultiItem.ItemEnabled
Get
Return True
End Get
End Property
Private ReadOnly Property IMultiItem_Message() As String Implements IMultiItem.Message
Get
Return "Spatial bookmarks in the focus map"
End Get
End Property
Private ReadOnly Property IMultiItem_Name() As String Implements IMultiItem.Name
Get
Return "Spatial Bookmarks"
End Get
End Property
Private Sub IMultiItem_OnItemClick(ByVal index As Integer) Implements IMultiItem.OnItemClick
'Get the bookmarks of the focus map
Dim pMapBookmarks As IMapBookmarks
pMapBookmarks = m_pHookHelper.FocusMap
'Get bookmarks enumerator
Dim pEnumSpatialBookmarks As IEnumSpatialBookmark
pEnumSpatialBookmarks = pMapBookmarks.Bookmarks
pEnumSpatialBookmarks.Reset()
'Loop through the bookmarks to get bookmark to zoom to
Dim pSpatialBookmark As ISpatialBookmark
Dim bookmarkCount As Integer
pSpatialBookmark = pEnumSpatialBookmarks.Next
bookmarkCount = 0
Do Until pSpatialBookmark Is Nothing
'Get the correct bookmark
If bookmarkCount = index Then
'Zoom to the bookmark
pSpatialBookmark.ZoomTo(m_pHookHelper.FocusMap)
'Refresh the map
m_pHookHelper.ActiveView.Refresh()
Exit Do
End If
bookmarkCount = bookmarkCount + 1
pSpatialBookmark = pEnumSpatialBookmarks.Next
Loop
End Sub
Private Function IMultiItem_OnPopup(ByVal hook As Object) As Integer Implements IMultiItem.OnPopup
m_pHookHelper.Hook = hook
'Get the bookmarks of the focus map
Dim pMapBookmarks As IMapBookmarks
pMapBookmarks = m_pHookHelper.FocusMap
'Get bookmarks enumerator
Dim pEnumSpatialBookmarks As IEnumSpatialBookmark
pEnumSpatialBookmarks = pMapBookmarks.Bookmarks
pEnumSpatialBookmarks.Reset()
'Loop through the bookmarks to count them
Dim pSpatialBookmark As ISpatialBookmark
Dim bookmarkCount As Integer
pSpatialBookmark = pEnumSpatialBookmarks.Next
bookmarkCount = 0
Do Until pSpatialBookmark Is Nothing
bookmarkCount = bookmarkCount + 1
pSpatialBookmark = pEnumSpatialBookmarks.Next
Loop
'Return the number of multiitems
IMultiItem_OnPopup = bookmarkCount
End Function
Public ReadOnly Property ItemBitmap(ByVal index As Integer) As Integer Implements ESRI.ArcGIS.SystemUI.IMultiItem.ItemBitmap
Get
End Get
End Property
End Class