/// <summary>
 /// Initializes an instance of <seealso cref="MenuItemViewModel"/> class.
 /// </summary>
 /// <param name="parent">The parent menu item view model.</param>
 public MenuItemViewModel(MenuItemViewModel parent)
 {
     IsVisible            = true;
     MenuItemParent       = parent;
     MenuCommand          = new ProtectedCommand(() => CommandBubblingHandler(this));
     MenuItems            = new ObservableCollection <MenuItemViewModel>();
     OnSubmenuOpenCommand = new ProtectedAsyncCommand(AddItemsAsync);
 }
 public CsrAddRepoWindowViewModel(CsrAddRepoWindow owner, IList <Repo> repos, Project project)
 {
     _owner         = owner.ThrowIfNull(nameof(owner));
     _repos         = repos.ThrowIfNull(nameof(repos));
     _project       = project.ThrowIfNull(nameof(project));
     OkCommand      = new ProtectedAsyncCommand(CreateRepoAsync, canExecuteCommand: false);
     CsrLinkCommand = new ProtectedCommand(() => Process.Start(CsrConsoleLink));
 }
Пример #3
0
 private ListProcessStepViewModel(
     ListProcessStepContent content,
     AttachDebuggerContext context)
     : base(context)
 {
     Content        = content;
     RefreshCommand = new ProtectedAsyncCommand(GetAllProcessesListAsync);
 }
Пример #4
0
        public void TestLatestExecution_TracksActionTask()
        {
            var tcs             = new TaskCompletionSource <object>();
            var objectUnderTest = new ProtectedAsyncCommand(() => tcs.Task);

            objectUnderTest.Execute(null);

            Assert.AreEqual(tcs.Task, objectUnderTest.LatestExecution.ActualTask);
        }
Пример #5
0
        public void TestExecute_UpdatesLatestExecution()
        {
            var           objectUnderTest   = new ProtectedAsyncCommand(() => Task.CompletedTask);
            AsyncProperty originalExecution = objectUnderTest.LatestExecution;

            objectUnderTest.Execute(null);

            Assert.AreNotEqual(originalExecution, objectUnderTest.LatestExecution);
        }
        private FlexStepViewModel(FlexStepContent content, IGaeDataSource dataSource = null, IApiManager apiManager = null)
            : base(apiManager)
        {
            _content    = content;
            _dataSource = dataSource;

            EnableApiCommand    = new ProtectedAsyncCommand(OnEnableApiCommandAsync);
            SetAppRegionCommand = new ProtectedAsyncCommand(OnSetAppRegionCommandAsync);
        }
        public AttachDebuggerWindowViewModel(Instance gceInstance, AttachDebuggerWindow dialogWindow)
        {
            OKCommand     = new ProtectedAsyncCommand(() => ExceuteAsync(OnOKCommand), canExecuteCommand: false);
            CancelCommand = new ProtectedCommand(OnCancelCommand, canExecuteCommand: false);

            var context   = new AttachDebuggerContext(gceInstance, dialogWindow);
            var firstStep = SetCredentialStepViewModel.CreateStep(context);

            ErrorHandlerUtils.HandleExceptionsAsync(() => ExceuteAsync(() => GotoStep(firstStep)));
        }
Пример #8
0
        public void TestLatestExecution_NotifiesOnChange()
        {
            var objectUnderTest   = new ProtectedAsyncCommand(() => Task.CompletedTask);
            var changedProperties = new List <string>();

            objectUnderTest.PropertyChanged += (sender, args) => changedProperties.Add(args.PropertyName);

            objectUnderTest.Execute(null);

            CollectionAssert.AreEqual(new[] { nameof(objectUnderTest.LatestExecution) }, changedProperties);
        }
Пример #9
0
        public ManageWindowsCredentialsViewModel(Instance instance, ManageWindowsCredentialsWindow owner)
        {
            _instance = instance;
            _owner    = owner;

            CredentialsList = LoadCredentialsForInstance(instance);

            AddCredentialsCommand    = new ProtectedAsyncCommand(OnAddCredentialsCommandAsync);
            DeleteCredentialsCommand = new ProtectedCommand(OnDeleteCredentialsCommand, canExecuteCommand: false);
            ShowCredentialsCommand   = new ProtectedCommand(OnShowCredentialsCommand, canExecuteCommand: false);
        }
