1
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
2
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
5
using System.Collections.Generic;
6
using ICSharpCode.Core;
7
using ICSharpCode.SharpDevelop.Dom;
8
using ICSharpCode.SharpDevelop.Dom.Refactoring;
9
using ICSharpCode.NRefactory.PrettyPrinter;
11
namespace ICSharpCode.SharpDevelop
13
public static class AmbienceService
15
const string ambienceProperty = "SharpDevelop.UI.CurrentAmbience";
16
const string codeGenerationProperty = "SharpDevelop.UI.CodeGenerationOptions";
18
static AmbienceService()
20
PropertyService.PropertyChanged += new PropertyChangedEventHandler(PropertyChanged);
23
public static Properties CodeGenerationProperties {
25
return PropertyService.Get(codeGenerationProperty, new Properties());
29
static List<CodeGenerator> codeGenerators = new List<CodeGenerator>();
31
static void ApplyCodeGenerationProperties(CodeGenerator generator)
33
CodeGeneratorOptions options = generator.Options;
34
System.CodeDom.Compiler.CodeGeneratorOptions cdo = new CodeDOMGeneratorUtility().CreateCodeGeneratorOptions;
36
options.EmptyLinesBetweenMembers = cdo.BlankLinesBetweenMembers;
37
options.BracesOnSameLine = CodeGenerationProperties.Get("StartBlockOnSameLine", true);;
38
options.IndentString = cdo.IndentString;
41
internal static void InitializeCodeGeneratorOptions(CodeGenerator generator)
43
codeGenerators.Add(generator);
44
ApplyCodeGenerationProperties(generator);
47
public static bool GenerateDocumentComments {
49
return CodeGenerationProperties.Get("GenerateDocumentComments", true);
53
public static bool GenerateAdditionalComments {
55
return CodeGenerationProperties.Get("GenerateAdditionalComments", true);
59
public static bool UseFullyQualifiedNames {
61
return CodeGenerationProperties.Get("UseFullyQualifiedNames", true);
65
public static bool UseProjectAmbienceIfPossible {
67
return PropertyService.Get("SharpDevelop.UI.UseProjectAmbience", true);
70
PropertyService.Set("SharpDevelop.UI.UseProjectAmbience", value);
75
/// Gets the current ambience.
76
/// This method is thread-safe.
78
/// <returns>Returns a new ambience object (ambience objects are never reused to ensure their thread-safety).
79
/// Never returns null, in case of errors the <see cref="NetAmbience"/> is used.</returns>
80
public static IAmbience GetCurrentAmbience()
83
if (UseProjectAmbienceIfPossible) {
84
ICSharpCode.SharpDevelop.Project.IProject p = ICSharpCode.SharpDevelop.Project.ProjectService.CurrentProject;
86
ambience = p.GetAmbience();
91
string language = DefaultAmbienceName;
93
ambience = (IAmbience)AddInTree.BuildItem("/SharpDevelop/Workbench/Ambiences/" + language, null);
94
} catch (TreePathNotFoundException) {
97
if (ambience == null && Gui.WorkbenchSingleton.MainWin32Window != null) {
98
MessageService.ShowError("${res:ICSharpCode.SharpDevelop.Services.AmbienceService.AmbienceNotFoundError}");
100
return ambience ?? new NetAmbience();
103
public static string DefaultAmbienceName {
105
return PropertyService.Get(ambienceProperty, "C#");
108
PropertyService.Set(ambienceProperty, value);
112
static void PropertyChanged(object sender, PropertyChangedEventArgs e)
114
if (e.Key == ambienceProperty) {
115
OnAmbienceChanged(EventArgs.Empty);
117
if (e.Key == codeGenerationProperty) {
118
codeGenerators.ForEach(ApplyCodeGenerationProperties);
122
static void OnAmbienceChanged(EventArgs e)
124
if (AmbienceChanged != null) {
125
AmbienceChanged(null, e);
129
public static event EventHandler AmbienceChanged;