diff options
author | Lluis Sanchez <llsan@microsoft.com> | 2017-03-27 16:40:35 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-03-27 16:40:35 +0300 |
commit | 4e6f0931a4a0e5a18666aadc4c192e323bb1bef0 (patch) | |
tree | 9b2b58e7ebdd00ce3fa96386ba36b2cbb64f7767 /main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Dialogs | |
parent | 3fa14d09da56b1a9ab2fb7066845dde78224841e (diff) | |
parent | 71175d3f84e06d5ef088e693eb614d5e7b5b1037 (diff) |
Merge pull request #2013 from mono/default-policies
Add support for defining default policies
Diffstat (limited to 'main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Dialogs')
3 files changed, 34 insertions, 10 deletions
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Dialogs/MimeTypePolicyOptionsPanel.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Dialogs/MimeTypePolicyOptionsPanel.cs index 6745d05f2b..27954a4a2d 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Dialogs/MimeTypePolicyOptionsPanel.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Dialogs/MimeTypePolicyOptionsPanel.cs @@ -38,7 +38,7 @@ namespace MonoDevelop.Ide.Gui.Dialogs { internal interface IMimeTypePolicyOptionsPanel: IOptionsPanel { - void InitializePolicy (PolicyContainer policyContainer, string mimeType, bool isExactMimeType); + void InitializePolicy (PolicyContainer policyContainer, PolicyContainer defaultPolicyContainer, string mimeType, bool isExactMimeType); void SetParentSection (MimeTypePolicyOptionsSection section); string Label { get; set; } @@ -66,6 +66,7 @@ namespace MonoDevelop.Ide.Gui.Dialogs string mimeType; IEnumerable<string> mimeTypeScopes; PolicyContainer policyContainer; + PolicyContainer defaultPolicyContainer; bool loaded; object cachedPolicy; bool hasCachedPolicy; @@ -73,10 +74,11 @@ namespace MonoDevelop.Ide.Gui.Dialogs Widget panelWidget; bool isExactMimeType; - void IMimeTypePolicyOptionsPanel.InitializePolicy (PolicyContainer policyContainer, string mimeType, bool isExactMimeType) + void IMimeTypePolicyOptionsPanel.InitializePolicy (PolicyContainer policyContainer, PolicyContainer defaultPolicyContainer, string mimeType, bool isExactMimeType) { this.mimeType = mimeType; this.policyContainer = policyContainer; + this.defaultPolicyContainer = defaultPolicyContainer; this.isExactMimeType = isExactMimeType; mimeTypeScopes = DesktopService.GetMimeTypeInheritanceChain (mimeType); } @@ -229,8 +231,14 @@ namespace MonoDevelop.Ide.Gui.Dialogs else if (hasCachedPolicy) pol = cachedPolicy; - if (pol == null) - pol = policyContainer.Get<T> (mimeTypeScopes) ?? PolicyService.GetDefaultPolicy<T> (mimeTypeScopes); + if (pol == null) { + pol = policyContainer.Get<T> (mimeTypeScopes); + if (pol == null && defaultPolicyContainer != null) + return defaultPolicyContainer.Get<T> (mimeTypeScopes); + + // If the policy container being edited doesn't have this policy defined (and doesn't inherit it from anyhwere) + // then try getting the policy from defaultPolicyContainer. + } return (T) pol; } diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Dialogs/MimeTypePolicyOptionsSection.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Dialogs/MimeTypePolicyOptionsSection.cs index 97bd446b68..eba7250824 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Dialogs/MimeTypePolicyOptionsSection.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Dialogs/MimeTypePolicyOptionsSection.cs @@ -218,6 +218,8 @@ namespace MonoDevelop.Ide.Gui.Dialogs foreach (PolicySet set in panelData.GetSupportedPolicySets ()) { if (polSet != null && polSet.Name == set.Name) continue; + if (IsCustomUserPolicy && set.Name == "Default") // There is already the System Default entry + continue; store.AppendValues (set.Name, set); setsInCombo.Add (set); } diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Dialogs/PolicyOptionsPanel.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Dialogs/PolicyOptionsPanel.cs index d1034545fe..6ea1bee47c 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Dialogs/PolicyOptionsPanel.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Dialogs/PolicyOptionsPanel.cs @@ -46,6 +46,7 @@ namespace MonoDevelop.Ide.Gui.Dialogs PolicyBag bag; PolicySet polSet; PolicyContainer policyContainer; + PolicyContainer defaultPolicyContainer; bool loading = true; HBox warningMessage; bool isGlobalPolicy; @@ -125,6 +126,10 @@ namespace MonoDevelop.Ide.Gui.Dialogs { if (policy == null) { policyPanel.Sensitive = false; + // Policy is not being set, which means the default value will be used. + // Show that default value in the panel, so user van see the settings that + // are going to be applied. + LoadFrom (GetDefaultValue ()); return; } policyPanel.Sensitive = true; @@ -142,16 +147,21 @@ namespace MonoDevelop.Ide.Gui.Dialogs loading = false; } } + + T GetDefaultValue () + { + if (defaultPolicyContainer != null) + return defaultPolicyContainer.Get<T> (); + else + return PolicyService.GetDefaultPolicy<T> (); + } T GetCurrentValue () { if (policyUndefined) return null; - else if (polSet != null) - return polSet.Get<T> () ?? new T (); - else - return bag.Get<T> (); - } + return policyContainer.Get<T> () ?? GetDefaultValue (); + } void FillPolicies () { @@ -170,6 +180,8 @@ namespace MonoDevelop.Ide.Gui.Dialogs foreach (PolicySet set in PolicyService.GetPolicySets<T> ()) { if (polSet != null && set.Name == polSet.Name) continue; + if (IsCustomUserPolicy && set.Name == "Default") // There is already a System Default entry + continue; store.AppendValues (set.Name, set); setsInCombo.Add (set); } @@ -250,7 +262,7 @@ namespace MonoDevelop.Ide.Gui.Dialogs bool IsRoot { get { - return polSet != null || bag.IsRoot; + return policyContainer.IsRoot; } } @@ -271,6 +283,8 @@ namespace MonoDevelop.Ide.Gui.Dialogs IPolicyProvider provider = dataObject as IPolicyProvider; if (provider == null) { provider = PolicyService.GetUserDefaultPolicySet (); + // When editing the global user preferences, the default values for policies are the IDE default values. + defaultPolicyContainer = PolicyService.SystemDefaultPolicies; isGlobalPolicy = true; } policyContainer = provider.Policies; |