Пример #10
0
        /// <summary>
        /// Initializes a new instance of <seealso cref="ErrorReportingDetailViewModel"/> class.
        /// </summary>
        public ErrorReportingDetailViewModel()
        {
            _package                = GoogleCloudExtensionPackage.Instance;
            IsVisibleUnbound        = true;
            OnGotoSourceCommand     = new ProtectedCommand <StackFrame>(frame => ErrorFrameToSourceLine(GroupItem, frame));
            OnBackToOverViewCommand = new ProtectedAsyncCommand(async() => await ShowErrorReportingToolWindow());
            OnAutoReloadCommand     = new ProtectedCommand(() => ErrorHandlerUtils.HandleExceptionsAsync(UpdateGroupAndEventAsync));
            _datasource             = new Lazy <IStackdriverErrorReportingDataSource>(CreateDataSource);

            CredentialsStore.Default.CurrentProjectIdChanged += OnCurrentProjectChanged;
        }
Пример #11
0
        public void TestExecute_InvokesProvidedAction()
        {
            var tcs        = new TaskCompletionSource <object>();
            var actionMock = new Mock <Func <Task> >();

            actionMock.Setup(f => f()).Returns(tcs.Task);
            var objectUnderTest = new ProtectedAsyncCommand(actionMock.Object);

            objectUnderTest.Execute(null);

            actionMock.Verify(f => f(), Times.Once);
        }
 public CsrReposViewModel(ITeamExplorerUtils teamExplorer)
 {
     _teamExplorer          = teamExplorer.ThrowIfNull(nameof(teamExplorer));
     ListDoubleClickCommand = new ProtectedCommand(() =>
     {
         SetRepoActive(SelectedRepository);
         // Note, the order is critical.
         // When switching to HomeSection, current "this" object is destroyed.
         _teamExplorer.ShowHomeSection();
     });
     CloneCreateRepoCommand = new ProtectedAsyncCommand(CloneCreateRepoAsync);
 }
        /// <summary>
        /// Create a new instance of <seealso cref="ErrorReportingViewModel"/> class.
        /// </summary>
        public ErrorReportingViewModel()
        {
            IsVisibleUnbound      = true;
            _package              = GoogleCloudExtensionPackage.Instance;
            _dataSourceLazy       = new Lazy <IStackdriverErrorReportingDataSource>(CreateDataSource);
            _groupStatsCollection = new ObservableCollection <ErrorGroupItem>();
            GroupStatsView        = new ListCollectionView(_groupStatsCollection);
            SelectedTimeRangeItem = TimeRangeItemList.Last();
            OnGotoDetailCommand   = new ProtectedAsyncCommand <ErrorGroupItem>(NavigateToDetailWindowAsync);
            OnAutoReloadCommand   = new ProtectedCommand(Reload);

            CredentialsStore.Default.CurrentProjectIdChanged += (sender, e) => OnProjectIdChanged();
        }
Пример #14
0
        /// <summary>
        /// Initializes a new instance of the <seealso cref="LogItem"/> class.
        /// </summary>
        /// <param name="logEntry">A log entry.</param>
        /// <param name="timeZoneInfo">The current selected timezone.</param>
        /// <param name="parentToolWindowId">The id of the parent multi-instance tool window.</param>
        public LogItem(LogEntry logEntry, TimeZoneInfo timeZoneInfo, int parentToolWindowId)
        {
            ParentToolWindowId = parentToolWindowId;
            if (logEntry == null)
            {
                // Todo(jimwp): Change to NullArgumentException. Protect caller from null.
                return;
            }

            Entry     = logEntry;
            TimeStamp = ConvertTimestamp(logEntry.Timestamp, timeZoneInfo);
            Message   = ComposeMessage();

            LogSeverity severity;

            if (string.IsNullOrWhiteSpace(Entry.Severity) ||
                !Enum.TryParse <LogSeverity>(Entry.Severity, ignoreCase: true, result: out severity))
            {
                severity = LogSeverity.Default;
            }
            LogLevel = severity;

            _treeViewObjects = new Lazy <List <ObjectNodeTree> >(() => new LogEntryNode(Entry).Children);

            Function       = Entry.SourceLocation?.Function;
            SourceFilePath = Entry?.SourceLocation?.File;
            SourceLine     = Entry.SourceLocation?.Line;
            if (Function != null && SourceFilePath != null && SourceLine.HasValue)
            {
                // Example:  [Log4NetSample.Program, Log4NetExample, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null].WriteRandomSeverityLog
                Match match = s_functionRegex.Match(Function);
                if (match.Success)
                {
                    AssemblyName    = match.Groups[2].Value;
                    AssemblyVersion = match.Groups[3].Value;
                }

                SourceLinkVisible         = true;
                OnNavigateToSourceCommand = new ProtectedAsyncCommand(
                    () => SourceVersionUtils.NavigateToSourceLineCommandAsync(this));
                SourceLinkCaption = string.Format(
                    Resources.LogsViewerSourceLinkCaptionFormat,
                    System.IO.Path.GetFileName(SourceFilePath),
                    SourceLine);
            }
        }
