From 40090f57832daa03d12aa65a5de4bd07a73cffc5 Mon Sep 17 00:00:00 2001 From: huguesv Date: Thu, 14 Jan 2016 15:30:04 -0800 Subject: [PATCH 001/289] Add support for exporting plot to bitmap file formats (bmp,jpeg,tiff,png) and PDF. Add support for copying plot to clipboard as bitmap or metafile. --- .../Session/RSessionEvaluationCommands.cs | 29 +-- ...xportPreviousPlotToImageExpectedResult.bmp | Bin 0 -> 130678 bytes .../Test/Files/ExportToPdfExpectedResult.pdf | Bin 0 -> 4462 bytes .../Test/GraphicsDeviceTestFilesFixture.cs | 9 + src/Host/Client/Test/IdeGraphicsDeviceTest.cs | 52 ++-- .../Test/Microsoft.R.Host.Client.Test.csproj | 3 + src/Host/Client/Test/PdfComparer.cs | 49 ++++ .../Impl/Commands/R/RPackageCommandId.cs | 10 +- .../Microsoft.VisualStudio.R.Package.csproj | 12 +- src/Package/Impl/Package.vsct | 226 +----------------- .../Plots/Commands/CopyPlotAsBitmapCommand.cs | 18 ++ .../Commands/CopyPlotAsMetafileCommand.cs | 18 ++ .../Impl/Plots/Commands/CopyPlotCommand.cs | 21 -- ...Command.cs => ExportPlotAsImageCommand.cs} | 10 +- .../Plots/Commands/ExportPlotAsPdfCommand.cs | 16 ++ .../Impl/Plots/Commands/ExportPlotCommand.cs | 21 -- .../Impl/Plots/Commands/FixPlotCommand.cs | 19 -- .../Impl/Plots/Commands/OpenPlotCommand.cs | 20 -- .../Impl/Plots/Commands/SavePlotCommand.cs | 16 -- .../Impl/Plots/Commands/ZoomInPlotCommand.cs | 18 -- .../Impl/Plots/Commands/ZoomOutPlotCommand.cs | 18 -- .../Impl/Plots/IPlotContentProvider.cs | 23 +- src/Package/Impl/Plots/PlotContentProvider.cs | 81 +++++-- src/Package/Impl/Plots/PlotWindowPane.cs | 73 ++++-- src/Package/Impl/Resources.Designer.cs | 61 +++-- src/Package/Impl/Resources.resx | 23 +- src/Package/Impl/Shell/VsAppShell.cs | 1 + 27 files changed, 362 insertions(+), 485 deletions(-) create mode 100644 src/Host/Client/Test/Files/ExportPreviousPlotToImageExpectedResult.bmp create mode 100644 src/Host/Client/Test/Files/ExportToPdfExpectedResult.pdf create mode 100644 src/Host/Client/Test/PdfComparer.cs create mode 100644 src/Package/Impl/Plots/Commands/CopyPlotAsBitmapCommand.cs create mode 100644 src/Package/Impl/Plots/Commands/CopyPlotAsMetafileCommand.cs delete mode 100644 src/Package/Impl/Plots/Commands/CopyPlotCommand.cs rename src/Package/Impl/Plots/Commands/{PrintPlotCommand.cs => ExportPlotAsImageCommand.cs} (53%) create mode 100644 src/Package/Impl/Plots/Commands/ExportPlotAsPdfCommand.cs delete mode 100644 src/Package/Impl/Plots/Commands/ExportPlotCommand.cs delete mode 100644 src/Package/Impl/Plots/Commands/FixPlotCommand.cs delete mode 100644 src/Package/Impl/Plots/Commands/OpenPlotCommand.cs delete mode 100644 src/Package/Impl/Plots/Commands/SavePlotCommand.cs delete mode 100644 src/Package/Impl/Plots/Commands/ZoomInPlotCommand.cs delete mode 100644 src/Package/Impl/Plots/Commands/ZoomOutPlotCommand.cs diff --git a/src/Host/Client/Impl/Session/RSessionEvaluationCommands.cs b/src/Host/Client/Impl/Session/RSessionEvaluationCommands.cs index 280f7a6d6..aab7ab367 100644 --- a/src/Host/Client/Impl/Session/RSessionEvaluationCommands.cs +++ b/src/Host/Client/Impl/Session/RSessionEvaluationCommands.cs @@ -31,12 +31,12 @@ public static Task SetVsGraphicsDevice(this IRSessionEvaluati .rtvs.vsgd <- function() { invisible(.External('Microsoft.R.Host::External.ide_graphicsdevice_new')) } -.rtvs.vsgdexportimage <- function(filename, device) { - dev.copy(device=device,filename=filename) +.rtvs.vsgdexportimage <- function(filename, device, width, height) { + dev.copy(device=device,filename=filename,width=width,height=height) dev.off() } -.rtvs.vsgdexportpdf <- function(filename) { - dev.copy(device=pdf,file=filename) +.rtvs.vsgdexportpdf <- function(filename, width, height, paper) { + dev.copy(device=pdf,file=filename,width=width,height=height,paper=paper) dev.off() } .rtvs.vsgdnextplot <- function() { @@ -77,17 +77,18 @@ public static Task PlotHistoryInfo(this IRSessionEvaluation e return evaluation.EvaluateAsync(script, REvaluationKind.Json); } - public static Task CopyToDevice(this IRSessionEvaluation evaluation, string deviceName, string outputFilePath) { - string script; - switch (deviceName) { - case "pdf": - script = string.Format(".rtvs.vsgdexportpdf('{0}')", outputFilePath.Replace("\\", "/")); - break; + public static Task ExportToBitmap(this IRSessionEvaluation evaluation, string deviceName, string outputFilePath, int widthInPixels, int heightInPixels) { + string script = string.Format(".rtvs.vsgdexportimage('{0}', {1}, {2}, {3})", outputFilePath.Replace("\\", "/"), deviceName, widthInPixels, heightInPixels); + return evaluation.EvaluateAsync(script); + } + + public static Task ExportToMetafile(this IRSessionEvaluation evaluation, string outputFilePath, double widthInInches, double heightInInches) { + string script = string.Format(".rtvs.vsgdexportimage('{0}', win.metafile, {1}, {2})", outputFilePath.Replace("\\", "/"), widthInInches, heightInInches); + return evaluation.EvaluateAsync(script); + } - default: - script = string.Format(".rtvs.vsgdexportimage('{0}', {1})", outputFilePath.Replace("\\", "/"), deviceName); - break; - } + public static Task ExportToPdf(this IRSessionEvaluation evaluation, string outputFilePath, double widthInInches, double heightInInches, string paper) { + string script = string.Format(".rtvs.vsgdexportpdf('{0}', {1}, {2}, '{3}')", outputFilePath.Replace("\\", "/"), widthInInches, heightInInches, paper); return evaluation.EvaluateAsync(script); } diff --git a/src/Host/Client/Test/Files/ExportPreviousPlotToImageExpectedResult.bmp b/src/Host/Client/Test/Files/ExportPreviousPlotToImageExpectedResult.bmp new file mode 100644 index 0000000000000000000000000000000000000000..f11f447b6c9d5ca15061725a0f71243be85b5855 GIT binary patch literal 130678 zcmeI*U3TNP9fomElCjfxJZ&RS+HpsXC7I`R1-@N6Dy^LVi+N{`ah&fzw2Nle+S&Vu<;}03K95({6x9` z>Hg=d$#r(b4!t_tQ%8G0Gp7x6vB~Fl`J;w&!sq4Hxf{d%pX3=I$!V3 z$h#Bs{`@?@GSvS#oIw8YL`eXw^UW{jGPKtIqH*|rh4Qvwo@fCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-s6b%8dq<1F7o$U8 zy*3vXm@5iGrp4~krGO)LFZ-HyO1(sKc^znM`yT3iKWmpaA=il7Yr_^nPmOhcyes(H zkYMQjcRuj$o`}T5%%Uk64T-}D4wRU6%j%PcT1JwqN z=kRuTU8e>6?G`f4KZH7)b5q!P!(J*DcBZxCIQ+XHq}%cPhK;rM@zdYKuHv%S*_jJ+ z114M1JP6u4mpq;q_L@TTb1Gz7{$%cg2$;Gn%r8G=Cl+v7>HWLE6@GrUBPaOE@43AS zG+;8%W7s_@!Q**he{r;@vtqABU0(05oefY6|Gm!K2o!eSXiZf?zt-)4&j>!N2lZMz zOF#k=kbndvAOQ(TKmrnwfCL5!G{Hwr<%r;pM;$N~weWsKu>~I-Uf)!X2&RfUU@B_i z{fJ@hZ6?MQ=)WZ7_#TI;UczshjBACj50Q?C$wZ;3PBDaJOy~qZOKAh9w zl8XlQ6vt_B$)2thy_(bDl8XlQ6vt_B$)2thy*gIIT)AMU6W2U^O*Wg0Cdg7;Btds! z;fbq$x@0@=ma}xJ$VMUsx+~baxi#&kLx1ILAtIeMo)4p`Zx-onuSc_!&d)v2vCjT@ zF4^B^xm!35F1cJye`TBom+bFNxm!35F1cJye`TBom+bFNxm!35F1cJye`TBom+bFN zxm!35F1cJye`TBom+bFNxm!35F1cJye`TBom+bFNxm!35F1cJye`TBom+bFNxm!35 zF1cJye`TBom+bFNxm!35F1cJye`TCTf3kUfz+c$Jws1Y|O}0Dq?lcu{uA{xla!xXc zI%Ba^ljPJ>HME08CR)8LZx$fRwB)8LZR3gk)SG`QqEGHF}k zG`Qrn0(sIn4K6v4OxjjB4K6vYK%O*CgG&}g(U7y8U4cBy+^FM{^T?!ah11}Y z(+cEC<21PBJThrp;WW79v;uk3I1Mg2k4)NDI1Mg2tw5eMPJ>I%Ba^ljPJ>HME08CR z)8LZx$fRwB)8LZR3gk)SG`QqEGHF}kG>GJSUjQI9_9FpEwvj+=+L3!YjVl{Smh*`x zQO+(3pmB&Nl68J|pS%4s;e6amEo(RpF1Z$4w@yxjOLpt8Wtr39l54Sb>*O@JWVilW zmN^YBxfWZuPELbMcI&TYnbY8sYq53fH!>#t>*)8LY8 zv32X@G`M89{#uqf4KBGBTenV5gG+YnuVtCj;F4>xb?Z!_vAjOM8#eO`dBwi~5bwOY zegDtnyJ7P>+g`-?#2tUBmt(72-I}qybe+x6+E1xVJ(D+i=flT$pZb8<*k|wz>(Qpk zJMVk^&3Nt*ayplP2Q8<;C3nwcO><6zORmYctCiE>lDpb#nsXXla!tNnt(*pz+|^#w zoYUZvYx3=CU+MoQo z@AQ}YH8h@6jDmh={hdFP^T1{GZ81P6=gG zG`M6O1!#cN;F19bJd)Gkl5rHE0ZxNU1{m;2PJ>IvQGf-_9$)V9o>MY-hKjBUM~2A3>nS3u5rG~_I2S0K+aH|n_LJThrp;WW79v;uk3I1Mg2 zk4)NDI1Mg2tw5eMPJ>I%Ba^ljPJ>HME08CR)8LZx$fRwB)8LZR3gk)SG`QqEGHF}k zG`Qrn0(sJ6HO!mJf0&;YaS8 zw{HSAH}@SoZw6+b_Wcyzm7G> zSJPh^r@G>SJPh^r@G>SJPh^r@G>SJPh^ zr@G>SJPh^r@G>SJPh^r@G>SJPh^r@G>SJPh^r@)a_Ir<@-2A4cK+JFK$4K8^=H%C8&)8LXvM;lN8 zr@BtUj8L#XB`cC!Y$fc3rH-f{ugd@{7!m5~~&+rv$4 z-+g&Y5SjcouJW%r4KBGFa_0pAPJ>IX#n}pU3f(+i?S~V|1+TTIYqQKG*179*`e(39 zu4SIm`S64A_{ZSa@0eOtfI8EipY7)z+i7w9LA)Bz?lTvu(Y;SWH+P~Vlbxg~EJkW* zJYP5nBAxB~71&AV=N|7^XMa4G>~FK&Eu6+~oa>)Xpxhy#$|N8G2}nQ!5|DrdBp?9^ zNI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndv yAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbnfHEAW3pvV`^k literal 0 HcmV?d00001 diff --git a/src/Host/Client/Test/Files/ExportToPdfExpectedResult.pdf b/src/Host/Client/Test/Files/ExportToPdfExpectedResult.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d268146e99275c9863670309c9a4a8778de8c0a3 GIT binary patch literal 4462 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 literal 0 HcmV?d00001 diff --git a/src/Host/Client/Test/GraphicsDeviceTestFilesFixture.cs b/src/Host/Client/Test/GraphicsDeviceTestFilesFixture.cs index 6bfa636d0..8fee57fb3 100644 --- a/src/Host/Client/Test/GraphicsDeviceTestFilesFixture.cs +++ b/src/Host/Client/Test/GraphicsDeviceTestFilesFixture.cs @@ -11,13 +11,22 @@ public class GraphicsDeviceTestFilesFixture : DeployFilesFixture { public string ExportToPngResultPath { get; } public string ExportToJpegResultPath { get; } public string ExportToTiffResultPath { get; } + public string ExportPreviousPlotToImageResultPath { get; } + public string ExpectedExportPreviousPlotToImagePath { get; } + public string ExpectedExportToPdfPath { get; } public GraphicsDeviceTestFilesFixture() : base(@"Host\Client\Test\Files", "Files") { + // Path to files that are generated when tests are executed ExportToPdfResultPath = Path.Combine(DestinationPath, "ExportToPdfResult.pdf"); ExportToBmpResultPath = Path.Combine(DestinationPath, "ExportToBmpResult.bmp"); ExportToPngResultPath = Path.Combine(DestinationPath, "ExportToPngResult.png"); ExportToJpegResultPath = Path.Combine(DestinationPath, "ExportToJpegResult.jpg"); ExportToTiffResultPath = Path.Combine(DestinationPath, "ExportToTiffResult.tif"); + ExportPreviousPlotToImageResultPath = Path.Combine(DestinationPath, "ExportPreviousPlotToImageResultPath.bmp"); + + // Path to files that are compared against and are included as part of test sources + ExpectedExportPreviousPlotToImagePath = Path.Combine(DestinationPath, "ExportPreviousPlotToImageExpectedResult.bmp"); + ExpectedExportToPdfPath = Path.Combine(DestinationPath, "ExportToPdfExpectedResult.pdf"); } } } \ No newline at end of file diff --git a/src/Host/Client/Test/IdeGraphicsDeviceTest.cs b/src/Host/Client/Test/IdeGraphicsDeviceTest.cs index 663282efd..c438d9c2f 100644 --- a/src/Host/Client/Test/IdeGraphicsDeviceTest.cs +++ b/src/Host/Client/Test/IdeGraphicsDeviceTest.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Drawing; using System.IO; @@ -12,7 +11,6 @@ using FluentAssertions; using Microsoft.Common.Core.Shell; using Microsoft.R.Actions.Utility; -using Microsoft.R.Support.Test.Utility; using Microsoft.UnitTests.Core.XUnit; using Xunit; @@ -32,12 +30,12 @@ public class IdeGraphicsDeviceTest { .rtvs.vsgd <- function() { invisible(.External('Microsoft.R.Host::External.ide_graphicsdevice_new')) } -.rtvs.vsgdexportimage <- function(filename, device) { - dev.copy(device=device,filename=filename) +.rtvs.vsgdexportimage <- function(filename, device, width, height) { + dev.copy(device=device,filename=filename,width=width,height=height) dev.off() } -.rtvs.vsgdexportpdf <- function(filename) { - dev.copy(device=pdf,file=filename) +.rtvs.vsgdexportpdf <- function(filename, width, height, paper) { + dev.copy(device=pdf,file=filename,width=width,height=height,paper=paper) dev.off() } .rtvs.vsgdnextplot <- function() { @@ -145,7 +143,7 @@ public void MultiplePlotsNoSleep() { plot(0:10) plot(5:15) "; - GraphicsTest(code).Should().ContainSingle(); + GraphicsTest(code).Should().HaveCount(2); } [Test] @@ -214,15 +212,17 @@ public void ExportToImage() { var code = string.Format(@" plot(0:10) Sys.sleep(1) -.rtvs.vsgdexportimage('{0}', bmp) -.rtvs.vsgdexportimage('{1}', png) -.rtvs.vsgdexportimage('{2}', jpeg) -.rtvs.vsgdexportimage('{3}', tiff) +.rtvs.vsgdexportimage('{0}', bmp, {4}, {5}) +.rtvs.vsgdexportimage('{1}', png, {4}, {5}) +.rtvs.vsgdexportimage('{2}', jpeg, {4}, {5}) +.rtvs.vsgdexportimage('{3}', tiff, {4}, {5}) ", exportedBmpFilePath.Replace("\\", "/"), exportedPngFilePath.Replace("\\", "/"), exportedJpegFilePath.Replace("\\", "/"), - exportedTiffFilePath.Replace("\\", "/")); + exportedTiffFilePath.Replace("\\", "/"), + DefaultExportWidth, + DefaultExportHeight); var actualPlotFilePaths = GraphicsTest(code).ToArray(); actualPlotFilePaths.Should().ContainSingle(); @@ -248,6 +248,28 @@ public void ExportToImage() { exportedTiff.Height.Should().Be(DefaultExportHeight); } + [Test] + [Category.Plots] + public void ExportPreviousPlotToImage() { + var exportedBmpFilePath = _files.ExportPreviousPlotToImageResultPath; + + var code = string.Format(@" +plot(0:10) +plot(10:20) +Sys.sleep(1) +.rtvs.vsgdpreviousplot() +.rtvs.vsgdexportimage('{0}', bmp, {1}, {2}) +", + exportedBmpFilePath.Replace("\\", "/"), + DefaultWidth, + DefaultHeight); + + var actualPlotFilePaths = GraphicsTest(code).ToArray(); + actualPlotFilePaths.Should().HaveCount(3); + + File.ReadAllBytes(exportedBmpFilePath).Should().Equal(File.ReadAllBytes(_files.ExpectedExportPreviousPlotToImagePath)); + } + [Test] [Category.Plots] public void ExportToPdf() { @@ -256,8 +278,8 @@ public void ExportToPdf() { var code = string.Format(@" plot(0:10) Sys.sleep(1) -.rtvs.vsgdexportpdf('{0}') -", exportedFilePath.Replace("\\", "/")); +.rtvs.vsgdexportpdf('{0}', {1}, {2}, '{3}') +", exportedFilePath.Replace("\\", "/"), 7, 7, "special"); var actualPlotFilePaths = GraphicsTest(code).ToArray(); actualPlotFilePaths.Should().ContainSingle(); @@ -266,7 +288,7 @@ public void ExportToPdf() { bmp.Width.Should().Be(DefaultWidth); bmp.Height.Should().Be(DefaultHeight); - File.Exists(exportedFilePath).Should().BeTrue(); + PdfComparer.ComparePdfFiles(exportedFilePath, _files.ExpectedExportToPdfPath); } [Test] diff --git a/src/Host/Client/Test/Microsoft.R.Host.Client.Test.csproj b/src/Host/Client/Test/Microsoft.R.Host.Client.Test.csproj index 60484b839..d80f90a03 100644 --- a/src/Host/Client/Test/Microsoft.R.Host.Client.Test.csproj +++ b/src/Host/Client/Test/Microsoft.R.Host.Client.Test.csproj @@ -69,6 +69,7 @@ + @@ -111,6 +112,7 @@ + @@ -120,6 +122,7 @@ + diff --git a/src/Host/Client/Test/PdfComparer.cs b/src/Host/Client/Test/PdfComparer.cs new file mode 100644 index 000000000..16a34fc3a --- /dev/null +++ b/src/Host/Client/Test/PdfComparer.cs @@ -0,0 +1,49 @@ +using System; +using System.IO; +using System.Linq; +using FluentAssertions; + +namespace Microsoft.R.Host.Client.Test { + static class PdfComparer { + /// + /// Compare 2 PDF files, ignoring the headers. + /// + /// PDF file to validate. + /// PDF file to compare against. + public static void ComparePdfFiles(string actualFilePath, string expectedFilePath) { + var actualPdfBytes = File.ReadAllBytes(actualFilePath); + var expectedPdfBytes = File.ReadAllBytes(expectedFilePath); + ClearPdfHeader(actualPdfBytes); + ClearPdfHeader(expectedPdfBytes); + + actualPdfBytes.Should().Equal(expectedPdfBytes); + } + + private static void ClearPdfHeader(byte[] data) { + // PDF files have headers that include CreationDate, ModDate, Producer + // which will not match for 2 identical exports of plots + // That metadata is stored in the first object, between '<<' and '>>' + int startMetadataIndex = IndexOfSequence(data, new byte[] { 0x3c, 0x3c }, 0); + startMetadataIndex.Should().BeGreaterOrEqualTo(0); + int endMetadataIndex = IndexOfSequence(data, new byte[] { 0x3e, 0x3e }, startMetadataIndex); + endMetadataIndex.Should().BeGreaterThan(startMetadataIndex); + + // Replace the whole metadata block with spaces + for (int i = startMetadataIndex + 2; i < endMetadataIndex; i++) { + data[i] = 0x20; + } + } + + private static int IndexOfSequence(byte[] data, byte[] sequence, int startIndex) { + int index = startIndex; + while (index < data.Length - sequence.Length) { + var dataSegment = new ArraySegment(data, index, sequence.Length); + if (dataSegment.SequenceEqual(sequence)) { + return index; + } + index++; + } + return -1; + } + } +} diff --git a/src/Package/Impl/Commands/R/RPackageCommandId.cs b/src/Package/Impl/Commands/R/RPackageCommandId.cs index ea3b660cb..21b673c73 100644 --- a/src/Package/Impl/Commands/R/RPackageCommandId.cs +++ b/src/Package/Impl/Commands/R/RPackageCommandId.cs @@ -36,20 +36,12 @@ public static class RPackageCommandId { public const int icmdCheckForPackageUpdates = 602; // Plots - //public const int icmdOpenPlot = 701; - //public const int icmdSavePlot = 702; - //public const int icmdFixPlot = 703; - public const int icmdExportPlot = 704; public const int icmdPrintPlot = 705; - //public const int icmdCopyPlot = 707; - //public const int icmdZoomInPlot = 708; - //public const int icmdZoomOutPlot = 709; public const int icmdNextPlot = 710; public const int icmdPrevPlot = 711; public const int icmdClearPlots = 712; - public const int icmdExportPlotAsPng = 713; + public const int icmdExportPlotAsImage = 713; public const int icmdExportPlotAsPdf = 714; - public const int icmdExportPlotAsBitmap = 715; public const int icmdCopyPlotAsBitmap = 716; public const int icmdCopyPlotAsMetafile = 717; diff --git a/src/Package/Impl/Microsoft.VisualStudio.R.Package.csproj b/src/Package/Impl/Microsoft.VisualStudio.R.Package.csproj index 83dcbd83b..7d1ca4cf2 100644 --- a/src/Package/Impl/Microsoft.VisualStudio.R.Package.csproj +++ b/src/Package/Impl/Microsoft.VisualStudio.R.Package.csproj @@ -160,13 +160,11 @@ + + - - - - @@ -224,11 +222,9 @@ - - - + + - diff --git a/src/Package/Impl/Package.vsct b/src/Package/Impl/Package.vsct index 974d9fb8b..3807ee308 100644 --- a/src/Package/Impl/Package.vsct +++ b/src/Package/Impl/Package.vsct @@ -204,15 +204,9 @@ - - - - @@ -265,15 +259,9 @@ - - - - @@ -475,96 +463,6 @@ - - - - - - - - - - - - - - - - - @@ -634,16 +532,6 @@ - - @@ -1132,47 +1020,6 @@ - - - - - - - - - - - - - - - - - @@ -1181,7 +1028,7 @@ - + @@ -1189,10 +1036,6 @@ - - - - @@ -1201,43 +1044,11 @@ - - - - - - - - - - - - - - @@ -1246,7 +1057,7 @@ - + @@ -1254,22 +1065,14 @@ - - - - - + - - - - @@ -1429,27 +1232,18 @@ - - - - - + + - + - - @@ -1484,9 +1278,7 @@ - - diff --git a/src/Package/Impl/Plots/Commands/CopyPlotAsBitmapCommand.cs b/src/Package/Impl/Plots/Commands/CopyPlotAsBitmapCommand.cs new file mode 100644 index 000000000..c49fb2d24 --- /dev/null +++ b/src/Package/Impl/Plots/Commands/CopyPlotAsBitmapCommand.cs @@ -0,0 +1,18 @@ +using System; +using Microsoft.Languages.Editor; +using Microsoft.Languages.Editor.Controller.Command; +using Microsoft.VisualStudio.R.Package.Commands; +using Microsoft.VisualStudio.R.Packages.R; + +namespace Microsoft.VisualStudio.R.Package.Plots.Commands { + internal sealed class CopyPlotAsBitmapCommand : PlotWindowCommand { + public CopyPlotAsBitmapCommand(PlotWindowPane pane) : + base(pane, RPackageCommandId.icmdCopyPlotAsBitmap) { + } + + public override CommandResult Invoke(Guid group, int id, object inputArg, ref object outputArg) { + _pane.PlotContentProvider.CopyToClipboardAsBitmap(); + return CommandResult.Executed; + } + } +} diff --git a/src/Package/Impl/Plots/Commands/CopyPlotAsMetafileCommand.cs b/src/Package/Impl/Plots/Commands/CopyPlotAsMetafileCommand.cs new file mode 100644 index 000000000..6ec7ef053 --- /dev/null +++ b/src/Package/Impl/Plots/Commands/CopyPlotAsMetafileCommand.cs @@ -0,0 +1,18 @@ +using System; +using Microsoft.Languages.Editor; +using Microsoft.Languages.Editor.Controller.Command; +using Microsoft.VisualStudio.R.Package.Commands; +using Microsoft.VisualStudio.R.Packages.R; + +namespace Microsoft.VisualStudio.R.Package.Plots.Commands { + internal sealed class CopyPlotAsMetafileCommand : PlotWindowCommand { + public CopyPlotAsMetafileCommand(PlotWindowPane pane) : + base(pane, RPackageCommandId.icmdCopyPlotAsMetafile) { + } + + public override CommandResult Invoke(Guid group, int id, object inputArg, ref object outputArg) { + _pane.PlotContentProvider.CopyToClipboardAsMetafile(); + return CommandResult.Executed; + } + } +} diff --git a/src/Package/Impl/Plots/Commands/CopyPlotCommand.cs b/src/Package/Impl/Plots/Commands/CopyPlotCommand.cs deleted file mode 100644 index d9443e7e7..000000000 --- a/src/Package/Impl/Plots/Commands/CopyPlotCommand.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System; -using Microsoft.Languages.Editor; -using Microsoft.Languages.Editor.Controller.Command; -using Microsoft.VisualStudio.R.Package.Commands; -using Microsoft.VisualStudio.R.Packages.R; - -namespace Microsoft.VisualStudio.R.Package.Plots.Commands { - //internal sealed class CopyPlotCommand : PlotWindowCommand { - // public CopyPlotCommand(PlotWindowPane pane) : - // base(pane, RPackageCommandId.icmdCopyPlot) { - // } - - // public override CommandStatus Status(Guid group, int id) { - // return CommandStatus.Supported; - // } - - // public override CommandResult Invoke(Guid group, int id, object inputArg, ref object outputArg) { - // return CommandResult.Executed; - // } - //} -} diff --git a/src/Package/Impl/Plots/Commands/PrintPlotCommand.cs b/src/Package/Impl/Plots/Commands/ExportPlotAsImageCommand.cs similarity index 53% rename from src/Package/Impl/Plots/Commands/PrintPlotCommand.cs rename to src/Package/Impl/Plots/Commands/ExportPlotAsImageCommand.cs index 3f3f2c599..c6e48f5c7 100644 --- a/src/Package/Impl/Plots/Commands/PrintPlotCommand.cs +++ b/src/Package/Impl/Plots/Commands/ExportPlotAsImageCommand.cs @@ -3,15 +3,13 @@ using Microsoft.VisualStudio.R.Package.Commands; namespace Microsoft.VisualStudio.R.Package.Plots.Commands { - internal sealed class PrintPlotCommand : PlotWindowCommand { - public PrintPlotCommand(PlotWindowPane pane) : - base(pane, RPackageCommandId.icmdPrintPlot) { } - - public override CommandStatus Status(Guid group, int id) { - return CommandStatus.Supported; + internal sealed class ExportPlotAsImageCommand : PlotWindowCommand { + public ExportPlotAsImageCommand(PlotWindowPane pane) : + base(pane, RPackageCommandId.icmdExportPlotAsImage) { } public override CommandResult Invoke(Guid group, int id, object inputArg, ref object outputArg) { + _pane.ExportPlotAsImage(); return CommandResult.Executed; } } diff --git a/src/Package/Impl/Plots/Commands/ExportPlotAsPdfCommand.cs b/src/Package/Impl/Plots/Commands/ExportPlotAsPdfCommand.cs new file mode 100644 index 000000000..fc139ba89 --- /dev/null +++ b/src/Package/Impl/Plots/Commands/ExportPlotAsPdfCommand.cs @@ -0,0 +1,16 @@ +using System; +using Microsoft.Languages.Editor; +using Microsoft.VisualStudio.R.Package.Commands; + +namespace Microsoft.VisualStudio.R.Package.Plots.Commands { + internal sealed class ExportPlotAsPdfCommand : PlotWindowCommand { + public ExportPlotAsPdfCommand(PlotWindowPane pane) : + base(pane, RPackageCommandId.icmdExportPlotAsPdf) { + } + + public override CommandResult Invoke(Guid group, int id, object inputArg, ref object outputArg) { + _pane.ExportPlotAsPdf(); + return CommandResult.Executed; + } + } +} diff --git a/src/Package/Impl/Plots/Commands/ExportPlotCommand.cs b/src/Package/Impl/Plots/Commands/ExportPlotCommand.cs deleted file mode 100644 index ec48382ea..000000000 --- a/src/Package/Impl/Plots/Commands/ExportPlotCommand.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System; -using Microsoft.Languages.Editor; -using Microsoft.VisualStudio.R.Package.Commands; - -namespace Microsoft.VisualStudio.R.Package.Plots.Commands { - internal sealed class ExportPlotCommand : PlotWindowCommand { - public ExportPlotCommand(PlotWindowPane pane) : - base(pane, RPackageCommandId.icmdExportPlot) { - } - - public override CommandStatus Status(Guid group, int id) { - return CommandStatus.NotSupported; // implementation not completed yet - //return CommandStatus.Supported; - } - - public override CommandResult Invoke(Guid group, int id, object inputArg, ref object outputArg) { - _pane.ExportPlot(); - return CommandResult.Executed; - } - } -} diff --git a/src/Package/Impl/Plots/Commands/FixPlotCommand.cs b/src/Package/Impl/Plots/Commands/FixPlotCommand.cs deleted file mode 100644 index 23639589e..000000000 --- a/src/Package/Impl/Plots/Commands/FixPlotCommand.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; -using Microsoft.Languages.Editor; -using Microsoft.VisualStudio.R.Package.Commands; - -namespace Microsoft.VisualStudio.R.Package.Plots.Commands { - //internal sealed class FixPlotCommand : PlotWindowCommand { - // public FixPlotCommand(PlotWindowPane pane) : - // base(pane, RPackageCommandId.icmdFixPlot) { - // } - - // public override CommandStatus Status(Guid group, int id) { - // return CommandStatus.Supported; - // } - - // public override CommandResult Invoke(Guid group, int id, object inputArg, ref object outputArg) { - // return CommandResult.Executed; - // } - //} -} diff --git a/src/Package/Impl/Plots/Commands/OpenPlotCommand.cs b/src/Package/Impl/Plots/Commands/OpenPlotCommand.cs deleted file mode 100644 index 2d4e0a7df..000000000 --- a/src/Package/Impl/Plots/Commands/OpenPlotCommand.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using Microsoft.Languages.Editor; -using Microsoft.VisualStudio.R.Package.Commands; - -namespace Microsoft.VisualStudio.R.Package.Plots.Commands { - //internal sealed class OpenPlotCommand : PlotWindowCommand { - // public OpenPlotCommand(PlotWindowPane pane) : - // base(pane, RPackageCommandId.icmdOpenPlot) { - // } - - // public override CommandStatus Status(Guid group, int id) { - // return CommandStatus.SupportedAndEnabled; - // } - - // public override CommandResult Invoke(Guid group, int id, object inputArg, ref object outputArg) { - // _pane.OpenPlot(); - // return CommandResult.Executed; - // } - //} -} diff --git a/src/Package/Impl/Plots/Commands/SavePlotCommand.cs b/src/Package/Impl/Plots/Commands/SavePlotCommand.cs deleted file mode 100644 index a3e68bf9f..000000000 --- a/src/Package/Impl/Plots/Commands/SavePlotCommand.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System; -using Microsoft.Languages.Editor; -using Microsoft.VisualStudio.R.Package.Commands; - -namespace Microsoft.VisualStudio.R.Package.Plots.Commands { - //internal sealed class SavePlotCommand : PlotWindowCommand { - // public SavePlotCommand(PlotWindowPane pane) : - // base(pane, RPackageCommandId.icmdSavePlot) { } - - // public override CommandResult Invoke(Guid group, int id, object inputArg, ref object outputArg) { - // _pane.SavePlot(); - - // return CommandResult.Executed; - // } - //} -} diff --git a/src/Package/Impl/Plots/Commands/ZoomInPlotCommand.cs b/src/Package/Impl/Plots/Commands/ZoomInPlotCommand.cs deleted file mode 100644 index c2b78d6e9..000000000 --- a/src/Package/Impl/Plots/Commands/ZoomInPlotCommand.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System; -using Microsoft.Languages.Editor; -using Microsoft.VisualStudio.R.Package.Commands; - -namespace Microsoft.VisualStudio.R.Package.Plots.Commands { - //internal sealed class ZoomInPlotCommand : PlotWindowCommand { - // public ZoomInPlotCommand(PlotWindowPane pane) : - // base(pane, RPackageCommandId.icmdZoomInPlot) { } - - // public override CommandStatus Status(Guid group, int id) { - // return CommandStatus.Supported; - // } - - // public override CommandResult Invoke(Guid group, int id, object inputArg, ref object outputArg) { - // return CommandResult.Executed; - // } - //} -} diff --git a/src/Package/Impl/Plots/Commands/ZoomOutPlotCommand.cs b/src/Package/Impl/Plots/Commands/ZoomOutPlotCommand.cs deleted file mode 100644 index 5d6f77484..000000000 --- a/src/Package/Impl/Plots/Commands/ZoomOutPlotCommand.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System; -using Microsoft.Languages.Editor; -using Microsoft.VisualStudio.R.Package.Commands; - -namespace Microsoft.VisualStudio.R.Package.Plots.Commands { - //internal sealed class ZoomOutPlotCommand : PlotWindowCommand { - // public ZoomOutPlotCommand(PlotWindowPane pane) : - // base(pane, RPackageCommandId.icmdZoomOutPlot) { } - - // public override CommandStatus Status(Guid group, int id) { - // return CommandStatus.Supported; - // } - - // public override CommandResult Invoke(Guid group, int id, object inputArg, ref object outputArg) { - // return CommandResult.Executed; - // } - //} -} diff --git a/src/Package/Impl/Plots/IPlotContentProvider.cs b/src/Package/Impl/Plots/IPlotContentProvider.cs index 76627a575..7543e7500 100644 --- a/src/Package/Impl/Plots/IPlotContentProvider.cs +++ b/src/Package/Impl/Plots/IPlotContentProvider.cs @@ -19,10 +19,27 @@ internal interface IPlotContentProvider : IDisposable { void LoadFile(string filePath); /// - /// Export plot as an image + /// Export plot as an image. /// - /// the destination filepath - void ExportFile(string fileName); + /// Destination file path. + /// Name of R device to use (png, bmp, tiff, jpeg). + void ExportAsImage(string fileName, string deviceName); + + /// + /// Export plot as a PDF. + /// + /// Destination file path. + void ExportAsPdf(string fileName); + + /// + /// Copy plot to clipboard in bitmap format. + /// + void CopyToClipboardAsBitmap(); + + /// + /// Copy plot to clipboard in enhanced metafile format. + /// + void CopyToClipboardAsMetafile(); /// /// Resize the current plot or set the default size for future plots. diff --git a/src/Package/Impl/Plots/PlotContentProvider.cs b/src/Package/Impl/Plots/PlotContentProvider.cs index e104a3452..4e72a44ff 100644 --- a/src/Package/Impl/Plots/PlotContentProvider.cs +++ b/src/Package/Impl/Plots/PlotContentProvider.cs @@ -109,35 +109,72 @@ public void LoadFile(string fileName) { OnPlotChanged(element); } - public async void ExportFile(string fileName) { + public async void ExportAsImage(string fileName, string deviceName) { if (_rSession == null) { return; } - string device = String.Empty; - switch (Path.GetExtension(fileName).TrimStart('.').ToLowerInvariant()) { - case "png": - device = "png"; - break; - case "bmp": - device = "bmp"; - break; - case "tif": - case "tiff": - device = "tiff"; - break; - case "jpg": - case "jpeg": - device = "jpeg"; - break; - default: - //TODO - Debug.Assert(false, "Unsupported image format."); - return; + using (IRSessionEvaluation eval = await _rSession.BeginEvaluationAsync()) { + await eval.ExportToBitmap(deviceName, fileName, _lastWidth, _lastHeight); + } + } + public async void CopyToClipboardAsBitmap() { + if (_rSession == null) { + return; } + + string fileName = Path.GetTempFileName(); + using (IRSessionEvaluation eval = await _rSession.BeginEvaluationAsync()) { + await eval.ExportToBitmap("bmp", fileName, _lastWidth, _lastHeight); + try { + var image = new BitmapImage(new Uri(fileName)); + Clipboard.SetImage(image); + } catch (IOException) { + MessageBox.Show(Resources.PlotCopyToClipboardError); + } + } + + SafeFileDelete(fileName); + } + + public async void CopyToClipboardAsMetafile() { + if (_rSession == null) { + return; + } + + string fileName = Path.GetTempFileName(); + using (IRSessionEvaluation eval = await _rSession.BeginEvaluationAsync()) { + await eval.ExportToMetafile(fileName, PixelsToInches(_lastWidth), PixelsToInches(_lastHeight)); + try { + var mf = new System.Drawing.Imaging.Metafile(fileName); + Clipboard.SetData(DataFormats.EnhancedMetafile, mf); + } catch (IOException) { + MessageBox.Show(Resources.PlotCopyToClipboardError); + } + } + + SafeFileDelete(fileName); + } + + private static double PixelsToInches(int pixels) { + return pixels / 96.0; + } + + private static void SafeFileDelete(string fileName) { + try { + File.Delete(fileName); + } catch (IOException) { + } + } + + public async void ExportAsPdf(string fileName) { + if (_rSession == null) { + return; + } + using (IRSessionEvaluation eval = await _rSession.BeginEvaluationAsync()) { - await eval.CopyToDevice(device, fileName); + await eval.ExportToPdf(fileName, PixelsToInches(_lastWidth), PixelsToInches(_lastHeight), "special"); } } diff --git a/src/Package/Impl/Plots/PlotWindowPane.cs b/src/Package/Impl/Plots/PlotWindowPane.cs index 1dffab443..941909d65 100644 --- a/src/Package/Impl/Plots/PlotWindowPane.cs +++ b/src/Package/Impl/Plots/PlotWindowPane.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.ComponentModel.Design; +using System.IO; using System.Runtime.InteropServices; using Microsoft.Common.Core; using Microsoft.Languages.Editor.Controller; @@ -22,7 +23,7 @@ internal class PlotWindowPane : ToolWindowPane, IVsWindowFrameNotify3 { private const int MinWidth = 150; private const int MinHeight = 150; - private ExportPlotCommand _exportPlotCommand; + private PlotWindowCommand[] _copyAndExportCommands; private HistoryNextPlotCommand _historyNextPlotCommand; private HistoryPreviousPlotCommand _historyPreviousPlotCommand; @@ -79,20 +80,19 @@ public override void OnToolWindowCreated() { private IEnumerable GetCommands() { List commands = new List(); - _exportPlotCommand = new ExportPlotCommand(this); + _copyAndExportCommands = new PlotWindowCommand[] { + new ExportPlotAsImageCommand(this), + new ExportPlotAsPdfCommand(this), + new CopyPlotAsBitmapCommand(this), + new CopyPlotAsMetafileCommand(this), + }; _historyNextPlotCommand = new HistoryNextPlotCommand(this); _historyPreviousPlotCommand = new HistoryPreviousPlotCommand(this); - commands.Add(_exportPlotCommand); + commands.AddRange(_copyAndExportCommands); commands.Add(_historyNextPlotCommand); commands.Add(_historyPreviousPlotCommand); - //commands.Add(new FixPlotCommand(this)); - //commands.Add(new CopyPlotCommand(this)); - //commands.Add(new PrintPlotCommand(this)); - //commands.Add(new ZoomInPlotCommand(this)); - //commands.Add(new ZoomOutPlotCommand(this)); - return commands; } @@ -117,9 +117,17 @@ private void SetHistoryInfo(int activeIndex, int plotCount) { } else { _historyPreviousPlotCommand.Disable(); } + + foreach (var cmd in _copyAndExportCommands) { + cmd.Enable(); + } } else { _historyNextPlotCommand.Disable(); _historyPreviousPlotCommand.Disable(); + + foreach (var cmd in _copyAndExportCommands) { + cmd.Disable(); + } } IVsUIShell shell = VsAppShell.Current.GetGlobalService(typeof(SVsUIShell)); @@ -134,10 +142,39 @@ private void ContentProvider_PlotChanged(object sender, PlotChangedEventArgs e) } } - internal void ExportPlot() { - string destinationFilePath = GetExportFilePath(); + internal void ExportPlotAsImage() { + string destinationFilePath = VsAppShell.Current.BrowseForFileSave(IntPtr.Zero, Resources.PlotExportAsImageFilter, null, Resources.ExportPlotAsImageDialogTitle); if (!string.IsNullOrEmpty(destinationFilePath)) { - PlotContentProvider.ExportFile(destinationFilePath); + string device = String.Empty; + string extension = Path.GetExtension(destinationFilePath).TrimStart('.').ToLowerInvariant(); + switch (extension) { + case "png": + device = "png"; + break; + case "bmp": + device = "bmp"; + break; + case "tif": + case "tiff": + device = "tiff"; + break; + case "jpg": + case "jpeg": + device = "jpeg"; + break; + default: + VsAppShell.Current.ShowErrorMessage(string.Format(Resources.PlotExportUnsupportedImageFormat, extension)); + return; + } + + PlotContentProvider.ExportAsImage(destinationFilePath, device); + } + } + + internal void ExportPlotAsPdf() { + string destinationFilePath = VsAppShell.Current.BrowseForFileSave(IntPtr.Zero, Resources.PlotExportAsPdfFilter, null, Resources.ExportPlotAsPdfDialogTitle); + if (!string.IsNullOrEmpty(destinationFilePath)) { + PlotContentProvider.ExportAsPdf(destinationFilePath); } } @@ -149,18 +186,6 @@ internal void PreviousPlot() { DoNotWait(PlotContentProvider.PreviousPlotAsync()); } - private string GetLoadFilePath() { - return VsAppShell.Current.BrowseForFileOpen(IntPtr.Zero, - Resources.PlotFileFilter, - // TODO: open in current project folder if one is active - Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\", - Resources.OpenPlotDialogTitle); - } - - private string GetExportFilePath() { - return VsAppShell.Current.BrowseForFileSave(IntPtr.Zero, Resources.PlotExportFilter, null, Resources.ExportPlotDialogTitle); - } - protected override void Dispose(bool disposing) { if (PlotContentProvider != null) { PlotContentProvider.PlotChanged -= ContentProvider_PlotChanged; diff --git a/src/Package/Impl/Resources.Designer.cs b/src/Package/Impl/Resources.Designer.cs index 3817e6723..245bc4a40 100644 --- a/src/Package/Impl/Resources.Designer.cs +++ b/src/Package/Impl/Resources.Designer.cs @@ -105,15 +105,6 @@ public static string AttachmentTooLarge3 { } } - /// - /// Looks up a localized string similar to Unable to open plot file. Exception: {0}. - /// - public static string CannotOpenPlotFile { - get { - return ResourceManager.GetString("CannotOpenPlotFile", resourceCulture); - } - } - /// /// Looks up a localized string similar to Choose Directory. /// @@ -343,9 +334,18 @@ public static string Error_UnsupportedRVersion { /// /// Looks up a localized string similar to Export Plot As Image. /// - public static string ExportPlotDialogTitle { + public static string ExportPlotAsImageDialogTitle { get { - return ResourceManager.GetString("ExportPlotDialogTitle", resourceCulture); + return ResourceManager.GetString("ExportPlotAsImageDialogTitle", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Export Plot As PDF. + /// + public static string ExportPlotAsPdfDialogTitle { + get { + return ResourceManager.GetString("ExportPlotAsPdfDialogTitle", resourceCulture); } } @@ -512,15 +512,6 @@ public static string OpenFunctionHelp { } } - /// - /// Looks up a localized string similar to Open R Plot File. - /// - public static string OpenPlotDialogTitle { - get { - return ResourceManager.GetString("OpenPlotDialogTitle", resourceCulture); - } - } - /// /// Looks up a localized string similar to R Packages. /// @@ -539,21 +530,41 @@ public static string OutputWindowName_Publish { } } + /// + /// Looks up a localized string similar to Error copying plot to the clipboard.. + /// + public static string PlotCopyToClipboardError { + get { + return ResourceManager.GetString("PlotCopyToClipboardError", resourceCulture); + } + } + /// /// Looks up a localized string similar to PNG (*.png)|*.png|JPEG (*.jpg;*.jpeg)|*.jpg;*.jpeg|BMP (*.bmp)|*.bmp|TIFF (*.tif;*.tiff)|*.tif;*.tiff|All Files (*.*)|*.*. /// - public static string PlotExportFilter { + public static string PlotExportAsImageFilter { + get { + return ResourceManager.GetString("PlotExportAsImageFilter", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to PDF (*.pdf)|*.pdf|All Files (*.*)|*.*. + /// + public static string PlotExportAsPdfFilter { get { - return ResourceManager.GetString("PlotExportFilter", resourceCulture); + return ResourceManager.GetString("PlotExportAsPdfFilter", resourceCulture); } } /// - /// Looks up a localized string similar to R Plot Files (*.vsplot)|*.vsplot|All Files (*.*)|*.*. + /// Looks up a localized string similar to File extension '{0}' is not supported. + /// + ///Supported formats are: jpg/jpeg, png, tif/tiff, bmp.. /// - public static string PlotFileFilter { + public static string PlotExportUnsupportedImageFormat { get { - return ResourceManager.GetString("PlotFileFilter", resourceCulture); + return ResourceManager.GetString("PlotExportUnsupportedImageFormat", resourceCulture); } } diff --git a/src/Package/Impl/Resources.resx b/src/Package/Impl/Resources.resx index 251c9c62c..bfe9a9682 100644 --- a/src/Package/Impl/Resources.resx +++ b/src/Package/Impl/Resources.resx @@ -264,17 +264,14 @@ Run plotting command in R Interactive Window - - Open R Plot File + + Error copying plot to the clipboard. - - R Plot Files (*.vsplot)|*.vsplot|All Files (*.*)|*.* - - + PNG (*.png)|*.png|JPEG (*.jpg;*.jpeg)|*.jpg;*.jpeg|BMP (*.bmp)|*.bmp|TIFF (*.tif;*.tiff)|*.tif;*.tiff|All Files (*.*)|*.* - - Unable to open plot file. Exception: {0} + + PDF (*.pdf)|*.pdf|All Files (*.*)|*.* Starting R Session... @@ -282,9 +279,17 @@ Save R Plot File - + Export Plot As Image + + Export Plot As PDF + + + File extension '{0}' is not supported. + +Supported formats are: jpg/jpeg, png, tif/tiff, bmp. + Do you want to load the R data file {0} into the global environment? diff --git a/src/Package/Impl/Shell/VsAppShell.cs b/src/Package/Impl/Shell/VsAppShell.cs index d89c1ea3b..0dd77af12 100644 --- a/src/Package/Impl/Shell/VsAppShell.cs +++ b/src/Package/Impl/Shell/VsAppShell.cs @@ -308,6 +308,7 @@ public string BrowseForFileSave(IntPtr owner, string filter, string initialPath VSSAVEFILENAMEW[] saveInfo = new VSSAVEFILENAMEW[1]; saveInfo[0].lStructSize = (uint)Marshal.SizeOf(typeof(VSSAVEFILENAMEW)); + saveInfo[0].dwFlags = 0x00000002; // OFN_OVERWRITEPROMPT saveInfo[0].pwzFilter = filter.Replace('|', '\0') + "\0"; saveInfo[0].hwndOwner = owner; saveInfo[0].pwzDlgTitle = title; From dcca025f8c0ebd48cedea0b0b191e03fc790c80a Mon Sep 17 00:00:00 2001 From: huguesv Date: Thu, 14 Jan 2016 17:27:53 -0800 Subject: [PATCH 002/289] Update r-host commit. --- src/Host/Process | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Host/Process b/src/Host/Process index ac9674ba1..167e8e0bb 160000 --- a/src/Host/Process +++ b/src/Host/Process @@ -1 +1 @@ -Subproject commit ac9674ba1d82d7eafceb55b3efea4adb026f4580 +Subproject commit 167e8e0bbd2bd1f3810804c55c852df1a71e2cc7 From 6c83cefbbcba3bff3121a7e0880ddb6e18a106be Mon Sep 17 00:00:00 2001 From: Mikhail Arkhipov Date: Sat, 16 Jan 2016 17:03:28 -0800 Subject: [PATCH 003/289] Refactor to visual component Help window test --- .../Core/Test/Controls/ControlWindow.cs | 18 +- .../Client/Test/Script/RHostClientTestApp.cs | 12 +- src/Host/Client/Test/Script/RHostScript.cs | 5 +- .../Impl/Definitions/IVisualComponent.cs | 20 +++ .../Definitions/IVisualComponentContainer.cs | 13 ++ src/Package/Impl/Help/HelpHomeCommand.cs | 2 +- src/Package/Impl/Help/HelpNextCommand.cs | 10 +- src/Package/Impl/Help/HelpPreviousCommand.cs | 10 +- src/Package/Impl/Help/HelpRefreshCommand.cs | 10 +- src/Package/Impl/Help/HelpWindowPane.cs | 155 ++-------------- .../Impl/Help/HelpWindowVisualComponent.cs | 166 ++++++++++++++++++ .../Impl/Help/IHelpWindowVisualComponent.cs | 13 ++ .../Microsoft.VisualStudio.R.Package.csproj | 4 + src/Package/Impl/Properties/AssemblyInfo.cs | 2 + src/Package/Impl/Repl/RHostClientApp.cs | 6 +- src/Package/Test/Utility/VsRHostScript.cs | 4 +- .../TestApp/Data/VariableExplorerTest.cs | 15 +- src/Package/TestApp/Help/HelpWindowTest.cs | 101 +++++++++++ src/Package/TestApp/InteractiveTest.cs | 18 ++ ...oft.VisualStudio.R.Interactive.Test.csproj | 2 + 20 files changed, 398 insertions(+), 188 deletions(-) create mode 100644 src/Package/Impl/Definitions/IVisualComponent.cs create mode 100644 src/Package/Impl/Definitions/IVisualComponentContainer.cs create mode 100644 src/Package/Impl/Help/HelpWindowVisualComponent.cs create mode 100644 src/Package/Impl/Help/IHelpWindowVisualComponent.cs create mode 100644 src/Package/TestApp/Help/HelpWindowTest.cs create mode 100644 src/Package/TestApp/InteractiveTest.cs diff --git a/src/Common/Core/Test/Controls/ControlWindow.cs b/src/Common/Core/Test/Controls/ControlWindow.cs index 50feda0a6..33e26a870 100644 --- a/src/Common/Core/Test/Controls/ControlWindow.cs +++ b/src/Common/Core/Test/Controls/ControlWindow.cs @@ -13,7 +13,7 @@ namespace Microsoft.Common.Core.Test.Controls { /// Control window /// [ExcludeFromCodeCoverage] - internal static class ControlWindow { + public static class ControlWindow { [ExcludeFromCodeCoverage] class ControlTestRequest { public Type ControlType { get; } @@ -23,10 +23,17 @@ public ControlTestRequest(Type controlType) { } } + /// + /// Component that is being tested. May be same as + /// or may be different if component is + /// + public static object Component { get; private set; } + /// /// Control that is being tested /// public static Control Control { get; private set; } + /// /// WPF window that contains the control /// @@ -59,7 +66,14 @@ private static void CreateWindowInstance(ControlTestRequest request, ManualReset Window.Width = 800; Window.Height = 600; - Control = Activator.CreateInstance(request.ControlType) as Control; + Component = Activator.CreateInstance(request.ControlType); + if(Component is Control) { + Control = Component as Control; + } + else { + Control = Component.GetType().GetProperty("Control").GetValue(Component) as Control; + } + Window.Title = "Control - " + request.ControlType.ToString(); Window.Content = Control; diff --git a/src/Host/Client/Test/Script/RHostClientTestApp.cs b/src/Host/Client/Test/Script/RHostClientTestApp.cs index d88c70f1f..525780679 100644 --- a/src/Host/Client/Test/Script/RHostClientTestApp.cs +++ b/src/Host/Client/Test/Script/RHostClientTestApp.cs @@ -4,24 +4,24 @@ using Microsoft.Common.Core.Shell; namespace Microsoft.R.Host.Client.Test.Script { - public sealed class RHostClientTestApp : IRHostClientApp { - public string CranUrlFromName(string name) { + public class RHostClientTestApp : IRHostClientApp { + public virtual string CranUrlFromName(string name) { return "https://cran.rstudio.com"; } - public Task Plot(string filePath, CancellationToken ct) { + public virtual Task Plot(string filePath, CancellationToken ct) { throw new NotImplementedException(); } - public Task ShowErrorMessage(string message) { + public virtual Task ShowErrorMessage(string message) { return Task.CompletedTask; } - public Task ShowHelp(string url) { + public virtual Task ShowHelp(string url) { return Task.CompletedTask; } - public Task ShowMessage(string message, MessageButtons buttons) { + public virtual Task ShowMessage(string message, MessageButtons buttons) { return Task.FromResult(MessageButtons.OK); } } diff --git a/src/Host/Client/Test/Script/RHostScript.cs b/src/Host/Client/Test/Script/RHostScript.cs index 03090080b..5760a29b1 100644 --- a/src/Host/Client/Test/Script/RHostScript.cs +++ b/src/Host/Client/Test/Script/RHostScript.cs @@ -1,6 +1,7 @@ using System; using System.Diagnostics.CodeAnalysis; using Microsoft.R.Support.Settings; +using Microsoft.UnitTests.Core.Threading; namespace Microsoft.R.Host.Client.Test.Script { [ExcludeFromCodeCoverage] @@ -10,9 +11,9 @@ public class RHostScript : IDisposable { public IRSessionProvider SessionProvider { get; private set; } public IRSession Session { get; private set; } - public RHostScript(IRSessionProvider sessionProvider) { + public RHostScript(IRSessionProvider sessionProvider, IRHostClientApp clientApp = null) { SessionProvider = sessionProvider; - Session = SessionProvider.GetOrCreate(GuidList.InteractiveWindowRSessionGuid, new RHostClientTestApp()); + Session = SessionProvider.GetOrCreate(GuidList.InteractiveWindowRSessionGuid, clientApp ?? new RHostClientTestApp()); Session.StartHostAsync(new RHostStartupInfo { Name = "RHostScript", RBasePath = RToolsSettings.Current.RBasePath, diff --git a/src/Package/Impl/Definitions/IVisualComponent.cs b/src/Package/Impl/Definitions/IVisualComponent.cs new file mode 100644 index 000000000..aa959bac5 --- /dev/null +++ b/src/Package/Impl/Definitions/IVisualComponent.cs @@ -0,0 +1,20 @@ +using System; +using System.Windows.Controls; +using Microsoft.Languages.Editor.Controller; + +namespace Microsoft.VisualStudio.R.Package.Definitions { + /// + /// Represents visual component such a control inside a tool window + /// + internal interface IVisualComponent: IDisposable { + /// + /// Controller to send commands to + /// + ICommandTarget Controller { get; } + + /// + /// WPF control to embed in the tool window + /// + Control Control { get; } + } +} diff --git a/src/Package/Impl/Definitions/IVisualComponentContainer.cs b/src/Package/Impl/Definitions/IVisualComponentContainer.cs new file mode 100644 index 000000000..56fb99c4a --- /dev/null +++ b/src/Package/Impl/Definitions/IVisualComponentContainer.cs @@ -0,0 +1,13 @@ +using System; +using System.Windows.Controls; +using Microsoft.Languages.Editor.Controller; + +namespace Microsoft.VisualStudio.R.Package.Definitions { + /// + /// Represents UI element that holds visual component + /// (typically a tool window) + /// + internal interface IVisualComponentContainer where T : IVisualComponent { + T Component { get; } + } +} diff --git a/src/Package/Impl/Help/HelpHomeCommand.cs b/src/Package/Impl/Help/HelpHomeCommand.cs index 01b07104d..e9d0c303e 100644 --- a/src/Package/Impl/Help/HelpHomeCommand.cs +++ b/src/Package/Impl/Help/HelpHomeCommand.cs @@ -11,7 +11,7 @@ namespace Microsoft.VisualStudio.R.Package.Help { internal sealed class HelpHomeCommand : Command { - public HelpHomeCommand(HelpWindowPane pane) : + public HelpHomeCommand(IHelpWindowVisualComponent component) : base(new CommandId(RGuidList.RCmdSetGuid, RPackageCommandId.icmdHelpHome)) { } diff --git a/src/Package/Impl/Help/HelpNextCommand.cs b/src/Package/Impl/Help/HelpNextCommand.cs index 952f9d351..5253b70c3 100644 --- a/src/Package/Impl/Help/HelpNextCommand.cs +++ b/src/Package/Impl/Help/HelpNextCommand.cs @@ -6,22 +6,22 @@ namespace Microsoft.VisualStudio.R.Package.Help { internal sealed class HelpNextCommand : Command { - private HelpWindowPane _pane; + private IHelpWindowVisualComponent _component; - public HelpNextCommand(HelpWindowPane pane) : + public HelpNextCommand(IHelpWindowVisualComponent component) : base(new CommandId(RGuidList.RCmdSetGuid, RPackageCommandId.icmdHelpNext)) { - _pane = pane; + _component = component; } public override CommandStatus Status(Guid group, int id) { - if (_pane.Browser != null && _pane.Browser.CanGoForward) { + if (_component.Browser != null && _component.Browser.CanGoForward) { return CommandStatus.SupportedAndEnabled; } return CommandStatus.Supported; } public override CommandResult Invoke(Guid group, int id, object inputArg, ref object outputArg) { - _pane.Browser.GoForward(); + _component.Browser.GoForward(); return CommandResult.Executed; } } diff --git a/src/Package/Impl/Help/HelpPreviousCommand.cs b/src/Package/Impl/Help/HelpPreviousCommand.cs index bf3e9c874..e79254f59 100644 --- a/src/Package/Impl/Help/HelpPreviousCommand.cs +++ b/src/Package/Impl/Help/HelpPreviousCommand.cs @@ -6,22 +6,22 @@ namespace Microsoft.VisualStudio.R.Package.Help { internal sealed class HelpPreviousCommand : Command { - private HelpWindowPane _pane; + private IHelpWindowVisualComponent _component; - public HelpPreviousCommand(HelpWindowPane pane) : + public HelpPreviousCommand(IHelpWindowVisualComponent component) : base(new CommandId(RGuidList.RCmdSetGuid, RPackageCommandId.icmdHelpPrevious)) { - _pane = pane; + _component = component; } public override CommandStatus Status(Guid group, int id) { - if (_pane.Browser != null && _pane.Browser.CanGoBack) { + if (_component.Browser != null && _component.Browser.CanGoBack) { return CommandStatus.SupportedAndEnabled; } return CommandStatus.Supported; } public override CommandResult Invoke(Guid group, int id, object inputArg, ref object outputArg) { - _pane.Browser.GoBack(); + _component.Browser.GoBack(); return CommandResult.Executed; } } diff --git a/src/Package/Impl/Help/HelpRefreshCommand.cs b/src/Package/Impl/Help/HelpRefreshCommand.cs index 92bad1f9a..04b037f46 100644 --- a/src/Package/Impl/Help/HelpRefreshCommand.cs +++ b/src/Package/Impl/Help/HelpRefreshCommand.cs @@ -6,22 +6,22 @@ namespace Microsoft.VisualStudio.R.Package.Help { internal sealed class HelpRefreshCommand : Command { - private HelpWindowPane _pane; + private IHelpWindowVisualComponent _component; - public HelpRefreshCommand(HelpWindowPane pane) : + public HelpRefreshCommand(IHelpWindowVisualComponent component) : base(new CommandId(RGuidList.RCmdSetGuid, RPackageCommandId.icmdHelpRefresh)) { - _pane = pane; + _component = component; } public override CommandStatus Status(Guid group, int id) { - if (_pane.Browser != null && _pane.Browser.Source != null) { + if (_component.Browser != null && _component.Browser.Source != null) { return CommandStatus.SupportedAndEnabled; } return CommandStatus.Supported; } public override CommandResult Invoke(Guid group, int id, object inputArg, ref object outputArg) { - _pane.Browser.Refresh(); + _component.Browser.Refresh(); return CommandResult.Executed; } } diff --git a/src/Package/Impl/Help/HelpWindowPane.cs b/src/Package/Impl/Help/HelpWindowPane.cs index 73b6bde5d..068652af1 100644 --- a/src/Package/Impl/Help/HelpWindowPane.cs +++ b/src/Package/Impl/Help/HelpWindowPane.cs @@ -1,174 +1,39 @@ using System; -using System.Collections.Generic; using System.ComponentModel.Design; -using System.Diagnostics; using System.Runtime.InteropServices; -using System.Windows.Controls; -using System.Windows.Navigation; -using Microsoft.Languages.Editor.Controller; -using Microsoft.R.Host.Client; -using Microsoft.R.Support.Settings; -using Microsoft.R.Support.Settings.Definitions; using Microsoft.VisualStudio.Imaging; using Microsoft.VisualStudio.R.Package.Commands; +using Microsoft.VisualStudio.R.Package.Definitions; using Microsoft.VisualStudio.R.Package.Interop; -using Microsoft.VisualStudio.R.Package.Repl; -using Microsoft.VisualStudio.R.Package.Shell; -using Microsoft.VisualStudio.R.Package.Utilities; using Microsoft.VisualStudio.R.Packages.R; using Microsoft.VisualStudio.Shell; -using Microsoft.VisualStudio.Shell.Interop; namespace Microsoft.VisualStudio.R.Package.Help { [Guid(WindowGuid)] - internal class HelpWindowPane : ToolWindowPane { + internal class HelpWindowPane : ToolWindowPane, IVisualComponentContainer { internal const string WindowGuid = "9E909526-A616-43B2-A82B-FD639DCD40CB"; - private static bool _showDefaultPage; - - /// - /// Holds browser control. When R session is restarted - /// it is necessary to re-create the browser control since - /// help server changes port and current links stop working. - /// However, VS tool window doesn't like its child root - /// control changing so instead we keed content control - /// unchanged and only replace browser that is inside it. - /// - private ContentControl _windowContentControl; - - /// - /// Browser that displays help content - /// - public WebBrowser Browser { get; private set; } - private IRSession _session; + private IHelpWindowVisualComponent _component; public HelpWindowPane() { - _session = VsAppShell.Current.ExportProvider.GetExportedValue().GetInteractiveWindowRSession(); - _session.Disconnected += OnRSessionDisconnected; - _session.Connected += OnRSessionConnected; Caption = Resources.HelpWindowCaption; BitmapImageMoniker = KnownMonikers.StatusHelp; - _windowContentControl = new ContentControl(); - Content = _windowContentControl; - - CreateBrowser(_showDefaultPage); + _component = new HelpWindowVisualComponent(); + Content = _component.Control; this.ToolBar = new CommandID(RGuidList.RCmdSetGuid, RPackageCommandId.helpWindowToolBarId); - Controller c = new Controller(); - c.AddCommandSet(GetCommands()); - this.ToolBarCommandTarget = new CommandTargetToOleShim(null, c); - } - - private void OnRSessionConnected(object sender, EventArgs e) { - // Event fires on a background thread - VsAppShell.Current.DispatchOnUIThread(() => { - CreateBrowser(showDefaultPage: false); - }); - } - - private void OnRSessionDisconnected(object sender, EventArgs e) { - // Event fires on a background thread - VsAppShell.Current.DispatchOnUIThread(() => { - CloseBrowser(); - }); - } - - private void CreateBrowser(bool showDefaultPage = false) { - if (Browser == null) { - Browser = new WebBrowser(); - Browser.Navigating += OnNavigating; - Browser.Navigated += OnNavigated; - - _windowContentControl.Content = Browser; - if (showDefaultPage) { - HelpHomeCommand.ShowDefaultHelpPage(); - } - } - } - - private void OnNavigating(object sender, NavigatingCancelEventArgs e) { - string url = e.Uri.ToString(); - if (!IsHelpUrl(url)) { - e.Cancel = true; - Process.Start(url); - } - } - - private void OnNavigated(object sender, NavigationEventArgs e) { - // Upon vavigation we need to ask VS to update UI so - // Back /Forward buttons become properly enabled or disabled. - IVsUIShell shell = VsAppShell.Current.GetGlobalService(typeof(SVsUIShell)); - shell.UpdateCommandUI(1); - } - - private void NavigateTo(string url) { - if (Browser != null) { - Browser.Navigate(url); - } - } - - public static void Navigate(string url) { - // Filter out localhost help URL from absolute URLs - // except when the URL is the main landing page. - if (RToolsSettings.Current.HelpBrowser == HelpBrowserType.Automatic && IsHelpUrl(url)) { - // When control is just being created don't navigate - // to the default page since it will be replaced by - // the specific help page right away. - _showDefaultPage = false; - HelpWindowPane pane = ToolWindowUtilities.ShowWindowPane(0, focus: false); - if (pane != null) { - pane.NavigateTo(url); - return; - } - } - Process.Start(url); - } - - private static bool IsHelpUrl(string url) { - Uri uri = new Uri(url); - // dynamicHelp.R (startDynamicHelp function): - // # Choose 10 random port numbers between 10000 and 32000 - // ports <- 10000 + 22000*((stats::runif(10) + unclass(Sys.time())/300) %% 1) - return uri.IsLoopback && uri.Port >= 10000 && uri.Port <= 32000 && !string.IsNullOrEmpty(uri.PathAndQuery); + this.ToolBarCommandTarget = new CommandTargetToOleShim(null, _component.Controller); } - private IEnumerable GetCommands() { - List commands = new List() { - new HelpPreviousCommand(this), - new HelpNextCommand(this), - new HelpHomeCommand(this), - new HelpRefreshCommand(this) - }; - return commands; - } + public IHelpWindowVisualComponent Component => _component; protected override void Dispose(bool disposing) { - if (disposing) { - DisconnectFromSessionEvents(); - CloseBrowser(); + if (disposing && _component != null) { + _component.Dispose(); + _component = null; } base.Dispose(disposing); } - - - private void DisconnectFromSessionEvents() { - if (_session != null) { - _session.Disconnected -= OnRSessionDisconnected; - _session.Connected -= OnRSessionConnected; - _session = null; - } - } - - private void CloseBrowser() { - _windowContentControl.Content = null; - - if (Browser != null) { - Browser.Navigating -= OnNavigating; - Browser.Navigated -= OnNavigated; - Browser.Dispose(); - Browser = null; - } - } } } diff --git a/src/Package/Impl/Help/HelpWindowVisualComponent.cs b/src/Package/Impl/Help/HelpWindowVisualComponent.cs new file mode 100644 index 000000000..9880e849f --- /dev/null +++ b/src/Package/Impl/Help/HelpWindowVisualComponent.cs @@ -0,0 +1,166 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Threading; +using System.Windows.Controls; +using System.Windows.Navigation; +using System.Windows.Threading; +using Microsoft.Languages.Editor.Controller; +using Microsoft.R.Host.Client; +using Microsoft.R.Support.Settings; +using Microsoft.R.Support.Settings.Definitions; +using Microsoft.VisualStudio.R.Package.Repl; +using Microsoft.VisualStudio.R.Package.Shell; +using Microsoft.VisualStudio.Shell.Interop; + +namespace Microsoft.VisualStudio.R.Package.Help { + internal sealed class HelpWindowVisualComponent : IHelpWindowVisualComponent { + private static bool _showDefaultPage; + + /// + /// Holds browser control. When R session is restarted + /// it is necessary to re-create the browser control since + /// help server changes port and current links stop working. + /// However, VS tool window doesn't like its child root + /// control changing so instead we keed content control + /// unchanged and only replace browser that is inside it. + /// + private ContentControl _windowContentControl; + private IRSession _session; + Thread _creatorThread; + + public HelpWindowVisualComponent() { + _session = VsAppShell.Current.ExportProvider.GetExportedValue().GetInteractiveWindowRSession(); + _session.Disconnected += OnRSessionDisconnected; + _session.Connected += OnRSessionConnected; + + _windowContentControl = new ContentControl(); + this.Control = _windowContentControl; + _creatorThread = Thread.CurrentThread; + + CreateBrowser(_showDefaultPage); + + var c = new Controller(); + c.AddCommandSet(GetCommands()); + this.Controller = c; + } + + private void OnRSessionConnected(object sender, EventArgs e) { + // Event fires on a background thread + Dispatcher.FromThread(_creatorThread).InvokeAsync(() => { + CreateBrowser(showDefaultPage: false); + }); + } + + #region IVisualComponent + public ICommandTarget Controller { get; } + + public Control Control { get; } + #endregion + + #region IHelpWindowVisualComponent + /// + /// Browser that displays help content + /// + public WebBrowser Browser { get; private set; } + + public void Navigate(string url) { + // Filter out localhost help URL from absolute URLs + // except when the URL is the main landing page. + if (RToolsSettings.Current.HelpBrowser == HelpBrowserType.Automatic && IsHelpUrl(url)) { + // When control is just being created don't navigate + // to the default page since it will be replaced by + // the specific help page right away. + _showDefaultPage = false; + NavigateTo(url); + } else { + Process.Start(url); + } + } + #endregion + + private void OnRSessionDisconnected(object sender, EventArgs e) { + // Event fires on a background thread + Dispatcher.FromThread(_creatorThread).InvokeAsync(() => { + CloseBrowser(); + }); + } + + private void CreateBrowser(bool showDefaultPage = false) { + if (Browser == null) { + Browser = new WebBrowser(); + Browser.Navigating += OnNavigating; + Browser.Navigated += OnNavigated; + + _windowContentControl.Content = Browser; + if (showDefaultPage) { + HelpHomeCommand.ShowDefaultHelpPage(); + } + } + } + + private void OnNavigating(object sender, NavigatingCancelEventArgs e) { + string url = e.Uri.ToString(); + if (!IsHelpUrl(url)) { + e.Cancel = true; + Process.Start(url); + } + } + + private void OnNavigated(object sender, NavigationEventArgs e) { + // Upon vavigation we need to ask VS to update UI so + // Back /Forward buttons become properly enabled or disabled. + IVsUIShell shell = VsAppShell.Current.GetGlobalService(typeof(SVsUIShell)); + shell.UpdateCommandUI(1); + } + + private void NavigateTo(string url) { + if (Browser != null) { + Browser.Navigate(url); + } + } + + private static bool IsHelpUrl(string url) { + Uri uri = new Uri(url); + // dynamicHelp.R (startDynamicHelp function): + // # Choose 10 random port numbers between 10000 and 32000 + // ports <- 10000 + 22000*((stats::runif(10) + unclass(Sys.time())/300) %% 1) + return uri.IsLoopback && uri.Port >= 10000 && uri.Port <= 32000 && !string.IsNullOrEmpty(uri.PathAndQuery); + } + + private IEnumerable GetCommands() { + List commands = new List() { + new HelpPreviousCommand(this), + new HelpNextCommand(this), + new HelpHomeCommand(this), + new HelpRefreshCommand(this) + }; + return commands; + } + + public void Dispose() { + DisconnectFromSessionEvents(); + CloseBrowser(); + } + + + private void DisconnectFromSessionEvents() { + if (_session != null) { + _session.Disconnected -= OnRSessionDisconnected; + _session.Connected -= OnRSessionConnected; + _session = null; + } + } + + private void CloseBrowser() { + _windowContentControl.Content = null; + + if (Browser != null) { + Browser.Navigating -= OnNavigating; + Browser.Navigated -= OnNavigated; + Browser.Dispose(); + Browser = null; + } + } + } +} diff --git a/src/Package/Impl/Help/IHelpWindowVisualComponent.cs b/src/Package/Impl/Help/IHelpWindowVisualComponent.cs new file mode 100644 index 000000000..bb8845081 --- /dev/null +++ b/src/Package/Impl/Help/IHelpWindowVisualComponent.cs @@ -0,0 +1,13 @@ +using System.Windows.Controls; +using Microsoft.VisualStudio.R.Package.Definitions; + +namespace Microsoft.VisualStudio.R.Package.Help { + internal interface IHelpWindowVisualComponent : IVisualComponent { + /// + /// Browser that displays help content + /// + WebBrowser Browser { get; } + + void Navigate(string url); + } +} diff --git a/src/Package/Impl/Microsoft.VisualStudio.R.Package.csproj b/src/Package/Impl/Microsoft.VisualStudio.R.Package.csproj index 64c4ecc7c..270e56961 100644 --- a/src/Package/Impl/Microsoft.VisualStudio.R.Package.csproj +++ b/src/Package/Impl/Microsoft.VisualStudio.R.Package.csproj @@ -92,6 +92,10 @@ + + + + diff --git a/src/Package/Impl/Properties/AssemblyInfo.cs b/src/Package/Impl/Properties/AssemblyInfo.cs index 663ed5629..20bae862d 100644 --- a/src/Package/Impl/Properties/AssemblyInfo.cs +++ b/src/Package/Impl/Properties/AssemblyInfo.cs @@ -2,6 +2,8 @@ #if SIGN [assembly: InternalsVisibleTo("Microsoft.VisualStudio.R.Package.Test, PublicKey=002400000480000094000000060200000024000052534131000400000100010007D1FA57C4AED9F0A32E84AA0FAEFD0DE9E8FD6AEC8F87FB03766C834C99921EB23BE79AD9D5DCC1DD9AD236132102900B723CF980957FC4E177108FC607774F29E8320E92EA05ECE4E821C0A5EFE8F1645C4C0C93C1AB99285D622CAA652C1DFAD63D745D6F2DE5F17E5EAF0FC4963D261C8A12436518206DC093344D5AD293")] +[assembly: InternalsVisibleTo("Microsoft.VisualStudio.R.Interactive.Test, PublicKey=002400000480000094000000060200000024000052534131000400000100010007D1FA57C4AED9F0A32E84AA0FAEFD0DE9E8FD6AEC8F87FB03766C834C99921EB23BE79AD9D5DCC1DD9AD236132102900B723CF980957FC4E177108FC607774F29E8320E92EA05ECE4E821C0A5EFE8F1645C4C0C93C1AB99285D622CAA652C1DFAD63D745D6F2DE5F17E5EAF0FC4963D261C8A12436518206DC093344D5AD293")] #else [assembly: InternalsVisibleTo("Microsoft.VisualStudio.R.Package.Test")] +[assembly: InternalsVisibleTo("Microsoft.VisualStudio.R.Interactive.Test")] #endif \ No newline at end of file diff --git a/src/Package/Impl/Repl/RHostClientApp.cs b/src/Package/Impl/Repl/RHostClientApp.cs index d597c12c7..9b94e8e9e 100644 --- a/src/Package/Impl/Repl/RHostClientApp.cs +++ b/src/Package/Impl/Repl/RHostClientApp.cs @@ -2,10 +2,12 @@ using System.Threading; using Microsoft.Common.Core.Shell; using Microsoft.R.Host.Client; +using Microsoft.VisualStudio.R.Package.Definitions; using Microsoft.VisualStudio.R.Package.Help; using Microsoft.VisualStudio.R.Package.Plots; using Microsoft.VisualStudio.R.Package.RPackages.Mirrors; using Microsoft.VisualStudio.R.Package.Shell; +using Microsoft.VisualStudio.R.Package.Utilities; using Microsoft.VisualStudio.Shell; using Microsoft.VisualStudio.Shell.Interop; using Task = System.Threading.Tasks.Task; @@ -39,7 +41,9 @@ public async System.Threading.Tasks.Task ShowMessage(string mess /// public async Task ShowHelp(string url) { await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); - HelpWindowPane.Navigate(url); + HelpWindowPane pane = ToolWindowUtilities.ShowWindowPane(0, focus: false); + var container = pane as IVisualComponentContainer; + container.Component.Navigate(url); } /// diff --git a/src/Package/Test/Utility/VsRHostScript.cs b/src/Package/Test/Utility/VsRHostScript.cs index 71197693b..dc8e3397f 100644 --- a/src/Package/Test/Utility/VsRHostScript.cs +++ b/src/Package/Test/Utility/VsRHostScript.cs @@ -6,8 +6,8 @@ namespace Microsoft.VisualStudio.R.Package.Test.Utility { [ExcludeFromCodeCoverage] public sealed class VsRHostScript : RHostScript { - public VsRHostScript() : - base(VsAppShell.Current.ExportProvider.GetExportedValue()) { + public VsRHostScript(IRHostClientApp clientApp = null) : + base(VsAppShell.Current.ExportProvider.GetExportedValue(), clientApp) { } } } diff --git a/src/Package/TestApp/Data/VariableExplorerTest.cs b/src/Package/TestApp/Data/VariableExplorerTest.cs index e279b61be..c258e7c43 100644 --- a/src/Package/TestApp/Data/VariableExplorerTest.cs +++ b/src/Package/TestApp/Data/VariableExplorerTest.cs @@ -1,8 +1,6 @@ using System.Diagnostics.CodeAnalysis; -using System.Threading; using System.Threading.Tasks; using Microsoft.Common.Core.Test.Controls; -using Microsoft.UnitTests.Core.Threading; using Microsoft.UnitTests.Core.XUnit; using Microsoft.VisualStudio.R.Interactive.Test.Utility; using Microsoft.VisualStudio.R.Package.DataInspect; @@ -12,7 +10,7 @@ namespace Microsoft.VisualStudio.R.Interactive.Test.Data { [ExcludeFromCodeCoverage] [Collection(CollectionNames.NonParallel)] - public class VaraibleExplorerTest { + public class VaraibleExplorerTest : InteractiveTest { private readonly TestFilesFixture _files; public VaraibleExplorerTest(TestFilesFixture files) { @@ -58,16 +56,5 @@ public void VaraibleExplorer_SimpleDataTest() { } ViewTreeDump.CompareVisualTrees(_files, actual, "VariableExplorer03"); } - - private static void DoIdle(int ms) { - UIThreadHelper.Instance.Invoke(() => { - int time = 0; - while (time < ms) { - IdleTime.DoIdle(); - Thread.Sleep(20); - time += 20; - } - }); - } } } diff --git a/src/Package/TestApp/Help/HelpWindowTest.cs b/src/Package/TestApp/Help/HelpWindowTest.cs new file mode 100644 index 000000000..065420b20 --- /dev/null +++ b/src/Package/TestApp/Help/HelpWindowTest.cs @@ -0,0 +1,101 @@ +using System; +using System.Diagnostics.CodeAnalysis; +using System.Threading.Tasks; +using System.Windows.Navigation; +using FluentAssertions; +using Microsoft.Common.Core; +using Microsoft.Common.Core.Test.Controls; +using Microsoft.R.Host.Client; +using Microsoft.R.Host.Client.Test.Script; +using Microsoft.UnitTests.Core.Threading; +using Microsoft.UnitTests.Core.XUnit; +using Microsoft.VisualStudio.R.Package.Commands; +using Microsoft.VisualStudio.R.Package.Help; +using Microsoft.VisualStudio.R.Package.Test.Utility; +using Microsoft.VisualStudio.R.Packages.R; +using Xunit; + +namespace Microsoft.VisualStudio.R.Interactive.Test.Help { + [ExcludeFromCodeCoverage] + [Collection(CollectionNames.NonParallel)] + public class HelpWindowTest : InteractiveTest { + [Test] + [Category.Interactive] + public void HelpTest() { + var clientApp = new RHostClientHelpTestApp(); + using (var hostScript = new VsRHostScript(clientApp)) { + using (var script = new ControlTestScript(typeof(HelpWindowVisualComponent))) { + DoIdle(100); + + var component = ControlWindow.Component as IHelpWindowVisualComponent; + component.Should().NotBeNull(); + + clientApp.Component = component; + + ShowHelp("?plot\n", hostScript, clientApp); + clientApp.Uri.IsLoopback.Should().Be(true); + clientApp.Uri.PathAndQuery.Should().Be("/library/graphics/html/plot.html"); + + ShowHelp("?lm\n", hostScript, clientApp); + clientApp.Uri.PathAndQuery.Should().Be("/library/stats/html/lm.html"); + + ExecCommand(clientApp, RPackageCommandId.icmdHelpPrevious); + clientApp.Uri.PathAndQuery.Should().Be("/library/graphics/html/plot.html"); + + ExecCommand(clientApp, RPackageCommandId.icmdHelpNext); + clientApp.Uri.PathAndQuery.Should().Be("/library/stats/html/lm.html"); + + ExecCommand(clientApp, RPackageCommandId.icmdHelpHome); + clientApp.Uri.PathAndQuery.Should().Be("/doc/html/index.html"); + } + } + } + + private void ShowHelp(string command, VsRHostScript hostScript, RHostClientHelpTestApp clientApp) { + clientApp.Ready = false; + using (var request = hostScript.Session.BeginInteractionAsync().Result) { + request.RespondAsync(command).SilenceException(); + } + WaitForAppReady(clientApp); + } + + private void ExecCommand(RHostClientHelpTestApp clientApp, int commandId) { + UIThreadHelper.Instance.Invoke(() => { + clientApp.Ready = false; + object o = new object(); + clientApp.Component.Controller.Invoke(RGuidList.RCmdSetGuid, commandId, null, ref o); + }); + WaitForAppReady(clientApp); + } + + private void WaitForAppReady(RHostClientHelpTestApp clientApp) { + for (int i = 0; i < 100 && !clientApp.Ready; i++) { + DoIdle(200); + } + } + + class RHostClientHelpTestApp : RHostClientTestApp { + IHelpWindowVisualComponent _component; + public IHelpWindowVisualComponent Component { + get { return _component; } + set { + _component = value; + _component.Browser.Navigated += Browser_Navigated; + } + } + public bool Ready { get; set; } + public Uri Uri { get; private set; } + private void Browser_Navigated(object sender, NavigationEventArgs e) { + Ready = true; + Uri = _component.Browser.Source; + } + + public override Task ShowHelp(string url) { + UIThreadHelper.Instance.Invoke(() => { + Component.Navigate(url); + }); + return Task.CompletedTask; + } + } + } +} diff --git a/src/Package/TestApp/InteractiveTest.cs b/src/Package/TestApp/InteractiveTest.cs new file mode 100644 index 000000000..23549bd1b --- /dev/null +++ b/src/Package/TestApp/InteractiveTest.cs @@ -0,0 +1,18 @@ +using System.Threading; +using Microsoft.UnitTests.Core.Threading; +using Microsoft.VisualStudio.R.Interactive.Test.Utility; + +namespace Microsoft.VisualStudio.R.Interactive.Test { + public class InteractiveTest { + protected void DoIdle(int ms) { + UIThreadHelper.Instance.Invoke(() => { + int time = 0; + while (time < ms) { + IdleTime.DoIdle(); + Thread.Sleep(20); + time += 20; + } + }); + } + } +} diff --git a/src/Package/TestApp/Microsoft.VisualStudio.R.Interactive.Test.csproj b/src/Package/TestApp/Microsoft.VisualStudio.R.Interactive.Test.csproj index 3dd025eef..b11e85ca7 100644 --- a/src/Package/TestApp/Microsoft.VisualStudio.R.Interactive.Test.csproj +++ b/src/Package/TestApp/Microsoft.VisualStudio.R.Interactive.Test.csproj @@ -75,6 +75,8 @@ + + From ead3ced46d8c83cfa84180ea4a99654e65490c26 Mon Sep 17 00:00:00 2001 From: Pavel Minaev Date: Sat, 16 Jan 2016 18:53:01 -0800 Subject: [PATCH 004/289] Fix #621: Step In on a line with breakpoint breaks things Add support for the new "unprotected environment" flag for evaluations. Since the new default in R-Host is protected, not using the flag fixes the bug. Fix evals that assign values in global environment to explicity reference it, since assignments don't change the target environment if eval is protected. --- .../Impl/Definitions/IRExpressionEvaluator.cs | 1 + src/Host/Client/Impl/Host/RHost.cs | 3 +++ .../Session/RSessionEvaluationCommands.cs | 20 +++++++++---------- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/Host/Client/Impl/Definitions/IRExpressionEvaluator.cs b/src/Host/Client/Impl/Definitions/IRExpressionEvaluator.cs index 4e1186657..64ceff9c5 100644 --- a/src/Host/Client/Impl/Definitions/IRExpressionEvaluator.cs +++ b/src/Host/Client/Impl/Definitions/IRExpressionEvaluator.cs @@ -14,6 +14,7 @@ public enum REvaluationKind { BaseEnv = 1 << 3, EmptyEnv = 1 << 4, Cancelable = 1 << 5, + UnprotectedEnv = 1 << 6, } public interface IRExpressionEvaluator { diff --git a/src/Host/Client/Impl/Host/RHost.cs b/src/Host/Client/Impl/Host/RHost.cs index 9dc402a6a..a06b95b7d 100644 --- a/src/Host/Client/Impl/Host/RHost.cs +++ b/src/Host/Client/Impl/Host/RHost.cs @@ -239,6 +239,9 @@ public async Task EvaluateAsync(string expression, REvaluatio if (kind.HasFlag(REvaluationKind.EmptyEnv)) { nameBuilder.Append('E'); } + if (kind.HasFlag(REvaluationKind.UnprotectedEnv)) { + nameBuilder.Append("U"); + } var name = nameBuilder.ToString(); _canEval = false; diff --git a/src/Host/Client/Impl/Session/RSessionEvaluationCommands.cs b/src/Host/Client/Impl/Session/RSessionEvaluationCommands.cs index 147907d12..3777c005c 100644 --- a/src/Host/Client/Impl/Session/RSessionEvaluationCommands.cs +++ b/src/Host/Client/Impl/Session/RSessionEvaluationCommands.cs @@ -25,30 +25,30 @@ public static Task SaveWorkspace(this IRSessionEvaluation eva public static Task SetVsGraphicsDevice(this IRSessionEvaluation evaluation) { var script = @" -.rtvs.vsgdresize <- function(width, height) { +.GlobalEnv$.rtvs.vsgdresize <- function(width, height) { invisible(.External('Microsoft.R.Host::External.ide_graphicsdevice_resize', width, height)) } -.rtvs.vsgd <- function() { +.GlobalEnv$.rtvs.vsgd <- function() { invisible(.External('Microsoft.R.Host::External.ide_graphicsdevice_new')) } -.rtvs.vsgdexportimage <- function(filename, device) { +.GlobalEnv$.rtvs.vsgdexportimage <- function(filename, device) { dev.copy(device=device,filename=filename) dev.off() } -.rtvs.vsgdexportpdf <- function(filename) { +.GlobalEnv$.rtvs.vsgdexportpdf <- function(filename) { dev.copy(device=pdf,file=filename) dev.off() } -.rtvs.vsgdnextplot <- function() { +.GlobalEnv$.rtvs.vsgdnextplot <- function() { invisible(.External('Microsoft.R.Host::External.ide_graphicsdevice_next_plot')) } -.rtvs.vsgdpreviousplot <- function() { +.GlobalEnv$.rtvs.vsgdpreviousplot <- function() { invisible(.External('Microsoft.R.Host::External.ide_graphicsdevice_previous_plot')) } -.rtvs.vsgdhistoryinfo <- function() { +.GlobalEnv$.rtvs.vsgdhistoryinfo <- function() { .External('Microsoft.R.Host::External.ide_graphicsdevice_history_info') } -xaml <- function(filename, width, height) { +.GlobalEnv$xaml <- function(filename, width, height) { invisible(.External('Microsoft.R.Host::External.xaml_graphicsdevice_new', filename, width, height)) } options(device='.rtvs.vsgd') @@ -111,13 +111,13 @@ public static Task SetVsHelpRedirection(this IRSessionEvaluat public static Task SetRdHelpExtraction(this IRSessionEvaluation evaluation) { var script = -@" .rtvs.signature.help2 <- function(f, p) { +@" .GlobalEnv$.rtvs.signature.help2 <- function(f, p) { x <- help(paste(f), paste(p)) y <- utils:::.getHelpFile(x) paste0(y, collapse = '') } - .rtvs.signature.help1 <- function(f) { + .GlobalEnv$.rtvs.signature.help1 <- function(f) { x <- help(paste(f)) y <- utils:::.getHelpFile(x) paste0(y, collapse = '') From a1c6782c339a2efce844a22d45e09aa2a38d13a1 Mon Sep 17 00:00:00 2001 From: Mikhail Arkhipov Date: Sat, 16 Jan 2016 21:11:05 -0800 Subject: [PATCH 005/289] Unused code and CC adjustments --- src/CodeCoverage.runsettings | 2 + .../Core/Test/Controls/ControlWindow.cs | 4 ++ .../Impl/Microsoft.Markdown.Editor.csproj | 1 - .../Editor/Impl/Tokens/RmdTokenizer.cs | 69 ------------------- 4 files changed, 6 insertions(+), 70 deletions(-) delete mode 100644 src/Markdown/Editor/Impl/Tokens/RmdTokenizer.cs diff --git a/src/CodeCoverage.runsettings b/src/CodeCoverage.runsettings index a55fe141b..711c639a3 100644 --- a/src/CodeCoverage.runsettings +++ b/src/CodeCoverage.runsettings @@ -25,6 +25,8 @@ ^boost::.* ^websocketpp::.* ^__sc.* + .*Resources.* + .*ClassificationFormat.* diff --git a/src/Common/Core/Test/Controls/ControlWindow.cs b/src/Common/Core/Test/Controls/ControlWindow.cs index 33e26a870..03667c9fc 100644 --- a/src/Common/Core/Test/Controls/ControlWindow.cs +++ b/src/Common/Core/Test/Controls/ControlWindow.cs @@ -90,6 +90,10 @@ public static void Close() { var action = new Action(() => { IDisposable disp = Window.Content as IDisposable; disp?.Dispose(); + + disp = Component as IDisposable; + disp?.Dispose(); + Window.Close(); }); diff --git a/src/Markdown/Editor/Impl/Microsoft.Markdown.Editor.csproj b/src/Markdown/Editor/Impl/Microsoft.Markdown.Editor.csproj index ae800e7ed..fcf3f1356 100644 --- a/src/Markdown/Editor/Impl/Microsoft.Markdown.Editor.csproj +++ b/src/Markdown/Editor/Impl/Microsoft.Markdown.Editor.csproj @@ -102,7 +102,6 @@ - diff --git a/src/Markdown/Editor/Impl/Tokens/RmdTokenizer.cs b/src/Markdown/Editor/Impl/Tokens/RmdTokenizer.cs deleted file mode 100644 index a2121478f..000000000 --- a/src/Markdown/Editor/Impl/Tokens/RmdTokenizer.cs +++ /dev/null @@ -1,69 +0,0 @@ -namespace Microsoft.Markdown.Editor.Tokens { - /// - /// Main regular markdown tokenizer. R Markdown has - /// a separate tokenizer. - /// https://help.github.com/articles/markdown-basics/ - /// - internal class RmdTokenizer : MdTokenizer { - - protected override void HandleCharacter() { - while (!_cs.IsEndOfStream()) { - bool handled = false; - - // Regular content is Latex-like - switch (_cs.CurrentChar) { - case '#': - handled = HandleHeading(); - break; - - case '*': - handled = HandleStar(); - break; - - case '_': - if (!char.IsWhiteSpace(_cs.NextChar)) { - handled = HandleItalic('_', MarkdownTokenType.Italic); - } - break; - - case '>': - handled = HandleQuote(); - break; - - case '`': - handled = HandleBackTick(); - break; - - case '-': - if (_cs.NextChar == ' ') { - handled = HandleListItem(); - } else if (_cs.NextChar == '-' && _cs.LookAhead(2) == '-') { - handled = HandleHeading(); - } - break; - - case '=': - if (_cs.NextChar == '=' && _cs.LookAhead(2) == '=') { - handled = HandleHeading(); - } - break; - - case '[': - handled = HandleAltText(); - break; - - default: - if (_cs.IsDecimal()) { - handled = HandleNumberedListItem(); - } - break; - - } - - if (!handled) { - _cs.MoveToNextChar(); - } - } - } - } -} From 5a064c61f1176a8327e54c79ad75b6626ccd2295 Mon Sep 17 00:00:00 2001 From: MikhailArkhipov Date: Tue, 19 Jan 2016 09:13:18 -0800 Subject: [PATCH 006/289] Variables intellisense test prep --- .../Application.Test/TestShell/TestScript.cs | 16 ++++++++++++++++ .../Impl/Completion/Engine/RCompletionEngine.cs | 5 +---- .../Impl/Completion/RCompletionController.cs | 2 +- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/R/Editor/Application.Test/TestShell/TestScript.cs b/src/R/Editor/Application.Test/TestShell/TestScript.cs index 158eaf9a6..40bec55e6 100644 --- a/src/R/Editor/Application.Test/TestShell/TestScript.cs +++ b/src/R/Editor/Application.Test/TestShell/TestScript.cs @@ -180,6 +180,22 @@ public ISignatureHelpSession GetSignatureSession() { return session; } + public ICompletionSession GetCompletionSession() { + ICompletionBroker broker = EditorShell.Current.ExportProvider.GetExportedValue(); + var sessions = broker.GetSessions(EditorWindow.CoreEditor.View); + ICompletionSession session = sessions.FirstOrDefault(); + + int retries = 0; + while (session == null && retries < 10) { + this.DoIdle(1000); + sessions = broker.GetSessions(EditorWindow.CoreEditor.View); + session = sessions.FirstOrDefault(); + retries++; + } + + return session; + } + public IList> GetErrorTagSpans() { var aggregatorService = EditorShell.Current.ExportProvider.GetExport().Value; var tagAggregator = aggregatorService.CreateTagAggregator(EditorWindow.CoreEditor.View); diff --git a/src/R/Editor/Impl/Completion/Engine/RCompletionEngine.cs b/src/R/Editor/Impl/Completion/Engine/RCompletionEngine.cs index 3d3ce8ee8..8a92448d1 100644 --- a/src/R/Editor/Impl/Completion/Engine/RCompletionEngine.cs +++ b/src/R/Editor/Impl/Completion/Engine/RCompletionEngine.cs @@ -30,7 +30,6 @@ internal static class RCompletionEngine { /// List of completion entries for a given location in the AST public static IReadOnlyCollection GetCompletionForLocation(RCompletionContext context, bool autoShownCompletion) { List providers = new List(); - IREditorDocument document = REditorDocument.FindInProjectedBuffers(context.Session.TextView.TextBuffer); if (context.AstRoot.Comments.Contains(context.Position)) { // No completion in comments @@ -74,9 +73,7 @@ public static IReadOnlyCollection GetCompletionForLoca } } - if (document != null && document.IsTransient) { - providers.Add(new WorkspaceVariableCompletionProvider()); - } + providers.Add(new WorkspaceVariableCompletionProvider()); return providers; } diff --git a/src/R/Editor/Impl/Completion/RCompletionController.cs b/src/R/Editor/Impl/Completion/RCompletionController.cs index 5bdceb8be..1298e10dc 100644 --- a/src/R/Editor/Impl/Completion/RCompletionController.cs +++ b/src/R/Editor/Impl/Completion/RCompletionController.cs @@ -164,7 +164,7 @@ public override bool IsCommitChar(char typedChar) { if (char.IsWhiteSpace(typedChar)) { IREditorDocument document = REditorDocument.TryFromTextBuffer(TextView.TextBuffer); if (document != null && document.IsTransient) { - return typedChar == '\t'; + return CompletionSession.SelectedCompletionSet.SelectionStatus.IsSelected && typedChar == '\t'; } if (typedChar == '\n' || typedChar == '\r') { From 048272f002a6b6ed962ec8a818603330258499a0 Mon Sep 17 00:00:00 2001 From: MikhailArkhipov Date: Tue, 19 Jan 2016 09:27:38 -0800 Subject: [PATCH 007/289] CR comments --- src/Package/TestApp/InteractiveTest.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Package/TestApp/InteractiveTest.cs b/src/Package/TestApp/InteractiveTest.cs index 23549bd1b..f5b0c67a6 100644 --- a/src/Package/TestApp/InteractiveTest.cs +++ b/src/Package/TestApp/InteractiveTest.cs @@ -4,7 +4,7 @@ namespace Microsoft.VisualStudio.R.Interactive.Test { public class InteractiveTest { - protected void DoIdle(int ms) { + public static void DoIdle(int ms) { UIThreadHelper.Instance.Invoke(() => { int time = 0; while (time < ms) { From 2c7cca22c1127cdbb8251fbdd1b1bc3d44d7c00f Mon Sep 17 00:00:00 2001 From: MikhailArkhipov Date: Tue, 19 Jan 2016 09:52:01 -0800 Subject: [PATCH 008/289] Fix typo in the class name --- src/Package/TestApp/Data/VariableExplorerTest.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Package/TestApp/Data/VariableExplorerTest.cs b/src/Package/TestApp/Data/VariableExplorerTest.cs index 2aadcbfee..edb9e693b 100644 --- a/src/Package/TestApp/Data/VariableExplorerTest.cs +++ b/src/Package/TestApp/Data/VariableExplorerTest.cs @@ -10,7 +10,7 @@ namespace Microsoft.VisualStudio.R.Interactive.Test.Data { [ExcludeFromCodeCoverage] [Collection(CollectionNames.NonParallel)] - public class VaraibleExplorerTest : InteractiveTest { + public class VariableExplorerTest : InteractiveTest { private readonly TestFilesFixture _files; public VariableExplorerTest(TestFilesFixture files) { @@ -19,7 +19,7 @@ public VariableExplorerTest(TestFilesFixture files) { [Test] [Category.Interactive] - public void VaraibleExplorer_ConstructorTest01() { + public void VariableExplorer_ConstructorTest01() { using (var script = new ControlTestScript(typeof(VariableGridHost))) { string actual = script.WriteVisualTree(); ViewTreeDump.CompareVisualTrees(_files, actual, "VariableExplorer01"); @@ -28,7 +28,7 @@ public void VaraibleExplorer_ConstructorTest01() { [Test] [Category.Interactive] - public void VaraibleExplorer_ConstructorTest02() { + public void VariableExplorer_ConstructorTest02() { using (var hostScript = new VsRHostScript()) { using (var script = new ControlTestScript(typeof(VariableView))) { string actual = script.WriteVisualTree(); @@ -39,7 +39,7 @@ public void VaraibleExplorer_ConstructorTest02() { [Test] [Category.Interactive] - public void VaraibleExplorer_SimpleDataTest() { + public void VariableExplorer_SimpleDataTest() { string actual = null; using (var hostScript = new VsRHostScript()) { using (var script = new ControlTestScript(typeof(VariableView))) { From bd3572b830f6a5d2f992b02980738d0be1bb40ab Mon Sep 17 00:00:00 2001 From: MikhailArkhipov Date: Tue, 19 Jan 2016 10:04:48 -0800 Subject: [PATCH 009/289] Allow debug session to be null in tests until we figure out where to push it from the package --- .../Impl/Data/WorkspaceVariableProvider.cs | 30 ++++++++++--------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/src/R/Editor/Impl/Data/WorkspaceVariableProvider.cs b/src/R/Editor/Impl/Data/WorkspaceVariableProvider.cs index 48f9ef5bb..8787ce197 100644 --- a/src/R/Editor/Impl/Data/WorkspaceVariableProvider.cs +++ b/src/R/Editor/Impl/Data/WorkspaceVariableProvider.cs @@ -112,23 +112,25 @@ protected override void SessionMutated() { } private async Task UpdateList() { - var debugSessionProvider = EditorShell.Current.ExportProvider.GetExportedValue(); + // May be null in tests + var debugSessionProvider = EditorShell.Current.ExportProvider.GetExportedValueOrDefault(); + if (debugSessionProvider != null) { + var debugSession = await debugSessionProvider.GetDebugSessionAsync(Session); + if (debugSession != null) { + var stackFrames = await debugSession.GetStackFramesAsync(); - var debugSession = await debugSessionProvider.GetDebugSessionAsync(Session); - if (debugSession != null) { - var stackFrames = await debugSession.GetStackFramesAsync(); + var globalStackFrame = stackFrames.FirstOrDefault(s => s.IsGlobal); + if (globalStackFrame != null) { + DebugEvaluationResult evaluation = await globalStackFrame.EvaluateAsync("environment()", "Global Environment"); + var e = new RSessionDataObject(-1, evaluation, false); // root level doesn't truncate children and return every variables - var globalStackFrame = stackFrames.FirstOrDefault(s => s.IsGlobal); - if (globalStackFrame != null) { - DebugEvaluationResult evaluation = await globalStackFrame.EvaluateAsync("environment()", "Global Environment"); - var e = new RSessionDataObject(-1, evaluation, false); // root level doesn't truncate children and return every variables + _topLevelVariables.Clear(); - _topLevelVariables.Clear(); - - var children = await e.GetChildrenAsync(); - if (children != null) { - foreach (var x in children) { - _topLevelVariables[x.Name] = x; // TODO: BUGBUG: this doesn't address removed variables + var children = await e.GetChildrenAsync(); + if (children != null) { + foreach (var x in children) { + _topLevelVariables[x.Name] = x; // TODO: BUGBUG: this doesn't address removed variables + } } } } From 53c729680eb27dfb84db0dcc866d1c34dd129948 Mon Sep 17 00:00:00 2001 From: Alexander Sher Date: Tue, 19 Jan 2016 08:40:14 -0800 Subject: [PATCH 010/289] - Remove workaround for bug #169159 - Fix bug #634: Crush when history entry added to history window with filter --- src/Package/Impl/History/HistoryWindowPane.cs | 2 +- .../HistoryWindowPaneMouseProcessor.cs | 14 ---- src/Package/Impl/History/IRHistory.cs | 5 +- src/Package/Impl/History/IRHistoryProvider.cs | 1 + src/Package/Impl/History/RHistory.cs | 43 ++++------- src/Package/Impl/History/RHistoryFiltering.cs | 72 ++++++++++++++----- src/Package/Impl/History/RHistoryProvider.cs | 11 +-- 7 files changed, 80 insertions(+), 68 deletions(-) diff --git a/src/Package/Impl/History/HistoryWindowPane.cs b/src/Package/Impl/History/HistoryWindowPane.cs index 06a59b5d5..e6e8f3ece 100644 --- a/src/Package/Impl/History/HistoryWindowPane.cs +++ b/src/Package/Impl/History/HistoryWindowPane.cs @@ -40,7 +40,7 @@ protected override void OnCreate() { _history.HistoryChanged += OnHistoryChanged; _historyFiltering = _historyProvider.CreateFiltering(_history); - var textView = _history.GetOrCreateTextView(); + var textView = _historyProvider.GetOrCreateTextView(_history); Content = _textEditorFactory.CreateTextViewHost(textView, false); _commandTarget = new CommandTargetToOleShim(textView, RMainController.FromTextView(textView)); diff --git a/src/Package/Impl/History/HistoryWindowPaneMouseProcessor.cs b/src/Package/Impl/History/HistoryWindowPaneMouseProcessor.cs index 336268ced..e2e41d166 100644 --- a/src/Package/Impl/History/HistoryWindowPaneMouseProcessor.cs +++ b/src/Package/Impl/History/HistoryWindowPaneMouseProcessor.cs @@ -23,20 +23,6 @@ internal class HistoryWindowPaneMouseProcessor : MouseProcessorBase, IMouseProce public HistoryWindowPaneMouseProcessor(IWpfTextView wpfTextView, IRHistoryProvider historyProvider) { _textView = wpfTextView; _history = historyProvider.GetAssociatedRHistory(_textView); - - _textView.Selection.SelectionChanged += SelectionChanged; - _textView.Closed += TextViewClosed; - } - - private void TextViewClosed(object sender, EventArgs e) { - _textView.Selection.SelectionChanged -= SelectionChanged; - _textView.Closed -= TextViewClosed; - } - - private void SelectionChanged(object sender, EventArgs args) { - if (_textView.Selection.Start != _textView.Selection.End) { - _history.ClearHistoryEntrySelection(); - } } #region IMouseProcessorProvider Member Implementations diff --git a/src/Package/Impl/History/IRHistory.cs b/src/Package/Impl/History/IRHistory.cs index 9342e7016..6aae37e5f 100644 --- a/src/Package/Impl/History/IRHistory.cs +++ b/src/Package/Impl/History/IRHistory.cs @@ -6,9 +6,10 @@ namespace Microsoft.VisualStudio.R.Package.History { public interface IRHistory : IDisposable { - IWpfTextView GetOrCreateTextView(); + IWpfTextView GetOrCreateTextView(ITextEditorFactoryService textEditorFactory); event EventHandler SelectionChanged; + event EventHandler HistoryChanging; event EventHandler HistoryChanged; bool HasSelectedEntries { get; } bool HasEntries { get; } @@ -37,7 +38,5 @@ public interface IRHistory : IDisposable { void DeleteAllHistoryEntries(); void AddToHistory(string text); - - void Workaround169159(IElisionBuffer elisionBuffer); } } \ No newline at end of file diff --git a/src/Package/Impl/History/IRHistoryProvider.cs b/src/Package/Impl/History/IRHistoryProvider.cs index 6a18c235b..bdec147e6 100644 --- a/src/Package/Impl/History/IRHistoryProvider.cs +++ b/src/Package/Impl/History/IRHistoryProvider.cs @@ -6,5 +6,6 @@ public interface IRHistoryProvider { IRHistory CreateRHistory(IRInteractive rInteractive); IRHistory GetAssociatedRHistory(ITextView textView); IRHistoryFiltering CreateFiltering(IRHistory history); + IWpfTextView GetOrCreateTextView(IRHistory history); } } \ No newline at end of file diff --git a/src/Package/Impl/History/RHistory.cs b/src/Package/Impl/History/RHistory.cs index b8f55405c..fda3571ae 100644 --- a/src/Package/Impl/History/RHistory.cs +++ b/src/Package/Impl/History/RHistory.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.ComponentModel.Composition.Hosting; using System.Linq; using System.Windows; using Microsoft.Common.Core.Disposables; @@ -23,7 +24,6 @@ internal sealed class RHistory : IRHistory { private readonly IRToolsSettings _settings; private readonly IEditorOperationsFactoryService _editorOperationsFactory; private readonly IRInteractive _rInteractive; - private readonly ITextEditorFactoryService _textEditorFactory; private readonly ITextBuffer _historyTextBuffer; private readonly CountdownDisposable _textBufferIsEditable; private readonly IRtfBuilderService _rtfBuilderService; @@ -36,16 +36,15 @@ internal sealed class RHistory : IRHistory { private IRHistoryEntries _entries; private IReadOnlyRegion _readOnlyRegion; - private bool _isInsideWorkaround169159; private IRHistoryEntry _currentEntry; private bool _isMultiline; + public event EventHandler HistoryChanging; public event EventHandler HistoryChanged; public event EventHandler SelectionChanged; - public RHistory(IRInteractive rInteractive, ITextEditorFactoryService textEditorFactory, ITextBuffer textBuffer, IFileSystem fileSystem, IRToolsSettings settings, IEditorOperationsFactoryService editorOperationsFactory, IRtfBuilderService rtfBuilderService, IVsUIShell vsShell, Action dispose) { + public RHistory(IRInteractive rInteractive, ITextBuffer textBuffer, IFileSystem fileSystem, IRToolsSettings settings, IEditorOperationsFactoryService editorOperationsFactory, IRtfBuilderService rtfBuilderService, IVsUIShell vsShell, Action dispose) { _rInteractive = rInteractive; - _textEditorFactory = textEditorFactory; _historyTextBuffer = textBuffer; _fileSystem = fileSystem; _settings = settings; @@ -93,19 +92,20 @@ public bool IsMultiline { } } - public IWpfTextView GetOrCreateTextView() { + public IWpfTextView GetOrCreateTextView(ITextEditorFactoryService textEditorFactory) { if (_textView != null) { return _textView; } - _textView = CreateTextView(); + _textView = CreateTextView(textEditorFactory); _textViewSelection = _textView.Selection; + _textViewSelection.SelectionChanged += TextViewSelectionChanged; _editorOperations = _editorOperationsFactory.GetEditorOperations(_textView); return _textView; } - private IWpfTextView CreateTextView() { - var textView = _textEditorFactory.CreateTextView(_historyTextBuffer); + private IWpfTextView CreateTextView(ITextEditorFactoryService textEditorFactory) { + var textView = textEditorFactory.CreateTextView(_historyTextBuffer); textView.Options.SetOptionValue(DefaultTextViewHostOptions.VerticalScrollBarId, true); textView.Options.SetOptionValue(DefaultTextViewHostOptions.HorizontalScrollBarId, true); textView.Options.SetOptionValue(DefaultTextViewHostOptions.SelectionMarginId, false); @@ -122,6 +122,12 @@ private IWpfTextView CreateTextView() { return textView; } + private void TextViewSelectionChanged(object sender, EventArgs e) { + if (_textView.Selection.Start != _textView.Selection.End) { + ClearHistoryEntrySelection(); + } + } + public bool TryLoadFromFile(string path) { string[] historyLines; try { @@ -375,20 +381,6 @@ public void AddToHistory(string text) { } } - //TODO: Remove this method when bug #169159 is fixed: https://devdiv.visualstudio.com/DefaultCollection/DevDiv/_workitems/edit/169159 - public void Workaround169159(IElisionBuffer elisionBuffer) { - _isInsideWorkaround169159 = true; - using (EditTextBuffer()) { - elisionBuffer.ExpandSpans(new NormalizedSpanCollection(new Span(0, _historyTextBuffer.CurrentSnapshot.Length))); - _historyTextBuffer.Insert(0, "\u200B"); // 200B is a zero-width space - _textView.Caret.MoveTo(new SnapshotPoint(_historyTextBuffer.CurrentSnapshot, 0)); - elisionBuffer.ElideSpans(new NormalizedSpanCollection(new Span(1, _historyTextBuffer.CurrentSnapshot.Length - 1))); - _historyTextBuffer.Delete(new Span(0, 1)); - } - - _isInsideWorkaround169159 = false; - } - private void CreateEntries(string[] historyLines) { if (_historyTextBuffer == null) { return; @@ -449,6 +441,7 @@ private IDisposable EditTextBuffer() { } } + HistoryChanging?.Invoke(this, new EventArgs()); return _textBufferIsEditable.Increment(); } @@ -460,12 +453,6 @@ private void MakeTextBufferReadOnly() { } _currentEntry = null; - - // Don't raise event for workaround edits - if (_isInsideWorkaround169159) { - return; - } - HistoryChanged?.Invoke(this, new EventArgs()); } diff --git a/src/Package/Impl/History/RHistoryFiltering.cs b/src/Package/Impl/History/RHistoryFiltering.cs index 8e7cc22d6..29e859525 100644 --- a/src/Package/Impl/History/RHistoryFiltering.cs +++ b/src/Package/Impl/History/RHistoryFiltering.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.Linq; using Microsoft.Common.Core; using Microsoft.R.Support.Settings.Definitions; @@ -21,13 +22,14 @@ internal class RHistoryFiltering : IRHistoryFiltering { private string _searchPattern; - public RHistoryFiltering(IRHistory history, IRToolsSettings settings, ITextSearchService2 textSearchService) { + public RHistoryFiltering(IRHistory history, ITextView textView, IRToolsSettings settings, ITextSearchService2 textSearchService) { _history = history; + _history.HistoryChanging += HistoryChanging; _history.HistoryChanged += HistoryChanged; _settings = settings; _textSearchService = textSearchService; - _textView = _history.GetOrCreateTextView(); + _textView = textView; _textBuffer = _textView.TextDataModel.DataBuffer; IElisionBuffer elisionBuffer; @@ -49,6 +51,15 @@ public void Filter(string searchPattern) { FilterImpl(searchPattern); } + private void HistoryChanging(object sender, EventArgs args) { + if (_searchPattern == null) { + return; + } + + var span = new Span(0, _textBuffer.CurrentSnapshot.Length); + _elisionBuffer.ExpandSpans(new NormalizedSpanCollection(span)); + } + private void HistoryChanged(object sender, EventArgs args) { if (_searchPattern == null) { return; @@ -63,32 +74,57 @@ private void HistoryChanged(object sender, EventArgs args) { private void FilterImpl(string searchPattern) { var snapshot = _textBuffer.CurrentSnapshot; - var entries = _history.GetAllHistoryEntrySpans(); - var startPoints = entries.Select(e => e.Start).ToList(); - var endPoints = startPoints.Skip(1).Append(entries[entries.Count - 1].End); - var spans = startPoints.Zip(endPoints, (start, end) => new SnapshotSpan(start, end)); - - _history.ClearHistoryEntrySelection(); - _textView.Selection.Clear(); + var entrySpans = _history.GetAllHistoryEntrySpans(); + Debug.Assert(entrySpans.Any()); + + var spansToShow = new List(); + var spansToHide = new List(); + + var span = entrySpans[0]; + var showSpan = _textSearchService.Find(span, span.Start, searchPattern, FindOptions.Multiline).HasValue; + + for (var i = 1; i < entrySpans.Count; i++) { + var nextSpan = entrySpans[i]; + var showNextSpan = _textSearchService.Find(nextSpan, nextSpan.Start, searchPattern, FindOptions.Multiline).HasValue; + if (showNextSpan) { + if (showSpan) { + span = new SnapshotSpan(span.Start, nextSpan.End); + } else if (spansToShow.Any()) { + spansToHide.Add(span); + span = new SnapshotSpan(span.End, nextSpan.End); + } else { + spansToHide.Add(new SnapshotSpan(span.Start, nextSpan.Start)); + span = nextSpan; + } + showSpan = true; + } else { + if (!showSpan) { + span = new SnapshotSpan(span.Start, nextSpan.End); + } else { + spansToShow.Add(span); + span = new SnapshotSpan(span.End, nextSpan.End); + } + showSpan = false; + } + } - IList spansToShow; - IList spansToHide; - spans.Split(s => _textSearchService.Find(s, s.Start, searchPattern, FindOptions.Multiline).HasValue, s => new Span(s.Start, s.Length), out spansToShow, - out spansToHide); + // Add last span + if (showSpan) { + spansToShow.Add(span); + } else { + spansToHide.Add(span); + } if (spansToShow.Count == 0) { if (_elisionBuffer.CurrentSnapshot.Length == 0) { return; } - _history.Workaround169159(_elisionBuffer); - //TODO: Uncomment lines when bug #169159 is fixed: https://devdiv.visualstudio.com/DefaultCollection/DevDiv/_workitems/edit/169159 - //_textView.Caret.MoveTo(new SnapshotPoint(snapshot, 0)); - //_elisionBuffer.ElideSpans(new NormalizedSpanCollection(new Span(0, snapshot.Length))); + _elisionBuffer.ModifySpans(new NormalizedSpanCollection(new Span(0, snapshot.Length)), new NormalizedSpanCollection(new Span(0, 0))); return; } - _elisionBuffer.ExpandSpans(new NormalizedSpanCollection(new Span(0, _textBuffer.CurrentSnapshot.Length))); + _elisionBuffer.ExpandSpans(new NormalizedSpanCollection(new Span(0, snapshot.Length))); MoveCaretToVisiblePoint(spansToShow, snapshot); diff --git a/src/Package/Impl/History/RHistoryProvider.cs b/src/Package/Impl/History/RHistoryProvider.cs index 16c0d8aab..100940361 100644 --- a/src/Package/Impl/History/RHistoryProvider.cs +++ b/src/Package/Impl/History/RHistoryProvider.cs @@ -1,5 +1,3 @@ -using System; -using System.Collections.Concurrent; using System.Collections.Generic; using System.ComponentModel.Composition; using Microsoft.Common.Core.IO; @@ -45,13 +43,18 @@ public IRHistory GetAssociatedRHistory(ITextView textView) { } public IRHistoryFiltering CreateFiltering(IRHistory history) { - return new RHistoryFiltering(history, RToolsSettings.Current, _textSearchService); + var textView = GetOrCreateTextView(history); + return new RHistoryFiltering(history, textView, RToolsSettings.Current, _textSearchService); + } + + public IWpfTextView GetOrCreateTextView(IRHistory history) { + return history.GetOrCreateTextView(_textEditorFactory); } public IRHistory CreateRHistory(IRInteractive rInteractive) { var vsUiShell = VsAppShell.Current.GetGlobalService(typeof(SVsUIShell)); var textBuffer = _textBufferFactory.CreateTextBuffer(_contentType); - var history = new RHistory(rInteractive, _textEditorFactory, textBuffer, _fileSystem, RToolsSettings.Current, _editorOperationsFactory, _rtfBuilderService, vsUiShell, () => RemoveRHistory(textBuffer)); + var history = new RHistory(rInteractive, textBuffer, _fileSystem, RToolsSettings.Current, _editorOperationsFactory, _rtfBuilderService, vsUiShell, () => RemoveRHistory(textBuffer)); _histories[textBuffer] = history; return history; } From abe6986e0408c307b2cf0336f348e2e6131022c9 Mon Sep 17 00:00:00 2001 From: Pavel Minaev Date: Tue, 19 Jan 2016 10:47:46 -0800 Subject: [PATCH 011/289] Fix affected tests. --- src/Package/Test/DataInspect/VariableRHostScript.cs | 2 +- src/Package/TestApp/Data/VariableExplorerTest.cs | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Package/Test/DataInspect/VariableRHostScript.cs b/src/Package/Test/DataInspect/VariableRHostScript.cs index 9b9d9618d..f2bf19566 100644 --- a/src/Package/Test/DataInspect/VariableRHostScript.cs +++ b/src/Package/Test/DataInspect/VariableRHostScript.cs @@ -50,7 +50,7 @@ public async Task EvaluateAsync(string rScript) { _mre = new ManualResetEventSlim(); _variableProvider.VariableChanged += VariableProvider_VariableChanged; using (var evaluation = await base.Session.BeginEvaluationAsync()) { - await evaluation.EvaluateAsync(rScript); + await evaluation.EvaluateAsync(rScript, REvaluationKind.UnprotectedEnv); } if (!_mre.Wait(TimeSpan.FromMilliseconds(1000))) { diff --git a/src/Package/TestApp/Data/VariableExplorerTest.cs b/src/Package/TestApp/Data/VariableExplorerTest.cs index 53db3f964..2dcb1b3b0 100644 --- a/src/Package/TestApp/Data/VariableExplorerTest.cs +++ b/src/Package/TestApp/Data/VariableExplorerTest.cs @@ -2,6 +2,7 @@ using System.Threading; using System.Threading.Tasks; using Microsoft.Common.Core.Test.Controls; +using Microsoft.R.Host.Client; using Microsoft.UnitTests.Core.Threading; using Microsoft.UnitTests.Core.XUnit; using Microsoft.VisualStudio.R.Interactive.Test.Utility; @@ -48,7 +49,7 @@ public void VaraibleExplorer_SimpleDataTest() { DoIdle(100); Task.Run(async () => { using (var eval = await hostScript.Session.BeginEvaluationAsync()) { - await eval.EvaluateAsync("x <- c(1:10)"); + await eval.EvaluateAsync("x <- c(1:10)", REvaluationKind.UnprotectedEnv); } }).Wait(); From d9117c0da180b81398cfb6a13720ef36c05a03ee Mon Sep 17 00:00:00 2001 From: Pavel Minaev Date: Tue, 19 Jan 2016 10:49:47 -0800 Subject: [PATCH 012/289] Update R-Host submodule. --- src/Host/Process | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Host/Process b/src/Host/Process index ac9674ba1..c8358b5f7 160000 --- a/src/Host/Process +++ b/src/Host/Process @@ -1 +1 @@ -Subproject commit ac9674ba1d82d7eafceb55b3efea4adb026f4580 +Subproject commit c8358b5f77260bac9ba11d296cdab11c15b26f8f From c7221b0d8a430c59bc8498ab4db0a083aa805b9e Mon Sep 17 00:00:00 2001 From: huguesv Date: Tue, 19 Jan 2016 10:51:20 -0800 Subject: [PATCH 013/289] Display exception message on clipboard error. Ensure that clipboard operations are on UI thread. Prevent locking of file on disk when loading .png file into a BitmapImage. --- src/Package/Impl/Plots/PlotContentProvider.cs | 54 +++++++++++++------ src/Package/Impl/Resources.Designer.cs | 3 +- src/Package/Impl/Resources.resx | 3 +- 3 files changed, 41 insertions(+), 19 deletions(-) diff --git a/src/Package/Impl/Plots/PlotContentProvider.cs b/src/Package/Impl/Plots/PlotContentProvider.cs index 4e72a44ff..f0a808e33 100644 --- a/src/Package/Impl/Plots/PlotContentProvider.cs +++ b/src/Package/Impl/Plots/PlotContentProvider.cs @@ -93,8 +93,16 @@ public void LoadFile(string fileName) { if (!string.IsNullOrEmpty(fileName)) { try { if (string.Compare(Path.GetExtension(fileName), ".png", StringComparison.InvariantCultureIgnoreCase) == 0) { + // Use Begin/EndInit to avoid locking the file on disk + var bmp = new BitmapImage(); + bmp.BeginInit(); + bmp.UriSource = new Uri(fileName); + bmp.CacheOption = BitmapCacheOption.OnLoad; + bmp.EndInit(); + var image = new Image(); - image.Source = new BitmapImage(new Uri(fileName)); + image.Source = bmp; + element = image; } else { element = (UIElement)XamlServices.Load(fileName); @@ -127,15 +135,23 @@ public async void CopyToClipboardAsBitmap() { string fileName = Path.GetTempFileName(); using (IRSessionEvaluation eval = await _rSession.BeginEvaluationAsync()) { await eval.ExportToBitmap("bmp", fileName, _lastWidth, _lastHeight); - try { - var image = new BitmapImage(new Uri(fileName)); - Clipboard.SetImage(image); - } catch (IOException) { - MessageBox.Show(Resources.PlotCopyToClipboardError); - } + VsAppShell.Current.DispatchOnUIThread( + () => { + try { + // Use Begin/EndInit to avoid locking the file on disk + var image = new BitmapImage(); + image.BeginInit(); + image.UriSource = new Uri(fileName); + image.CacheOption = BitmapCacheOption.OnLoad; + image.EndInit(); + Clipboard.SetImage(image); + + SafeFileDelete(fileName); + } catch (IOException e) { + MessageBox.Show(string.Format(Resources.PlotCopyToClipboardError, e.Message)); + } + }); } - - SafeFileDelete(fileName); } public async void CopyToClipboardAsMetafile() { @@ -146,15 +162,19 @@ public async void CopyToClipboardAsMetafile() { string fileName = Path.GetTempFileName(); using (IRSessionEvaluation eval = await _rSession.BeginEvaluationAsync()) { await eval.ExportToMetafile(fileName, PixelsToInches(_lastWidth), PixelsToInches(_lastHeight)); - try { - var mf = new System.Drawing.Imaging.Metafile(fileName); - Clipboard.SetData(DataFormats.EnhancedMetafile, mf); - } catch (IOException) { - MessageBox.Show(Resources.PlotCopyToClipboardError); - } - } - SafeFileDelete(fileName); + VsAppShell.Current.DispatchOnUIThread( + () => { + try { + var mf = new System.Drawing.Imaging.Metafile(fileName); + Clipboard.SetData(DataFormats.EnhancedMetafile, mf); + + SafeFileDelete(fileName); + } catch (IOException e) { + MessageBox.Show(string.Format(Resources.PlotCopyToClipboardError, e.Message)); + } + }); + } } private static double PixelsToInches(int pixels) { diff --git a/src/Package/Impl/Resources.Designer.cs b/src/Package/Impl/Resources.Designer.cs index 245bc4a40..286102545 100644 --- a/src/Package/Impl/Resources.Designer.cs +++ b/src/Package/Impl/Resources.Designer.cs @@ -531,7 +531,8 @@ public static string OutputWindowName_Publish { } /// - /// Looks up a localized string similar to Error copying plot to the clipboard.. + /// Looks up a localized string similar to Error copying plot to the clipboard. + ///{0}. /// public static string PlotCopyToClipboardError { get { diff --git a/src/Package/Impl/Resources.resx b/src/Package/Impl/Resources.resx index bfe9a9682..ac6c1fc09 100644 --- a/src/Package/Impl/Resources.resx +++ b/src/Package/Impl/Resources.resx @@ -265,7 +265,8 @@ Run plotting command in R Interactive Window - Error copying plot to the clipboard. + Error copying plot to the clipboard. +{0} PNG (*.png)|*.png|JPEG (*.jpg;*.jpeg)|*.jpg;*.jpeg|BMP (*.bmp)|*.bmp|TIFF (*.tif;*.tiff)|*.tif;*.tiff|All Files (*.*)|*.* From 97e2e9f41366f44a382c1abaa90dd435171759f6 Mon Sep 17 00:00:00 2001 From: MikhailArkhipov Date: Tue, 19 Jan 2016 10:58:59 -0800 Subject: [PATCH 014/289] Remove using --- src/Package/TestApp/Data/VariableExplorerTest.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Package/TestApp/Data/VariableExplorerTest.cs b/src/Package/TestApp/Data/VariableExplorerTest.cs index 03c8b3168..082078352 100644 --- a/src/Package/TestApp/Data/VariableExplorerTest.cs +++ b/src/Package/TestApp/Data/VariableExplorerTest.cs @@ -2,7 +2,6 @@ using System.Threading.Tasks; using Microsoft.Common.Core.Test.Controls; using Microsoft.R.Host.Client; -using Microsoft.UnitTests.Core.Threading; using Microsoft.UnitTests.Core.XUnit; using Microsoft.VisualStudio.R.Interactive.Test.Utility; using Microsoft.VisualStudio.R.Package.DataInspect; From 95082ff1839309cf741140b9f442cc93aa68ac4a Mon Sep 17 00:00:00 2001 From: huguesv Date: Tue, 19 Jan 2016 11:14:14 -0800 Subject: [PATCH 015/289] Use double-quotes to delimit path in embedded R code. --- src/Host/Client/Impl/Session/RSessionEvaluationCommands.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Host/Client/Impl/Session/RSessionEvaluationCommands.cs b/src/Host/Client/Impl/Session/RSessionEvaluationCommands.cs index b1bc0a257..24f5fed14 100644 --- a/src/Host/Client/Impl/Session/RSessionEvaluationCommands.cs +++ b/src/Host/Client/Impl/Session/RSessionEvaluationCommands.cs @@ -78,17 +78,17 @@ public static Task PlotHistoryInfo(this IRSessionEvaluation e } public static Task ExportToBitmap(this IRSessionEvaluation evaluation, string deviceName, string outputFilePath, int widthInPixels, int heightInPixels) { - string script = string.Format(".rtvs.vsgdexportimage('{0}', {1}, {2}, {3})", outputFilePath.Replace("\\", "/"), deviceName, widthInPixels, heightInPixels); + string script = string.Format(".rtvs.vsgdexportimage(\"{0}\", {1}, {2}, {3})", outputFilePath.Replace("\\", "/"), deviceName, widthInPixels, heightInPixels); return evaluation.EvaluateAsync(script); } public static Task ExportToMetafile(this IRSessionEvaluation evaluation, string outputFilePath, double widthInInches, double heightInInches) { - string script = string.Format(".rtvs.vsgdexportimage('{0}', win.metafile, {1}, {2})", outputFilePath.Replace("\\", "/"), widthInInches, heightInInches); + string script = string.Format(".rtvs.vsgdexportimage(\"{0}\", win.metafile, {1}, {2})", outputFilePath.Replace("\\", "/"), widthInInches, heightInInches); return evaluation.EvaluateAsync(script); } public static Task ExportToPdf(this IRSessionEvaluation evaluation, string outputFilePath, double widthInInches, double heightInInches, string paper) { - string script = string.Format(".rtvs.vsgdexportpdf('{0}', {1}, {2}, '{3}')", outputFilePath.Replace("\\", "/"), widthInInches, heightInInches, paper); + string script = string.Format(".rtvs.vsgdexportpdf(\"{0}\", {1}, {2}, '{3}')", outputFilePath.Replace("\\", "/"), widthInInches, heightInInches, paper); return evaluation.EvaluateAsync(script); } From 2549be1dd39aeb50c40d1f4d21fd9bc9e2f144fb Mon Sep 17 00:00:00 2001 From: huguesv Date: Tue, 19 Jan 2016 11:40:11 -0800 Subject: [PATCH 016/289] Async method signatures fixes. --- src/Package/Impl/Plots/PlotContentProvider.cs | 129 ++++++++++-------- src/Package/Impl/Plots/PlotWindowPane.cs | 21 +-- 2 files changed, 79 insertions(+), 71 deletions(-) diff --git a/src/Package/Impl/Plots/PlotContentProvider.cs b/src/Package/Impl/Plots/PlotContentProvider.cs index e1ad4e969..35038ccd4 100644 --- a/src/Package/Impl/Plots/PlotContentProvider.cs +++ b/src/Package/Impl/Plots/PlotContentProvider.cs @@ -90,63 +90,73 @@ public void LoadFile(string fileName) { OnPlotChanged(element); } - public async void ExportAsImage(string fileName, string deviceName) { - if (_rSession == null) { - return; - } + public void ExportAsImage(string fileName, string deviceName) { + DoNotWait(ExportAsImageAsync(fileName, deviceName)); + } - using (IRSessionEvaluation eval = await _rSession.BeginEvaluationAsync()) { - await eval.ExportToBitmap(deviceName, fileName, _lastWidth, _lastHeight); - } + public void CopyToClipboardAsBitmap() { + DoNotWait(CopyToClipboardAsBitmapAsync()); } - public async void CopyToClipboardAsBitmap() { - if (_rSession == null) { - return; - } + public void CopyToClipboardAsMetafile() { + DoNotWait(CopyToClipboardAsMetafileAsync()); + } - string fileName = Path.GetTempFileName(); - using (IRSessionEvaluation eval = await _rSession.BeginEvaluationAsync()) { - await eval.ExportToBitmap("bmp", fileName, _lastWidth, _lastHeight); - VsAppShell.Current.DispatchOnUIThread( - () => { - try { - // Use Begin/EndInit to avoid locking the file on disk - var image = new BitmapImage(); - image.BeginInit(); - image.UriSource = new Uri(fileName); - image.CacheOption = BitmapCacheOption.OnLoad; - image.EndInit(); - Clipboard.SetImage(image); + public void ExportAsPdf(string fileName) { + DoNotWait(ExportAsPdfAsync(fileName)); + } - SafeFileDelete(fileName); - } catch (IOException e) { - MessageBox.Show(string.Format(Resources.PlotCopyToClipboardError, e.Message)); - } - }); + private async System.Threading.Tasks.Task ExportAsImageAsync(string fileName, string deviceName) { + if (_rSession != null) { + using (IRSessionEvaluation eval = await _rSession.BeginEvaluationAsync()) { + await eval.ExportToBitmap(deviceName, fileName, _lastWidth, _lastHeight); + } } } - public async void CopyToClipboardAsMetafile() { - if (_rSession == null) { - return; + private async System.Threading.Tasks.Task CopyToClipboardAsBitmapAsync() { + if (_rSession != null) { + string fileName = Path.GetTempFileName(); + using (IRSessionEvaluation eval = await _rSession.BeginEvaluationAsync()) { + await eval.ExportToBitmap("bmp", fileName, _lastWidth, _lastHeight); + VsAppShell.Current.DispatchOnUIThread( + () => { + try { + // Use Begin/EndInit to avoid locking the file on disk + var image = new BitmapImage(); + image.BeginInit(); + image.UriSource = new Uri(fileName); + image.CacheOption = BitmapCacheOption.OnLoad; + image.EndInit(); + Clipboard.SetImage(image); + + SafeFileDelete(fileName); + } catch (IOException e) { + MessageBox.Show(string.Format(Resources.PlotCopyToClipboardError, e.Message)); + } + }); + } } + } - string fileName = Path.GetTempFileName(); - using (IRSessionEvaluation eval = await _rSession.BeginEvaluationAsync()) { - await eval.ExportToMetafile(fileName, PixelsToInches(_lastWidth), PixelsToInches(_lastHeight)); - - VsAppShell.Current.DispatchOnUIThread( - () => { - try { - var mf = new System.Drawing.Imaging.Metafile(fileName); - Clipboard.SetData(DataFormats.EnhancedMetafile, mf); - - SafeFileDelete(fileName); - } catch (IOException e) { - MessageBox.Show(string.Format(Resources.PlotCopyToClipboardError, e.Message)); - } - }); + private async System.Threading.Tasks.Task CopyToClipboardAsMetafileAsync() { + if (_rSession != null) { + string fileName = Path.GetTempFileName(); + using (IRSessionEvaluation eval = await _rSession.BeginEvaluationAsync()) { + await eval.ExportToMetafile(fileName, PixelsToInches(_lastWidth), PixelsToInches(_lastHeight)); + + VsAppShell.Current.DispatchOnUIThread( + () => { + try { + var mf = new System.Drawing.Imaging.Metafile(fileName); + Clipboard.SetData(DataFormats.EnhancedMetafile, mf); + + SafeFileDelete(fileName); + } catch (IOException e) { + MessageBox.Show(string.Format(Resources.PlotCopyToClipboardError, e.Message)); + } + }); + } } } @@ -161,13 +171,11 @@ private static void SafeFileDelete(string fileName) { } } - public async void ExportAsPdf(string fileName) { - if (_rSession == null) { - return; - } - - using (IRSessionEvaluation eval = await _rSession.BeginEvaluationAsync()) { - await eval.ExportToPdf(fileName, PixelsToInches(_lastWidth), PixelsToInches(_lastHeight), "special"); + private async System.Threading.Tasks.Task ExportAsPdfAsync(string fileName) { + if (_rSession != null) { + using (IRSessionEvaluation eval = await _rSession.BeginEvaluationAsync()) { + await eval.ExportToPdf(fileName, PixelsToInches(_lastWidth), PixelsToInches(_lastHeight), "special"); + } } } @@ -241,5 +249,18 @@ private void OnPlotChanged(UIElement element) { public void Dispose() { } + + public static void DoNotWait(System.Threading.Tasks.Task task) { + // Errors like invalid graphics state which go to the REPL stderr will come back + // in an Microsoft.R.Host.Client.RException, and we don't need to do anything with them, + // as the user can see them in the REPL. + // TODO: + // See if we can fix the cause of those errors - to be + // determined based on the various errors we see displayed + // in REPL during testing. + task.SilenceException() + .SilenceException() + .DoNotWait(); + } } } diff --git a/src/Package/Impl/Plots/PlotWindowPane.cs b/src/Package/Impl/Plots/PlotWindowPane.cs index 941909d65..56261c417 100644 --- a/src/Package/Impl/Plots/PlotWindowPane.cs +++ b/src/Package/Impl/Plots/PlotWindowPane.cs @@ -52,20 +52,7 @@ private void PlotWindowPane_SizeChanged(object sender, System.Windows.SizeChange // and user will be able to use scrollbars to see the whole thing int width = Math.Max((int)e.NewSize.Width, MinWidth); int height = Math.Max((int)e.NewSize.Height, MinHeight); - DoNotWait(PlotContentProvider.ResizePlotAsync(width, height)); - } - - private static void DoNotWait(System.Threading.Tasks.Task task) { - // Errors like invalid graphics state which go to the REPL stderr will come back - // in an Microsoft.R.Host.Client.RException, and we don't need to do anything with them, - // as the user can see them in the REPL. - // TODO: - // See if we can fix the cause of those errors - to be - // determined based on the various errors we see displayed - // in REPL during testing. - task.SilenceException() - .SilenceException() - .DoNotWait(); + Microsoft.VisualStudio.R.Package.Plots.PlotContentProvider.DoNotWait(PlotContentProvider.ResizePlotAsync(width, height)); } public override void OnToolWindowCreated() { @@ -138,7 +125,7 @@ private void ContentProvider_PlotChanged(object sender, PlotChangedEventArgs e) if (e.NewPlotElement == null) { ClearHistoryInfo(); } else { - DoNotWait(RefreshHistoryInfo()); + Microsoft.VisualStudio.R.Package.Plots.PlotContentProvider.DoNotWait(RefreshHistoryInfo()); } } @@ -179,11 +166,11 @@ internal void ExportPlotAsPdf() { } internal void NextPlot() { - DoNotWait(PlotContentProvider.NextPlotAsync()); + Microsoft.VisualStudio.R.Package.Plots.PlotContentProvider.DoNotWait(PlotContentProvider.NextPlotAsync()); } internal void PreviousPlot() { - DoNotWait(PlotContentProvider.PreviousPlotAsync()); + Microsoft.VisualStudio.R.Package.Plots.PlotContentProvider.DoNotWait(PlotContentProvider.PreviousPlotAsync()); } protected override void Dispose(bool disposing) { From 1ee15c681e97c2f84817fb45a6927623519e2736 Mon Sep 17 00:00:00 2001 From: huguesv Date: Tue, 19 Jan 2016 11:53:38 -0800 Subject: [PATCH 017/289] Update R-Host commit. --- src/Host/Process | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Host/Process b/src/Host/Process index ac9674ba1..c8358b5f7 160000 --- a/src/Host/Process +++ b/src/Host/Process @@ -1 +1 @@ -Subproject commit ac9674ba1d82d7eafceb55b3efea4adb026f4580 +Subproject commit c8358b5f77260bac9ba11d296cdab11c15b26f8f From 2b7feee2f56633b33a6e1eee466f1b7a2635499c Mon Sep 17 00:00:00 2001 From: Alexander Sher Date: Tue, 19 Jan 2016 12:15:32 -0800 Subject: [PATCH 018/289] Handle case when there is no entry in registry and no RRO installed --- src/R/Actions/Impl/Utility/RInstallation.cs | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/R/Actions/Impl/Utility/RInstallation.cs b/src/R/Actions/Impl/Utility/RInstallation.cs index 9274e8f10..bfb6f99bd 100644 --- a/src/R/Actions/Impl/Utility/RInstallation.cs +++ b/src/R/Actions/Impl/Utility/RInstallation.cs @@ -191,12 +191,19 @@ private static string TryFindRInProgramFiles(string folder, int minMajorVersion, string root = Path.GetPathRoot(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)); string baseRFolder = Path.Combine(root + @"Program Files\", folder); List versions = new List(); - foreach (string dir in Directory.EnumerateDirectories(baseRFolder)) { - string subFolderName = dir.Substring(baseRFolder.Length + 1); - Version v = GetRVersionFromFolderName(subFolderName); - if (v.Major >= minMajorVersion && v.Minor >= minMinorVersion && v.Major <= maxMajorVersion && v.Minor <= maxMinorVersion) { - versions.Add(v); + try { + foreach (string dir in Directory.EnumerateDirectories(baseRFolder)) { + string subFolderName = dir.Substring(baseRFolder.Length + 1); + Version v = GetRVersionFromFolderName(subFolderName); + if (v.Major >= minMajorVersion && + v.Minor >= minMinorVersion && + v.Major <= maxMajorVersion && + v.Minor <= maxMinorVersion) { + versions.Add(v); + } } + } catch (IOException) { + // Don't do anything if there is no RRO installed } if (versions.Count > 0) { From b3f44fc633472a1823fd5e48bcc60691e07ed042 Mon Sep 17 00:00:00 2001 From: MikhailArkhipov Date: Tue, 19 Jan 2016 12:46:10 -0800 Subject: [PATCH 019/289] Add assembly to signing --- .../Microsoft.VisualStudio.R.Interactive.Test.csproj | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/Package/TestApp/Microsoft.VisualStudio.R.Interactive.Test.csproj b/src/Package/TestApp/Microsoft.VisualStudio.R.Interactive.Test.csproj index b11e85ca7..89f4b9f59 100644 --- a/src/Package/TestApp/Microsoft.VisualStudio.R.Interactive.Test.csproj +++ b/src/Package/TestApp/Microsoft.VisualStudio.R.Interactive.Test.csproj @@ -149,6 +149,12 @@ + + + Microsoft + StrongName + + @@ -344,6 +346,7 @@ IconIsMoniker DefaultInvisible DynamicVisibility + IconAndText Attach Debugger A&ttach Debugger @@ -351,6 +354,18 @@ + + From f16d9a55960c7d7e0bba6d9e47b0d4d594a86c02 Mon Sep 17 00:00:00 2001 From: JeongPyoHam Date: Wed, 20 Jan 2016 21:59:41 -0800 Subject: [PATCH 046/289] CR address --- .../DataInspect/Definitions/IVariableDataProvider.cs | 8 +++----- src/Package/Impl/DataInspect/EvaluationWrapper.cs | 2 +- .../{GridProvider.cs => GridDataProvider.cs} | 4 ++-- .../Impl/DataInspect/VariableGridHost.xaml.cs | 2 +- src/Package/Impl/DataInspect/VariableProvider.cs | 5 +++-- .../Impl/DataInspect/VariableSubscriptionToken.cs | 12 ++++++++++++ .../Impl/Microsoft.VisualStudio.R.Package.csproj | 2 +- src/Package/Impl/Resources.Designer.cs | 9 +++++++++ src/Package/Impl/Resources.resx | 3 +++ src/Package/Test/DataInspect/VariableRHostScript.cs | 6 +++--- 10 files changed, 38 insertions(+), 15 deletions(-) rename src/Package/Impl/DataInspect/{GridProvider.cs => GridDataProvider.cs} (86%) diff --git a/src/Package/Impl/DataInspect/Definitions/IVariableDataProvider.cs b/src/Package/Impl/DataInspect/Definitions/IVariableDataProvider.cs index 61a1fd89c..0ecf7037d 100644 --- a/src/Package/Impl/DataInspect/Definitions/IVariableDataProvider.cs +++ b/src/Package/Impl/DataInspect/Definitions/IVariableDataProvider.cs @@ -1,10 +1,8 @@ -using System; -using System.Threading.Tasks; +using System.Threading.Tasks; namespace Microsoft.VisualStudio.R.Package.DataInspect.Definitions { - internal interface IVariableDataProvider : IDisposable { - event EventHandler VariableChanged; - EvaluationWrapper LastEvaluation { get; } + internal interface IVariableDataProvider { + EvaluationWrapper GlobalEnvironment { get; } Task> GetGridDataAsync(string expression, GridRange gridRange); } } diff --git a/src/Package/Impl/DataInspect/EvaluationWrapper.cs b/src/Package/Impl/DataInspect/EvaluationWrapper.cs index 7064b34ae..7e7ddd317 100644 --- a/src/Package/Impl/DataInspect/EvaluationWrapper.cs +++ b/src/Package/Impl/DataInspect/EvaluationWrapper.cs @@ -42,7 +42,7 @@ public EvaluationWrapper(int index, DebugEvaluationResult evaluation, bool trunc private static Lazy _ellipsis = Lazy.Create(() => { var instance = new EvaluationWrapper(); instance.Name = string.Empty; - instance.Value = "[truncated]"; + instance.Value = Resources.VariableExplorer_Truncated; instance.HasChildren = false; return instance; }); diff --git a/src/Package/Impl/DataInspect/GridProvider.cs b/src/Package/Impl/DataInspect/GridDataProvider.cs similarity index 86% rename from src/Package/Impl/DataInspect/GridProvider.cs rename to src/Package/Impl/DataInspect/GridDataProvider.cs index 5120dd3e0..6470e2f21 100644 --- a/src/Package/Impl/DataInspect/GridProvider.cs +++ b/src/Package/Impl/DataInspect/GridDataProvider.cs @@ -5,10 +5,10 @@ namespace Microsoft.VisualStudio.R.Package.DataInspect { /// /// grid data provider to control /// - internal class GridProvider : IGridProvider { + internal class GridDataProvider : IGridProvider { private EvaluationWrapper _evaluation; - public GridProvider(EvaluationWrapper evaluation) { + public GridDataProvider(EvaluationWrapper evaluation) { _evaluation = evaluation; RowCount = evaluation.Dimensions[0]; diff --git a/src/Package/Impl/DataInspect/VariableGridHost.xaml.cs b/src/Package/Impl/DataInspect/VariableGridHost.xaml.cs index d54a697a7..f775343c3 100644 --- a/src/Package/Impl/DataInspect/VariableGridHost.xaml.cs +++ b/src/Package/Impl/DataInspect/VariableGridHost.xaml.cs @@ -16,7 +16,7 @@ public VariableGridHost() { } internal void SetEvaluation(EvaluationWrapper evaluation) { - VariableGrid.Initialize(new GridProvider(evaluation)); + VariableGrid.Initialize(new GridDataProvider(evaluation)); _evaluation = evaluation; diff --git a/src/Package/Impl/DataInspect/VariableProvider.cs b/src/Package/Impl/DataInspect/VariableProvider.cs index a0059a74b..694785013 100644 --- a/src/Package/Impl/DataInspect/VariableProvider.cs +++ b/src/Package/Impl/DataInspect/VariableProvider.cs @@ -7,18 +7,19 @@ using Microsoft.Languages.Editor.Tasks; using Microsoft.R.Debugger; using Microsoft.R.Host.Client; +using Microsoft.VisualStudio.R.Package.DataInspect.Definitions; using Microsoft.VisualStudio.R.Package.Repl; using Microsoft.VisualStudio.R.Package.Shell; namespace Microsoft.VisualStudio.R.Package.DataInspect { - internal class VariableProvider: IDisposable { + internal class VariableProvider: IVariableDataProvider, IDisposable { #region members and ctor private IRSession _rSession; private DebugSession _debugSession; private VariableSubscription _globalEnvSubscription; - public VariableProvider() { + internal VariableProvider() { var sessionProvider = VsAppShell.Current.ExportProvider.GetExportedValue(); _rSession = sessionProvider.GetInteractiveWindowRSession(); _rSession.Mutated += RSession_Mutated; diff --git a/src/Package/Impl/DataInspect/VariableSubscriptionToken.cs b/src/Package/Impl/DataInspect/VariableSubscriptionToken.cs index 5d66206e3..3937308d8 100644 --- a/src/Package/Impl/DataInspect/VariableSubscriptionToken.cs +++ b/src/Package/Impl/DataInspect/VariableSubscriptionToken.cs @@ -6,6 +6,9 @@ namespace Microsoft.VisualStudio.R.Package.DataInspect { /// internal class VariableSubscriptionToken : IEquatable { public VariableSubscriptionToken(int frameIndex, string variableExpression) { + if (variableExpression == null) { + throw new ArgumentNullException("variableExpression"); + } FrameIndex = frameIndex; Expression = variableExpression; } @@ -27,5 +30,14 @@ public bool Equals(VariableSubscriptionToken other) { return FrameIndex == other.FrameIndex && Expression == other.Expression; } + + public override bool Equals(object obj) { + if (ReferenceEquals(this, obj)) return true; + return Equals(obj as VariableSubscriptionToken); + } + + public override int GetHashCode() { + return FrameIndex.GetHashCode() ^ Expression.GetHashCode(); + } } } diff --git a/src/Package/Impl/Microsoft.VisualStudio.R.Package.csproj b/src/Package/Impl/Microsoft.VisualStudio.R.Package.csproj index 8196d6991..cb88c6faf 100644 --- a/src/Package/Impl/Microsoft.VisualStudio.R.Package.csproj +++ b/src/Package/Impl/Microsoft.VisualStudio.R.Package.csproj @@ -83,7 +83,7 @@ - + diff --git a/src/Package/Impl/Resources.Designer.cs b/src/Package/Impl/Resources.Designer.cs index f94a7340e..ad44e8063 100644 --- a/src/Package/Impl/Resources.Designer.cs +++ b/src/Package/Impl/Resources.Designer.cs @@ -1249,6 +1249,15 @@ public static string VariableExplorer_NameHeader { } } + /// + /// Looks up a localized string similar to [truncated]. + /// + public static string VariableExplorer_Truncated { + get { + return ResourceManager.GetString("VariableExplorer_Truncated", resourceCulture); + } + } + /// /// Looks up a localized string similar to Type. /// diff --git a/src/Package/Impl/Resources.resx b/src/Package/Impl/Resources.resx index d8db258db..34ce61695 100644 --- a/src/Package/Impl/Resources.resx +++ b/src/Package/Impl/Resources.resx @@ -538,4 +538,7 @@ please navigate to https://cran.r-project.org, install R for Windows and restart Determines if R Tools should always be using external Web browser or try and send Help pages to the Help window and other Web requests to the external default Web browser. + + [truncated] + \ No newline at end of file diff --git a/src/Package/Test/DataInspect/VariableRHostScript.cs b/src/Package/Test/DataInspect/VariableRHostScript.cs index a4cb59652..6ca49eecc 100644 --- a/src/Package/Test/DataInspect/VariableRHostScript.cs +++ b/src/Package/Test/DataInspect/VariableRHostScript.cs @@ -30,11 +30,11 @@ class VariableExpectation { [ExcludeFromCodeCoverage] class VariableRHostScript : RHostScript { - private IVariableDataProvider _variableProvider; + private VariableProvider _variableProvider; public VariableRHostScript() : base(VsAppShell.Current.ExportProvider.GetExportedValue()) { - _variableProvider = VariableProvider.Current; + _variableProvider = new VariableProvider(); DoIdle(100); } @@ -53,7 +53,7 @@ public async Task EvaluateAsync(string rScript) { await evaluation.EvaluateAsync(rScript, REvaluationKind.UnprotectedEnv); } - if (!_mre.Wait(TimeSpan.FromMilliseconds(1000))) { + if (!System.Diagnostics.Debugger.IsAttached && !_mre.Wait(TimeSpan.FromMilliseconds(1000))) { throw new TimeoutException("Evaluate time out"); } } finally { From 1795f19e5741e5a423db4de5b740af468425809b Mon Sep 17 00:00:00 2001 From: Mikhail Arkhipov Date: Wed, 20 Jan 2016 22:56:12 -0800 Subject: [PATCH 047/289] Setup custom action --- src/R.sln | 12 +++++ src/Setup/Product.wxs | 13 ++++- src/Setup/Setup.wixproj | 10 ++++ src/SetupCustomActions/CustomAction.config | 32 ++++++++++++ src/SetupCustomActions/CustomAction.cs | 13 +++++ .../Properties/AssemblyInfo.cs | 35 +++++++++++++ .../SetupCustomActions.csproj | 52 +++++++++++++++++++ 7 files changed, 165 insertions(+), 2 deletions(-) create mode 100644 src/SetupCustomActions/CustomAction.config create mode 100644 src/SetupCustomActions/CustomAction.cs create mode 100644 src/SetupCustomActions/Properties/AssemblyInfo.cs create mode 100644 src/SetupCustomActions/SetupCustomActions.csproj diff --git a/src/R.sln b/src/R.sln index 987780668..063942e08 100644 --- a/src/R.sln +++ b/src/R.sln @@ -82,6 +82,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution CodeCoverage.runsettings = CodeCoverage.runsettings EndProjectSection EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SetupCustomActions", "SetupCustomActions\SetupCustomActions.csproj", "{F2149709-A88B-4F36-ABCA-307CA96E9FD1}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -345,6 +347,7 @@ Global {56534417-6C60-48A5-B355-12225C70431E}.Release|x86.ActiveCfg = Release|Any CPU {56534417-6C60-48A5-B355-12225C70431E}.Release|x86.Build.0 = Release|Any CPU {B86E0BA1-82AF-45F8-9BE8-FDDCB8EF7F13}.Debug|Any CPU.ActiveCfg = Debug|x86 + {B86E0BA1-82AF-45F8-9BE8-FDDCB8EF7F13}.Debug|Any CPU.Build.0 = Debug|x86 {B86E0BA1-82AF-45F8-9BE8-FDDCB8EF7F13}.Debug|x64.ActiveCfg = Debug|x86 {B86E0BA1-82AF-45F8-9BE8-FDDCB8EF7F13}.Debug|x86.ActiveCfg = Debug|x86 {B86E0BA1-82AF-45F8-9BE8-FDDCB8EF7F13}.Release|Any CPU.ActiveCfg = Release|x86 @@ -512,6 +515,15 @@ Global {130C9240-9537-42D4-A62C-2A13815F0020}.Release|x64.Build.0 = Release|Any CPU {130C9240-9537-42D4-A62C-2A13815F0020}.Release|x86.ActiveCfg = Release|Any CPU {130C9240-9537-42D4-A62C-2A13815F0020}.Release|x86.Build.0 = Release|Any CPU + {F2149709-A88B-4F36-ABCA-307CA96E9FD1}.Debug|Any CPU.ActiveCfg = Debug|x86 + {F2149709-A88B-4F36-ABCA-307CA96E9FD1}.Debug|Any CPU.Build.0 = Debug|x86 + {F2149709-A88B-4F36-ABCA-307CA96E9FD1}.Debug|x64.ActiveCfg = Debug|x86 + {F2149709-A88B-4F36-ABCA-307CA96E9FD1}.Debug|x86.ActiveCfg = Debug|x86 + {F2149709-A88B-4F36-ABCA-307CA96E9FD1}.Debug|x86.Build.0 = Debug|x86 + {F2149709-A88B-4F36-ABCA-307CA96E9FD1}.Release|Any CPU.ActiveCfg = Release|x86 + {F2149709-A88B-4F36-ABCA-307CA96E9FD1}.Release|x64.ActiveCfg = Release|x86 + {F2149709-A88B-4F36-ABCA-307CA96E9FD1}.Release|x86.ActiveCfg = Release|x86 + {F2149709-A88B-4F36-ABCA-307CA96E9FD1}.Release|x86.Build.0 = Release|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/src/Setup/Product.wxs b/src/Setup/Product.wxs index 58d7324dd..a0e29654f 100644 --- a/src/Setup/Product.wxs +++ b/src/Setup/Product.wxs @@ -45,6 +45,8 @@ + + + + Updating Visual Studio project templates... (this may take a few minutes). - - + + + NOT Installed diff --git a/src/Setup/Setup.wixproj b/src/Setup/Setup.wixproj index 0ae5dc923..faf3fa384 100644 --- a/src/Setup/Setup.wixproj +++ b/src/Setup/Setup.wixproj @@ -58,6 +58,16 @@ + + + SetupCustomActions + {f2149709-a88b-4f36-abca-307ca96e9fd1} + True + True + Binaries;Content;Satellites + INSTALLFOLDER + + diff --git a/src/SetupCustomActions/CustomAction.config b/src/SetupCustomActions/CustomAction.config new file mode 100644 index 000000000..de951b78d --- /dev/null +++ b/src/SetupCustomActions/CustomAction.config @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + diff --git a/src/SetupCustomActions/CustomAction.cs b/src/SetupCustomActions/CustomAction.cs new file mode 100644 index 000000000..72f58af88 --- /dev/null +++ b/src/SetupCustomActions/CustomAction.cs @@ -0,0 +1,13 @@ +using System.Windows.Forms; +using Microsoft.Deployment.WindowsInstaller; + +namespace SetupCustomActions { + public class CustomActions { + [CustomAction] + public static ActionResult DSProfilePromptAction(Session session) { + session.Log("Begin DSProfilePromptAction"); + MessageBox.Show("Would you like to set Data Scientist profile?", "R Tools for Visual Studio"); + return ActionResult.Success; + } + } +} diff --git a/src/SetupCustomActions/Properties/AssemblyInfo.cs b/src/SetupCustomActions/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..8755f84d1 --- /dev/null +++ b/src/SetupCustomActions/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("SetupCustomActions")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("SetupCustomActions")] +[assembly: AssemblyCopyright("Copyright © 2016")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("f2149709-a88b-4f36-abca-307ca96e9fd1")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/src/SetupCustomActions/SetupCustomActions.csproj b/src/SetupCustomActions/SetupCustomActions.csproj new file mode 100644 index 000000000..bf65eee5a --- /dev/null +++ b/src/SetupCustomActions/SetupCustomActions.csproj @@ -0,0 +1,52 @@ + + + + Debug + x86 + 8.0.30703 + 2.0 + {F2149709-A88B-4F36-ABCA-307CA96E9FD1} + Library + Properties + SetupCustomActions + SetupCustomActions + v4.5.2 + 512 + $(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.CA.targets + + + true + full + false + ..\..\bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + ..\..\bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + True + + + + + + + + + + \ No newline at end of file From 69d6d3140e5b30f9b662fd58f4bca5b6067d3dae Mon Sep 17 00:00:00 2001 From: MikhailArkhipov Date: Thu, 21 Jan 2016 10:21:19 -0800 Subject: [PATCH 048/289] Basic data science profile prompt form for the setup --- src/R.sln | 8 +- src/SetupCustomActions/CustomAction.cs | 4 +- .../DSProfilePromptForm.Designer.cs | 107 ++ src/SetupCustomActions/DSProfilePromptForm.cs | 21 + .../DSProfilePromptForm.resx | 1191 +++++++++++++++++ src/SetupCustomActions/DSProfileScreen.png | Bin 0 -> 63961 bytes .../Properties/AssemblyInfo.cs | 28 +- src/SetupCustomActions/Resources.Designer.cs | 90 ++ src/SetupCustomActions/Resources.resx | 129 ++ .../SetupCustomActions.csproj | 26 + 10 files changed, 1572 insertions(+), 32 deletions(-) create mode 100644 src/SetupCustomActions/DSProfilePromptForm.Designer.cs create mode 100644 src/SetupCustomActions/DSProfilePromptForm.cs create mode 100644 src/SetupCustomActions/DSProfilePromptForm.resx create mode 100644 src/SetupCustomActions/DSProfileScreen.png create mode 100644 src/SetupCustomActions/Resources.Designer.cs create mode 100644 src/SetupCustomActions/Resources.resx diff --git a/src/R.sln b/src/R.sln index 063942e08..87196526d 100644 --- a/src/R.sln +++ b/src/R.sln @@ -483,14 +483,14 @@ Global {131842CE-DAF9-4C0E-8409-4A26EF7961A7}.Debug|Any CPU.Build.0 = Debug|x64 {131842CE-DAF9-4C0E-8409-4A26EF7961A7}.Debug|x64.ActiveCfg = Debug|x64 {131842CE-DAF9-4C0E-8409-4A26EF7961A7}.Debug|x64.Build.0 = Debug|x64 - {131842CE-DAF9-4C0E-8409-4A26EF7961A7}.Debug|x86.ActiveCfg = Debug|Win32 - {131842CE-DAF9-4C0E-8409-4A26EF7961A7}.Debug|x86.Build.0 = Debug|Win32 + {131842CE-DAF9-4C0E-8409-4A26EF7961A7}.Debug|x86.ActiveCfg = Debug|x64 + {131842CE-DAF9-4C0E-8409-4A26EF7961A7}.Debug|x86.Build.0 = Debug|x64 {131842CE-DAF9-4C0E-8409-4A26EF7961A7}.Release|Any CPU.ActiveCfg = Release|x64 {131842CE-DAF9-4C0E-8409-4A26EF7961A7}.Release|Any CPU.Build.0 = Release|x64 {131842CE-DAF9-4C0E-8409-4A26EF7961A7}.Release|x64.ActiveCfg = Release|x64 {131842CE-DAF9-4C0E-8409-4A26EF7961A7}.Release|x64.Build.0 = Release|x64 - {131842CE-DAF9-4C0E-8409-4A26EF7961A7}.Release|x86.ActiveCfg = Release|Win32 - {131842CE-DAF9-4C0E-8409-4A26EF7961A7}.Release|x86.Build.0 = Release|Win32 + {131842CE-DAF9-4C0E-8409-4A26EF7961A7}.Release|x86.ActiveCfg = Release|x64 + {131842CE-DAF9-4C0E-8409-4A26EF7961A7}.Release|x86.Build.0 = Release|x64 {0D80F608-CF60-42F8-A5E1-4E0ACFA384AF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0D80F608-CF60-42F8-A5E1-4E0ACFA384AF}.Debug|Any CPU.Build.0 = Debug|Any CPU {0D80F608-CF60-42F8-A5E1-4E0ACFA384AF}.Debug|x64.ActiveCfg = Debug|Any CPU diff --git a/src/SetupCustomActions/CustomAction.cs b/src/SetupCustomActions/CustomAction.cs index 72f58af88..eb97bfc0b 100644 --- a/src/SetupCustomActions/CustomAction.cs +++ b/src/SetupCustomActions/CustomAction.cs @@ -6,7 +6,9 @@ public class CustomActions { [CustomAction] public static ActionResult DSProfilePromptAction(Session session) { session.Log("Begin DSProfilePromptAction"); - MessageBox.Show("Would you like to set Data Scientist profile?", "R Tools for Visual Studio"); + var form = new DSProfilePromptForm(); + DialogResult result = form.ShowDialog(); + //MessageBox.Show("Would you like to set Data Scientist profile?", "R Tools for Visual Studio"); return ActionResult.Success; } } diff --git a/src/SetupCustomActions/DSProfilePromptForm.Designer.cs b/src/SetupCustomActions/DSProfilePromptForm.Designer.cs new file mode 100644 index 000000000..5e1f2bda4 --- /dev/null +++ b/src/SetupCustomActions/DSProfilePromptForm.Designer.cs @@ -0,0 +1,107 @@ +namespace SetupCustomActions { + partial class DSProfilePromptForm { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) { + if (disposing && (components != null)) { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DSProfilePromptForm)); + this.buttonYes = new System.Windows.Forms.Button(); + this.buttonNo = new System.Windows.Forms.Button(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.PromptText = new System.Windows.Forms.Label(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.SuspendLayout(); + // + // buttonYes + // + this.buttonYes.BackColor = System.Drawing.Color.Black; + this.buttonYes.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.buttonYes.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.buttonYes.ForeColor = System.Drawing.Color.Silver; + this.buttonYes.Location = new System.Drawing.Point(22, 437); + this.buttonYes.Name = "buttonYes"; + this.buttonYes.Size = new System.Drawing.Size(86, 30); + this.buttonYes.TabIndex = 0; + this.buttonYes.Text = "Yes"; + this.buttonYes.UseVisualStyleBackColor = false; + // + // buttonNo + // + this.buttonNo.BackColor = System.Drawing.Color.Black; + this.buttonNo.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.buttonNo.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.buttonNo.ForeColor = System.Drawing.Color.Silver; + this.buttonNo.Location = new System.Drawing.Point(132, 437); + this.buttonNo.Name = "buttonNo"; + this.buttonNo.Size = new System.Drawing.Size(89, 30); + this.buttonNo.TabIndex = 1; + this.buttonNo.Text = "No"; + this.buttonNo.UseVisualStyleBackColor = false; + // + // pictureBox1 + // + this.pictureBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBox1.InitialImage = ((System.Drawing.Image)(resources.GetObject("pictureBox1.InitialImage"))); + this.pictureBox1.Location = new System.Drawing.Point(22, 29); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(465, 328); + this.pictureBox1.TabIndex = 2; + this.pictureBox1.TabStop = false; + // + // PromptText + // + this.PromptText.AutoSize = true; + this.PromptText.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.PromptText.ForeColor = System.Drawing.Color.Silver; + this.PromptText.Location = new System.Drawing.Point(19, 370); + this.PromptText.Name = "PromptText"; + this.PromptText.Size = new System.Drawing.Size(408, 51); + this.PromptText.TabIndex = 3; + this.PromptText.Text = "Data Scientist profile provides window layout and keyboard shorcuts\r\nsimilar to R" + + "Studio. Would you like setup to apply this profile to \r\nthe Visual Studio?"; + // + // DSProfilePromptForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.Black; + this.ClientSize = new System.Drawing.Size(517, 489); + this.Controls.Add(this.PromptText); + this.Controls.Add(this.pictureBox1); + this.Controls.Add(this.buttonNo); + this.Controls.Add(this.buttonYes); + this.Name = "DSProfilePromptForm"; + this.Text = "DSProfilePromptForm"; + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button buttonYes; + private System.Windows.Forms.Button buttonNo; + private System.Windows.Forms.PictureBox pictureBox1; + private System.Windows.Forms.Label PromptText; + } +} \ No newline at end of file diff --git a/src/SetupCustomActions/DSProfilePromptForm.cs b/src/SetupCustomActions/DSProfilePromptForm.cs new file mode 100644 index 000000000..ba479daa1 --- /dev/null +++ b/src/SetupCustomActions/DSProfilePromptForm.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace SetupCustomActions { + public partial class DSProfilePromptForm : Form { + public DSProfilePromptForm() { + InitializeComponent(); + } + + private void label1_Click(object sender, EventArgs e) { + + } + } +} diff --git a/src/SetupCustomActions/DSProfilePromptForm.resx b/src/SetupCustomActions/DSProfilePromptForm.resx new file mode 100644 index 000000000..610480d31 --- /dev/null +++ b/src/SetupCustomActions/DSProfilePromptForm.resx @@ -0,0 +1,1191 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + + + \ No newline at end of file diff --git a/src/SetupCustomActions/DSProfileScreen.png b/src/SetupCustomActions/DSProfileScreen.png new file mode 100644 index 0000000000000000000000000000000000000000..72f9d620659ca4f19f3eb5d9bf3a010174db560a GIT binary patch literal 63961 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%0DmfqXtg)s5Du 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%0A=WCBHi3)E{>1;?me*dRRa1-D> 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 LmO`=o-G~1HI}SrV literal 0 HcmV?d00001 diff --git a/src/SetupCustomActions/Properties/AssemblyInfo.cs b/src/SetupCustomActions/Properties/AssemblyInfo.cs index 8755f84d1..6935e290f 100644 --- a/src/SetupCustomActions/Properties/AssemblyInfo.cs +++ b/src/SetupCustomActions/Properties/AssemblyInfo.cs @@ -1,17 +1,4 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("SetupCustomActions")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("SetupCustomActions")] -[assembly: AssemblyCopyright("Copyright © 2016")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] +using System.Runtime.InteropServices; // Setting ComVisible to false makes the types in this assembly not visible // to COM components. If you need to access a type in this assembly from @@ -20,16 +7,3 @@ // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("f2149709-a88b-4f36-abca-307ca96e9fd1")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/src/SetupCustomActions/Resources.Designer.cs b/src/SetupCustomActions/Resources.Designer.cs new file mode 100644 index 000000000..91ad23be8 --- /dev/null +++ b/src/SetupCustomActions/Resources.Designer.cs @@ -0,0 +1,90 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace SetupCustomActions { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SetupCustomActions.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to Data Scientist profile provides window layout and keyboard shorcuts similar to RStudio. Would you like setup to apply this profile to the Visual Studio?. + /// + internal static string DSProfilePromptText { + get { + return ResourceManager.GetString("DSProfilePromptText", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to No. + /// + internal static string No { + get { + return ResourceManager.GetString("No", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Yes. + /// + internal static string Yes { + get { + return ResourceManager.GetString("Yes", resourceCulture); + } + } + } +} diff --git a/src/SetupCustomActions/Resources.resx b/src/SetupCustomActions/Resources.resx new file mode 100644 index 000000000..3312bc510 --- /dev/null +++ b/src/SetupCustomActions/Resources.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Data Scientist profile provides window layout and keyboard shorcuts similar to RStudio. Would you like setup to apply this profile to the Visual Studio? + + + No + + + Yes + + \ No newline at end of file diff --git a/src/SetupCustomActions/SetupCustomActions.csproj b/src/SetupCustomActions/SetupCustomActions.csproj index bf65eee5a..cf90092de 100644 --- a/src/SetupCustomActions/SetupCustomActions.csproj +++ b/src/SetupCustomActions/SetupCustomActions.csproj @@ -34,6 +34,8 @@ + + @@ -43,9 +45,33 @@ + + Properties\GlobalAssemblyInfo.cs + + + Form + + + DSProfilePromptForm.cs + + + True + True + Resources.resx + + + + + + DSProfilePromptForm.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + From b39ea0bc571adee2dae9f9bceb8334e993c4fcff Mon Sep 17 00:00:00 2001 From: MikhailArkhipov Date: Thu, 21 Jan 2016 10:37:52 -0800 Subject: [PATCH 049/289] Fix #668: Importing Data Science settings after project is opened removes Ctrl+Enter shortcut --- .../Impl/Options/R/Tools/ImportRSettingsCommand.cs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/Package/Impl/Options/R/Tools/ImportRSettingsCommand.cs b/src/Package/Impl/Options/R/Tools/ImportRSettingsCommand.cs index 8d97169eb..414fb96ae 100644 --- a/src/Package/Impl/Options/R/Tools/ImportRSettingsCommand.cs +++ b/src/Package/Impl/Options/R/Tools/ImportRSettingsCommand.cs @@ -5,7 +5,9 @@ using System.Reflection; using Microsoft.Common.Core; using Microsoft.Common.Core.Shell; +using Microsoft.Languages.Editor.Tasks; using Microsoft.VisualStudio.R.Package.Commands; +using Microsoft.VisualStudio.R.Package.Repl.Commands; using Microsoft.VisualStudio.R.Package.Shell; using Microsoft.VisualStudio.R.Packages.R; using Microsoft.VisualStudio.Shell.Interop; @@ -30,6 +32,12 @@ public static void OnCommand(object sender, EventArgs args) { arguments = string.Format(CultureInfo.InvariantCulture, "-import:\"{0}\"", settingsFilePath); shell.PostExecCommand(ref group, (uint)VSConstants.VSStd2KCmdID.ManageUserSettings, 0, ref arguments); } + + // Restore Ctrl+Enter if necessary + IdleTimeAction.Create(() => { + ReplShortcutSetting.Close(); + ReplShortcutSetting.Initialize(); + }, 100, typeof(ImportRSettingsCommand)); } } } From f8341a55a286d64110149bfc6364851b20e9878b Mon Sep 17 00:00:00 2001 From: JeongPyoHam Date: Thu, 21 Jan 2016 11:20:49 -0800 Subject: [PATCH 050/289] Unloading Grid control doesn't stop scroller as ToolWindow deactivate unload the control --- src/Package/Impl/DataInspect/VisualGrid/MatrixView.xaml.cs | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/Package/Impl/DataInspect/VisualGrid/MatrixView.xaml.cs b/src/Package/Impl/DataInspect/VisualGrid/MatrixView.xaml.cs index bc879ef0d..20f7e0464 100644 --- a/src/Package/Impl/DataInspect/VisualGrid/MatrixView.xaml.cs +++ b/src/Package/Impl/DataInspect/VisualGrid/MatrixView.xaml.cs @@ -23,12 +23,6 @@ static MatrixView() { public MatrixView() { InitializeComponent(); - - Unloaded += MatrixView_Unloaded; - } - - private void MatrixView_Unloaded(object sender, RoutedEventArgs e) { - _scroller?.StopScroller(); } public void Initialize(IGridProvider dataProvider) { From 6772241d5cf0d72a50b8ee7492c12101f74065df Mon Sep 17 00:00:00 2001 From: JeongPyoHam Date: Thu, 21 Jan 2016 13:14:12 -0800 Subject: [PATCH 051/289] VariableProvider Exports IVariableDataProvider --- .../Definitions/IVariableDataProvider.cs | 22 +++- .../Impl/DataInspect/EvaluationWrapper.cs | 37 ++++++ .../Impl/DataInspect/GridDataProvider.cs | 10 +- .../Impl/DataInspect/VariableGridHost.xaml.cs | 8 +- .../Impl/DataInspect/VariableProvider.cs | 107 +++++++----------- .../Impl/DataInspect/VariableSubscription.cs | 2 - .../Impl/DataInspect/VariableView.xaml.cs | 12 +- .../Test/DataInspect/EvaluationWrapperTest.cs | 15 --- .../Test/DataInspect/VariableRHostScript.cs | 34 +++--- ...crosoft.VisualStudio.R.Package.Test.csproj | 4 + .../TestApp/Data/VariableExplorerTest.cs | 2 +- 11 files changed, 145 insertions(+), 108 deletions(-) diff --git a/src/Package/Impl/DataInspect/Definitions/IVariableDataProvider.cs b/src/Package/Impl/DataInspect/Definitions/IVariableDataProvider.cs index 0ecf7037d..540af03ed 100644 --- a/src/Package/Impl/DataInspect/Definitions/IVariableDataProvider.cs +++ b/src/Package/Impl/DataInspect/Definitions/IVariableDataProvider.cs @@ -1,8 +1,24 @@ -using System.Threading.Tasks; +using System; +using Microsoft.R.Debugger; namespace Microsoft.VisualStudio.R.Package.DataInspect.Definitions { + /// + /// provides evaluation from R Host + /// internal interface IVariableDataProvider { - EvaluationWrapper GlobalEnvironment { get; } - Task> GetGridDataAsync(string expression, GridRange gridRange); + /// + /// register a callback when evaluation is available + /// + /// frame index to evaluation the expression + /// expression to evaluate + /// callback when evaluation is avilable + /// a subscription + VariableSubscription Subscribe(int frameIndex, string expression, Action executeAction); + + /// + /// unregister the subscription + /// + /// the subscription to quit + void Unsubscribe(VariableSubscription subscription); } } diff --git a/src/Package/Impl/DataInspect/EvaluationWrapper.cs b/src/Package/Impl/DataInspect/EvaluationWrapper.cs index 7e7ddd317..aa9365d08 100644 --- a/src/Package/Impl/DataInspect/EvaluationWrapper.cs +++ b/src/Package/Impl/DataInspect/EvaluationWrapper.cs @@ -7,8 +7,12 @@ using Microsoft.Common.Core; using Microsoft.R.Debugger; using Microsoft.R.Editor.Data; +using Microsoft.R.Host.Client; using Microsoft.VisualStudio.PlatformUI; +using Microsoft.VisualStudio.R.Package.Shell; using Microsoft.VisualStudio.R.Package.Utilities; +using Microsoft.VisualStudio.R.Package.Repl; +using static System.FormattableString; namespace Microsoft.VisualStudio.R.Package.DataInspect { /// @@ -126,6 +130,39 @@ private bool ComputeDetailAvailability(DebugValueEvaluationResult evaluation) { return false; } + public async Task> GetGridDataAsync(string expression, GridRange gridRange) { + await TaskUtilities.SwitchToBackgroundThread(); + + var rSession = VsAppShell.Current.ExportProvider.GetExportedValue().GetInteractiveWindowRSession(); + if (rSession == null) { + throw new InvalidOperationException(Invariant($"{nameof(IRSessionProvider)} failed to return RSession for {nameof(EvaluationWrapper)}")); + } + + string rows = gridRange.Rows.ToRString(); + string columns = gridRange.Columns.ToRString(); + + using (var elapsed = new Elapsed("Data:Evaluate:")) { + using (var evaluator = await rSession.BeginEvaluationAsync(false)) { + var result = await evaluator.EvaluateAsync($"rtvs:::grid.dput(rtvs:::grid.data({expression}, {rows}, {columns}))", REvaluationKind.Normal); + + if (result.ParseStatus != RParseStatus.OK || result.Error != null) { + throw new InvalidOperationException($"Grid data evaluation failed:{result}"); + } + + var data = GridParser.Parse(result.StringResult); + data.Range = gridRange; + + if (data.ValidHeaderNames + && (data.ColumnNames.Count != gridRange.Columns.Count + || data.RowNames.Count != gridRange.Rows.Count)) { + throw new InvalidOperationException("Header names lengths are different from data's length"); + } + + return data; + } + } + } + #endregion } } diff --git a/src/Package/Impl/DataInspect/GridDataProvider.cs b/src/Package/Impl/DataInspect/GridDataProvider.cs index 6470e2f21..b38e9907a 100644 --- a/src/Package/Impl/DataInspect/GridDataProvider.cs +++ b/src/Package/Impl/DataInspect/GridDataProvider.cs @@ -1,5 +1,7 @@ using System; +using System.Diagnostics; using System.Threading.Tasks; +using static System.FormattableString; namespace Microsoft.VisualStudio.R.Package.DataInspect { /// @@ -20,7 +22,13 @@ public GridDataProvider(EvaluationWrapper evaluation) { public int RowCount { get; } public Task> GetAsync(GridRange gridRange) { - return VariableProvider.Current.GetGridDataAsync(_evaluation.Expression, gridRange); + var t = _evaluation.GetGridDataAsync(_evaluation.Expression, gridRange); + if (t == null) { + Debug.Fail(Invariant($"{nameof(EvaluationWrapper)} returned null grid data")); + return Task.FromResult>(null); + } + + return t; } public Task> GetRangeAsync(GridRange gridRange) { diff --git a/src/Package/Impl/DataInspect/VariableGridHost.xaml.cs b/src/Package/Impl/DataInspect/VariableGridHost.xaml.cs index f775343c3..2ce1b70be 100644 --- a/src/Package/Impl/DataInspect/VariableGridHost.xaml.cs +++ b/src/Package/Impl/DataInspect/VariableGridHost.xaml.cs @@ -1,6 +1,7 @@ using System.Windows; using System.Windows.Controls; using Microsoft.R.Debugger; +using Microsoft.VisualStudio.R.Package.DataInspect.Definitions; using Microsoft.VisualStudio.R.Package.Shell; namespace Microsoft.VisualStudio.R.Package.DataInspect { @@ -10,9 +11,12 @@ namespace Microsoft.VisualStudio.R.Package.DataInspect { public partial class VariableGridHost : UserControl { private EvaluationWrapper _evaluation; private VariableSubscription _subscription; + private IVariableDataProvider _variableProvider; public VariableGridHost() { InitializeComponent(); + + _variableProvider = VsAppShell.Current.ExportProvider.GetExportedValue(); } internal void SetEvaluation(EvaluationWrapper evaluation) { @@ -21,11 +25,11 @@ internal void SetEvaluation(EvaluationWrapper evaluation) { _evaluation = evaluation; if (_subscription != null) { - VariableProvider.Current.Unsubscribe(_subscription); + _variableProvider.Unsubscribe(_subscription); _subscription = null; } - _subscription = VariableProvider.Current.Subscribe( + _subscription = _variableProvider.Subscribe( evaluation.FrameIndex, evaluation.Expression, SubscribeAction); diff --git a/src/Package/Impl/DataInspect/VariableProvider.cs b/src/Package/Impl/DataInspect/VariableProvider.cs index 694785013..4fc1f8849 100644 --- a/src/Package/Impl/DataInspect/VariableProvider.cs +++ b/src/Package/Impl/DataInspect/VariableProvider.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.ComponentModel.Composition; using System.Diagnostics; using System.Linq; using System.Threading.Tasks; @@ -10,21 +11,42 @@ using Microsoft.VisualStudio.R.Package.DataInspect.Definitions; using Microsoft.VisualStudio.R.Package.Repl; using Microsoft.VisualStudio.R.Package.Shell; +using static System.FormattableString; namespace Microsoft.VisualStudio.R.Package.DataInspect { + [Export(typeof(IVariableDataProvider))] internal class VariableProvider: IVariableDataProvider, IDisposable { #region members and ctor - private IRSession _rSession; + private IRSessionProvider _rSessionProvider; + private IDebugSessionProvider _debugSessionProvider; + private DebugSession _debugSession; - private VariableSubscription _globalEnvSubscription; - internal VariableProvider() { - var sessionProvider = VsAppShell.Current.ExportProvider.GetExportedValue(); - _rSession = sessionProvider.GetInteractiveWindowRSession(); - _rSession.Mutated += RSession_Mutated; + [ImportingConstructor] + public VariableProvider( + [Import(typeof(IRSessionProvider))]IRSessionProvider sessionProvider, + [Import(typeof(IDebugSessionProvider))] IDebugSessionProvider debugSessionProvider) { + if (sessionProvider == null) { + throw new ArgumentNullException("sessionProvider"); + } + if (debugSessionProvider == null) { + throw new ArgumentNullException("debugSessionProvider"); + } + + _rSessionProvider = sessionProvider; + + + RSession = sessionProvider.GetInteractiveWindowRSession(); + if (RSession == null) { + throw new InvalidOperationException(Invariant($"{nameof(IRSessionProvider)} failed to return RSession for {nameof(IVariableDataProvider)}")); + } + RSession.Mutated += RSession_Mutated; + + _debugSessionProvider = debugSessionProvider; + IdleTimeAction.Create(() => { - InitializeData().SilenceException().DoNotWait(); + PublishAllAsync().SilenceException().DoNotWait(); }, 10, typeof(VariableProvider)); } @@ -32,52 +54,12 @@ internal VariableProvider() { #region Public - private static VariableProvider _instance; - /// - /// Singleton - /// - public static VariableProvider Current => _instance ?? (_instance = new VariableProvider()); - public const string GlobalEnvironmentExpression = "environment()"; - public EvaluationWrapper GlobalEnvironment { get; private set; } - - public async Task> GetGridDataAsync(string expression, GridRange gridRange) { - await TaskUtilities.SwitchToBackgroundThread(); - - var rSession = _rSession; - - string rows = gridRange.Rows.ToRString(); - string columns = gridRange.Columns.ToRString(); - - using (var elapsed = new Elapsed("Data:Evaluate:")) { - using (var evaluator = await rSession.BeginEvaluationAsync(false)) { - var result = await evaluator.EvaluateAsync($"rtvs:::grid.dput(rtvs:::grid.data({expression}, {rows}, {columns}))", REvaluationKind.Normal); - - if (result.ParseStatus != RParseStatus.OK || result.Error != null) { - throw new InvalidOperationException($"Grid data evaluation failed:{result}"); - } - - var data = GridParser.Parse(result.StringResult); - data.Range = gridRange; - - if (data.ValidHeaderNames - && (data.ColumnNames.Count != gridRange.Columns.Count - || data.RowNames.Count != gridRange.Rows.Count)) { - throw new InvalidOperationException("Header names lengths are different from data's length"); - } - - return data; - } - } - } + public IRSession RSession { get; } public void Dispose() { - // Only used in tests to make sure each instance - // of the variable explorer uses fresh variable provider - _rSession.Mutated -= RSession_Mutated; - _rSession = null; - _instance = null; + RSession.Mutated -= RSession_Mutated; } #endregion @@ -89,17 +71,6 @@ private void RSession_Mutated(object sender, EventArgs e) { #endregion private async Task InitializeData() { - var debugSessionProvider = VsAppShell.Current.ExportProvider.GetExportedValue(); - - _debugSession = await debugSessionProvider.GetDebugSessionAsync(_rSession); - - if (_globalEnvSubscription != null) { - Unsubscribe(_globalEnvSubscription); - _globalEnvSubscription = null; - } - - _globalEnvSubscription = Subscribe(0, GlobalEnvironmentExpression, (r) => GlobalEnvironment = new EvaluationWrapper(-1, r, false)); - await PublishAllAsync(); } @@ -148,6 +119,18 @@ public void Unsubscribe(VariableSubscription subscription) { } private async Task PublishAllAsync() { + await TaskUtilities.SwitchToBackgroundThread(); + + var debugSessionProvider = VsAppShell.Current.ExportProvider.GetExportedValue(); + + if (_debugSession == null) { + _debugSession = await debugSessionProvider.GetDebugSessionAsync(RSession); + if (_debugSession == null) { + Debug.Fail(""); + return; + } + } + List subsribeTasks = new List(); lock (_subscribers) { foreach (var kv in _subscribers) { @@ -163,9 +146,7 @@ private async Task PublishAsync(VariableSubscriptionToken token, IList f.Index == token.FrameIndex); diff --git a/src/Package/Impl/DataInspect/VariableSubscription.cs b/src/Package/Impl/DataInspect/VariableSubscription.cs index 89a633ad1..9f9b50d0d 100644 --- a/src/Package/Impl/DataInspect/VariableSubscription.cs +++ b/src/Package/Impl/DataInspect/VariableSubscription.cs @@ -43,8 +43,6 @@ public void Dispose() { _unsubscribe(this); _unsubscribe = null; } - - GC.SuppressFinalize(this); } public Action GetExecuteAction() { diff --git a/src/Package/Impl/DataInspect/VariableView.xaml.cs b/src/Package/Impl/DataInspect/VariableView.xaml.cs index e24952e2f..4b9118069 100644 --- a/src/Package/Impl/DataInspect/VariableView.xaml.cs +++ b/src/Package/Impl/DataInspect/VariableView.xaml.cs @@ -3,6 +3,7 @@ using System.ComponentModel; using System.Windows.Controls; using Microsoft.R.Debugger; +using Microsoft.VisualStudio.R.Package.DataInspect.Definitions; using Microsoft.VisualStudio.R.Package.Shell; namespace Microsoft.VisualStudio.R.Package.DataInspect { @@ -17,14 +18,11 @@ public VariableView() { SortDirection = ListSortDirection.Ascending; - if (VariableProvider.Current.GlobalEnvironment == null) { - SetRootNode(EvaluationWrapper.Ellipsis); - } else { - SetRootNode(VariableProvider.Current.GlobalEnvironment); - EnvironmentName.Text = GlobalEnvironmentName; - } + var variableProvider = VsAppShell.Current.ExportProvider.GetExportedValue(); + + SetRootNode(EvaluationWrapper.Ellipsis); - _globalEnvSubscription = VariableProvider.Current.Subscribe(0, VariableProvider.GlobalEnvironmentExpression, OnGlobalEnvironmentEvaluation); + _globalEnvSubscription = variableProvider.Subscribe(0, VariableProvider.GlobalEnvironmentExpression, OnGlobalEnvironmentEvaluation); RootTreeGrid.Sorting += RootTreeGrid_Sorting; } diff --git a/src/Package/Test/DataInspect/EvaluationWrapperTest.cs b/src/Package/Test/DataInspect/EvaluationWrapperTest.cs index 2e8699060..bfcf0dc99 100644 --- a/src/Package/Test/DataInspect/EvaluationWrapperTest.cs +++ b/src/Package/Test/DataInspect/EvaluationWrapperTest.cs @@ -8,21 +8,6 @@ namespace Microsoft.VisualStudio.R.Package.Test.DataInspect { [ExcludeFromCodeCoverage] [Collection(CollectionNames.NonParallel)] // required for tests using R Host public class EvaluationWrapperTest { - - public EvaluationWrapperTest() { - } - - [Test] - [Category.Variable.Explorer] - public async Task GlobalEnvironmentTest() { - using (var hostScript = new VariableRHostScript()) { - await hostScript.EvaluateAsync("ls()"); // run anything - - var target = hostScript.GlobalEnvironment; - target.Expression.ShouldBeEquivalentTo("environment()"); - } - } - // TODO: RStudio difference // value.integer.1 RS 1L RTVS just 1 // value.numeric.big RS 98765432109876543210 RTVS 9.88e+19 diff --git a/src/Package/Test/DataInspect/VariableRHostScript.cs b/src/Package/Test/DataInspect/VariableRHostScript.cs index 6ca49eecc..c020fa9e4 100644 --- a/src/Package/Test/DataInspect/VariableRHostScript.cs +++ b/src/Package/Test/DataInspect/VariableRHostScript.cs @@ -6,6 +6,7 @@ using FluentAssertions; using Microsoft.Common.Core.Test.Script; using Microsoft.Languages.Editor.Shell; +using Microsoft.R.Debugger; using Microsoft.R.Editor.Data; using Microsoft.R.Host.Client; using Microsoft.R.Host.Client.Test.Script; @@ -31,40 +32,45 @@ class VariableExpectation { [ExcludeFromCodeCoverage] class VariableRHostScript : RHostScript { private VariableProvider _variableProvider; + private EvaluationWrapper _globalEnv; public VariableRHostScript() : base(VsAppShell.Current.ExportProvider.GetExportedValue()) { - _variableProvider = new VariableProvider(); + _variableProvider = new VariableProvider(base.SessionProvider, VsAppShell.Current.ExportProvider.GetExportedValue()); + DoIdle(100); } - public EvaluationWrapper GlobalEnvironment { - get { - return _variableProvider.GlobalEnvironment; - } + private void OnGlobalEnvironmentEvaluated(DebugEvaluationResult result) { + _globalEnv = new EvaluationWrapper(-1, result, false); + _mre.Set(); } private ManualResetEventSlim _mre; public async Task EvaluateAsync(string rScript) { + VariableSubscription subscription = null; try { _mre = new ManualResetEventSlim(); - Session.Mutated += Session_Mutated; + + _globalEnv = null; + subscription = _variableProvider.Subscribe(0, "environment()", OnGlobalEnvironmentEvaluated); + using (var evaluation = await base.Session.BeginEvaluationAsync()) { await evaluation.EvaluateAsync(rScript, REvaluationKind.UnprotectedEnv); } - if (!System.Diagnostics.Debugger.IsAttached && !_mre.Wait(TimeSpan.FromMilliseconds(1000))) { - throw new TimeoutException("Evaluate time out"); + if (System.Diagnostics.Debugger.IsAttached) { + _mre.Wait(); + } else { + if (!_mre.Wait(TimeSpan.FromSeconds(10))) { + throw new TimeoutException("Evaluate time out"); + } } } finally { - Session.Mutated -= Session_Mutated; + _variableProvider.Unsubscribe(subscription); } } - private void Session_Mutated(object sender, EventArgs e) { - _mre.Set(); - } - /// /// evaluate R script and assert if the expectation is not found in global environment /// @@ -74,7 +80,7 @@ private void Session_Mutated(object sender, EventArgs e) { public async Task EvaluateAndAssert(string rScript, VariableExpectation expectation) { await EvaluateAsync(rScript); - var children = await GlobalEnvironment.GetChildrenAsync(); + var children = await _globalEnv.GetChildrenAsync(); // must contain one and only expectation in result var evaluation = children.First(v => v.Name == expectation.Name); diff --git a/src/Package/Test/Microsoft.VisualStudio.R.Package.Test.csproj b/src/Package/Test/Microsoft.VisualStudio.R.Package.Test.csproj index 3d8c9f81c..ac62441a3 100644 --- a/src/Package/Test/Microsoft.VisualStudio.R.Package.Test.csproj +++ b/src/Package/Test/Microsoft.VisualStudio.R.Package.Test.csproj @@ -149,6 +149,10 @@ {fc4aad0a-13b9-49ee-a59c-f03142958170} Microsoft.Common.Core.Test + + {17e155bf-351c-4253-b9b1-36eeea35fe3c} + Microsoft.R.Debugger + {e09d3bda-2e6b-47b5-87ac-b6fc2d33dfab} Microsoft.R.Host.Client diff --git a/src/Package/TestApp/Data/VariableExplorerTest.cs b/src/Package/TestApp/Data/VariableExplorerTest.cs index 082078352..ea9e98193 100644 --- a/src/Package/TestApp/Data/VariableExplorerTest.cs +++ b/src/Package/TestApp/Data/VariableExplorerTest.cs @@ -38,7 +38,7 @@ public void VariableExplorer_ConstructorTest02() { } } - [Test] + [Test(Skip = "UIThreadHelper and TetVsAppShell has different main thread")] [Category.Interactive] public void VariableExplorer_SimpleDataTest() { string actual = null; From 2be2c2b6d9faef9cf8554d7565cd05c60630c1a7 Mon Sep 17 00:00:00 2001 From: Pavel Minaev Date: Thu, 21 Jan 2016 13:14:27 -0800 Subject: [PATCH 052/289] Fix #673: Sourcing a file more than once with debugger attached results in strange behavior Use safe_eval instead of eval in debug_source to avoid problems with debug flag being set on parent environment. Fix #675: bkpoints are hit even after Debug/Disable bkpoints Propagate Enable() calls from pending breakpoint to its child bound breakpoint, since VS doesn't do so automatically. --- src/Debugger/Engine/Impl/AD7PendingBreakpoint.cs | 4 ++++ src/Debugger/Impl/rtvs/R/breakpoints.R | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Debugger/Engine/Impl/AD7PendingBreakpoint.cs b/src/Debugger/Engine/Impl/AD7PendingBreakpoint.cs index 0e42c8bbc..71d9d13dc 100644 --- a/src/Debugger/Engine/Impl/AD7PendingBreakpoint.cs +++ b/src/Debugger/Engine/Impl/AD7PendingBreakpoint.cs @@ -79,6 +79,10 @@ int IDebugPendingBreakpoint2.Enable(int fEnable) { return VSConstants.E_FAIL; } + if (_boundBreakpoint != null) { + Marshal.ThrowExceptionForHR(((IDebugBoundBreakpoint2)_boundBreakpoint).Enable(fEnable)); + } + _state = fEnable == 0 ? enum_PENDING_BP_STATE.PBPS_DISABLED : enum_PENDING_BP_STATE.PBPS_ENABLED; return VSConstants.S_OK; } diff --git a/src/Debugger/Impl/rtvs/R/breakpoints.R b/src/Debugger/Impl/rtvs/R/breakpoints.R index 59f27a772..6c1c01782 100644 --- a/src/Debugger/Impl/rtvs/R/breakpoints.R +++ b/src/Debugger/Impl/rtvs/R/breakpoints.R @@ -241,5 +241,5 @@ debug_parse <- function(filename, encoding = getOption('encoding')) { } debug_source <- function(file, encoding = getOption('encoding')) { - eval.parent(debug_parse(file, encoding)) + safe_eval(debug_parse(file, encoding), parent.frame(1)) } From f1d25a1e830fce2e34fd5953a618626742cd540c Mon Sep 17 00:00:00 2001 From: Pavel Minaev Date: Thu, 21 Jan 2016 13:37:15 -0800 Subject: [PATCH 053/289] Update R-Host submodule. --- src/Host/Process | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Host/Process b/src/Host/Process index c8358b5f7..fbe31796b 160000 --- a/src/Host/Process +++ b/src/Host/Process @@ -1 +1 @@ -Subproject commit c8358b5f77260bac9ba11d296cdab11c15b26f8f +Subproject commit fbe31796b33318e0c9b376b5f7122014997c5385 From 2197440f4b35089d299ebcd378aef1ae7821abf7 Mon Sep 17 00:00:00 2001 From: MikhailArkhipov Date: Thu, 21 Jan 2016 13:48:46 -0800 Subject: [PATCH 054/289] Custom action for setup to import DS profile --- .../Microsoft.VisualStudio.R.Package.csproj | 5 + src/Package/Impl/RCombined.vssettings | 754 +++++++++ src/Setup/Product.wxs | 10 +- src/Setup/Profiles.wxi | 3 +- src/Setup/Setup.wixproj | 8 + src/SetupCustomActions/CustomAction.cs | 59 +- .../DSProfilePromptForm.Designer.cs | 46 +- src/SetupCustomActions/DSProfilePromptForm.cs | 22 +- .../DSProfilePromptForm.resx | 1403 +++++++++++++++++ src/SetupCustomActions/DSProfileScreen.png | Bin 63961 -> 83921 bytes src/SetupCustomActions/Resources.Designer.cs | 10 + src/SetupCustomActions/Resources.resx | 4 + 12 files changed, 2294 insertions(+), 30 deletions(-) create mode 100644 src/Package/Impl/RCombined.vssettings diff --git a/src/Package/Impl/Microsoft.VisualStudio.R.Package.csproj b/src/Package/Impl/Microsoft.VisualStudio.R.Package.csproj index 829db094a..b96218fb5 100644 --- a/src/Package/Impl/Microsoft.VisualStudio.R.Package.csproj +++ b/src/Package/Impl/Microsoft.VisualStudio.R.Package.csproj @@ -649,6 +649,11 @@ + + Designer + PreserveNewest + true + Designer PreserveNewest diff --git a/src/Package/Impl/RCombined.vssettings b/src/Package/Impl/RCombined.vssettings new file mode 100644 index 000000000..e48bfc8a7 --- /dev/null +++ b/src/Package/Impl/RCombined.vssettings @@ -0,0 +1,754 @@ + + + + + + + + 4 + true + true + true + true + 2 + true + false + false + false + false + true + true + false + true + true + true + 58 + true + false + 4 + true + true + true + true + + + + + + True + False + True + True + True + True + False + False + True + False + + + + + + + + + + + + 7 + Design|Debug|NoToolWin + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 14.0.0.0 + + + + + + + + Ctrl+Alt+S + Ctrl+W + Ctrl+Shift+W + Ctrl+Shift+J + Ctrl+Shift+A + Ctrl+Shift+C + Ctrl+Shift+U + Alt+O + Alt+Shift+O + Alt+L + Alt+Shift+L + Ctrl+Alt+F12 + Ctrl+Alt+F11 + Ctrl+Shift+S + Ctrl+2 + Ctrl+3 + Ctrl+4 + Ctrl+5 + Ctrl+6 + + Ctrl+8 + Ctrl+L + Ctrl+Shift+F10 + + + + + \ No newline at end of file diff --git a/src/Setup/Product.wxs b/src/Setup/Product.wxs index a0e29654f..e49a9fe4a 100644 --- a/src/Setup/Product.wxs +++ b/src/Setup/Product.wxs @@ -61,6 +61,10 @@ ExeCommand='[CommonIdeFolder]devenv.exe /InstallVSTemplates' Return='ignore'/> + + - - - + + NOT Installed @@ -126,7 +129,6 @@ - diff --git a/src/Setup/Profiles.wxi b/src/Setup/Profiles.wxi index 1f40fdc5a..488eae939 100644 --- a/src/Setup/Profiles.wxi +++ b/src/Setup/Profiles.wxi @@ -1,8 +1,9 @@ - + + diff --git a/src/Setup/Setup.wixproj b/src/Setup/Setup.wixproj index faf3fa384..3036d970a 100644 --- a/src/Setup/Setup.wixproj +++ b/src/Setup/Setup.wixproj @@ -59,6 +59,14 @@ + + Microsoft.VisualStudio.R.Package + {26035fe3-25ab-45ec-bb45-7fd0b6c1d545} + True + True + Binaries;Content;Satellites + INSTALLFOLDER + SetupCustomActions {f2149709-a88b-4f36-abca-307ca96e9fd1} diff --git a/src/SetupCustomActions/CustomAction.cs b/src/SetupCustomActions/CustomAction.cs index eb97bfc0b..470fa3c7a 100644 --- a/src/SetupCustomActions/CustomAction.cs +++ b/src/SetupCustomActions/CustomAction.cs @@ -1,15 +1,62 @@ -using System.Windows.Forms; +using System; +using System.Diagnostics; +using System.Globalization; +using System.IO; +using System.Windows.Forms; using Microsoft.Deployment.WindowsInstaller; namespace SetupCustomActions { public class CustomActions { [CustomAction] public static ActionResult DSProfilePromptAction(Session session) { - session.Log("Begin DSProfilePromptAction"); - var form = new DSProfilePromptForm(); - DialogResult result = form.ShowDialog(); - //MessageBox.Show("Would you like to set Data Scientist profile?", "R Tools for Visual Studio"); - return ActionResult.Success; + ActionResult actionResult = ActionResult.Success; + DialogResult result = DialogResult.No; + string exceptionMessage = null; + bool resetKeyboard = false; + + MessageBox.Show("Custom Action", "Begin!"); + session.Log("Begin Data Science profile import action"); + + string ideFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86), @"Microsoft Visual Studio 14.0\Common7\IDE\"); + string installFolder = Path.Combine(ideFolder, @"Extensions\Microsoft\R Tools for Visual Studio\"); + + using (var form = new DSProfilePromptForm()) { + result = form.ShowDialog(); + if (result == DialogResult.No) { + session.Log("User said NO"); + actionResult = ActionResult.NotExecuted; + } + resetKeyboard = form.ResetKeyboardShortcuts; + } + + if (result == DialogResult.Yes && actionResult == ActionResult.Success) { + try { + session.Log("Begin importing window layout"); + string settingsFilePath = Path.Combine(installFolder, resetKeyboard ? "RCombined.vssettings" : "R.vssettings"); + + ProcessStartInfo psi = new ProcessStartInfo(); + psi.FileName = Path.Combine(ideFolder, "devenv.exe"); + psi.Arguments = string.Format(CultureInfo.InvariantCulture, "/ResetSettings \"{0}\"", settingsFilePath); + Process.Start(psi); + actionResult = ActionResult.Success; + } catch (Exception ex) { + exceptionMessage = ex.Message; + actionResult = ActionResult.Failure; + } + } + + if (!string.IsNullOrEmpty(exceptionMessage)) { + session.Log("Data Science profile import action failed. Exception: {0}", exceptionMessage); + } + + session.Log("End Data Science profile import action"); + return actionResult; + } + + private static ActionResult RunVs(Session session, string ideFolder, string settingsFilePath) { + ActionResult result = ActionResult.Success; + + return result; } } } diff --git a/src/SetupCustomActions/DSProfilePromptForm.Designer.cs b/src/SetupCustomActions/DSProfilePromptForm.Designer.cs index 5e1f2bda4..320b591d9 100644 --- a/src/SetupCustomActions/DSProfilePromptForm.Designer.cs +++ b/src/SetupCustomActions/DSProfilePromptForm.Designer.cs @@ -28,42 +28,48 @@ private void InitializeComponent() { this.buttonNo = new System.Windows.Forms.Button(); this.pictureBox1 = new System.Windows.Forms.PictureBox(); this.PromptText = new System.Windows.Forms.Label(); + this.resetKeyboard = new System.Windows.Forms.CheckBox(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); this.SuspendLayout(); // // buttonYes // this.buttonYes.BackColor = System.Drawing.Color.Black; + this.buttonYes.DialogResult = System.Windows.Forms.DialogResult.Yes; this.buttonYes.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.buttonYes.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); this.buttonYes.ForeColor = System.Drawing.Color.Silver; - this.buttonYes.Location = new System.Drawing.Point(22, 437); + this.buttonYes.Location = new System.Drawing.Point(344, 415); this.buttonYes.Name = "buttonYes"; this.buttonYes.Size = new System.Drawing.Size(86, 30); this.buttonYes.TabIndex = 0; this.buttonYes.Text = "Yes"; this.buttonYes.UseVisualStyleBackColor = false; + this.buttonYes.Click += new System.EventHandler(this.buttonYes_Click); // // buttonNo // this.buttonNo.BackColor = System.Drawing.Color.Black; + this.buttonNo.DialogResult = System.Windows.Forms.DialogResult.No; this.buttonNo.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.buttonNo.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); this.buttonNo.ForeColor = System.Drawing.Color.Silver; - this.buttonNo.Location = new System.Drawing.Point(132, 437); + this.buttonNo.Location = new System.Drawing.Point(465, 415); this.buttonNo.Name = "buttonNo"; this.buttonNo.Size = new System.Drawing.Size(89, 30); this.buttonNo.TabIndex = 1; this.buttonNo.Text = "No"; this.buttonNo.UseVisualStyleBackColor = false; + this.buttonNo.Click += new System.EventHandler(this.buttonNo_Click); // // pictureBox1 // - this.pictureBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image"))); this.pictureBox1.InitialImage = ((System.Drawing.Image)(resources.GetObject("pictureBox1.InitialImage"))); - this.pictureBox1.Location = new System.Drawing.Point(22, 29); + this.pictureBox1.Location = new System.Drawing.Point(18, 18); this.pictureBox1.Name = "pictureBox1"; - this.pictureBox1.Size = new System.Drawing.Size(465, 328); + this.pictureBox1.Size = new System.Drawing.Size(536, 328); + this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; this.pictureBox1.TabIndex = 2; this.pictureBox1.TabStop = false; // @@ -72,25 +78,42 @@ private void InitializeComponent() { this.PromptText.AutoSize = true; this.PromptText.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); this.PromptText.ForeColor = System.Drawing.Color.Silver; - this.PromptText.Location = new System.Drawing.Point(19, 370); + this.PromptText.Location = new System.Drawing.Point(15, 365); this.PromptText.Name = "PromptText"; - this.PromptText.Size = new System.Drawing.Size(408, 51); + this.PromptText.Size = new System.Drawing.Size(518, 34); this.PromptText.TabIndex = 3; - this.PromptText.Text = "Data Scientist profile provides window layout and keyboard shorcuts\r\nsimilar to R" + - "Studio. Would you like setup to apply this profile to \r\nthe Visual Studio?"; + this.PromptText.Text = "Data Scientist profile provides window layout and keyboard shorcuts similar to RS" + + "tudio.\r\nWould you like setup to apply this profile to the Visual Studio?"; + // + // resetKeyboard + // + this.resetKeyboard.AutoSize = true; + this.resetKeyboard.Checked = true; + this.resetKeyboard.CheckState = System.Windows.Forms.CheckState.Checked; + this.resetKeyboard.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.resetKeyboard.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.resetKeyboard.ForeColor = System.Drawing.Color.Silver; + this.resetKeyboard.Location = new System.Drawing.Point(18, 420); + this.resetKeyboard.Name = "resetKeyboard"; + this.resetKeyboard.Size = new System.Drawing.Size(172, 21); + this.resetKeyboard.TabIndex = 4; + this.resetKeyboard.Text = "Reset keyboard shortcuts"; + this.resetKeyboard.UseVisualStyleBackColor = true; + this.resetKeyboard.CheckedChanged += new System.EventHandler(this.resetKeyboard_CheckedChanged); // // DSProfilePromptForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.BackColor = System.Drawing.Color.Black; - this.ClientSize = new System.Drawing.Size(517, 489); + this.ClientSize = new System.Drawing.Size(574, 464); + this.Controls.Add(this.resetKeyboard); this.Controls.Add(this.PromptText); this.Controls.Add(this.pictureBox1); this.Controls.Add(this.buttonNo); this.Controls.Add(this.buttonYes); this.Name = "DSProfilePromptForm"; - this.Text = "DSProfilePromptForm"; + this.Text = "R Tools for Visual Studio"; ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); this.ResumeLayout(false); this.PerformLayout(); @@ -103,5 +126,6 @@ private void InitializeComponent() { private System.Windows.Forms.Button buttonNo; private System.Windows.Forms.PictureBox pictureBox1; private System.Windows.Forms.Label PromptText; + private System.Windows.Forms.CheckBox resetKeyboard; } } \ No newline at end of file diff --git a/src/SetupCustomActions/DSProfilePromptForm.cs b/src/SetupCustomActions/DSProfilePromptForm.cs index ba479daa1..04ed3f737 100644 --- a/src/SetupCustomActions/DSProfilePromptForm.cs +++ b/src/SetupCustomActions/DSProfilePromptForm.cs @@ -1,21 +1,27 @@ using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using System.Windows.Forms; namespace SetupCustomActions { public partial class DSProfilePromptForm : Form { + public bool ResetKeyboardShortcuts { get; private set; } = true; + public DSProfilePromptForm() { InitializeComponent(); + this.CenterToScreen(); + } + + private void buttonYes_Click(object sender, EventArgs e) { + this.DialogResult = DialogResult.Yes; + this.Close(); } - private void label1_Click(object sender, EventArgs e) { + private void buttonNo_Click(object sender, EventArgs e) { + this.DialogResult = DialogResult.No; + this.Close(); + } + private void resetKeyboard_CheckedChanged(object sender, EventArgs e) { + this.ResetKeyboardShortcuts = this.resetKeyboard.Checked; } } } diff --git a/src/SetupCustomActions/DSProfilePromptForm.resx b/src/SetupCustomActions/DSProfilePromptForm.resx index 610480d31..0f7402a4e 100644 --- a/src/SetupCustomActions/DSProfilePromptForm.resx +++ b/src/SetupCustomActions/DSProfilePromptForm.resx @@ -118,6 +118,1409 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 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 + YZjd/uZv/P+v10r1Tg6lZAAAAABJRU5ErkJggg== + + iVBORw0KGgoAAAANSUhEUgAAA4EAAALPCAIAAABT7VIzAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO diff --git a/src/SetupCustomActions/DSProfileScreen.png b/src/SetupCustomActions/DSProfileScreen.png index 72f9d620659ca4f19f3eb5d9bf3a010174db560a..a777e27f0ec2828e4a571d78fb1257d358000baa 100644 GIT binary patch literal 83921 zcmce;by$>L^frnCD5EqClF~hdvR@<8{| zedIf@-s9XNf82vAONyeD4U%pmFCLn{mVb?cQW*)jGC)OMKYlNz2}MD{Y`^=y*KJ$y z4h7{lS6ckFs*CRSwR?rJhUZe~3B_r8y;`AantgGDq*#Ym$}&5@b7>ZP@ym42_Y+)p-b5)|A0&eP@b%q`O9o7OCXa%^=npJJh2Hx+ z(wc3>W1Kk7fzt7k7zNftDq^rNyn>x1N269Iqccvvb|?tT3;L&sME)+Wjh z{EAO1>~-~O&vmH$_M%+RaYC&-0x1t~^RnVwBt1+so%aA#y*EtY#<#obET5lUsz z{HqZtA!#h3Y1&5YHyow`R1%{6iWJe6$2X#J5oT^9z9%^+=Fta@iTg$wX93bvT8V;( z7xxc!yL(9%_k*Sy5!~Jv`QBTRtX*QR1D02K2t zd$oGkIL9gY7DFt2u(p48*1B%@;ZHiNB?b<~&{q*+5< z0VgxDv5&PaSmlUaPwy*Rmsa7}9ZzVqAh^qC78Z`XxthAkvr~Cn&IfK>sxlxh2eRHl z#8>6z*N)Coj|Fo2-+t1T7lSFZmR}G1;&oH3*J*0Jmc#q>1J=%cA@@6_2hpwOL$#9wWL%?QZ0Z-uvj@BE^S6yp79O=SL1_(?*fkUA9+f zYY^}2<1!SEx6s!=_y(pR&n3Jw%d14TOhF%Yk92Gs f^S4cw)dkGM}4b!_s+Hsdy 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 - @@ -69,7 +69,7 @@ BinaryKey='DSProfilePromptCA' DllEntry='DSProfilePromptAction' Execute="deferred" - Return='ignore'/> + Return='ignore'/>--> Updating Visual Studio project templates... (this may take a few minutes). @@ -78,7 +78,7 @@ - NOT Installed + From 27a0f01645ea9e0bc0c26fc488ae07580e3b96f0 Mon Sep 17 00:00:00 2001 From: MikhailArkhipov Date: Thu, 21 Jan 2016 14:04:29 -0800 Subject: [PATCH 056/289] Add versioning and proper binary locations --- src/R.sln | 21 ++++++---- .../SetupCustomActions.csproj | 42 ++++++++++--------- 2 files changed, 35 insertions(+), 28 deletions(-) diff --git a/src/R.sln b/src/R.sln index 87196526d..8d748f80c 100644 --- a/src/R.sln +++ b/src/R.sln @@ -515,15 +515,18 @@ Global {130C9240-9537-42D4-A62C-2A13815F0020}.Release|x64.Build.0 = Release|Any CPU {130C9240-9537-42D4-A62C-2A13815F0020}.Release|x86.ActiveCfg = Release|Any CPU {130C9240-9537-42D4-A62C-2A13815F0020}.Release|x86.Build.0 = Release|Any CPU - {F2149709-A88B-4F36-ABCA-307CA96E9FD1}.Debug|Any CPU.ActiveCfg = Debug|x86 - {F2149709-A88B-4F36-ABCA-307CA96E9FD1}.Debug|Any CPU.Build.0 = Debug|x86 - {F2149709-A88B-4F36-ABCA-307CA96E9FD1}.Debug|x64.ActiveCfg = Debug|x86 - {F2149709-A88B-4F36-ABCA-307CA96E9FD1}.Debug|x86.ActiveCfg = Debug|x86 - {F2149709-A88B-4F36-ABCA-307CA96E9FD1}.Debug|x86.Build.0 = Debug|x86 - {F2149709-A88B-4F36-ABCA-307CA96E9FD1}.Release|Any CPU.ActiveCfg = Release|x86 - {F2149709-A88B-4F36-ABCA-307CA96E9FD1}.Release|x64.ActiveCfg = Release|x86 - {F2149709-A88B-4F36-ABCA-307CA96E9FD1}.Release|x86.ActiveCfg = Release|x86 - {F2149709-A88B-4F36-ABCA-307CA96E9FD1}.Release|x86.Build.0 = Release|x86 + {F2149709-A88B-4F36-ABCA-307CA96E9FD1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F2149709-A88B-4F36-ABCA-307CA96E9FD1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F2149709-A88B-4F36-ABCA-307CA96E9FD1}.Debug|x64.ActiveCfg = Debug|Any CPU + {F2149709-A88B-4F36-ABCA-307CA96E9FD1}.Debug|x64.Build.0 = Debug|Any CPU + {F2149709-A88B-4F36-ABCA-307CA96E9FD1}.Debug|x86.ActiveCfg = Debug|Any CPU + {F2149709-A88B-4F36-ABCA-307CA96E9FD1}.Debug|x86.Build.0 = Debug|Any CPU + {F2149709-A88B-4F36-ABCA-307CA96E9FD1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F2149709-A88B-4F36-ABCA-307CA96E9FD1}.Release|Any CPU.Build.0 = Release|Any CPU + {F2149709-A88B-4F36-ABCA-307CA96E9FD1}.Release|x64.ActiveCfg = Release|Any CPU + {F2149709-A88B-4F36-ABCA-307CA96E9FD1}.Release|x64.Build.0 = Release|Any CPU + {F2149709-A88B-4F36-ABCA-307CA96E9FD1}.Release|x86.ActiveCfg = Release|Any CPU + {F2149709-A88B-4F36-ABCA-307CA96E9FD1}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/src/SetupCustomActions/SetupCustomActions.csproj b/src/SetupCustomActions/SetupCustomActions.csproj index cf90092de..b07f40e9f 100644 --- a/src/SetupCustomActions/SetupCustomActions.csproj +++ b/src/SetupCustomActions/SetupCustomActions.csproj @@ -1,5 +1,7 @@  + + Debug x86 @@ -14,32 +16,19 @@ 512 $(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.CA.targets - - true - full - false - ..\..\bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - ..\..\bin\Release\ - TRACE - prompt - 4 + + + $(RootDirectory)\obj\ + $(RootDirectory)\bin\ + $(BaseIntermediateOutputPath)\$(Configuration)\$(AssemblyName)\ + $(BaseOutputPath)\$(Configuration)\ - - - True @@ -73,6 +62,21 @@ Resources.Designer.cs + + + Microsoft + StrongName + + + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + \ No newline at end of file From c21378a2becebdf71e6d369936fe368289267a59 Mon Sep 17 00:00:00 2001 From: MikhailArkhipov Date: Thu, 21 Jan 2016 15:06:37 -0800 Subject: [PATCH 057/289] Remove dead code and comment out debug code --- src/SetupCustomActions/CustomAction.cs | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/SetupCustomActions/CustomAction.cs b/src/SetupCustomActions/CustomAction.cs index 470fa3c7a..b71709d9d 100644 --- a/src/SetupCustomActions/CustomAction.cs +++ b/src/SetupCustomActions/CustomAction.cs @@ -14,7 +14,8 @@ public static ActionResult DSProfilePromptAction(Session session) { string exceptionMessage = null; bool resetKeyboard = false; - MessageBox.Show("Custom Action", "Begin!"); + // Uncomment for debugging + //MessageBox.Show("Custom Action", "Begin!"); session.Log("Begin Data Science profile import action"); string ideFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86), @"Microsoft Visual Studio 14.0\Common7\IDE\"); @@ -52,11 +53,5 @@ public static ActionResult DSProfilePromptAction(Session session) { session.Log("End Data Science profile import action"); return actionResult; } - - private static ActionResult RunVs(Session session, string ideFolder, string settingsFilePath) { - ActionResult result = ActionResult.Success; - - return result; - } } } From 5567c9d06a9bb32b0468bee1cda98df854b9042d Mon Sep 17 00:00:00 2001 From: MikhailArkhipov Date: Thu, 21 Jan 2016 15:21:30 -0800 Subject: [PATCH 058/289] Fix #667: Plot window does not appear if plotting for the first time in a VS session --- src/Package/Impl/Plots/PlotHistory.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/Package/Impl/Plots/PlotHistory.cs b/src/Package/Impl/Plots/PlotHistory.cs index 277a0c387..51589e01a 100644 --- a/src/Package/Impl/Plots/PlotHistory.cs +++ b/src/Package/Impl/Plots/PlotHistory.cs @@ -3,6 +3,7 @@ using System.Threading.Tasks; using Microsoft.VisualStudio.R.Package.Plots.Definitions; using Microsoft.VisualStudio.R.Package.Shell; +using Microsoft.VisualStudio.R.Package.Utilities; namespace Microsoft.VisualStudio.R.Package.Plots { [Export(typeof(IPlotHistory))] @@ -25,6 +26,11 @@ public async Task RefreshHistoryInfo() { PlotCount = info.PlotCount; VsAppShell.Current.DispatchOnUIThread(() => { + // We need to push creation of the tool window + // so it appears on the first plot + if (!VsAppShell.Current.IsUnitTestEnvironment) { + ToolWindowUtilities.ShowWindowPane(0, true); + } HistoryChanged?.Invoke(this, EventArgs.Empty); }); } From 758c980de1746e631d32af2c84b84ae8d0b70c01 Mon Sep 17 00:00:00 2001 From: Pavel Minaev Date: Thu, 21 Jan 2016 15:35:19 -0800 Subject: [PATCH 059/289] Update R-Host submodule. --- src/Host/Process | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Host/Process b/src/Host/Process index ac9674ba1..fbe31796b 160000 --- a/src/Host/Process +++ b/src/Host/Process @@ -1 +1 @@ -Subproject commit ac9674ba1d82d7eafceb55b3efea4adb026f4580 +Subproject commit fbe31796b33318e0c9b376b5f7122014997c5385 From 58b73099c4a6ad6fb6923fdfef4d0f36696bbd97 Mon Sep 17 00:00:00 2001 From: MikhailArkhipov Date: Thu, 21 Jan 2016 15:44:38 -0800 Subject: [PATCH 060/289] Fix #676 : Incorrect indent on paste autoformat inside function --- src/R/Editor/Impl/Formatting/FormatOnPasteCommand.cs | 2 ++ src/R/Editor/Impl/SmartIndent/SmartIndenter.cs | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/R/Editor/Impl/Formatting/FormatOnPasteCommand.cs b/src/R/Editor/Impl/Formatting/FormatOnPasteCommand.cs index 4cf33b96c..864e022a1 100644 --- a/src/R/Editor/Impl/Formatting/FormatOnPasteCommand.cs +++ b/src/R/Editor/Impl/Formatting/FormatOnPasteCommand.cs @@ -52,6 +52,8 @@ public override CommandResult Invoke(Guid group, int id, object inputArg, ref ob if (document != null) { int insertionPoint = targetSpan.Start; targetSpan.Snapshot.TextBuffer.Replace(targetSpan, text); + document.EditorTree.EnsureTreeReady(); + RangeFormatter.FormatRange(TextView, targetSpan.Snapshot.TextBuffer, new TextRange(insertionPoint, text.Length), document.EditorTree.AstRoot, REditorSettings.FormatOptions); } } diff --git a/src/R/Editor/Impl/SmartIndent/SmartIndenter.cs b/src/R/Editor/Impl/SmartIndent/SmartIndenter.cs index 32a39beb0..28f324691 100644 --- a/src/R/Editor/Impl/SmartIndent/SmartIndenter.cs +++ b/src/R/Editor/Impl/SmartIndent/SmartIndenter.cs @@ -99,7 +99,7 @@ public static int GetSmartIndent(ITextSnapshotLine line, AstRoot ast = null) { ITextSnapshotLine prevLine = line.Snapshot.GetLineFromLineNumber(line.LineNumber - 1); string prevLineText = prevLine.GetText(); - int nonWsPosition = prevLine.Start + (prevLineText.Length - prevLineText.TrimStart().Length) + 1; + int nonWsPosition = prevLine.Start + prevLineText.Length - prevLineText.TrimStart().Length; IAstNodeWithScope scopeStatement = ast.GetNodeOfTypeFromPosition(nonWsPosition); if (scopeStatement != null) { From cb7d4e1bc998fb1b3ccefef5d1b2063d3c00e009 Mon Sep 17 00:00:00 2001 From: JeongPyoHam Date: Thu, 21 Jan 2016 15:54:43 -0800 Subject: [PATCH 061/289] Truncate grandchildren in variable explorere as well as intellisense --- .../Impl/DataInspect/EvaluationWrapper.cs | 10 ++++------ .../Impl/DataInspect/VariableGridHost.xaml.cs | 2 +- .../Impl/DataInspect/VariableView.xaml.cs | 2 +- .../Test/DataInspect/EvaluationWrapperTest.cs | 16 ++++++++++++++++ .../Test/DataInspect/VariableRHostScript.cs | 8 +++++++- src/R/Editor/Impl/Data/RSessionDataObject.cs | 19 +++++++++++++++---- 6 files changed, 44 insertions(+), 13 deletions(-) diff --git a/src/Package/Impl/DataInspect/EvaluationWrapper.cs b/src/Package/Impl/DataInspect/EvaluationWrapper.cs index aa9365d08..140cb7ea5 100644 --- a/src/Package/Impl/DataInspect/EvaluationWrapper.cs +++ b/src/Package/Impl/DataInspect/EvaluationWrapper.cs @@ -28,13 +28,11 @@ internal sealed class EvaluationWrapper : RSessionDataObject, IIndexedItem { ///

/// R session's evaluation result /// true to truncate children returned by GetChildrenAsync - public EvaluationWrapper(int index, DebugEvaluationResult evaluation, bool truncateChildren) : - base(evaluation) { + public EvaluationWrapper(DebugEvaluationResult evaluation, int index = -1, int? maxChildrenCount = null) : + base(evaluation, maxChildrenCount) { Index = index; - _truncateChildren = truncateChildren; - CanShowDetail = ComputeDetailAvailability(DebugEvaluation as DebugValueEvaluationResult); if (CanShowDetail) { ShowDetailCommand = new DelegateCommand(ShowVariableGridWindowPane, (o) => CanShowDetail); @@ -84,11 +82,11 @@ protected override async Task> GetChildrenAsy DebugEvaluationResultFields.Repr | DebugEvaluationResultFields.ReprStr; // assumption: DebugEvaluationResult returns children in ascending order - IReadOnlyList children = await valueEvaluation.GetChildrenAsync(fields, _truncateChildren ? (int?)20 : null, 100); // TODO: consider exception propagation such as OperationCanceledException + IReadOnlyList children = await valueEvaluation.GetChildrenAsync(fields, MaxChildrenCount, 100); result = new List(); for (int i = 0; i < children.Count; i++) { - result.Add(new EvaluationWrapper(i, children[i], _truncateChildren)); + result.Add(new EvaluationWrapper(children[i], i, DefaultMaxGrandChildren)); } if (valueEvaluation.Length > result.Count) { diff --git a/src/Package/Impl/DataInspect/VariableGridHost.xaml.cs b/src/Package/Impl/DataInspect/VariableGridHost.xaml.cs index 2ce1b70be..a29c5b2cb 100644 --- a/src/Package/Impl/DataInspect/VariableGridHost.xaml.cs +++ b/src/Package/Impl/DataInspect/VariableGridHost.xaml.cs @@ -45,7 +45,7 @@ private void SubscribeAction(DebugEvaluationResult evaluation) { return; } - var wrapper = new EvaluationWrapper(-1, evaluation, true); + var wrapper = new EvaluationWrapper(evaluation); if (wrapper.Dimensions.Count != 2) { // the same evaluation changed to non-matrix diff --git a/src/Package/Impl/DataInspect/VariableView.xaml.cs b/src/Package/Impl/DataInspect/VariableView.xaml.cs index 4b9118069..104d47e15 100644 --- a/src/Package/Impl/DataInspect/VariableView.xaml.cs +++ b/src/Package/Impl/DataInspect/VariableView.xaml.cs @@ -49,7 +49,7 @@ private void RootTreeGrid_Sorting(object sender, DataGridSortingEventArgs e) { } private void OnGlobalEnvironmentEvaluation(DebugEvaluationResult result) { - var wrapper = new EvaluationWrapper(-1, result, false); + var wrapper = new EvaluationWrapper(result); var rootNodeModel = new VariableNode(wrapper); diff --git a/src/Package/Test/DataInspect/EvaluationWrapperTest.cs b/src/Package/Test/DataInspect/EvaluationWrapperTest.cs index bfcf0dc99..8d2617308 100644 --- a/src/Package/Test/DataInspect/EvaluationWrapperTest.cs +++ b/src/Package/Test/DataInspect/EvaluationWrapperTest.cs @@ -1,4 +1,5 @@ using System.Diagnostics.CodeAnalysis; +using System.Linq; using System.Threading.Tasks; using FluentAssertions; using Microsoft.UnitTests.Core.XUnit; @@ -78,6 +79,21 @@ public Task ListTest() { return RunTest(listTestData); } + [Test] + [Category.Variable.Explorer] + public async Task TruncateGrandChildrenTest() { + using (var hostScript = new VariableRHostScript()) { + await hostScript.EvaluateAsync("x.truncate.children<-1:100"); + var children = await hostScript.GlobalEnvrionment.GetChildrenAsync(); + var child = children.First(c => c.Name == "x.truncate.children"); + + var grandChildren = await child.GetChildrenAsync(); + + grandChildren.Count.ShouldBeEquivalentTo(21); // truncate 20 + ellipsis + grandChildren[20].Value.ShouldBeEquivalentTo(Resources.VariableExplorer_Truncated); + } + } + private static async Task RunTest(object[,] testData) { using (var hostScript = new VariableRHostScript()) { int testCount = testData.GetLength(0); diff --git a/src/Package/Test/DataInspect/VariableRHostScript.cs b/src/Package/Test/DataInspect/VariableRHostScript.cs index c020fa9e4..f00773f65 100644 --- a/src/Package/Test/DataInspect/VariableRHostScript.cs +++ b/src/Package/Test/DataInspect/VariableRHostScript.cs @@ -41,8 +41,14 @@ public VariableRHostScript() : DoIdle(100); } + public EvaluationWrapper GlobalEnvrionment { + get { + return _globalEnv; + } + } + private void OnGlobalEnvironmentEvaluated(DebugEvaluationResult result) { - _globalEnv = new EvaluationWrapper(-1, result, false); + _globalEnv = new EvaluationWrapper(result); _mre.Set(); } diff --git a/src/R/Editor/Impl/Data/RSessionDataObject.cs b/src/R/Editor/Impl/Data/RSessionDataObject.cs index c81674c4b..277964534 100644 --- a/src/R/Editor/Impl/Data/RSessionDataObject.cs +++ b/src/R/Editor/Impl/Data/RSessionDataObject.cs @@ -19,13 +19,18 @@ public class RSessionDataObject : IRSessionDataObject { private readonly object syncObj = new object(); private Task> _getChildrenTask = null; - protected RSessionDataObject() { } + protected const int DefaultMaxReprLength = 100; + protected const int DefaultMaxGrandChildren = 20; + + protected RSessionDataObject() { + MaxReprLength = DefaultMaxReprLength; + } /// /// Create new instance of /// /// R session's evaluation result - public RSessionDataObject(DebugEvaluationResult evaluation) { + public RSessionDataObject(DebugEvaluationResult evaluation, int? maxChildrenCount = null) : this() { DebugEvaluation = evaluation; Name = DebugEvaluation.Name?.TrimStart(NameTrimChars); @@ -42,8 +47,14 @@ public RSessionDataObject(DebugEvaluationResult evaluation) { Dimensions = valueEvaluation.Dim ?? new List(); } + + MaxChildrenCount = maxChildrenCount; } + protected int? MaxChildrenCount { get; set; } + + protected int MaxReprLength { get; set; } + protected DebugEvaluationResult DebugEvaluation { get; } public Task> GetChildrenAsync() { @@ -74,7 +85,7 @@ protected virtual async Task> GetChildrenAsyn DebugEvaluationResultFields.Repr | DebugEvaluationResultFields.ReprStr; // assumption: DebugEvaluationResult returns children in ascending order - IReadOnlyList children = await valueEvaluation.GetChildrenAsync(fields, null, 100); // TODO: consider exception propagation such as OperationCanceledException + IReadOnlyList children = await valueEvaluation.GetChildrenAsync(fields, MaxChildrenCount, MaxReprLength); result = EvaluateChildren(children); } @@ -84,7 +95,7 @@ protected virtual async Task> GetChildrenAsyn protected virtual List EvaluateChildren(IReadOnlyList children) { var result = new List(); for (int i = 0; i < children.Count; i++) { - result.Add(new RSessionDataObject(children[i])); + result.Add(new RSessionDataObject(children[i], DefaultMaxGrandChildren)); } return result; } From 6ff117361ecdc15d70ff8bb739d75093429aa923 Mon Sep 17 00:00:00 2001 From: MikhailArkhipov Date: Thu, 21 Jan 2016 15:55:22 -0800 Subject: [PATCH 062/289] Update working per comments --- .../DSProfilePromptForm.Designer.cs | 43 +++++++++---------- src/SetupCustomActions/DSProfilePromptForm.cs | 4 +- .../DSProfilePromptForm.resx | 6 +++ 3 files changed, 28 insertions(+), 25 deletions(-) diff --git a/src/SetupCustomActions/DSProfilePromptForm.Designer.cs b/src/SetupCustomActions/DSProfilePromptForm.Designer.cs index 320b591d9..318a862f1 100644 --- a/src/SetupCustomActions/DSProfilePromptForm.Designer.cs +++ b/src/SetupCustomActions/DSProfilePromptForm.Designer.cs @@ -28,7 +28,7 @@ private void InitializeComponent() { this.buttonNo = new System.Windows.Forms.Button(); this.pictureBox1 = new System.Windows.Forms.PictureBox(); this.PromptText = new System.Windows.Forms.Label(); - this.resetKeyboard = new System.Windows.Forms.CheckBox(); + this.keepShortcuts = new System.Windows.Forms.CheckBox(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); this.SuspendLayout(); // @@ -39,7 +39,7 @@ private void InitializeComponent() { this.buttonYes.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.buttonYes.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); this.buttonYes.ForeColor = System.Drawing.Color.Silver; - this.buttonYes.Location = new System.Drawing.Point(344, 415); + this.buttonYes.Location = new System.Drawing.Point(344, 426); this.buttonYes.Name = "buttonYes"; this.buttonYes.Size = new System.Drawing.Size(86, 30); this.buttonYes.TabIndex = 0; @@ -54,7 +54,7 @@ private void InitializeComponent() { this.buttonNo.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.buttonNo.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); this.buttonNo.ForeColor = System.Drawing.Color.Silver; - this.buttonNo.Location = new System.Drawing.Point(465, 415); + this.buttonNo.Location = new System.Drawing.Point(465, 426); this.buttonNo.Name = "buttonNo"; this.buttonNo.Size = new System.Drawing.Size(89, 30); this.buttonNo.TabIndex = 1; @@ -80,34 +80,31 @@ private void InitializeComponent() { this.PromptText.ForeColor = System.Drawing.Color.Silver; this.PromptText.Location = new System.Drawing.Point(15, 365); this.PromptText.Name = "PromptText"; - this.PromptText.Size = new System.Drawing.Size(518, 34); + this.PromptText.Size = new System.Drawing.Size(492, 51); this.PromptText.TabIndex = 3; - this.PromptText.Text = "Data Scientist profile provides window layout and keyboard shorcuts similar to RS" + - "tudio.\r\nWould you like setup to apply this profile to the Visual Studio?"; + this.PromptText.Text = resources.GetString("PromptText.Text"); // - // resetKeyboard + // keepShortcuts // - this.resetKeyboard.AutoSize = true; - this.resetKeyboard.Checked = true; - this.resetKeyboard.CheckState = System.Windows.Forms.CheckState.Checked; - this.resetKeyboard.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.resetKeyboard.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); - this.resetKeyboard.ForeColor = System.Drawing.Color.Silver; - this.resetKeyboard.Location = new System.Drawing.Point(18, 420); - this.resetKeyboard.Name = "resetKeyboard"; - this.resetKeyboard.Size = new System.Drawing.Size(172, 21); - this.resetKeyboard.TabIndex = 4; - this.resetKeyboard.Text = "Reset keyboard shortcuts"; - this.resetKeyboard.UseVisualStyleBackColor = true; - this.resetKeyboard.CheckedChanged += new System.EventHandler(this.resetKeyboard_CheckedChanged); + this.keepShortcuts.AutoSize = true; + this.keepShortcuts.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.keepShortcuts.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.keepShortcuts.ForeColor = System.Drawing.Color.Silver; + this.keepShortcuts.Location = new System.Drawing.Point(18, 430); + this.keepShortcuts.Name = "keepShortcuts"; + this.keepShortcuts.Size = new System.Drawing.Size(281, 21); + this.keepShortcuts.TabIndex = 4; + this.keepShortcuts.Text = "Keep existing keyboard shotcuts unchanged"; + this.keepShortcuts.UseVisualStyleBackColor = true; + this.keepShortcuts.CheckedChanged += new System.EventHandler(this.keepShorcuts_CheckedChanged); // // DSProfilePromptForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.BackColor = System.Drawing.Color.Black; - this.ClientSize = new System.Drawing.Size(574, 464); - this.Controls.Add(this.resetKeyboard); + this.ClientSize = new System.Drawing.Size(574, 476); + this.Controls.Add(this.keepShortcuts); this.Controls.Add(this.PromptText); this.Controls.Add(this.pictureBox1); this.Controls.Add(this.buttonNo); @@ -126,6 +123,6 @@ private void InitializeComponent() { private System.Windows.Forms.Button buttonNo; private System.Windows.Forms.PictureBox pictureBox1; private System.Windows.Forms.Label PromptText; - private System.Windows.Forms.CheckBox resetKeyboard; + private System.Windows.Forms.CheckBox keepShortcuts; } } \ No newline at end of file diff --git a/src/SetupCustomActions/DSProfilePromptForm.cs b/src/SetupCustomActions/DSProfilePromptForm.cs index 04ed3f737..dfe8408f4 100644 --- a/src/SetupCustomActions/DSProfilePromptForm.cs +++ b/src/SetupCustomActions/DSProfilePromptForm.cs @@ -20,8 +20,8 @@ private void buttonNo_Click(object sender, EventArgs e) { this.Close(); } - private void resetKeyboard_CheckedChanged(object sender, EventArgs e) { - this.ResetKeyboardShortcuts = this.resetKeyboard.Checked; + private void keepShorcuts_CheckedChanged(object sender, EventArgs e) { + this.ResetKeyboardShortcuts = !this.keepShortcuts.Checked; } } } diff --git a/src/SetupCustomActions/DSProfilePromptForm.resx b/src/SetupCustomActions/DSProfilePromptForm.resx index 0f7402a4e..07e115a8e 100644 --- a/src/SetupCustomActions/DSProfilePromptForm.resx +++ b/src/SetupCustomActions/DSProfilePromptForm.resx @@ -2589,6 +2589,12 @@ 62Nfiw8dvvz6ScipaXdEREREvGx1BvSoeVCnT5Nd1mzxr8X7zxt5NF+2r863n0mKB/GfXureWoqIiIiI V6HOgB6cB11fPo2EiIiIeEUOZ0AL5kHXtvc+UURERES8fIczoHvOg4bX63knKCIiIiIOtOuIiIiIiFtr 1xERERERt9auIyIiIiJurV1HRERERNzUn3/0/2QrjKIFfM9lAAAAAElFTkSuQmCC + + + + The Data Scientist Profile, provides a window layout and keyboard shortcuts similar +to other IDE’s. Would you like activate this profile? If you want to keep existing +keyboard shotcuts, set the checkbox below to on. \ No newline at end of file From 92c8d6420066a5b638d268970d75a4ef0a265045 Mon Sep 17 00:00:00 2001 From: MikhailArkhipov Date: Thu, 21 Jan 2016 16:10:22 -0800 Subject: [PATCH 063/289] Undo previous change --- src/R/Editor/Impl/SmartIndent/SmartIndenter.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/R/Editor/Impl/SmartIndent/SmartIndenter.cs b/src/R/Editor/Impl/SmartIndent/SmartIndenter.cs index 28f324691..32a39beb0 100644 --- a/src/R/Editor/Impl/SmartIndent/SmartIndenter.cs +++ b/src/R/Editor/Impl/SmartIndent/SmartIndenter.cs @@ -99,7 +99,7 @@ public static int GetSmartIndent(ITextSnapshotLine line, AstRoot ast = null) { ITextSnapshotLine prevLine = line.Snapshot.GetLineFromLineNumber(line.LineNumber - 1); string prevLineText = prevLine.GetText(); - int nonWsPosition = prevLine.Start + prevLineText.Length - prevLineText.TrimStart().Length; + int nonWsPosition = prevLine.Start + (prevLineText.Length - prevLineText.TrimStart().Length) + 1; IAstNodeWithScope scopeStatement = ast.GetNodeOfTypeFromPosition(nonWsPosition); if (scopeStatement != null) { From 4f9e852902b0bdd8aa5c984477522718c1365052 Mon Sep 17 00:00:00 2001 From: JeongPyoHam Date: Thu, 21 Jan 2016 17:27:53 -0800 Subject: [PATCH 064/289] simple named parameter change to instanticate EvaluationWrapper --- src/Package/Impl/DataInspect/EvaluationWrapper.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Package/Impl/DataInspect/EvaluationWrapper.cs b/src/Package/Impl/DataInspect/EvaluationWrapper.cs index 140cb7ea5..d1ade90e2 100644 --- a/src/Package/Impl/DataInspect/EvaluationWrapper.cs +++ b/src/Package/Impl/DataInspect/EvaluationWrapper.cs @@ -86,7 +86,7 @@ protected override async Task> GetChildrenAsy result = new List(); for (int i = 0; i < children.Count; i++) { - result.Add(new EvaluationWrapper(children[i], i, DefaultMaxGrandChildren)); + result.Add(new EvaluationWrapper(children[i], index: i, maxChildrenCount: DefaultMaxGrandChildren)); } if (valueEvaluation.Length > result.Count) { From b0b9cb6a177627041e207b3676bc47fb871eb57d Mon Sep 17 00:00:00 2001 From: Pavel Minaev Date: Thu, 21 Jan 2016 18:23:17 -0800 Subject: [PATCH 065/289] Fix #691: Crash when stopping debugging Ignore any R errors/warnings that result from responding "Q" to the Browse> prompt on debugger terminations. --- src/Debugger/Engine/Impl/AD7Engine.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Debugger/Engine/Impl/AD7Engine.cs b/src/Debugger/Engine/Impl/AD7Engine.cs index 782c41ec7..fddb5e609 100644 --- a/src/Debugger/Engine/Impl/AD7Engine.cs +++ b/src/Debugger/Engine/Impl/AD7Engine.cs @@ -70,7 +70,10 @@ public void Dispose() { IsDisposed = true; - ExitBrowserAsync(rSession).SilenceException().DoNotWait(); + ExitBrowserAsync(rSession) + .SilenceException() + .SilenceException() + .DoNotWait(); } private void ThrowIfDisposed() { From d721717f326fd2b1d42f9338df47e41354be8dfb Mon Sep 17 00:00:00 2001 From: JP Ham Date: Thu, 21 Jan 2016 18:42:33 -0800 Subject: [PATCH 066/289] Reactivate VE test case --- .../Impl/DataInspect/EvaluationWrapper.cs | 1 - src/Package/Test/Shell/TestVsAppShell.cs | 2 + .../TestApp/Data/VariableExplorerTest.cs | 2 +- .../TestApp/Files/VariableExplorer03.tree | 979 +----------------- 4 files changed, 12 insertions(+), 972 deletions(-) diff --git a/src/Package/Impl/DataInspect/EvaluationWrapper.cs b/src/Package/Impl/DataInspect/EvaluationWrapper.cs index 140cb7ea5..b653bfd5e 100644 --- a/src/Package/Impl/DataInspect/EvaluationWrapper.cs +++ b/src/Package/Impl/DataInspect/EvaluationWrapper.cs @@ -19,7 +19,6 @@ namespace Microsoft.VisualStudio.R.Package.DataInspect { /// Model for variable tree grid, that provides UI customization of ///
internal sealed class EvaluationWrapper : RSessionDataObject, IIndexedItem { - private readonly bool _truncateChildren; public EvaluationWrapper() { Index = -1; } diff --git a/src/Package/Test/Shell/TestVsAppShell.cs b/src/Package/Test/Shell/TestVsAppShell.cs index d240cdf13..2165398c1 100644 --- a/src/Package/Test/Shell/TestVsAppShell.cs +++ b/src/Package/Test/Shell/TestVsAppShell.cs @@ -7,6 +7,7 @@ using Microsoft.Languages.Editor.Undo; using Microsoft.R.Support.Settings; using Microsoft.R.Support.Test.Utility; +using Microsoft.UnitTests.Core.Threading; using Microsoft.VisualStudio.R.Package.Shell; using Microsoft.VisualStudio.R.Package.Test.Utility; using Microsoft.VisualStudio.Text; @@ -26,6 +27,7 @@ private TestVsAppShell() { CompositionService = VsTestCompositionCatalog.Current.CompositionService; ExportProvider = VsTestCompositionCatalog.Current.ExportProvider; _sp = new TestServiceProvider(); + MainThread = UIThreadHelper.Instance.Thread; } public static void Create() { diff --git a/src/Package/TestApp/Data/VariableExplorerTest.cs b/src/Package/TestApp/Data/VariableExplorerTest.cs index ea9e98193..082078352 100644 --- a/src/Package/TestApp/Data/VariableExplorerTest.cs +++ b/src/Package/TestApp/Data/VariableExplorerTest.cs @@ -38,7 +38,7 @@ public void VariableExplorer_ConstructorTest02() { } } - [Test(Skip = "UIThreadHelper and TetVsAppShell has different main thread")] + [Test] [Category.Interactive] public void VariableExplorer_SimpleDataTest() { string actual = null; diff --git a/src/Package/TestApp/Files/VariableExplorer03.tree b/src/Package/TestApp/Files/VariableExplorer03.tree index 634662319..07710cabc 100644 --- a/src/Package/TestApp/Files/VariableExplorer03.tree +++ b/src/Package/TestApp/Files/VariableExplorer03.tree @@ -1596,7 +1596,7 @@ Name = Name = Margin = 0,0,0,0 HorizontalAlignment = Stretch - VerticalAlignment = Stretch + VerticalAlignment = Center ToolTip = null ContextMenu = null Visibility = Visible @@ -1724,7 +1724,7 @@ Name = Name = Margin = 0,0,0,0 HorizontalAlignment = Stretch - VerticalAlignment = Stretch + VerticalAlignment = Center ToolTip = null ContextMenu = null Visibility = Visible @@ -1737,7 +1737,7 @@ Name = VerticalScrollBarVisibility = Visible Name = Button - Content = Microsoft.VisualStudio.Imaging.CrispImage + Content = null ContentTemplate = null Padding = 1,1,1,1 DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode @@ -1761,7 +1761,7 @@ Name = Border Padding = 0,0,0,0 DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = border + Name = Border Margin = 0,0,0,0 HorizontalAlignment = Stretch VerticalAlignment = Stretch @@ -1778,14 +1778,12 @@ Name = VerticalScrollBarVisibility = Visible Name = -------------------------------------------------------------- - ContentPresenter - Content = Microsoft.VisualStudio.Imaging.CrispImage - ContentTemplate = null + CrispImage DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = contentPresenter - Margin = 1,1,1,1 - HorizontalAlignment = Center - VerticalAlignment = Center + Name = + Margin = 0,0,0,0 + HorizontalAlignment = Stretch + VerticalAlignment = Stretch ToolTip = null ContextMenu = null Visibility = Visible @@ -1798,26 +1796,6 @@ Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible Name = - -------------------------------------------------------------- - CrispImage - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Name = - -------------------------------------------------------------- -------------------------------------------------------------- -------------------------------------------------------------- -------------------------------------------------------------- @@ -2205,945 +2183,6 @@ Name = -------------------------------------------------------------- -------------------------------------------------------------- -------------------------------------------------------------- - DataGridRow - Padding = 0,0,0,0 - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Name = - -------------------------------------------------------------- - Border - Padding = 0,0,0,0 - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = DGR_Border - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Name = - -------------------------------------------------------------- - SelectiveScrollingGrid - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Name = - -------------------------------------------------------------- - DataGridCellsPresenter - Padding = 0,0,0,0 - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = False - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Name = - -------------------------------------------------------------- - ItemsPresenter - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Name = - -------------------------------------------------------------- - DataGridCellsPanel - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Name = - -------------------------------------------------------------- - DataGridCell - Content = System.Windows.Controls.ContentPresenter - ContentTemplate = null - Padding = 1,1,1,1 - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Name = - -------------------------------------------------------------- - Border - Padding = 1,1,1,1 - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Name = - -------------------------------------------------------------- - ContentPresenter - Content = System.Windows.Controls.ContentPresenter - ContentTemplate = null - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Name = - -------------------------------------------------------------- - ContentPresenter - Content = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - ContentTemplate = System.Windows.DataTemplate - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Name = - -------------------------------------------------------------- - Grid - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Name = - -------------------------------------------------------------- - Rectangle - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = Indentation - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Name = - ToggleButton - Content = null - ContentTemplate = null - Padding = 1,1,1,1 - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = Expander - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Hidden - IsEnabled = True - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Name = - -------------------------------------------------------------- - Border - Padding = 5,5,5,5 - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Name = - -------------------------------------------------------------- - Path - Data = M0,0L0,6 6,0z - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = ExpandPath - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Name = - -------------------------------------------------------------- - -------------------------------------------------------------- - TextBlock - Text = xaml - Padding = 0,0,0,0 - TextAlignment = Left - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - IsVirtualizing = True - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Name = - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - DataGridCell - Content = System.Windows.Controls.ContentPresenter - ContentTemplate = null - Padding = 1,1,1,1 - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Name = - -------------------------------------------------------------- - Border - Padding = 1,1,1,1 - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Name = - -------------------------------------------------------------- - ContentPresenter - Content = System.Windows.Controls.ContentPresenter - ContentTemplate = null - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Name = - -------------------------------------------------------------- - ContentPresenter - Content = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - ContentTemplate = System.Windows.DataTemplate - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Name = - -------------------------------------------------------------- - Grid - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Name = - -------------------------------------------------------------- - TextBlock - Text = function (filename, width, height) - Padding = 0,0,0,0 - TextAlignment = Left - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - IsVirtualizing = True - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Name = - Button - Content = Microsoft.VisualStudio.Imaging.CrispImage - ContentTemplate = null - Padding = 1,1,1,1 - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Right - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Collapsed - IsEnabled = True - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Name = - -------------------------------------------------------------- - Border - Padding = 0,0,0,0 - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = border - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Name = - -------------------------------------------------------------- - ContentPresenter - Content = Microsoft.VisualStudio.Imaging.CrispImage - ContentTemplate = null - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = contentPresenter - Margin = 1,1,1,1 - HorizontalAlignment = Center - VerticalAlignment = Center - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Name = - -------------------------------------------------------------- - CrispImage - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Name = - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - DataGridCell - Content = System.Windows.Controls.TextBlock - ContentTemplate = null - Padding = 1,1,1,1 - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Name = - -------------------------------------------------------------- - Border - Padding = 1,1,1,1 - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Name = - -------------------------------------------------------------- - ContentPresenter - Content = System.Windows.Controls.TextBlock - ContentTemplate = null - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Name = - -------------------------------------------------------------- - TextBlock - Text = function - Padding = 0,0,0,0 - TextAlignment = Left - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 2,0,2,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - IsVirtualizing = True - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Name = - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - DataGridCell - Content = System.Windows.Controls.TextBlock - ContentTemplate = null - Padding = 1,1,1,1 - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Name = - -------------------------------------------------------------- - Border - Padding = 1,1,1,1 - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Name = - -------------------------------------------------------------- - ContentPresenter - Content = System.Windows.Controls.TextBlock - ContentTemplate = null - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Name = - -------------------------------------------------------------- - TextBlock - Text = closure - Padding = 0,0,0,0 - TextAlignment = Left - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 2,0,2,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - IsVirtualizing = True - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Name = - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - DataGridDetailsPresenter - Content = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - ContentTemplate = null - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Collapsed - IsEnabled = True - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Name = - DataGridRowHeader - Content = null - ContentTemplate = null - Padding = 0,0,0,0 - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Collapsed - IsEnabled = True - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Name = - -------------------------------------------------------------- - Grid - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Name = - -------------------------------------------------------------- - DataGridHeaderBorder - Padding = 0,0,0,0 - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Name = - -------------------------------------------------------------- - StackPanel - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Name = - -------------------------------------------------------------- - ContentPresenter - Content = null - ContentTemplate = null - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Center - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Name = - Control - Padding = 0,0,0,0 - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Collapsed - IsEnabled = True - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Name = - -------------------------------------------------------------- - -------------------------------------------------------------- - Thumb - Padding = 0,0,0,0 - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = PART_TopHeaderGripper - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Top - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Name = - -------------------------------------------------------------- - Border - Padding = 0,0,0,0 - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Name = - -------------------------------------------------------------- - Thumb - Padding = 0,0,0,0 - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = PART_BottomHeaderGripper - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Bottom - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Name = - -------------------------------------------------------------- - Border - Padding = 0,0,0,0 - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Name = - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- -------------------------------------------------------------- -------------------------------------------------------------- AdornerLayer From d0fabf0352fb304a54d4f77fb30cd3a54cf76d09 Mon Sep 17 00:00:00 2001 From: JP Ham Date: Thu, 21 Jan 2016 19:20:35 -0800 Subject: [PATCH 067/289] Refresh test data --- .../TestApp/Files/VariableExplorer01.tree | 106 +++---- .../TestApp/Files/VariableExplorer02.tree | 160 +++++----- .../TestApp/Files/VariableExplorer03.tree | 280 +++++++++--------- 3 files changed, 273 insertions(+), 273 deletions(-) diff --git a/src/Package/TestApp/Files/VariableExplorer01.tree b/src/Package/TestApp/Files/VariableExplorer01.tree index 8644ff2aa..a52db2fc8 100644 --- a/src/Package/TestApp/Files/VariableExplorer01.tree +++ b/src/Package/TestApp/Files/VariableExplorer01.tree @@ -16,9 +16,9 @@ IsEnabled = True IsEnabled = True TextAlignment = Left IsVirtualizing = True +Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible -Name = -------------------------------------------------------------- Border Padding = 0,0,0,0 @@ -36,9 +36,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- ContentPresenter Content = System.Windows.Controls.Grid @@ -57,9 +57,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Grid DataContext = null @@ -76,9 +76,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- TextBlock Text = @@ -97,9 +97,9 @@ Name = IsEnabled = True IsEnabled = True IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = MatrixView Content = System.Windows.Controls.Grid ContentTemplate = null @@ -118,9 +118,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Border Padding = 0,0,0,0 @@ -138,9 +138,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- ContentPresenter Content = System.Windows.Controls.Grid @@ -159,9 +159,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Grid DataContext = null @@ -178,9 +178,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Border Padding = 0,0,0,0 @@ -198,9 +198,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Rectangle DataContext = null @@ -217,9 +217,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- VisualGrid DataContext = null @@ -236,9 +236,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = Rectangle DataContext = null Name = RightTopCorner @@ -254,9 +254,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = VisualGrid DataContext = null Name = RowHeader @@ -272,9 +272,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = VisualGrid DataContext = null Name = Data @@ -290,9 +290,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = ScrollBar Padding = 0,0,0,0 DataContext = null @@ -309,9 +309,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Grid DataContext = null @@ -328,9 +328,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Border Padding = 0,0,0,0 @@ -348,9 +348,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = RepeatButton Content = System.Windows.Shapes.Path ContentTemplate = null @@ -369,9 +369,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Border Padding = 0,0,0,0 @@ -389,9 +389,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- ContentPresenter Content = System.Windows.Shapes.Path @@ -410,9 +410,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Path Data = M0,4C0,4 0,6 0,6 0,6 3.5,2.5 3.5,2.5 3.5,2.5 7,6 7,6 7,6 7,4 7,4 7,4 3.5,0.5 3.5,0.5 3.5,0.5 0,4 0,4z @@ -430,9 +430,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- -------------------------------------------------------------- -------------------------------------------------------------- @@ -451,9 +451,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- RepeatButton Content = null @@ -473,9 +473,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Rectangle DataContext = null @@ -492,9 +492,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- RepeatButton Content = null @@ -514,9 +514,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Rectangle DataContext = null @@ -533,9 +533,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Thumb Padding = 0,0,0,0 @@ -553,9 +553,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Rectangle DataContext = null @@ -572,9 +572,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- -------------------------------------------------------------- RepeatButton @@ -595,9 +595,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Border Padding = 0,0,0,0 @@ -615,9 +615,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- ContentPresenter Content = System.Windows.Shapes.Path @@ -636,9 +636,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Path Data = M0,2.5C0,2.5 0,0.5 0,0.5 0,0.5 3.5,4 3.5,4 3.5,4 7,0.5 7,0.5 7,0.5 7,2.5 7,2.5 7,2.5 3.5,6 3.5,6 3.5,6 0,2.5 0,2.5z @@ -656,9 +656,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- -------------------------------------------------------------- -------------------------------------------------------------- @@ -679,9 +679,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = ScrollBar Padding = 0,0,0,0 DataContext = null @@ -698,9 +698,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Grid DataContext = null @@ -717,9 +717,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Border Padding = 0,0,0,0 @@ -737,9 +737,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = RepeatButton Content = System.Windows.Shapes.Path ContentTemplate = null @@ -758,9 +758,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Border Padding = 0,0,0,0 @@ -778,9 +778,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- ContentPresenter Content = System.Windows.Shapes.Path @@ -799,9 +799,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Path Data = M3.18,7C3.18,7 5,7 5,7 5,7 1.81,3.5 1.81,3.5 1.81,3.5 5,0 5,0 5,0 3.18,0 3.18,0 3.18,0 0,3.5 0,3.5 0,3.5 3.18,7 3.18,7z @@ -819,9 +819,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- -------------------------------------------------------------- -------------------------------------------------------------- @@ -840,9 +840,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- RepeatButton Content = null @@ -862,9 +862,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Rectangle DataContext = null @@ -881,9 +881,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- RepeatButton Content = null @@ -903,9 +903,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Rectangle DataContext = null @@ -922,9 +922,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Thumb Padding = 0,0,0,0 @@ -942,9 +942,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Rectangle DataContext = null @@ -961,9 +961,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- -------------------------------------------------------------- RepeatButton @@ -984,9 +984,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Border Padding = 0,0,0,0 @@ -1004,9 +1004,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- ContentPresenter Content = System.Windows.Shapes.Path @@ -1025,9 +1025,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Path Data = M1.81,7C1.81,7 0,7 0,7 0,7 3.18,3.5 3.18,3.5 3.18,3.5 0,0 0,0 0,0 1.81,0 1.81,0 1.81,0 5,3.5 5,3.5 5,3.5 1.81,7 1.81,7z @@ -1045,9 +1045,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- -------------------------------------------------------------- -------------------------------------------------------------- @@ -1068,9 +1068,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- -------------------------------------------------------------- -------------------------------------------------------------- diff --git a/src/Package/TestApp/Files/VariableExplorer02.tree b/src/Package/TestApp/Files/VariableExplorer02.tree index a6070542f..acfec8eea 100644 --- a/src/Package/TestApp/Files/VariableExplorer02.tree +++ b/src/Package/TestApp/Files/VariableExplorer02.tree @@ -16,9 +16,9 @@ IsEnabled = True IsEnabled = True TextAlignment = Left IsVirtualizing = True +Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible -Name = -------------------------------------------------------------- Border Padding = 0,0,0,0 @@ -36,9 +36,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- ContentPresenter Content = System.Windows.Controls.Grid @@ -57,9 +57,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Grid DataContext = null @@ -76,9 +76,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- TextBlock Text = No R Interactive @@ -97,9 +97,9 @@ Name = IsEnabled = True IsEnabled = True IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = TreeGrid HorizontalScrollBarVisibility = Auto VerticalScrollBarVisibility = Visible @@ -136,9 +136,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- ScrollViewer HorizontalScrollBarVisibility = Auto @@ -177,9 +177,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Button Content = null @@ -199,9 +199,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Grid DataContext = null @@ -218,9 +218,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Rectangle DataContext = null @@ -237,9 +237,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = Polygon DataContext = null Name = Arrow @@ -255,9 +255,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- -------------------------------------------------------------- DataGridColumnHeadersPresenter @@ -276,9 +276,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = False + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Grid DataContext = null @@ -295,9 +295,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- DataGridColumnHeader Content = null @@ -317,9 +317,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Grid DataContext = null @@ -336,9 +336,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- DataGridHeaderBorder Padding = 4,4,4,4 @@ -356,9 +356,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- ContentPresenter Content = null @@ -377,9 +377,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Thumb Padding = 0,0,0,0 @@ -397,9 +397,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Border Padding = 0,0,0,0 @@ -417,9 +417,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Thumb Padding = 0,0,0,0 @@ -437,9 +437,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Border Padding = 0,0,0,0 @@ -457,9 +457,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- -------------------------------------------------------------- -------------------------------------------------------------- @@ -478,9 +478,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- DataGridCellsPanel DataContext = null @@ -497,9 +497,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- DataGridColumnHeader Content = Name @@ -519,9 +519,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Grid DataContext = Name @@ -538,9 +538,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- DataGridHeaderBorder Padding = 4,4,4,4 @@ -558,9 +558,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- ContentPresenter Content = Name @@ -579,9 +579,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- TextBlock Text = Name @@ -600,9 +600,9 @@ Name = IsEnabled = True IsEnabled = True IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- -------------------------------------------------------------- Thumb @@ -621,9 +621,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = Thumb Padding = 0,0,0,0 DataContext = Name @@ -640,9 +640,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Border Padding = 0,0,0,0 @@ -660,9 +660,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- -------------------------------------------------------------- -------------------------------------------------------------- @@ -684,9 +684,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Grid DataContext = Value @@ -703,9 +703,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- DataGridHeaderBorder Padding = 4,4,4,4 @@ -723,9 +723,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- ContentPresenter Content = Value @@ -744,9 +744,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- TextBlock Text = Value @@ -765,9 +765,9 @@ Name = IsEnabled = True IsEnabled = True IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- -------------------------------------------------------------- Thumb @@ -786,9 +786,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Border Padding = 0,0,0,0 @@ -806,9 +806,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Thumb Padding = 0,0,0,0 @@ -826,9 +826,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Border Padding = 0,0,0,0 @@ -846,9 +846,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- -------------------------------------------------------------- -------------------------------------------------------------- @@ -870,9 +870,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Grid DataContext = Class @@ -889,9 +889,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- DataGridHeaderBorder Padding = 4,4,4,4 @@ -909,9 +909,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- ContentPresenter Content = Class @@ -930,9 +930,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- TextBlock Text = Class @@ -951,9 +951,9 @@ Name = IsEnabled = True IsEnabled = True IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- -------------------------------------------------------------- Thumb @@ -972,9 +972,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Border Padding = 0,0,0,0 @@ -992,9 +992,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Thumb Padding = 0,0,0,0 @@ -1012,9 +1012,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Border Padding = 0,0,0,0 @@ -1032,9 +1032,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- -------------------------------------------------------------- -------------------------------------------------------------- @@ -1056,9 +1056,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Grid DataContext = Type @@ -1075,9 +1075,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- DataGridHeaderBorder Padding = 4,4,4,4 @@ -1095,9 +1095,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- ContentPresenter Content = Type @@ -1116,9 +1116,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- TextBlock Text = Type @@ -1137,9 +1137,9 @@ Name = IsEnabled = True IsEnabled = True IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- -------------------------------------------------------------- Thumb @@ -1158,9 +1158,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Border Padding = 0,0,0,0 @@ -1178,9 +1178,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Thumb Padding = 0,0,0,0 @@ -1198,9 +1198,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Border Padding = 0,0,0,0 @@ -1218,9 +1218,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- -------------------------------------------------------------- -------------------------------------------------------------- @@ -1245,9 +1245,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- ItemsPresenter DataContext = null @@ -1264,9 +1264,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- DataGridRowsPresenter DataContext = null @@ -1283,9 +1283,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- AdornerLayer DataContext = null @@ -1302,9 +1302,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- ScrollBar Padding = 0,0,0,0 @@ -1322,9 +1322,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Grid DataContext = null @@ -1341,9 +1341,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Border Padding = 0,0,0,0 @@ -1361,9 +1361,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = RepeatButton Content = System.Windows.Shapes.Path ContentTemplate = null @@ -1382,9 +1382,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Border Padding = 0,0,0,0 @@ -1402,9 +1402,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- ContentPresenter Content = System.Windows.Shapes.Path @@ -1423,9 +1423,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Path Data = M0,4C0,4 0,6 0,6 0,6 3.5,2.5 3.5,2.5 3.5,2.5 7,6 7,6 7,6 7,4 7,4 7,4 3.5,0.5 3.5,0.5 3.5,0.5 0,4 0,4z @@ -1443,9 +1443,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- -------------------------------------------------------------- -------------------------------------------------------------- @@ -1464,9 +1464,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- RepeatButton Content = null @@ -1486,9 +1486,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = RepeatButton Content = null ContentTemplate = null @@ -1507,9 +1507,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = Thumb Padding = 0,0,0,0 DataContext = null @@ -1526,9 +1526,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Rectangle DataContext = null @@ -1545,9 +1545,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- -------------------------------------------------------------- RepeatButton @@ -1568,9 +1568,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Border Padding = 0,0,0,0 @@ -1588,9 +1588,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- ContentPresenter Content = System.Windows.Shapes.Path @@ -1609,9 +1609,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Path Data = M0,2.5C0,2.5 0,0.5 0,0.5 0,0.5 3.5,4 3.5,4 3.5,4 7,0.5 7,0.5 7,0.5 7,2.5 7,2.5 7,2.5 3.5,6 3.5,6 3.5,6 0,2.5 0,2.5z @@ -1629,9 +1629,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- -------------------------------------------------------------- -------------------------------------------------------------- @@ -1652,9 +1652,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- ScrollBar Padding = 0,0,0,0 @@ -1672,9 +1672,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- -------------------------------------------------------------- -------------------------------------------------------------- diff --git a/src/Package/TestApp/Files/VariableExplorer03.tree b/src/Package/TestApp/Files/VariableExplorer03.tree index 07710cabc..1509e9727 100644 --- a/src/Package/TestApp/Files/VariableExplorer03.tree +++ b/src/Package/TestApp/Files/VariableExplorer03.tree @@ -16,9 +16,9 @@ IsEnabled = True IsEnabled = True TextAlignment = Left IsVirtualizing = True +Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible -Name = -------------------------------------------------------------- Border Padding = 0,0,0,0 @@ -36,9 +36,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- ContentPresenter Content = System.Windows.Controls.Grid @@ -57,9 +57,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Grid DataContext = null @@ -76,9 +76,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- TextBlock Text = Global Environment @@ -97,9 +97,9 @@ Name = IsEnabled = True IsEnabled = True IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = TreeGrid HorizontalScrollBarVisibility = Auto VerticalScrollBarVisibility = Visible @@ -136,9 +136,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- ScrollViewer HorizontalScrollBarVisibility = Auto @@ -177,9 +177,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Button Content = null @@ -199,9 +199,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Grid DataContext = null @@ -218,9 +218,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Rectangle DataContext = null @@ -237,9 +237,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = Polygon DataContext = null Name = Arrow @@ -255,9 +255,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- -------------------------------------------------------------- DataGridColumnHeadersPresenter @@ -276,9 +276,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = False + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Grid DataContext = null @@ -295,9 +295,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- DataGridColumnHeader Content = null @@ -317,9 +317,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Grid DataContext = null @@ -336,9 +336,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- DataGridHeaderBorder Padding = 4,4,4,4 @@ -356,9 +356,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- ContentPresenter Content = null @@ -377,9 +377,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Thumb Padding = 0,0,0,0 @@ -397,9 +397,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Border Padding = 0,0,0,0 @@ -417,9 +417,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Thumb Padding = 0,0,0,0 @@ -437,9 +437,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Border Padding = 0,0,0,0 @@ -457,9 +457,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- -------------------------------------------------------------- -------------------------------------------------------------- @@ -478,9 +478,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- DataGridCellsPanel DataContext = null @@ -497,9 +497,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- DataGridColumnHeader Content = Name @@ -519,9 +519,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Grid DataContext = Name @@ -538,9 +538,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- DataGridHeaderBorder Padding = 4,4,4,4 @@ -558,9 +558,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- ContentPresenter Content = Name @@ -579,9 +579,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- TextBlock Text = Name @@ -600,9 +600,9 @@ Name = IsEnabled = True IsEnabled = True IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- -------------------------------------------------------------- Thumb @@ -621,9 +621,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = Thumb Padding = 0,0,0,0 DataContext = Name @@ -640,9 +640,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Border Padding = 0,0,0,0 @@ -660,9 +660,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- -------------------------------------------------------------- -------------------------------------------------------------- @@ -684,9 +684,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Grid DataContext = Value @@ -703,9 +703,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- DataGridHeaderBorder Padding = 4,4,4,4 @@ -723,9 +723,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- ContentPresenter Content = Value @@ -744,9 +744,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- TextBlock Text = Value @@ -765,9 +765,9 @@ Name = IsEnabled = True IsEnabled = True IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- -------------------------------------------------------------- Thumb @@ -786,9 +786,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Border Padding = 0,0,0,0 @@ -806,9 +806,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Thumb Padding = 0,0,0,0 @@ -826,9 +826,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Border Padding = 0,0,0,0 @@ -846,9 +846,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- -------------------------------------------------------------- -------------------------------------------------------------- @@ -870,9 +870,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Grid DataContext = Class @@ -889,9 +889,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- DataGridHeaderBorder Padding = 4,4,4,4 @@ -909,9 +909,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- ContentPresenter Content = Class @@ -930,9 +930,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- TextBlock Text = Class @@ -951,9 +951,9 @@ Name = IsEnabled = True IsEnabled = True IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- -------------------------------------------------------------- Thumb @@ -972,9 +972,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Border Padding = 0,0,0,0 @@ -992,9 +992,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Thumb Padding = 0,0,0,0 @@ -1012,9 +1012,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Border Padding = 0,0,0,0 @@ -1032,9 +1032,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- -------------------------------------------------------------- -------------------------------------------------------------- @@ -1056,9 +1056,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Grid DataContext = Type @@ -1075,9 +1075,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- DataGridHeaderBorder Padding = 4,4,4,4 @@ -1095,9 +1095,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- ContentPresenter Content = Type @@ -1116,9 +1116,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- TextBlock Text = Type @@ -1137,9 +1137,9 @@ Name = IsEnabled = True IsEnabled = True IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- -------------------------------------------------------------- Thumb @@ -1158,9 +1158,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Border Padding = 0,0,0,0 @@ -1178,9 +1178,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Thumb Padding = 0,0,0,0 @@ -1198,9 +1198,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Border Padding = 0,0,0,0 @@ -1218,9 +1218,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- -------------------------------------------------------------- -------------------------------------------------------------- @@ -1245,9 +1245,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- ItemsPresenter DataContext = null @@ -1264,9 +1264,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- DataGridRowsPresenter DataContext = null @@ -1283,9 +1283,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- DataGridRow Padding = 0,0,0,0 @@ -1303,9 +1303,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Border Padding = 0,0,0,0 @@ -1323,9 +1323,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- SelectiveScrollingGrid DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode @@ -1342,9 +1342,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- DataGridCellsPresenter Padding = 0,0,0,0 @@ -1362,9 +1362,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = False + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- ItemsPresenter DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode @@ -1381,9 +1381,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- DataGridCellsPanel DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode @@ -1400,9 +1400,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- DataGridCell Content = System.Windows.Controls.ContentPresenter @@ -1422,9 +1422,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Border Padding = 1,1,1,1 @@ -1442,9 +1442,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- ContentPresenter Content = System.Windows.Controls.ContentPresenter @@ -1463,9 +1463,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- ContentPresenter Content = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode @@ -1484,9 +1484,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Grid DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode @@ -1503,9 +1503,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Rectangle DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode @@ -1522,9 +1522,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = ToggleButton Content = null ContentTemplate = null @@ -1543,9 +1543,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Border Padding = 5,5,5,5 @@ -1563,9 +1563,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Path Data = M0,0L0,6 6,0z @@ -1583,9 +1583,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- -------------------------------------------------------------- TextBlock @@ -1605,9 +1605,9 @@ Name = IsEnabled = True IsEnabled = True IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- -------------------------------------------------------------- -------------------------------------------------------------- @@ -1631,9 +1631,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Border Padding = 1,1,1,1 @@ -1651,9 +1651,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- ContentPresenter Content = System.Windows.Controls.ContentPresenter @@ -1672,9 +1672,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- ContentPresenter Content = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode @@ -1693,9 +1693,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Grid DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode @@ -1712,9 +1712,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- TextBlock Text = int [1:10] 1 2 3 4 5 6 7 8 9 10 @@ -1733,9 +1733,9 @@ Name = IsEnabled = True IsEnabled = True IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = Button Content = null ContentTemplate = null @@ -1754,9 +1754,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Border Padding = 0,0,0,0 @@ -1774,9 +1774,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- CrispImage DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode @@ -1793,9 +1793,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- -------------------------------------------------------------- -------------------------------------------------------------- @@ -1821,9 +1821,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Border Padding = 1,1,1,1 @@ -1841,9 +1841,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- ContentPresenter Content = System.Windows.Controls.TextBlock @@ -1862,9 +1862,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- TextBlock Text = integer @@ -1883,9 +1883,9 @@ Name = IsEnabled = True IsEnabled = True IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- -------------------------------------------------------------- -------------------------------------------------------------- @@ -1907,9 +1907,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Border Padding = 1,1,1,1 @@ -1927,9 +1927,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- ContentPresenter Content = System.Windows.Controls.TextBlock @@ -1948,9 +1948,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- TextBlock Text = integer @@ -1969,9 +1969,9 @@ Name = IsEnabled = True IsEnabled = True IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- -------------------------------------------------------------- -------------------------------------------------------------- @@ -1995,9 +1995,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = DataGridRowHeader Content = null ContentTemplate = null @@ -2016,9 +2016,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Grid DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode @@ -2035,9 +2035,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- DataGridHeaderBorder Padding = 0,0,0,0 @@ -2055,9 +2055,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- StackPanel DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode @@ -2074,9 +2074,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- ContentPresenter Content = null @@ -2095,9 +2095,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = Control Padding = 0,0,0,0 DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode @@ -2114,9 +2114,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- -------------------------------------------------------------- Thumb @@ -2135,9 +2135,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = Thumb Padding = 0,0,0,0 DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode @@ -2154,9 +2154,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Border Padding = 0,0,0,0 @@ -2174,9 +2174,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- -------------------------------------------------------------- -------------------------------------------------------------- @@ -2200,9 +2200,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- ScrollBar Padding = 0,0,0,0 @@ -2220,9 +2220,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Grid DataContext = null @@ -2239,9 +2239,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Border Padding = 0,0,0,0 @@ -2259,9 +2259,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = RepeatButton Content = System.Windows.Shapes.Path ContentTemplate = null @@ -2280,9 +2280,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Border Padding = 0,0,0,0 @@ -2300,9 +2300,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- ContentPresenter Content = System.Windows.Shapes.Path @@ -2321,9 +2321,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Path Data = M0,4C0,4 0,6 0,6 0,6 3.5,2.5 3.5,2.5 3.5,2.5 7,6 7,6 7,6 7,4 7,4 7,4 3.5,0.5 3.5,0.5 3.5,0.5 0,4 0,4z @@ -2341,9 +2341,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- -------------------------------------------------------------- -------------------------------------------------------------- @@ -2362,9 +2362,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- RepeatButton Content = null @@ -2384,9 +2384,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = RepeatButton Content = null ContentTemplate = null @@ -2405,9 +2405,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = Thumb Padding = 0,0,0,0 DataContext = null @@ -2424,9 +2424,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Rectangle DataContext = null @@ -2443,9 +2443,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- -------------------------------------------------------------- RepeatButton @@ -2466,9 +2466,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Border Padding = 0,0,0,0 @@ -2486,9 +2486,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- ContentPresenter Content = System.Windows.Shapes.Path @@ -2507,9 +2507,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Path Data = M0,2.5C0,2.5 0,0.5 0,0.5 0,0.5 3.5,4 3.5,4 3.5,4 7,0.5 7,0.5 7,0.5 7,2.5 7,2.5 7,2.5 3.5,6 3.5,6 3.5,6 0,2.5 0,2.5z @@ -2527,9 +2527,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- -------------------------------------------------------------- -------------------------------------------------------------- @@ -2550,9 +2550,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- ScrollBar Padding = 0,0,0,0 @@ -2570,9 +2570,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Grid DataContext = null @@ -2589,9 +2589,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Border Padding = 0,0,0,0 @@ -2609,9 +2609,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = RepeatButton Content = System.Windows.Shapes.Path ContentTemplate = null @@ -2630,9 +2630,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Border Padding = 0,0,0,0 @@ -2650,9 +2650,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- ContentPresenter Content = System.Windows.Shapes.Path @@ -2671,9 +2671,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Path Data = M3.18,7C3.18,7 5,7 5,7 5,7 1.81,3.5 1.81,3.5 1.81,3.5 5,0 5,0 5,0 3.18,0 3.18,0 3.18,0 0,3.5 0,3.5 0,3.5 3.18,7 3.18,7z @@ -2691,9 +2691,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- -------------------------------------------------------------- -------------------------------------------------------------- @@ -2712,9 +2712,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- RepeatButton Content = null @@ -2734,9 +2734,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Rectangle DataContext = null @@ -2753,9 +2753,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- RepeatButton Content = null @@ -2775,9 +2775,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Rectangle DataContext = null @@ -2794,9 +2794,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Thumb Padding = 0,0,0,0 @@ -2814,9 +2814,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Rectangle DataContext = null @@ -2833,9 +2833,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- -------------------------------------------------------------- RepeatButton @@ -2856,9 +2856,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Border Padding = 0,0,0,0 @@ -2876,9 +2876,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- ContentPresenter Content = System.Windows.Shapes.Path @@ -2897,9 +2897,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- Path Data = M1.81,7C1.81,7 0,7 0,7 0,7 3.18,3.5 3.18,3.5 3.18,3.5 0,0 0,0 0,0 1.81,0 1.81,0 1.81,0 5,3.5 5,3.5 5,3.5 1.81,7 1.81,7z @@ -2917,9 +2917,9 @@ Name = IsEnabled = True TextAlignment = Left IsVirtualizing = True + Name = HorizontalScrollBarVisibility = Disabled VerticalScrollBarVisibility = Visible - Name = -------------------------------------------------------------- -------------------------------------------------------------- -------------------------------------------------------------- From c34101cf37504efd6672ebe662228202ea7a4fd7 Mon Sep 17 00:00:00 2001 From: MikhailArkhipov Date: Fri, 22 Jan 2016 09:08:54 -0800 Subject: [PATCH 068/289] Remove custom actions from solution --- src/R.sln | 14 -------------- src/Setup/Setup.wixproj | 8 -------- 2 files changed, 22 deletions(-) diff --git a/src/R.sln b/src/R.sln index 8d748f80c..1e222db23 100644 --- a/src/R.sln +++ b/src/R.sln @@ -82,8 +82,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution CodeCoverage.runsettings = CodeCoverage.runsettings EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SetupCustomActions", "SetupCustomActions\SetupCustomActions.csproj", "{F2149709-A88B-4F36-ABCA-307CA96E9FD1}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -515,18 +513,6 @@ Global {130C9240-9537-42D4-A62C-2A13815F0020}.Release|x64.Build.0 = Release|Any CPU {130C9240-9537-42D4-A62C-2A13815F0020}.Release|x86.ActiveCfg = Release|Any CPU {130C9240-9537-42D4-A62C-2A13815F0020}.Release|x86.Build.0 = Release|Any CPU - {F2149709-A88B-4F36-ABCA-307CA96E9FD1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F2149709-A88B-4F36-ABCA-307CA96E9FD1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F2149709-A88B-4F36-ABCA-307CA96E9FD1}.Debug|x64.ActiveCfg = Debug|Any CPU - {F2149709-A88B-4F36-ABCA-307CA96E9FD1}.Debug|x64.Build.0 = Debug|Any CPU - {F2149709-A88B-4F36-ABCA-307CA96E9FD1}.Debug|x86.ActiveCfg = Debug|Any CPU - {F2149709-A88B-4F36-ABCA-307CA96E9FD1}.Debug|x86.Build.0 = Debug|Any CPU - {F2149709-A88B-4F36-ABCA-307CA96E9FD1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F2149709-A88B-4F36-ABCA-307CA96E9FD1}.Release|Any CPU.Build.0 = Release|Any CPU - {F2149709-A88B-4F36-ABCA-307CA96E9FD1}.Release|x64.ActiveCfg = Release|Any CPU - {F2149709-A88B-4F36-ABCA-307CA96E9FD1}.Release|x64.Build.0 = Release|Any CPU - {F2149709-A88B-4F36-ABCA-307CA96E9FD1}.Release|x86.ActiveCfg = Release|Any CPU - {F2149709-A88B-4F36-ABCA-307CA96E9FD1}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/src/Setup/Setup.wixproj b/src/Setup/Setup.wixproj index 3036d970a..9ea59ce91 100644 --- a/src/Setup/Setup.wixproj +++ b/src/Setup/Setup.wixproj @@ -67,14 +67,6 @@ Binaries;Content;Satellites INSTALLFOLDER - - SetupCustomActions - {f2149709-a88b-4f36-abca-307ca96e9fd1} - True - True - Binaries;Content;Satellites - INSTALLFOLDER - From 3bbc9a337b125958c122fedd064ac7970cc7dc3e Mon Sep 17 00:00:00 2001 From: JeongPyoHam Date: Fri, 22 Jan 2016 09:37:15 -0800 Subject: [PATCH 069/289] UIThreadHelper's thread and AppShell's thread are different --- src/Package/Test/Shell/TestVsAppShell.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Package/Test/Shell/TestVsAppShell.cs b/src/Package/Test/Shell/TestVsAppShell.cs index d240cdf13..2165398c1 100644 --- a/src/Package/Test/Shell/TestVsAppShell.cs +++ b/src/Package/Test/Shell/TestVsAppShell.cs @@ -7,6 +7,7 @@ using Microsoft.Languages.Editor.Undo; using Microsoft.R.Support.Settings; using Microsoft.R.Support.Test.Utility; +using Microsoft.UnitTests.Core.Threading; using Microsoft.VisualStudio.R.Package.Shell; using Microsoft.VisualStudio.R.Package.Test.Utility; using Microsoft.VisualStudio.Text; @@ -26,6 +27,7 @@ private TestVsAppShell() { CompositionService = VsTestCompositionCatalog.Current.CompositionService; ExportProvider = VsTestCompositionCatalog.Current.ExportProvider; _sp = new TestServiceProvider(); + MainThread = UIThreadHelper.Instance.Thread; } public static void Create() { From 4245d2dc97851c62ae145878e6ca3e515f5912c1 Mon Sep 17 00:00:00 2001 From: JeongPyoHam Date: Fri, 22 Jan 2016 10:34:16 -0800 Subject: [PATCH 070/289] Set TestVsAppShell's main thread --- src/Package/Test/Shell/TestVsAppShell.cs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/Package/Test/Shell/TestVsAppShell.cs b/src/Package/Test/Shell/TestVsAppShell.cs index 2165398c1..97f52a5eb 100644 --- a/src/Package/Test/Shell/TestVsAppShell.cs +++ b/src/Package/Test/Shell/TestVsAppShell.cs @@ -27,7 +27,6 @@ private TestVsAppShell() { CompositionService = VsTestCompositionCatalog.Current.CompositionService; ExportProvider = VsTestCompositionCatalog.Current.ExportProvider; _sp = new TestServiceProvider(); - MainThread = UIThreadHelper.Instance.Thread; } public static void Create() { @@ -37,9 +36,11 @@ public static void Create() { // replacements. For example, interactive editor tests // need smaller MEF catalog which excludes certain // VS-specific implementations. - _instance = new TestVsAppShell(); - VsAppShell.Current = _instance; - RToolsSettings.Current = new TestRToolsSettings(); + UIThreadHelper.Instance.Invoke(() => { + _instance = new TestVsAppShell(); + VsAppShell.Current = _instance; + RToolsSettings.Current = new TestRToolsSettings(); + }); } #region ICompositionCatalog From 53ff874d653990348c6992cac74b297d7f0a90c1 Mon Sep 17 00:00:00 2001 From: JeongPyoHam Date: Fri, 22 Jan 2016 10:46:43 -0800 Subject: [PATCH 071/289] Visual tree comparison is property order agnostic - property order dependent upon machine somehow --- .../Core/Test/Controls/ControlTestScript.cs | 8 + .../Test/Utility/SupportedWpfProperties.cs | 2 +- .../TestApp/Data/VariableExplorerTest.cs | 14 +- .../TestApp/Files/VariableExplorer01.tree | 14084 +++++- .../TestApp/Files/VariableExplorer02.tree | 21804 ++++++++- .../TestApp/Files/VariableExplorer03.tree | 37465 ++++++++++++++-- ...oft.VisualStudio.R.Interactive.Test.csproj | 2 + src/Package/TestApp/Utility/ViewTreeDump.cs | 55 +- .../TestApp/Utility/VisualTreeObject.cs | 49 + .../TestApp/Utility/VisualTreeProperty.cs | 75 + 10 files changed, 67845 insertions(+), 5713 deletions(-) create mode 100644 src/Package/TestApp/Utility/VisualTreeObject.cs create mode 100644 src/Package/TestApp/Utility/VisualTreeProperty.cs diff --git a/src/Common/Core/Test/Controls/ControlTestScript.cs b/src/Common/Core/Test/Controls/ControlTestScript.cs index d388fb8b2..085f37c42 100644 --- a/src/Common/Core/Test/Controls/ControlTestScript.cs +++ b/src/Common/Core/Test/Controls/ControlTestScript.cs @@ -1,5 +1,7 @@ using System; using System.Diagnostics.CodeAnalysis; +using System.Windows; +using System.Xml.Serialization; using Microsoft.Common.Core.Test.Script; using Microsoft.Common.Core.Test.Utility; using Microsoft.UnitTests.Core.Threading; @@ -21,6 +23,12 @@ public void Dispose() { ControlWindow.Close(); } + public DependencyObject Control { + get { + return ControlWindow.Control; + } + } + public string WriteVisualTree(bool writeProperties = true) { VisualTreeWriter w = new VisualTreeWriter(); string tree = null; diff --git a/src/Common/Core/Test/Utility/SupportedWpfProperties.cs b/src/Common/Core/Test/Utility/SupportedWpfProperties.cs index bb7815e60..9195976dc 100644 --- a/src/Common/Core/Test/Utility/SupportedWpfProperties.cs +++ b/src/Common/Core/Test/Utility/SupportedWpfProperties.cs @@ -6,7 +6,7 @@ namespace Microsoft.Common.Core.Test.Utility { /// Properties written by the /// [ExcludeFromCodeCoverage] - internal static class SupportedWpfProperties { + public static class SupportedWpfProperties { private static HashSet _hashset; public static bool IsSupported(string name) { diff --git a/src/Package/TestApp/Data/VariableExplorerTest.cs b/src/Package/TestApp/Data/VariableExplorerTest.cs index 082078352..34fe5b62b 100644 --- a/src/Package/TestApp/Data/VariableExplorerTest.cs +++ b/src/Package/TestApp/Data/VariableExplorerTest.cs @@ -1,5 +1,9 @@ -using System.Diagnostics.CodeAnalysis; +using System; +using System.Diagnostics.CodeAnalysis; +using System.IO; using System.Threading.Tasks; +using System.Windows; +using System.Xml.Serialization; using Microsoft.Common.Core.Test.Controls; using Microsoft.R.Host.Client; using Microsoft.UnitTests.Core.XUnit; @@ -22,7 +26,7 @@ public VariableExplorerTest(TestFilesFixture files) { [Category.Interactive] public void VariableExplorer_ConstructorTest01() { using (var script = new ControlTestScript(typeof(VariableGridHost))) { - string actual = script.WriteVisualTree(); + var actual = VisualTreeObject.Create(script.Control); ViewTreeDump.CompareVisualTrees(_files, actual, "VariableExplorer01"); } } @@ -32,7 +36,7 @@ public void VariableExplorer_ConstructorTest01() { public void VariableExplorer_ConstructorTest02() { using (var hostScript = new VsRHostScript()) { using (var script = new ControlTestScript(typeof(VariableView))) { - string actual = script.WriteVisualTree(); + var actual = VisualTreeObject.Create(script.Control); ViewTreeDump.CompareVisualTrees(_files, actual, "VariableExplorer02"); } } @@ -41,7 +45,7 @@ public void VariableExplorer_ConstructorTest02() { [Test] [Category.Interactive] public void VariableExplorer_SimpleDataTest() { - string actual = null; + VisualTreeObject actual = null; using (var hostScript = new VsRHostScript()) { using (var script = new ControlTestScript(typeof(VariableView))) { DoIdle(100); @@ -52,7 +56,7 @@ public void VariableExplorer_SimpleDataTest() { }).Wait(); DoIdle(2000); - actual = script.WriteVisualTree(); + actual = VisualTreeObject.Create(script.Control); } } ViewTreeDump.CompareVisualTrees(_files, actual, "VariableExplorer03"); diff --git a/src/Package/TestApp/Files/VariableExplorer01.tree b/src/Package/TestApp/Files/VariableExplorer01.tree index a52db2fc8..ca59e2bcf 100644 --- a/src/Package/TestApp/Files/VariableExplorer01.tree +++ b/src/Package/TestApp/Files/VariableExplorer01.tree @@ -1,1081 +1,13003 @@ -VariableGridHost -Content = System.Windows.Controls.Grid -ContentTemplate = null -Padding = 0,0,0,0 -DataContext = null -Name = -Margin = 0,0,0,0 -HorizontalAlignment = Stretch -VerticalAlignment = Stretch -ToolTip = null -ContextMenu = null -Visibility = Visible -IsEnabled = True -IsVisible = True -IsEnabled = True -IsEnabled = True -TextAlignment = Left -IsVirtualizing = True -Name = -HorizontalScrollBarVisibility = Disabled -VerticalScrollBarVisibility = Visible --------------------------------------------------------------- - Border - Padding = 0,0,0,0 - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - ContentPresenter - Content = System.Windows.Controls.Grid - ContentTemplate = null - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Grid - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - TextBlock - Text = - Padding = 0,0,0,0 - TextAlignment = Left - DataContext = null - Name = ErrorTextBlock - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Collapsed - IsEnabled = True - IsVisible = False - IsEnabled = True - IsEnabled = True - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - MatrixView - Content = System.Windows.Controls.Grid - ContentTemplate = null - Padding = 0,0,0,0 - DataContext = null - Name = VariableGrid - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Border - Padding = 0,0,0,0 - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - ContentPresenter - Content = System.Windows.Controls.Grid - ContentTemplate = null - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Grid - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Border - Padding = 0,0,0,0 - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Rectangle - DataContext = null - Name = LeftTopCorner - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - VisualGrid - DataContext = null - Name = ColumnHeader - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Rectangle - DataContext = null - Name = RightTopCorner - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - VisualGrid - DataContext = null - Name = RowHeader - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - VisualGrid - DataContext = null - Name = Data - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - ScrollBar - Padding = 0,0,0,0 - DataContext = null - Name = VerticalScrollBar - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Grid - DataContext = null - Name = Bg - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Border - Padding = 0,0,0,0 - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - RepeatButton - Content = System.Windows.Shapes.Path - ContentTemplate = null - Padding = 1,1,1,1 - DataContext = null - Name = PART_LineUpButton - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Border - Padding = 0,0,0,0 - DataContext = null - Name = border - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - ContentPresenter - Content = System.Windows.Shapes.Path - ContentTemplate = null - DataContext = null - Name = contentPresenter - Margin = 1,1,1,1 - HorizontalAlignment = Center - VerticalAlignment = Center - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Path - Data = M0,4C0,4 0,6 0,6 0,6 3.5,2.5 3.5,2.5 3.5,2.5 7,6 7,6 7,6 7,4 7,4 7,4 3.5,0.5 3.5,0.5 3.5,0.5 0,4 0,4z - DataContext = null - Name = ArrowTop - Margin = 3,4,3,3 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - Track - DataContext = null - Name = PART_Track - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - RepeatButton - Content = null - ContentTemplate = null - Padding = 0,0,0,0 - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Rectangle - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - RepeatButton - Content = null - ContentTemplate = null - Padding = 0,0,0,0 - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Rectangle - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Thumb - Padding = 0,0,0,0 - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Rectangle - DataContext = null - Name = rectangle - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - -------------------------------------------------------------- - RepeatButton - Content = System.Windows.Shapes.Path - ContentTemplate = null - Padding = 1,1,1,1 - DataContext = null - Name = PART_LineDownButton - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Border - Padding = 0,0,0,0 - DataContext = null - Name = border - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - ContentPresenter - Content = System.Windows.Shapes.Path - ContentTemplate = null - DataContext = null - Name = contentPresenter - Margin = 1,1,1,1 - HorizontalAlignment = Center - VerticalAlignment = Center - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Path - Data = M0,2.5C0,2.5 0,0.5 0,0.5 0,0.5 3.5,4 3.5,4 3.5,4 7,0.5 7,0.5 7,0.5 7,2.5 7,2.5 7,2.5 3.5,6 3.5,6 3.5,6 0,2.5 0,2.5z - DataContext = null - Name = ArrowBottom - Margin = 3,4,3,3 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - Rectangle - DataContext = null - Name = LeftBottomCorner - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - ScrollBar - Padding = 0,0,0,0 - DataContext = null - Name = HorizontalScrollBar - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Grid - DataContext = null - Name = Bg - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Border - Padding = 0,0,0,0 - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - RepeatButton - Content = System.Windows.Shapes.Path - ContentTemplate = null - Padding = 1,1,1,1 - DataContext = null - Name = PART_LineLeftButton - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Border - Padding = 0,0,0,0 - DataContext = null - Name = border - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - ContentPresenter - Content = System.Windows.Shapes.Path - ContentTemplate = null - DataContext = null - Name = contentPresenter - Margin = 1,1,1,1 - HorizontalAlignment = Center - VerticalAlignment = Center - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Path - Data = M3.18,7C3.18,7 5,7 5,7 5,7 1.81,3.5 1.81,3.5 1.81,3.5 5,0 5,0 5,0 3.18,0 3.18,0 3.18,0 0,3.5 0,3.5 0,3.5 3.18,7 3.18,7z - DataContext = null - Name = ArrowLeft - Margin = 3,3,3,3 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - Track - DataContext = null - Name = PART_Track - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - RepeatButton - Content = null - ContentTemplate = null - Padding = 0,0,0,0 - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Rectangle - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - RepeatButton - Content = null - ContentTemplate = null - Padding = 0,0,0,0 - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Rectangle - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Thumb - Padding = 0,0,0,0 - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Rectangle - DataContext = null - Name = rectangle - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - -------------------------------------------------------------- - RepeatButton - Content = System.Windows.Shapes.Path - ContentTemplate = null - Padding = 1,1,1,1 - DataContext = null - Name = PART_LineRightButton - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Border - Padding = 0,0,0,0 - DataContext = null - Name = border - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - ContentPresenter - Content = System.Windows.Shapes.Path - ContentTemplate = null - DataContext = null - Name = contentPresenter - Margin = 1,1,1,1 - HorizontalAlignment = Center - VerticalAlignment = Center - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Path - Data = M1.81,7C1.81,7 0,7 0,7 0,7 3.18,3.5 3.18,3.5 3.18,3.5 0,0 0,0 0,0 1.81,0 1.81,0 1.81,0 5,3.5 5,3.5 5,3.5 1.81,7 1.81,7z - DataContext = null - Name = ArrowRight - Margin = 3,3,3,3 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - Rectangle - DataContext = null - Name = RightBottomCorner - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- --------------------------------------------------------------- + + + VariableGridHost + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Border + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ContentPresenter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Grid + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextBlock + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + MatrixView + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Border + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ContentPresenter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Grid + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Border + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Rectangle + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VisualGrid + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Rectangle + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VisualGrid + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VisualGrid + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ScrollBar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Grid + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Border + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RepeatButton + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Border + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ContentPresenter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Path + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Track + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RepeatButton + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Rectangle + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RepeatButton + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Rectangle + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Thumb + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Rectangle + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RepeatButton + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Border + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ContentPresenter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Path + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Rectangle + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ScrollBar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Grid + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Border + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RepeatButton + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Border + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ContentPresenter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Path + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Track + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RepeatButton + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Rectangle + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RepeatButton + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Rectangle + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Thumb + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Rectangle + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RepeatButton + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Border + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ContentPresenter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Path + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Rectangle + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Package/TestApp/Files/VariableExplorer02.tree b/src/Package/TestApp/Files/VariableExplorer02.tree index acfec8eea..cf60edd88 100644 --- a/src/Package/TestApp/Files/VariableExplorer02.tree +++ b/src/Package/TestApp/Files/VariableExplorer02.tree @@ -1,1686 +1,20118 @@ -VariableView -Content = System.Windows.Controls.Grid -ContentTemplate = null -Padding = 0,0,0,0 -DataContext = null -Name = -Margin = 0,0,0,0 -HorizontalAlignment = Stretch -VerticalAlignment = Stretch -ToolTip = null -ContextMenu = null -Visibility = Visible -IsEnabled = True -IsVisible = True -IsEnabled = True -IsEnabled = True -TextAlignment = Left -IsVirtualizing = True -Name = -HorizontalScrollBarVisibility = Disabled -VerticalScrollBarVisibility = Visible --------------------------------------------------------------- - Border - Padding = 0,0,0,0 - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - ContentPresenter - Content = System.Windows.Controls.Grid - ContentTemplate = null - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Grid - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - TextBlock - Text = No R Interactive - Padding = 0,0,0,0 - TextAlignment = Left - DataContext = null - Name = EnvironmentName - Margin = 4,4,4,4 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - TreeGrid - HorizontalScrollBarVisibility = Auto - VerticalScrollBarVisibility = Visible - Padding = 0,0,0,0 - DataContext = null - Name = RootTreeGrid - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - -------------------------------------------------------------- - Border - Padding = 0,0,0,0 - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - ScrollViewer - HorizontalScrollBarVisibility = Auto - VerticalScrollBarVisibility = Visible - Content = System.Windows.Controls.ItemsPresenter - ContentTemplate = null - Padding = 0,0,0,0 - DataContext = null - Name = DG_ScrollViewer - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - -------------------------------------------------------------- - Grid - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Button - Content = null - ContentTemplate = null - Padding = 1,1,1,1 - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Collapsed - IsEnabled = False - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Grid - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Rectangle - DataContext = null - Name = Border - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Polygon - DataContext = null - Name = Arrow - Margin = 8,8,3,3 - HorizontalAlignment = Right - VerticalAlignment = Bottom - ToolTip = null - ContextMenu = null - Visibility = Collapsed - IsEnabled = False - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - -------------------------------------------------------------- - DataGridColumnHeadersPresenter - Padding = 0,0,0,0 - DataContext = null - Name = PART_ColumnHeadersPresenter - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = False - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Grid - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - DataGridColumnHeader - Content = null - ContentTemplate = null - Padding = 4,4,4,4 - DataContext = null - Name = PART_FillerColumnHeader - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Grid - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - DataGridHeaderBorder - Padding = 4,4,4,4 - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - ContentPresenter - Content = null - ContentTemplate = null - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Left - VerticalAlignment = Center - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Thumb - Padding = 0,0,0,0 - DataContext = null - Name = PART_LeftHeaderGripper - Margin = 0,0,0,0 - HorizontalAlignment = Left - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Border - Padding = 0,0,0,0 - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Thumb - Padding = 0,0,0,0 - DataContext = null - Name = PART_RightHeaderGripper - Margin = 0,0,0,0 - HorizontalAlignment = Right - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Border - Padding = 0,0,0,0 - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - ItemsPresenter - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - DataGridCellsPanel - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - DataGridColumnHeader - Content = Name - ContentTemplate = null - Padding = 4,4,4,4 - DataContext = Name - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Grid - DataContext = Name - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - DataGridHeaderBorder - Padding = 4,4,4,4 - DataContext = Name - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - ContentPresenter - Content = Name - ContentTemplate = null - DataContext = Name - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Left - VerticalAlignment = Center - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - TextBlock - Text = Name - Padding = 0,0,0,0 - TextAlignment = Left - DataContext = Name - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - -------------------------------------------------------------- - Thumb - Padding = 0,0,0,0 - DataContext = Name - Name = PART_LeftHeaderGripper - Margin = 0,0,0,0 - HorizontalAlignment = Left - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Collapsed - IsEnabled = True - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Thumb - Padding = 0,0,0,0 - DataContext = Name - Name = PART_RightHeaderGripper - Margin = 0,0,0,0 - HorizontalAlignment = Right - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Border - Padding = 0,0,0,0 - DataContext = Name - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - DataGridColumnHeader - Content = Value - ContentTemplate = null - Padding = 4,4,4,4 - DataContext = Value - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Grid - DataContext = Value - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - DataGridHeaderBorder - Padding = 4,4,4,4 - DataContext = Value - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - ContentPresenter - Content = Value - ContentTemplate = null - DataContext = Value - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Left - VerticalAlignment = Center - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - TextBlock - Text = Value - Padding = 0,0,0,0 - TextAlignment = Left - DataContext = Value - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - -------------------------------------------------------------- - Thumb - Padding = 0,0,0,0 - DataContext = Value - Name = PART_LeftHeaderGripper - Margin = 0,0,0,0 - HorizontalAlignment = Left - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Border - Padding = 0,0,0,0 - DataContext = Value - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Thumb - Padding = 0,0,0,0 - DataContext = Value - Name = PART_RightHeaderGripper - Margin = 0,0,0,0 - HorizontalAlignment = Right - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Border - Padding = 0,0,0,0 - DataContext = Value - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - DataGridColumnHeader - Content = Class - ContentTemplate = null - Padding = 4,4,4,4 - DataContext = Class - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Grid - DataContext = Class - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - DataGridHeaderBorder - Padding = 4,4,4,4 - DataContext = Class - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - ContentPresenter - Content = Class - ContentTemplate = null - DataContext = Class - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Left - VerticalAlignment = Center - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - TextBlock - Text = Class - Padding = 0,0,0,0 - TextAlignment = Left - DataContext = Class - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - -------------------------------------------------------------- - Thumb - Padding = 0,0,0,0 - DataContext = Class - Name = PART_LeftHeaderGripper - Margin = 0,0,0,0 - HorizontalAlignment = Left - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Border - Padding = 0,0,0,0 - DataContext = Class - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Thumb - Padding = 0,0,0,0 - DataContext = Class - Name = PART_RightHeaderGripper - Margin = 0,0,0,0 - HorizontalAlignment = Right - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Border - Padding = 0,0,0,0 - DataContext = Class - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - DataGridColumnHeader - Content = Type - ContentTemplate = null - Padding = 4,4,4,4 - DataContext = Type - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Grid - DataContext = Type - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - DataGridHeaderBorder - Padding = 4,4,4,4 - DataContext = Type - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - ContentPresenter - Content = Type - ContentTemplate = null - DataContext = Type - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Left - VerticalAlignment = Center - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - TextBlock - Text = Type - Padding = 0,0,0,0 - TextAlignment = Left - DataContext = Type - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - -------------------------------------------------------------- - Thumb - Padding = 0,0,0,0 - DataContext = Type - Name = PART_LeftHeaderGripper - Margin = 0,0,0,0 - HorizontalAlignment = Left - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Border - Padding = 0,0,0,0 - DataContext = Type - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Thumb - Padding = 0,0,0,0 - DataContext = Type - Name = PART_RightHeaderGripper - Margin = 0,0,0,0 - HorizontalAlignment = Right - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Border - Padding = 0,0,0,0 - DataContext = Type - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - ScrollContentPresenter - Content = System.Windows.Controls.ItemsPresenter - ContentTemplate = null - DataContext = null - Name = PART_ScrollContentPresenter - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - ItemsPresenter - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - DataGridRowsPresenter - DataContext = null - Name = PART_RowsPresenter - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - AdornerLayer - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - ScrollBar - Padding = 0,0,0,0 - DataContext = null - Name = PART_VerticalScrollBar - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Grid - DataContext = null - Name = Bg - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Border - Padding = 0,0,0,0 - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - RepeatButton - Content = System.Windows.Shapes.Path - ContentTemplate = null - Padding = 1,1,1,1 - DataContext = null - Name = PART_LineUpButton - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Border - Padding = 0,0,0,0 - DataContext = null - Name = border - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - ContentPresenter - Content = System.Windows.Shapes.Path - ContentTemplate = null - DataContext = null - Name = contentPresenter - Margin = 1,1,1,1 - HorizontalAlignment = Center - VerticalAlignment = Center - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Path - Data = M0,4C0,4 0,6 0,6 0,6 3.5,2.5 3.5,2.5 3.5,2.5 7,6 7,6 7,6 7,4 7,4 7,4 3.5,0.5 3.5,0.5 3.5,0.5 0,4 0,4z - DataContext = null - Name = ArrowTop - Margin = 3,4,3,3 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - Track - DataContext = null - Name = PART_Track - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Hidden - IsEnabled = False - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - RepeatButton - Content = null - ContentTemplate = null - Padding = 0,0,0,0 - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - RepeatButton - Content = null - ContentTemplate = null - Padding = 0,0,0,0 - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Thumb - Padding = 0,0,0,0 - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Rectangle - DataContext = null - Name = rectangle - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - -------------------------------------------------------------- - RepeatButton - Content = System.Windows.Shapes.Path - ContentTemplate = null - Padding = 1,1,1,1 - DataContext = null - Name = PART_LineDownButton - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Border - Padding = 0,0,0,0 - DataContext = null - Name = border - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - ContentPresenter - Content = System.Windows.Shapes.Path - ContentTemplate = null - DataContext = null - Name = contentPresenter - Margin = 1,1,1,1 - HorizontalAlignment = Center - VerticalAlignment = Center - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Path - Data = M0,2.5C0,2.5 0,0.5 0,0.5 0,0.5 3.5,4 3.5,4 3.5,4 7,0.5 7,0.5 7,0.5 7,2.5 7,2.5 7,2.5 3.5,6 3.5,6 3.5,6 0,2.5 0,2.5z - DataContext = null - Name = ArrowBottom - Margin = 3,4,3,3 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - Grid - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - ScrollBar - Padding = 0,0,0,0 - DataContext = null - Name = PART_HorizontalScrollBar - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Collapsed - IsEnabled = False - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- --------------------------------------------------------------- + + + VariableView + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Border + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ContentPresenter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Grid + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextBlock + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TreeGrid + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Border + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ScrollViewer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Grid + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Button + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Grid + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Rectangle + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Polygon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DataGridColumnHeadersPresenter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Grid + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DataGridColumnHeader + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Grid + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DataGridHeaderBorder + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ContentPresenter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Thumb + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Border + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Thumb + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Border + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ItemsPresenter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DataGridCellsPanel + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DataGridColumnHeader + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Grid + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DataGridHeaderBorder + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ContentPresenter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextBlock + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Thumb + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Thumb + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Border + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DataGridColumnHeader + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Grid + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DataGridHeaderBorder + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ContentPresenter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextBlock + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Thumb + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Border + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Thumb + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Border + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DataGridColumnHeader + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Grid + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DataGridHeaderBorder + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ContentPresenter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextBlock + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Thumb + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Border + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Thumb + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Border + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DataGridColumnHeader + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Grid + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DataGridHeaderBorder + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ContentPresenter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextBlock + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Thumb + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Border + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Thumb + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Border + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ScrollContentPresenter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ItemsPresenter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DataGridRowsPresenter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AdornerLayer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ScrollBar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Grid + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Border + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RepeatButton + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Border + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ContentPresenter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Path + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Track + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RepeatButton + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RepeatButton + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Thumb + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Rectangle + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RepeatButton + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Border + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ContentPresenter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Path + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Grid + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ScrollBar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Package/TestApp/Files/VariableExplorer03.tree b/src/Package/TestApp/Files/VariableExplorer03.tree index 1509e9727..e0fd833e3 100644 --- a/src/Package/TestApp/Files/VariableExplorer03.tree +++ b/src/Package/TestApp/Files/VariableExplorer03.tree @@ -1,2936 +1,34529 @@ -VariableView -Content = System.Windows.Controls.Grid -ContentTemplate = null -Padding = 0,0,0,0 -DataContext = null -Name = -Margin = 0,0,0,0 -HorizontalAlignment = Stretch -VerticalAlignment = Stretch -ToolTip = null -ContextMenu = null -Visibility = Visible -IsEnabled = True -IsVisible = True -IsEnabled = True -IsEnabled = True -TextAlignment = Left -IsVirtualizing = True -Name = -HorizontalScrollBarVisibility = Disabled -VerticalScrollBarVisibility = Visible --------------------------------------------------------------- - Border - Padding = 0,0,0,0 - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - ContentPresenter - Content = System.Windows.Controls.Grid - ContentTemplate = null - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Grid - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - TextBlock - Text = Global Environment - Padding = 0,0,0,0 - TextAlignment = Left - DataContext = null - Name = EnvironmentName - Margin = 4,4,4,4 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - TreeGrid - HorizontalScrollBarVisibility = Auto - VerticalScrollBarVisibility = Visible - Padding = 0,0,0,0 - DataContext = null - Name = RootTreeGrid - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - -------------------------------------------------------------- - Border - Padding = 0,0,0,0 - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - ScrollViewer - HorizontalScrollBarVisibility = Auto - VerticalScrollBarVisibility = Visible - Content = System.Windows.Controls.ItemsPresenter - ContentTemplate = null - Padding = 0,0,0,0 - DataContext = null - Name = DG_ScrollViewer - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - -------------------------------------------------------------- - Grid - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Button - Content = null - ContentTemplate = null - Padding = 1,1,1,1 - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Collapsed - IsEnabled = False - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Grid - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Rectangle - DataContext = null - Name = Border - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Polygon - DataContext = null - Name = Arrow - Margin = 8,8,3,3 - HorizontalAlignment = Right - VerticalAlignment = Bottom - ToolTip = null - ContextMenu = null - Visibility = Collapsed - IsEnabled = False - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - -------------------------------------------------------------- - DataGridColumnHeadersPresenter - Padding = 0,0,0,0 - DataContext = null - Name = PART_ColumnHeadersPresenter - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = False - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Grid - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - DataGridColumnHeader - Content = null - ContentTemplate = null - Padding = 4,4,4,4 - DataContext = null - Name = PART_FillerColumnHeader - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Grid - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - DataGridHeaderBorder - Padding = 4,4,4,4 - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - ContentPresenter - Content = null - ContentTemplate = null - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Left - VerticalAlignment = Center - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Thumb - Padding = 0,0,0,0 - DataContext = null - Name = PART_LeftHeaderGripper - Margin = 0,0,0,0 - HorizontalAlignment = Left - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Border - Padding = 0,0,0,0 - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Thumb - Padding = 0,0,0,0 - DataContext = null - Name = PART_RightHeaderGripper - Margin = 0,0,0,0 - HorizontalAlignment = Right - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Border - Padding = 0,0,0,0 - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - ItemsPresenter - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - DataGridCellsPanel - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - DataGridColumnHeader - Content = Name - ContentTemplate = null - Padding = 4,4,4,4 - DataContext = Name - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Grid - DataContext = Name - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - DataGridHeaderBorder - Padding = 4,4,4,4 - DataContext = Name - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - ContentPresenter - Content = Name - ContentTemplate = null - DataContext = Name - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Left - VerticalAlignment = Center - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - TextBlock - Text = Name - Padding = 0,0,0,0 - TextAlignment = Left - DataContext = Name - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - -------------------------------------------------------------- - Thumb - Padding = 0,0,0,0 - DataContext = Name - Name = PART_LeftHeaderGripper - Margin = 0,0,0,0 - HorizontalAlignment = Left - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Collapsed - IsEnabled = True - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Thumb - Padding = 0,0,0,0 - DataContext = Name - Name = PART_RightHeaderGripper - Margin = 0,0,0,0 - HorizontalAlignment = Right - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Border - Padding = 0,0,0,0 - DataContext = Name - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - DataGridColumnHeader - Content = Value - ContentTemplate = null - Padding = 4,4,4,4 - DataContext = Value - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Grid - DataContext = Value - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - DataGridHeaderBorder - Padding = 4,4,4,4 - DataContext = Value - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - ContentPresenter - Content = Value - ContentTemplate = null - DataContext = Value - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Left - VerticalAlignment = Center - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - TextBlock - Text = Value - Padding = 0,0,0,0 - TextAlignment = Left - DataContext = Value - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - -------------------------------------------------------------- - Thumb - Padding = 0,0,0,0 - DataContext = Value - Name = PART_LeftHeaderGripper - Margin = 0,0,0,0 - HorizontalAlignment = Left - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Border - Padding = 0,0,0,0 - DataContext = Value - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Thumb - Padding = 0,0,0,0 - DataContext = Value - Name = PART_RightHeaderGripper - Margin = 0,0,0,0 - HorizontalAlignment = Right - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Border - Padding = 0,0,0,0 - DataContext = Value - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - DataGridColumnHeader - Content = Class - ContentTemplate = null - Padding = 4,4,4,4 - DataContext = Class - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Grid - DataContext = Class - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - DataGridHeaderBorder - Padding = 4,4,4,4 - DataContext = Class - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - ContentPresenter - Content = Class - ContentTemplate = null - DataContext = Class - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Left - VerticalAlignment = Center - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - TextBlock - Text = Class - Padding = 0,0,0,0 - TextAlignment = Left - DataContext = Class - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - -------------------------------------------------------------- - Thumb - Padding = 0,0,0,0 - DataContext = Class - Name = PART_LeftHeaderGripper - Margin = 0,0,0,0 - HorizontalAlignment = Left - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Border - Padding = 0,0,0,0 - DataContext = Class - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Thumb - Padding = 0,0,0,0 - DataContext = Class - Name = PART_RightHeaderGripper - Margin = 0,0,0,0 - HorizontalAlignment = Right - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Border - Padding = 0,0,0,0 - DataContext = Class - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - DataGridColumnHeader - Content = Type - ContentTemplate = null - Padding = 4,4,4,4 - DataContext = Type - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Grid - DataContext = Type - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - DataGridHeaderBorder - Padding = 4,4,4,4 - DataContext = Type - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - ContentPresenter - Content = Type - ContentTemplate = null - DataContext = Type - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Left - VerticalAlignment = Center - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - TextBlock - Text = Type - Padding = 0,0,0,0 - TextAlignment = Left - DataContext = Type - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - -------------------------------------------------------------- - Thumb - Padding = 0,0,0,0 - DataContext = Type - Name = PART_LeftHeaderGripper - Margin = 0,0,0,0 - HorizontalAlignment = Left - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Border - Padding = 0,0,0,0 - DataContext = Type - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Thumb - Padding = 0,0,0,0 - DataContext = Type - Name = PART_RightHeaderGripper - Margin = 0,0,0,0 - HorizontalAlignment = Right - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Border - Padding = 0,0,0,0 - DataContext = Type - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - ScrollContentPresenter - Content = System.Windows.Controls.ItemsPresenter - ContentTemplate = null - DataContext = null - Name = PART_ScrollContentPresenter - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - ItemsPresenter - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - DataGridRowsPresenter - DataContext = null - Name = PART_RowsPresenter - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - DataGridRow - Padding = 0,0,0,0 - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Border - Padding = 0,0,0,0 - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = DGR_Border - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - SelectiveScrollingGrid - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - DataGridCellsPresenter - Padding = 0,0,0,0 - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = False - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - ItemsPresenter - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - DataGridCellsPanel - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - DataGridCell - Content = System.Windows.Controls.ContentPresenter - ContentTemplate = null - Padding = 1,1,1,1 - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Border - Padding = 1,1,1,1 - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - ContentPresenter - Content = System.Windows.Controls.ContentPresenter - ContentTemplate = null - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - ContentPresenter - Content = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - ContentTemplate = System.Windows.DataTemplate - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Grid - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Rectangle - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = Indentation - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - ToggleButton - Content = null - ContentTemplate = null - Padding = 1,1,1,1 - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = Expander - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Border - Padding = 5,5,5,5 - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Path - Data = M0,0L0,6 6,0z - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = ExpandPath - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - -------------------------------------------------------------- - TextBlock - Text = x - Padding = 0,0,0,0 - TextAlignment = Left - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Center - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - DataGridCell - Content = System.Windows.Controls.ContentPresenter - ContentTemplate = null - Padding = 1,1,1,1 - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Border - Padding = 1,1,1,1 - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - ContentPresenter - Content = System.Windows.Controls.ContentPresenter - ContentTemplate = null - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - ContentPresenter - Content = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - ContentTemplate = System.Windows.DataTemplate - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Grid - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - TextBlock - Text = int [1:10] 1 2 3 4 5 6 7 8 9 10 - Padding = 0,0,0,0 - TextAlignment = Left - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Center - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Button - Content = null - ContentTemplate = null - Padding = 1,1,1,1 - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Right - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Collapsed - IsEnabled = True - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Border - Padding = 0,0,0,0 - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = Border - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - CrispImage - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - DataGridCell - Content = System.Windows.Controls.TextBlock - ContentTemplate = null - Padding = 1,1,1,1 - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Border - Padding = 1,1,1,1 - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - ContentPresenter - Content = System.Windows.Controls.TextBlock - ContentTemplate = null - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - TextBlock - Text = integer - Padding = 0,0,0,0 - TextAlignment = Left - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 2,0,2,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - DataGridCell - Content = System.Windows.Controls.TextBlock - ContentTemplate = null - Padding = 1,1,1,1 - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Border - Padding = 1,1,1,1 - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - ContentPresenter - Content = System.Windows.Controls.TextBlock - ContentTemplate = null - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - TextBlock - Text = integer - Padding = 0,0,0,0 - TextAlignment = Left - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 2,0,2,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - DataGridDetailsPresenter - Content = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - ContentTemplate = null - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Collapsed - IsEnabled = True - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - DataGridRowHeader - Content = null - ContentTemplate = null - Padding = 0,0,0,0 - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Collapsed - IsEnabled = True - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Grid - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - DataGridHeaderBorder - Padding = 0,0,0,0 - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - StackPanel - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - ContentPresenter - Content = null - ContentTemplate = null - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Center - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Control - Padding = 0,0,0,0 - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Collapsed - IsEnabled = True - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - -------------------------------------------------------------- - Thumb - Padding = 0,0,0,0 - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = PART_TopHeaderGripper - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Top - ToolTip = null - ContextMenu = null - Visibility = Collapsed - IsEnabled = True - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Thumb - Padding = 0,0,0,0 - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = PART_BottomHeaderGripper - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Bottom - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Border - Padding = 0,0,0,0 - DataContext = Microsoft.VisualStudio.R.Package.DataInspect.ObservableTreeNode - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - AdornerLayer - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - ScrollBar - Padding = 0,0,0,0 - DataContext = null - Name = PART_VerticalScrollBar - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Grid - DataContext = null - Name = Bg - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Border - Padding = 0,0,0,0 - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - RepeatButton - Content = System.Windows.Shapes.Path - ContentTemplate = null - Padding = 1,1,1,1 - DataContext = null - Name = PART_LineUpButton - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Border - Padding = 0,0,0,0 - DataContext = null - Name = border - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - ContentPresenter - Content = System.Windows.Shapes.Path - ContentTemplate = null - DataContext = null - Name = contentPresenter - Margin = 1,1,1,1 - HorizontalAlignment = Center - VerticalAlignment = Center - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Path - Data = M0,4C0,4 0,6 0,6 0,6 3.5,2.5 3.5,2.5 3.5,2.5 7,6 7,6 7,6 7,4 7,4 7,4 3.5,0.5 3.5,0.5 3.5,0.5 0,4 0,4z - DataContext = null - Name = ArrowTop - Margin = 3,4,3,3 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - Track - DataContext = null - Name = PART_Track - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Hidden - IsEnabled = False - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - RepeatButton - Content = null - ContentTemplate = null - Padding = 0,0,0,0 - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - RepeatButton - Content = null - ContentTemplate = null - Padding = 0,0,0,0 - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - Thumb - Padding = 0,0,0,0 - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Rectangle - DataContext = null - Name = rectangle - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - -------------------------------------------------------------- - RepeatButton - Content = System.Windows.Shapes.Path - ContentTemplate = null - Padding = 1,1,1,1 - DataContext = null - Name = PART_LineDownButton - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Border - Padding = 0,0,0,0 - DataContext = null - Name = border - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - ContentPresenter - Content = System.Windows.Shapes.Path - ContentTemplate = null - DataContext = null - Name = contentPresenter - Margin = 1,1,1,1 - HorizontalAlignment = Center - VerticalAlignment = Center - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Path - Data = M0,2.5C0,2.5 0,0.5 0,0.5 0,0.5 3.5,4 3.5,4 3.5,4 7,0.5 7,0.5 7,0.5 7,2.5 7,2.5 7,2.5 3.5,6 3.5,6 3.5,6 0,2.5 0,2.5z - DataContext = null - Name = ArrowBottom - Margin = 3,4,3,3 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - Grid - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = True - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - ScrollBar - Padding = 0,0,0,0 - DataContext = null - Name = PART_HorizontalScrollBar - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Collapsed - IsEnabled = True - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Grid - DataContext = null - Name = Bg - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Border - Padding = 0,0,0,0 - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = True - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - RepeatButton - Content = System.Windows.Shapes.Path - ContentTemplate = null - Padding = 1,1,1,1 - DataContext = null - Name = PART_LineLeftButton - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Border - Padding = 0,0,0,0 - DataContext = null - Name = border - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - ContentPresenter - Content = System.Windows.Shapes.Path - ContentTemplate = null - DataContext = null - Name = contentPresenter - Margin = 1,1,1,1 - HorizontalAlignment = Center - VerticalAlignment = Center - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Path - Data = M3.18,7C3.18,7 5,7 5,7 5,7 1.81,3.5 1.81,3.5 1.81,3.5 5,0 5,0 5,0 3.18,0 3.18,0 3.18,0 0,3.5 0,3.5 0,3.5 3.18,7 3.18,7z - DataContext = null - Name = ArrowLeft - Margin = 3,3,3,3 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - Track - DataContext = null - Name = PART_Track - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - RepeatButton - Content = null - ContentTemplate = null - Padding = 0,0,0,0 - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Rectangle - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - RepeatButton - Content = null - ContentTemplate = null - Padding = 0,0,0,0 - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Rectangle - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Thumb - Padding = 0,0,0,0 - DataContext = null - Name = - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Rectangle - DataContext = null - Name = rectangle - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - -------------------------------------------------------------- - RepeatButton - Content = System.Windows.Shapes.Path - ContentTemplate = null - Padding = 1,1,1,1 - DataContext = null - Name = PART_LineRightButton - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Border - Padding = 0,0,0,0 - DataContext = null - Name = border - Margin = 0,0,0,0 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - ContentPresenter - Content = System.Windows.Shapes.Path - ContentTemplate = null - DataContext = null - Name = contentPresenter - Margin = 1,1,1,1 - HorizontalAlignment = Center - VerticalAlignment = Center - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - Path - Data = M1.81,7C1.81,7 0,7 0,7 0,7 3.18,3.5 3.18,3.5 3.18,3.5 0,0 0,0 0,0 1.81,0 1.81,0 1.81,0 5,3.5 5,3.5 5,3.5 1.81,7 1.81,7z - DataContext = null - Name = ArrowRight - Margin = 3,3,3,3 - HorizontalAlignment = Stretch - VerticalAlignment = Stretch - ToolTip = null - ContextMenu = null - Visibility = Visible - IsEnabled = False - IsVisible = False - IsEnabled = True - IsEnabled = True - TextAlignment = Left - IsVirtualizing = True - Name = - HorizontalScrollBarVisibility = Disabled - VerticalScrollBarVisibility = Visible - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- - -------------------------------------------------------------- --------------------------------------------------------------- + + + VariableView + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Border + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ContentPresenter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Grid + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextBlock + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TreeGrid + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Border + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ScrollViewer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Grid + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Button + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Grid + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Rectangle + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Polygon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DataGridColumnHeadersPresenter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Grid + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DataGridColumnHeader + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Grid + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DataGridHeaderBorder + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ContentPresenter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Thumb + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Border + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Thumb + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Border + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ItemsPresenter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DataGridCellsPanel + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DataGridColumnHeader + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Grid + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DataGridHeaderBorder + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ContentPresenter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextBlock + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Thumb + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Thumb + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Border + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DataGridColumnHeader + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Grid + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DataGridHeaderBorder + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ContentPresenter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextBlock + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Thumb + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Border + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Thumb + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Border + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DataGridColumnHeader + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Grid + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DataGridHeaderBorder + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ContentPresenter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextBlock + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Thumb + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Border + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Thumb + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Border + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DataGridColumnHeader + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Grid + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DataGridHeaderBorder + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ContentPresenter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextBlock + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Thumb + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Border + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Thumb + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Border + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ScrollContentPresenter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ItemsPresenter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DataGridRowsPresenter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DataGridRow + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Border + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SelectiveScrollingGrid + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DataGridCellsPresenter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ItemsPresenter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DataGridCellsPanel + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DataGridCell + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Border + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ContentPresenter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ContentPresenter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Grid + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Rectangle + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ToggleButton + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Border + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Path + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextBlock + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DataGridCell + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Border + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ContentPresenter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ContentPresenter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Grid + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextBlock + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Button + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Border + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CrispImage + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DataGridCell + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Border + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ContentPresenter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextBlock + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DataGridCell + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Border + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ContentPresenter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextBlock + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DataGridDetailsPresenter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DataGridRowHeader + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Grid + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DataGridHeaderBorder + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + StackPanel + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ContentPresenter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Control + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Thumb + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Thumb + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Border + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AdornerLayer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ScrollBar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Grid + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Border + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RepeatButton + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Border + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ContentPresenter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Path + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Track + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RepeatButton + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RepeatButton + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Thumb + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Rectangle + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RepeatButton + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Border + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ContentPresenter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Path + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Grid + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ScrollBar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Grid + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Border + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RepeatButton + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Border + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ContentPresenter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Path + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Track + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RepeatButton + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Rectangle + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RepeatButton + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Rectangle + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Thumb + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Rectangle + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RepeatButton + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Border + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ContentPresenter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Path + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Package/TestApp/Microsoft.VisualStudio.R.Interactive.Test.csproj b/src/Package/TestApp/Microsoft.VisualStudio.R.Interactive.Test.csproj index 16a515237..54f5a80ca 100644 --- a/src/Package/TestApp/Microsoft.VisualStudio.R.Interactive.Test.csproj +++ b/src/Package/TestApp/Microsoft.VisualStudio.R.Interactive.Test.csproj @@ -70,6 +70,8 @@ + + diff --git a/src/Package/TestApp/Utility/ViewTreeDump.cs b/src/Package/TestApp/Utility/ViewTreeDump.cs index a664bb4e3..0fc702f60 100644 --- a/src/Package/TestApp/Utility/ViewTreeDump.cs +++ b/src/Package/TestApp/Utility/ViewTreeDump.cs @@ -1,6 +1,8 @@ using System; using System.Diagnostics.CodeAnalysis; using System.IO; +using System.Linq; +using System.Xml.Serialization; using FluentAssertions; using Microsoft.Common.Core.Test.Utility; using Microsoft.UnitTests.Core.XUnit; @@ -11,22 +13,67 @@ internal class ViewTreeDump { // change to true in debugger if you want all baseline tree files regenerated private static bool _regenerateBaselineFiles = false; - public static void CompareVisualTrees(DeployFilesFixture fixture, string actual, string fileName) { + public static void CompareVisualTrees(DeployFilesFixture fixture, VisualTreeObject actual, string fileName) { Action a = () => CompareVisualTreesImplementation(fixture, actual, fileName); a.ShouldNotThrow(); } - private static void CompareVisualTreesImplementation(DeployFilesFixture fixture, string actual, string fileName) { + private static void CompareVisualTreesImplementation(DeployFilesFixture fixture, VisualTreeObject actual, string fileName) { string testFileName = fileName + ".tree"; string testFilePath = fixture.GetDestinationPath(testFileName); if (_regenerateBaselineFiles) { + var serializedActual = SerializeVisualTree(actual); + // Update this to your actual enlistment if you need to update baseline string enlistmentPath = @"F:\RTVS\src\Package\TestApp\Files"; string baselineFilePath = Path.Combine(enlistmentPath, Path.GetFileName(testFileName)); - TestFiles.UpdateBaseline(baselineFilePath, actual); + TestFiles.UpdateBaseline(baselineFilePath, serializedActual); } else { - TestFiles.CompareToBaseLine(testFilePath, actual); + var deserializedExpected = DeserializeVisualTree(testFilePath); + + CompareVisualTree(actual, deserializedExpected); + } + } + + private static void CompareVisualTree(VisualTreeObject actual, VisualTreeObject expected, bool compareProperty = true) { + // compare + actual.Name.ShouldBeEquivalentTo(expected.Name); + + if (compareProperty) { + var filteredActual = actual.Properties.Where(p => SupportedWpfProperties.IsSupported(p.Name)); + var filteredExpected = expected.Properties.Where(p => SupportedWpfProperties.IsSupported(p.Name)); + + var onlyInActual = filteredActual.Except(filteredExpected); + var onlyInExpected = filteredExpected.Except(filteredActual); + + onlyInActual.Count().ShouldBeEquivalentTo(0); + onlyInExpected.Count().ShouldBeEquivalentTo(0); + } + + actual.Children.Count.ShouldBeEquivalentTo(expected.Children.Count); + + var sortedActualChildren = actual.Children.OrderBy(c => c.Name); + var sortedExpectedChildren = expected.Children.OrderBy(c => c.Name); + + for (int i = 0; i < actual.Children.Count; i++) { + CompareVisualTree(sortedActualChildren.ElementAt(i), sortedExpectedChildren.ElementAt(i), compareProperty); + } + } + + private static string SerializeVisualTree(VisualTreeObject o) { + var serializer = new XmlSerializer(typeof(VisualTreeObject)); + using (var stringWriter = new StringWriter()) { + serializer.Serialize(stringWriter, o); + return stringWriter.ToString(); + } + } + + private static VisualTreeObject DeserializeVisualTree(string filePath) { + var serializer = new XmlSerializer(typeof(VisualTreeObject)); + + using (var stringReader = new StreamReader(filePath)) { + return (VisualTreeObject)serializer.Deserialize(stringReader); } } } diff --git a/src/Package/TestApp/Utility/VisualTreeObject.cs b/src/Package/TestApp/Utility/VisualTreeObject.cs new file mode 100644 index 000000000..5b7a6fe4d --- /dev/null +++ b/src/Package/TestApp/Utility/VisualTreeObject.cs @@ -0,0 +1,49 @@ +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Windows; +using System.Windows.Media; +using Microsoft.UnitTests.Core.Threading; + +namespace Microsoft.VisualStudio.R.Interactive.Test.Utility { + [ExcludeFromCodeCoverage] + public class VisualTreeObject { + public VisualTreeObject() { + Properties = new List(); + Children = new List(); + } + + public string Name { get; set; } + + public List Properties { get; set; } + + public List Children { get; set; } + + public static VisualTreeObject Create(DependencyObject o) { + VisualTreeObject visualTreeObj = null; + + UIThreadHelper.Instance.Invoke(() => { + visualTreeObj = new VisualTreeObject(); + + visualTreeObj.Name = o.GetType().Name; + visualTreeObj.Properties = VisualTreeProperty.GetProperties(o); + visualTreeObj.Children = GetChildren(o); + }); + + return visualTreeObj; + } + + private static List GetChildren(DependencyObject o) { + List children = new List(); + + int childrenCount = VisualTreeHelper.GetChildrenCount(o); + if (childrenCount > 0) { + for (int i = 0; i < childrenCount; i++) { + var child = VisualTreeHelper.GetChild(o, i); + children.Add(Create(child)); + } + } + + return children; + } + } +} diff --git a/src/Package/TestApp/Utility/VisualTreeProperty.cs b/src/Package/TestApp/Utility/VisualTreeProperty.cs new file mode 100644 index 000000000..055f2763a --- /dev/null +++ b/src/Package/TestApp/Utility/VisualTreeProperty.cs @@ -0,0 +1,75 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics.CodeAnalysis; +using System.Windows; +using System.Xml.Serialization; + +namespace Microsoft.VisualStudio.R.Interactive.Test.Utility { + [ExcludeFromCodeCoverage] + public class VisualTreeProperty { + [XmlAttribute] + public string Name { get; set; } + + [XmlAttribute] + public string Value { get; set; } + + public override bool Equals(object obj) { + if (ReferenceEquals(this, obj)) { + return true; + } + + var other = obj as VisualTreeProperty; + if (other == null) { + return false; + } + + if (Name == other.Name && Value == other.Value) { + return true; + } + + return false; + } + + public override int GetHashCode() { + return (Name == null ? 0 : Name.GetHashCode()) + ^ (Value == null ? 0 : Value.GetHashCode()); + } + + public static List GetProperties(DependencyObject o) { + var props = GetAttachedProperties(o); + + List visualTreeProps = new List(); + foreach (var prop in props) { + visualTreeProps.Add(Create(o, prop)); + } + return visualTreeProps; + } + + public static VisualTreeProperty Create(DependencyObject o, DependencyProperty prop) { + object value = o.GetValue(prop); + + var visualTreeProp = new VisualTreeProperty(); + visualTreeProp.Name = prop.Name; + visualTreeProp.Value = value == null ? "null" : value.ToString().Trim(); + + return visualTreeProp; + } + + private static IList GetAttachedProperties(DependencyObject obj) { + List result = new List(); + + foreach (PropertyDescriptor pd in TypeDescriptor.GetProperties(obj, + new Attribute[] { new PropertyFilterAttribute(PropertyFilterOptions.All) })) { + DependencyPropertyDescriptor dpd = + DependencyPropertyDescriptor.FromProperty(pd); + + if (dpd != null) { + result.Add(dpd.DependencyProperty); + } + } + + return result; + } + } +} From 1eb631419332ef40fe2eaf6f3df4413cfdf12f0d Mon Sep 17 00:00:00 2001 From: Alexander Sher Date: Fri, 22 Jan 2016 12:58:45 -0800 Subject: [PATCH 072/289] Fix #699: Opening .RHistory file with "Open File" causes a crash --- .../Impl/History/HistorySelectionTextAdornmentFactory.cs | 4 ++-- .../Impl/History/HistoryWindowPaneMouseProcessorProvider.cs | 2 +- src/Package/Impl/History/RHistory.cs | 3 ++- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/Package/Impl/History/HistorySelectionTextAdornmentFactory.cs b/src/Package/Impl/History/HistorySelectionTextAdornmentFactory.cs index 212dddbeb..2e17b340d 100644 --- a/src/Package/Impl/History/HistorySelectionTextAdornmentFactory.cs +++ b/src/Package/Impl/History/HistorySelectionTextAdornmentFactory.cs @@ -8,12 +8,12 @@ namespace Microsoft.VisualStudio.R.Package.History { [Export(typeof(IWpfTextViewCreationListener))] [ContentType(RHistoryContentTypeDefinition.ContentType)] - [TextViewRole(PredefinedTextViewRoles.Document)] + [TextViewRole(RHistory.TextViewRole)] internal sealed class HistorySelectionTextAdornmentFactory : IWpfTextViewCreationListener { [Export(typeof(AdornmentLayerDefinition))] [Name("HistorySelectionTextAdornment")] [Order(Before = PredefinedAdornmentLayers.Outlining)] - [TextViewRole(PredefinedTextViewRoles.Document)] + [TextViewRole(RHistory.TextViewRole)] public AdornmentLayerDefinition HistorySelectionTextAdornmentLayer { get; set; } private readonly IEditorFormatMapService _editorFormatMapService; diff --git a/src/Package/Impl/History/HistoryWindowPaneMouseProcessorProvider.cs b/src/Package/Impl/History/HistoryWindowPaneMouseProcessorProvider.cs index e033e212f..03ab6a7d0 100644 --- a/src/Package/Impl/History/HistoryWindowPaneMouseProcessorProvider.cs +++ b/src/Package/Impl/History/HistoryWindowPaneMouseProcessorProvider.cs @@ -8,7 +8,7 @@ namespace Microsoft.VisualStudio.R.Package.History { [Name("HistoryWindowPaneMouseProcessor")] [Order(Before = "WordSelection")] [ContentType(RHistoryContentTypeDefinition.ContentType)] - [TextViewRole(PredefinedTextViewRoles.Interactive)] + [TextViewRole(RHistory.TextViewRole)] internal sealed class HistoryWindowPaneMouseProcessorProvider : IMouseProcessorProvider { private readonly IRHistoryProvider _historyProvider; diff --git a/src/Package/Impl/History/RHistory.cs b/src/Package/Impl/History/RHistory.cs index eb8720010..496c9f412 100644 --- a/src/Package/Impl/History/RHistory.cs +++ b/src/Package/Impl/History/RHistory.cs @@ -16,6 +16,7 @@ namespace Microsoft.VisualStudio.R.Package.History { internal sealed class RHistory : IRHistory { + public const string TextViewRole = "TextViewRole"; private const string BlockSeparator = "\r\n"; private const string LineSeparator = "\u00a0"; @@ -104,7 +105,7 @@ public IWpfTextView GetOrCreateTextView(ITextEditorFactoryService textEditorFact } private IWpfTextView CreateTextView(ITextEditorFactoryService textEditorFactory) { - var textView = textEditorFactory.CreateTextView(_historyTextBuffer); + var textView = textEditorFactory.CreateTextView(_historyTextBuffer, textEditorFactory.DefaultRoles.UnionWith(textEditorFactory.CreateTextViewRoleSet(TextViewRole))); textView.Options.SetOptionValue(DefaultTextViewHostOptions.VerticalScrollBarId, true); textView.Options.SetOptionValue(DefaultTextViewHostOptions.HorizontalScrollBarId, true); textView.Options.SetOptionValue(DefaultTextViewHostOptions.SelectionMarginId, false); From 3cc777461d2117844f9add17a62e661704e75fd2 Mon Sep 17 00:00:00 2001 From: JeongPyoHam Date: Fri, 22 Jan 2016 14:34:33 -0800 Subject: [PATCH 073/289] Unittest for grid style data --- .../Test/DataInspect/EvaluationWrapperTest.cs | 201 +++++++++++++++++- .../Test/DataInspect/VariableExpectation.cs | 16 ++ .../Test/DataInspect/VariableRHostScript.cs | 30 +-- ...crosoft.VisualStudio.R.Package.Test.csproj | 1 + 4 files changed, 227 insertions(+), 21 deletions(-) create mode 100644 src/Package/Test/DataInspect/VariableExpectation.cs diff --git a/src/Package/Test/DataInspect/EvaluationWrapperTest.cs b/src/Package/Test/DataInspect/EvaluationWrapperTest.cs index 8d2617308..b4ccf16b3 100644 --- a/src/Package/Test/DataInspect/EvaluationWrapperTest.cs +++ b/src/Package/Test/DataInspect/EvaluationWrapperTest.cs @@ -3,6 +3,7 @@ using System.Threading.Tasks; using FluentAssertions; using Microsoft.UnitTests.Core.XUnit; +using Microsoft.VisualStudio.R.Package.DataInspect; using Xunit; namespace Microsoft.VisualStudio.R.Package.Test.DataInspect { @@ -94,6 +95,203 @@ public async Task TruncateGrandChildrenTest() { } } + [Test] + [Category.Variable.Explorer] + public async Task Matrix10x100Test() { + var script = "matrix.10x100 <-matrix(1:1000, 10, 100)"; + var expectation = new VariableExpectation() { Name = "matrix.10x100", Value = "int [1:10, 1:100] 1 2 3 4 5 6 7 8 9 10 ...", TypeName = "integer", Class = "matrix", HasChildren = true, CanShowDetail = true }; + + using (var hostScript = new VariableRHostScript()) { + var evaluation = (EvaluationWrapper)await hostScript.EvaluateAndAssert( + script, + expectation, + VariableRHostScript.AssertEvaluationWrapper); + + Range rowRange = new Range(0, 2); + Range columnRange = new Range(1, 3); + var grid = await evaluation.GetGridDataAsync(evaluation.Expression, new GridRange(rowRange, columnRange)); + + grid.ColumnHeader.Range.ShouldBeEquivalentTo(columnRange); + grid.ColumnHeader[1].ShouldBeEquivalentTo("[,2]"); + grid.ColumnHeader[2].ShouldBeEquivalentTo("[,3]"); + grid.ColumnHeader[3].ShouldBeEquivalentTo("[,4]"); + + grid.RowHeader.Range.ShouldBeEquivalentTo(rowRange); + grid.RowHeader[0].ShouldBeEquivalentTo("[1,]"); + grid.RowHeader[1].ShouldBeEquivalentTo("[2,]"); + + grid.Grid.Range.ShouldBeEquivalentTo(new GridRange(rowRange, columnRange)); + grid.Grid[0, 1].ShouldBeEquivalentTo("11"); + grid.Grid[0, 2].ShouldBeEquivalentTo("21"); + grid.Grid[0, 3].ShouldBeEquivalentTo("31"); + grid.Grid[1, 1].ShouldBeEquivalentTo("12"); + grid.Grid[1, 2].ShouldBeEquivalentTo("22"); + grid.Grid[1, 3].ShouldBeEquivalentTo("32"); + } + } + + [Test] + [Category.Variable.Explorer] + public async Task MatrixNamedTest() { + var script = "matrix.named <- matrix(1:10, 2, 5, dimnames = list(r = c('r1', 'r2'), c = c('a', 'b', 'c', 'd', 'e')))"; + var expectation = new VariableExpectation() { Name = "matrix.named", Value = "int [1:2, 1:5] 1 2 3 4 5 6 7 8 9 10", TypeName = "integer", Class = "matrix", HasChildren = true, CanShowDetail = true }; + + using (var hostScript = new VariableRHostScript()) { + var evaluation = (EvaluationWrapper)await hostScript.EvaluateAndAssert( + script, + expectation, + VariableRHostScript.AssertEvaluationWrapper); + + Range rowRange = new Range(0, 2); + Range columnRange = new Range(2, 3); + var grid = await evaluation.GetGridDataAsync(evaluation.Expression, new GridRange(rowRange, columnRange)); + + grid.ColumnHeader.Range.ShouldBeEquivalentTo(columnRange); + grid.ColumnHeader[2].ShouldBeEquivalentTo("c"); + grid.ColumnHeader[3].ShouldBeEquivalentTo("d"); + grid.ColumnHeader[4].ShouldBeEquivalentTo("e"); + + grid.RowHeader.Range.ShouldBeEquivalentTo(rowRange); + grid.RowHeader[0].ShouldBeEquivalentTo("r1"); + grid.RowHeader[1].ShouldBeEquivalentTo("r2"); + + grid.Grid.Range.ShouldBeEquivalentTo(new GridRange(rowRange, columnRange)); + grid.Grid[0, 2].ShouldBeEquivalentTo("5"); + grid.Grid[0, 3].ShouldBeEquivalentTo("7"); + grid.Grid[0, 4].ShouldBeEquivalentTo(" 9"); // TODO: R returns with space + grid.Grid[1, 2].ShouldBeEquivalentTo("6"); + grid.Grid[1, 3].ShouldBeEquivalentTo("8"); + grid.Grid[1, 4].ShouldBeEquivalentTo("10"); + } + } + + [Test] + [Category.Variable.Explorer] + public async Task MatrixNATest() { + var script = "matrix.na.header <- matrix(c(1, 2, 3, 4, NA, NaN, 7, 8, 9, 10), 2, 5, dimnames = list(r = c('r1', NA), c = c('a', 'b', NA, 'd', NA)))"; + var expectation = new VariableExpectation() { Name = "matrix.na.header", Value = "num [1:2, 1:5] 1 2 3 4 NA NaN 7 8 9 10", TypeName = "double", Class = "matrix", HasChildren = true, CanShowDetail = true }; + + using (var hostScript = new VariableRHostScript()) { + var evaluation = (EvaluationWrapper)await hostScript.EvaluateAndAssert( + script, + expectation, + VariableRHostScript.AssertEvaluationWrapper); + + Range rowRange = new Range(0, 2); + Range columnRange = new Range(2, 3); + var grid = await evaluation.GetGridDataAsync(evaluation.Expression, new GridRange(rowRange, columnRange)); + + grid.ColumnHeader.Range.ShouldBeEquivalentTo(columnRange); + grid.ColumnHeader[2].ShouldBeEquivalentTo("NA"); + grid.ColumnHeader[3].ShouldBeEquivalentTo("d"); + grid.ColumnHeader[4].ShouldBeEquivalentTo("NA"); + + grid.RowHeader.Range.ShouldBeEquivalentTo(rowRange); + grid.RowHeader[0].ShouldBeEquivalentTo("r1"); + grid.RowHeader[1].ShouldBeEquivalentTo("NA"); + + grid.Grid.Range.ShouldBeEquivalentTo(new GridRange(rowRange, columnRange)); + grid.Grid[0, 2].ShouldBeEquivalentTo(" NA"); // TODO: R returns with space + grid.Grid[0, 3].ShouldBeEquivalentTo("7"); + grid.Grid[0, 4].ShouldBeEquivalentTo(" 9"); // TODO: R returns with space + grid.Grid[1, 2].ShouldBeEquivalentTo("NaN"); + grid.Grid[1, 3].ShouldBeEquivalentTo("8"); + grid.Grid[1, 4].ShouldBeEquivalentTo("10"); + } + } + + [Test] + [Category.Variable.Explorer] + public async Task MatrixOneRowColumnTest() { + var script1 = "matrix.singlerow <- matrix(1:3, nrow =1);"; + var expectation1 = new VariableExpectation() { Name = "matrix.singlerow", Value = "int [1, 1:3] 1 2 3", TypeName = "integer", Class = "matrix", HasChildren = true, CanShowDetail = true }; + + var script2 = "matrix.singlecolumn <- matrix(1:3, ncol=1);"; + var expectation2 = new VariableExpectation() { Name = "matrix.singlecolumn", Value = "int [1:3, 1] 1 2 3", TypeName = "integer", Class = "matrix", HasChildren = true, CanShowDetail = true }; + + using (var hostScript = new VariableRHostScript()) { + var evaluation = (EvaluationWrapper)await hostScript.EvaluateAndAssert( + script1, + expectation1, + VariableRHostScript.AssertEvaluationWrapper); + + Range rowRange = new Range(0, 1); + Range columnRange = new Range(0, 3); + var grid = await evaluation.GetGridDataAsync(evaluation.Expression, new GridRange(rowRange, columnRange)); + + grid.ColumnHeader.Range.ShouldBeEquivalentTo(columnRange); + grid.ColumnHeader[0].ShouldBeEquivalentTo("[,1]"); + grid.ColumnHeader[1].ShouldBeEquivalentTo("[,2]"); + grid.ColumnHeader[2].ShouldBeEquivalentTo("[,3]"); + + grid.RowHeader.Range.ShouldBeEquivalentTo(rowRange); + grid.RowHeader[0].ShouldBeEquivalentTo("[1,]"); + + grid.Grid.Range.ShouldBeEquivalentTo(new GridRange(rowRange, columnRange)); + grid.Grid[0, 0].ShouldBeEquivalentTo("1"); + grid.Grid[0, 1].ShouldBeEquivalentTo("2"); + grid.Grid[0, 2].ShouldBeEquivalentTo("3"); + + + evaluation = (EvaluationWrapper)await hostScript.EvaluateAndAssert( + script2, + expectation2, + VariableRHostScript.AssertEvaluationWrapper); + + rowRange = new Range(0, 3); + columnRange = new Range(0, 1); + grid = await evaluation.GetGridDataAsync(evaluation.Expression, new GridRange(rowRange, columnRange)); + + grid.ColumnHeader.Range.ShouldBeEquivalentTo(columnRange); + grid.ColumnHeader[0].ShouldBeEquivalentTo("[,1]"); + + grid.RowHeader.Range.ShouldBeEquivalentTo(rowRange); + grid.RowHeader[0].ShouldBeEquivalentTo("[1,]"); + grid.RowHeader[1].ShouldBeEquivalentTo("[2,]"); + grid.RowHeader[2].ShouldBeEquivalentTo("[3,]"); + + grid.Grid.Range.ShouldBeEquivalentTo(new GridRange(rowRange, columnRange)); + grid.Grid[0, 0].ShouldBeEquivalentTo("1"); + grid.Grid[1, 0].ShouldBeEquivalentTo("2"); + grid.Grid[2, 0].ShouldBeEquivalentTo("3"); + } + } + + [Test] + [Category.Variable.Explorer] + public async Task DataFrameTest() { + var script = "df.test <- data.frame(101:103, c('a', 'b', 'c'))"; + var expectation = new VariableExpectation() { Name = "df.test", Value = "3 obs. of 2 variables", TypeName = "list", Class = "data.frame", HasChildren = true, CanShowDetail = true }; + + using (var hostScript = new VariableRHostScript()) { + var evaluation = (EvaluationWrapper)await hostScript.EvaluateAndAssert( + script, + expectation, + VariableRHostScript.AssertEvaluationWrapper); + + Range rowRange = new Range(0, 3); + Range columnRange = new Range(0, 2); + var grid = await evaluation.GetGridDataAsync(evaluation.Expression, new GridRange(rowRange, columnRange)); + + grid.ColumnHeader.Range.ShouldBeEquivalentTo(columnRange); + grid.ColumnHeader[0].ShouldBeEquivalentTo("X101.103"); + grid.ColumnHeader[1].ShouldBeEquivalentTo("c..a....b....c.."); + + grid.RowHeader.Range.ShouldBeEquivalentTo(rowRange); + grid.RowHeader[0].ShouldBeEquivalentTo("1"); + grid.RowHeader[1].ShouldBeEquivalentTo("2"); + grid.RowHeader[2].ShouldBeEquivalentTo("3"); + + grid.Grid.Range.ShouldBeEquivalentTo(new GridRange(rowRange, columnRange)); + grid.Grid[0, 0].ShouldBeEquivalentTo("101"); + grid.Grid[0, 1].ShouldBeEquivalentTo("a"); + grid.Grid[1, 0].ShouldBeEquivalentTo("102"); + grid.Grid[1, 1].ShouldBeEquivalentTo("b"); + grid.Grid[2, 0].ShouldBeEquivalentTo("103"); + grid.Grid[2, 1].ShouldBeEquivalentTo("c"); + } + } + private static async Task RunTest(object[,] testData) { using (var hostScript = new VariableRHostScript()) { int testCount = testData.GetLength(0); @@ -101,7 +299,8 @@ private static async Task RunTest(object[,] testData) { for (int i = 0; i < testCount; i++) { await hostScript.EvaluateAndAssert( (string)testData[i, 0], - (VariableExpectation)testData[i, 1]); + (VariableExpectation)testData[i, 1], + VariableRHostScript.AssertEvaluationWrapper); } } } diff --git a/src/Package/Test/DataInspect/VariableExpectation.cs b/src/Package/Test/DataInspect/VariableExpectation.cs new file mode 100644 index 000000000..42e457f27 --- /dev/null +++ b/src/Package/Test/DataInspect/VariableExpectation.cs @@ -0,0 +1,16 @@ +using System.Diagnostics.CodeAnalysis; + +namespace Microsoft.VisualStudio.R.Package.Test.DataInspect { + /// + /// contains expectation for EvaluationWrapper + /// + [ExcludeFromCodeCoverage] + internal class VariableExpectation { + public string Name { get; set; } + public string Value { get; set; } + public string Class { get; set; } + public string TypeName { get; set; } + public bool HasChildren { get; set; } + public bool CanShowDetail { get; set; } + } +} diff --git a/src/Package/Test/DataInspect/VariableRHostScript.cs b/src/Package/Test/DataInspect/VariableRHostScript.cs index f00773f65..ed070606e 100644 --- a/src/Package/Test/DataInspect/VariableRHostScript.cs +++ b/src/Package/Test/DataInspect/VariableRHostScript.cs @@ -16,21 +16,8 @@ using Microsoft.VisualStudio.R.Package.Shell; namespace Microsoft.VisualStudio.R.Package.Test.DataInspect { - /// - /// contains expectation for EvaluationWrapper - /// [ExcludeFromCodeCoverage] - class VariableExpectation { - public string Name { get; set; } - public string Value { get; set; } - public string Class { get; set; } - public string TypeName { get; set; } - public bool HasChildren { get; set; } - public bool CanShowDetail { get; set; } - } - - [ExcludeFromCodeCoverage] - class VariableRHostScript : RHostScript { + internal class VariableRHostScript : RHostScript { private VariableProvider _variableProvider; private EvaluationWrapper _globalEnv; @@ -80,20 +67,23 @@ public async Task EvaluateAsync(string rScript) { /// /// evaluate R script and assert if the expectation is not found in global environment /// - /// - /// - /// - public async Task EvaluateAndAssert(string rScript, VariableExpectation expectation) { + public async Task EvaluateAndAssert( + string rScript, + VariableExpectation expectation, + Action assertAction) { + await EvaluateAsync(rScript); var children = await _globalEnv.GetChildrenAsync(); // must contain one and only expectation in result var evaluation = children.First(v => v.Name == expectation.Name); - AssertEvaluationWrapper(evaluation, expectation); + assertAction(evaluation, expectation); + + return evaluation; } - private static void AssertEvaluationWrapper(IRSessionDataObject v, VariableExpectation expectation) { + public static void AssertEvaluationWrapper(IRSessionDataObject v, VariableExpectation expectation) { v.ShouldBeEquivalentTo(expectation, o => o.ExcludingMissingMembers()); } diff --git a/src/Package/Test/Microsoft.VisualStudio.R.Package.Test.csproj b/src/Package/Test/Microsoft.VisualStudio.R.Package.Test.csproj index ac62441a3..46ea5e721 100644 --- a/src/Package/Test/Microsoft.VisualStudio.R.Package.Test.csproj +++ b/src/Package/Test/Microsoft.VisualStudio.R.Package.Test.csproj @@ -220,6 +220,7 @@ + From 69c7794da83b2dd92723cf1b0a1a0d43b6628760 Mon Sep 17 00:00:00 2001 From: JeongPyoHam Date: Fri, 22 Jan 2016 14:39:13 -0800 Subject: [PATCH 074/289] Define resource Variable grid's tool window caption --- src/Package/Impl/DataInspect/VariableGridWindowPane.cs | 4 ++-- src/Package/Impl/Resources.Designer.cs | 9 +++++++++ src/Package/Impl/Resources.resx | 3 +++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/Package/Impl/DataInspect/VariableGridWindowPane.cs b/src/Package/Impl/DataInspect/VariableGridWindowPane.cs index 2ce30ac8b..6b725e65a 100644 --- a/src/Package/Impl/DataInspect/VariableGridWindowPane.cs +++ b/src/Package/Impl/DataInspect/VariableGridWindowPane.cs @@ -8,10 +8,10 @@ public class VariableGridWindowPane : ToolWindowPane { private VariableGridHost _gridHost; public VariableGridWindowPane() { - Caption = "Variable Grid"; // TODO: temporary value + Caption = Resources.VariableGrid_Caption; Content = _gridHost = new VariableGridHost(); - BitmapImageMoniker = KnownMonikers.VariableProperty; // TODO: same icon as Variable Explorer. Is it O.K.? This appears on the tab + BitmapImageMoniker = KnownMonikers.VariableProperty; } internal void SetEvaluation(EvaluationWrapper evaluation) { diff --git a/src/Package/Impl/Resources.Designer.cs b/src/Package/Impl/Resources.Designer.cs index ad44e8063..f77eaea7c 100644 --- a/src/Package/Impl/Resources.Designer.cs +++ b/src/Package/Impl/Resources.Designer.cs @@ -1276,6 +1276,15 @@ public static string VariableExplorer_ValueHeader { } } + /// + /// Looks up a localized string similar to Variable Grid. + /// + public static string VariableGrid_Caption { + get { + return ResourceManager.GetString("VariableGrid_Caption", resourceCulture); + } + } + /// /// Looks up a localized string similar to Variable Explorer. /// diff --git a/src/Package/Impl/Resources.resx b/src/Package/Impl/Resources.resx index 34ce61695..c6871250f 100644 --- a/src/Package/Impl/Resources.resx +++ b/src/Package/Impl/Resources.resx @@ -541,4 +541,7 @@ please navigate to https://cran.r-project.org, install R for Windows and restart [truncated] + + Variable Grid + \ No newline at end of file From 78a634d54a780532181e0ad1ac5366d011037ca6 Mon Sep 17 00:00:00 2001 From: MikhailArkhipov Date: Fri, 22 Jan 2016 14:40:49 -0800 Subject: [PATCH 075/289] #681 : Input caret moves from REPL to editor during debugging session --- src/Package/Impl/Repl/ReplWindow.cs | 50 ++++++++++++++++++++++++++--- 1 file changed, 45 insertions(+), 5 deletions(-) diff --git a/src/Package/Impl/Repl/ReplWindow.cs b/src/Package/Impl/Repl/ReplWindow.cs index 6b08f2734..68240ba8e 100644 --- a/src/Package/Impl/Repl/ReplWindow.cs +++ b/src/Package/Impl/Repl/ReplWindow.cs @@ -2,7 +2,9 @@ using System.Collections.Concurrent; using System.Linq; using System.Threading; +using System.Windows.Threading; using Microsoft.Languages.Core.Text; +using Microsoft.Languages.Editor.Tasks; using Microsoft.Languages.Editor.Text; using Microsoft.R.Core.AST.Statements.Definitions; using Microsoft.R.Core.Tokens; @@ -23,11 +25,14 @@ namespace Microsoft.VisualStudio.R.Package.Repl { /// /// Tracks most recently active REPL window /// - internal sealed class ReplWindow : IVsWindowFrameEvents, IDisposable { + internal sealed class ReplWindow : IVsWindowFrameEvents, IVsDebuggerEvents, IDisposable { private uint _windowFrameEventsCookie; private IVsInteractiveWindow _lastUsedReplWindow; private ConcurrentQueue _pendingInputs = new ConcurrentQueue(); private static readonly Lazy Instance = new Lazy(() => new ReplWindow()); + private uint _debuggerEventsCookie; + private bool _replLostFocus; + private bool _enteredBreakMode; class PendingSubmission { public string Code; @@ -35,9 +40,13 @@ class PendingSubmission { } public ReplWindow() { - IVsUIShell7 shell = VsAppShell.Current.GetGlobalService(typeof(SVsUIShell)); - if (shell != null) { - _windowFrameEventsCookie = shell.AdviseWindowFrameEvents(this); + IVsUIShell7 shell7 = VsAppShell.Current.GetGlobalService(typeof(SVsUIShell)); + if (shell7 != null) { + _windowFrameEventsCookie = shell7.AdviseWindowFrameEvents(this); + } + var debugger = VsAppShell.Current.GetGlobalService(typeof(IVsDebugger)); + if (debugger != null) { + debugger.AdviseDebuggerEvents(this, out _debuggerEventsCookie); } } @@ -289,7 +298,7 @@ public void OnFrameCreated(IVsWindowFrame frame) { } public void OnFrameDestroyed(IVsWindowFrame frame) { - + } public void OnFrameIsVisibleChanged(IVsWindowFrame frame, bool newIsVisible) { @@ -299,9 +308,13 @@ public void OnFrameIsOnScreenChanged(IVsWindowFrame frame, bool newIsOnScreen) { } public void OnActiveFrameChanged(IVsWindowFrame oldFrame, IVsWindowFrame newFrame) { + _replLostFocus = false; // Track last recently used REPL window if (!CheckReplFrame(oldFrame)) { CheckReplFrame(newFrame); + } else { + _replLostFocus = true; + VsAppShell.Current.DispatchOnUIThread(() => CheckPossibleBreakModeFocusChange()); } } #endregion @@ -314,6 +327,12 @@ public void Dispose() { _windowFrameEventsCookie = 0; } + if (_debuggerEventsCookie != 0) { + var debugger = VsAppShell.Current.GetGlobalService(typeof(IVsDebugger)); + debugger.UnadviseDebuggerEvents(_debuggerEventsCookie); + _debuggerEventsCookie = 0; + } + _lastUsedReplWindow = null; } #endregion @@ -340,5 +359,26 @@ private bool CheckReplFrame(IVsWindowFrame frame) { return false; } + + private void CheckPossibleBreakModeFocusChange() { + if (_enteredBreakMode && _replLostFocus) { + // When debugger hits a breakpoint it typically activates the editor. + // This is not desirable when focus was in the interactive window + // i.e. user worked in the REPL and not in the editor. Pull + // the focus back here. + IVsWindowFrame frame = Current.GetToolWindow(); + frame.Show(); + + _replLostFocus = false; + _enteredBreakMode = false; + } + } + + #region IVsDebuggerEvents + public int OnModeChange(DBGMODE dbgmodeNew) { + _enteredBreakMode = dbgmodeNew == DBGMODE.DBGMODE_Break; + return VSConstants.S_OK; + } + #endregion } } From 50255f15f03e4d0ec6fe8e35b0129f60f917ed04 Mon Sep 17 00:00:00 2001 From: JeongPyoHam Date: Fri, 22 Jan 2016 14:52:03 -0800 Subject: [PATCH 076/289] Variable Grid caption contains expression in format of "R Data: " --- src/Package/Impl/DataInspect/VariableGridWindowPane.cs | 4 ++-- src/Package/Impl/Resources.Designer.cs | 2 +- src/Package/Impl/Resources.resx | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Package/Impl/DataInspect/VariableGridWindowPane.cs b/src/Package/Impl/DataInspect/VariableGridWindowPane.cs index 6b725e65a..1ff4d700f 100644 --- a/src/Package/Impl/DataInspect/VariableGridWindowPane.cs +++ b/src/Package/Impl/DataInspect/VariableGridWindowPane.cs @@ -15,8 +15,8 @@ public VariableGridWindowPane() { } internal void SetEvaluation(EvaluationWrapper evaluation) { - if (!string.IsNullOrWhiteSpace(evaluation.Name)) { - Caption = evaluation.Name; + if (!string.IsNullOrWhiteSpace(evaluation.Expression)) { + Caption = string.Format("{0}: {1}", Resources.VariableGrid_Caption, evaluation.Expression); } _gridHost.SetEvaluation(evaluation); diff --git a/src/Package/Impl/Resources.Designer.cs b/src/Package/Impl/Resources.Designer.cs index f77eaea7c..b1c2f43a6 100644 --- a/src/Package/Impl/Resources.Designer.cs +++ b/src/Package/Impl/Resources.Designer.cs @@ -1277,7 +1277,7 @@ public static string VariableExplorer_ValueHeader { } /// - /// Looks up a localized string similar to Variable Grid. + /// Looks up a localized string similar to R Data. /// public static string VariableGrid_Caption { get { diff --git a/src/Package/Impl/Resources.resx b/src/Package/Impl/Resources.resx index c6871250f..0999f7d64 100644 --- a/src/Package/Impl/Resources.resx +++ b/src/Package/Impl/Resources.resx @@ -542,6 +542,6 @@ please navigate to https://cran.r-project.org, install R for Windows and restart [truncated] - Variable Grid + R Data \ No newline at end of file From 452715aa97ffc4ddf784f904a328510eb886af59 Mon Sep 17 00:00:00 2001 From: JeongPyoHam Date: Fri, 22 Jan 2016 15:11:28 -0800 Subject: [PATCH 077/289] Grid header has DemoBold font weight, Increase minimum item width to 40.0 --- .../Impl/DataInspect/VisualGrid/GridPoints.cs | 2 +- .../Impl/DataInspect/VisualGrid/VisualGrid.cs | 13 +++++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/Package/Impl/DataInspect/VisualGrid/GridPoints.cs b/src/Package/Impl/DataInspect/VisualGrid/GridPoints.cs index d0cfe03e6..d93256854 100644 --- a/src/Package/Impl/DataInspect/VisualGrid/GridPoints.cs +++ b/src/Package/Impl/DataInspect/VisualGrid/GridPoints.cs @@ -71,7 +71,7 @@ public DeferNotification DeferChangeNotification() { return new DeferNotification(this); } - public static double MinItemWidth { get { return 20.0; } } + public static double MinItemWidth { get { return 40.0; } } public static double MinItemHeight { get { return 10.0; } } diff --git a/src/Package/Impl/DataInspect/VisualGrid/VisualGrid.cs b/src/Package/Impl/DataInspect/VisualGrid/VisualGrid.cs index 78ff8603a..0485cd503 100644 --- a/src/Package/Impl/DataInspect/VisualGrid/VisualGrid.cs +++ b/src/Package/Impl/DataInspect/VisualGrid/VisualGrid.cs @@ -54,13 +54,22 @@ public double FontSize { private Typeface Typeface { get { if (_typeFace == null) { - // TODO: fall back when the specific typeface is not found - _typeFace = FontFamily.GetTypefaces().First(tf => tf.Style == FontStyles.Normal && tf.Weight == FontWeights.Normal && tf.Stretch == FontStretches.Normal); + _typeFace = ChooseTypeface(); } return _typeFace; } } + private Typeface ChooseTypeface() { + if (ScrollDirection == ScrollDirection.Vertical + || ScrollDirection == ScrollDirection.Horizontal) { + // TODO: fall back + return FontFamily.GetTypefaces().First(tf => tf.Style == FontStyles.Normal && tf.Weight == FontWeights.DemiBold && tf.Stretch == FontStretches.Normal); + } else { + return FontFamily.GetTypefaces().First(tf => tf.Style == FontStyles.Normal && tf.Weight == FontWeights.Normal && tf.Stretch == FontStretches.Normal); + } + } + #endregion public double GridLineThickness { From f4fe6464d8de549a9a7a26bbf2d8606a9eff7c0c Mon Sep 17 00:00:00 2001 From: JeongPyoHam Date: Fri, 22 Jan 2016 15:59:50 -0800 Subject: [PATCH 078/289] Remove obsolete DynamicGrid implementation --- .../DataInspect/DynamicGrid/DynamicGrid.cs | 356 ------------------ .../DynamicGrid/DynamicGridCell.cs | 124 ------ .../DynamicGrid/DynamicGridCellsPanel.cs | 152 -------- .../DataInspect/DynamicGrid/DynamicGridRow.cs | 142 ------- .../DynamicGrid/DynamicGridRowHeader.cs | 93 ----- .../DynamicGrid/DynamicGridRowsPanel.cs | 28 -- .../DynamicGrid/DynamicGridStyle.xaml | 193 ---------- .../DynamicGrid/DynamicGridUtilities.cs | 20 - .../Impl/DataInspect/DynamicGrid/MaxDouble.cs | 44 --- .../Impl/DataInspect/VariableGridHost.xaml | 8 - .../Microsoft.VisualStudio.R.Package.csproj | 12 - src/Package/TestApp2/MainWindow.xaml | 26 -- src/Package/TestApp2/MainWindow.xaml.cs | 62 --- .../Microsoft.VisualStudio.R.TestApp.csproj | 7 - 14 files changed, 1267 deletions(-) delete mode 100644 src/Package/Impl/DataInspect/DynamicGrid/DynamicGrid.cs delete mode 100644 src/Package/Impl/DataInspect/DynamicGrid/DynamicGridCell.cs delete mode 100644 src/Package/Impl/DataInspect/DynamicGrid/DynamicGridCellsPanel.cs delete mode 100644 src/Package/Impl/DataInspect/DynamicGrid/DynamicGridRow.cs delete mode 100644 src/Package/Impl/DataInspect/DynamicGrid/DynamicGridRowHeader.cs delete mode 100644 src/Package/Impl/DataInspect/DynamicGrid/DynamicGridRowsPanel.cs delete mode 100644 src/Package/Impl/DataInspect/DynamicGrid/DynamicGridStyle.xaml delete mode 100644 src/Package/Impl/DataInspect/DynamicGrid/DynamicGridUtilities.cs delete mode 100644 src/Package/Impl/DataInspect/DynamicGrid/MaxDouble.cs delete mode 100644 src/Package/TestApp2/MainWindow.xaml delete mode 100644 src/Package/TestApp2/MainWindow.xaml.cs diff --git a/src/Package/Impl/DataInspect/DynamicGrid/DynamicGrid.cs b/src/Package/Impl/DataInspect/DynamicGrid/DynamicGrid.cs deleted file mode 100644 index eb7479939..000000000 --- a/src/Package/Impl/DataInspect/DynamicGrid/DynamicGrid.cs +++ /dev/null @@ -1,356 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Linq; -using System.Windows; -using System.Windows.Controls; -using System.Windows.Controls.Primitives; -using System.Windows.Data; -using System.Windows.Media; -using System.Windows.Shapes; -using Microsoft.Common.Core; -using Microsoft.VisualStudio.R.Package.Wpf; - -namespace Microsoft.VisualStudio.R.Package.DataInspect { - /// - /// A grid control that populates columns dynamically just like DataGrid's rows are loaded in stack panel - /// - /// This stacks rows vertically, and each row stacks cells horizontally. - /// Vertical scroll is handled by this controls's panel. - /// Horizontal scroll is handled by propagating horizontal scroll event to each row. - /// The source of horitonal scroll event comes from a scrollbar, named as HorizontalScrollBar in template. The scrollbar should stand alone outside scrollviewer. - /// - public class DynamicGrid : MultiSelector { - private LinkedList _realizedRows = new LinkedList(); - - static DynamicGrid() { - DefaultStyleKeyProperty.OverrideMetadata(typeof(DynamicGrid), new FrameworkPropertyMetadata(typeof(DynamicGrid))); - } - - #region DataSource - - public IList RowHeaderSource { get; set; } - - public IList ColumnHeaderSource { get; set; } - - protected override void OnItemsSourceChanged(IEnumerable oldValue, IEnumerable newValue) { - base.OnItemsSourceChanged(oldValue, newValue); - - if (ColumnHeadersPresenter != null) { - ColumnHeadersPresenter.ItemsSource = ColumnHeaderSource; - } - - foreach (var item in newValue) { - var rowSource = item as IList; - if (rowSource != null) { - if (rowSource.Count > 0) { - _layoutInfo = new SharedScrollInfo() { - FirstItemIndex = 0, - FirstItemOffset = 0.0, - MaxItemInViewport = ColumnHeaderSource == null ? 0 : ColumnHeaderSource.Count - }; - HorizontalOffset = 0; - _columns.Clear(); - } - } else { - throw new NotSupportedException($"{nameof(DynamicGrid)} supports only nested collection for ItemsSource"); - } - break; - } - } - - #endregion - - #region override - - private ScrollBar _horizontalScrollbar; - public override void OnApplyTemplate() { - base.OnApplyTemplate(); - - var scrollbar = GetTemplateChild("HorizontalScrollBar") as ScrollBar; - if (scrollbar != null) { - if (_horizontalScrollbar != null) { - _horizontalScrollbar.Scroll -= Scrollbar_Scroll; - } - - scrollbar.Scroll += Scrollbar_Scroll; - _horizontalScrollbar = scrollbar; - } - } - - protected override DependencyObject GetContainerForItemOverride() { - return new DynamicGridRow(); - } - - protected override void PrepareContainerForItemOverride(DependencyObject element, object item) { - base.PrepareContainerForItemOverride(element, item); - - DynamicGridRow row = (DynamicGridRow)element; - if (row.ParentGrid != this) { - _realizedRows.AddFirst(row.Track); // ObservableCollection.Replace cause this fail, as it has been added already. That's fine for now. - } - - row.Header = RowHeaderSource[Items.IndexOf(item)]; - row.Prepare(this, item); - } - - protected override void ClearContainerForItemOverride(DependencyObject element, object item) { - base.ClearContainerForItemOverride(element, item); - - DynamicGridRow row = (DynamicGridRow)element; - - row.Header = null; - if (row.ParentGrid == this) { - _realizedRows.Remove(row.Track); - } - row.CleanUp(this, item); - } - - #endregion override - - #region RowHeader - - public double RowHeaderActualWidth { - get { return (double)GetValue(RowHeaderActualWidthProperty); } - set { SetValue(RowHeaderActualWidthPropertyKey, value); } - } - - private static readonly DependencyPropertyKey RowHeaderActualWidthPropertyKey = - DependencyProperty.RegisterReadOnly(nameof(RowHeaderActualWidth), typeof(double), typeof(DynamicGrid), new FrameworkPropertyMetadata(0.0, new PropertyChangedCallback(OnNotifyRowHeaderPropertyChanged))); - - public static readonly DependencyProperty RowHeaderActualWidthProperty = RowHeaderActualWidthPropertyKey.DependencyProperty; - - private static void OnNotifyRowHeaderPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { - ((DynamicGrid)d).OnNotifyRowHeaderPropertyChanged(); - } - - private void OnNotifyRowHeaderPropertyChanged() { - ColumnHeadersPresenter?.NotifyRowHeader(); - foreach (var row in _realizedRows) { - row.NotifyRowHeader(); - } - } - - #endregion - - #region ColumnHeader - - private DynamicGridRow _columnHeadersPresenter; - - internal DynamicGridRow ColumnHeadersPresenter { - get { - return _columnHeadersPresenter; - } - set { - _columnHeadersPresenter = value; - _columnHeadersPresenter.ItemsSource = ColumnHeaderSource; - } - } - - #endregion - - #region Grid line - - public static readonly DependencyProperty GridLinesBrushProperty = - DependencyProperty.Register( - nameof(GridLinesBrush), - typeof(Brush), - typeof(DynamicGrid), - new FrameworkPropertyMetadata(Brushes.Black)); - - public Brush GridLinesBrush - { - get { return (Brush)GetValue(GridLinesBrushProperty); } - set { SetValue(GridLinesBrushProperty, value); } - } - - public static readonly DependencyProperty HeaderLinesBrushProperty = - DependencyProperty.Register( - nameof(HeaderLinesBrush), - typeof(Brush), - typeof(DynamicGrid), - new FrameworkPropertyMetadata(Brushes.Black)); - - public Brush HeaderLinesBrush - { - get { return (Brush)GetValue(HeaderLinesBrushProperty); } - set { SetValue(HeaderLinesBrushProperty, value); } - } - - #endregion - - #region Columns and Horizontal scroll - - private SortedList _columns = new SortedList(); - internal MaxDouble GetColumnWidth(int index) { - MaxDouble stack; - if (_columns.TryGetValue(index, out stack)) { - return stack; - } - - stack = new MaxDouble(0.0); - _columns.Add(index, stack); - - return stack; - } - - private const double EstimatedWidth = 20.0; // TODO: configurable - - Size _panelSize; - SharedScrollInfo _layoutInfo; - - private SharedScrollInfo ComputeHorizontalScroll(Size size) { - double horizontalOffset = HorizontalOffset; - - int? firstItemIndex = null; - double firstItemOffset = 0; - double extentWidth = 0.0; - - int columnCount = ColumnHeaderSource == null ? 0 : ColumnHeaderSource.Count; - - for (int i = 0; i < columnCount; i++) { - double currentWidth; - - MaxDouble columnWidth; - if (_columns.TryGetValue(i, out columnWidth)) { - currentWidth = columnWidth.Max; - } else { - currentWidth = EstimatedWidth; - } - - if (firstItemIndex == null && horizontalOffset <= extentWidth) { - firstItemIndex = i; - firstItemOffset = extentWidth; - } - - extentWidth += currentWidth; - } - - ExtentWidth = extentWidth; - ViewportWidth = size.Width; - ScrollableWidth = extentWidth - size.Width; - - int firstIndex = firstItemIndex.HasValue ? firstItemIndex.Value : 0; - return new SharedScrollInfo() { - FirstItemIndex = firstItemIndex.HasValue ? firstItemIndex.Value : 0, - FirstItemOffset = firstItemOffset, - MaxItemInViewport = columnCount - firstIndex, - }; - } - - internal void OnViewportSizeChanged(Size newSize) { - _panelSize = newSize; - - var newLayoutInfo = ComputeHorizontalScroll(newSize); - - if (!_layoutInfo.Equals(newLayoutInfo)) { - _layoutInfo = newLayoutInfo; - - if (_columnHeadersPresenter != null) { - _columnHeadersPresenter.ScrollChanged(); - } - - // TODO: move to background(?) - _columns.RemoveWhere( - c => c.Key < _layoutInfo.FirstItemIndex - || c.Key >= (_layoutInfo.FirstItemIndex + _layoutInfo.MaxItemInViewport)); - - foreach (var row in _realizedRows) { - row.ScrollChanged(); - } - } - } - - internal void OnInvalidateScrollInfo() { - ComputeHorizontalScroll(_panelSize); - } - - internal SharedScrollInfo GetLayoutInfo(Size size) { - return _layoutInfo; - } - - public static readonly DependencyProperty ScrollableWidthProperty = - DependencyProperty.Register( - nameof(ScrollableWidth), - typeof(double), - typeof(DynamicGrid), - new FrameworkPropertyMetadata(0d)); - - public double ScrollableWidth { - get { - return (double) GetValue(ScrollableWidthProperty); - } - set { - SetValue(ScrollableWidthProperty, value); - } - } - - public static readonly DependencyProperty ExtentWidthProperty = - DependencyProperty.Register( - nameof(ExtentWidth), - typeof(double), - typeof(DynamicGrid), - new FrameworkPropertyMetadata(0d)); - - public double ExtentWidth { - get { - return (double)GetValue(ExtentWidthProperty); - } - set { - SetValue(ExtentWidthProperty, value); - } - } - - public static readonly DependencyProperty HorizontalOffsetProperty = - DependencyProperty.Register( - nameof(HorizontalOffset), - typeof(double), - typeof(DynamicGrid), - new FrameworkPropertyMetadata(0d)); - - public double HorizontalOffset { - get { - return (double)GetValue(HorizontalOffsetProperty); - } - set { - SetValue(HorizontalOffsetProperty, value); - } - } - - public static readonly DependencyProperty ViewportWidthProperty = - DependencyProperty.Register( - nameof(ViewportWidth), - typeof(double), - typeof(DynamicGrid), - new FrameworkPropertyMetadata(0d)); - - public double ViewportWidth { - get { - return (double)GetValue(ViewportWidthProperty); - } - set { - SetValue(ViewportWidthProperty, value); - } - } - - private void Scrollbar_Scroll(object sender, ScrollEventArgs e) { - switch (e.ScrollEventType) { - case ScrollEventType.EndScroll: - case ScrollEventType.First: - case ScrollEventType.LargeDecrement: - case ScrollEventType.LargeIncrement: - case ScrollEventType.Last: - case ScrollEventType.SmallDecrement: - case ScrollEventType.SmallIncrement: - OnViewportSizeChanged(_panelSize); - break; - case ScrollEventType.ThumbPosition: - case ScrollEventType.ThumbTrack: - default: - break; - } - } - - #endregion - } -} diff --git a/src/Package/Impl/DataInspect/DynamicGrid/DynamicGridCell.cs b/src/Package/Impl/DataInspect/DynamicGrid/DynamicGridCell.cs deleted file mode 100644 index c8cc867e2..000000000 --- a/src/Package/Impl/DataInspect/DynamicGrid/DynamicGridCell.cs +++ /dev/null @@ -1,124 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Windows; -using System.Windows.Controls; -using System.Windows.Media; - -namespace Microsoft.VisualStudio.R.Package.DataInspect { - /// - /// Item container in - /// - public class DynamicGridCell : ContentControl { - static DynamicGridCell() { - DefaultStyleKeyProperty.OverrideMetadata(typeof(DynamicGridCell), new FrameworkPropertyMetadata(typeof(DynamicGridCell))); - } - - public DynamicGridCell() { - Track = new LinkedListNode(this); - } - - internal DynamicGridRow ParentRow { get; private set; } - - internal DynamicGrid ParentGrid { get { return ParentRow?.ParentGrid; } } - - internal LinkedListNode Track { get; private set; } - - internal MaxDouble ColumnWidth { get; set; } - - internal virtual void Prepare(DynamicGridRow owner, MaxDouble columnWidth) { - ParentRow = owner; - - if (ColumnWidth != null) { - ColumnWidth.MaxChanged -= LayoutSize_MaxChanged; - } - - ColumnWidth = columnWidth; - ColumnWidth.MaxChanged += LayoutSize_MaxChanged; - } - - private void LayoutSize_MaxChanged(object sender, EventArgs e) { - if (!object.Equals(sender, ColumnWidth)) { - InvalidateMeasure(); - } - } - - /// - /// Clean up data when virtualized - /// - internal virtual void CleanUp() { - this.Content = null; - - if (ColumnWidth != null) { - ColumnWidth.MaxChanged -= LayoutSize_MaxChanged; - } - ColumnWidth = null; - - this.ParentRow = null; - } - - private double LineThickness = 1.0; // TODO: configurable - protected override Size MeasureOverride(Size constraint) { - - Size adjustedConstraint = DynamicGridUtilities.DecreaseSize(constraint, LineThickness); - - Size desired = base.MeasureOverride(adjustedConstraint); - - desired.Height += LineThickness; - desired.Width += LineThickness; - - ColumnWidth.Max = desired.Width; - desired.Width = ColumnWidth.Max; - - return desired; - } - - protected override Size ArrangeOverride(Size arrangeBounds) { - Size adjustedBounds = DynamicGridUtilities.DecreaseSize(arrangeBounds, LineThickness); - - Size arrangedSize = base.ArrangeOverride(adjustedBounds); - - arrangedSize.Height += LineThickness; - arrangedSize.Width += LineThickness; - - return arrangedSize; - } - - - - protected override void OnRender(DrawingContext drawingContext) { - base.OnRender(drawingContext); - - Brush brush = ParentRow.ColumnHeader ? ParentGrid.HeaderLinesBrush : ParentGrid.GridLinesBrush; - - // vertical line - { - Rect rect = new Rect(new Size(LineThickness, RenderSize.Height)); - rect.X = RenderSize.Width - LineThickness; - - drawingContext.DrawRectangle(brush, null, rect); - } - - // horizontal line - { - Rect rect = new Rect(new Size(RenderSize.Width, LineThickness)); - rect.Y = RenderSize.Height - LineThickness; - - drawingContext.DrawRectangle(brush, null, rect); - } - } - } - - /// - /// This class exists for simple templating - /// - /// - /// Styling and property transfer could be also an answer, but this is much simpler irresistibly - /// - public class DynamicGridColumnHeaderCell : DynamicGridCell { - static DynamicGridColumnHeaderCell() { - DefaultStyleKeyProperty.OverrideMetadata(typeof(DynamicGridColumnHeaderCell), new FrameworkPropertyMetadata(typeof(DynamicGridColumnHeaderCell))); - } - - public DynamicGridColumnHeaderCell() : base() { } - } -} diff --git a/src/Package/Impl/DataInspect/DynamicGrid/DynamicGridCellsPanel.cs b/src/Package/Impl/DataInspect/DynamicGrid/DynamicGridCellsPanel.cs deleted file mode 100644 index ef6c0b135..000000000 --- a/src/Package/Impl/DataInspect/DynamicGrid/DynamicGridCellsPanel.cs +++ /dev/null @@ -1,152 +0,0 @@ -using System; -using System.Diagnostics; -using System.Windows; -using System.Windows.Controls; -using System.Windows.Controls.Primitives; -using System.Windows.Threading; - -namespace Microsoft.VisualStudio.R.Package.DataInspect { - - public struct SharedScrollInfo { - public int FirstItemIndex { get; set; } - public double FirstItemOffset { get; set; } - public int MaxItemInViewport { get; set; } - } - - public interface IScrollInfoGiver { - SharedScrollInfo GetScrollInfo(Size size); - - void InvalidateScrollInfo(); - - event EventHandler SharedScrollChanged; - } - - internal class DynamicGridCellsPanel : VirtualizingPanel { - private IScrollInfoGiver _sharedScrollInfo; - internal IScrollInfoGiver SharedScroll { - get { - if (_sharedScrollInfo == null) { - _sharedScrollInfo = ItemsControl.GetItemsOwner(this) as IScrollInfoGiver; - if (_sharedScrollInfo == null) { - throw new NotSupportedException($"{typeof(DynamicGridCellsPanel)} supports only ItemsControl that implements {typeof(IScrollInfoGiver)}"); - } - _sharedScrollInfo.SharedScrollChanged += SharedScrollChanged; - } - - return _sharedScrollInfo; - } - } - - private DynamicGridRow _owningRow; - internal DynamicGridRow OwningRow { - get { - if (_owningRow == null) { - _owningRow = ItemsControl.GetItemsOwner(this) as DynamicGridRow; - - Debug.Assert(_owningRow != null, "DynamicGridCellsPanel supports only DynamicGridRow"); - } - return _owningRow; - } - } - - #region Layout - - private void SharedScrollChanged(object sender, EventArgs e) { - InvalidateMeasure(); - } - - protected override Size MeasureOverride(Size availableSize) { - // work around to make sure ItemContainerGenerator non-null - var children = Children; - - var layoutInfo = SharedScroll.GetScrollInfo(availableSize); - - int startIndex = layoutInfo.FirstItemIndex; - int viewportCount = layoutInfo.MaxItemInViewport; - - IItemContainerGenerator generator = this.ItemContainerGenerator; - GeneratorPosition position = generator.GeneratorPositionFromIndex(startIndex); - - // if realized, position.Offset ==0, use just position's index - // otherwise, add one to insert after it. - int childIndex = (position.Offset == 0) ? position.Index : position.Index + 1; - - double height = 10.0; - double width = 0; - int finalCount = 0; - using (generator.StartAt(position, GeneratorDirection.Forward, true)) { - for (int i = 0; i < viewportCount; i++, childIndex++) { - bool newlyRealized; - DynamicGridCell child = (DynamicGridCell) generator.GenerateNext(out newlyRealized); - - if (newlyRealized) { - if (childIndex >= InternalChildren.Count) { - AddInternalChild(child); - } else { - InsertInternalChild(childIndex, child); - } - generator.PrepareItemContainer(child); - } else { - Debug.Assert(child == InternalChildren[childIndex]); - } - - child.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity)); - - if (child.DesiredSize.Height > height) { - height = child.DesiredSize.Height; - } - - child.ColumnWidth.Max = Math.Max(20.0, child.DesiredSize.Width); - - width += child.ColumnWidth.Max; - finalCount++; - - if (width > availableSize.Width) { - break; - } - } - } - - Size desired = new Size(width, height); - - if (finalCount > 0) { - CleanUpItems(startIndex, startIndex + finalCount - 1); - } - - SharedScroll.InvalidateScrollInfo(); - - return desired; - } - - protected override Size ArrangeOverride(Size finalSize) { - IItemContainerGenerator generator = this.ItemContainerGenerator; - - double x = 0.0; - for (int i = 0; i < InternalChildren.Count; i++) { - var child = (DynamicGridCell) InternalChildren[i]; - - child.Arrange(new Rect(x, 0, child.ColumnWidth.Max, finalSize.Height)); - - x += child.ColumnWidth.Max; - } - - return finalSize; - } - - private void CleanUpItems(int minDesiredGenerated, int maxDesiredGenerated) { - UIElementCollection children = this.InternalChildren; - IItemContainerGenerator generator = this.ItemContainerGenerator; - - for (int i = children.Count - 1; i >= 0; i--) { - GeneratorPosition childGeneratorPos = new GeneratorPosition(i, 0); - int itemIndex = generator.IndexFromGeneratorPosition(childGeneratorPos); - if (itemIndex < minDesiredGenerated || itemIndex > maxDesiredGenerated) { - generator.Remove(childGeneratorPos, 1); - RemoveInternalChildRange(i, 1); - } - } - } - - #endregion - } -} diff --git a/src/Package/Impl/DataInspect/DynamicGrid/DynamicGridRow.cs b/src/Package/Impl/DataInspect/DynamicGrid/DynamicGridRow.cs deleted file mode 100644 index 8e38a54f4..000000000 --- a/src/Package/Impl/DataInspect/DynamicGrid/DynamicGridRow.cs +++ /dev/null @@ -1,142 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Diagnostics; -using System.Windows; -using System.Windows.Controls; -using Microsoft.VisualStudio.R.Package.Wpf; - -namespace Microsoft.VisualStudio.R.Package.DataInspect { - /// - /// Item container in , and also ItemsControl for cells in a row - /// - internal class DynamicGridRow : ItemsControl, IScrollInfoGiver { - private LinkedList _realizedCells = new LinkedList(); - - static DynamicGridRow() { - DefaultStyleKeyProperty.OverrideMetadata(typeof(DynamicGridRow), new FrameworkPropertyMetadata(typeof(DynamicGridRow))); - } - - public DynamicGridRow() { - Track = new LinkedListNode(this); - ColumnHeader = false; - } - - public bool ColumnHeader { get; set; } - - internal LinkedListNode Track { get; } - - public static readonly DependencyProperty HeaderProperty = - DependencyProperty.Register( - "Header", - typeof(object), - typeof(DynamicGridRow), - new FrameworkPropertyMetadata(null)); - - public object Header { - get { return GetValue(HeaderProperty); } - set { SetValue(HeaderProperty, value); } - } - - internal DynamicGrid ParentGrid { get; private set; } - - #region IScrollInfoGiver support - - public SharedScrollInfo GetScrollInfo(Size size) { - Debug.Assert(ParentGrid != null); - return ParentGrid.GetLayoutInfo(size); - } - - public void InvalidateScrollInfo() { - if (ColumnHeader) { - ParentGrid.OnInvalidateScrollInfo(); - } - } - - public event EventHandler SharedScrollChanged; - - #endregion - - public override void OnApplyTemplate() { - base.OnApplyTemplate(); - - if (ColumnHeader) { - ParentGrid = WpfHelper.FindParent(this); - ParentGrid.ColumnHeadersPresenter = this; - } - } - - protected override DependencyObject GetContainerForItemOverride() { - if (ColumnHeader) { - return new DynamicGridColumnHeaderCell(); - } else { - return new DynamicGridCell(); - } - } - - protected override void PrepareContainerForItemOverride(DependencyObject element, object item) { - base.PrepareContainerForItemOverride(element, item); - - var cell = (DynamicGridCell)element; - int column = this.Items.IndexOf(item); - if (column == -1) { - throw new InvalidOperationException("Item is not found in collection"); - } - - if (cell.ParentRow != this) { - _realizedCells.AddFirst(cell.Track); - } - - cell.Prepare(this, ParentGrid.GetColumnWidth(column)); - - } - - protected override void ClearContainerForItemOverride(DependencyObject element, object item) { - base.ClearContainerForItemOverride(element, item); - - var cell = (DynamicGridCell)element; - if (cell.ParentRow == this) { - _realizedCells.Remove(cell.Track); - } - cell.CleanUp(); - } - - internal void Prepare(DynamicGrid owner, object item) { - if (!(item is IList)) { - throw new NotSupportedException("JointCollectionGridRow supports only IList for item"); - } - - ParentGrid = owner; - - var items = (IList)item; - ItemsSource = items; - } - - internal void CleanUp(DynamicGrid owner, object item) { - // when VirtualizationMode == Recycling, next lines must not be called as system calls them - var mode = VirtualizingPanel.GetVirtualizationMode(ParentGrid); - if (mode != VirtualizationMode.Recycling) { - foreach (var cell in _realizedCells) { - cell.CleanUp(); - } - _realizedCells.Clear(); - } - - ParentGrid = null; - } - - internal void ScrollChanged() { - if (SharedScrollChanged != null) { - SharedScrollChanged(this, EventArgs.Empty); - } - } - - internal DynamicGridRowHeader RowHeader { get; set; } - - internal void NotifyRowHeader() { - if (RowHeader != null) { - RowHeader.InvalidateMeasure(); - } - } - } -} diff --git a/src/Package/Impl/DataInspect/DynamicGrid/DynamicGridRowHeader.cs b/src/Package/Impl/DataInspect/DynamicGrid/DynamicGridRowHeader.cs deleted file mode 100644 index 93735c6de..000000000 --- a/src/Package/Impl/DataInspect/DynamicGrid/DynamicGridRowHeader.cs +++ /dev/null @@ -1,93 +0,0 @@ -using System.Windows; -using System.Windows.Controls; -using System.Windows.Media; -using Microsoft.VisualStudio.R.Package.Wpf; - -namespace Microsoft.VisualStudio.R.Package.DataInspect { - /// - /// A control that contains row header content - /// Width is synched with other row's header width through owning grid's property - /// - internal class DynamicGridRowHeader : ContentControl { - static DynamicGridRowHeader() { - DefaultStyleKeyProperty.OverrideMetadata(typeof(DynamicGridRowHeader), new FrameworkPropertyMetadata(typeof(DynamicGridRowHeader))); - } - - public override void OnApplyTemplate() { - base.OnApplyTemplate(); - - DynamicGridRow row = ParentRow; - if (row != null) { - row.RowHeader = this; - } - } - - protected override Size MeasureOverride(Size constraint) { - Size adjusted = DynamicGridUtilities.DecreaseSize(constraint, LineThickness); - - Size baseSize = base.MeasureOverride(adjusted); - - baseSize.Width += LineThickness; - baseSize.Height += LineThickness; - - var grid = ParentGrid; - if (grid == null) { - return baseSize; - } - - if (baseSize.Width > grid.RowHeaderActualWidth) { - grid.RowHeaderActualWidth = baseSize.Width; - } - - return new Size(grid.RowHeaderActualWidth, baseSize.Height); - } - - private double LineThickness = 1.0; - protected override Size ArrangeOverride(Size arrangeBounds) { - Size adjustedBounds = DynamicGridUtilities.DecreaseSize(arrangeBounds, LineThickness); - - Size arranged = base.ArrangeOverride(adjustedBounds); - - arranged.Width += LineThickness; - arranged.Height += LineThickness; - - return arranged; - } - - protected override void OnRender(DrawingContext drawingContext) { - base.OnRender(drawingContext); - - // vertical line - { - Rect rect = new Rect(new Size(LineThickness, RenderSize.Height)); - rect.X = RenderSize.Width - LineThickness; - - drawingContext.DrawRectangle(ParentGrid.HeaderLinesBrush, null, rect); - } - - // horizontal line - { - Rect rect = new Rect(new Size(RenderSize.Width, LineThickness)); - rect.Y = RenderSize.Height - LineThickness; - - drawingContext.DrawRectangle(ParentGrid.HeaderLinesBrush, null, rect); - } - } - - private DynamicGridRow _parentRow; - internal DynamicGridRow ParentRow { - get { - if (_parentRow == null) { - _parentRow = WpfHelper.FindParent(this); - } - return _parentRow; - } - } - - internal DynamicGrid ParentGrid { - get { - return ParentRow?.ParentGrid; - } - } - } -} diff --git a/src/Package/Impl/DataInspect/DynamicGrid/DynamicGridRowsPanel.cs b/src/Package/Impl/DataInspect/DynamicGrid/DynamicGridRowsPanel.cs deleted file mode 100644 index f2dfbcbfa..000000000 --- a/src/Package/Impl/DataInspect/DynamicGrid/DynamicGridRowsPanel.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System.Diagnostics; -using System.Windows; -using System.Windows.Controls; - -namespace Microsoft.VisualStudio.R.Package.DataInspect { - internal class DynamicGridRowsPanel : VirtualizingStackPanel { - private DynamicGrid _owningGrid; - internal DynamicGrid OwningGrid { - get { - if (_owningGrid == null) { - _owningGrid = ItemsControl.GetItemsOwner(this) as DynamicGrid; - - Debug.Assert(_owningGrid != null, "DynamicGridRowsPanel supports only DynamicGrid"); - } - return _owningGrid; - } - } - - protected override void OnViewportSizeChanged(Size oldViewportSize, Size newViewportSize) { - base.OnViewportSizeChanged(oldViewportSize, newViewportSize); - - DynamicGrid grid = OwningGrid; - if (grid != null) { - grid.OnViewportSizeChanged(newViewportSize); - } - } - } -} diff --git a/src/Package/Impl/DataInspect/DynamicGrid/DynamicGridStyle.xaml b/src/Package/Impl/DataInspect/DynamicGrid/DynamicGridStyle.xaml deleted file mode 100644 index 55b8004ed..000000000 --- a/src/Package/Impl/DataInspect/DynamicGrid/DynamicGridStyle.xaml +++ /dev/null @@ -1,193 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Package/Impl/DataInspect/DynamicGrid/DynamicGridUtilities.cs b/src/Package/Impl/DataInspect/DynamicGrid/DynamicGridUtilities.cs deleted file mode 100644 index c9e96ec34..000000000 --- a/src/Package/Impl/DataInspect/DynamicGrid/DynamicGridUtilities.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows; - -namespace Microsoft.VisualStudio.R.Package.DataInspect { - internal class DynamicGridUtilities { - public static Size DecreaseSize(Size size, double thickness) { - double width = size.Width - thickness; - width = Math.Max(0.0, width); - - double height = size.Height - thickness; - height = Math.Max(0.0, height); - - return new Size(width, height); - } - } -} diff --git a/src/Package/Impl/DataInspect/DynamicGrid/MaxDouble.cs b/src/Package/Impl/DataInspect/DynamicGrid/MaxDouble.cs deleted file mode 100644 index ab14896eb..000000000 --- a/src/Package/Impl/DataInspect/DynamicGrid/MaxDouble.cs +++ /dev/null @@ -1,44 +0,0 @@ -using System; -using System.ComponentModel; - -namespace Microsoft.VisualStudio.R.Package.DataInspect { - /// - /// double that updates only when bigger value is assigned - /// - public class MaxDouble { - public MaxDouble() : this(double.NegativeInfinity) { } - - public MaxDouble(double initialValue) { - _max = initialValue; - } - - private double _max; - /// - /// Maximum value - /// - public double Max - { - get - { - return _max; - } - set - { - SetValue(value); - } - } - - public event EventHandler MaxChanged; - - private void SetValue(double value) { - if (MaxChanged != null) { - if (value > _max) { - _max = value; - MaxChanged(this, EventArgs.Empty); - } - } else { - _max = Math.Max(_max, value); - } - } - } -} diff --git a/src/Package/Impl/DataInspect/VariableGridHost.xaml b/src/Package/Impl/DataInspect/VariableGridHost.xaml index 71e6f3cde..7b58edfb9 100644 --- a/src/Package/Impl/DataInspect/VariableGridHost.xaml +++ b/src/Package/Impl/DataInspect/VariableGridHost.xaml @@ -9,14 +9,6 @@ HorizontalAlignment="Stretch" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="300"> - - - - - - - - - - - - - - - @@ -111,7 +104,6 @@ - @@ -796,10 +788,6 @@ - - MSBuild:Compile - Designer - Designer MSBuild:Compile diff --git a/src/Package/TestApp2/MainWindow.xaml b/src/Package/TestApp2/MainWindow.xaml deleted file mode 100644 index 33e4a030d..000000000 --- a/src/Package/TestApp2/MainWindow.xaml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - -