Example #1
0
        public UsageTracker(IUIProvider uiProvider)
        {
            this.uiProvider = uiProvider;

            fileExists  = (path) => System.IO.File.Exists(path);
            readAllText = (path, encoding) =>
            {
                try
                {
                    return(System.IO.File.ReadAllText(path, encoding));
                }
                catch
                {
                    return(null);
                }
            };
            writeAllText = (path, content, encoding) =>
            {
                try
                {
                    System.IO.File.WriteAllText(path, content, encoding);
                }
                catch {}
            };
            dirCreate = (path) => System.IO.Directory.CreateDirectory(path);

            this.timer = new DispatcherTimer(
                TimeSpan.FromMinutes(3),
                DispatcherPriority.Background,
                TimerTick,
                Dispatcher.CurrentDispatcher);

            RunTimer();
        }
Example #2
0
        public UsageTracker(IUIProvider uiProvider)
        {
            this.uiProvider = uiProvider;

            fileExists = (path) => System.IO.File.Exists(path);
            readAllText = (path, encoding) =>
            {
                try
                {
                    return System.IO.File.ReadAllText(path, encoding);
                }
                catch
                {
                    return null;
                }
            };
            writeAllText = (path, content, encoding) =>
            {
                try
                {
                    System.IO.File.WriteAllText(path, content, encoding);
                }
                catch {}
            };
            dirCreate = (path) => System.IO.Directory.CreateDirectory(path);

            this.timer = new DispatcherTimer(
                TimeSpan.FromMinutes(3),
                DispatcherPriority.Background,
                TimerTick,
                Dispatcher.CurrentDispatcher);

            RunTimer();
        }
Example #3
0
        async Task <ITeamExplorerPage> GetTeamExplorerPage(IUIProvider uiProvider)
        {
            var te = uiProvider?.GetService(typeof(ITeamExplorer)) as ITeamExplorer;

            if (te != null)
            {
                var page = te.NavigateToPage(new Guid(TeamExplorerPageIds.Connect), null);

                if (page == null)
                {
                    var tcs = new TaskCompletionSource <ITeamExplorerPage>();
                    PropertyChangedEventHandler handler = null;

                    handler = new PropertyChangedEventHandler((s, e) =>
                    {
                        if (e.PropertyName == "CurrentPage")
                        {
                            tcs.SetResult(te.CurrentPage);
                            te.PropertyChanged -= handler;
                        }
                    });

                    te.PropertyChanged += handler;

                    page = await tcs.Task;
                }

                return(page);
            }
            else
            {
                // TODO: Log
                return(null);
            }
        }
        public UIController(IUIProvider uiProvider, IRepositoryHosts hosts, IUIFactory factory,
                            IConnectionManager connectionManager)
        {
            this.factory           = factory;
            this.uiProvider        = uiProvider;
            this.hosts             = hosts;
            this.connectionManager = connectionManager;
            uiObjects = new Dictionary <UIControllerFlow, Dictionary <UIViewType, IUIPair> >();

#if DEBUG
            if (Application.Current != null && !Splat.ModeDetector.InUnitTestRunner())
            {
                var waitDispatcher = RxApp.MainThreadScheduler as WaitForDispatcherScheduler;
                if (waitDispatcher != null)
                {
                    Debug.Assert(DispatcherScheduler.Current.Dispatcher == Application.Current.Dispatcher,
                                 "DispatcherScheduler is set correctly");
                }
                else
                {
                    Debug.Assert(((DispatcherScheduler)RxApp.MainThreadScheduler).Dispatcher == Application.Current.Dispatcher,
                                 "The MainThreadScheduler is using the wrong dispatcher");
                }
            }
#endif
            machines = new Dictionary <UIControllerFlow, StateMachine <UIViewType, Trigger> >();
            ConfigureLogicStates();

            uiStateMachine = new StateMachineType(UIViewType.None);
            triggers       = new Dictionary <Trigger, StateMachineType.TriggerWithParameters <ViewWithData> >();
            ConfigureUIHandlingStates();
        }
        public GitHubPaneViewModel(IGitHubServiceProvider serviceProvider,
                                   ISimpleApiClientFactory apiFactory, ITeamExplorerServiceHolder holder,
                                   IConnectionManager cm, IRepositoryHosts hosts, IUIProvider uiProvider, IVisualStudioBrowser vsBrowser,
                                   IUsageTracker usageTracker)
            : base(serviceProvider, apiFactory, holder)
        {
            Guard.ArgumentNotNull(serviceProvider, nameof(serviceProvider));
            Guard.ArgumentNotNull(apiFactory, nameof(apiFactory));
            Guard.ArgumentNotNull(holder, nameof(holder));
            Guard.ArgumentNotNull(cm, nameof(cm));
            Guard.ArgumentNotNull(hosts, nameof(hosts));
            Guard.ArgumentNotNull(uiProvider, nameof(uiProvider));
            Guard.ArgumentNotNull(vsBrowser, nameof(vsBrowser));
            Guard.ArgumentNotNull(usageTracker, nameof(usageTracker));

            this.connectionManager = cm;
            this.hosts             = hosts;
            this.uiProvider        = uiProvider;
            this.usageTracker      = usageTracker;

            CancelCommand = ReactiveCommand.Create();
            Title         = "GitHub";
            Message       = String.Empty;
            browser       = vsBrowser;

            this.WhenAnyValue(x => x.Control.DataContext)
            .OfType <IPanePageViewModel>()
            .Select(x => x.WhenAnyValue(y => y.Title))
            .Switch()
            .Subscribe(x => Title = x ?? "GitHub");
        }
        public GitHubPaneViewModel(IGitHubServiceProvider serviceProvider,
                                   ISimpleApiClientFactory apiFactory, ITeamExplorerServiceHolder holder,
                                   IConnectionManager cm, IUIProvider uiProvider, IVisualStudioBrowser vsBrowser,
                                   IUsageTracker usageTracker)
            : base(serviceProvider, apiFactory, holder)
        {
            Guard.ArgumentNotNull(serviceProvider, nameof(serviceProvider));
            Guard.ArgumentNotNull(apiFactory, nameof(apiFactory));
            Guard.ArgumentNotNull(holder, nameof(holder));
            Guard.ArgumentNotNull(cm, nameof(cm));
            Guard.ArgumentNotNull(uiProvider, nameof(uiProvider));
            Guard.ArgumentNotNull(vsBrowser, nameof(vsBrowser));
            Guard.ArgumentNotNull(usageTracker, nameof(usageTracker));

            this.connectionManager = cm;
            this.uiProvider        = uiProvider;
            this.usageTracker      = usageTracker;

            CancelCommand = ReactiveCommand.Create();
            Title         = "GitHub";
            Message       = String.Empty;
            browser       = vsBrowser;

            this.WhenAnyValue(x => x.Control.DataContext)
            .Subscribe(x =>
            {
                var pageViewModel = x as IPanePageViewModel;
                var searchable    = x as ISearchablePanePageViewModel;
                controlViewModel  = x as IViewModel;

                Title           = pageViewModel?.Title ?? "GitHub";
                IsSearchEnabled = searchable != null;
                SearchQuery     = searchable?.SearchQuery;
            });
        }
Example #7
0
        private void BuildFileMenuView(UIFrameworkDefinition uiDef)
        {
            UIFileMenuView mv = uiDef.UIFileMenu;

            if (mv.MenuItems == null || mv.MenuItems.Length == 0)
            {
                return;
            }
            _fileMenuView                      = new RadRibbonBarBackstageView();
            _fileMenuView.Text                 = "开始";
            _fileMenuView.ItemClicked         += new EventHandler <BackstageItemEventArgs>(_fileMenuView_ItemClicked);
            _fileMenuView.BackstageViewOpened += new EventHandler(_fileMenuView_BackstageViewOpened);
            _fileMenuView.BackstageViewClosed += new EventHandler(_fileMenuView_BackstageViewClosed);
            (_session.SmartWindowManager.MainForm as Form).Controls.Add(_fileMenuView);
            _radRibbonBar.RibbonBarElement.Text = "文件";
            _radRibbonBar.BackstageControl      = _fileMenuView;


            Font btnItemFont = new Font("微软雅黑", 10.5f);

            foreach (UIMenuItem item in mv.MenuItems)
            {
                if (!string.IsNullOrEmpty(item.Provider))
                {
                    BackstageViewPage page  = new BackstageViewPage();
                    IUIProvider       uiprd = item.ContentOfUIProvider.Control as IUIProvider;
                    if (uiprd != null)
                    {
                        page.Controls.Add(uiprd.Content as Control);
                        (uiprd as IUIProvider).Init(_session);
                        if (uiprd is IRecentFileContainer)
                        {
                            _recentFileContainer = uiprd as IRecentFileContainer;
                            _recentFileContainer.SetFileMenView(_fileMenuView);
                        }
                    }
                    BackstageTabItem tabPage = new BackstageTabItem(item.Text);
                    tabPage.Margin = new Padding(3, 3, 3, 3);
                    tabPage.Font   = btnItemFont;
                    tabPage.Page   = page;
                    _fileMenuView.Controls.Add(page);
                    _fileMenuView.Items.Add(tabPage);
                }
                else
                {
                    BackstageButtonItem fileMenuItem = new BackstageButtonItem(item.Text);
                    fileMenuItem.Margin = new Padding(3, 3, 3, 3);
                    fileMenuItem.Font   = btnItemFont;
                    fileMenuItem.Tag    = item.Identify;
                    fileMenuItem.Click += new EventHandler(fileMenuItem_Click);
                    Image img = GetImage(item.Image);
                    if (img != null)
                    {
                        fileMenuItem.Image = img;
                    }
                    _fileMenuView.Items.Add(fileMenuItem);
                }
            }
        }
 public LoggedOutViewModel(IUIProvider uiProvider, IVisualStudioBrowser browser)
 {
     this.uiProvider = uiProvider;
     this.browser = browser;
     SignIn = ReactiveCommand.Create();
     SignIn.Subscribe(_ => OnSignIn());
     Register = ReactiveCommand.Create();
     Register.Subscribe(_ => OnRegister());
 }
Example #9
0
 public LoggedOutViewModel(IUIProvider uiProvider, IVisualStudioBrowser browser)
 {
     this.uiProvider = uiProvider;
     this.browser    = browser;
     SignIn          = ReactiveCommand.Create();
     SignIn.Subscribe(_ => OnSignIn());
     Register = ReactiveCommand.Create();
     Register.Subscribe(_ => OnRegister());
 }
        public ReactiveValidatableObject([AllowNull] IUIProvider serviceProvider)
        {
            validatedProperties  = typeValidatorsMap.GetOrAdd(GetType(), GetValidatedProperties);
            this.serviceProvider = serviceProvider; // This is allowed to be null.

            // NOTE: Until a property has been changed, we don't want to mark it as invalid
            //       as far as IDataErrorInfo is concerned.
            Changed.Where(x => validatedProperties.ContainsKey(x.PropertyName))
            .Subscribe(x => enabledProperties[x.PropertyName] = true);
        }
Example #11
0
        public void Init(Transform rootGameObject, IUIProvider provider = null)
        {
            if (provider == null)
            {
                _provider = new ResourcePrefabProvider();
            }
            else
            {
                _provider = provider;
            }

            _uiRoot = rootGameObject;
        }
Example #12
0
        public MenuProvider(IUIProvider serviceProvider)
        {
            Menus = new List<IMenuHandler>
            {
                new AddConnection(serviceProvider),
                new OpenPullRequests(),
                new ShowGitHubPane()
            };

            DynamicMenus = new List<IDynamicMenuHandler>
            {
                new CopyLink(serviceProvider),
                new CreateGist(serviceProvider),
                new OpenLink(serviceProvider)
            };
        }
Example #13
0
        public MenuProvider(IUIProvider serviceProvider)
        {
            Menus = new List <IMenuHandler>
            {
                new AddConnection(serviceProvider),
                new OpenPullRequests(),
                new ShowGitHubPane()
            };

            DynamicMenus = new List <IDynamicMenuHandler>
            {
                new CopyLink(serviceProvider),
                new CreateGist(serviceProvider),
                new OpenLink(serviceProvider)
            };
        }
Example #14
0
        // Constructor
        public MainWindowLogic(IUIProvider uiProvider)
        {
            this.uiProvider = uiProvider;

            // Create the board
            BoardLogic = new BoardLogic(uiProvider);

            // Create the settings manager
            SettingsManager = new SettingsManager <Settings>("Sarabande, Inc.", "Sudoku");

            // Get notified when a puzzle is solved
            BoardLogic.PuzzleSolved += OnPuzzleSolved;

            // Create the commands
            NewGame = new CommandBase(OnNewGame);
            Help    = new CommandBase(OnHelp);
        }
