/// <summary> /// Creates a report of the open coverage data. /// </summary> public void CreateCoverageReport() { var config = new ReportConfigurationModel(); // set some defaults. config.ProjectName = CoverageRows.FirstOrDefault()?.DisplayName; var configDlg = new ReportConfigurationDlg(config); configDlg.Owner = Owner; // note: nullable bools... if (configDlg.ShowDialog() == true) { var writer = new CoverageWriter(); writer.WriteReport(CoverageRows.Select(vm => vm.Model), config); if (config.OpenWhenDone) { Process.Start( new ProcessStartInfo { FileName = config.DestinationPath, UseShellExecute = true, } ); } } }
/// <summary> /// Opens a coverage file.. /// </summary> /// <param name="path"> /// The path to the file to open. If null or empty, the user is prompted to select a file. /// </param> public void OpenFile(string path) { bool canceled = false; // if we were not given a path, let the user browse for one. if (string.IsNullOrEmpty(path)) { //TODO (testing): hide this behind a service interface var ofd = new OpenFileDialog { Filter = "Coverage XML File (*.coveragexml)|*.coveragexml", Multiselect = false, }; if (!string.IsNullOrEmpty(Settings.Default.CoverageXmlDirectory)) { ofd.InitialDirectory = Settings.Default.CoverageXmlDirectory; } try { ofd.FileOk += CheckFileOpenOK; if (ofd.ShowDialog(Owner) == true) { path = ofd.FileName; Settings.Default.CoverageXmlDirectory = Path.GetDirectoryName(path); Settings.Default.Save(); } else { // user canceled canceled = true; } } finally { ofd.FileOk -= CheckFileOpenOK; } } if (!canceled) { var reader = new CoverageReader(); var model = reader.ReadCoverageXml(path); model.AdditionalData["FullPath"] = path; CoverageRows.Add(new CoverageNodeViewModel(model)); } }
/// <summary> /// Removes the selected node and all of its children. /// </summary> private void RemoveSelectedNode() { if (SelectedCoverageRow != null) { CoverageNodeViewModel parent = SelectedCoverageRow.Parent; if (parent != null) { // non-root node. parent.RemoveChild(SelectedCoverageRow); // rebuild the row list. RebuildRowList(); } else { // removing a root, just remove from CoverageRows and let the // CollectionChanged handler deal with updating the list. CoverageRows.Remove(SelectedCoverageRow); } } }
/// <summary> /// Saves a coverage file. /// </summary> /// <param name="path"> /// The path to save the file to. IF null or empty, the user is prompted to select the file path. /// </param> public void SaveFile(string path) { bool canceled = false; // if we were not given a path, let the user browse for one. if (string.IsNullOrEmpty(path)) { //TODO (testing): hide this behind a service interface var sfd = new SaveFileDialog { Filter = "Coverage XML File (*.coveragexml)|*.coveragexml", }; if (!string.IsNullOrEmpty(Settings.Default.CoverageXmlDirectory)) { sfd.InitialDirectory = Settings.Default.CoverageXmlDirectory; } if (sfd.ShowDialog(Owner) == true) { path = sfd.FileName; Settings.Default.CoverageXmlDirectory = Path.GetDirectoryName(path); Settings.Default.Save(); } else { // user canceled canceled = true; } } if (!canceled) { var writer = new CoverageWriter(); writer.WriteCoverageXml(CoverageRows.Select(vm => vm.Model), path); } }