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:
authorMatt Ward <ward.matt@gmail.com>2017-07-30 11:35:14 +0300
committerGitHub <noreply@github.com>2017-07-30 11:35:14 +0300
commitd46ac4c719781c15173b0b6bb6dee65019b611a4 (patch)
treecbe89ff2ae80ae2c32279b4420f8687e6c5ebe78 /main/src/core/MonoDevelop.Ide
parent528bd95809219eebda05ecb65e262e81b52185c0 (diff)
parent5baeaa1d3138d30c5f4d4f3e2f629115c51498dd (diff)
Merge pull request #2838 from mono/fix-unable-to-create-mac-app-from-recent-projects
[Ide] Fix failure to create CocoaApp project from New Project dialog
Diffstat (limited to 'main/src/core/MonoDevelop.Ide')
-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
2 files changed, 41 insertions, 4 deletions
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;
}