Example #15
0
        public GitHubPaneViewModel(IGitHubServiceProvider serviceProvider,
                                   ISimpleApiClientFactory apiFactory, ITeamExplorerServiceHolder holder,
                                   IConnectionManager cm, IRepositoryHosts hosts, IUIProvider uiProvider)
            : base(serviceProvider, apiFactory, holder)
        {
            this.connectionManager = cm;
            this.hosts             = hosts;
            this.uiProvider        = uiProvider;

            CancelCommand = ReactiveCommand.Create();
            Title         = "GitHub";
            Message       = String.Empty;

            this.WhenAnyValue(x => x.Control.DataContext)
            .OfType <BaseViewModel>()
            .Select(x => x.WhenAnyValue(y => y.Title))
            .Switch()
            .Subscribe(x => Title = x ?? "GitHub");
        }
Example #16
0
        /// <inheritdoc />
        protected override void OnInitialize()
        {
            ILog logWriter = LogManager.GetLog(typeof(FactoryProvider));

            IConfigurationElement[] configurationElements = ExtensionService.Instance.GetConfigurationElements(FactoryExtensionPointId);
            if (configurationElements.Length == 0)
            {
                throw new InvalidOperationException("There is no registered UI provider!");
            }

            if (configurationElements.Length > 1)
            {
                string[] viewPartFactories = configurationElements.Select(x => x.Id).ToArray();
                string   enumeration       = string.Join(", ", viewPartFactories);
                logWriter.Warning($"There is more than one UI provider registered: {enumeration}");
                logWriter.Warning($"Taking first one ({configurationElements[0].Id})");
                configurationElements = new[] { configurationElements[0] };
            }

            IConfigurationElement element = configurationElements[0];
            string id        = element["id"];
            string className = element["class"];

            if (string.IsNullOrEmpty(className))
            {
                string msg = $"Class attribute of UI provider contribution '{id}' is NULL or empty";
                logWriter.Fatal(msg);
                throw new InvalidOperationException(msg);
            }

            try {
                IBundle providingBundle = ExtensionService.Instance.GetProvidingBundle(element);
                Type    uiProviderType  = TypeLoader.TypeForName(providingBundle, className);

                _uiProvider = uiProviderType.NewInstance <IUIProvider>();
            } catch (Exception ex) {
                string msg = $"Error on creating UI provider instance of '{className}' contributed by '{id}'";
                logWriter.Fatal(msg);
                throw new InvalidOperationException(msg, ex);
            }
        }
Example #17
0
        public BoardLogic(IUIProvider uiProvider)
        {
            this.uiProvider = uiProvider;

            Undo        = new CommandBase(OnUndo, false);
            Redo        = new CommandBase(OnRedo, false);
            Reset       = new CommandBase(OnReset, false);
            Check       = new CommandBase(OnCheck, false);
            Hint        = new CommandBase(OnHint, false);
            Query       = new CommandBase(OnQuery, false);
            Stats       = new CommandBase(OnStats, true);
            KbdNumber   = new CommandBase(OnKbdNumber, true);
            KbdPossible = new CommandBase(OnKbdPossible, true);
            MoveRight   = new CommandBase(OnMoveRight, true);
            MoveLeft    = new CommandBase(OnMoveLeft, true);
            MoveUp      = new CommandBase(OnMoveUp, true);
            MoveDown    = new CommandBase(OnMoveDown, true);

            for (uint i = 0; i < UICells.Length; i++)
            {
                UICells[i] = new UICellLogic(uiProvider, i);
            }
        }
