Browse Source

move resource access to AD

formsdesignerappdomain
Siegfried Pammer 14 years ago
parent
commit
a378b6061a
  1. 1
      src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/FormsDesigner.AddIn.csproj
  2. 4
      src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/FormsDesignerViewContent.cs
  3. 45
      src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/DesignerResourceService.cs
  4. 49
      src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/ResourceStore.cs
  5. 1
      src/AddIns/DisplayBindings/FormsDesigner/Project/FormsDesigner.csproj
  6. 8
      src/AddIns/DisplayBindings/FormsDesigner/Project/FormsDesignerAppDomainHost.cs
  7. 3
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerLoader/SharpDevelopDesignerLoader.cs
  8. 17
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/IFormsDesigner.cs
  9. 72
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/DesignerResourceService.cs

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

@ -99,7 +99,6 @@ @@ -99,7 +99,6 @@
<Compile Include="OptionPanels\GridOptions.cs" />
<Compile Include="OptionPanels\LocalizationModelOptionsPanel.cs" />
<Compile Include="SecondaryDisplayBinding.cs" />
<Compile Include="Services\DesignerResourceService.cs" />
<Compile Include="Services\SharpDevelopCommandProvider.cs" />
<Compile Include="Services\DomTypeLocator.cs" />
<Compile Include="Services\HelpService.cs" />

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

@ -160,7 +160,8 @@ namespace ICSharpCode.FormsDesigner @@ -160,7 +160,8 @@ namespace ICSharpCode.FormsDesigner
Commands = new SharpDevelopCommandProvider(this),
FormsDesignerProxy = new ViewContentIFormsDesignerProxy(this),
Logger = new FormsDesignerLoggingServiceImpl(),
Options = options
Options = options,
ResourceStore = resourceStore
};
appDomain = null;
@ -334,7 +335,6 @@ namespace ICSharpCode.FormsDesigner @@ -334,7 +335,6 @@ namespace ICSharpCode.FormsDesigner
appDomainHost.AddService(typeof(IHelpService), new HelpService());
appDomainHost.AddService(typeof(System.ComponentModel.Design.IResourceService), new DesignerResourceService(this.resourceStore));
appDomainHost.AddService(typeof(IProjectResourceService), new ProjectResourceService(ParserService.GetParseInformation(this.DesignerCodeFile.FileName).CompilationUnit.ProjectContent));
appDomainHost.AddService(typeof(IImageResourceEditorDialogWrapper), new ImageResourceEditorDialogWrapper(ParserService.GetParseInformation(this.DesignerCodeFile.FileName).CompilationUnit.ProjectContent.Project as IProject));

45
src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/DesignerResourceService.cs

@ -1,45 +0,0 @@ @@ -1,45 +0,0 @@
// 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.Globalization;
using ICSharpCode.Core;
namespace ICSharpCode.FormsDesigner.Services
{
sealed class DesignerResourceService : MarshalByRefObject, System.ComponentModel.Design.IResourceService
{
readonly ResourceStore store;
public DesignerResourceService(ResourceStore store)
{
if (store == null)
throw new ArgumentNullException("store");
this.store = store;
}
#region System.ComponentModel.Design.IResourceService interface implementation
public System.Resources.IResourceWriter GetResourceWriter(CultureInfo info)
{
try {
LoggingService.Debug("ResourceWriter requested for culture: " + info.ToString());
return this.store.GetWriter(info);
} catch (Exception e) {
MessageService.ShowException(e);
return null;
}
}
public System.Resources.IResourceReader GetResourceReader(System.Globalization.CultureInfo info)
{
try {
LoggingService.Debug("ResourceReader requested for culture: "+info.ToString());
return this.store.GetReader(info);
} catch (Exception e) {
MessageService.ShowException(e);
return null;
}
}
#endregion
}
}

49
src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/ResourceStore.cs

