public ProjectExplorerWindow(IServiceProvider serviceProvider) : base(serviceProvider, DockState.DockLeft) { InitializeComponent(); this.serviceProvider = serviceProvider; this.TabText = this.Text; // // This window is a singleton, so we never want it to be closed, // just hidden. // this.HideOnClose = true; this.vsToolStripExtender.SetStyle( this.toolStrip, VisualStudioToolStripExtender.VsVersion.Vs2015, this.vs2015LightTheme); this.mainForm = serviceProvider.GetService <IMainForm>(); this.jobService = serviceProvider.GetService <IJobService>(); this.authService = serviceProvider.GetService <IAuthorizationAdapter>(); this.ContextMenuCommands = new CommandContainer <IProjectModelNode>( this, this.contextMenu.Items, ToolStripItemDisplayStyle.ImageAndText, this.serviceProvider); this.ToolbarCommands = new CommandContainer <IProjectModelNode>( this, this.toolStrip.Items, ToolStripItemDisplayStyle.Image, this.serviceProvider); this.viewModel = new ProjectExplorerViewModel( this, serviceProvider.GetService <ApplicationSettingsRepository>(), this.jobService, serviceProvider.GetService <IEventService>(), serviceProvider.GetService <IGlobalSessionBroker>(), serviceProvider.GetService <IProjectModelService>(), serviceProvider.GetService <ICloudConsoleService>()); this.viewModel.OnPropertyChange( m => m.SelectedNode, node => { // // NB. Due to lazily loading and inaccessible projects, // ModelNode can be null. // if (node?.ModelNode != null) { this.ContextMenuCommands.Context = node.ModelNode; this.ToolbarCommands.Context = node.ModelNode; } }); this.Disposed += (sender, args) => { this.viewModel.Dispose(); }; // // Bind tree view. // this.treeView.BindChildren(node => node.GetFilteredNodesAsync(false)); this.treeView.BindImageIndex(node => node.ImageIndex); this.treeView.BindSelectedImageIndex(node => node.ImageIndex); this.treeView.BindIsExpanded(node => node.IsExpanded); this.treeView.BindIsLeaf(node => node.IsLeaf); this.treeView.BindText(node => node.Text); this.treeView.Bind(this.viewModel.RootNode); this.treeView.OnControlPropertyChange( c => c.SelectedModelNode, node => this.viewModel.SelectedNode = node); this.treeView.LoadingChildrenFailed += (sender, args) => { if (!args.Exception.IsCancellation()) { this.serviceProvider .GetService <IExceptionDialog>() .Show(this, "Loading project failed", args.Exception); } }; // // Bind search box and progress bar. // var searchButton = this.searchTextBox.AddOverlayButton(Resources.Search_16); this.progressBar.BindProperty( c => c.Enabled, viewModel, m => m.IsLoading, this.Container); this.progressBar.BindProperty( c => c.Visible, viewModel, m => m.IsLoading, this.Container); this.searchTextBox.BindProperty( c => c.Text, viewModel, m => m.InstanceFilter, this.Container); //searchButton.Click += (s, a) => StartSearch(); // // Bind toolbar controls. // this.linuxInstancesToolStripMenuItem.BindProperty( c => c.Checked, this.viewModel, m => m.IsLinuxIncluded, this.Container); this.windowsInstancesToolStripMenuItem.BindProperty( c => c.Checked, this.viewModel, m => m.IsWindowsIncluded, this.Container); // // Bind menu items. // this.unloadProjectToolStripMenuItem.BindProperty( c => c.Visible, this.viewModel, m => m.IsUnloadProjectCommandVisible, this.Container); this.refreshToolStripMenuItem.BindProperty( c => c.Visible, this.viewModel, m => m.IsRefreshProjectsCommandVisible, this.Container); this.refreshAllProjectsToolStripMenuItem.BindProperty( c => c.Visible, this.viewModel, m => m.IsRefreshAllProjectsCommandVisible, this.Container); this.openInCloudConsoleToolStripMenuItem.BindProperty( c => c.Visible, this.viewModel, m => m.IsCloudConsoleCommandVisible, this.Container); this.iapSeparatorToolStripMenuItem.BindProperty( c => c.Visible, this.viewModel, m => m.IsCloudConsoleCommandVisible, this.Container); this.cloudConsoleSeparatorToolStripMenuItem.BindProperty( c => c.Visible, this.viewModel, m => m.IsCloudConsoleCommandVisible, this.Container); this.configureIapAccessToolStripMenuItem.BindProperty( c => c.Visible, this.viewModel, m => m.IsCloudConsoleCommandVisible, this.Container); }
public ProjectExplorerWindow(IServiceProvider serviceProvider) : base(serviceProvider, DockState.DockLeft) { InitializeComponent(); this.serviceProvider = serviceProvider; this.TabText = this.Text; // // This window is a singleton, so we never want it to be closed, // just hidden. // this.HideOnClose = true; this.vsToolStripExtender.SetStyle( this.toolStrip, VisualStudioToolStripExtender.VsVersion.Vs2015, this.vs2015LightTheme); this.treeView.Nodes.Add(this.rootNode); this.mainForm = serviceProvider.GetService <IMainForm>(); this.eventService = serviceProvider.GetService <IEventService>(); this.jobService = serviceProvider.GetService <IJobService>(); this.projectInventoryService = serviceProvider.GetService <IProjectRepository>(); this.authService = serviceProvider.GetService <IAuthorizationAdapter>(); this.sessionBroker = serviceProvider.GetService <IGlobalSessionBroker>(); this.eventService.BindAsyncHandler <ProjectAddedEvent>(OnProjectAdded); this.eventService.BindHandler <ProjectDeletedEvent>(OnProjectDeleted); this.eventService.BindHandler <SessionStartedEvent>(OnRdpSessionStarted); this.eventService.BindHandler <SessionEndedEvent>(OnRdpSessionEnded); this.ContextMenuCommands = new CommandContainer <IProjectExplorerNode>( this, this.contextMenu.Items, ToolStripItemDisplayStyle.ImageAndText, this.serviceProvider); this.ToolbarCommands = new CommandContainer <IProjectExplorerNode>( this, this.toolStrip.Items, ToolStripItemDisplayStyle.Image, this.serviceProvider); this.viewModel = new ProjectExplorerViewModel( serviceProvider.GetService <ApplicationSettingsRepository>()); this.Disposed += (sender, args) => { this.viewModel.Dispose(); }; // // Bind controls. // this.linuxInstancesToolStripMenuItem.BindProperty( c => c.Checked, this.viewModel, m => m.IsLinuxIncluded, this.Container); this.windowsInstancesToolStripMenuItem.BindProperty( c => c.Checked, this.viewModel, m => m.IsWindowsIncluded, this.Container); this.viewModel.PropertyChanged += (sender, args) => { // Refresh tree, and show message on error. refreshButton_Click(sender, EventArgs.Empty); }; }