Example #18
0
        CloneRequest ShowCloneDialog(IUIProvider uiProvider, IGitRepositoriesExt gitRepositories, ISimpleRepositoryModel repository = null)
        {
            string basePath = null;

            uiProvider.AddService(this, gitRepositories);

            var load = uiProvider.SetupUI(repository == null ? UIControllerFlow.Clone : UIControllerFlow.StartPageClone,
                                          null //TODO: set the connection corresponding to the repository if the repository is not null
                                          );

            load.Subscribe(x =>
            {
                if ((repository == null && x.Data.ViewType == Exports.UIViewType.Clone) ||       // fire the normal clone dialog
                    (repository != null && x.Data.ViewType == Exports.UIViewType.StartPageClone) // fire the clone dialog for re-acquiring a repo
                    )
                {
                    var vm = x.View.ViewModel as IBaseCloneViewModel;
                    if (repository != null)
                    {
                        vm.SelectedRepository = repository;
                    }
                    x.View.Done.Subscribe(_ =>
                    {
                        basePath = vm.BaseRepositoryPath;
                        if (repository == null)
                        {
                            repository = vm.SelectedRepository;
                        }
                    });
                }
            });

            uiProvider.RunUI();
            uiProvider.RemoveService(typeof(IGitRepositoriesExt), this);

            return(new CloneRequest(basePath, repository));
        }
Example #19
0
 public VSServices(IUIProvider serviceProvider)
 {
     this.serviceProvider = serviceProvider;
 }
Example #20
0
 public OpenLink(IUIProvider serviceProvider)
     : base(serviceProvider)
 {
 }
Example #21
0
 public OpenLink(IUIProvider serviceProvider)
     : base(serviceProvider)
 {
 }
Example #22
0
        //==============================================Methods

        public void Init(IUIProvider p_uiProvider)
        {
            m_uiProvider = p_uiProvider;
            PictureBox_Clicked(pbFollowing, null);
        }
Example #23
0
        public UIController(IUIProvider uiProvider, IRepositoryHosts hosts, IExportFactoryProvider factory,
                            IConnectionManager connectionManager, Lazy <ITwoFactorChallengeHandler> lazyTwoFactorChallengeHandler)
        {
            this.factory                       = factory;
            this.uiProvider                    = uiProvider;
            this.hosts                         = hosts;
            this.connectionManager             = connectionManager;
            this.lazyTwoFactorChallengeHandler = lazyTwoFactorChallengeHandler;

#if DEBUG
            if (Application.Current != null && !Splat.ModeDetector.InUnitTestRunner())
            {
                var waitDispatcher = RxApp.MainThreadScheduler as WaitForDispatcherScheduler;
                if (waitDispatcher != null)
                {
                    Debug.Assert(DispatcherScheduler.Current.Dispatcher == Application.Current.Dispatcher,
                                 "DispatcherScheduler is set correctly");
                }
                else
                {
                    Debug.Assert(((DispatcherScheduler)RxApp.MainThreadScheduler).Dispatcher == Application.Current.Dispatcher,
                                 "The MainThreadScheduler is using the wrong dispatcher");
                }
            }
#endif
            machine = new StateMachine <UIViewType, Trigger>(UIViewType.None);

            machine.Configure(UIViewType.Login)
            .OnEntry(() =>
            {
                RunView(UIViewType.Login);
            })
            .Permit(Trigger.Next, UIViewType.TwoFactor)
            // Added the following line to make it easy to login to both GitHub and GitHub Enterprise
            // in DesignTimeStyleHelper in order to test Publish.
            .Permit(Trigger.Cancel, UIViewType.End)
            .PermitIf(Trigger.Finish, UIViewType.End, () => currentFlow == UIControllerFlow.Authentication)
            .PermitIf(Trigger.Finish, UIViewType.Create, () => currentFlow == UIControllerFlow.Create)
            .PermitIf(Trigger.Finish, UIViewType.Clone, () => currentFlow == UIControllerFlow.Clone)
            .PermitIf(Trigger.Finish, UIViewType.Publish, () => currentFlow == UIControllerFlow.Publish);

            machine.Configure(UIViewType.TwoFactor)
            .SubstateOf(UIViewType.Login)
            .OnEntry(() =>
            {
                RunView(UIViewType.TwoFactor);
            })
            .Permit(Trigger.Cancel, UIViewType.End)
            .PermitIf(Trigger.Next, UIViewType.End, () => currentFlow == UIControllerFlow.Authentication)
            .PermitIf(Trigger.Next, UIViewType.Create, () => currentFlow == UIControllerFlow.Create)
            .PermitIf(Trigger.Next, UIViewType.Clone, () => currentFlow == UIControllerFlow.Clone)
            .PermitIf(Trigger.Next, UIViewType.Publish, () => currentFlow == UIControllerFlow.Publish);

            machine.Configure(UIViewType.Create)
            .OnEntry(() =>
            {
                RunView(UIViewType.Create);
            })
            .Permit(Trigger.Cancel, UIViewType.End)
            .Permit(Trigger.Next, UIViewType.End);

            machine.Configure(UIViewType.Clone)
            .OnEntry(() =>
            {
                RunView(UIViewType.Clone);
            })
            .Permit(Trigger.Cancel, UIViewType.End)
            .Permit(Trigger.Next, UIViewType.End);

            machine.Configure(UIViewType.Publish)
            .OnEntry(() =>
            {
                RunView(UIViewType.Publish);
            })
            .Permit(Trigger.Cancel, UIViewType.End)
            .Permit(Trigger.Next, UIViewType.End);

            machine.Configure(UIViewType.End)
            .OnEntry(() =>
            {
                uiProvider.RemoveService(typeof(IConnection));
                transition.OnCompleted();
            })
            .Permit(Trigger.Next, UIViewType.Finished);

            // it might be useful later to check which triggered
            // made us enter here (Cancel or Next) and set a final
            // result accordingly, which is why UIViewType.End only
            // allows a Next trigger
            machine.Configure(UIViewType.Finished);
        }
