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:
authorLluis Sanchez <llsan@microsoft.com>2017-03-27 16:40:35 +0300
committerGitHub <noreply@github.com>2017-03-27 16:40:35 +0300
commit4e6f0931a4a0e5a18666aadc4c192e323bb1bef0 (patch)
tree9b2b58e7ebdd00ce3fa96386ba36b2cbb64f7767 /main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Dialogs
parent3fa14d09da56b1a9ab2fb7066845dde78224841e (diff)
parent71175d3f84e06d5ef088e693eb614d5e7b5b1037 (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')
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Dialogs/MimeTypePolicyOptionsPanel.cs16
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Dialogs/MimeTypePolicyOptionsSection.cs2
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Dialogs/PolicyOptionsPanel.cs26
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;