@ -3,11 +3,11 @@ @@ -3,11 +3,11 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Resources;
using System.Text;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Gui;
@ -18,7 +18,7 @@ namespace ICSharpCode.FormsDesigner.Services @@ -18,7 +18,7 @@ namespace ICSharpCode.FormsDesigner.Services
/// <summary>
/// Manages the resource files that belong to an open forms designer view.
/// </summary>
internal sealed class ResourceStore : IDisposable
internal sealed class ResourceStore : MarshalByRefObject, IResourceStore, IDisposable
{
readonly FormsDesignerViewContent viewContent;
@ -44,16 +44,6 @@ namespace ICSharpCode.FormsDesigner.Services @@ -44,16 +44,6 @@ namespace ICSharpCode.FormsDesigner.Services
return storage;
}
public IResourceReader GetReader(CultureInfo info)
{
return this.GetResourceStorage(info).GetReader();
}
public IResourceWriter GetWriter(CultureInfo info)
{
return this.GetResourceStorage(info).GetWriter();
}
void CreateOpenedFileForStorage(ResourceStorage storage, string fileName, bool isExistingFile)
{
storage.OpenedFile = FileService.GetOrCreateOpenedFile(fileName);
@ -116,6 +106,10 @@ namespace ICSharpCode.FormsDesigner.Services @@ -116,6 +106,10 @@ namespace ICSharpCode.FormsDesigner.Services
this.cultureName = cultureName;
}
public ResourceType Type {
get { return GetResourceType(OpenedFile.FileName); }
}
public void Dispose()
{
if (this.stream != null) {
@ -159,17 +153,16 @@ namespace ICSharpCode.FormsDesigner.Services @@ -159,17 +153,16 @@ namespace ICSharpCode.FormsDesigner.Services
/// Returns a new resource reader for this resource based on the most recent
/// version available (either in memory or on disk).
/// </summary>
public IResourceReader GetReader()
public Stream GetReadingStream()
{
if (this.buffer == null) {
if (OpenedFile != null) {
return CreateResourceReader(OpenFileContentAsMemoryStream(OpenedFile), GetResourceType(OpenedFile.FileName));
return OpenFileContentAsMemoryStream(OpenedFile);
} else {
return null;
}
} else {
ResourceType type = (OpenedFile != null) ? GetResourceType(OpenedFile.FileName) : ResourceType.Resx;
return CreateResourceReader(new MemoryStream(this.buffer, false), type);
return new MemoryStream(this.buffer, false);
}
}
@ -201,11 +194,10 @@ namespace ICSharpCode.FormsDesigner.Services @@ -201,11 +194,10 @@ namespace ICSharpCode.FormsDesigner.Services
/// a new writer needs to be returned every time one is requested, discarding any
/// data written by previously returned writers.
/// </summary>
public IResourceWriter GetWriter()
public Stream GetWritingStream()
{
this.stream = new MemoryStream();
this.writer = CreateResourceWriter(this.stream, GetResourceType(OpenedFile.FileName));
return this.writer;
return this.stream;
}
public void Save(Stream stream, ResourceStore resourceStore)
@ -238,11 +230,6 @@ namespace ICSharpCode.FormsDesigner.Services @@ -238,11 +230,6 @@ namespace ICSharpCode.FormsDesigner.Services
}
#endregion
internal enum ResourceType {
Resx = 0,
Resources = 1
};
static IProject GetProject(string formFileName)
{
if (ProjectService.OpenSolution != null && formFileName != null)
@ -350,5 +337,19 @@ namespace ICSharpCode.FormsDesigner.Services @@ -350,5 +337,19 @@ namespace ICSharpCode.FormsDesigner.Services
}
return ResourceType.Resources;
}
public Stream GetResourceAsStreamForReading(CultureInfo info, out ResourceType type)
{
ResourceStorage storage = GetResourceStorage(info);
type = storage.Type;
return storage.GetReadingStream();
}
public Stream GetResourceAsStreamForWriting(CultureInfo info, out ResourceType type)
{
ResourceStorage storage = GetResourceStorage(info);
type = storage.Type;
return storage.GetWritingStream();
}
}
}

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

@ -95,6 +95,7 @@ @@ -95,6 +95,7 @@
<Compile Include="Src\Services\DefaultMemberRelationshipService.cs" />
<Compile Include="Src\Services\DefaultServiceContainer.cs" />
<Compile Include="Src\Services\DesignerOptionService.cs" />
<Compile Include="Src\Services\DesignerResourceService.cs" />
<Compile Include="Src\Services\EventBindingService.cs" />
<Compile Include="Src\Services\ImageResourceEditor.cs" />
<Compile Include="Src\Services\IProjectResourceService.cs" />

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

