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. 23
      src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerGenerator/CSharpDesignerGenerator.cs
  3. 1
      src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerGenerator/IDesignerGenerator.cs
  4. 23
      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. 44
      src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/FormDesignerViewContent.cs
  10. 5
      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 @@ @@ -106,6 +106,7 @@
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<Compile Include="Src\FormDesigner\DesignerGenerator\VBNetDesignerGenerator.cs" />
<Compile Include="Src\FormDesigner\DesignerLoader\DesignerLoaderProvider.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\..\Libraries\ICSharpCode.TextEditor\Project\ICSharpCode.TextEditor.csproj">

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

@ -62,6 +62,15 @@ namespace ICSharpCode.FormDesigner @@ -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 @@ -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 @@ -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 @@ -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 @@ -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);

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

@ -48,6 +48,7 @@ namespace ICSharpCode.FormDesigner @@ -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);

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

@ -62,6 +62,15 @@ namespace ICSharpCode.FormDesigner @@ -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 @@ -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 @@ -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 @@ -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 @@ -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);

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

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

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

@ -0,0 +1,51 @@ @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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;
}
}
}

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

@ -129,22 +129,24 @@ namespace ICSharpCode.FormDesigner @@ -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) };
}

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

@ -50,16 +50,16 @@ namespace ICSharpCode.FormDesigner @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -257,7 +264,8 @@ namespace ICSharpCode.FormDesigner
MergeFormChanges();
textAreaControlProvider.TextEditorControl.Refresh();
}
// DeselectAllComponents();
UnloadDesigner();
LoggingService.Info("Unloading form designer finished");
}
public override void NotifyBeforeSave()

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

@ -130,7 +130,10 @@ namespace ICSharpCode.FormDesigner @@ -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;
}

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

@ -126,7 +126,7 @@ namespace ICSharpCode.FormDesigner.Services @@ -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 @@ -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;
}
}

Loading…
Cancel
Save