Recently used files—Command, MultiItem, and ComboBox
[C#]
RecentFilesCombo.cs
using System;
using System.IO;
using System.Drawing;
using System.Runtime.InteropServices;
using ESRI.ArcGIS.ADF.BaseClasses;
using ESRI.ArcGIS.ADF.CATIDs;
using ESRI.ArcGIS.Framework;
using ESRI.ArcGIS.SystemUI;
namespace RecentFilesCommandsCS
{
/// <summary>
/// Command that works in ArcMap/Map/PageLayout, ArcScene/SceneControl
/// or ArcGlobe/GlobeControl
/// </summary>
[Guid("39b803a3-4bbb-4099-b4d9-89273af3685d")]
[ClassInterface(ClassInterfaceType.None)]
[ProgId("RecentFilesCommandsCS.RecentFilesCombo")]
public sealed class RecentFilesCombo : BaseCommand, IComboBox
{
#region COM Registration Function(s)
[ComRegisterFunction()]
[ComVisible(false)]
static void RegisterFunction(Type registerType)
{
// Required for ArcGIS Component Category Registrar support
ArcGISCategoryRegistration(registerType);
}
[ComUnregisterFunction()]
[ComVisible(false)]
static void UnregisterFunction(Type registerType)
{
// Required for ArcGIS Component Category Registrar support
ArcGISCategoryUnregistration(registerType);
}
#region ArcGIS Component Category Registrar generated code
/// <summary>
/// Required method for ArcGIS Component Category registration -
/// Do not modify the contents of this method with the code editor.
/// </summary>
private static void ArcGISCategoryRegistration(Type registerType)
{
string regKey = string.Format("HKEY_CLASSES_ROOT\\CLSID\\{{{0}}}", registerType.GUID);
GMxCommands.Register(regKey);
MxCommands.Register(regKey);
SxCommands.Register(regKey);
ControlsCommands.Register(regKey);
}
/// <summary>
/// Required method for ArcGIS Component Category unregistration -
/// Do not modify the contents of this method with the code editor.
/// </summary>
private static void ArcGISCategoryUnregistration(Type registerType)
{
string regKey = string.Format("HKEY_CLASSES_ROOT\\CLSID\\{{{0}}}", registerType.GUID);
GMxCommands.Unregister(regKey);
MxCommands.Unregister(regKey);
SxCommands.Unregister(regKey);
ControlsCommands.Unregister(regKey);
}
#endregion
#endregion
private IApplication m_application;
private System.Collections.Generic.Dictionary<int, string> m_itemMap;
private string m_strWidth = @"c:\documents\map documents";
public RecentFilesCombo()
{
m_itemMap = new System.Collections.Generic.Dictionary<int, string>();
base.m_category = ".NET Samples";
base.m_caption = "Recent Documents: ";
base.m_message = "Recent Documents";
base.m_toolTip = "Recent Documents";
base.m_name = "RecentDocsCombo";
}
#region Overriden Class Methods
/// <summary>
/// Occurs when this command is created
/// </summary>
/// <param name="hook">Instance of the application</param>
public override void OnCreate(object hook)
{
IComboBoxHook comboHook = hook as IComboBoxHook;
if (comboHook == null)
{
m_enabled = false;
return;
}
m_application = comboHook.Hook as IApplication;
int cookie = 0;
foreach (string fileName in RecentFilesRegistryHelper.GetRecentFiles(m_application))
{
if (File.Exists(fileName))
{
//Add item to list
cookie = comboHook.Add(fileName);
m_itemMap.Add(cookie, fileName);
}
}
}
/// <summary>
/// Occurs when this command is clicked
/// </summary>
public override void OnClick()
{
}
#endregion
#region IComboBox Members
public int DropDownHeight
{
get { return 50; }
}
public string DropDownWidth
{
get { return m_strWidth; }
}
public bool Editable
{
get { return false; }
}
public string HintText
{
get { return "Select document"; }
}
public void OnEditChange(string editString)
{
}
public void OnEnter()
{
}
public void OnFocus(bool set)
{
}
public void OnSelChange(int cookie)
{
string selectedPath = m_itemMap[cookie];
m_application.OpenDocument(selectedPath);
}
public bool ShowCaption
{
get { return false; }
}
public string Width
{
get { return m_strWidth; }
}
#endregion
}
}
[Visual Basic .NET]
RecentFilesCombo.vb
Imports System.IO
Imports System.Runtime.InteropServices
Imports System.Drawing
Imports ESRI.ArcGIS.ADF.BaseClasses
Imports ESRI.ArcGIS.ADF.CATIDs
Imports ESRI.ArcGIS.Framework
Imports ESRI.ArcGIS.SystemUI
<ComClass(RecentFilesCombo.ClassId, RecentFilesCombo.InterfaceId, RecentFilesCombo.EventsId), _
ProgId("RecentFilesCommandsVB.RecentFilesCombo")> _
Public NotInheritable Class RecentFilesCombo
Inherits BaseCommand
Implements IComboBox
#Region "COM GUIDs"
' These GUIDs provide the COM identity for this class
' and its COM interfaces. If you change them, existing
' clients will no longer be able to access the class.
Public Const ClassId As String = "3b7bd3f6-246d-4761-8996-aa1409281cef"
Public Const InterfaceId As String = "e88f97f3-afc2-41a0-a6a0-6375f1a3d6cf"
Public Const EventsId As String = "077db9cd-d208-4452-8266-26b4fbae5ff0"
#End Region
#Region "COM Registration Function(s)"
<ComRegisterFunction(), ComVisibleAttribute(False)> _
Public Shared Sub RegisterFunction(ByVal registerType As Type)
' Required for ArcGIS Component Category Registrar support
ArcGISCategoryRegistration(registerType)
'Add any COM registration code after the ArcGISCategoryRegistration() call
End Sub
<ComUnregisterFunction(), ComVisibleAttribute(False)> _
Public Shared Sub UnregisterFunction(ByVal registerType As Type)
' Required for ArcGIS Component Category Registrar support
ArcGISCategoryUnregistration(registerType)
'Add any COM unregistration code after the ArcGISCategoryUnregistration() call
End Sub
#Region "ArcGIS Component Category Registrar generated code"
Private Shared Sub ArcGISCategoryRegistration(ByVal registerType As Type)
Dim regKey As String = String.Format("HKEY_CLASSES_ROOT\CLSID\{{{0}}}", registerType.GUID)
MxCommands.Register(regKey)
End Sub
Private Shared Sub ArcGISCategoryUnregistration(ByVal registerType As Type)
Dim regKey As String = String.Format("HKEY_CLASSES_ROOT\CLSID\{{{0}}}", registerType.GUID)
MxCommands.Unregister(regKey)
End Sub
#End Region
#End Region
Private m_application As IApplication
Private m_itemMap As System.Collections.Generic.Dictionary(Of Integer, String)
Private m_strWidth As String = "c:\documents\map documents"
' A creatable COM class must have a Public Sub New()
' with no parameters, otherwise, the class will not be
' registered in the COM registry and cannot be created
' via CreateObject.
Public Sub New()
MyBase.New()
MyBase.m_category = ".NET Samples"
MyBase.m_caption = "Recent Documents: "
MyBase.m_message = "Recent Documents"
MyBase.m_toolTip = "Recent Documents"
MyBase.m_name = "RecentDocsCombo"
m_itemMap = New System.Collections.Generic.Dictionary(Of Integer, String)()
End Sub
Public Overrides Sub OnCreate(ByVal hook As Object)
Dim comboHook As IComboBoxHook = TryCast(hook, IComboBoxHook)
If comboHook Is Nothing Then
m_enabled = False
Return
End If
m_application = TryCast(comboHook.Hook, IApplication)
Dim cookie As Integer = 0
For Each fileName As String In RecentFilesRegistryHelper.GetRecentFiles(m_application)
If File.Exists(fileName) Then
'Add item to list
cookie = comboHook.Add(fileName)
m_itemMap.Add(cookie, fileName)
End If
Next
End Sub
Public Overrides Sub OnClick()
End Sub
Public ReadOnly Property DropDownHeight() As Integer Implements ESRI.ArcGIS.SystemUI.IComboBox.DropDownHeight
Get
Return 50
End Get
End Property
Public ReadOnly Property DropDownWidth() As String Implements ESRI.ArcGIS.SystemUI.IComboBox.DropDownWidth
Get
Return m_strWidth
End Get
End Property
Public ReadOnly Property Editable() As Boolean Implements ESRI.ArcGIS.SystemUI.IComboBox.Editable
Get
Return False
End Get
End Property
Public ReadOnly Property HintText() As String Implements ESRI.ArcGIS.SystemUI.IComboBox.HintText
Get
Return "Select document"
End Get
End Property
Public Sub OnEditChange(ByVal editString As String) Implements ESRI.ArcGIS.SystemUI.IComboBox.OnEditChange
End Sub
Public Sub OnEnter() Implements ESRI.ArcGIS.SystemUI.IComboBox.OnEnter
End Sub
Public Sub OnFocus(ByVal [set] As Boolean) Implements ESRI.ArcGIS.SystemUI.IComboBox.OnFocus
End Sub
Public Sub OnSelChange(ByVal cookie As Integer) Implements ESRI.ArcGIS.SystemUI.IComboBox.OnSelChange
Dim selectedPath As String = m_itemMap(cookie)
m_application.OpenDocument(selectedPath)
End Sub
Public ReadOnly Property ShowCaption() As Boolean Implements ESRI.ArcGIS.SystemUI.IComboBox.ShowCaption
Get
Return False
End Get
End Property
Public ReadOnly Property Width() As String Implements ESRI.ArcGIS.SystemUI.IComboBox.Width
Get
Return m_strWidth
End Get
End Property
End Class