Example #24
0
 protected MenuBase(IUIProvider serviceProvider)
 {
     this.serviceProvider = serviceProvider;
     apiFactory = new Lazy<ISimpleApiClientFactory>(() => ServiceProvider.TryGetService<ISimpleApiClientFactory>());
 }
Example #25
0
 protected MenuBase(IUIProvider serviceProvider)
 {
     this.serviceProvider = serviceProvider;
     apiFactory           = new Lazy <ISimpleApiClientFactory>(() => ServiceProvider.TryGetService <ISimpleApiClientFactory>());
 }
Example #26
0
 public CreateGist(IUIProvider serviceProvider)
     : base(serviceProvider)
 {
     selectedTextProvider = new Lazy <ISelectedTextProvider>(() => ServiceProvider.TryGetService <ISelectedTextProvider>());
 }
Example #27
0
 public VSGitServices(IUIProvider serviceProvider)
 {
     this.serviceProvider = serviceProvider;
 }
Example #28
0
 public CopyLink(IUIProvider serviceProvider)
     : base(serviceProvider)
 {
 }
Example #29
0
 public CopyLink(IUIProvider serviceProvider)
     : base(serviceProvider)
 {
 }
 public ConnectionRepositoryHostMap(IUIProvider provider, IRepositoryHosts hosts)
     : this(provider.TryGetService<IConnection>(), hosts)
 {
 }
Example #31
0
        async Task <IGitRepositoriesExt> GetGitRepositoriesExt(IUIProvider uiProvider)
        {
            var page = await GetTeamExplorerPage(uiProvider);

            return(page?.GetService <IGitRepositoriesExt>());
        }
Example #32
0
 public AddConnection(IUIProvider serviceProvider)
     : base(serviceProvider)
 {
 }
Example #33
0
 public AddConnection(IUIProvider serviceProvider)
     : base(serviceProvider)
 {
 }
Example #34
0
 public LinkMenuBase(IUIProvider serviceProvider)
     : base(serviceProvider)
 {
     usageTracker = new Lazy<IUsageTracker>(() => ServiceProvider.TryGetService<IUsageTracker>());
 }
Example #35
0
 public CreateGist(IUIProvider serviceProvider)
     : base(serviceProvider)
 {
     selectedTextProvider = new Lazy<ISelectedTextProvider>(() => ServiceProvider.TryGetService<ISelectedTextProvider>());
 }
 public ConnectionRepositoryHostMap(IUIProvider provider, IRepositoryHosts hosts)
     : this(provider.TryGetService <IConnection>(), hosts)
 {
 }
Example #37
0
 public NavigationController(IUIProvider uiProvider)
 {
     this.uiProvider = uiProvider;
 }
Example #38
0
 public LinkMenuBase(IUIProvider serviceProvider)
     : base(serviceProvider)
 {
     usageTracker = new Lazy <IUsageTracker>(() => ServiceProvider.TryGetService <IUsageTracker>());
 }
Example #39
0
 public DialogService(IUIProvider uiProvider)
 {
     this.uiProvider = uiProvider;
 }
Example #40
0
        public DialogService(IUIProvider uiProvider)
        {
            Guard.ArgumentNotNull(uiProvider, nameof(uiProvider));

            this.uiProvider = uiProvider;
        }
