diff options
author | Lluis Sanchez Gual <lluis@novell.com> | 2011-01-19 18:20:38 +0300 |
---|---|---|
committer | Lluis Sanchez Gual <lluis@novell.com> | 2011-01-19 18:51:14 +0300 |
commit | 212f769b9d0388ce44d6c226b5ce2476acd23d67 (patch) | |
tree | 16dcac39fdbbb0dfbdc6bfbf70eced83d3620058 /main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects.OptionPanels | |
parent | 7ea2372dfdee6aa133a97131126ab7682115ea5e (diff) |
* Makefile.am:
* gui.stetic:
* MonoDevelop.Ide.csproj:
* NewPolicySetDialog.cs:
* PolicyOptionsPanel.cs:
* MonoDevelop.Ide.Gui.Dialogs.OptionsDialog.cs:
* DefaultPolicyOptionsDialog.cs:
* MonoDevelop.Ide.Projects.NewPolicySetDialog.cs:
* MimeTypePolicyOptionsPanel.cs:
* MimeTypePolicyOptionsSection.cs:
* CodeFormattingPanel.cs:
* NamespaceSynchronisationPanel.cs: Add support for user defined
policy sets.
* OptionsPanel.cs:
* OptionsDialog.cs: Dispose panels that implement IDisposable when
they are not needed anymore.
* MonoDevelop.Ide.addin.xml: Added policy panels to the global options
dialog.
Diffstat (limited to 'main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects.OptionPanels')
2 files changed, 61 insertions, 14 deletions
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects.OptionPanels/CodeFormattingPanel.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects.OptionPanels/CodeFormattingPanel.cs index 30179fde58..4a55041b9b 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects.OptionPanels/CodeFormattingPanel.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects.OptionPanels/CodeFormattingPanel.cs @@ -44,6 +44,8 @@ namespace MonoDevelop.Ide.Projects.OptionPanels Dictionary<string,MimeTypePanelData> typeSections = new Dictionary<string, MimeTypePanelData> (); List<string> globalMimeTypes; HashSet<string> mimeTypesWithPolicies = new HashSet<string> (); + bool internalPolicyUpdate; + CodeFormattingPanelWidget widget; public override void Initialize (MonoDevelop.Ide.Gui.Dialogs.OptionsDialog dialog, object dataObject) { @@ -52,12 +54,12 @@ namespace MonoDevelop.Ide.Projects.OptionPanels foreach (MimeTypeOptionsPanelNode node in AddinManager.GetExtensionNodes ("/MonoDevelop/ProjectModel/Gui/MimeTypePolicyPanels")) mimeTypesWithPolicies.Add (node.MimeType); - if (dataObject is SolutionItem) { - policyContainer = ((SolutionItem)dataObject).Policies; - } else if (dataObject is Solution) { - policyContainer = ((Solution)dataObject).Policies; - } else if (dataObject is PolicySet) { - policyContainer = ((PolicySet)dataObject); + var provider = dataObject as IPolicyProvider; + if (provider == null) + provider = PolicyService.GetUserDefaultPolicySet (); + + policyContainer = provider.Policies; + if (!(dataObject is SolutionItem) && !(dataObject is Solution)) { globalMimeTypes = new List<string> (); string userTypes = PropertyService.Get<string> ("MonoDevelop.Projects.GlobalPolicyMimeTypes", ""); globalMimeTypes.AddRange (userTypes.Split (new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries)); @@ -65,6 +67,40 @@ namespace MonoDevelop.Ide.Projects.OptionPanels foreach (string mt in GetItemMimeTypes ()) AddPanel (mt); + + policyContainer.PolicyChanged += HandlePolicyContainerPolicyChanged; + } + + public override void Dispose () + { + base.Dispose (); + policyContainer.PolicyChanged -= HandlePolicyContainerPolicyChanged; + } + + void HandlePolicyContainerPolicyChanged (object sender, PolicyChangedEventArgs e) + { + if (internalPolicyUpdate) + return; + + // The policy container has changed externally. The panel data has to be reloaded + + foreach (MimeTypePanelData pd in typeSections.Values) { + bool useParentPolicy = false; + bool modified = false; + foreach (IMimeTypePolicyOptionsPanel panel in pd.Panels) { + // Reload the panel if it is handling the modified policy + if (panel.HandlesPolicyType (e.PolicyType, e.Scope)) { + panel.LoadSetPolicy (policyContainer); + modified = true; + } + if (!panel.HasCustomPolicy) + useParentPolicy = true; + } + if (modified) + pd.UseParentPolicy = useParentPolicy; + } + if (widget != null) + widget.Refresh (); } MimeTypePanelData AddPanel (string mt) @@ -144,13 +180,13 @@ namespace MonoDevelop.Ide.Projects.OptionPanels panels.Add (panel); } data.Panels = panels; - if (!policyContainer.IsRoot) + if (!policyContainer.IsRoot || ParentDialog is DefaultPolicyOptionsDialog) data.UseParentPolicy = useParentPolicy; } public override Gtk.Widget CreatePanelWidget () { - return new CodeFormattingPanelWidget (this, ParentDialog); + return widget = new CodeFormattingPanelWidget (this, ParentDialog); } public override void ApplyChanges () @@ -159,10 +195,15 @@ namespace MonoDevelop.Ide.Projects.OptionPanels string types = string.Join (";", globalMimeTypes.ToArray ()); PropertyService.Set ("MonoDevelop.Projects.GlobalPolicyMimeTypes", types); } - // If a section is already loaded, changes will be committed in the panel - foreach (MimeTypePanelData pd in typeSections.Values) { - if (!pd.SectionLoaded) - pd.ApplyChanges (); + try { + internalPolicyUpdate = true; + // If a section is already loaded, changes will be committed in the panel + foreach (MimeTypePanelData pd in typeSections.Values) { + if (!pd.SectionLoaded) + pd.ApplyChanges (); + } + } finally { + internalPolicyUpdate = false; } } @@ -267,7 +308,7 @@ namespace MonoDevelop.Ide.Projects.OptionPanels if (mt.UseParentPolicy) selection = parentPolicyText; else { - PolicySet matchingSet = mt.GetMatchingSet (); + PolicySet matchingSet = mt.GetMatchingSet (null); if (matchingSet != null) selection = matchingSet.Name; else @@ -316,6 +357,11 @@ namespace MonoDevelop.Ide.Projects.OptionPanels store.AppendValues (mt, DesktopService.GetPixbufForType (mt.MimeType, Gtk.IconSize.Menu), mt.TypeDescription); } } + + public void Refresh () + { + tree.QueueDraw (); + } protected void OnButtonEditClicked (object sender, System.EventArgs e) { diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects.OptionPanels/NamespaceSynchronisationPanel.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects.OptionPanels/NamespaceSynchronisationPanel.cs index 41b82c5c4d..cfee3ab4b0 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects.OptionPanels/NamespaceSynchronisationPanel.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects.OptionPanels/NamespaceSynchronisationPanel.cs @@ -51,7 +51,8 @@ namespace MonoDevelop.Ide.Projects.OptionPanels if (slnFolder != null) return slnFolder.GetAllItems<DotNetProject> ().Any (); - return false; + // Global options case + return !(item is IWorkspaceObject); } public override Widget CreatePanelWidget () |