Пример #15
0
        public CsrCloneWindowViewModel(CsrCloneWindow owner, IList <Project> projects)
        {
            _owner   = owner.ThrowIfNull(nameof(owner));
            Projects = projects.ThrowIfNull(nameof(projects));
            if (!Projects.Any())
            {
                throw new ArgumentException($"{nameof(projects)} must not be empty");
            }
            PickFolderCommand = new ProtectedCommand(PickFoloder);
            CloneRepoCommand  = new ProtectedAsyncCommand(() => ExecuteAsync(CloneAsync), canExecuteCommand: false);
            CreateRepoCommand = new ProtectedCommand(OpenCreateRepoDialog, canExecuteCommand: false);
            RepositoriesAsync.PropertyChanged += RepositoriesAsyncPropertyChanged;

            var projectId = CredentialsStore.Default.CurrentProjectId;

            // If projectId is null, choose first project. Otherwise, choose the project.
            SelectedProject = Projects.FirstOrDefault(x => projectId == null || x.ProjectId == projectId);
        }
Пример #16
0
        /// <summary>
        /// Initializes an instance of <seealso cref="LogsViewerViewModel"/> class.
        /// </summary>
        /// <param name="toolWindowIdNumber"></param>
        public LogsViewerViewModel(int toolWindowIdNumber)
        {
            IsVisibleUnbound    = true;
            _package            = GoogleCloudExtensionPackage.Instance;
            _toolWindowIdNumber = toolWindowIdNumber;
            RefreshCommand      = new ProtectedCommand(OnRefreshCommand);
            LogItemCollection   = new ListCollectionView(_logs);
            LogItemCollection.GroupDescriptions.Add(new PropertyGroupDescription(nameof(LogItem.Date)));
            CancelRequestCommand    = new ProtectedCommand(CancelRequest);
            SimpleTextSearchCommand = new ProtectedCommand(() =>
            {
                EventsReporterWrapper.ReportEvent(LogsViewerSimpleTextSearchEvent.Create());
                AsyncAction = new AsyncProperty(ReloadAsync());
            });
            FilterSwitchCommand         = new ProtectedCommand(SwapFilter);
            SubmitAdvancedFilterCommand = new ProtectedCommand(() =>
            {
                EventsReporterWrapper.ReportEvent(LogsViewerAdvancedFilterEvent.Create());
                AsyncAction = new AsyncProperty(ReloadAsync());
            });
            AdvancedFilterHelpCommand = new ProtectedCommand(ShowAdvancedFilterHelp);
            DateTimePickerModel       = new DateTimePickerViewModel(
                TimeZoneInfo.Local, DateTime.UtcNow, isDescendingOrder: true);
            DateTimePickerModel.DateTimeFilterChange += (sender, e) => AsyncAction = new AsyncProperty(ReloadAsync());
            ResourceTypeSelector = new ResourceTypeMenuViewModel(() => DataSource);
            ResourceTypeSelector.PropertyChanged += (sender, args) =>
            {
                if (args.PropertyName == null ||
                    args.PropertyName == nameof(ResourceTypeMenuViewModel.SelectedMenuItem))
                {
                    LogIdList   = null;
                    AsyncAction = new AsyncProperty(ReloadAsync());
                }
            };

            OnDetailTreeNodeFilterCommand = new ProtectedAsyncCommand <ObjectNodeTree>(FilterOnTreeNodeValueAsync);
            OnAutoReloadCommand           = new ProtectedCommand(AutoReload);
        }
 /// <summary>
 /// Initializes a new instance of <seealso cref="LoggerTooltipViewModel"/> class.
 /// </summary>
 /// <param name="logItem">The log item the tooltip shows.</param>
 public LoggerTooltipViewModel(LogItem logItem)
 {
     OnCloseButtonCommand    = new ProtectedCommand(ShowTooltipUtils.HideTooltip);
     BackToLogsViewerCommand = new ProtectedAsyncCommand(BackToLogsViewerAsync);
     Log = logItem;
 }
Пример #18
0
        public ShowPasswordViewModel(ShowPasswordWindow.Options options)
        {
            _options = options;

            CopyCommand = new ProtectedAsyncCommand(OnCopyCommandAsync);
        }
