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')
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Editor.Extension/CompletionTextEditorExtension.cs3
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects/GtkNewProjectDialogBackend.cs1
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/SolutionTemplate.cs20
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/TemplatingService.cs25
4 files changed, 44 insertions, 5 deletions
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Editor.Extension/CompletionTextEditorExtension.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Editor.Extension/CompletionTextEditorExtension.cs
index 6e53da2cfb..ead731077b 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Editor.Extension/CompletionTextEditorExtension.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Editor.Extension/CompletionTextEditorExtension.cs
@@ -150,8 +150,9 @@ namespace MonoDevelop.Ide.Editor.Extension
return res;
// don't complete on block selection
- if (/*!EnableCodeCompletion ||*/ Editor.SelectionMode == MonoDevelop.Ide.Editor.SelectionMode.Block)
+ if (!IdeApp.Preferences.EnableAutoCodeCompletion || Editor.SelectionMode == MonoDevelop.Ide.Editor.SelectionMode.Block)
return res;
+
// Handle code completion
if (descriptor.KeyChar != '\0' && CompletionWidget != null && !CompletionWindowManager.IsVisible) {
completionTokenSrc.Cancel ();
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects/GtkNewProjectDialogBackend.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects/GtkNewProjectDialogBackend.cs
index 3cd7692dd5..b600b54c13 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects/GtkNewProjectDialogBackend.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects/GtkNewProjectDialogBackend.cs
@@ -245,6 +245,7 @@ namespace MonoDevelop.Ide.Projects
if (templateTextRenderer.RenderRecentTemplate && controller.SelectedTemplate != null) {
// reset selected language if a recent template has been selected
templateTextRenderer.SelectedLanguage = controller.SelectedTemplate.Language;
+ languageCellRenderer.SelectedLanguage = controller.SelectedTemplate.Language;
controller.SelectedLanguage = controller.SelectedTemplate.Language;
}
ShowSelectedTemplate ();
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/SolutionTemplate.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/SolutionTemplate.cs
index 2c1acc5cce..4514c77390 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/SolutionTemplate.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/SolutionTemplate.cs
@@ -114,14 +114,18 @@ namespace MonoDevelop.Ide.Templates
public void AddGroupTemplate (SolutionTemplate template)
{
groupedTemplates.Add (template);
+ template.Parent = this;
if (!availableLanguages.Contains (template.Language)) {
availableLanguages.Add (template.Language);
}
}
+ internal SolutionTemplate Parent { get; set; }
+
internal void ClearGroupedTemplates ()
{
+ Parent = null;
groupedTemplates.Clear ();
}
@@ -141,6 +145,9 @@ namespace MonoDevelop.Ide.Templates
return this;
}
+ if (Parent != null)
+ return Parent.GetTemplate (predicate);
+
return groupedTemplates.FirstOrDefault (template => predicate (template));
}
@@ -248,6 +255,19 @@ namespace MonoDevelop.Ide.Templates
^ (Name != null ? Name.GetHashCode () : 0)
^ (Category != null ? Category.GetHashCode () : 0);
}
+
+ /// <summary>
+ /// Returns all other templates in the group. Does not include this template.
+ /// </summary>
+ internal IEnumerable<SolutionTemplate> GetGroupedTemplates ()
+ {
+ if (Parent != null)
+ return Parent.groupedTemplates
+ .Where (template => template != this)
+ .Concat (Parent);
+
+ return groupedTemplates;
+ }
}
}
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/TemplatingService.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/TemplatingService.cs
index 181735c339..5edc53bf20 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/TemplatingService.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/TemplatingService.cs
@@ -109,7 +109,7 @@ namespace MonoDevelop.Ide.Templates
return templateCategorizer.GetCategorizedTemplates ();
}
- internal SolutionTemplate GetTemplate (IEnumerable<TemplateCategory> categories, string templateId)
+ internal static SolutionTemplate GetTemplate (IEnumerable<TemplateCategory> categories, string templateId)
{
return GetTemplate (
categories,
@@ -118,7 +118,7 @@ namespace MonoDevelop.Ide.Templates
category => true);
}
- internal SolutionTemplate GetTemplate (
+ internal static SolutionTemplate GetTemplate (
IEnumerable<TemplateCategory> categories,
Func<SolutionTemplate, bool> isTemplateMatch,
Func<TemplateCategory, bool> isTopLevelCategoryMatch,
@@ -230,6 +230,8 @@ namespace MonoDevelop.Ide.Templates
public void AddTemplate (SolutionTemplate template)
{
try {
+ if (template.HasGroupId)
+ RemoveTemplateFromSameGroup (template);
var recentItem = CreateRecentItem (template);
recentTemplates.AddWithLimit (recentItem, templateGroup, ItemLimit);
} catch (Exception e) {
@@ -237,6 +239,21 @@ namespace MonoDevelop.Ide.Templates
}
}
+ /// <summary>
+ /// Removes any recent templates from the same group if it has the same language.
+ /// Different languages for the same group can exist separately in the recent project
+ /// templates list.
+ /// </summary>
+ void RemoveTemplateFromSameGroup (SolutionTemplate template)
+ {
+ foreach (var groupTemplate in template.GetGroupedTemplates ()) {
+ if (groupTemplate.Language == template.Language) {
+ var recentItem = CreateRecentItem (groupTemplate);
+ recentTemplates.RemoveItem (recentItem);
+ }
+ }
+ }
+
RecentItem CreateRecentItem (SolutionTemplate template)
{
var mime = "application/vnd.monodevelop.template";
@@ -256,7 +273,7 @@ namespace MonoDevelop.Ide.Templates
SolutionTemplate recentTemplate = null;
if (parts.Length > 1)
- recentTemplate = IdeApp.Services.TemplatingService.GetTemplate (
+ recentTemplate = TemplatingService.GetTemplate (
categories,
(template) => template.Id == templateId,
(category) => parts.Length > 1 ? category.Id == parts[0] : true,
@@ -266,7 +283,7 @@ namespace MonoDevelop.Ide.Templates
// fallback to global template lookup if no category matched
// in this case the category is not guaranteed if a template is listed in more than one category
if (recentTemplate == null)
- recentTemplate = IdeApp.Services.TemplatingService.GetTemplate (categories, templateId);
+ recentTemplate = TemplatingService.GetTemplate (categories, templateId);
return recentTemplate;
}