async void MoveToNextPage()
        {
            if (controller.IsLastPage)
            {
                try {
                    CanMoveToNextPage = false;
                    await controller.Create();
                } finally {
                    CanMoveToNextPage = true;
                }
                return;
            }

            controller.MoveToNextPage();

            SolutionTemplate template = controller.GetSelectedTemplateForSelectedLanguage();

            if (template == null)
            {
                return;
            }

            Widget widget = GetWidgetToDisplay();

            centreVBox.Remove(centreVBox.Children [0]);
            widget.ShowAll();
            centreVBox.PackStart(widget, true, true, 0);
            FocusWidget(widget);

            topBannerLabel.Text = controller.BannerText;

            previousButton.Sensitive = controller.CanMoveToPreviousPage;
            nextButton.Label         = controller.NextButtonText;
            CanMoveToNextPage        = controller.CanMoveToNextPage;
        }
        public async Task MoveToNextPage()
        {
            if (controller.IsLastPage)
            {
                try {
                    CanMoveToNextPage = false;
                    // disable all controls on this dialog to prevent users actions
                    VBox.Sensitive = false;
                    await controller.Create();
                } catch {
                    // if something goes wrong, we need to enable dialog contols
                    VBox.Sensitive = true;
                    throw;
                } finally {
                    CanMoveToNextPage = true;
                }
                return;
            }

            controller.MoveToNextPage();

            SolutionTemplate template = controller.GetSelectedTemplateForSelectedLanguage();

            if (template == null)
            {
                return;
            }

            Widget widget = GetWidgetToDisplay();

            centreVBox.Remove(centreVBox.Children [0]);
            widget.ShowAll();
            centreVBox.PackStart(widget, true, true, 0);
            FocusWidget(widget);

            topBannerLabel.Text = controller.BannerText;

            previousButton.Sensitive = controller.CanMoveToPreviousPage;
            nextButton.Label         = controller.NextButtonText;
            CanMoveToNextPage        = controller.CanMoveToNextPage;
        }