private void AddAdditionalText(BoolOptionViewModel boolOption, RichText additionalText, int indent) { var textOptionEntity = AddText(additionalText); boolOption.IsEnabledProperty.FlowInto(myLifetime, textOptionEntity.GetIsEnabledProperty()); SetIndent(textOptionEntity, indent + 1); }
private void SetUpDependentOption(IOptionEntity option, BoolOptionViewModel parentOption) { // Note: The `Compose(parentOption.IsEnabledProperty)` starts to become important at the second "level". parentOption.CheckedProperty.Compose(myLifetime, parentOption.IsEnabledProperty) .Select(myLifetime, "checked and enabled", pair => pair.First && pair.Second) .FlowInto(myLifetime, option.GetIsEnabledProperty()); }
private BoolOptionViewModel AddNullabilityBoolOption( Expression <Func <ImplicitNullabilitySettings, bool> > settingExpression, RichText text, [CanBeNull] RichText additionalText, BoolOptionViewModel parentOption, int indent) { var result = AddBoolOption(settingExpression, text, additionalText, indent); SetUpDependentOption(result, parentOption); return(result); }
private void AddNullabilityBoolOption <TEntryMemberType>( Expression <Func <ImplicitNullabilitySettings, TEntryMemberType> > settingExpression, TEntryMemberType trueValue, TEntryMemberType falseValue, RichText text, [CanBeNull] RichText additionalText, BoolOptionViewModel parentOption, int indent) { var result = AddBoolOption(settingExpression, trueValue, falseValue, text, additionalText, indent); SetUpDependentOption(result, parentOption); }
/// <summary> /// Initializes a new instance of the StyleCopOptionsPage class. /// </summary> /// <param name="lifetime"> /// The lifetime of the options page. /// </param> /// <param name="settingsSmartContext"> /// Our settings context. /// </param> /// <param name="container"> /// The component container /// </param> public StyleCopOptionsPage( Lifetime lifetime, OptionsSettingsSmartContext settingsSmartContext, IComponentContainer container) : base(lifetime, settingsSmartContext) { IContextBoundSettingsStoreLive settingsContext = this.OptionsSettingsSmartContext.StoreOptionsTransactionContext; this.originalEnablePlugins = settingsContext.GetValue((StyleCopOptionsSettingsKey options) => options.PluginsEnabled); this.originalPluginsPath = settingsContext.GetValue((StyleCopOptionsSettingsKey options) => options.PluginsPath); this.AddHeader("Version"); Assembly assembly = typeof(StyleCopEnvironment).Assembly; string styleCopFileVersion = GetFileVersionInfo(assembly); this.AddText(string.Format("StyleCop.dll {0} ({1})", assembly.GetName().Version, styleCopFileVersion)); assembly = this.GetType().Assembly; string ourFileVersion = GetFileVersionInfo(assembly); this.AddText(string.Format("StyleCop.ReSharper.dll {0} ({1})", assembly.GetName().Version, ourFileVersion)); if (ourFileVersion != styleCopFileVersion) { TextStyle style = new TextStyle(FontStyle.Bold, Color.Empty, Color.Empty); this.AddRichText( new RichText( "Mismatched StyleCop.dll version! Are you running an older version of the Visual Studio plugin?", style)); } this.AddHeader("Options"); // Note that we have to check to see if the lifetime is terminated before accessing the // settings context because WPF will continue to call our CanExecute until a garbage collection // breaks the weak reference that WPF holds on command this.AddButton( "Reset code style options", new DelegateCommand( () => CodeStyleOptions.CodeStyleOptionsReset(settingsSmartContext), () => !lifetime.IsTerminated && !CodeStyleOptions.CodeStyleOptionsValid(settingsSmartContext))); this.AddHeader("Analysis Performance"); if (DoesHostSupportRoslynAnalzyers(container)) { this.AddText( "Note: Analysis is automatically disabled if the project references the StyleCop.Analyzers NuGet package, which provides StyleCop analysis for Visual Studio 2015 and C# 6."); } this.AddBoolOption( (StyleCopOptionsSettingsKey options) => options.AnalysisEnabled, "Run StyleCop as you type"); BoolOptionViewModel nonUserFiles = this.AddBoolOption( (StyleCopOptionsSettingsKey options) => options.AnalyzeReadOnlyFiles, "Analyze non-user files (not recommended)"); this.AddBinding( nonUserFiles, BindingStyle.IsEnabledProperty, (StyleCopOptionsSettingsKey options) => options.AnalysisEnabled, JetFunc <object> .Identity); this.AddHeader("Headers"); this.AddBoolOption( (StyleCopOptionsSettingsKey options) => options.InsertTextIntoDocumentation, "Insert text into documentation and file headers"); this.AddBoolOption( (StyleCopOptionsSettingsKey options) => options.UseSingleLineDeclarationComments, "Use single lines for declaration headers"); this.AddBoolOption( (StyleCopOptionsSettingsKey options) => options.InsertToDoText, "Insert TODO into headers"); this.AddIntOption( (StyleCopOptionsSettingsKey options) => options.DashesCountInFileHeader, "Number of dashes in file header text:"); this.AddHeader("StyleCop Plugins"); this.AddBoolOption( (StyleCopOptionsSettingsKey options) => options.PluginsEnabled, "Enable StyleCop plugins"); this.AddText("Location of StyleCop plugins:"); Property <FileSystemPath> pluginsPath = this.SetupPluginsPathProperty(lifetime); FileChooserViewModel fileChooser = this.AddFolderChooserOption( pluginsPath, "Location of StyleCop plugins", FileSystemPath.Empty); fileChooser.IsEnabledProperty.SetValue(true); this.AddBinding( fileChooser, BindingStyle.IsEnabledProperty, (StyleCopOptionsSettingsKey options) => options.PluginsEnabled, JetFunc <object> .Identity); this.AddHeader("Misc"); this.AddBoolOption( (StyleCopOptionsSettingsKey options) => options.UseExcludeFromStyleCopSetting, "Use ExcludeFromStyleCop setting in csproj files"); this.AddStringOption( (StyleCopOptionsSettingsKey options) => options.SuppressStyleCopAttributeJustificationText, "Justification for SuppressMessage attribute:"); // TODO: Add "update file header style" that used to be in code cleanup this.FinishPage(); }