Browse Source

fix issues with FormKeyHandler

formsdesignerappdomain
Siegfried Pammer 14 years ago
parent
commit
46e42a95fe
  1. 33
      src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/FormKeyHandler.cs
  2. 1
      src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/FormsDesigner.AddIn.csproj
  3. 4
      src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/FormsDesignerViewContent.cs
  4. 1
      src/AddIns/DisplayBindings/FormsDesigner/Project/FormsDesigner.csproj
  5. 10
      src/AddIns/DisplayBindings/FormsDesigner/Project/FormsDesignerAppDomainHost.cs
  6. 68
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/MenuCommandService.cs

33
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/FormKeyHandler.cs → src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/FormKeyHandler.cs

@ -6,30 +6,36 @@ using System.Collections; @@ -6,30 +6,36 @@ using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Diagnostics;
using System.Reflection;
using System.Windows.Forms;
using System.Windows.Forms.Design;
using ICSharpCode.Core;
using ICSharpCode.FormsDesigner.Services;
namespace ICSharpCode.FormsDesigner
{
public sealed class FormKeyHandler : IMessageFilter
public sealed class FormKeyHandler : MarshalByRefObject, IMessageFilter
{
const int keyPressedMessage = 0x100;
const int leftMouseButtonDownMessage = 0x0202;
readonly Dictionary<Keys, CommandWrapper> keyTable = new Dictionary<Keys, CommandWrapper>();
FormsDesignerAppDomainHost host;
FormsDesignerViewContent formsDesigner;
public static bool inserted = false;
public static void Insert(FormsDesignerAppDomainHost host)
public static void Insert(FormsDesignerViewContent formsDesigner)
{
Debug.Assert(!DesignerAppDomainManager.IsDesignerDomain);
inserted = true;
Application.AddMessageFilter(new FormKeyHandler(host));
Application.AddMessageFilter(new FormKeyHandler(formsDesigner));
}
public FormKeyHandler(FormsDesignerAppDomainHost host)
public FormKeyHandler(FormsDesignerViewContent formsDesigner)
{
this.host = host;
Debug.Assert(!DesignerAppDomainManager.IsDesignerDomain);
this.formsDesigner = formsDesigner;
// normal keys
keyTable[Keys.Left] = new CommandWrapper(MenuCommands.KeyMoveLeft);
@ -68,8 +74,6 @@ namespace ICSharpCode.FormsDesigner @@ -68,8 +74,6 @@ namespace ICSharpCode.FormsDesigner
return false;
}
IFormsDesigner formsDesigner = host.GetService(typeof(IFormsDesigner)) as IFormsDesigner;
if (formsDesigner == null || (formsDesigner.DesignerContent != null && !((Control)formsDesigner.DesignerContent).ContainsFocus)) {
return false;
}
@ -98,10 +102,11 @@ namespace ICSharpCode.FormsDesigner @@ -98,10 +102,11 @@ namespace ICSharpCode.FormsDesigner
return false;
}
}
host.LoggingService.Debug("Run menu command: " + commandWrapper.CommandID);
var host = formsDesigner.AppDomainHost;
LoggingService.Debug("Run menu command: " + commandWrapper.CommandID);
IMenuCommandService menuCommandService = host.MenuCommandService;
ISelectionService selectionService = (ISelectionService)host.GetService(typeof(ISelectionService));
IMenuCommandServiceProxy menuCommandService = (IMenuCommandServiceProxy)host.MenuCommandService;
ISelectionService selectionService = host.SelectionService;
ICollection components = selectionService.GetSelectedComponents();
if (components.Count == 1) {
foreach (IComponent component in components) {
@ -110,7 +115,7 @@ namespace ICSharpCode.FormsDesigner @@ -110,7 +115,7 @@ namespace ICSharpCode.FormsDesigner
}
}
menuCommandService.GlobalInvoke(commandWrapper.CommandID);
menuCommandService.GlobalInvoke(CommandIDEnumConverter.ToCommandIDEnum(commandWrapper.CommandID));
if (commandWrapper.RestoreSelection) {
selectionService.SetSelectedComponents(components);
@ -126,9 +131,9 @@ namespace ICSharpCode.FormsDesigner @@ -126,9 +131,9 @@ namespace ICSharpCode.FormsDesigner
Assembly asm = typeof(WindowsFormsDesignerOptionService).Assembly;
// Microsoft made ToolStripKeyboardHandlingService internal, so we need Reflection
Type keyboardType = asm.GetType("System.Windows.Forms.Design.ToolStripKeyboardHandlingService");
object keyboardService = host.GetService(keyboardType);
object keyboardService = formsDesigner.AppDomainHost.GetService(keyboardType);
if (keyboardService == null) {
host.LoggingService.Debug("no ToolStripKeyboardHandlingService found");
LoggingService.Debug("no ToolStripKeyboardHandlingService found");
return false; // handle command normally
}
if (activeComponent is ToolStripItem) {

1
src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/FormsDesigner.AddIn.csproj

@ -88,6 +88,7 @@ @@ -88,6 +88,7 @@
<Compile Include="DesignerLoader\DesignerLoaderProvider.cs" />
<Compile Include="DesignerLoader\NRefactoryDesignerLoader.cs" />
<Compile Include="DesignerSourceCodeStorage.cs" />
<Compile Include="FormKeyHandler.cs" />
<Compile Include="FormsDesignerLoggingServiceImpl.cs" />
<Compile Include="FormsDesignerViewContent.cs" />
<Compile Include="ImageResourceEditorDialog.cs" />

4
src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/FormsDesignerViewContent.cs

@ -168,6 +168,10 @@ namespace ICSharpCode.FormsDesigner @@ -168,6 +168,10 @@ namespace ICSharpCode.FormsDesigner
toolbox = new ToolboxProvider(appDomainHost);
appDomainHost.UseSDAssembly(typeof(CustomWindowsFormsHost).Assembly.FullName, typeof(CustomWindowsFormsHost).Assembly.Location);
if (!FormKeyHandler.inserted) {
FormKeyHandler.Insert(this);
}
Application.Idle += ApplicationIdle;
}

1
src/AddIns/DisplayBindings/FormsDesigner/Project/FormsDesigner.csproj

@ -67,7 +67,6 @@ @@ -67,7 +67,6 @@
<Compile Include="Src\DesignerLoader\SharpDevelopDesignerLoader.cs" />
<Compile Include="Src\DesignerLoader\IDesignerLoader.cs" />
<Compile Include="Src\EventHandlerProxy.cs" />
<Compile Include="Src\FormKeyHandler.cs" />
<Compile Include="Src\Gui\ComponentLibraryLoader.cs" />
<Compile Include="Src\Gui\CustomComponentToolBoxItem.cs" />
<Compile Include="Src\Gui\PropertyPadContent.cs" />

10
src/AddIns/DisplayBindings/FormsDesigner/Project/FormsDesignerAppDomainHost.cs

@ -107,10 +107,6 @@ namespace ICSharpCode.FormsDesigner @@ -107,10 +107,6 @@ namespace ICSharpCode.FormsDesigner
// container.AddService(typeof(System.ComponentModel.Design.IResourceService), new DesignerResourceService(properties.ResourceStore, this));
InitializeEvents();
if (!FormKeyHandler.inserted) {
FormKeyHandler.Insert(this);
}
}
#region Events
@ -436,6 +432,12 @@ namespace ICSharpCode.FormsDesigner @@ -436,6 +432,12 @@ namespace ICSharpCode.FormsDesigner
}
}
public ISelectionService SelectionService {
get {
return new SelectionServiceProxy(GetService(typeof(ISelectionService)) as ISelectionService);
}
}
List<IDesignerVerbProxy> designerVerbs;
public List<IDesignerVerbProxy> CommandVerbs {

68
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/MenuCommandService.cs

@ -98,11 +98,17 @@ namespace ICSharpCode.FormsDesigner.Services @@ -98,11 +98,17 @@ namespace ICSharpCode.FormsDesigner.Services
{
return FindCommand(CommandIDEnumConverter.ToCommandID(command)).Enabled;
}
public void GlobalInvoke(CommandIDEnum command)
{
GlobalInvoke(CommandIDEnumConverter.ToCommandID(command));
}
}
public interface IMenuCommandServiceProxy
{
bool IsCommandEnabled(CommandIDEnum command);
void GlobalInvoke(CommandIDEnum command);
}
public interface IDesignerVerbProxy
@ -138,4 +144,66 @@ namespace ICSharpCode.FormsDesigner.Services @@ -138,4 +144,66 @@ namespace ICSharpCode.FormsDesigner.Services
verb.Invoke();
}
}
public class SelectionServiceProxy : MarshalByRefObject, ISelectionService
{
ISelectionService svc;
public SelectionServiceProxy(ISelectionService svc)
{
this.svc = svc;
this.svc.SelectionChanged += delegate { OnSelectionChanged(EventArgs.Empty); };
this.svc.SelectionChanging += delegate { OnSelectionChanging(EventArgs.Empty); };
}
public event EventHandler SelectionChanged;
protected virtual void OnSelectionChanged(EventArgs e)
{
if (SelectionChanged != null) {
SelectionChanged(this, e);
}
}
public event EventHandler SelectionChanging;
protected virtual void OnSelectionChanging(EventArgs e)
{
if (SelectionChanging != null) {
SelectionChanging(this, e);
}
}
public object PrimarySelection {
get {
return svc.PrimarySelection;
}
}
public int SelectionCount {
get {
return svc.SelectionCount;
}
}
public bool GetComponentSelected(object component)
{
return svc.GetComponentSelected(component);
}
public System.Collections.ICollection GetSelectedComponents()
{
return svc.GetSelectedComponents();
}
public void SetSelectedComponents(System.Collections.ICollection components)
{
svc.SetSelectedComponents(components);
}
public void SetSelectedComponents(System.Collections.ICollection components, SelectionTypes selectionType)
{
svc.SetSelectedComponents(components, selectionType);
}
}
}

Loading…
Cancel
Save