Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Editor/DefaultSourceEditorOptions.cs')
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Editor/DefaultSourceEditorOptions.cs785
1 files changed, 785 insertions, 0 deletions
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Editor/DefaultSourceEditorOptions.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Editor/DefaultSourceEditorOptions.cs
new file mode 100644
index 0000000000..1e83737769
--- /dev/null
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Editor/DefaultSourceEditorOptions.cs
@@ -0,0 +1,785 @@
+//
+// DefaultSourceEditorOptions.cs
+//
+// Author:
+// Mike Krüger <mkrueger@xamarin.com>
+//
+// Copyright (c) 2014 Xamarin Inc. (http://xamarin.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+using System;
+using MonoDevelop.Core;
+using MonoDevelop.Ide.Gui.Content;
+using MonoDevelop.Ide.Fonts;
+using MonoDevelop.Ide.Editor.Extension;
+
+namespace MonoDevelop.Ide.Editor
+{
+ [Obsolete ("Use WordNavigationStyle")]
+ public enum ControlLeftRightMode
+ {
+ MonoDevelop,
+ Emacs,
+ SharpDevelop
+ }
+
+ public enum WordNavigationStyle
+ {
+ Unix,
+ Windows
+ }
+
+ public enum LineEndingConversion {
+ Ask,
+ LeaveAsIs,
+ ConvertAlways
+ }
+
+ /// <summary>
+ /// This class contains all text editor options from ITextEditorOptions and additional options
+ /// the text editor frontend may use.
+ /// </summary>
+ public sealed class DefaultSourceEditorOptions : ITextEditorOptions
+ {
+ static DefaultSourceEditorOptions instance;
+ //static TextStylePolicy defaultPolicy;
+ static bool inited;
+
+ public static DefaultSourceEditorOptions Instance {
+ get { return instance; }
+ }
+
+ public static ITextEditorOptions PlainEditor {
+ get;
+ private set;
+ }
+
+ static DefaultSourceEditorOptions ()
+ {
+ Init ();
+ }
+
+ public static void Init ()
+ {
+ if (inited)
+ return;
+ inited = true;
+
+ var policy = MonoDevelop.Projects.Policies.PolicyService.GetDefaultPolicy<TextStylePolicy> ("text/plain");
+ instance = new DefaultSourceEditorOptions (policy);
+ MonoDevelop.Projects.Policies.PolicyService.DefaultPolicies.PolicyChanged += instance.HandlePolicyChanged;
+
+ PlainEditor = new PlainEditorOptions ();
+ }
+
+ class PlainEditorOptions : ITextEditorOptions
+ {
+ #region IDisposable implementation
+
+ void IDisposable.Dispose ()
+ {
+ // nothing
+ }
+
+ #endregion
+
+ #region ITextEditorOptions implementation
+
+ WordFindStrategy ITextEditorOptions.WordFindStrategy {
+ get {
+ return DefaultSourceEditorOptions.Instance.WordFindStrategy;
+ }
+ }
+
+ bool ITextEditorOptions.TabsToSpaces {
+ get {
+ return DefaultSourceEditorOptions.Instance.TabsToSpaces;
+ }
+ }
+
+ int ITextEditorOptions.IndentationSize {
+ get {
+ return DefaultSourceEditorOptions.Instance.IndentationSize;
+ }
+ }
+
+ int ITextEditorOptions.TabSize {
+ get {
+ return DefaultSourceEditorOptions.Instance.TabSize;
+ }
+ }
+
+ bool ITextEditorOptions.ShowIconMargin {
+ get {
+ return false;
+ }
+ }
+
+ bool ITextEditorOptions.ShowLineNumberMargin {
+ get {
+ return false;
+ }
+ }
+
+ bool ITextEditorOptions.ShowFoldMargin {
+ get {
+ return false;
+ }
+ }
+
+ bool ITextEditorOptions.HighlightCaretLine {
+ get {
+ return DefaultSourceEditorOptions.Instance.HighlightCaretLine;
+ }
+ }
+
+ int ITextEditorOptions.RulerColumn {
+ get {
+ return DefaultSourceEditorOptions.Instance.RulerColumn;
+ }
+ }
+
+ bool ITextEditorOptions.ShowRuler {
+ get {
+ return false;
+ }
+ }
+
+ IndentStyle ITextEditorOptions.IndentStyle {
+ get {
+ return DefaultSourceEditorOptions.Instance.IndentStyle;
+ }
+ }
+
+ bool ITextEditorOptions.OverrideDocumentEolMarker {
+ get {
+ return false;
+ }
+ }
+
+ bool ITextEditorOptions.EnableSyntaxHighlighting {
+ get {
+ return DefaultSourceEditorOptions.Instance.EnableSyntaxHighlighting;
+ }
+ }
+
+ bool ITextEditorOptions.RemoveTrailingWhitespaces {
+ get {
+ return DefaultSourceEditorOptions.Instance.RemoveTrailingWhitespaces;
+ }
+ }
+
+ bool ITextEditorOptions.WrapLines {
+ get {
+ return DefaultSourceEditorOptions.Instance.WrapLines;
+ }
+ }
+
+ string ITextEditorOptions.FontName {
+ get {
+ return DefaultSourceEditorOptions.Instance.FontName;
+ }
+ }
+
+ string ITextEditorOptions.GutterFontName {
+ get {
+ return DefaultSourceEditorOptions.Instance.GutterFontName;
+ }
+ }
+
+ string ITextEditorOptions.ColorScheme {
+ get {
+ return DefaultSourceEditorOptions.Instance.ColorScheme;
+ }
+ }
+
+ string ITextEditorOptions.DefaultEolMarker {
+ get {
+ return DefaultSourceEditorOptions.Instance.DefaultEolMarker;
+ }
+ }
+
+ bool ITextEditorOptions.GenerateFormattingUndoStep {
+ get {
+ return DefaultSourceEditorOptions.Instance.GenerateFormattingUndoStep;
+ }
+ }
+
+ ShowWhitespaces ITextEditorOptions.ShowWhitespaces {
+ get {
+ return ShowWhitespaces.Never;
+ }
+ }
+
+ IncludeWhitespaces ITextEditorOptions.IncludeWhitespaces {
+ get {
+ return DefaultSourceEditorOptions.Instance.IncludeWhitespaces;
+ }
+ }
+
+ #endregion
+
+
+ }
+
+ void HandlePolicyChanged (object sender, MonoDevelop.Projects.Policies.PolicyChangedEventArgs args)
+ {
+ TextStylePolicy pol = MonoDevelop.Projects.Policies.PolicyService.GetDefaultPolicy<TextStylePolicy> ("text/plain");
+ UpdateStylePolicy (pol);
+ }
+
+ DefaultSourceEditorOptions (TextStylePolicy currentPolicy)
+ {
+ var defaultControlMode = (ControlLeftRightMode)Enum.Parse (typeof(ControlLeftRightMode), DesktopService.DefaultControlLeftRightBehavior);
+ controlLeftRightMode = new PropertyWrapper<ControlLeftRightMode> ("ControlLeftRightMode", defaultControlMode);
+
+ WordNavigationStyle defaultWordNavigation = WordNavigationStyle.Unix;
+ if (Platform.IsWindows || controlLeftRightMode.Value == ControlLeftRightMode.SharpDevelop) {
+ defaultWordNavigation = WordNavigationStyle.Windows;
+ }
+ wordNavigationStyle = new PropertyWrapper<WordNavigationStyle> ("WordNavigationStyle", defaultWordNavigation);
+
+ UpdateStylePolicy (currentPolicy);
+ FontService.RegisterFontChangedCallback ("Editor", UpdateFont);
+ FontService.RegisterFontChangedCallback ("MessageBubbles", UpdateFont);
+ }
+
+ void UpdateFont ()
+ {
+ this.OnChanged (EventArgs.Empty);
+ }
+
+ void UpdateStylePolicy (MonoDevelop.Ide.Gui.Content.TextStylePolicy currentPolicy)
+ {
+ defaultEolMarker = TextStylePolicy.GetEolMarker (currentPolicy.EolMarker);
+ tabsToSpaces = currentPolicy.TabsToSpaces; // PropertyService.Get ("TabsToSpaces", false);
+ indentationSize = currentPolicy.TabWidth; //PropertyService.Get ("TabIndent", 4);
+ rulerColumn = currentPolicy.FileWidth; //PropertyService.Get ("RulerColumn", 80);
+ allowTabsAfterNonTabs = !currentPolicy.NoTabsAfterNonTabs; //PropertyService.Get ("AllowTabsAfterNonTabs", true);
+ removeTrailingWhitespaces = currentPolicy.RemoveTrailingWhitespace; //PropertyService.Get ("RemoveTrailingWhitespaces", true);
+ }
+
+ public ITextEditorOptions WithTextStyle (MonoDevelop.Ide.Gui.Content.TextStylePolicy policy)
+ {
+ if (policy == null)
+ throw new ArgumentNullException ("policy");
+ var result = (DefaultSourceEditorOptions)MemberwiseClone ();
+ result.UpdateStylePolicy (policy);
+ result.Changed = null;
+ return result;
+ }
+
+ #region new options
+
+ public bool EnableAutoCodeCompletion {
+ get { return CompletionTextEditorExtension.EnableAutoCodeCompletion; }
+ set { CompletionTextEditorExtension.EnableAutoCodeCompletion.Set (value); }
+ }
+
+ PropertyWrapper<bool> defaultRegionsFolding = new PropertyWrapper<bool> ("DefaultRegionsFolding", false);
+ public bool DefaultRegionsFolding {
+ get {
+ return defaultRegionsFolding;
+ }
+ set {
+ if (defaultRegionsFolding.Set (value))
+ OnChanged (EventArgs.Empty);
+ }
+ }
+
+ PropertyWrapper<bool> defaultCommentFolding = new PropertyWrapper<bool> ("DefaultCommentFolding", true);
+ public bool DefaultCommentFolding {
+ get {
+ return defaultCommentFolding;
+ }
+ set {
+ if (defaultCommentFolding.Set (value))
+ OnChanged (EventArgs.Empty);
+ }
+ }
+
+ PropertyWrapper<bool> enableSemanticHighlighting = new PropertyWrapper<bool> ("EnableSemanticHighlighting", true);
+ public bool EnableSemanticHighlighting {
+ get {
+ return enableSemanticHighlighting;
+ }
+ set {
+ if (enableSemanticHighlighting.Set (value))
+ OnChanged (EventArgs.Empty);
+ }
+ }
+
+ PropertyWrapper<bool> tabIsReindent = new PropertyWrapper<bool> ("TabIsReindent", false);
+ public bool TabIsReindent {
+ get {
+ return tabIsReindent;
+ }
+ set {
+ if (tabIsReindent.Set (value))
+ OnChanged (EventArgs.Empty);
+ }
+ }
+
+ PropertyWrapper<bool> autoInsertMatchingBracket = new PropertyWrapper<bool> ("AutoInsertMatchingBracket", false);
+ public bool AutoInsertMatchingBracket {
+ get {
+ return autoInsertMatchingBracket;
+ }
+ set {
+ if (autoInsertMatchingBracket.Set (value))
+ OnChanged (EventArgs.Empty);
+ }
+ }
+
+ PropertyWrapper<bool> smartSemicolonPlacement = new PropertyWrapper<bool> ("SmartSemicolonPlacement", false);
+ public bool SmartSemicolonPlacement {
+ get {
+ return smartSemicolonPlacement;
+ }
+ set {
+ if (smartSemicolonPlacement.Set (value))
+ OnChanged (EventArgs.Empty);
+ }
+ }
+
+ PropertyWrapper<bool> underlineErrors = new PropertyWrapper<bool> ("UnderlineErrors", true);
+ public bool UnderlineErrors {
+ get {
+ return underlineErrors;
+ }
+ set {
+ if (underlineErrors.Set (value))
+ OnChanged (EventArgs.Empty);
+ }
+ }
+
+ PropertyWrapper<IndentStyle> indentStyle = new PropertyWrapper<IndentStyle> ("IndentStyle", IndentStyle.Smart);
+ public IndentStyle IndentStyle {
+ get {
+ return indentStyle;
+ }
+ set {
+ if (indentStyle.Set (value))
+ OnChanged (EventArgs.Empty);
+ }
+ }
+
+ PropertyWrapper<bool> enableHighlightUsages = new PropertyWrapper<bool> ("EnableHighlightUsages", false);
+ public bool EnableHighlightUsages {
+ get {
+ return enableHighlightUsages;
+ }
+ set {
+ if (enableHighlightUsages.Set (value))
+ OnChanged (EventArgs.Empty);
+ }
+ }
+
+ PropertyWrapper<LineEndingConversion> lineEndingConversion = new PropertyWrapper<LineEndingConversion> ("LineEndingConversion", LineEndingConversion.Ask);
+ public LineEndingConversion LineEndingConversion {
+ get {
+ return lineEndingConversion;
+ }
+ set {
+ if (lineEndingConversion.Set (value))
+ OnChanged (EventArgs.Empty);
+ }
+ }
+
+ #endregion
+
+ PropertyWrapper<bool> useViModes = new PropertyWrapper<bool> ("UseViModes", true);
+ public bool UseViModes {
+ get {
+ return useViModes;
+ }
+ set {
+ if (useViModes.Set (value))
+ OnChanged (EventArgs.Empty);
+ }
+ }
+
+ PropertyWrapper<bool> onTheFlyFormatting = new PropertyWrapper<bool> ("OnTheFlyFormatting", true);
+ public bool OnTheFlyFormatting {
+ get {
+ return onTheFlyFormatting;
+ }
+ set {
+ if (onTheFlyFormatting.Set (value))
+ OnChanged (EventArgs.Empty);
+ }
+ }
+
+ #region ITextEditorOptions
+ string defaultEolMarker = Environment.NewLine;
+ public string DefaultEolMarker {
+ get {
+ return defaultEolMarker;
+ }
+ set {
+ if (defaultEolMarker != value) {
+ defaultEolMarker = value;
+ OnChanged (EventArgs.Empty);
+ }
+ }
+ }
+
+ PropertyWrapper<ControlLeftRightMode> controlLeftRightMode;
+ [Obsolete("Use WordNavigationStyle")]
+ public ControlLeftRightMode ControlLeftRightMode {
+ get {
+ return controlLeftRightMode;
+ }
+ set {
+ if (controlLeftRightMode.Set (value))
+ OnChanged (EventArgs.Empty);
+ }
+ }
+
+ PropertyWrapper<WordNavigationStyle> wordNavigationStyle;
+ public WordNavigationStyle WordNavigationStyle {
+ get {
+ return wordNavigationStyle;
+ }
+ set {
+ if (wordNavigationStyle.Set (value))
+ OnChanged (EventArgs.Empty);
+ }
+ }
+
+ public WordFindStrategy WordFindStrategy {
+ get {
+ if (useViModes) {
+ return WordFindStrategy.Vim;
+ }
+ switch (WordNavigationStyle) {
+ case WordNavigationStyle.Windows:
+ return WordFindStrategy.SharpDevelop;
+ default:
+ return WordFindStrategy.Emacs;
+ }
+ }
+ set {
+ throw new System.NotImplementedException ();
+ }
+ }
+
+ bool allowTabsAfterNonTabs = true;
+ public bool AllowTabsAfterNonTabs {
+ get {
+ return allowTabsAfterNonTabs;
+ }
+ set {
+ if (allowTabsAfterNonTabs != value) {
+ PropertyService.Set ("AllowTabsAfterNonTabs", value);
+ allowTabsAfterNonTabs = value;
+ OnChanged (EventArgs.Empty);
+ }
+ }
+ }
+
+ bool tabsToSpaces = false;
+ public bool TabsToSpaces {
+ get {
+ return tabsToSpaces;
+ }
+ set {
+ if (tabsToSpaces != value) {
+ PropertyService.Set ("TabsToSpaces", value);
+ tabsToSpaces = value;
+ OnChanged (EventArgs.Empty);
+ }
+ }
+ }
+
+ int indentationSize = 4;
+ public int IndentationSize {
+ get {
+ return indentationSize;
+ }
+ set {
+ if (indentationSize != value) {
+ PropertyService.Set ("TabIndent", value);
+ indentationSize = value;
+ OnChanged (EventArgs.Empty);
+ }
+ }
+ }
+
+
+ public string IndentationString {
+ get {
+ return TabsToSpaces ? new string (' ', this.TabSize) : "\t";
+ }
+ }
+
+ public int TabSize {
+ get {
+ return IndentationSize;
+ }
+ set {
+ IndentationSize = value;
+ }
+ }
+
+
+ bool removeTrailingWhitespaces = true;
+ public bool RemoveTrailingWhitespaces {
+ get {
+ return removeTrailingWhitespaces;
+ }
+ set {
+ if (removeTrailingWhitespaces != value) {
+ PropertyService.Set ("RemoveTrailingWhitespaces", value);
+ OnChanged (EventArgs.Empty);
+ removeTrailingWhitespaces = value;
+ }
+ }
+ }
+
+ PropertyWrapper<bool> showLineNumberMargin = new PropertyWrapper<bool> ("ShowLineNumberMargin", true);
+ public bool ShowLineNumberMargin {
+ get {
+ return showLineNumberMargin;
+ }
+ set {
+ if (showLineNumberMargin.Set (value))
+ OnChanged (EventArgs.Empty);
+ }
+ }
+
+ PropertyWrapper<bool> showFoldMargin = new PropertyWrapper<bool> ("ShowFoldMargin", false);
+ public bool ShowFoldMargin {
+ get {
+ return showFoldMargin;
+ }
+ set {
+ if (showFoldMargin.Set (value))
+ OnChanged (EventArgs.Empty);
+ }
+ }
+
+ bool showIconMargin = true;
+ public bool ShowIconMargin {
+ get {
+ return showIconMargin;
+ }
+ set {
+ if (showIconMargin != value) {
+ PropertyService.Set ("ShowIconMargin", value);
+ showIconMargin = value;
+ OnChanged (EventArgs.Empty);
+ }
+ }
+ }
+
+ PropertyWrapper<bool> highlightCaretLine = new PropertyWrapper<bool> ("HighlightCaretLine", false);
+ public bool HighlightCaretLine {
+ get {
+ return highlightCaretLine;
+ }
+ set {
+ if (highlightCaretLine.Set (value))
+ OnChanged (EventArgs.Empty);
+ }
+ }
+
+ PropertyWrapper<bool> enableSyntaxHighlighting = new PropertyWrapper<bool> ("EnableSyntaxHighlighting", true);
+ public bool EnableSyntaxHighlighting {
+ get {
+ return enableSyntaxHighlighting;
+ }
+ set {
+ if (enableSyntaxHighlighting.Set (value))
+ OnChanged (EventArgs.Empty);
+ }
+ }
+
+ PropertyWrapper<bool> highlightMatchingBracket = new PropertyWrapper<bool> ("HighlightMatchingBracket", true);
+ public bool HighlightMatchingBracket {
+ get {
+ return highlightMatchingBracket;
+ }
+ set {
+ if (highlightMatchingBracket.Set (value))
+ OnChanged (EventArgs.Empty);
+ }
+ }
+
+ int rulerColumn = 80;
+
+ public int RulerColumn {
+ get {
+ return rulerColumn;
+ }
+ set {
+ if (rulerColumn != value) {
+ PropertyService.Set ("RulerColumn", value);
+ rulerColumn = value;
+ OnChanged (EventArgs.Empty);
+ }
+ }
+ }
+
+ PropertyWrapper<bool> showRuler = new PropertyWrapper<bool> ("ShowRuler", true);
+ public bool ShowRuler {
+ get {
+ return showRuler;
+ }
+ set {
+ if (showRuler.Set (value))
+ OnChanged (EventArgs.Empty);
+ }
+ }
+
+ PropertyWrapper<bool> enableAnimations = new PropertyWrapper<bool> ("EnableAnimations", true);
+ public bool EnableAnimations {
+ get {
+ return enableAnimations;
+ }
+ set {
+ if (enableAnimations.Set (value))
+ OnChanged (EventArgs.Empty);
+ }
+ }
+
+ PropertyWrapper<bool> drawIndentationMarkers = new PropertyWrapper<bool> ("DrawIndentationMarkers", false);
+ public bool DrawIndentationMarkers {
+ get {
+ return drawIndentationMarkers;
+ }
+ set {
+ if (drawIndentationMarkers.Set (value))
+ OnChanged (EventArgs.Empty);
+ }
+ }
+
+ PropertyWrapper<bool> wrapLines = new PropertyWrapper<bool> ("WrapLines", false);
+ public bool WrapLines {
+ get {
+ return wrapLines;
+ }
+ set {
+ if (wrapLines.Set (value))
+ OnChanged (EventArgs.Empty);
+ }
+ }
+
+ PropertyWrapper<bool> enableQuickDiff = new PropertyWrapper<bool> ("EnableQuickDiff", false);
+ public bool EnableQuickDiff {
+ get {
+ return enableQuickDiff;
+ }
+ set {
+ if (enableQuickDiff.Set (value))
+ OnChanged (EventArgs.Empty);
+ }
+ }
+
+ public string FontName {
+ get {
+ return FontService.FilterFontName (FontService.GetUnderlyingFontName ("Editor"));
+ }
+ set {
+ throw new InvalidOperationException ("Set font through font service");
+ }
+ }
+
+ public string GutterFontName {
+ get {
+ return FontService.FilterFontName (FontService.GetUnderlyingFontName ("Editor"));
+ }
+ set {
+ throw new InvalidOperationException ("Set font through font service");
+ }
+ }
+
+ PropertyWrapper<string> colorScheme = new PropertyWrapper<string> ("ColorScheme", "Default");
+ public string ColorScheme {
+ get {
+ return colorScheme;
+ }
+ set {
+ if (colorScheme.Set (value))
+ OnChanged (EventArgs.Empty);
+ }
+ }
+
+ PropertyWrapper<bool> generateFormattingUndoStep = new PropertyWrapper<bool> ("GenerateFormattingUndoStep", false);
+ public bool GenerateFormattingUndoStep {
+ get {
+ return generateFormattingUndoStep;
+ }
+ set {
+ if (generateFormattingUndoStep.Set (value))
+ OnChanged (EventArgs.Empty);
+ }
+ }
+
+ bool overrideDocumentEolMarker = false;
+ public bool OverrideDocumentEolMarker {
+ get {
+ return overrideDocumentEolMarker;
+ }
+ set {
+ if (overrideDocumentEolMarker != value) {
+ overrideDocumentEolMarker = value;
+ OnChanged (EventArgs.Empty);
+ }
+ }
+ }
+
+ PropertyWrapper<ShowWhitespaces> showWhitespaces = new PropertyWrapper<ShowWhitespaces> ("ShowWhitespaces", ShowWhitespaces.Never);
+ public ShowWhitespaces ShowWhitespaces {
+ get {
+ return showWhitespaces;
+ }
+ set {
+ if (showWhitespaces.Set (value))
+ OnChanged (EventArgs.Empty);
+ }
+ }
+
+ PropertyWrapper<IncludeWhitespaces> includeWhitespaces = new PropertyWrapper<IncludeWhitespaces> ("IncludeWhitespaces", IncludeWhitespaces.All);
+ public IncludeWhitespaces IncludeWhitespaces {
+ get {
+ return includeWhitespaces;
+ }
+ set {
+ if (includeWhitespaces.Set (value))
+ OnChanged (EventArgs.Empty);
+ }
+ }
+ #endregion
+
+ public void Dispose ()
+ {
+ FontService.RemoveCallback (UpdateFont);
+ }
+
+ protected void OnChanged (EventArgs args)
+ {
+ if (Changed != null)
+ Changed (null, args);
+ }
+
+ public event EventHandler Changed;
+ }
+}
+