diff --git a/src/AddIns/DisplayBindings/FormDesigner/Project/FormDesigner.csproj b/src/AddIns/DisplayBindings/FormDesigner/Project/FormDesigner.csproj
index e0f269631d..2ea666f6d6 100644
--- a/src/AddIns/DisplayBindings/FormDesigner/Project/FormDesigner.csproj
+++ b/src/AddIns/DisplayBindings/FormDesigner/Project/FormDesigner.csproj
@@ -106,6 +106,7 @@
Always
+
diff --git a/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerGenerator/CSharpDesignerGenerator.cs b/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerGenerator/CSharpDesignerGenerator.cs
index 485fc8f3ad..883ae82d17 100644
--- a/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerGenerator/CSharpDesignerGenerator.cs
+++ b/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerGenerator/CSharpDesignerGenerator.cs
@@ -62,6 +62,15 @@ namespace ICSharpCode.FormDesigner
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)
{
try {
@@ -86,7 +95,7 @@ namespace ICSharpCode.FormDesigner
}
int endOffset = viewContent.Document.PositionToOffset(new Point(0, initializeComponents.BodyRegion.EndLine));
viewContent.Document.Insert(endOffset, "\t\tprivate " + e.Component.GetType() + " " + e.Component.Site.Name + ";" + Environment.NewLine);
- } catch (Exception ex) {
+ } catch (Exception ex) {
MessageService.ShowError(ex);
}
}
@@ -139,12 +148,12 @@ namespace ICSharpCode.FormDesigner
{
foreach (IMethod method in c.Methods) {
if ((method.Name == "InitializeComponents" || method.Name == "InitializeComponent") && method.Parameters.Count == 0) {
- return method;
+ return method;
}
}
return null;
}
-
+
protected static string GenerateParams(EventDescriptor edesc, bool paramNames)
{
System.Type type = edesc.EventType;
@@ -164,8 +173,8 @@ namespace ICSharpCode.FormDesigner
}
param += typeStr;
if (paramNames == true) {
- param += " ";
- param += pInfo.Name;
+ param += " ";
+ param += pInfo.Name;
}
if (i + 1 < mInfo.GetParameters().Length) {
param += ", ";
@@ -205,8 +214,8 @@ namespace ICSharpCode.FormDesigner
string param = GenerateParams(edesc, true);
string text = "void " + eventMethodName + "(" + param + ")\n" +
- "{\n" + body +
- "\n}\n\n";
+ "{\n" + body +
+ "\n}\n\n";
viewContent.Document.Insert(offset, text);
viewContent.Document.FormattingStrategy.IndentLines(viewContent.TextEditorControl.ActiveTextAreaControl.TextArea, c.Region.EndLine - 1, c.Region.EndLine + 3);
diff --git a/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerGenerator/IDesignerGenerator.cs b/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerGenerator/IDesignerGenerator.cs
index d85414d263..dbee98df63 100644
--- a/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerGenerator/IDesignerGenerator.cs
+++ b/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerGenerator/IDesignerGenerator.cs
@@ -48,6 +48,7 @@ namespace ICSharpCode.FormDesigner
public interface IDesignerGenerator
{
void Attach(FormDesignerViewContent viewContent);
+ void Detach();
void MergeFormChanges();
bool InsertComponentEvent(IComponent component, EventDescriptor edesc, string eventMethodName, string body, out int position);
ICollection GetCompatibleMethods(EventDescriptor edesc);
diff --git a/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerGenerator/VBNetDesignerGenerator.cs b/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerGenerator/VBNetDesignerGenerator.cs
index 1773698e7b..8060a61f93 100644
--- a/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerGenerator/VBNetDesignerGenerator.cs
+++ b/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerGenerator/VBNetDesignerGenerator.cs
@@ -62,6 +62,15 @@ namespace ICSharpCode.FormDesigner
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)
{
try {
@@ -86,7 +95,7 @@ namespace ICSharpCode.FormDesigner
}
int endOffset = viewContent.Document.PositionToOffset(new Point(0, initializeComponents.BodyRegion.EndLine));
viewContent.Document.Insert(endOffset, "\tPrivate " + e.Component.Site.Name + " As " + e.Component.GetType() + Environment.NewLine);
- } catch (Exception ex) {
+ } catch (Exception ex) {
MessageService.ShowError(ex);
}
}
@@ -138,12 +147,12 @@ namespace ICSharpCode.FormDesigner
{
foreach (IMethod method in c.Methods) {
if ((method.Name == "InitializeComponents" || method.Name == "InitializeComponent") && method.Parameters.Count == 0) {
- return method;
+ return method;
}
}
return null;
}
-
+
protected static string GenerateParams(EventDescriptor edesc, bool paramNames)
{
System.Type type = edesc.EventType;
@@ -163,8 +172,8 @@ namespace ICSharpCode.FormDesigner
}
param += typeStr;
if (paramNames == true) {
- param += " ";
- param += pInfo.Name;
+ param += " ";
+ param += pInfo.Name;
}
if (i + 1 < mInfo.GetParameters().Length) {
param += ", ";
@@ -204,8 +213,8 @@ namespace ICSharpCode.FormDesigner
string param = GenerateParams(edesc, true);
string text = "Sub " + eventMethodName + "(" + param + ")\n" +
- body +
- "\nEnd Sub\n\n";
+ body +
+ "\nEnd Sub\n\n";
viewContent.Document.Insert(offset, text);
viewContent.Document.FormattingStrategy.IndentLines(viewContent.TextEditorControl.ActiveTextAreaControl.TextArea, c.Region.EndLine - 1, c.Region.EndLine + 3);
diff --git a/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerGenerator/XmlDesignerGenerator.cs b/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerGenerator/XmlDesignerGenerator.cs
index e21b7e503b..ec3bca7eba 100644
--- a/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerGenerator/XmlDesignerGenerator.cs
+++ b/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerGenerator/XmlDesignerGenerator.cs
@@ -28,6 +28,11 @@ namespace ICSharpCode.FormDesigner
this.viewContent = viewContent;
}
+ public void Detach()
+ {
+ this.viewContent = null;
+ }
+
public void MergeFormChanges()
{
StringWriter writer = new StringWriter();
diff --git a/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerLoader/DesignerLoaderProvider.cs b/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerLoader/DesignerLoaderProvider.cs
new file mode 100644
index 0000000000..99f49e7bf9
--- /dev/null
+++ b/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);
+ }
+ }
+}
diff --git a/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerLoader/NRefactoryDesignerLoader.cs b/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerLoader/NRefactoryDesignerLoader.cs
index 8246c5d7b7..9bab71a17b 100644
--- a/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerLoader/NRefactoryDesignerLoader.cs
+++ b/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerLoader/NRefactoryDesignerLoader.cs
@@ -47,9 +47,6 @@ namespace ICSharpCode.FormDesigner
SupportedLanguages language;
CodeDomProvider provider = new Microsoft.CSharp.CSharpCodeProvider();
- protected Hashtable resources = null;
- bool isReloadNeeded = false;
-
TextEditorControl textEditorControl;
public string TextContent {
@@ -84,7 +81,7 @@ namespace ICSharpCode.FormDesigner
protected override bool IsReloadNeeded()
{
- return isReloadNeeded | base.IsReloadNeeded();
+ return base.IsReloadNeeded() || TextContent != lastTextContent;
}
public NRefactoryDesignerLoader(SupportedLanguages language, TextEditorControl textEditorControl)
@@ -106,11 +103,14 @@ namespace ICSharpCode.FormDesigner
base.OnEndLoad(successful, errors);
}
+ string lastTextContent;
+
protected override CodeCompileUnit 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();
// 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);
// provider.GenerateCodeFromCompileUnit(visitor.codeCompileUnit, Console.Out, null);
+ LoggingService.Debug("NRefactoryDesignerLoader.Parse() finished");
return visitor.codeCompileUnit;
}
@@ -185,6 +186,7 @@ namespace ICSharpCode.FormDesigner
protected override void Write(CodeCompileUnit unit)
{
+ LoggingService.Info("DesignerLoader.Write called");
provider.GenerateCodeFromCompileUnit(unit, Console.Out, null);
}
@@ -206,13 +208,6 @@ namespace ICSharpCode.FormDesigner
public override void Dispose()
{
base.Dispose();
- if (this.resources != null) {
- foreach (DesignerResourceService.ResourceStorage storage in this.resources.Values) {
- storage.Dispose();
- }
- resources.Clear();
- }
- resources = null;
}
}
}
diff --git a/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/FormDesignerSecondaryDisplayBinding.cs b/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/FormDesignerSecondaryDisplayBinding.cs
index 782d0b1e1b..efd38f34cb 100644
--- a/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/FormDesignerSecondaryDisplayBinding.cs
+++ b/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/FormDesignerSecondaryDisplayBinding.cs
@@ -129,22 +129,24 @@ namespace ICSharpCode.FormDesigner
if (!FormKeyHandler.inserted) {
FormKeyHandler.Insert();
}
- DesignerLoader loader = new NRefactoryDesignerLoader(SupportedLanguages.CSharp, ((ITextEditorControlProvider)viewContent).TextEditorControl);
- IDesignerGenerator generator = new CSharpDesignerGenerator();
+ IDesignerLoaderProvider loader;
+ IDesignerGenerator generator;
switch (fileExtension) {
case ".cs":
- loader = new NRefactoryDesignerLoader(SupportedLanguages.CSharp, ((ITextEditorControlProvider)viewContent).TextEditorControl);
+ loader = new NRefactoryDesignerLoaderProvider(SupportedLanguages.CSharp, ((ITextEditorControlProvider)viewContent).TextEditorControl);
generator = new CSharpDesignerGenerator();
break;
case ".vb":
- loader = new NRefactoryDesignerLoader(SupportedLanguages.VBNet, ((ITextEditorControlProvider)viewContent).TextEditorControl);
+ loader = new NRefactoryDesignerLoaderProvider(SupportedLanguages.VBNet, ((ITextEditorControlProvider)viewContent).TextEditorControl);
generator = new VBNetDesignerGenerator();
break;
case ".xfrm":
- loader = new XmlDesignerLoader(((ITextEditorControlProvider)viewContent).TextEditorControl);
+ loader = new XmlDesignerLoaderProvider(((ITextEditorControlProvider)viewContent).TextEditorControl);
generator = new XmlDesignerGenerator();
break;
+ default:
+ throw new ApplicationException("Cannot create content for " + fileExtension);
}
return new ISecondaryViewContent[] { new FormDesignerViewContent(viewContent, loader, generator) };
}
diff --git a/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/FormDesignerViewContent.cs b/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/FormDesignerViewContent.cs
index 2fa26d054d..1b8e0e75e7 100644
--- a/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/FormDesignerViewContent.cs
+++ b/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/FormDesignerViewContent.cs
@@ -50,16 +50,16 @@ namespace ICSharpCode.FormDesigner
protected bool failedDesignerInitialize;
protected IViewContent viewContent;
- protected Hashtable resources = null;
+ protected Hashtable resources = new Hashtable();
- protected ITextEditorControlProvider textAreaControlProvider;
+ protected ITextEditorControlProvider textAreaControlProvider;
- protected string compilationErrors;
+ protected string compilationErrors;
Panel p = new Panel();
DesignSurface designSurface;
- DesignerLoader loader;
+ IDesignerLoaderProvider loader;
IDesignerGenerator generator;
public override Control Control {
@@ -93,10 +93,12 @@ namespace ICSharpCode.FormDesigner
public IDesignerHost Host {
get {
+ if (designSurface == null)
+ return null;
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.generator = generator;
@@ -106,12 +108,8 @@ namespace ICSharpCode.FormDesigner
this.textAreaControlProvider = viewContent as ITextEditorControlProvider;
}
- bool isInitialized = false;
-
- void Initialize()
+ void LoadDesigner()
{
- if (isInitialized) return;
- isInitialized = true;
LoggingService.Info("Form Designer: BEGIN INITIALIZE");
DefaultServiceContainer serviceContainer = new DefaultServiceContainer();
@@ -141,9 +139,9 @@ namespace ICSharpCode.FormDesigner
designerResourceService.Host = Host;
serviceContainer.AddService(typeof(IDesignerHost), Host);
- designSurface.BeginLoad(loader);
- loader.Flush();
-
+ DesignerLoader designerLoader = loader.CreateLoader();
+ designSurface.BeginLoad(designerLoader);
+ designerLoader.Flush();
designSurface.Flush();
generator.Attach(this);
@@ -154,6 +152,14 @@ namespace ICSharpCode.FormDesigner
LoggingService.Info("Form Designer: END INITIALIZE");
}
+ void UnloadDesigner()
+ {
+ generator.Detach();
+ p.Controls.Clear();
+ designSurface.Dispose();
+ designSurface = null;
+ }
+
PropertyContainer propertyContainer = new PropertyContainer();
public PropertyContainer PropertyContainer {
@@ -175,11 +181,9 @@ namespace ICSharpCode.FormDesigner
public void Reload()
{
- Initialize();
-// TODO: Reload code modifications
-// loader.TextContent = Document.TextContent;
-
try {
+ LoadDesigner();
+
if (designSurface != null && p.Controls.Count == 0) {
Control designer = designSurface.View as Control;
designer.Dock = DockStyle.Fill;
@@ -196,7 +200,9 @@ namespace ICSharpCode.FormDesigner
return;
}
bool isDirty = viewContent.IsDirty;
+ LoggingService.Info("Merging form changes...");
generator.MergeFormChanges();
+ LoggingService.Info("Finished merging form changes");
viewContent.IsDirty = isDirty;
}
@@ -244,6 +250,7 @@ namespace ICSharpCode.FormDesigner
public override void Deselected()
{
+ LoggingService.Info("Deselected form designer, unloading...");
propertyContainer.Clear();
IsFormDesignerVisible = false;
foreach(AxSideTab tab in ToolboxProvider.SideTabs) {
@@ -257,7 +264,8 @@ namespace ICSharpCode.FormDesigner
MergeFormChanges();
textAreaControlProvider.TextEditorControl.Refresh();
}
-// DeselectAllComponents();
+ UnloadDesigner();
+ LoggingService.Info("Unloading form designer finished");
}
public override void NotifyBeforeSave()
diff --git a/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/FormKeyHandler.cs b/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/FormKeyHandler.cs
index 964ec66a9c..0f994c767b 100644
--- a/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/FormKeyHandler.cs
+++ b/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/FormKeyHandler.cs
@@ -130,7 +130,10 @@ namespace ICSharpCode.FormDesigner
}
if (keyPressed == Keys.Escape) {
- formDesigner.HideTabOrder();
+ if (formDesigner.IsTabOrderMode)
+ formDesigner.HideTabOrder();
+ else
+ formDesigner.WorkbenchWindow.SwitchView(0);
return true;
}
diff --git a/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/Services/DesignerResourceService.cs b/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/Services/DesignerResourceService.cs
index 0d800e7aa8..99ba05871b 100644
--- a/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/Services/DesignerResourceService.cs
+++ b/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/Services/DesignerResourceService.cs
@@ -126,7 +126,7 @@ namespace ICSharpCode.FormDesigner.Services
}
return resourceWriter;
} catch (Exception e) {
- System.Windows.Forms.MessageBox.Show(e.ToString());
+ MessageService.ShowError(e);
return null;
}
}
@@ -150,7 +150,7 @@ namespace ICSharpCode.FormDesigner.Services
}
return resourceReader;
} catch (Exception e) {
- System.Windows.Forms.MessageBox.Show(e.ToString());
+ MessageService.ShowError(e);
return null;
}
}