~halega/+junk/sharpdevelop

« back to all changes in this revision

Viewing changes to src/Main/Base/Project/Src/Services/AmbienceService/AmbienceService.cs

  • Committer: sk
  • Date: 2011-09-10 05:17:57 UTC
  • Revision ID: halega@halega.com-20110910051757-qfouz1llya9m6boy
4.1.0.7915 Release Candidate 1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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)
 
3
 
 
4
using System;
 
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;
 
10
 
 
11
namespace ICSharpCode.SharpDevelop
 
12
{
 
13
        public static class AmbienceService
 
14
        {
 
15
                const string ambienceProperty       = "SharpDevelop.UI.CurrentAmbience";
 
16
                const string codeGenerationProperty = "SharpDevelop.UI.CodeGenerationOptions";
 
17
                
 
18
                static AmbienceService()
 
19
                {
 
20
                        PropertyService.PropertyChanged += new PropertyChangedEventHandler(PropertyChanged);
 
21
                }
 
22
                
 
23
                public static Properties CodeGenerationProperties {
 
24
                        get {
 
25
                                return PropertyService.Get(codeGenerationProperty, new Properties());
 
26
                        }
 
27
                }
 
28
                
 
29
                static List<CodeGenerator> codeGenerators = new List<CodeGenerator>();
 
30
                
 
31
                static void ApplyCodeGenerationProperties(CodeGenerator generator)
 
32
                {
 
33
                        CodeGeneratorOptions options = generator.Options;
 
34
                        System.CodeDom.Compiler.CodeGeneratorOptions cdo = new CodeDOMGeneratorUtility().CreateCodeGeneratorOptions;
 
35
                        
 
36
                        options.EmptyLinesBetweenMembers = cdo.BlankLinesBetweenMembers;
 
37
                        options.BracesOnSameLine = CodeGenerationProperties.Get("StartBlockOnSameLine", true);;
 
38
                        options.IndentString = cdo.IndentString;
 
39
                }
 
40
                
 
41
                internal static void InitializeCodeGeneratorOptions(CodeGenerator generator)
 
42
                {
 
43
                        codeGenerators.Add(generator);
 
44
                        ApplyCodeGenerationProperties(generator);
 
45
                }
 
46
                
 
47
                public static bool GenerateDocumentComments {
 
48
                        get {
 
49
                                return CodeGenerationProperties.Get("GenerateDocumentComments", true);
 
50
                        }
 
51
                }
 
52
                
 
53
                public static bool GenerateAdditionalComments {
 
54
                        get {
 
55
                                return CodeGenerationProperties.Get("GenerateAdditionalComments", true);
 
56
                        }
 
57
                }
 
58
                
 
59
                public static bool UseFullyQualifiedNames {
 
60
                        get {
 
61
                                return CodeGenerationProperties.Get("UseFullyQualifiedNames", true);
 
62
                        }
 
63
                }
 
64
                
 
65
                public static bool UseProjectAmbienceIfPossible {
 
66
                        get {
 
67
                                return PropertyService.Get("SharpDevelop.UI.UseProjectAmbience", true);
 
68
                        }
 
69
                        set {
 
70
                                PropertyService.Set("SharpDevelop.UI.UseProjectAmbience", value);
 
71
                        }
 
72
                }
 
73
                
 
74
                /// <summary>
 
75
                /// Gets the current ambience.
 
76
                /// This method is thread-safe.
 
77
                /// </summary>
 
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()
 
81
                {
 
82
                        IAmbience ambience;
 
83
                        if (UseProjectAmbienceIfPossible) {
 
84
                                ICSharpCode.SharpDevelop.Project.IProject p = ICSharpCode.SharpDevelop.Project.ProjectService.CurrentProject;
 
85
                                if (p != null) {
 
86
                                        ambience = p.GetAmbience();
 
87
                                        if (ambience != null)
 
88
                                                return ambience;
 
89
                                }
 
90
                        }
 
91
                        string language = DefaultAmbienceName;
 
92
                        try {
 
93
                                ambience = (IAmbience)AddInTree.BuildItem("/SharpDevelop/Workbench/Ambiences/" + language, null);
 
94
                        } catch (TreePathNotFoundException) {
 
95
                                ambience = null;
 
96
                        }
 
97
                        if (ambience == null && Gui.WorkbenchSingleton.MainWin32Window != null) {
 
98
                                MessageService.ShowError("${res:ICSharpCode.SharpDevelop.Services.AmbienceService.AmbienceNotFoundError}");
 
99
                        }
 
100
                        return ambience ?? new NetAmbience();
 
101
                }
 
102
                
 
103
                public static string DefaultAmbienceName {
 
104
                        get {
 
105
                                return PropertyService.Get(ambienceProperty, "C#");
 
106
                        }
 
107
                        set {
 
108
                                PropertyService.Set(ambienceProperty, value);
 
109
                        }
 
110
                }
 
111
                
 
112
                static void PropertyChanged(object sender, PropertyChangedEventArgs e)
 
113
                {
 
114
                        if (e.Key == ambienceProperty) {
 
115
                                OnAmbienceChanged(EventArgs.Empty);
 
116
                        }
 
117
                        if (e.Key == codeGenerationProperty) {
 
118
                                codeGenerators.ForEach(ApplyCodeGenerationProperties);
 
119
                        }
 
120
                }
 
121
                
 
122
                static void OnAmbienceChanged(EventArgs e)
 
123
                {
 
124
                        if (AmbienceChanged != null) {
 
125
                                AmbienceChanged(null, e);
 
126
                        }
 
127
                }
 
128
                
 
129
                public static event EventHandler AmbienceChanged;
 
130
        }
 
131
}