Example #1
0
        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);
            };
        }