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

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

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

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

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

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

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

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

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

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

@ -98,11 +98,17 @@ namespace ICSharpCode.FormsDesigner.Services
{ {
return FindCommand(CommandIDEnumConverter.ToCommandID(command)).Enabled; return FindCommand(CommandIDEnumConverter.ToCommandID(command)).Enabled;
} }
public void GlobalInvoke(CommandIDEnum command)
{
GlobalInvoke(CommandIDEnumConverter.ToCommandID(command));
}
} }
public interface IMenuCommandServiceProxy public interface IMenuCommandServiceProxy
{ {
bool IsCommandEnabled(CommandIDEnum command); bool IsCommandEnabled(CommandIDEnum command);
void GlobalInvoke(CommandIDEnum command);
} }
public interface IDesignerVerbProxy public interface IDesignerVerbProxy
@ -138,4 +144,66 @@ namespace ICSharpCode.FormsDesigner.Services
verb.Invoke(); 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