Browse Source

Fixed forms designer to reparse the file when switching to the designer tab.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@375 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 20 years ago
parent
commit
b32b9beb14
  1. 1
      src/AddIns/DisplayBindings/FormDesigner/Project/FormDesigner.csproj
  2. 9
      src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerGenerator/CSharpDesignerGenerator.cs
  3. 1
      src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerGenerator/IDesignerGenerator.cs
  4. 9
      src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerGenerator/VBNetDesignerGenerator.cs
  5. 5
      src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerGenerator/XmlDesignerGenerator.cs
  6. 51
      src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerLoader/DesignerLoaderProvider.cs
  7. 21
      src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerLoader/NRefactoryDesignerLoader.cs
  8. 12
      src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/FormDesignerSecondaryDisplayBinding.cs
  9. 40
      src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/FormDesignerViewContent.cs
  10. 3
      src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/FormKeyHandler.cs
  11. 4
      src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/Services/DesignerResourceService.cs

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

@ -106,6 +106,7 @@
<CopyToOutputDirectory>Always</CopyToOutputDirectory> <CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None> </None>
<Compile Include="Src\FormDesigner\DesignerGenerator\VBNetDesignerGenerator.cs" /> <Compile Include="Src\FormDesigner\DesignerGenerator\VBNetDesignerGenerator.cs" />
<Compile Include="Src\FormDesigner\DesignerLoader\DesignerLoaderProvider.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\..\..\..\Libraries\ICSharpCode.TextEditor\Project\ICSharpCode.TextEditor.csproj"> <ProjectReference Include="..\..\..\..\Libraries\ICSharpCode.TextEditor\Project\ICSharpCode.TextEditor.csproj">

9
src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerGenerator/CSharpDesignerGenerator.cs

