public override void Run() { var wb = Workbench.Instance; if (wb == null) return; var ed = wb.ActiveEditor; if (ed == null) return; var edSvc = ed.EditorService; TextFileDiffList sLF = null; TextFileDiffList dLF = null; string sourceFile = null; string targetFile = null; try { edSvc.SyncSessionCopy(); XmlCompareUtil.PrepareForComparison(edSvc.ResourceService, edSvc.ResourceID, edSvc.EditedResourceID, out sourceFile, out targetFile); sLF = new TextFileDiffList(sourceFile); dLF = new TextFileDiffList(targetFile); } catch (Exception ex) { ErrorDialog.Show(ex); return; } finally { try { File.Delete(sourceFile); } catch { } try { File.Delete(targetFile); } catch { } } try { double time = 0; DiffEngine de = new DiffEngine(); time = de.ProcessDiff(sLF, dLF, DiffEngineLevel.SlowPerfect); var rep = de.DiffReport(); TextDiffView dlg = new TextDiffView(sLF, dLF, rep, time); dlg.Text += " - " + edSvc.ResourceID; //NOXLATE dlg.ShowDialog(); dlg.Dispose(); } catch (Exception ex) { string tmp = string.Format("{0}{1}{1}***STACK***{1}{2}", ex.Message, Environment.NewLine, ex.StackTrace); MessageBox.Show(tmp, Strings.CompareError); return; } }
private void btnDiff_Click(object sender, EventArgs e) { TextFileDiffList sLF = null; TextFileDiffList dLF = null; string sourceFile = null; string targetFile = null; try { _edSvc.SyncSessionCopy(); XmlCompareUtil.PrepareForComparison(_edSvc.ResourceService, _edSvc.ResourceID, _edSvc.EditedResourceID, out sourceFile, out targetFile); sLF = new TextFileDiffList(sourceFile); dLF = new TextFileDiffList(targetFile); } catch (Exception ex) { ErrorDialog.Show(ex); return; } finally { try { File.Delete(sourceFile); } catch { } try { File.Delete(targetFile); } catch { } } try { double time = 0; DiffEngine de = new DiffEngine(); time = de.ProcessDiff(sLF, dLF, DiffEngineLevel.SlowPerfect); var rep = de.DiffReport(); TextDiffView dlg = new TextDiffView(sLF, dLF, rep, time); dlg.Text += " - " + _edSvc.ResourceID; //NOXLATE dlg.ShowDialog(); dlg.Dispose(); } catch (Exception ex) { string tmp = string.Format("{0}{1}{1}***STACK***{1}{2}", ex.Message, Environment.NewLine, ex.StackTrace); MessageBox.Show(tmp, Strings.CompareError); return; } }
/// <summary> /// Initializes a new instance /// </summary> public TextDiffView(TextFileDiffList source, TextFileDiffList destination, List<DiffResultSpan> DiffLines, double seconds) : this() { ListViewItem lviS; ListViewItem lviD; int cnt = 1; int i; foreach (DiffResultSpan drs in DiffLines) { switch (drs.Status) { case DiffResultSpanStatus.DeleteSource: for (i = 0; i < drs.Length; i++) { lviS = new ListViewItem(cnt.ToString(NumFormat)); lviD = new ListViewItem(cnt.ToString(NumFormat)); lviS.BackColor = Color.Red; lviS.SubItems.Add(((TextLine)source.GetByIndex(drs.SourceIndex + i)).Line); lviD.BackColor = Color.LightGray; lviD.SubItems.Add(string.Empty); lvSource.Items.Add(lviS); lvDestination.Items.Add(lviD); cnt++; } break; case DiffResultSpanStatus.NoChange: for (i = 0; i < drs.Length; i++) { lviS = new ListViewItem(cnt.ToString(NumFormat)); lviD = new ListViewItem(cnt.ToString(NumFormat)); lviS.BackColor = Color.White; lviS.SubItems.Add(((TextLine)source.GetByIndex(drs.SourceIndex + i)).Line); lviD.BackColor = Color.White; lviD.SubItems.Add(((TextLine)destination.GetByIndex(drs.DestIndex + i)).Line); lvSource.Items.Add(lviS); lvDestination.Items.Add(lviD); cnt++; } break; case DiffResultSpanStatus.AddDestination: for (i = 0; i < drs.Length; i++) { lviS = new ListViewItem(cnt.ToString(NumFormat)); lviD = new ListViewItem(cnt.ToString(NumFormat)); lviS.BackColor = Color.LightGray; lviS.SubItems.Add(string.Empty); lviD.BackColor = Color.LightGreen; lviD.SubItems.Add(((TextLine)destination.GetByIndex(drs.DestIndex + i)).Line); lvSource.Items.Add(lviS); lvDestination.Items.Add(lviD); cnt++; } break; case DiffResultSpanStatus.Replace: for (i = 0; i < drs.Length; i++) { lviS = new ListViewItem(cnt.ToString(NumFormat)); lviD = new ListViewItem(cnt.ToString(NumFormat)); lviS.BackColor = Color.Red; lviS.SubItems.Add(((TextLine)source.GetByIndex(drs.SourceIndex + i)).Line); lviD.BackColor = Color.LightGreen; lviD.SubItems.Add(((TextLine)destination.GetByIndex(drs.DestIndex + i)).Line); lvSource.Items.Add(lviS); lvDestination.Items.Add(lviD); cnt++; } break; } } }