/// <summary> /// Add a project to the list of projects. /// This will add the project to the database. /// It will also set the new project as the /// selected project. If the project already /// exist, it will display a messagebox warning. /// </summary> /// <param name="prj">Project to add.</param> public async Task AddProject(Project prj) { // Add project to DB _pm.AddNewProject(prj); await System.Windows.Application.Current.Dispatcher.BeginInvoke(new System.Action(() => { // Create the VM ProjectListItemViewModel newPrjVm = new ProjectListItemViewModel(prj, this); // Add project VM to the list ProjectList.Insert(0, newPrjVm); // Set the new project as the selected project SelectedProjectVM = newPrjVm; _pm.SelectedProject = prj; })); }
/// <summary> /// Delete the project. This will remove the project and /// the project's view model. /// </summary> /// <param name="projectVM">Project to remove.</param> public void DeleteProject(ProjectListItemViewModel projectVM) { if (projectVM != null) { string dir = projectVM.ProjectFolderPath; string prjName = projectVM.ProjectName; // Unselect the project VM if (_SelectedProjectVM == projectVM) { _pm.SelectedProject.Dispose(); SelectedProjectVM.IsSelected = false; SelectedProjectVM.Dispose(); SelectedProjectVM = null; } // Delete the project from the database _pm.RemoveProject(projectVM.ProjectName); System.Windows.Application.Current.Dispatcher.BeginInvoke(new System.Action(() => { // Dispose of the VM projectVM.Dispose(); var tempPrjList = new ReactiveList <ProjectListItemViewModel>(ProjectList); tempPrjList.Remove(projectVM); ProjectList = tempPrjList; this.NotifyOfPropertyChange(() => this.ProjectList); // Delete the selected project from the list //_ProjectList.Remove(projectVM); })); // Prompt to delete the folder content also this.PromptToPermenatelyDelete(dir, prjName); } }
/// <summary> /// Run this method async to get the list of all /// the projects. /// </summary> /// <returns>List of all the projects.</returns> private async Task ScanProjectAsync() { IsProjectLoading = true; List <ProjectListItemViewModel> missingImageList = new List <ProjectListItemViewModel>(); ProjectList = new ReactiveList <ProjectListItemViewModel>(); var list = await Task.Run(() => _pm.GetProjectList()); foreach (var prj in list) { await System.Windows.Application.Current.Dispatcher.BeginInvoke(new System.Action(() => { // Create a project list item and add it to the list var prjVM = new ProjectListItemViewModel(prj, this); ProjectList.Add(prjVM); // Check if the project image exist if (prjVM.ProjectImage == null) { // Add name to list to later create image missingImageList.Add(prjVM); // Get the project for the image name //Project project = _pm.GetProject(prjVM.ProjectName); //// If the project image does not exist, create the image now //if (!File.Exists(project.GetProjectImagePath())) //{ // Task.Run(() => // { // prjVM.RefreshDisplay(); // this.NotifyOfPropertyChange(() => this.ProjectList); // }); //} } // Set the last selected project if (prj.ProjectID == _pm.GetSelectedProjectID()) { if (_pm.IsProjectSelected) { _SelectedProjectVM = prjVM; } else { SelectedProjectVM = prjVM; } _SelectedProjectVM.IsSelected = true; this.NotifyOfPropertyChange(() => this.SelectedProjectVM); } prj.Dispose(); })); } //// Load the missing project images 1 at a time. //// If a load them all it once, it takes to much memory //foreach (var prjVM in missingImageList) //{ // //Get the project for the image name // Project project = _pm.GetProject(prjVM.ProjectName); // // If the project image does not exist, create the image now // if (!File.Exists(project.GetProjectImagePath())) // { // Task.Run(() => // { // prjVM.RefreshDisplay(); // this.NotifyOfPropertyChange(() => this.ProjectList); // }); // } //} IsProjectLoading = false; }