152 lines
4.2 KiB
C#
152 lines
4.2 KiB
C#
using System;
|
|
using System.ComponentModel;
|
|
using System.ComponentModel.Design;
|
|
using System.Windows.Forms;
|
|
using System.Windows.Forms.ComponentModel;
|
|
using System.Windows.Forms.Design;
|
|
using System.Drawing.Design;
|
|
using System.Globalization;
|
|
|
|
namespace DevComponents.DotNetBar
|
|
{
|
|
/// <summary>
|
|
/// Summary description for ShortcutsDesigner.
|
|
/// </summary>
|
|
public class ShortcutsDesigner:UITypeEditor
|
|
{
|
|
private IWindowsFormsEditorService m_EdSvc = null;
|
|
|
|
public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
|
|
{
|
|
if (context != null && context.Instance != null)
|
|
{
|
|
return UITypeEditorEditStyle.DropDown;
|
|
}
|
|
return base.GetEditStyle(context);
|
|
}
|
|
|
|
public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
|
|
{
|
|
|
|
if (context!=null && context.Instance!=null && provider!=null)
|
|
{
|
|
m_EdSvc=(IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));
|
|
if(m_EdSvc!=null)
|
|
{
|
|
ShortcutsListBox lst=null;
|
|
if(context.Instance is BaseItem)
|
|
lst=new ShortcutsListBox(((BaseItem)context.Instance).Shortcuts);
|
|
else if(context.Instance is DotNetBarManager)
|
|
lst=new ShortcutsListBox(((DotNetBarManager)context.Instance).AutoDispatchShortcuts);
|
|
else if(context.Instance!=null)
|
|
System.Windows.Forms.MessageBox.Show("Unknow control using shortcuts. Cannot edit shortcuts. ["+context.Instance.ToString()+"]");
|
|
else
|
|
System.Windows.Forms.MessageBox.Show("Unknow control using shortcuts. Cannot edit shortcuts. [context instance null]");
|
|
if(lst!=null)
|
|
{
|
|
m_EdSvc.DropDownControl(lst);
|
|
value=lst.Shortcuts();
|
|
((ShortcutsCollection)value).Parent=context.Instance as BaseItem;
|
|
}
|
|
}
|
|
}
|
|
|
|
return value;
|
|
}
|
|
|
|
private class ShortcutsListBox:CheckedListBox
|
|
{
|
|
public ShortcutsListBox(ShortcutsCollection editingInstance):base()
|
|
{
|
|
// Load all shortcuts
|
|
Array a=eShortcut.GetValues(typeof(eShortcut));
|
|
for(int i=1;i<a.Length;i++)
|
|
{
|
|
NameValue nv=new NameValue(eShortcut.GetName(typeof(eShortcut),a.GetValue(i)),(eShortcut)a.GetValue(i));
|
|
if(editingInstance.Contains((eShortcut)a.GetValue(i)))
|
|
{
|
|
this.Items.Add(nv,System.Windows.Forms.CheckState.Checked);
|
|
}
|
|
else
|
|
this.Items.Add(nv,System.Windows.Forms.CheckState.Unchecked);
|
|
}
|
|
}
|
|
|
|
public ShortcutsCollection Shortcuts()
|
|
{
|
|
ShortcutsCollection sl=new ShortcutsCollection(null);
|
|
foreach(NameValue nv in this.CheckedItems)
|
|
sl.Add(nv.Key);
|
|
return sl;
|
|
}
|
|
|
|
private struct NameValue
|
|
{
|
|
public NameValue(string name,eShortcut k)
|
|
{
|
|
Name=name;
|
|
Key=k;
|
|
}
|
|
public override string ToString()
|
|
{
|
|
return Name;
|
|
}
|
|
public string Name;
|
|
public eShortcut Key;
|
|
}
|
|
}
|
|
}
|
|
public class ShortcutsConverter:TypeConverter
|
|
{
|
|
public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
|
|
{
|
|
if (sourceType == typeof(string))
|
|
{
|
|
return true;
|
|
}
|
|
return base.CanConvertFrom(context, sourceType);
|
|
}
|
|
// Overrides the ConvertFrom method of TypeConverter.
|
|
public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
|
|
{
|
|
if(value is string)
|
|
{
|
|
return this.FromString((string)value);
|
|
}
|
|
return base.ConvertFrom(context, culture, value);
|
|
}
|
|
// Overrides the ConvertTo method of TypeConverter.
|
|
public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
|
|
{
|
|
if (destinationType == typeof(string))
|
|
{
|
|
ShortcutsCollection sl=(ShortcutsCollection)value;
|
|
System.Text.StringBuilder sb=new System.Text.StringBuilder();
|
|
|
|
for(int i=0;i<sl.Count;i++)
|
|
{
|
|
sb.Append(eShortcut.GetName(typeof(eShortcut),sl[i]));
|
|
if(i<sl.Count-1)
|
|
sb.Append(",");
|
|
}
|
|
|
|
return sb.ToString();
|
|
}
|
|
return base.ConvertTo(context, culture, value, destinationType);
|
|
}
|
|
|
|
private ShortcutsCollection FromString(string str)
|
|
{
|
|
ShortcutsCollection sl=new ShortcutsCollection(null);
|
|
if(str=="" || str==null)
|
|
return sl;
|
|
string[] v=str.Split(',');
|
|
for(int i=0;i<v.Length;i++)
|
|
{
|
|
sl.Add((eShortcut)eShortcut.Parse(typeof(eShortcut),v[i],true));
|
|
}
|
|
return sl;
|
|
}
|
|
}
|
|
}
|