diff --git a/src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.csproj b/src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.csproj
index 54f899fade..60d0cf27c7 100644
--- a/src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.csproj
+++ b/src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.csproj
@@ -134,6 +134,11 @@
NRefactory
False
+
+ {53840EAB-984D-419F-A2A2-6D13C3F3D5B4}
+ FormsDesigner.AddIn
+ False
+
{DBCF20A1-BA13-4582-BFA9-74DE4D987B73}
NRefactoryToBooConverter
@@ -150,11 +155,6 @@
Always
-
- {7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57}
- FormsDesigner
- False
-
diff --git a/src/AddIns/BackendBindings/Scripting/Project/ICSharpCode.Scripting.csproj b/src/AddIns/BackendBindings/Scripting/Project/ICSharpCode.Scripting.csproj
index 3f4e163dbe..8ee4c63d13 100644
--- a/src/AddIns/BackendBindings/Scripting/Project/ICSharpCode.Scripting.csproj
+++ b/src/AddIns/BackendBindings/Scripting/Project/ICSharpCode.Scripting.csproj
@@ -136,9 +136,9 @@
UnitTesting
False
-
- {7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57}
- FormsDesigner
+
+ {53840EAB-984D-419F-A2A2-6D13C3F3D5B4}
+ FormsDesigner.AddIn
False
diff --git a/src/AddIns/BackendBindings/WixBinding/Project/WixBinding.csproj b/src/AddIns/BackendBindings/WixBinding/Project/WixBinding.csproj
index 24c783bec3..3b7dd9844b 100644
--- a/src/AddIns/BackendBindings/WixBinding/Project/WixBinding.csproj
+++ b/src/AddIns/BackendBindings/WixBinding/Project/WixBinding.csproj
@@ -223,11 +223,6 @@
AvalonEdit.AddIn
False
-
- {7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57}
- FormsDesigner
- False
-
Always
@@ -256,6 +251,11 @@
ICSharpCode.SharpDevelop.Widgets
False
+
+ {53840EAB-984D-419F-A2A2-6D13C3F3D5B4}
+ FormsDesigner.AddIn
+ False
+
diff --git a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/DesignerGenerator/AbstractDesignerGenerator.cs b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/DesignerGenerator/AbstractDesignerGenerator.cs
index c956185330..e0055d773d 100644
--- a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/DesignerGenerator/AbstractDesignerGenerator.cs
+++ b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/DesignerGenerator/AbstractDesignerGenerator.cs
@@ -20,7 +20,7 @@ using ReflectionLayer = ICSharpCode.SharpDevelop.Dom.ReflectionLayer;
namespace ICSharpCode.FormsDesigner
{
- public abstract class AbstractDesignerGenerator : IDesignerGenerator
+ public abstract class AbstractDesignerGenerator : IDesignerGenerator, IDesignerSourceProvider
{
/// The currently open part of the class being designed.
IClass currentClassPart;
@@ -582,4 +582,8 @@ namespace ICSharpCode.FormsDesigner
return null;
}
}
+
+
+
+
}
diff --git a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/DesignerGenerator/IDesignerSourceProvider.cs b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/DesignerGenerator/IDesignerSourceProvider.cs
new file mode 100644
index 0000000000..222cd9efe5
--- /dev/null
+++ b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/DesignerGenerator/IDesignerSourceProvider.cs
@@ -0,0 +1,25 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+using System.Collections.Generic;
+using ICSharpCode.SharpDevelop;
+
+namespace ICSharpCode.FormsDesigner
+{
+ public interface IDesignerSourceProvider
+ {
+ void Attach(FormsDesignerViewContent viewContent);
+ void Detach();
+ FormsDesignerViewContent ViewContent { get; }
+
+ ///
+ /// Gets the collection of OpenedFiles that contain code which belongs
+ /// to the designed form, not including resource files.
+ ///
+ /// Receives the file which contains the code to be modified by the forms designer.
+ /// A collection of OpenedFiles that contain code which belongs to the designed form.
+ /// The returned collection must include the .
+ IEnumerable GetSourceFiles(out OpenedFile designerCodeFile);
+ }
+}
diff --git a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/DesignerLoader/AbstractCodeDomDesignerLoader.cs b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/DesignerLoader/AbstractCodeDomDesignerLoader.cs
index 9ac0e39a68..f932d01a7a 100644
--- a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/DesignerLoader/AbstractCodeDomDesignerLoader.cs
+++ b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/DesignerLoader/AbstractCodeDomDesignerLoader.cs
@@ -2,14 +2,22 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
+using System.ComponentModel.Design.Serialization;
namespace ICSharpCode.FormsDesigner
{
///
/// Description of AbstractCodeDomDesignerLoader.
///
- public class AbstractCodeDomDesignerLoader : IDesignerLoader
+ public abstract class AbstractCodeDomDesignerLoader : IDesignerLoader
{
+ protected AbstractCodeDomDesignerLoader(IDesignerGenerator generator)
+ {
+ this.Generator = generator;
+ }
+
+ public IDesignerGenerator Generator { get; set; }
+
///
/// When overridden in derived classes, this method should return the current
/// localization model of the designed file or None, if it cannot be determined.
@@ -20,15 +28,9 @@ namespace ICSharpCode.FormsDesigner
return CodeDomLocalizationModel.None;
}
- System.CodeDom.CodeCompileUnit IDesignerLoader.Parse()
- {
- throw new NotImplementedException();
- }
+ public abstract System.CodeDom.CodeCompileUnit Parse();
- void IDesignerLoader.Write(System.CodeDom.CodeCompileUnit unit)
- {
- throw new NotImplementedException();
- }
+ public abstract void Write(System.CodeDom.CodeCompileUnit unit);
CodeDomLocalizationModel IDesignerLoader.GetLocalizationModel()
{
@@ -38,15 +40,20 @@ namespace ICSharpCode.FormsDesigner
// Try to find out the current localization model of the designed form
CodeDomLocalizationModel existingModel = this.GetCurrentLocalizationModelFromDesignedFile();
if (existingModel != CodeDomLocalizationModel.None) {
- LoggingService.Debug("Determined existing localization model, using that: " + existingModel.ToString());
+ Core.LoggingService.Debug("Determined existing localization model, using that: " + existingModel.ToString());
model = existingModel;
} else {
- LoggingService.Debug("Could not determine existing localization model, using default: " + model.ToString());
+ Core.LoggingService.Debug("Could not determine existing localization model, using default: " + model.ToString());
}
} else {
- LoggingService.Debug("Using default localization model: " + model.ToString());
+ Core.LoggingService.Debug("Using default localization model: " + model.ToString());
}
return model;
}
+
+ public virtual bool IsReloadNeeded(bool value)
+ {
+ return value;
+ }
}
}
diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerLoader/DesignerLoaderProvider.cs b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/DesignerLoader/DesignerLoaderProvider.cs
similarity index 63%
rename from src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerLoader/DesignerLoaderProvider.cs
rename to src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/DesignerLoader/DesignerLoaderProvider.cs
index be6b1cdadc..e14739e206 100644
--- a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerLoader/DesignerLoaderProvider.cs
+++ b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/DesignerLoader/DesignerLoaderProvider.cs
@@ -3,29 +3,32 @@
using System;
using System.ComponentModel.Design.Serialization;
-/*
+
using ICSharpCode.NRefactory;
namespace ICSharpCode.FormsDesigner
{
public interface IDesignerLoaderProvider
{
- DesignerLoader CreateLoader(IDesignerGenerator generator);
+ IDesignerLoader CreateLoader(IDesignerGenerator generator);
+ FormsDesignerViewContent ViewContent { get; set; }
}
public class NRefactoryDesignerLoaderProvider : IDesignerLoaderProvider
{
readonly SupportedLanguage language;
+ FormsDesignerViewContent viewContent;
+
+ public FormsDesignerViewContent ViewContent { get; set; }
public NRefactoryDesignerLoaderProvider(SupportedLanguage language)
{
this.language = language;
}
- public DesignerLoader CreateLoader(IDesignerGenerator generator)
+ public IDesignerLoader CreateLoader(IDesignerGenerator generator)
{
- return new NRefactoryDesignerLoader(language, generator);
+ return new NRefactoryDesignerLoader(language, generator, ViewContent);
}
}
-}
-*/
+}
\ No newline at end of file
diff --git a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/DesignerLoader/NRefactoryDesignerLoader.cs b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/DesignerLoader/NRefactoryDesignerLoader.cs
index 6ee3cd3247..a7bbb594c5 100644
--- a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/DesignerLoader/NRefactoryDesignerLoader.cs
+++ b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/DesignerLoader/NRefactoryDesignerLoader.cs
@@ -3,12 +3,12 @@
using System;
using System.CodeDom;
+using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.ComponentModel.Design.Serialization;
using System.IO;
using System.Linq;
using System.Windows.Forms;
-
using ICSharpCode.Core;
using ICSharpCode.NRefactory;
using ICSharpCode.NRefactory.Ast;
@@ -22,16 +22,18 @@ namespace ICSharpCode.FormsDesigner
public class NRefactoryDesignerLoader : AbstractCodeDomDesignerLoader
{
SupportedLanguage language;
+ FormsDesignerViewContent viewContent;
- protected override bool IsReloadNeeded()
+ public override bool IsReloadNeeded(bool value)
{
- return base.IsReloadNeeded() || this.Generator.ViewContent.DesignerCodeFileContent != lastTextContent;
+ return base.IsReloadNeeded(value) || viewContent.DesignerCodeFileContent != lastTextContent;
}
- public NRefactoryDesignerLoader(SupportedLanguage language, IDesignerGenerator generator)
+ public NRefactoryDesignerLoader(SupportedLanguage language, IDesignerGenerator generator, FormsDesignerViewContent viewContent)
: base(generator)
{
this.language = language;
+ this.viewContent = viewContent;
}
string lastTextContent;
@@ -72,13 +74,13 @@ namespace ICSharpCode.FormsDesigner
// - Create CodeDom objects for fields and InitializeComponents statements
// - If debug build and Ctrl pressed, output CodeDom to console
// - Return CodeDom objects to the .NET designer
- protected override CodeCompileUnit Parse()
+ public override CodeCompileUnit Parse()
{
LoggingService.Debug("NRefactoryDesignerLoader.Parse()");
- lastTextContent = this.Generator.ViewContent.DesignerCodeFileContent;
+ lastTextContent = viewContent.DesignerCodeFileContent;
- ParseInformation parseInfo = ParserService.GetParseInformation(this.Generator.ViewContent.DesignerCodeFile.FileName);
+ ParseInformation parseInfo = ParserService.GetParseInformation(viewContent.DesignerCodeFile.FileName);
IClass formClass;
bool isFirstClassInFile;
@@ -114,10 +116,10 @@ namespace ICSharpCode.FormsDesigner
if (found) continue;
ITextBuffer fileContent;
- if (FileUtility.IsEqualFileName(fileName, this.Generator.ViewContent.PrimaryFileName)) {
- fileContent = this.Generator.ViewContent.PrimaryFileContent;
- } else if (FileUtility.IsEqualFileName(fileName, this.Generator.ViewContent.DesignerCodeFile.FileName)) {
- fileContent = new StringTextBuffer(this.Generator.ViewContent.DesignerCodeFileContent);
+ if (FileUtility.IsEqualFileName(fileName, viewContent.PrimaryFileName)) {
+ fileContent = viewContent.PrimaryFileContent;
+ } else if (FileUtility.IsEqualFileName(fileName, viewContent.DesignerCodeFile.FileName)) {
+ fileContent = new StringTextBuffer(viewContent.DesignerCodeFileContent);
} else {
fileContent = ParserService.GetParseableFileContent(fileName);
}
@@ -172,7 +174,7 @@ namespace ICSharpCode.FormsDesigner
if ((Control.ModifierKeys & Keys.Control) == Keys.Control) {
CodeDomVerboseOutputGenerator outputGenerator = new CodeDomVerboseOutputGenerator();
outputGenerator.GenerateCodeFromMember(visitor.codeCompileUnit.Namespaces[0].Types[0], Console.Out, null);
- this.CodeDomProvider.GenerateCodeFromCompileUnit(visitor.codeCompileUnit, Console.Out, null);
+ this.Generator.CodeDomProvider.GenerateCodeFromCompileUnit(visitor.codeCompileUnit, Console.Out, null);
}
#endif
@@ -262,13 +264,13 @@ namespace ICSharpCode.FormsDesigner
}
}
- protected override void Write(CodeCompileUnit unit)
+ public override void Write(CodeCompileUnit unit)
{
LoggingService.Info("DesignerLoader.Write called");
// output generated CodeDOM to the console :
#if DEBUG
if ((Control.ModifierKeys & Keys.Control) == Keys.Control) {
- this.CodeDomProvider.GenerateCodeFromCompileUnit(unit, Console.Out, null);
+ this.Generator.CodeDomProvider.GenerateCodeFromCompileUnit(unit, Console.Out, null);
}
#endif
try {
@@ -280,7 +282,7 @@ namespace ICSharpCode.FormsDesigner
protected override CodeDomLocalizationModel GetCurrentLocalizationModelFromDesignedFile()
{
- ParseInformation parseInfo = ParserService.ParseFile(this.Generator.ViewContent.DesignerCodeFile.FileName, new StringTextBuffer(this.Generator.ViewContent.DesignerCodeFileContent));
+ ParseInformation parseInfo = ParserService.ParseFile(viewContent.DesignerCodeFile.FileName, new StringTextBuffer(viewContent.DesignerCodeFileContent));
IClass formClass;
bool isFirstClassInFile;
diff --git a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/FormsDesigner.AddIn.csproj b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/FormsDesigner.AddIn.csproj
index 3575e38ea7..575dcf4810 100644
--- a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/FormsDesigner.AddIn.csproj
+++ b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/FormsDesigner.AddIn.csproj
@@ -41,6 +41,7 @@
+
@@ -64,11 +65,13 @@
+
+
-
+
@@ -79,6 +82,7 @@
+
@@ -101,6 +105,11 @@
+
+ {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}
+ ICSharpCode.AvalonEdit
+ False
+
{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}
NRefactory
@@ -115,11 +124,21 @@
ICSharpCode.Core
False
+
+ {857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}
+ ICSharpCode.Core.WinForms
+ False
+
{924EE450-603D-49C1-A8E5-4AFAA31CE6F3}
ICSharpCode.SharpDevelop.Dom
False
+
+ {8035765F-D51F-4A0C-A746-2FD100E19419}
+ ICSharpCode.SharpDevelop.Widgets
+ False
+
{7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57}
FormsDesigner
diff --git a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/DesignerViewContent.cs b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/FormsDesignerViewContent.cs
similarity index 92%
rename from src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/DesignerViewContent.cs
rename to src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/FormsDesignerViewContent.cs
index f23f0c465b..d3261debb4 100644
--- a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/DesignerViewContent.cs
+++ b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/FormsDesignerViewContent.cs
@@ -12,17 +12,19 @@ using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;
-
using ICSharpCode.Core;
+using ICSharpCode.FormsDesigner.Gui;
+using ICSharpCode.FormsDesigner.Gui.OptionPanels;
using ICSharpCode.FormsDesigner.Services;
using ICSharpCode.FormsDesigner.UndoRedo;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Editor;
using ICSharpCode.SharpDevelop.Gui;
+using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.FormsDesigner
{
- public class FormsDesignerViewContent : AbstractViewContentHandlingLoadErrors, IClipboardHandler, IUndoHandler, IHasPropertyContainer, IContextHelpProvider, IToolsHost, IFileDocumentProvider
+ public class FormsDesignerViewContent : AbstractViewContentHandlingLoadErrors, IClipboardHandler, IUndoHandler, IHasPropertyContainer, IContextHelpProvider, IToolsHost, IFileDocumentProvider, IFormsDesigner
{
readonly Control pleaseWaitLabel = new Label() {Text=StringParser.Parse("${res:Global.PleaseWait}"), TextAlign=ContentAlignment.MiddleCenter};
DesignSurface designSurface;
@@ -32,6 +34,7 @@ namespace ICSharpCode.FormsDesigner
readonly IDesignerLoaderProvider loaderProvider;
DesignerLoader loader;
readonly IDesignerGenerator generator;
+ readonly IDesignerSourceProvider sourceProvider;
readonly ResourceStore resourceStore;
FormsDesignerUndoEngine undoEngine;
TypeResolutionService typeResolutionService;
@@ -124,7 +127,7 @@ namespace ICSharpCode.FormsDesigner
ICSharpCode.SharpDevelop.Debugging.DebuggerService.DebugStarting += this.DebugStarting;
}
- public FormsDesignerViewContent(IViewContent primaryViewContent, IDesignerLoaderProvider loaderProvider, IDesignerGenerator generator)
+ public FormsDesignerViewContent(IViewContent primaryViewContent, IDesignerLoaderProvider loaderProvider, IDesignerGenerator generator, IDesignerSourceProvider sourceProvider)
: this(primaryViewContent)
{
if (loaderProvider == null)
@@ -133,8 +136,10 @@ namespace ICSharpCode.FormsDesigner
throw new ArgumentNullException("generator");
this.loaderProvider = loaderProvider;
+ this.loaderProvider.ViewContent = this;
this.generator = generator;
- this.generator.Attach(this);
+ this.sourceProvider = sourceProvider;
+ this.sourceProvider.Attach(this);
this.Files.Add(this.primaryViewContent.PrimaryFile);
}
@@ -184,7 +189,7 @@ namespace ICSharpCode.FormsDesigner
LoggingService.Debug("Forms designer: Determining designer source files for " + file.FileName);
OpenedFile newDesignerCodeFile;
- IEnumerable sourceFiles = this.generator.GetSourceFiles(out newDesignerCodeFile);
+ IEnumerable sourceFiles = this.sourceProvider.GetSourceFiles(out newDesignerCodeFile);
if (sourceFiles == null || newDesignerCodeFile == null) {
throw new FormsDesignerLoadException("The designer source files could not be determined.");
}
@@ -262,9 +267,11 @@ namespace ICSharpCode.FormsDesigner
{
LoggingService.Info("Form Designer: BEGIN INITIALIZE");
+ options = LoadOptions();
+
DefaultServiceContainer serviceContainer = new DefaultServiceContainer();
serviceContainer.AddService(typeof(IMessageService), new FormsMessageService());
- serviceContainer.AddService(typeof(System.Windows.Forms.Design.IUIService), new UIService());
+ serviceContainer.AddService(typeof(System.Windows.Forms.Design.IUIService), new UIService(this));
serviceContainer.AddService(typeof(System.Drawing.Design.IToolboxService), ToolboxProvider.ToolboxService);
serviceContainer.AddService(typeof(IHelpService), new HelpService());
@@ -275,10 +282,11 @@ namespace ICSharpCode.FormsDesigner
serviceContainer.AddService(typeof(AmbientProperties), ambientProperties);
this.typeResolutionService = new TypeResolutionService(this.PrimaryFileName, serviceContainer, new DomTypeLocator(this.PrimaryFileName));
serviceContainer.AddService(typeof(ITypeResolutionService), this.typeResolutionService);
- serviceContainer.AddService(typeof(DesignerOptionService), new SharpDevelopDesignerOptionService());
+ serviceContainer.AddService(typeof(DesignerOptionService), new SharpDevelopDesignerOptionService(options));
serviceContainer.AddService(typeof(ITypeDiscoveryService), new TypeDiscoveryService(new DomGacWrapper()));
serviceContainer.AddService(typeof(MemberRelationshipService), new DefaultMemberRelationshipService());
serviceContainer.AddService(typeof(IProjectResourceService), new ProjectResourceService(ParserService.GetParseInformation(this.DesignerCodeFile.FileName).CompilationUnit.ProjectContent));
+ serviceContainer.AddService(typeof(IImageResourceEditorDialogWrapper), new ImageResourceEditorDialogWrapper(ParserService.GetParseInformation(this.DesignerCodeFile.FileName).CompilationUnit.ProjectContent.Project as IProject));
// Provide the ImageResourceEditor for all Image and Icon properties
this.addedTypeDescriptionProviders.Add(typeof(Image), TypeDescriptor.AddAttributes(typeof(Image), new EditorAttribute(typeof(ImageResourceEditor), typeof(System.Drawing.Design.UITypeEditor))));
@@ -294,11 +302,11 @@ namespace ICSharpCode.FormsDesigner
designSurface.Flushed += this.DesignerFlushed;
designSurface.Unloading += this.DesignerUnloading;
- serviceContainer.AddService(typeof(System.ComponentModel.Design.IMenuCommandService), new ICSharpCode.FormsDesigner.Services.MenuCommandService(this, designSurface));
+ serviceContainer.AddService(typeof(System.ComponentModel.Design.IMenuCommandService), new ICSharpCode.FormsDesigner.Services.MenuCommandService(new SharpDevelopCommandProvider(this), designSurface));
ICSharpCode.FormsDesigner.Services.EventBindingService eventBindingService = new ICSharpCode.FormsDesigner.Services.EventBindingService(this, designSurface);
serviceContainer.AddService(typeof(System.ComponentModel.Design.IEventBindingService), eventBindingService);
- this.loader = loaderProvider.CreateLoader(generator);
+ this.loader = new SharpDevelopDesignerLoader(generator, loaderProvider.CreateLoader(generator));
designSurface.BeginLoad(this.loader);
if (!designSurface.IsLoaded) {
@@ -330,6 +338,28 @@ namespace ICSharpCode.FormsDesigner
LoggingService.Info("Form Designer: END INITIALIZE");
}
+ SharpDevelopDesignerOptions LoadOptions()
+ {
+ int w = PropertyService.Get("FormsDesigner.DesignerOptions.GridSizeWidth", 8);
+ int h = PropertyService.Get("FormsDesigner.DesignerOptions.GridSizeHeight", 8);
+
+ SharpDevelopDesignerOptions options = new SharpDevelopDesignerOptions();
+
+ options.GridSize = new Size(w, h);
+
+ options.ShowGrid = PropertyService.Get("FormsDesigner.DesignerOptions.ShowGrid", true);
+ options.SnapToGrid = PropertyService.Get("FormsDesigner.DesignerOptions.SnapToGrid", true);
+
+ options.UseSmartTags = GeneralOptionsPanel.UseSmartTags;
+ options.UseSnapLines = PropertyService.Get("FormsDesigner.DesignerOptions.UseSnapLines", true);
+
+ options.EnableInSituEditing = PropertyService.Get("FormsDesigner.DesignerOptions.EnableInSituEditing", true);
+ options.ObjectBoundSmartTagAutoShow = GeneralOptionsPanel.SmartTagAutoShow;
+ options.UseOptimizedCodeGeneration = PropertyService.Get("FormsDesigner.DesignerOptions.UseOptimizedCodeGeneration", true);
+
+ return options;
+ }
+
bool hasUnmergedChanges;
void MakeDirty()
@@ -660,7 +690,7 @@ namespace ICSharpCode.FormsDesigner
}
if (this.generator != null) {
- this.generator.Detach();
+ this.sourceProvider.Detach();
}
this.resourceStore.Dispose();
@@ -941,5 +971,24 @@ namespace ICSharpCode.FormsDesigner
}
#endregion
+
+ public IDesignerGenerator Generator {
+ get {
+ return generator;
+ }
+ }
+
+ SharpDevelopDesignerOptions options;
+
+ public SharpDevelopDesignerOptions DesignerOptions {
+ get {
+ return options;
+ }
+ }
+
+ public IntPtr GetDialogOwnerWindowHandle()
+ {
+ return WorkbenchSingleton.MainWin32Window.Handle;
+ }
}
}
diff --git a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/ImageResourceEditorDialog.cs b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/ImageResourceEditorDialog.cs
index 107a506d0b..0f75437e25 100644
--- a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/ImageResourceEditorDialog.cs
+++ b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/ImageResourceEditorDialog.cs
@@ -4,6 +4,7 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
+using System.ComponentModel.Design;
using System.Drawing;
using System.Drawing.Design;
using System.IO;
@@ -11,12 +12,13 @@ using System.Linq;
using System.Resources;
using System.Resources.Tools;
using System.Windows.Forms;
-
+using System.Windows.Forms.Design;
using ICSharpCode.Core;
using ICSharpCode.Core.WinForms;
using ICSharpCode.FormsDesigner.Services;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom;
+using ICSharpCode.SharpDevelop.Editor;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Project;
@@ -58,7 +60,7 @@ namespace ICSharpCode.FormsDesigner.Gui
this.projectResourcesTreeView.Visible = designerSupportsProjectResources;
}
- public ImageResourceEditorDialog(IProject project, Type requiredResourceType, ProjectResourceInfo projectResource)
+ public ImageResourceEditorDialog(IProject project, Type requiredResourceType, IProjectResourceInfo projectResource)
: this(project, requiredResourceType, true)
{
if (projectResource == null)
@@ -214,7 +216,7 @@ namespace ICSharpCode.FormsDesigner.Gui
return;
}
- ProjectResourceInfo selectedProjectResource = e.Argument as ProjectResourceInfo;
+ IProjectResourceInfo selectedProjectResource = e.Argument as IProjectResourceInfo;
IProjectContent projectContent = ParserService.GetProjectContent(this.project);
@@ -575,11 +577,19 @@ namespace ICSharpCode.FormsDesigner.Gui
#endregion
}
- public class ImageResourceEditorDialogWrapper
+ public class ImageResourceEditorDialogWrapper : IImageResourceEditorDialogWrapper
{
- public object GetValue(IProjectResourceInfo projectResource, )
+ IProject project;
+
+ public ImageResourceEditorDialogWrapper(IProject project)
+ {
+ if (project == null)
+ throw new ArgumentNullException("project");
+ this.project = project;
+ }
+
+ public object GetValue(IProjectResourceInfo projectResource, object value, IProjectResourceService prs, ITypeDescriptorContext context, IWindowsFormsEditorService edsvc, IDictionaryService dictService)
{
- IProject project = prs.ProjectContent.Project as IProject;
ImageResourceEditorDialog dialog;
if (projectResource != null && object.ReferenceEquals(projectResource.OriginalValue, value) && prs.DesignerSupportsProjectResources) {
diff --git a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/SecondaryDisplayBinding.cs b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/SecondaryDisplayBinding.cs
index 9227444b00..70bf60f298 100644
--- a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/SecondaryDisplayBinding.cs
+++ b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/SecondaryDisplayBinding.cs
@@ -115,6 +115,7 @@ namespace ICSharpCode.FormsDesigner
IDesignerLoaderProvider loader;
IDesignerGenerator generator;
+ IDesignerSourceProvider sourceProvider;
switch (fileExtension) {
case ".cs":
@@ -128,7 +129,10 @@ namespace ICSharpCode.FormsDesigner
default:
throw new ApplicationException("Cannot create content for " + fileExtension);
}
- return new IViewContent[] { new FormsDesignerViewContent(viewContent, loader, generator) };
+
+ sourceProvider = (IDesignerSourceProvider)generator;
+
+ return new IViewContent[] { new FormsDesignerViewContent(viewContent, loader, generator, sourceProvider) };
}
}
}
diff --git a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/DesignerResourceService.cs b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/DesignerResourceService.cs
index 9d78251097..60303a3889 100644
--- a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/DesignerResourceService.cs
+++ b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/DesignerResourceService.cs
@@ -3,6 +3,7 @@
using System;
using System.Globalization;
+using ICSharpCode.Core;
namespace ICSharpCode.FormsDesigner.Services
{
diff --git a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/DomTypeLocator.cs b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/DomTypeLocator.cs
index 08c4640991..6f612a90b4 100644
--- a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/DomTypeLocator.cs
+++ b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/DomTypeLocator.cs
@@ -3,6 +3,7 @@
using System;
using System.Collections.Generic;
+using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Project;
@@ -13,8 +14,6 @@ namespace ICSharpCode.FormsDesigner.Services
string formSourceFileName;
IProjectContent callingProject;
- public System.ComponentModel.Design.ITypeResolutionService ParentService { get; set; }
-
///
/// Gets the project content of the project that created this TypeResolutionService.
/// Returns null when no calling project was specified.
@@ -41,7 +40,7 @@ namespace ICSharpCode.FormsDesigner.Services
static readonly Dictionary projectContentsCurrentlyLoadingAssembly = new Dictionary();
- public string LocateType(string name, out string[] referencedAssemblies)
+ public AssemblyInfo LocateType(string name, out AssemblyInfo[] referencedAssemblies)
{
IProjectContent pc = CallingProject;
@@ -56,30 +55,30 @@ namespace ICSharpCode.FormsDesigner.Services
foundClass = pc.GetClass(name.Replace('+', '.'), 0);
}
if (foundClass != null) {
- string path = GetPathToAssembly(pc);
+ AssemblyInfo assembly = GetPathToAssembly(pc);
- if (string.IsNullOrEmpty(path)) {
- referencedAssemblies = new string[0];
- return "";
+ if (assembly == AssemblyInfo.Empty) {
+ referencedAssemblies = new AssemblyInfo[0];
+ return AssemblyInfo.Empty;
}
- List assemblies = new List();
+ List assemblies = new List();
FindReferencedAssemblies(assemblies, pc);
- if (assemblies.Contains(path))
- assemblies.Remove(path);
+ if (assemblies.Contains(assembly))
+ assemblies.Remove(assembly);
referencedAssemblies = assemblies.ToArray();
- return path;
+ return assembly;
}
}
- referencedAssemblies = new string[0];
- return "";
+ referencedAssemblies = new AssemblyInfo[0];
+ return AssemblyInfo.Empty;
}
- void FindReferencedAssemblies(List assemblies, IProjectContent pc)
+ void FindReferencedAssemblies(List assemblies, IProjectContent pc)
{
// prevent StackOverflow when project contents have cyclic dependencies
// Very popular example of cyclic dependency: System <-> System.Xml (yes, really!)
@@ -87,10 +86,10 @@ namespace ICSharpCode.FormsDesigner.Services
return;
projectContentsCurrentlyLoadingAssembly.Add(pc, null);
- string path = GetPathToAssembly(assemblies, pc);
+ AssemblyInfo assembly = GetPathToAssembly(pc);
- if (!string.IsNullOrEmpty(path) && !assemblies.Contains(path))
- assemblies.Add(path);
+ if (!assemblies.Contains(assembly))
+ assemblies.Add(assembly);
try {
// load dependencies of current assembly
@@ -108,14 +107,17 @@ namespace ICSharpCode.FormsDesigner.Services
}
}
- string GetPathToAssembly(IProjectContent pc)
+ AssemblyInfo GetPathToAssembly(IProjectContent pc)
{
+ bool isInGac = pc.Project == null && pc is ReflectionProjectContent;
+ string path = "";
+
if (pc.Project != null)
- return ((IProject)pc.Project).OutputAssemblyFullPath;
+ path = ((IProject)pc.Project).OutputAssemblyFullPath;
else if (pc is ReflectionProjectContent)
- return ((ReflectionProjectContent)pc).AssemblyLocation;
+ path = ((ReflectionProjectContent)pc).AssemblyLocation;
- return null;
+ return new AssemblyInfo(path, isInGac);
}
}
diff --git a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/FormsMessageService.cs b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/FormsMessageService.cs
index 98c8caba45..f34f33a140 100644
--- a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/FormsMessageService.cs
+++ b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/FormsMessageService.cs
@@ -5,6 +5,8 @@ using System;
using System.IO;
using ICSharpCode.Core;
using ICSharpCode.NRefactory.Visitors;
+using ICSharpCode.SharpDevelop;
+using ICSharpCode.SharpDevelop.Gui;
namespace ICSharpCode.FormsDesigner.Services
{
diff --git a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/ProjectResourceService.cs b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/ProjectResourceService.cs
index 1a49e53757..abedebce46 100644
--- a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/ProjectResourceService.cs
+++ b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/ProjectResourceService.cs
@@ -1,15 +1,18 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
-using ICSharpCode.NRefactory;
using System;
using System.CodeDom;
using System.IO;
using System.Linq;
+using System.Resources.Tools;
+
using ICSharpCode.Core;
+using ICSharpCode.NRefactory;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Editor;
+using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.FormsDesigner.Services
{
@@ -171,5 +174,57 @@ namespace ICSharpCode.FormsDesigner.Services
IReturnType generatedCodeAttribute = generatedCodeAttributeClass.DefaultReturnType;
return @class.Attributes.Any(att => att.AttributeType.Equals(generatedCodeAttribute) && att.PositionalArguments.Count == 2 && String.Equals("System.Resources.Tools.StronglyTypedResourceBuilder", att.PositionalArguments[0] as string, StringComparison.Ordinal));
}
+
+ IProjectResourceInfo IProjectResourceService.GetProjectResource(CodePropertyReferenceExpression propRef)
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool FindResourceClassNames(IProjectResourceInfo resourceInfo, out string resourceClassFullyQualifiedName, out string resourcePropertyName)
+ {
+ IProject project = ProjectContent.Project as IProject;
+
+ resourceClassFullyQualifiedName = null;
+ resourcePropertyName = null;
+
+ if (project == null) {
+ LoggingService.Warn("Serializer cannot proceed because project is not an IProject");
+ return false;
+ }
+
+ string resourceFileDirectory = Path.GetDirectoryName(resourceInfo.ResourceFile);
+ string resourceFileName = Path.GetFileName(resourceInfo.ResourceFile);
+ var items = project.Items
+ .OfType()
+ .Where(
+ fpi =>
+ FileUtility.IsEqualFileName(Path.GetDirectoryName(fpi.FileName), resourceFileDirectory) &&
+ FileUtility.IsEqualFileName(fpi.DependentUpon, resourceFileName) &&
+ fpi.ItemType == ItemType.Compile &&
+ fpi.VirtualName.ToUpperInvariant().Contains("DESIGNER")
+ );
+
+ if (items.Count() != 1) {
+ LoggingService.Info("Did not find exactly one possible file that contains the generated class for the resource file '" + resourceInfo.ResourceFile + "'. Ignoring this resource.");
+ return false;
+ }
+
+ string resourceCodeFile = items.Single().FileName;
+
+ // We expect a single class to be in this file.
+ IClass resourceClass = ParserService.GetParseInformation(resourceCodeFile).CompilationUnit.Classes.Single();
+ // Here we assume that VerifyResourceName is the same name transform that
+ // was used when generating the resource code file.
+ // This should be true as long as the code is generated using the
+ // custom tool in SharpDevelop or Visual Studio.
+ resourceClassFullyQualifiedName = resourceClass.FullyQualifiedName;
+ resourcePropertyName = StronglyTypedResourceBuilder.VerifyResourceName(resourceInfo.ResourceKey, ProjectContent.Language.CodeDomProvider ?? LanguageProperties.CSharp.CodeDomProvider);
+
+ if (resourcePropertyName == null) {
+ throw new InvalidOperationException("The resource name '" + resourceInfo.ResourceKey + "' could not be transformed to a name that is valid in the current programming language.");
+ }
+
+ return true;
+ }
}
}
diff --git a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/SharpDevelopCommandProvider.cs b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/SharpDevelopCommandProvider.cs
new file mode 100644
index 0000000000..ca8add998a
--- /dev/null
+++ b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/SharpDevelopCommandProvider.cs
@@ -0,0 +1,65 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+using System.ComponentModel.Design;
+using System.Drawing;
+using System.Windows.Forms;
+using System.Windows.Forms.Design;
+
+using ICSharpCode.Core.WinForms;
+using ICSharpCode.FormsDesigner.Commands;
+
+namespace ICSharpCode.FormsDesigner.Services
+{
+ public class SharpDevelopCommandProvider : ICommandProvider
+ {
+ FormsDesignerViewContent vc;
+
+ public SharpDevelopCommandProvider(FormsDesignerViewContent vc)
+ {
+ this.vc = vc;
+ }
+
+ public void InitializeGlobalCommands(IMenuCommandService service)
+ {
+ // Most commands like Delete, Cut, Copy and paste are all added to the MenuCommandService
+ // by the other services like the DesignerHost. Commands like ViewCode and ShowProperties
+ // need to be added by the IDE because only the IDE would know how to perform those actions.
+ // This allows people to call MenuCommandSerice.GlobalInvoke( StandardCommands.ViewCode );
+ // from designers and what not. .Net Control Designers like the TableLayoutPanelDesigner
+ // build up their own context menus instead of letting the MenuCommandService build it.
+ // The context menus they build up are in the format that Visual studio expects and invokes
+ // the ViewCode and Properties commands by using GlobalInvoke.
+
+ AbstractFormsDesignerCommand viewCodeCommand = new ViewCode();
+ AbstractFormsDesignerCommand propertiesCodeCommand = new ShowProperties();
+ service.AddCommand(new System.ComponentModel.Design.MenuCommand(viewCodeCommand.CommandCallBack, viewCodeCommand.CommandID));
+ service.AddCommand(new System.ComponentModel.Design.MenuCommand(propertiesCodeCommand.CommandCallBack, propertiesCodeCommand.CommandID));
+ }
+
+ public void ShowContextMenu(CommandID menuID, int x, int y)
+ {
+ string contextMenuPath = "/SharpDevelop/FormsDesigner/ContextMenus/";
+
+ if (menuID == MenuCommands.ComponentTrayMenu) {
+ contextMenuPath += "ComponentTrayMenu";
+ } else if (menuID == MenuCommands.ContainerMenu) {
+ contextMenuPath += "ContainerMenu";
+ } else if (menuID == MenuCommands.SelectionMenu) {
+ contextMenuPath += "SelectionMenu";
+ } else if (menuID == MenuCommands.TraySelectionMenu) {
+ contextMenuPath += "TraySelectionMenu";
+ } else {
+ throw new Exception();
+ }
+
+ Control panel = vc.UserContent;
+ if (panel != null) {
+ Point p = panel.PointToClient(new Point(x, y));
+
+ MenuService.ShowContextMenu(this, contextMenuPath, panel, p.X, p.Y);
+ }
+ }
+ }
+}
diff --git a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/UIService.cs b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/UIService.cs
index 2af9b038ff..828e21e2fa 100644
--- a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/UIService.cs
+++ b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/UIService.cs
@@ -7,6 +7,8 @@ using System.Drawing;
using System.Windows.Forms;
using System.Windows.Forms.Design;
+using ICSharpCode.Core;
+
namespace ICSharpCode.FormsDesigner.Services
{
public class UIService : IUIService
diff --git a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Toolbox/CustomComponentsSideTab.cs b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Toolbox/CustomComponentsSideTab.cs
index d0f7b82e92..effc2b95ee 100644
--- a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Toolbox/CustomComponentsSideTab.cs
+++ b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Toolbox/CustomComponentsSideTab.cs
@@ -113,53 +113,9 @@ namespace ICSharpCode.FormsDesigner.Gui
// is not a design component
continue;
isDesignComponent:
- this.Items.Add(new SideTabItemDesigner(c.Name, new CustomComponentToolBoxItem(c)));
+ this.Items.Add(new SideTabItemDesigner(c.Name, new CustomComponentToolBoxItem(c.CompilationUnit.FileName, c.FullyQualifiedName)));
}
}
}
}
-
- public class CustomComponentToolBoxItem : ToolboxItem
- {
- string className;
- IProjectContent assemblyLocation;
- Assembly usedAssembly = null;
-
- public CustomComponentToolBoxItem(IClass c)
- {
- className = c.FullyQualifiedName;
- assemblyLocation = c.ProjectContent;
- this.Bitmap = new ToolboxItem(typeof(Component)).Bitmap;
- this.IsTransient = true;
- }
-
- void Init(IDesignerHost host)
- {
- LoggingService.Debug("Initializing MyToolBoxItem: " + className);
- if (host == null) throw new ArgumentNullException("host");
- if (assemblyLocation != null) {
- TypeResolutionService typeResolutionService = host.GetService(typeof(ITypeResolutionService)) as TypeResolutionService;
- if (typeResolutionService == null) {
- throw new InvalidOperationException("Cannot initialize CustomComponentToolBoxItem because the designer host does not provide a SharpDevelop TypeResolutionService.");
- }
- Assembly asm = typeResolutionService.LoadAssembly(assemblyLocation);
- if (asm != null && usedAssembly != asm) {
- Initialize(asm.GetType(className));
- usedAssembly = asm;
- }
- }
- }
-
- protected override IComponent[] CreateComponentsCore(IDesignerHost host)
- {
- Init(host);
- return base.CreateComponentsCore(host);
- }
-
- protected override IComponent[] CreateComponentsCore(IDesignerHost host, System.Collections.IDictionary defaultValues)
- {
- Init(host);
- return base.CreateComponentsCore(host, defaultValues);
- }
- }
}
diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/FormsDesigner.csproj b/src/AddIns/DisplayBindings/FormsDesigner/Project/FormsDesigner.csproj
index 6f0c4f018a..a2c3a8bbbb 100644
--- a/src/AddIns/DisplayBindings/FormsDesigner/Project/FormsDesigner.csproj
+++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/FormsDesigner.csproj
@@ -35,13 +35,14 @@
False
None
false
+ FORMSDESIGNER_DLL
False
True
- DEBUG
Full
true
+ DEBUG, FORMSDESIGNER_DLL
@@ -53,6 +54,9 @@
+
+ EasyCodeDom.cs
+
@@ -62,9 +66,11 @@
+
+
@@ -80,7 +86,6 @@
-
diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerLoader/IDesignerLoader.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerLoader/IDesignerLoader.cs
index 87ed5030e1..7036c3615f 100644
--- a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerLoader/IDesignerLoader.cs
+++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerLoader/IDesignerLoader.cs
@@ -10,9 +10,8 @@ namespace ICSharpCode.FormsDesigner
public interface IDesignerLoader
{
CodeCompileUnit Parse();
-
void Write(CodeCompileUnit unit);
-
CodeDomLocalizationModel GetLocalizationModel();
+ bool IsReloadNeeded(bool value);
}
}
diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerLoader/SharpDevelopDesignerLoader.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerLoader/SharpDevelopDesignerLoader.cs
index 53071370e3..35b830bda5 100644
--- a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerLoader/SharpDevelopDesignerLoader.cs
+++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerLoader/SharpDevelopDesignerLoader.cs
@@ -44,12 +44,16 @@ namespace ICSharpCode.FormsDesigner
get { return this.generator; }
}
- protected SharpDevelopDesignerLoader(IDesignerGenerator generator)
+ public SharpDevelopDesignerLoader(IDesignerGenerator generator, IDesignerLoader loader)
{
if (generator == null) {
throw new ArgumentNullException("generator", "Generator cannot be null");
}
+ if (loader == null)
+ throw new ArgumentNullException("loader");
+
this.generator = generator;
+ this.loader = loader;
}
public override void Dispose()
@@ -148,5 +152,10 @@ namespace ICSharpCode.FormsDesigner
{
return loader.Parse();
}
+
+ protected override bool IsReloadNeeded()
+ {
+ return loader.IsReloadNeeded(base.IsReloadNeeded());
+ }
}
}
diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Gui/CustomComponentToolBoxItem.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Gui/CustomComponentToolBoxItem.cs
new file mode 100644
index 0000000000..cf721fea8e
--- /dev/null
+++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Gui/CustomComponentToolBoxItem.cs
@@ -0,0 +1,56 @@
+using System;
+using System.ComponentModel;
+using System.ComponentModel.Design;
+using System.Drawing.Design;
+
+using ICSharpCode.FormsDesigner.Services;
+
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+namespace ICSharpCode.FormsDesigner.Gui
+{
+ public class CustomComponentToolBoxItem : ToolboxItem
+ {
+ string sourceFileName;
+ string className;
+ bool initialized;
+
+ public CustomComponentToolBoxItem(string sourceFileName, string className)
+ {
+ this.sourceFileName = sourceFileName;
+ this.className = className;
+ this.Bitmap = new ToolboxItem(typeof(Component)).Bitmap;
+ this.IsTransient = true;
+ }
+
+ void Init(IDesignerHost host)
+ {
+ LoggingService.Debug("Initializing MyToolBoxItem: " + className);
+ if (host == null) throw new ArgumentNullException("host");
+ if (sourceFileName != null) {
+ TypeResolutionService typeResolutionService = host.GetService(typeof(ITypeResolutionService)) as TypeResolutionService;
+ if (typeResolutionService == null) {
+ throw new InvalidOperationException("Cannot initialize CustomComponentToolBoxItem because the designer host does not provide a SharpDevelop TypeResolutionService.");
+ }
+
+ if (!initialized) {
+ Initialize(typeResolutionService.GetType(className));
+ initialized = true;
+ }
+ }
+ }
+
+ protected override IComponent[] CreateComponentsCore(IDesignerHost host)
+ {
+ Init(host);
+ return base.CreateComponentsCore(host);
+ }
+
+ protected override IComponent[] CreateComponentsCore(IDesignerHost host, System.Collections.IDictionary defaultValues)
+ {
+ Init(host);
+ return base.CreateComponentsCore(host, defaultValues);
+ }
+ }
+}
diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/IDesignerGenerator.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/IDesignerGenerator.cs
index 4a9f516fbd..369e67d474 100644
--- a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/IDesignerGenerator.cs
+++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/IDesignerGenerator.cs
@@ -12,22 +12,6 @@ namespace ICSharpCode.FormsDesigner
{
public interface IDesignerGenerator
{
- //CodeDomProvider CodeDomProvider { get; }
- //void Attach(FormsDesignerViewContent viewContent);
- //void Detach();
- //FormsDesignerViewContent ViewContent { get; }
-
- /*
- ///
- /// Gets the collection of OpenedFiles that contain code which belongs
- /// to the designed form, not including resource files.
- ///
- /// Receives the file which contains the code to be modified by the forms designer.
- /// A collection of OpenedFiles that contain code which belongs to the designed form.
- /// The returned collection must include the .
- IEnumerable GetSourceFiles(out OpenedFile designerCodeFile);
- */
-
void MergeFormChanges(CodeCompileUnit unit);
bool InsertComponentEvent(IComponent component, EventDescriptor edesc, string eventMethodName, string body, out string file, out int position);
ICollection GetCompatibleMethods(EventDescriptor edesc);
diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/AssemblyInfo.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/AssemblyInfo.cs
new file mode 100644
index 0000000000..5bd477d0ff
--- /dev/null
+++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/AssemblyInfo.cs
@@ -0,0 +1,55 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+
+namespace ICSharpCode.FormsDesigner.Services
+{
+ public struct AssemblyInfo : IEquatable
+ {
+ public static readonly AssemblyInfo Empty = new AssemblyInfo("", false);
+
+ public readonly string FullNameOrPath;
+ public readonly bool IsInGac;
+
+ public AssemblyInfo(string fullNameOrPath, bool isInGac)
+ {
+ this.FullNameOrPath = fullNameOrPath;
+ this.IsInGac = isInGac;
+ }
+
+ #region Equals and GetHashCode implementation
+ public override bool Equals(object obj)
+ {
+ return (obj is AssemblyInfo) && Equals((AssemblyInfo)obj);
+ }
+
+ public bool Equals(AssemblyInfo other)
+ {
+ return this.FullNameOrPath == other.FullNameOrPath && this.IsInGac == other.IsInGac;
+ }
+
+ public override int GetHashCode()
+ {
+ int hashCode = 0;
+ unchecked {
+ if (FullNameOrPath != null)
+ hashCode += 1000000007 * FullNameOrPath.GetHashCode();
+ hashCode += 1000000009 * IsInGac.GetHashCode();
+ }
+ return hashCode;
+ }
+
+ public static bool operator ==(AssemblyInfo lhs, AssemblyInfo rhs)
+ {
+ return lhs.Equals(rhs);
+ }
+
+ public static bool operator !=(AssemblyInfo lhs, AssemblyInfo rhs)
+ {
+ return !(lhs == rhs);
+ }
+ #endregion
+
+ }
+}
diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/DesignerOptionService.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/DesignerOptionService.cs
index b027c13742..7906a797c2 100644
--- a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/DesignerOptionService.cs
+++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/DesignerOptionService.cs
@@ -36,25 +36,6 @@ namespace ICSharpCode.FormsDesigner.Services
// Whether to include an underscore in the event handler name
public string EventHandlerNameFormat { get; set; }
-
- /*
- public SharpDevelopDesignerOptions()
- {
- int w = PropertyService.Get("FormsDesigner.DesignerOptions.GridSizeWidth", 8);
- int h = PropertyService.Get("FormsDesigner.DesignerOptions.GridSizeHeight", 8);
- this.gridSize = new Size(w, h);
-
- this.showGrid = PropertyService.Get("FormsDesigner.DesignerOptions.ShowGrid", true);
- this.snapToGrid = PropertyService.Get("FormsDesigner.DesignerOptions.SnapToGrid", true);
-
- this.useSmartTags = GeneralOptionsPanel.UseSmartTags;
- this.useSnapLines = PropertyService.Get("FormsDesigner.DesignerOptions.UseSnapLines", true);
-
- this.enableInSituEditing = PropertyService.Get("FormsDesigner.DesignerOptions.EnableInSituEditing", true);
- this.objectBoundSmartTagAutoShow = GeneralOptionsPanel.SmartTagAutoShow;
- this.useOptimizedCodeGeneration = PropertyService.Get("FormsDesigner.DesignerOptions.UseOptimizedCodeGeneration", true);
- }
- */
}
public class SharpDevelopDesignerOptionService : WindowsFormsDesignerOptionService
diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/IProjectResourceService.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/IProjectResourceService.cs
index da32500c44..edbfa51e83 100644
--- a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/IProjectResourceService.cs
+++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/IProjectResourceService.cs
@@ -3,6 +3,7 @@
using System;
using System.CodeDom;
+using System.ComponentModel.Design;
using System.IO;
using System.Linq;
@@ -12,7 +13,8 @@ namespace ICSharpCode.FormsDesigner.Services
{
IProjectResourceInfo GetProjectResource(CodePropertyReferenceExpression propRef);
bool DesignerSupportsProjectResources { get; set; }
- string ProjectResourceKey { get; set; }
+ string ProjectResourceKey { get; }
+ bool FindResourceClassNames(IProjectResourceInfo resourceInfo, out string resourceClassFullyQualifiedName, out string resourcePropertyName);
}
public interface IMessageService
@@ -29,4 +31,10 @@ namespace ICSharpCode.FormsDesigner.Services
string ResourceKey { get; }
object OriginalValue { get; }
}
+
+ public interface ICommandProvider
+ {
+ void InitializeGlobalCommands(IMenuCommandService service);
+ void ShowContextMenu(CommandID menuID, int x, int y);
+ }
}
diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/ITypeLocator.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/ITypeLocator.cs
index 06d22a39b7..3007d85b13 100644
--- a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/ITypeLocator.cs
+++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/ITypeLocator.cs
@@ -2,20 +2,13 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
+using System.ComponentModel;
+using System.ComponentModel.Design;
+using System.Windows.Forms.Design;
namespace ICSharpCode.FormsDesigner.Services
{
- public struct AssemblyInfo
- {
- public readonly string FullNameOrPath;
- public readonly bool IsInGac;
-
- public AssemblyInfo(string fullNameOrPath, bool isInGac)
- {
- this.FullNameOrPath = fullNameOrPath;
- this.IsInGac = isInGac;
- }
- }
+
public interface ITypeLocator
{
@@ -26,4 +19,9 @@ namespace ICSharpCode.FormsDesigner.Services
{
bool IsGacAssembly(string path);
}
+
+ public interface IImageResourceEditorDialogWrapper
+ {
+ object GetValue(IProjectResourceInfo projectResource, object value, IProjectResourceService prs, ITypeDescriptorContext context, IWindowsFormsEditorService edsvc, IDictionaryService dictService);
+ }
}
diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/ImageResourceEditor.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/ImageResourceEditor.cs
index 4f7f5dbed9..631e16f437 100644
--- a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/ImageResourceEditor.cs
+++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/ImageResourceEditor.cs
@@ -76,9 +76,9 @@ namespace ICSharpCode.FormsDesigner.Services
var projectResource = dictService.GetValue(prs.ProjectResourceKey + context.PropertyDescriptor.Name) as IProjectResourceInfo;
+ var imageDialogWrapper = provider.GetService(typeof(IImageResourceEditorDialogWrapper)) as IImageResourceEditorDialogWrapper;
-
- return value;
+ return imageDialogWrapper.GetValue(projectResource, value, prs, context, edsvc, dictService) ?? value;
}
[PermissionSet(SecurityAction.LinkDemand, Name="FullTrust")]
diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/MenuCommandService.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/MenuCommandService.cs
index 3e40bdf4a2..9a21830e74 100644
--- a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/MenuCommandService.cs
+++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/MenuCommandService.cs
@@ -11,55 +11,19 @@ using MenuCommand = System.ComponentModel.Design.MenuCommand;
namespace ICSharpCode.FormsDesigner.Services
{
- class MenuCommandService : System.ComponentModel.Design.MenuCommandService
+ public class MenuCommandService : System.ComponentModel.Design.MenuCommandService
{
- IFormsDesigner vc;
+ ICommandProvider commandProvider;
- public MenuCommandService(IFormsDesigner vc, IServiceProvider serviceProvider) : base(serviceProvider)
+ public MenuCommandService(ICommandProvider commandProvider, IServiceProvider serviceProvider) : base(serviceProvider)
{
- this.vc = vc;
- this.InitializeGlobalCommands();
- }
-
- private void InitializeGlobalCommands()
- {
- //Most commands like Delete, Cut, Copy and paste are all added to the MenuCommandService
- // by the other services like the DesignerHost. Commands like ViewCode and ShowProperties
- // need to be added by the IDE because only the IDE would know how to perform those actions.
- // This allows people to call MenuCommandSerice.GlobalInvoke( StandardCommands.ViewCode );
- // from designers and what not. .Net Control Designers like the TableLayoutPanelDesigner
- // build up their own context menus instead of letting the MenuCommandService build it.
- // The context menus they build up are in the format that Visual studio expects and invokes
- // the ViewCode and Properties commands by using GlobalInvoke.
-
- AbstractFormsDesignerCommand viewCodeCommand = new ViewCode();
- AbstractFormsDesignerCommand propertiesCodeCommand = new ShowProperties();
- this.AddCommand( new MenuCommand(viewCodeCommand.CommandCallBack, viewCodeCommand.CommandID));
- this.AddCommand( new MenuCommand(propertiesCodeCommand.CommandCallBack, propertiesCodeCommand.CommandID));
+ this.commandProvider = commandProvider;
+ commandProvider.InitializeGlobalCommands(this);
}
public override void ShowContextMenu(CommandID menuID, int x, int y)
{
- string contextMenuPath = "/SharpDevelop/FormsDesigner/ContextMenus/";
-
- if (menuID == MenuCommands.ComponentTrayMenu) {
- contextMenuPath += "ComponentTrayMenu";
- } else if (menuID == MenuCommands.ContainerMenu) {
- contextMenuPath += "ContainerMenu";
- } else if (menuID == MenuCommands.SelectionMenu) {
- contextMenuPath += "SelectionMenu";
- } else if (menuID == MenuCommands.TraySelectionMenu) {
- contextMenuPath += "TraySelectionMenu";
- } else {
- throw new Exception();
- }
-
- Control panel = vc.UserContent;
- if (panel != null) {
- Point p = panel.PointToClient(new Point(x, y));
-
- MenuService.ShowContextMenu(this, contextMenuPath, panel, p.X, p.Y);
- }
+ commandProvider.ShowContextMenu(menuID, x, y);
}
}
}
diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/ProjectResourcesMemberCodeDomSerializer.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/ProjectResourcesMemberCodeDomSerializer.cs
index cac735443e..d98ece94a4 100644
--- a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/ProjectResourcesMemberCodeDomSerializer.cs
+++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/ProjectResourcesMemberCodeDomSerializer.cs
@@ -10,6 +10,8 @@ using System.IO;
using System.Linq;
using System.Resources.Tools;
+using ICSharpCode.EasyCodeDom;
+
namespace ICSharpCode.FormsDesigner.Services
{
///
@@ -47,7 +49,6 @@ namespace ICSharpCode.FormsDesigner.Services
var dictService = component.Site.GetService(typeof(IDictionaryService)) as IDictionaryService;
if (dictService == null) return false;
-
var prs = manager.GetService(typeof(IProjectResourceService)) as IProjectResourceService;
if (prs == null) {
@@ -64,47 +65,14 @@ namespace ICSharpCode.FormsDesigner.Services
}
// Find the generated file with the resource accessing class.
-
- IProject project = prs.ProjectContent.Project as IProject;
- if (project == null) {
- LoggingService.Warn("Serializer cannot proceed because project is not an IProject");
+ string resourceClassFullyQualifiedName;
+ string resourcePropertyName;
+ if (!prs.FindResourceClassNames(resourceInfo, out resourceClassFullyQualifiedName, out resourcePropertyName))
return false;
- }
-
- string resourceFileDirectory = Path.GetDirectoryName(resourceInfo.ResourceFile);
- string resourceFileName = Path.GetFileName(resourceInfo.ResourceFile);
- var items = project.Items
- .OfType()
- .Where(
- fpi =>
- FileUtility.IsEqualFileName(Path.GetDirectoryName(fpi.FileName), resourceFileDirectory) &&
- FileUtility.IsEqualFileName(fpi.DependentUpon, resourceFileName) &&
- fpi.ItemType == ItemType.Compile &&
- fpi.VirtualName.ToUpperInvariant().Contains("DESIGNER")
- );
-
- if (items.Count() != 1) {
- LoggingService.Info("Did not find exactly one possible file that contains the generated class for the resource file '" + resourceInfo.ResourceFile + "'. Ignoring this resource.");
- return false;
- }
-
- string resourceCodeFile = items.Single().FileName;
-
- // We expect a single class to be in this file.
- IClass resourceClass = ParserService.GetParseInformation(resourceCodeFile).CompilationUnit.Classes.Single();
- // Here we assume that VerifyResourceName is the same name transform that
- // was used when generating the resource code file.
- // This should be true as long as the code is generated using the
- // custom tool in SharpDevelop or Visual Studio.
- string resourcePropertyName = StronglyTypedResourceBuilder.VerifyResourceName(resourceInfo.ResourceKey, prs.ProjectContent.Language.CodeDomProvider ?? LanguageProperties.CSharp.CodeDomProvider);
- if (resourcePropertyName == null) {
- throw new InvalidOperationException("The resource name '" + resourceInfo.ResourceKey + "' could not be transformed to a name that is valid in the current programming language.");
- }
-
// Now do the actual serialization.
- LoggingService.Debug("Serializing project resource: Component '" + component.ToString() + "', Property: '" + propDesc.Name + "', Resource class: '" + resourceClass.FullyQualifiedName + "', Resource property: '" + resourcePropertyName + "'");
+ LoggingService.Debug("Serializing project resource: Component '" + component.ToString() + "', Property: '" + propDesc.Name + "', Resource class: '" + resourceClassFullyQualifiedName + "', Resource property: '" + resourcePropertyName + "'");
var targetObjectExpr = base.SerializeToExpression(manager, value);
if (targetObjectExpr == null) {
@@ -119,7 +87,7 @@ namespace ICSharpCode.FormsDesigner.Services
var propRefSource =
Easy.Type(
- new CodeTypeReference(resourceClass.FullyQualifiedName, CodeTypeReferenceOptions.GlobalReference)
+ new CodeTypeReference(resourceClassFullyQualifiedName, CodeTypeReferenceOptions.GlobalReference)
).Property(resourcePropertyName);
var extAttr = propDesc.Attributes[typeof(ExtenderProvidedPropertyAttribute)] as ExtenderProvidedPropertyAttribute;
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.AddIn/WpfDesign.AddIn.csproj b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.AddIn/WpfDesign.AddIn.csproj
index ecaabadaa3..1875fe1434 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.AddIn/WpfDesign.AddIn.csproj
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.AddIn/WpfDesign.AddIn.csproj
@@ -128,9 +128,9 @@
ICSharpCode.SharpDevelop.Widgets
False
-
- {7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57}
- FormsDesigner
+
+ {53840EAB-984D-419F-A2A2-6D13C3F3D5B4}
+ FormsDesigner.AddIn
False
diff --git a/src/AddIns/Misc/SharpRefactoring/Project/Src/CSharpMethodExtractor.cs b/src/AddIns/Misc/SharpRefactoring/Project/Src/CSharpMethodExtractor.cs
index fca8ea6f17..8b3585620a 100644
--- a/src/AddIns/Misc/SharpRefactoring/Project/Src/CSharpMethodExtractor.cs
+++ b/src/AddIns/Misc/SharpRefactoring/Project/Src/CSharpMethodExtractor.cs
@@ -103,7 +103,7 @@ namespace SharpRefactoring
var variablesList = (from list in ltv.Variables.Values from item in list select new Variable(item))
.Where(v => !(v.StartPos > end || v.EndPos < start) &&
- (HasReferencesInSelection(newMethod, v) ||
+ (HasReferencesInSelection(newMethod, v) ||
HasOccurrencesAfter(CSharpNameComparer, this.parentNode, end, v.Name, v.StartPos, v.EndPos)))
.Union(FromParameters(newMethod))
.Select(va => ResolveVariable(va));
@@ -194,7 +194,10 @@ namespace SharpRefactoring
if (variable.Type.Type == "var")
variable.Type = Dom.Refactoring.CodeGenerator.ConvertType(type, finder);
- variable.IsReferenceType = type.IsReferenceType == true;
+ if (type == null)
+ variable.IsReferenceType = false;
+ else
+ variable.IsReferenceType = type.IsReferenceType == true;
return variable;
}
diff --git a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/EasyCodeDom.cs b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/EasyCodeDom.cs
index fcdaedbd0f..44e0a78815 100644
--- a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/EasyCodeDom.cs
+++ b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/EasyCodeDom.cs
@@ -6,377 +6,404 @@ using System.CodeDom;
namespace ICSharpCode.EasyCodeDom
{
- public static class Easy
+ #if FORMSDESIGNER_DLL
+ internal
+ #else
+ public
+ #endif
+ static class Easy
+{
+ public static CodeTypeReference TypeRef(Type type)
{
- public static CodeTypeReference TypeRef(Type type)
- {
- return new CodeTypeReference(type, CodeTypeReferenceOptions.GlobalReference);
- }
- public static CodeTypeReference TypeRef(CodeTypeDeclaration type)
- {
- return new CodeTypeReference(type.Name);
- }
- public static CodeTypeReference TypeRef(string typeName, params string[] typeArguments)
- {
- CodeTypeReference tr = new CodeTypeReference(typeName);
- foreach (string ta in typeArguments) {
- tr.TypeArguments.Add(ta);
- }
- return tr;
- }
-
- ///
- /// Gets the CodeExpression for any primitive value that can be expressed as literal.
- /// Also works for enumeration values.
- ///
- public static CodeExpression Prim(object literalValue)
- {
- if (literalValue is Enum) {
- return Type(literalValue.GetType()).Field(literalValue.ToString());
- } else {
- return new CodePrimitiveExpression(literalValue);
- }
- }
-
- public static CodeTypeReferenceExpression Type(Type type)
- {
- return Type(TypeRef(type));
- }
- public static CodeTypeReferenceExpression Type(CodeTypeReference type)
- {
- return new CodeTypeReferenceExpression(type);
- }
- public static CodeTypeReferenceExpression Type(string type)
- {
- return Type(new CodeTypeReference(type));
- }
-
- public static CodeTypeOfExpression TypeOf(Type type)
- {
- return TypeOf(TypeRef(type));
- }
- public static CodeTypeOfExpression TypeOf(CodeTypeReference type)
- {
- return new CodeTypeOfExpression(type);
- }
-
- public static CodeObjectCreateExpression New(Type type, params CodeExpression[] arguments)
- {
- return New(TypeRef(type), arguments);
- }
- public static CodeObjectCreateExpression New(CodeTypeReference type, params CodeExpression[] arguments)
- {
- return new CodeObjectCreateExpression(type, arguments);
- }
-
- public static CodeVariableReferenceExpression Var(string name)
- {
- return new CodeVariableReferenceExpression(name);
- }
-
- public static CodeBinaryOperatorExpression Binary(CodeExpression left,
- CodeBinaryOperatorType op,
- CodeExpression right)
- {
- return new CodeBinaryOperatorExpression(left, op, right);
- }
-
- public static CodeThisReferenceExpression This {
- get {
- return new CodeThisReferenceExpression();
- }
- }
-
- public static CodeBaseReferenceExpression Base {
- get {
- return new CodeBaseReferenceExpression();
- }
- }
-
- public static CodePropertySetValueReferenceExpression Value {
- get {
- return new CodePropertySetValueReferenceExpression();
- }
- }
-
- public static CodePrimitiveExpression Null {
- get {
- return new CodePrimitiveExpression(null);
- }
- }
-
- public static void AddSummary(CodeTypeMember member, string summary)
- {
- member.Comments.Add(new CodeCommentStatement("", true));
- member.Comments.Add(new CodeCommentStatement(summary, true));
- member.Comments.Add(new CodeCommentStatement("", true));
- }
-
- internal static CodeAttributeDeclaration AddAttribute(CodeAttributeDeclarationCollection col,
- CodeTypeReference type,
- CodeExpression[] arguments)
- {
- CodeAttributeArgument[] attributeArguments = new CodeAttributeArgument[arguments.Length];
- for (int i = 0; i < arguments.Length; i++) {
- attributeArguments[i] = new CodeAttributeArgument(arguments[i]);
- }
- CodeAttributeDeclaration cad = new CodeAttributeDeclaration(type, attributeArguments);
- col.Add(cad);
- return cad;
+ return new CodeTypeReference(type, CodeTypeReferenceOptions.GlobalReference);
+ }
+ public static CodeTypeReference TypeRef(CodeTypeDeclaration type)
+ {
+ return new CodeTypeReference(type.Name);
+ }
+ public static CodeTypeReference TypeRef(string typeName, params string[] typeArguments)
+ {
+ CodeTypeReference tr = new CodeTypeReference(typeName);
+ foreach (string ta in typeArguments) {
+ tr.TypeArguments.Add(ta);
}
+ return tr;
}
- public static class ExtensionMethods
+ ///
+ /// Gets the CodeExpression for any primitive value that can be expressed as literal.
+ /// Also works for enumeration values.
+ ///
+ public static CodeExpression Prim(object literalValue)
{
- public static CodeMethodInvokeExpression InvokeMethod(this CodeExpression expr, string name, params CodeExpression[] arguments)
- {
- return new CodeMethodInvokeExpression(expr, name, arguments);
- }
-
- public static CodeCastExpression CastTo(this CodeExpression expr, Type type)
- {
- return expr.CastTo(Easy.TypeRef(type));
- }
- public static CodeCastExpression CastTo(this CodeExpression expr, CodeTypeReference type)
- {
- return new CodeCastExpression(type, expr);
- }
-
- public static CodeIndexerExpression Index(this CodeExpression expr, params CodeExpression[] indices)
- {
- return new CodeIndexerExpression(expr, indices);
- }
-
- public static CodeFieldReferenceExpression Field(this CodeExpression expr, string name)
- {
- return new CodeFieldReferenceExpression(expr, name);
- }
-
- public static CodePropertyReferenceExpression Property(this CodeExpression expr, string name)
- {
- return new CodePropertyReferenceExpression(expr, name);
- }
-
- public static CodeNamespace AddNamespace(this CodeCompileUnit ccu, string name)
- {
- CodeNamespace n = new CodeNamespace(name);
- ccu.Namespaces.Add(n);
- return n;
- }
-
- public static CodeTypeDeclaration AddType(this CodeNamespace ns, string name)
- {
- CodeTypeDeclaration n = new CodeTypeDeclaration(name);
- ns.Types.Add(n);
- return n;
- }
-
- public static CodeNamespaceImport AddImport(this CodeNamespace ns, string nameSpace)
- {
- CodeNamespaceImport cni = new CodeNamespaceImport(nameSpace);
- ns.Imports.Add(cni);
- return cni;
- }
-
- public static CodeMemberField AddField(this CodeTypeDeclaration typeDecl, Type type, string name)
- {
- return typeDecl.AddField(Easy.TypeRef(type), name);
- }
- public static CodeMemberField AddField(this CodeTypeDeclaration typeDecl, CodeTypeReference type, string name)
- {
- CodeMemberField f = new CodeMemberField(type, name);
- typeDecl.Members.Add(f);
- return f;
- }
-
- public static EasyProperty AddProperty(this CodeTypeDeclaration typeDecl, Type type, string name)
- {
- return AddProperty(typeDecl, Easy.TypeRef(type), name);
- }
- public static EasyProperty AddProperty(this CodeTypeDeclaration typeDecl, CodeTypeReference type, string name)
- {
- EasyProperty p = new EasyProperty(type, name);
- typeDecl.Members.Add(p);
- if (typeDecl.IsInterface == false) {
- p.Attributes = MemberAttributes.Public | MemberAttributes.Final;
- }
- return p;
- }
-
- public static EasyProperty AddProperty(this CodeTypeDeclaration typeDecl, CodeMemberField field, string name)
- {
- EasyProperty p = AddProperty(typeDecl, field.Type, name);
- p.Getter.Return(new CodeVariableReferenceExpression(field.Name));
- p.Attributes |= field.Attributes & MemberAttributes.Static; // copy static flag
- return p;
- }
-
- ///
- /// Adds a method with return type void and attributes=Public|Final to this type.
- ///
- public static EasyMethod AddMethod(this CodeTypeDeclaration typeDecl, string name)
- {
- return AddMethod(typeDecl, Easy.TypeRef(typeof(void)), name);
- }
- ///
- /// Adds a method with return type and attributes=Public|Final to this type.
- ///
- public static EasyMethod AddMethod(this CodeTypeDeclaration typeDecl, Type type, string name)
- {
- return AddMethod(typeDecl, Easy.TypeRef(type), name);
- }
- ///
- /// Adds a method with return type and attributes=Public|Final to this type.
- ///
- public static EasyMethod AddMethod(this CodeTypeDeclaration typeDecl, CodeTypeReference type, string name)
- {
- EasyMethod p = new EasyMethod(type, name);
- typeDecl.Members.Add(p);
- if (typeDecl.IsInterface == false) {
- p.Attributes = MemberAttributes.Public | MemberAttributes.Final;
- }
- return p;
- }
-
- public static CodeAttributeDeclaration AddAttribute(this CodeTypeMember typeMember, Type type, params CodeExpression[] arguments)
- {
- return Easy.AddAttribute(typeMember.CustomAttributes, Easy.TypeRef(type), arguments);
- }
- public static CodeAttributeDeclaration AddAttribute(this CodeTypeMember typeMember, CodeTypeReference type, params CodeExpression[] arguments)
- {
- return Easy.AddAttribute(typeMember.CustomAttributes, type, arguments);
+ if (literalValue is Enum) {
+ return Type(literalValue.GetType()).Field(literalValue.ToString());
+ } else {
+ return new CodePrimitiveExpression(literalValue);
}
}
- public class EasyProperty : CodeMemberProperty
+ public static CodeTypeReferenceExpression Type(Type type)
{
- EasyBlock getter, setter;
-
- public EasyProperty()
- {
- getter = new EasyBlock(this.GetStatements);
- setter = new EasyBlock(this.SetStatements);
- }
-
- public EasyProperty(CodeTypeReference type, string name) : this()
- {
- this.Type = type;
- this.Name = name;
- }
-
- public EasyBlock Getter {
- get { return getter; }
- }
-
- public EasyBlock Setter {
- get { return setter; }
- }
+ return Type(TypeRef(type));
}
- public class EasyMethod : CodeMemberMethod
+ public static CodeTypeReferenceExpression Type(CodeTypeReference type)
{
- EasyBlock body;
-
- public EasyMethod()
- {
- body = new EasyBlock(this.Statements);
- }
-
- public EasyMethod(CodeTypeReference type, string name) : this()
- {
- this.ReturnType = type;
- this.Name = name;
- }
-
- public CodeParameterDeclarationExpression AddParameter(Type type, string name)
- {
- return AddParameter(Easy.TypeRef(type), name);
- }
- public CodeParameterDeclarationExpression AddParameter(CodeTypeReference type, string name)
- {
- CodeParameterDeclarationExpression cpde;
- cpde = new CodeParameterDeclarationExpression(type, name);
- this.Parameters.Add(cpde);
- return cpde;
- }
-
- public EasyBlock Body {
- get { return body; }
- }
+ return new CodeTypeReferenceExpression(type);
}
- public sealed class EasyBlock
+ public static CodeTypeReferenceExpression Type(string type)
{
- readonly CodeStatementCollection csc;
-
- public EasyBlock(CodeStatementCollection csc)
- {
- this.csc = csc;
- }
-
- public CodeMethodReturnStatement Return(CodeExpression expr)
- {
- CodeMethodReturnStatement st = new CodeMethodReturnStatement(expr);
- csc.Add(st);
- return st;
- }
-
- public CodeThrowExceptionStatement Throw(CodeExpression expr)
- {
- CodeThrowExceptionStatement st = new CodeThrowExceptionStatement(expr);
- csc.Add(st);
- return st;
+ return Type(new CodeTypeReference(type));
+ }
+
+ public static CodeTypeOfExpression TypeOf(Type type)
+ {
+ return TypeOf(TypeRef(type));
+ }
+ public static CodeTypeOfExpression TypeOf(CodeTypeReference type)
+ {
+ return new CodeTypeOfExpression(type);
+ }
+
+ public static CodeObjectCreateExpression New(Type type, params CodeExpression[] arguments)
+ {
+ return New(TypeRef(type), arguments);
+ }
+ public static CodeObjectCreateExpression New(CodeTypeReference type, params CodeExpression[] arguments)
+ {
+ return new CodeObjectCreateExpression(type, arguments);
+ }
+
+ public static CodeVariableReferenceExpression Var(string name)
+ {
+ return new CodeVariableReferenceExpression(name);
+ }
+
+ public static CodeBinaryOperatorExpression Binary(CodeExpression left,
+ CodeBinaryOperatorType op,
+ CodeExpression right)
+ {
+ return new CodeBinaryOperatorExpression(left, op, right);
+ }
+
+ public static CodeThisReferenceExpression This {
+ get {
+ return new CodeThisReferenceExpression();
}
-
- public CodeAssignStatement Assign(CodeExpression lhs, CodeExpression rhs)
- {
- CodeAssignStatement st = new CodeAssignStatement(lhs, rhs);
- csc.Add(st);
- return st;
+ }
+
+ public static CodeBaseReferenceExpression Base {
+ get {
+ return new CodeBaseReferenceExpression();
}
-
- ///
- /// Execute one expression as statement.
- ///
- public CodeExpressionStatement Add(CodeExpression expr)
- {
- CodeExpressionStatement st = new CodeExpressionStatement(expr);
- csc.Add(st);
- return st;
+ }
+
+ public static CodePropertySetValueReferenceExpression Value {
+ get {
+ return new CodePropertySetValueReferenceExpression();
}
-
- ///
- /// Adds the statement.
- ///
- public CodeStatement Add(CodeStatement st)
- {
- csc.Add(st);
- return st;
+ }
+
+ public static CodePrimitiveExpression Null {
+ get {
+ return new CodePrimitiveExpression(null);
}
-
- ///
- /// Invoke a method on target as statement.
- ///
- public CodeExpressionStatement InvokeMethod(CodeExpression target, string name, params CodeExpression[] arguments)
- {
- return Add(new CodeMethodInvokeExpression(target, name, arguments));
+ }
+
+ public static void AddSummary(CodeTypeMember member, string summary)
+ {
+ member.Comments.Add(new CodeCommentStatement("", true));
+ member.Comments.Add(new CodeCommentStatement(summary, true));
+ member.Comments.Add(new CodeCommentStatement("", true));
+ }
+
+ internal static CodeAttributeDeclaration AddAttribute(CodeAttributeDeclarationCollection col,
+ CodeTypeReference type,
+ CodeExpression[] arguments)
+ {
+ CodeAttributeArgument[] attributeArguments = new CodeAttributeArgument[arguments.Length];
+ for (int i = 0; i < arguments.Length; i++) {
+ attributeArguments[i] = new CodeAttributeArgument(arguments[i]);
}
-
- ///
- /// Declares a local variable.
- ///
- public CodeVariableDeclarationStatement DeclareVariable(Type type, string name)
- {
- return DeclareVariable(Easy.TypeRef(type), name);
+ CodeAttributeDeclaration cad = new CodeAttributeDeclaration(type, attributeArguments);
+ col.Add(cad);
+ return cad;
+ }
+}
+
+ #if FORMSDESIGNER_DLL
+ internal
+ #else
+ public
+ #endif
+ static class ExtensionMethods
+{
+ public static CodeMethodInvokeExpression InvokeMethod(this CodeExpression expr, string name, params CodeExpression[] arguments)
+ {
+ return new CodeMethodInvokeExpression(expr, name, arguments);
+ }
+
+ public static CodeCastExpression CastTo(this CodeExpression expr, Type type)
+ {
+ return expr.CastTo(Easy.TypeRef(type));
+ }
+ public static CodeCastExpression CastTo(this CodeExpression expr, CodeTypeReference type)
+ {
+ return new CodeCastExpression(type, expr);
+ }
+
+ public static CodeIndexerExpression Index(this CodeExpression expr, params CodeExpression[] indices)
+ {
+ return new CodeIndexerExpression(expr, indices);
+ }
+
+ public static CodeFieldReferenceExpression Field(this CodeExpression expr, string name)
+ {
+ return new CodeFieldReferenceExpression(expr, name);
+ }
+
+ public static CodePropertyReferenceExpression Property(this CodeExpression expr, string name)
+ {
+ return new CodePropertyReferenceExpression(expr, name);
+ }
+
+ public static CodeNamespace AddNamespace(this CodeCompileUnit ccu, string name)
+ {
+ CodeNamespace n = new CodeNamespace(name);
+ ccu.Namespaces.Add(n);
+ return n;
+ }
+
+ public static CodeTypeDeclaration AddType(this CodeNamespace ns, string name)
+ {
+ CodeTypeDeclaration n = new CodeTypeDeclaration(name);
+ ns.Types.Add(n);
+ return n;
+ }
+
+ public static CodeNamespaceImport AddImport(this CodeNamespace ns, string nameSpace)
+ {
+ CodeNamespaceImport cni = new CodeNamespaceImport(nameSpace);
+ ns.Imports.Add(cni);
+ return cni;
+ }
+
+ public static CodeMemberField AddField(this CodeTypeDeclaration typeDecl, Type type, string name)
+ {
+ return typeDecl.AddField(Easy.TypeRef(type), name);
+ }
+ public static CodeMemberField AddField(this CodeTypeDeclaration typeDecl, CodeTypeReference type, string name)
+ {
+ CodeMemberField f = new CodeMemberField(type, name);
+ typeDecl.Members.Add(f);
+ return f;
+ }
+
+ public static EasyProperty AddProperty(this CodeTypeDeclaration typeDecl, Type type, string name)
+ {
+ return AddProperty(typeDecl, Easy.TypeRef(type), name);
+ }
+ public static EasyProperty AddProperty(this CodeTypeDeclaration typeDecl, CodeTypeReference type, string name)
+ {
+ EasyProperty p = new EasyProperty(type, name);
+ typeDecl.Members.Add(p);
+ if (typeDecl.IsInterface == false) {
+ p.Attributes = MemberAttributes.Public | MemberAttributes.Final;
}
- ///
- /// Declares a local variable.
- ///
- public CodeVariableDeclarationStatement DeclareVariable(CodeTypeReference type, string name)
- {
- CodeVariableDeclarationStatement st = new CodeVariableDeclarationStatement(type, name);
- csc.Add(st);
- return st;
+ return p;
+ }
+
+ public static EasyProperty AddProperty(this CodeTypeDeclaration typeDecl, CodeMemberField field, string name)
+ {
+ EasyProperty p = AddProperty(typeDecl, field.Type, name);
+ p.Getter.Return(new CodeVariableReferenceExpression(field.Name));
+ p.Attributes |= field.Attributes & MemberAttributes.Static; // copy static flag
+ return p;
+ }
+
+ ///
+ /// Adds a method with return type void and attributes=Public|Final to this type.
+ ///
+ public static EasyMethod AddMethod(this CodeTypeDeclaration typeDecl, string name)
+ {
+ return AddMethod(typeDecl, Easy.TypeRef(typeof(void)), name);
+ }
+ ///
+ /// Adds a method with return type and attributes=Public|Final to this type.
+ ///
+ public static EasyMethod AddMethod(this CodeTypeDeclaration typeDecl, Type type, string name)
+ {
+ return AddMethod(typeDecl, Easy.TypeRef(type), name);
+ }
+ ///
+ /// Adds a method with return type and attributes=Public|Final to this type.
+ ///
+ public static EasyMethod AddMethod(this CodeTypeDeclaration typeDecl, CodeTypeReference type, string name)
+ {
+ EasyMethod p = new EasyMethod(type, name);
+ typeDecl.Members.Add(p);
+ if (typeDecl.IsInterface == false) {
+ p.Attributes = MemberAttributes.Public | MemberAttributes.Final;
}
+ return p;
+ }
+
+ public static CodeAttributeDeclaration AddAttribute(this CodeTypeMember typeMember, Type type, params CodeExpression[] arguments)
+ {
+ return Easy.AddAttribute(typeMember.CustomAttributes, Easy.TypeRef(type), arguments);
+ }
+ public static CodeAttributeDeclaration AddAttribute(this CodeTypeMember typeMember, CodeTypeReference type, params CodeExpression[] arguments)
+ {
+ return Easy.AddAttribute(typeMember.CustomAttributes, type, arguments);
+ }
+}
+
+ #if FORMSDESIGNER_DLL
+ internal
+ #else
+ public
+ #endif
+ class EasyProperty : CodeMemberProperty
+{
+ EasyBlock getter, setter;
+
+ public EasyProperty()
+ {
+ getter = new EasyBlock(this.GetStatements);
+ setter = new EasyBlock(this.SetStatements);
+ }
+
+ public EasyProperty(CodeTypeReference type, string name) : this()
+ {
+ this.Type = type;
+ this.Name = name;
+ }
+
+ public EasyBlock Getter {
+ get { return getter; }
}
+
+ public EasyBlock Setter {
+ get { return setter; }
+ }
+}
+
+ #if FORMSDESIGNER_DLL
+ internal
+ #else
+ public
+ #endif
+ class EasyMethod : CodeMemberMethod
+{
+ EasyBlock body;
+
+ public EasyMethod()
+ {
+ body = new EasyBlock(this.Statements);
+ }
+
+ public EasyMethod(CodeTypeReference type, string name) : this()
+ {
+ this.ReturnType = type;
+ this.Name = name;
+ }
+
+ public CodeParameterDeclarationExpression AddParameter(Type type, string name)
+ {
+ return AddParameter(Easy.TypeRef(type), name);
+ }
+ public CodeParameterDeclarationExpression AddParameter(CodeTypeReference type, string name)
+ {
+ CodeParameterDeclarationExpression cpde;
+ cpde = new CodeParameterDeclarationExpression(type, name);
+ this.Parameters.Add(cpde);
+ return cpde;
+ }
+
+ public EasyBlock Body {
+ get { return body; }
+ }
+}
+
+ #if FORMSDESIGNER_DLL
+ internal
+ #else
+ public
+ #endif
+ sealed class EasyBlock
+{
+ readonly CodeStatementCollection csc;
+
+ public EasyBlock(CodeStatementCollection csc)
+ {
+ this.csc = csc;
+ }
+
+ public CodeMethodReturnStatement Return(CodeExpression expr)
+ {
+ CodeMethodReturnStatement st = new CodeMethodReturnStatement(expr);
+ csc.Add(st);
+ return st;
+ }
+
+ public CodeThrowExceptionStatement Throw(CodeExpression expr)
+ {
+ CodeThrowExceptionStatement st = new CodeThrowExceptionStatement(expr);
+ csc.Add(st);
+ return st;
+ }
+
+ public CodeAssignStatement Assign(CodeExpression lhs, CodeExpression rhs)
+ {
+ CodeAssignStatement st = new CodeAssignStatement(lhs, rhs);
+ csc.Add(st);
+ return st;
+ }
+
+ ///
+ /// Execute one expression as statement.
+ ///
+ public CodeExpressionStatement Add(CodeExpression expr)
+ {
+ CodeExpressionStatement st = new CodeExpressionStatement(expr);
+ csc.Add(st);
+ return st;
+ }
+
+ ///
+ /// Adds the statement.
+ ///
+ public CodeStatement Add(CodeStatement st)
+ {
+ csc.Add(st);
+ return st;
+ }
+
+ ///
+ /// Invoke a method on target as statement.
+ ///
+ public CodeExpressionStatement InvokeMethod(CodeExpression target, string name, params CodeExpression[] arguments)
+ {
+ return Add(new CodeMethodInvokeExpression(target, name, arguments));
+ }
+
+ ///
+ /// Declares a local variable.
+ ///
+ public CodeVariableDeclarationStatement DeclareVariable(Type type, string name)
+ {
+ return DeclareVariable(Easy.TypeRef(type), name);
+ }
+ ///
+ /// Declares a local variable.
+ ///
+ public CodeVariableDeclarationStatement DeclareVariable(CodeTypeReference type, string name)
+ {
+ CodeVariableDeclarationStatement st = new CodeVariableDeclarationStatement(type, name);
+ csc.Add(st);
+ return st;
+ }
+}
}