Пример #19
0
        public void TestConstrutor_OverridesDefaultCanExecuteCommandWithParameter()
        {
            var objectUnderTest = new ProtectedAsyncCommand(() => Task.CompletedTask, false);

            Assert.IsFalse(objectUnderTest.CanExecuteCommand);
        }
Пример #20
0
        public void TestConstrutor_InitalizesLatestExecutionWithCompletedTask()
        {
            var objectUnderTest = new ProtectedAsyncCommand(() => Task.CompletedTask);

            Assert.IsTrue(objectUnderTest.LatestExecution.IsCompleted);
        }
Пример #21
0
        public void TestExecute_DoesNotThrowWhenActionErrors()
        {
            var objectUnderTest = new ProtectedAsyncCommand(() => Task.FromException(new Exception()));

            objectUnderTest.Execute(null);
        }
Пример #22
0
        public void TestConstrutor_DefaultsCanExecuteCommandToTrue()
        {
            var objectUnderTest = new ProtectedAsyncCommand(() => Task.CompletedTask);

            Assert.IsTrue(objectUnderTest.CanExecuteCommand);
        }
Пример #23
0
        private void UpdateContextMenu()
        {
            var getPublishSettingsCommand = new ProtectedCommand(OnSavePublishSettingsCommand, canExecuteCommand: Instance.IsAspnetInstance());
            var openWebSite = new ProtectedCommand(OnOpenWebsite, canExecuteCommand: Instance.IsAspnetInstance() && Instance.IsRunning());
            var openTerminalServerSessionCommand = new ProtectedCommand(
                OnOpenTerminalServerSessionCommand,
                canExecuteCommand: Instance.IsWindowsInstance() && Instance.IsRunning());
            var startInstanceCommand     = new ProtectedAsyncCommand(OnStartInstanceCommandAsync);
            var stopInstanceCommand      = new ProtectedAsyncCommand(OnStopInstanceCommandAsync);
            var manageFirewallPorts      = new ProtectedAsyncCommand(OnManageFirewallPortsCommandAsync);
            var manageWindowsCredentials = new ProtectedCommand(OnManageWindowsCredentialsCommand, canExecuteCommand: Instance.IsWindowsInstance());

            _attachDebuggerCommand = new ProtectedAsyncCommand(OnAttachDebuggerAsync);

            var menuItems = new List <MenuItem>
            {
                new MenuItem {
                    Header = Resources.CloudExplorerGceSavePublishSettingsMenuHeader, Command = getPublishSettingsCommand
                },
                new MenuItem {
                    Header = Resources.CloudExplorerGceOpenTerminalSessionMenuHeader, Command = openTerminalServerSessionCommand
                },
                new MenuItem {
                    Header = Resources.CloudExplorerGceOpenWebSiteMenuHeader, Command = openWebSite
                },
                new MenuItem {
                    Header = Resources.CloudExplorerGceManageFirewallPortsMenuHeader, Command = manageFirewallPorts
                },
                new MenuItem {
                    Header = Resources.CloudExplorerGceManageWindowsCredentialsMenuHeader, Command = manageWindowsCredentials
                },
                new MenuItem {
                    Header = Resources.CloudExplorerGceAttachDebuggerMenuHeader, Command = _attachDebuggerCommand
                }
            };

            if (Instance.Id.HasValue)
            {
                menuItems.Add(
                    new MenuItem
                {
                    Header  = Resources.CloudExplorerLaunchLogsViewerMenuHeader,
                    Command = new ProtectedAsyncCommand(OnBrowseStackdriverLogCommandAsync)
                });
            }

            if (Instance.IsRunning())
            {
                menuItems.Add(new MenuItem {
                    Header = Resources.CloudExplorerGceStopInstanceMenuHeader, Command = stopInstanceCommand
                });
            }
            else
            {
                menuItems.Add(new MenuItem {
                    Header = Resources.CloudExplorerGceStartInstanceMenuHeader, Command = startInstanceCommand
                });
            }

            menuItems.Add(
                new MenuItem
            {
                Header  = Resources.UiOpenOnCloudConsoleMenuHeader,
                Command = new ProtectedCommand(OnOpenOnCloudConsoleCommand)
            });
            menuItems.Add(
                new MenuItem
            {
                Header  = Resources.UiPropertiesMenuHeader,
                Command = new ProtectedAsyncCommand(OnPropertiesWindowCommandAsync)
            });

            ContextMenu = new ContextMenu {
                ItemsSource = menuItems
            };

            SyncContextMenuState();
        }