@ -97,6 +97,7 @@ namespace ICSharpCode.FormsDesigner @@ -97,6 +97,7 @@ namespace ICSharpCode.FormsDesigner
Services.EventBindingService eventBindingService = new Services.EventBindingService(properties.FormsDesignerProxy, designSurface);
container.AddService(typeof(System.ComponentModel.Design.IEventBindingService), eventBindingService);
container.AddService(typeof(IToolboxService), new SharpDevelopToolboxService(this));
container.AddService(typeof(System.ComponentModel.Design.IResourceService), new DesignerResourceService(properties.ResourceStore, this));
InitializeEvents();
}
@ -361,6 +362,12 @@ namespace ICSharpCode.FormsDesigner @@ -361,6 +362,12 @@ namespace ICSharpCode.FormsDesigner
}
}
public IMessageService MessageService {
get {
return GetService(typeof(IMessageService)) as IMessageService;
}
}
public void AddService(Type type, object service)
{
Services.AddService(type, service);
@ -413,5 +420,6 @@ namespace ICSharpCode.FormsDesigner @@ -413,5 +420,6 @@ namespace ICSharpCode.FormsDesigner
public IFormsDesigner FormsDesignerProxy { get; set; }
public IFormsDesignerLoggingService Logger { get; set; }
public SharpDevelopDesignerOptions Options { get; set; }
public IResourceStore ResourceStore { get; set; }
}
}

3
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerLoader/SharpDevelopDesignerLoader.cs

@ -7,8 +7,8 @@ using System.Collections; @@ -7,8 +7,8 @@ using System.Collections;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.ComponentModel.Design.Serialization;
using System.Diagnostics;
using System.Reflection;
using ICSharpCode.FormsDesigner.Services;
namespace ICSharpCode.FormsDesigner
@ -58,6 +58,7 @@ namespace ICSharpCode.FormsDesigner @@ -58,6 +58,7 @@ namespace ICSharpCode.FormsDesigner
public SharpDevelopDesignerLoader(IServiceProvider services, IDesignerGenerator generator, IDesignerLoader loader)
{
Debug.Assert(DesignerAppDomainManager.IsDesignerDomain, "not in Designer AppDomain!");
if (generator == null) {
throw new ArgumentNullException("generator", "Generator cannot be null");
}

17
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/IFormsDesigner.cs

@ -3,6 +3,11 @@ @@ -3,6 +3,11 @@
using System;
using System.ComponentModel;
using System.Globalization;
using System.IO;
using System.Resources;
using System.Security.AccessControl;
using ICSharpCode.FormsDesigner.Services;
namespace ICSharpCode.FormsDesigner
@ -22,4 +27,16 @@ namespace ICSharpCode.FormsDesigner @@ -22,4 +27,16 @@ namespace ICSharpCode.FormsDesigner
SharpDevelopDesignerOptions DesignerOptions { get; }
}
public enum ResourceType
{
Resx = 0,
Resources = 1
}
public interface IResourceStore
{
Stream GetResourceAsStreamForReading(CultureInfo info, out ResourceType type);
Stream GetResourceAsStreamForWriting(CultureInfo info, out ResourceType type);
}
}

72
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/DesignerResourceService.cs

@ -0,0 +1,72 @@ @@ -0,0 +1,72 @@
// 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.Diagnostics;
using System.Globalization;
using System.IO;
using System.Resources;
namespace ICSharpCode.FormsDesigner.Services
{
sealed class DesignerResourceService : System.ComponentModel.Design.IResourceService
{
readonly IResourceStore store;
FormsDesignerAppDomainHost host;
public DesignerResourceService(IResourceStore store, FormsDesignerAppDomainHost host)
{
if (store == null)
throw new ArgumentNullException("store");
this.store = store;
this.host = host;
}
#region System.ComponentModel.Design.IResourceService interface implementation
public System.Resources.IResourceWriter GetResourceWriter(CultureInfo info)
{
try {
host.LoggingService.Debug("ResourceWriter requested for culture: " + info.ToString());
ResourceType type;
Stream stream = store.GetResourceAsStreamForWriting(info, out type);
return CreateResourceWriter(stream, type);
} catch (Exception e) {
host.MessageService.ShowException(e, "");
return null;
}
}
public System.Resources.IResourceReader GetResourceReader(System.Globalization.CultureInfo info)
{
try {
host.LoggingService.Debug("ResourceReader requested for culture: "+info.ToString());
ResourceType type;
Stream stream = store.GetResourceAsStreamForReading(info, out type);
return CreateResourceReader(stream, type);
} catch (Exception e) {
host.MessageService.ShowException(e, "");
return null;
}
}
#endregion
internal static IResourceReader CreateResourceReader(Stream stream, ResourceType type)
{
Debug.Assert(DesignerAppDomainManager.IsDesignerDomain, "not in Designer AppDomain!");
if (stream.Length == 0)
return null;
if (type == ResourceType.Resources) {
return new ResourceReader(stream);
}
return new ResXResourceReader(stream);
}
internal static IResourceWriter CreateResourceWriter(Stream stream, ResourceType type)
{
if (type == ResourceType.Resources) {
return new ResourceWriter(stream);
}
return new ResXResourceWriter(stream);
}
}
}
Loading…
Cancel
Save