private bool RunInternalDiff(AnkhDiffArgs args) { DiffEditorControl diffEditor = new DiffEditorControl(); IAnkhEditorResolver er = GetService <IAnkhEditorResolver>(); diffEditor.CreateDiffEditor(this, args); if (diffEditor.WindowFrame != null && !args.ShowDiffAsDocument && VSVersion.VS2010OrLater) { diffEditor.WindowFrame.SetProperty((int)__VSFPROPID.VSFPROPID_FrameMode, (int)VSFRAMEMODE.VSFM_Float); } return(true); }
/*private void TryObtainBlock(CommandEventArgs e) * { * ISelectionContextEx ex = e.GetService<ISelectionContextEx>(typeof(ISelectionContext)); * * if (ex == null) * return; * * IVsTextView view = ex.ActiveDocumentFrameTextView; * IVsTextLines lines; * Guid languageService; * IVsLanguageInfo info; * * if (view != null * && VSErr.Succeeded(view.GetBuffer(out lines)) * && VSErr.Succeeded(lines.GetLanguageServiceID(out languageService)) * && null != (info = e.QueryService<IVsLanguageInfo>(languageService))) * { * GC.KeepAlive(info); * IVsLanguageBlock b = info as IVsLanguageBlock; * if (b != null) * { * GC.KeepAlive(b); * } * } * //IVsLanguageBlock * * * GC.KeepAlive(ex); * }*/ static void DoBlame(CommandEventArgs e, SvnOrigin item, SvnRevision revisionStart, SvnRevision revisionEnd, bool ignoreEols, SvnIgnoreSpacing ignoreSpacing, bool retrieveMergeInfo) { SvnWriteArgs wa = new SvnWriteArgs(); wa.Revision = revisionEnd; SvnBlameArgs ba = new SvnBlameArgs(); ba.Start = revisionStart; ba.End = revisionEnd; ba.IgnoreLineEndings = ignoreEols; ba.IgnoreSpacing = ignoreSpacing; ba.RetrieveMergedRevisions = retrieveMergeInfo; SvnTarget target = item.Target; IAnkhTempFileManager tempMgr = e.GetService <IAnkhTempFileManager>(); string tempFile = tempMgr.GetTempFileNamed(target.FileName); Collection <SvnBlameEventArgs> blameResult = null; bool retry = false; ProgressRunnerResult r = e.GetService <IProgressRunner>().RunModal(CommandStrings.Annotating, delegate(object sender, ProgressWorkerArgs ee) { using (FileStream fs = File.Create(tempFile)) { ee.Client.Write(target, fs, wa); } ba.SvnError += delegate(object errorSender, SvnErrorEventArgs errorEventArgs) { if (errorEventArgs.Exception is SvnClientBinaryFileException) { retry = true; errorEventArgs.Cancel = true; } }; ee.Client.GetBlame(target, ba, out blameResult); }); if (retry) { using (AnkhMessageBox mb = new AnkhMessageBox(e.Context)) { if (DialogResult.Yes != mb.Show( CommandStrings.AnnotateBinaryFileContinueAnywayText, CommandStrings.AnnotateBinaryFileContinueAnywayTitle, MessageBoxButtons.YesNo, MessageBoxIcon.Information)) { return; } r = e.GetService <IProgressRunner>() .RunModal(CommandStrings.Annotating, delegate(object sender, ProgressWorkerArgs ee) { ba.IgnoreMimeType = true; ee.Client.GetBlame(target, ba, out blameResult); }); } } if (!r.Succeeded) { return; } AnnotateEditorControl annEditor = new AnnotateEditorControl(); IAnkhEditorResolver er = e.GetService <IAnkhEditorResolver>(); annEditor.Create(e.Context, tempFile); annEditor.LoadFile(tempFile); annEditor.AddLines(item, blameResult); // Detect and set the language service Guid language; if (er.TryGetLanguageService(Path.GetExtension(target.FileName), out language)) { // Extension is mapped -> user annEditor.SetLanguageService(language); } else if (blameResult != null && blameResult.Count > 0 && blameResult[0].Line != null) { // Extension is not mapped -> Check if this is xml (like project files) string line = blameResult[0].Line.Trim(); if (line.StartsWith("<?xml") || (line.StartsWith("<") && line.Contains("xmlns=\"http://schemas.microsoft.com/developer/msbuild/"))) { if (er.TryGetLanguageService(".xml", out language)) { annEditor.SetLanguageService(language); } } } }