@ -62,6 +62,15 @@ namespace ICSharpCode.FormDesigner
componentChangeService.ComponentRemoving += new ComponentEventHandler(ComponentRemoved); componentChangeService.ComponentRemoving += new ComponentEventHandler(ComponentRemoved);
} }
public void Detach()
{
IComponentChangeService componentChangeService = (IComponentChangeService)viewContent.DesignSurface.GetService(typeof(IComponentChangeService));
componentChangeService.ComponentAdded -= new ComponentEventHandler(ComponentAdded);
componentChangeService.ComponentRename -= new ComponentRenameEventHandler(ComponentRenamed);
componentChangeService.ComponentRemoving -= new ComponentEventHandler(ComponentRemoved);
this.viewContent = null;
}
void ComponentRemoved(object sender, ComponentEventArgs e) void ComponentRemoved(object sender, ComponentEventArgs e)
{ {
try { try {

1
src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerGenerator/IDesignerGenerator.cs

@ -48,6 +48,7 @@ namespace ICSharpCode.FormDesigner
public interface IDesignerGenerator public interface IDesignerGenerator
{ {
void Attach(FormDesignerViewContent viewContent); void Attach(FormDesignerViewContent viewContent);
void Detach();
void MergeFormChanges(); void MergeFormChanges();
bool InsertComponentEvent(IComponent component, EventDescriptor edesc, string eventMethodName, string body, out int position); bool InsertComponentEvent(IComponent component, EventDescriptor edesc, string eventMethodName, string body, out int position);
ICollection GetCompatibleMethods(EventDescriptor edesc); ICollection GetCompatibleMethods(EventDescriptor edesc);

9
src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerGenerator/VBNetDesignerGenerator.cs

@ -62,6 +62,15 @@ namespace ICSharpCode.FormDesigner
componentChangeService.ComponentRemoving += new ComponentEventHandler(ComponentRemoved); componentChangeService.ComponentRemoving += new ComponentEventHandler(ComponentRemoved);
} }
public void Detach()
{
IComponentChangeService componentChangeService = (IComponentChangeService)viewContent.DesignSurface.GetService(typeof(IComponentChangeService));
componentChangeService.ComponentAdded -= new ComponentEventHandler(ComponentAdded);
componentChangeService.ComponentRename -= new ComponentRenameEventHandler(ComponentRenamed);
componentChangeService.ComponentRemoving -= new ComponentEventHandler(ComponentRemoved);
this.viewContent = null;
}
void ComponentRemoved(object sender, ComponentEventArgs e) void ComponentRemoved(object sender, ComponentEventArgs e)
{ {
try { try {

5
src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerGenerator/XmlDesignerGenerator.cs

@ -28,6 +28,11 @@ namespace ICSharpCode.FormDesigner
this.viewContent = viewContent; this.viewContent = viewContent;
} }
public void Detach()
{
this.viewContent = null;
}
public void MergeFormChanges() public void MergeFormChanges()
{ {
StringWriter writer = new StringWriter(); StringWriter writer = new StringWriter();

51
src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerLoader/DesignerLoaderProvider.cs

@ -0,0 +1,51 @@
/*
* Created by SharpDevelop.
* User: Daniel Grunwald
* Date: 16.08.2005
* Time: 21:40
*/
using System;
using System.ComponentModel.Design.Serialization;
using ICSharpCode.TextEditor;
using ICSharpCode.NRefactory.Parser;
namespace ICSharpCode.FormDesigner
{
public interface IDesignerLoaderProvider
{
DesignerLoader CreateLoader();
}
public class NRefactoryDesignerLoaderProvider : IDesignerLoaderProvider
{
SupportedLanguages language;
TextEditorControl textEditorControl;
public NRefactoryDesignerLoaderProvider(SupportedLanguages language, TextEditorControl textEditorControl)
{
this.language = language;
this.textEditorControl = textEditorControl;
}
public DesignerLoader CreateLoader()
{
return new NRefactoryDesignerLoader(language, textEditorControl);
}
}
public class XmlDesignerLoaderProvider : IDesignerLoaderProvider
{
TextEditorControl textEditorControl;
public XmlDesignerLoaderProvider(TextEditorControl textEditorControl)
{
this.textEditorControl = textEditorControl;
}
public DesignerLoader CreateLoader()
{
return new XmlDesignerLoader(textEditorControl);
}
}
}

21
src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerLoader/NRefactoryDesignerLoader.cs

@ -47,9 +47,6 @@ namespace ICSharpCode.FormDesigner
SupportedLanguages language; SupportedLanguages language;
CodeDomProvider provider = new Microsoft.CSharp.CSharpCodeProvider(); CodeDomProvider provider = new Microsoft.CSharp.CSharpCodeProvider();
protected Hashtable resources = null;
bool isReloadNeeded = false;
TextEditorControl textEditorControl; TextEditorControl textEditorControl;
public string TextContent { public string TextContent {
@ -84,7 +81,7 @@ namespace ICSharpCode.FormDesigner
protected override bool IsReloadNeeded() protected override bool IsReloadNeeded()
{ {
return isReloadNeeded | base.IsReloadNeeded(); return base.IsReloadNeeded() || TextContent != lastTextContent;
} }
public NRefactoryDesignerLoader(SupportedLanguages language, TextEditorControl textEditorControl) public NRefactoryDesignerLoader(SupportedLanguages language, TextEditorControl textEditorControl)
@ -106,11 +103,14 @@ namespace ICSharpCode.FormDesigner
base.OnEndLoad(successful, errors); base.OnEndLoad(successful, errors);
} }
string lastTextContent;
protected override CodeCompileUnit Parse() protected override CodeCompileUnit Parse()
{ {
LoggingService.Debug("NRefactoryDesignerLoader.Parse()"); LoggingService.Debug("NRefactoryDesignerLoader.Parse()");
isReloadNeeded = false;
ICSharpCode.NRefactory.Parser.IParser p = ICSharpCode.NRefactory.Parser.ParserFactory.CreateParser(language, new StringReader(TextContent)); lastTextContent = TextContent;
ICSharpCode.NRefactory.Parser.IParser p = ICSharpCode.NRefactory.Parser.ParserFactory.CreateParser(language, new StringReader(lastTextContent));
p.Parse(); p.Parse();
// Try to fix the type names to fully qualified ones // Try to fix the type names to fully qualified ones
@ -125,6 +125,7 @@ namespace ICSharpCode.FormDesigner
// outputGenerator.GenerateCodeFromMember(visitor.codeCompileUnit.Namespaces[0].Types[0], Console.Out, null); // outputGenerator.GenerateCodeFromMember(visitor.codeCompileUnit.Namespaces[0].Types[0], Console.Out, null);
// provider.GenerateCodeFromCompileUnit(visitor.codeCompileUnit, Console.Out, null); // provider.GenerateCodeFromCompileUnit(visitor.codeCompileUnit, Console.Out, null);
LoggingService.Debug("NRefactoryDesignerLoader.Parse() finished");
return visitor.codeCompileUnit; return visitor.codeCompileUnit;
} }
@ -185,6 +186,7 @@ namespace ICSharpCode.FormDesigner
protected override void Write(CodeCompileUnit unit) protected override void Write(CodeCompileUnit unit)
{ {
LoggingService.Info("DesignerLoader.Write called");
provider.GenerateCodeFromCompileUnit(unit, Console.Out, null); provider.GenerateCodeFromCompileUnit(unit, Console.Out, null);
} }
@ -206,13 +208,6 @@ namespace ICSharpCode.FormDesigner
public override void Dispose() public override void Dispose()
{ {
base.Dispose(); base.Dispose();
if (this.resources != null) {
foreach (DesignerResourceService.ResourceStorage storage in this.resources.Values) {
storage.Dispose();
}
resources.Clear();
}
resources = null;
} }
} }
} }

12
src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/FormDesignerSecondaryDisplayBinding.cs

@ -129,22 +129,24 @@ namespace ICSharpCode.FormDesigner
if (!FormKeyHandler.inserted) { if (!FormKeyHandler.inserted) {
FormKeyHandler.Insert(); FormKeyHandler.Insert();
} }
DesignerLoader loader = new NRefactoryDesignerLoader(SupportedLanguages.CSharp, ((ITextEditorControlProvider)viewContent).TextEditorControl); IDesignerLoaderProvider loader;
IDesignerGenerator generator = new CSharpDesignerGenerator(); IDesignerGenerator generator;
switch (fileExtension) { switch (fileExtension) {
case ".cs": case ".cs":
loader = new NRefactoryDesignerLoader(SupportedLanguages.CSharp, ((ITextEditorControlProvider)viewContent).TextEditorControl); loader = new NRefactoryDesignerLoaderProvider(SupportedLanguages.CSharp, ((ITextEditorControlProvider)viewContent).TextEditorControl);
generator = new CSharpDesignerGenerator(); generator = new CSharpDesignerGenerator();
break; break;
case ".vb": case ".vb":
loader = new NRefactoryDesignerLoader(SupportedLanguages.VBNet, ((ITextEditorControlProvider)viewContent).TextEditorControl); loader = new NRefactoryDesignerLoaderProvider(SupportedLanguages.VBNet, ((ITextEditorControlProvider)viewContent).TextEditorControl);
generator = new VBNetDesignerGenerator(); generator = new VBNetDesignerGenerator();
break; break;
case ".xfrm": case ".xfrm":
loader = new XmlDesignerLoader(((ITextEditorControlProvider)viewContent).TextEditorControl); loader = new XmlDesignerLoaderProvider(((ITextEditorControlProvider)viewContent).TextEditorControl);
generator = new XmlDesignerGenerator(); generator = new XmlDesignerGenerator();
break; break;
default:
throw new ApplicationException("Cannot create content for " + fileExtension);
} }
return new ISecondaryViewContent[] { new FormDesignerViewContent(viewContent, loader, generator) }; return new ISecondaryViewContent[] { new FormDesignerViewContent(viewContent, loader, generator) };
} }

40
src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/FormDesignerViewContent.cs

@ -50,7 +50,7 @@ namespace ICSharpCode.FormDesigner
protected bool failedDesignerInitialize; protected bool failedDesignerInitialize;
protected IViewContent viewContent; protected IViewContent viewContent;
protected Hashtable resources = null; protected Hashtable resources = new Hashtable();
protected ITextEditorControlProvider textAreaControlProvider; protected ITextEditorControlProvider textAreaControlProvider;
@ -59,7 +59,7 @@ namespace ICSharpCode.FormDesigner
Panel p = new Panel(); Panel p = new Panel();
DesignSurface designSurface; DesignSurface designSurface;
DesignerLoader loader; IDesignerLoaderProvider loader;
IDesignerGenerator generator; IDesignerGenerator generator;
public override Control Control { public override Control Control {
@ -93,10 +93,12 @@ namespace ICSharpCode.FormDesigner
public IDesignerHost Host { public IDesignerHost Host {
get { get {
if (designSurface == null)
return null;
return (IDesignerHost)designSurface.GetService(typeof(IDesignerHost)); return (IDesignerHost)designSurface.GetService(typeof(IDesignerHost));
} }
} }
public FormDesignerViewContent(IViewContent viewContent, DesignerLoader loader, IDesignerGenerator generator) public FormDesignerViewContent(IViewContent viewContent, IDesignerLoaderProvider loader, IDesignerGenerator generator)
{ {
this.loader = loader; this.loader = loader;
this.generator = generator; this.generator = generator;
@ -106,12 +108,8 @@ namespace ICSharpCode.FormDesigner
this.textAreaControlProvider = viewContent as ITextEditorControlProvider; this.textAreaControlProvider = viewContent as ITextEditorControlProvider;
} }
bool isInitialized = false; void LoadDesigner()
void Initialize()
{ {
if (isInitialized) return;
isInitialized = true;
LoggingService.Info("Form Designer: BEGIN INITIALIZE"); LoggingService.Info("Form Designer: BEGIN INITIALIZE");
DefaultServiceContainer serviceContainer = new DefaultServiceContainer(); DefaultServiceContainer serviceContainer = new DefaultServiceContainer();
@ -141,9 +139,9 @@ namespace ICSharpCode.FormDesigner
designerResourceService.Host = Host; designerResourceService.Host = Host;
serviceContainer.AddService(typeof(IDesignerHost), Host); serviceContainer.AddService(typeof(IDesignerHost), Host);
designSurface.BeginLoad(loader); DesignerLoader designerLoader = loader.CreateLoader();
loader.Flush(); designSurface.BeginLoad(designerLoader);
designerLoader.Flush();
designSurface.Flush(); designSurface.Flush();
generator.Attach(this); generator.Attach(this);
@ -154,6 +152,14 @@ namespace ICSharpCode.FormDesigner
LoggingService.Info("Form Designer: END INITIALIZE"); LoggingService.Info("Form Designer: END INITIALIZE");
} }
void UnloadDesigner()
{
generator.Detach();
p.Controls.Clear();
designSurface.Dispose();
designSurface = null;
}
PropertyContainer propertyContainer = new PropertyContainer(); PropertyContainer propertyContainer = new PropertyContainer();
public PropertyContainer PropertyContainer { public PropertyContainer PropertyContainer {
@ -175,11 +181,9 @@ namespace ICSharpCode.FormDesigner
public void Reload() public void Reload()
{ {
Initialize();
// TODO: Reload code modifications
// loader.TextContent = Document.TextContent;
try { try {
LoadDesigner();
if (designSurface != null && p.Controls.Count == 0) { if (designSurface != null && p.Controls.Count == 0) {
Control designer = designSurface.View as Control; Control designer = designSurface.View as Control;
designer.Dock = DockStyle.Fill; designer.Dock = DockStyle.Fill;
@ -196,7 +200,9 @@ namespace ICSharpCode.FormDesigner
return; return;
} }
bool isDirty = viewContent.IsDirty; bool isDirty = viewContent.IsDirty;
LoggingService.Info("Merging form changes...");
generator.MergeFormChanges(); generator.MergeFormChanges();
LoggingService.Info("Finished merging form changes");
viewContent.IsDirty = isDirty; viewContent.IsDirty = isDirty;
} }
@ -244,6 +250,7 @@ namespace ICSharpCode.FormDesigner
public override void Deselected() public override void Deselected()
{ {
LoggingService.Info("Deselected form designer, unloading...");
propertyContainer.Clear(); propertyContainer.Clear();
IsFormDesignerVisible = false; IsFormDesignerVisible = false;
foreach(AxSideTab tab in ToolboxProvider.SideTabs) { foreach(AxSideTab tab in ToolboxProvider.SideTabs) {
@ -257,7 +264,8 @@ namespace ICSharpCode.FormDesigner
MergeFormChanges(); MergeFormChanges();
textAreaControlProvider.TextEditorControl.Refresh(); textAreaControlProvider.TextEditorControl.Refresh();
} }
// DeselectAllComponents(); UnloadDesigner();
LoggingService.Info("Unloading form designer finished");
} }
public override void NotifyBeforeSave() public override void NotifyBeforeSave()

3
src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/FormKeyHandler.cs

@ -130,7 +130,10 @@ namespace ICSharpCode.FormDesigner
} }
if (keyPressed == Keys.Escape) { if (keyPressed == Keys.Escape) {
if (formDesigner.IsTabOrderMode)
formDesigner.HideTabOrder(); formDesigner.HideTabOrder();
else
formDesigner.WorkbenchWindow.SwitchView(0);
return true; return true;
} }

4
src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/Services/DesignerResourceService.cs

@ -126,7 +126,7 @@ namespace ICSharpCode.FormDesigner.Services
} }
return resourceWriter; return resourceWriter;
} catch (Exception e) { } catch (Exception e) {
System.Windows.Forms.MessageBox.Show(e.ToString()); MessageService.ShowError(e);
return null; return null;
} }
} }
@ -150,7 +150,7 @@ namespace ICSharpCode.FormDesigner.Services
} }
return resourceReader; return resourceReader;
} catch (Exception e) { } catch (Exception e) {
System.Windows.Forms.MessageBox.Show(e.ToString()); MessageService.ShowError(e);
return null; return null;
} }
} }

Loading…
Cancel
Save