From 36954fe0be8e0ece65bed215e5036d5e300a0319 Mon Sep 17 00:00:00 2001 From: Dmytro Ovcharov Date: Tue, 1 Aug 2017 14:05:34 +0300 Subject: #53783 --- .../GtkNewProjectDialogBackend.cs | 36 +++++++++++----------- .../INewProjectController.cs | 7 +++-- .../NewProjectController.cs | 14 +++++++-- 3 files changed, 34 insertions(+), 23 deletions(-) (limited to 'main/src/core/MonoDevelop.Ide') 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 abff34f36a..f8be581b11 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects/GtkNewProjectDialogBackend.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects/GtkNewProjectDialogBackend.cs @@ -37,6 +37,8 @@ using MonoDevelop.Ide.Gui; using AppKit; using Foundation; using MonoDevelop.Core; +using System.Threading.Tasks; +using MonoDevelop.Ide.Projects; namespace MonoDevelop.Ide.Projects { @@ -73,16 +75,18 @@ namespace MonoDevelop.Ide.Projects actionHandler.PerformShowMenu += PerformShowMenu; } - void NextButtonClicked (object sender, EventArgs e) + void ProjectCreationFailed (object obj, EventArgs args) => ShowProjectCreationAccessibityNotification (true); + void ProjectCreationSucceed (object obj, EventArgs args) => ShowProjectCreationAccessibityNotification (false); + async void NextButtonClicked (object sender, EventArgs e) => await MoveToNextPage (); + + void ShowProjectCreationAccessibityNotification (bool hasError) { - bool isLastPage = controller.IsLastPage; - MoveToNextPage (); - if (isLastPage) { - var message = GenerateProjectCreatedMessage (); - ShowAccessibityNotification (message); - } + var projectTemplate = controller.SelectedTemplate; + var messageText = GettextCatalog.GetString (hasError ? "{0} creation fail" : "{0} successfully created", + projectTemplate.Name); + ShowAccessibityNotification (messageText); } - + void ShowAccessibityNotification (string message) { var accessibleObject = this.Accessible; @@ -97,13 +101,6 @@ namespace MonoDevelop.Ide.Projects NSAccessibility.PostNotification (nsObject, NSAccessibilityNotifications.AnnouncementRequestedNotification, dictionary); } - string GenerateProjectCreatedMessage () - { - var message = GettextCatalog.GetString ("{0} successfully created"); - var template = controller.SelectedTemplate; - return String.Format (message, template.Name); - } - public void ShowDialog () { MessageService.ShowCustomDialog (this); @@ -122,16 +119,17 @@ namespace MonoDevelop.Ide.Projects public void RegisterController (INewProjectDialogController controller) { this.controller = controller; + controller.ProjectCreationFailed += ProjectCreationFailed; + controller.ProjectCreationSucceed += ProjectCreationSucceed; languageCellRenderer.SelectedLanguage = controller.SelectedLanguage; topBannerLabel.Text = controller.BannerText; - LoadTemplates (); SelectTemplateDefinedbyController (); if (CanMoveToNextPage && !controller.ShowTemplateSelection) MoveToNextPage (); } - static void SetTemplateCategoryCellData (TreeViewColumn col, CellRenderer renderer, TreeModel model, TreeIter it) + void SetTemplateCategoryCellData (TreeViewColumn col, CellRenderer renderer, TreeModel model, TreeIter it) { var categoryTextRenderer = (GtkTemplateCategoryCellRenderer)renderer; categoryTextRenderer.Category = (TemplateCategory)model.GetValue (it, TemplateCategoryColumn); @@ -541,12 +539,14 @@ namespace MonoDevelop.Ide.Projects } } - async void MoveToNextPage () + async Task MoveToNextPage () { if (controller.IsLastPage) { try { CanMoveToNextPage = false; await controller.Create (); + } catch { + throw; } finally { CanMoveToNextPage = true; } diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects/INewProjectController.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects/INewProjectController.cs index ebf0154203..76b58d7a69 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects/INewProjectController.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects/INewProjectController.cs @@ -29,11 +29,14 @@ using System.Collections.Generic; using MonoDevelop.Ide.Templates; using Xwt.Drawing; using System.Threading.Tasks; - +using System; + namespace MonoDevelop.Ide.Projects { interface INewProjectDialogController - { + { + event EventHandler ProjectCreationFailed; + event EventHandler ProjectCreationSucceed; IEnumerable TemplateCategories { get; } List RecentTemplates { get; } TemplateCategory SelectedSecondLevelCategory { get; } diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects/NewProjectController.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects/NewProjectController.cs index b1309458b6..d13c0b1cbe 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects/NewProjectController.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects/NewProjectController.cs @@ -1,4 +1,4 @@ -// +// // NewProjectDialogController.cs // // Author: @@ -43,6 +43,7 @@ using MonoDevelop.Ide.Templates; using MonoDevelop.Projects; using Xwt.Drawing; using System.Threading.Tasks; +using System.Threading; namespace MonoDevelop.Ide.Projects { @@ -50,7 +51,10 @@ namespace MonoDevelop.Ide.Projects /// To be renamed to NewProjectDialog /// class NewProjectDialogController : INewProjectDialogController - { + { + public event EventHandler ProjectCreationFailed; + public event EventHandler ProjectCreationSucceed; + string chooseTemplateBannerText = GettextCatalog.GetString ("Choose a template for your new project"); string configureYourWorkspaceBannerText = GettextCatalog.GetString ("Configure your new workspace"); string configureYourSolutionBannerText = GettextCatalog.GetString ("Configure your new solution"); @@ -610,8 +614,10 @@ namespace MonoDevelop.Ide.Projects if (wizardProvider.HasWizard) wizardProvider.BeforeProjectIsCreated (); - if (!await CreateProject ()) + if (!await CreateProject ()) { + ProjectCreationFailed?.Invoke (this, new EventArgs ()); return; + } Solution parentSolution = null; @@ -697,6 +703,8 @@ namespace MonoDevelop.Ide.Projects IsNewItemCreated = true; UpdateDefaultSettings (); + var result = ProjectCreationSucceed?.BeginInvoke(this, new EventArgs (), new AsyncCallback ((_) => {} ),null); + result.AsyncWaitHandle.WaitOne (); dialog.CloseDialog (); } -- cgit v1.2.3