using ESRI.ArcGIS.Editor;
using ESRI.ArcGIS.Framework;
using ESRI.ArcGIS.esriSystem;
namespace RestartSketch
{
/// <summary>
/// Editor Extension to add a context menu item
/// </summary>
public class RSExt : ESRI.ArcGIS.Desktop.AddIns.Extension
{
private IEditEvents_Event m_editEvents;
public RSExt()
{
}
protected override void OnStartup()
{
m_editEvents = ArcMap.Editor as IEditEvents_Event;
m_editEvents.OnStartEditing += new IEditEvents_OnStartEditingEventHandler(m_editEvents_OnStartEditing);
}
void m_editEvents_OnStartEditing()
{
//Add to various sketch context menus by guid and bottom up position
//AddtoContextMenu("{02D578D0-42AB-11d2-84D6-0000F875B9C6}", 3); //straight constructor context menu
//AddtoContextMenu("{066022E8-A0FD-48e5-AF5D-F5C77E88DD42}", 3); //trace constructor
//AddtoContextMenu("{68A337DF-751B-45dd-AA39-91194BE88D7C}", 3); //other constructors
AddtoContextMenu("{FD799450-472C-11d2-84D8-0000F875B9C6}", 3); //over a sketch
}
private void AddtoContextMenu(string cmg, int pos)
{
// Get the context menu
UID contextMenuUID = new UIDClass();
contextMenuUID.Value = cmg;
ICommandBar contextMenu = ArcMap.Application.Document.CommandBars.Find(contextMenuUID) as ICommandBar;
if (contextMenu != null)
{
// Get the command item you want to add
UID commandUID = new UIDClass();
commandUID.Value = "ESRI_RestartSketch_RestartSketchCmd";
//Check if it is already present on the context menu...
ICommandItem myCmdItem = contextMenu.Find(commandUID);
if (myCmdItem == null)
{
myCmdItem = contextMenu.Add(commandUID, contextMenu.Count - pos);
//myCmdItem.Group = true;
myCmdItem.Refresh();
}
}
}
}
}
protected override void OnStartup()
{
WireEvents();
}
private void WireEvents()
{
ArcMap.Events.OpenDocument +=
new ESRI.ArcGIS.ArcMapUI.IDocumentEvents_OpenDocumentEventHandler(Events_OpenDocument);
ArcMap.Events.NewDocument +=
new ESRI.ArcGIS.ArcMapUI.IDocumentEvents_NewDocumentEventHandler(Events_NewDocument);
}
void Events_OpenDocument()
{
System.Diagnostics.Debug.WriteLine("**** Events_OpenDocument ****");
LoadContextMenu();
}
void Events_NewDocument()
{
System.Diagnostics.Debug.WriteLine("**** Events_NewDocument ****");
LoadContextMenu();
}
private void LoadContextMenu()
{
ICommandBars cmdBars = ArcMap.Application.Document.CommandBars;
UID contextMenuUID = new UIDClass();
contextMenuUID.Value = "{BF643199-9062-11D2-AE71-080009EC732A}"; //esriArcMapUI.FeatureLayerContextMenu
ICommandBar contextMenu = cmdBars.Find(contextMenuUID, false, true) as ICommandBar;
if (contextMenu != null)
{
// Get the command item you want to add
UID commandUID = new UIDClass();
commandUID.Value = "Test_TestParaTextButton"; // Add-in button ID
//Check if it is already present on the context menu.
ICommandItem myCmdItem = contextMenu.Find(commandUID, false);
if (myCmdItem == null)
{
Object pos = contextMenu.Count - 1;
myCmdItem = contextMenu.Add(commandUID, ref pos);
//myCmdItem.Group = true;
myCmdItem.Refresh();
}
}
else
{
System.Diagnostics.Debug.WriteLine("**** contextMenu is null ****");
}
}
Imports ESRI.ArcGIS.ArcMapUI
Imports ESRI.ArcGIS.Framework
Public Class CycleThrough
Inherits ESRI.ArcGIS.Desktop.AddIns.Extension
Public Sub New()
End Sub
Protected Overrides Sub OnStartup()
WireEvents()
End Sub
Protected Overrides Sub OnShutdown()
End Sub
Private Sub WireEvents()
Dim docEvents As IDocumentEvents_Event
Dim mapStatusEvents As IApplicationStatusEvents_Event
docEvents = TryCast(My.ArcMap.Application.Document, IDocumentEvents_Event)
AddHandler docEvents.NewDocument, AddressOf OnNewDocument
AddHandler docEvents.OpenDocument, AddressOf OnOpenDocument
If TypeOf My.ArcMap.Application.Document.Parent Is IMxApplication Then
mapStatusEvents = TryCast(My.ArcMap.Application.Document.Parent, IApplicationStatusEvents_Event)
AddHandler mapStatusEvents.Initialized, AddressOf OnInitialized
End If
End Sub
Private Sub OnNewDocument()
SetupContext()
End Sub
Private Sub OnOpenDocument()
SetupContext()
End Sub
Private Sub OnInitialized()
SetupContext()
End Sub
Private Sub SetupContext()
Dim contextMenuGUID As New UID
contextMenuGUID.Value = "{BF643199-9062-11D2-AE71-080009EC732A}"
Dim myContextMenu As ICommandBar = My.ArcMap.Application.Document.CommandBars.Find(contextMenuGUID, False, False)
If myContextMenu IsNot Nothing Then
Dim commandGUID As New UID
commandGUID.Value = "LayerCycle_CycleButton"
Dim myCommandItem As ICommandItem = myContextMenu.Find(commandGUID)
If myCommandItem Is Nothing Then
myCommandItem = myContextMenu.Add(commandGUID, 9) 'the 9 is where I happen to want the button to be, it could be nothing or any other value
myCommandItem.Refresh()
End If
End If
End Sub
End Class