Example #41
0
        public UIController(IUIProvider uiProvider, IRepositoryHosts hosts, IExportFactoryProvider factory,
            IConnectionManager connectionManager, Lazy<ITwoFactorChallengeHandler> lazyTwoFactorChallengeHandler)
        {
            this.factory = factory;
            this.uiProvider = uiProvider;
            this.hosts = hosts;
            this.connectionManager = connectionManager;
            this.lazyTwoFactorChallengeHandler = lazyTwoFactorChallengeHandler;

#if DEBUG
            if (Application.Current != null && !Splat.ModeDetector.InUnitTestRunner())
            {
                var waitDispatcher = RxApp.MainThreadScheduler as WaitForDispatcherScheduler;
                if (waitDispatcher != null)
                {
                    Debug.Assert(DispatcherScheduler.Current.Dispatcher == Application.Current.Dispatcher,
                       "DispatcherScheduler is set correctly");
                }
                else
                {
                    Debug.Assert(((DispatcherScheduler)RxApp.MainThreadScheduler).Dispatcher == Application.Current.Dispatcher,
                        "The MainThreadScheduler is using the wrong dispatcher");
                }
            }
#endif
            machine = new StateMachine<UIViewType, Trigger>(UIViewType.None);

            machine.Configure(UIViewType.Login)
                .OnEntry(() =>
                {
                    RunView(UIViewType.Login);
                })
                .Permit(Trigger.Next, UIViewType.TwoFactor)
                // Added the following line to make it easy to login to both GitHub and GitHub Enterprise 
                // in DesignTimeStyleHelper in order to test Publish.
                .Permit(Trigger.Cancel, UIViewType.End)
                .PermitIf(Trigger.Finish, UIViewType.End, () => currentFlow == UIControllerFlow.Authentication)
                .PermitIf(Trigger.Finish, UIViewType.Create, () => currentFlow == UIControllerFlow.Create)
                .PermitIf(Trigger.Finish, UIViewType.Clone, () => currentFlow == UIControllerFlow.Clone)
                .PermitIf(Trigger.Finish, UIViewType.Publish, () => currentFlow == UIControllerFlow.Publish);

            machine.Configure(UIViewType.TwoFactor)
                .SubstateOf(UIViewType.Login)
                .OnEntry(() =>
                {
                    RunView(UIViewType.TwoFactor);
                })
                .Permit(Trigger.Cancel, UIViewType.End)
                .PermitIf(Trigger.Next, UIViewType.End, () => currentFlow == UIControllerFlow.Authentication)
                .PermitIf(Trigger.Next, UIViewType.Create, () => currentFlow == UIControllerFlow.Create)
                .PermitIf(Trigger.Next, UIViewType.Clone, () => currentFlow == UIControllerFlow.Clone)
                .PermitIf(Trigger.Next, UIViewType.Publish, () => currentFlow == UIControllerFlow.Publish);

            machine.Configure(UIViewType.Create)
                .OnEntry(() =>
                {
                    RunView(UIViewType.Create);
                })
                .Permit(Trigger.Cancel, UIViewType.End)
                .Permit(Trigger.Next, UIViewType.End);

            machine.Configure(UIViewType.Clone)
                .OnEntry(() =>
                {
                    RunView(UIViewType.Clone);
                })
                .Permit(Trigger.Cancel, UIViewType.End)
                .Permit(Trigger.Next, UIViewType.End);

            machine.Configure(UIViewType.Publish)
                .OnEntry(() =>
                {
                    RunView(UIViewType.Publish);
                })
                .Permit(Trigger.Cancel, UIViewType.End)
                .Permit(Trigger.Next, UIViewType.End);

            machine.Configure(UIViewType.End)
                .OnEntry(() =>
                {
                    uiProvider.RemoveService(typeof(IConnection));
                    transition.OnCompleted();
                })
                .Permit(Trigger.Next, UIViewType.Finished);

            // it might be useful later to check which triggered
            // made us enter here (Cancel or Next) and set a final
            // result accordingly, which is why UIViewType.End only
            // allows a Next trigger
            machine.Configure(UIViewType.Finished);
        }
 public ConsoleRunner(IUIProvider provider, IRouter router)
 {
     this.provider = provider;
     this.router   = router;
 }