aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Software/Graphics/FSE/Modules/ppc_console.pngbin0 -> 1907 bytes
-rw-r--r--Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/App.xaml16
-rw-r--r--Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Images/ppc_console.pngbin0 -> 1907 bytes
-rw-r--r--Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/PPCConsoleModule.cs26
-rw-r--r--Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Properties/AssemblyInfo.cs55
-rw-r--r--Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Properties/Resources.Designer.cs71
-rw-r--r--Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Properties/Resources.resx117
-rw-r--r--Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Properties/Settings.Designer.cs30
-rw-r--r--Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Properties/Settings.settings7
-rw-r--r--Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Tango.FSE.PPCConsole.csproj180
-rw-r--r--Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/ViewModelLocator.cs26
-rw-r--r--Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/ViewModels/MainViewVM.cs32
-rw-r--r--Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Views/MainView.xaml14
-rw-r--r--Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Views/MainView.xaml.cs28
-rw-r--r--Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/app.config85
-rw-r--r--Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/packages.config10
-rw-r--r--Software/Visual_Studio/FSE/Tango.FSE.UI/Tango.FSE.UI.csproj4
-rw-r--r--Software/Visual_Studio/Project Templates/TangoFSEModule.zipbin0 -> 19978 bytes
-rw-r--r--Software/Visual_Studio/Tango.Console/ConsoleCommand.cs47
-rw-r--r--Software/Visual_Studio/Tango.Console/ConsoleCommandDTO.cs15
-rw-r--r--Software/Visual_Studio/Tango.Console/ConsoleCommandExecutingEventArgs.cs26
-rw-r--r--Software/Visual_Studio/Tango.Console/ConsoleCommandExecutionResult.cs14
-rw-r--r--Software/Visual_Studio/Tango.Console/ConsoleControl.xaml75
-rw-r--r--Software/Visual_Studio/Tango.Console/ConsoleControl.xaml.cs63
-rw-r--r--Software/Visual_Studio/Tango.Console/ConsoleControlVM.cs129
-rw-r--r--Software/Visual_Studio/Tango.Console/ConsoleExecutionEngine.cs88
-rw-r--r--Software/Visual_Studio/Tango.Console/ConsoleTextBox.cs60
-rw-r--r--Software/Visual_Studio/Tango.Console/ConsoleTextBoxMaxWidthConverter.cs26
-rw-r--r--Software/Visual_Studio/Tango.Console/Properties/AssemblyInfo.cs55
-rw-r--r--Software/Visual_Studio/Tango.Console/Properties/Resources.Designer.cs62
-rw-r--r--Software/Visual_Studio/Tango.Console/Properties/Resources.resx117
-rw-r--r--Software/Visual_Studio/Tango.Console/Properties/Settings.Designer.cs30
-rw-r--r--Software/Visual_Studio/Tango.Console/Properties/Settings.settings7
-rw-r--r--Software/Visual_Studio/Tango.Console/Tango.Console.csproj105
-rw-r--r--Software/Visual_Studio/Tango.Console/Themes/Generic.xaml73
-rw-r--r--Software/Visual_Studio/Tango.sln97
36 files changed, 1784 insertions, 6 deletions
diff --git a/Software/Graphics/FSE/Modules/ppc_console.png b/Software/Graphics/FSE/Modules/ppc_console.png
new file mode 100644
index 000000000..20758d055
--- /dev/null
+++ b/Software/Graphics/FSE/Modules/ppc_console.png
Binary files differ
diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/App.xaml b/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/App.xaml
new file mode 100644
index 000000000..4ad5d146a
--- /dev/null
+++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/App.xaml
@@ -0,0 +1,16 @@
+<Application x:Class="Tango.FSE.PPCConsole.App"
+ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
+ <Application.Resources>
+ <ResourceDictionary>
+ <ResourceDictionary.MergedDictionaries>
+ <ResourceDictionary Source="pack://application:,,,/Tango.FSE.Common;component/Resources/Converters.xaml" />
+ <ResourceDictionary Source="pack://application:,,,/Tango.FSE.Common;component/Resources/Colors.xaml" />
+ <ResourceDictionary Source="pack://application:,,,/Tango.FSE.Common;component/Resources/Fonts.xaml" />
+ <ResourceDictionary Source="pack://application:,,,/Tango.FSE.Common;component/Resources/Images.xaml" />
+ <ResourceDictionary Source="pack://application:,,,/Tango.FSE.Common;component/Resources/Styles.xaml" />
+ <ResourceDictionary Source="pack://application:,,,/Tango.FSE.Common;component/Resources/Controls.xaml" />
+ </ResourceDictionary.MergedDictionaries>
+ </ResourceDictionary>
+ </Application.Resources>
+</Application> \ No newline at end of file
diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Images/ppc_console.png b/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Images/ppc_console.png
new file mode 100644
index 000000000..20758d055
--- /dev/null
+++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Images/ppc_console.png
Binary files differ
diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/PPCConsoleModule.cs b/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/PPCConsoleModule.cs
new file mode 100644
index 000000000..3fd59c69d
--- /dev/null
+++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/PPCConsoleModule.cs
@@ -0,0 +1,26 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Media.Imaging;
+using Tango.BL.Enumerations;
+using Tango.FSE.Common;
+using Tango.FSE.PPCConsole.Views;
+
+namespace Tango.FSE.PPCConsole
+{
+ [FSEModule(index: 1)]
+ public class PPCConsoleModule : FSEModuleBase
+ {
+ public override string Name { get; } = "PPC Console";
+ public override string Description { get; } = "PPC Console module";
+ public override Type MainViewType { get; } = typeof(MainView);
+ public override Permissions Permission { get; } = Permissions.FSE_RunFSE;
+
+ public override void Dispose()
+ {
+
+ }
+ }
+}
diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Properties/AssemblyInfo.cs b/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Properties/AssemblyInfo.cs
new file mode 100644
index 000000000..a76c82689
--- /dev/null
+++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Properties/AssemblyInfo.cs
@@ -0,0 +1,55 @@
+using System.Reflection;
+using System.Resources;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Windows;
+
+// 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("Tango.FSE.PPCConsole")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Tango.FSE.PPCConsole")]
+[assembly: AssemblyCopyright("Copyright © 2020")]
+[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)]
+
+//In order to begin building localizable applications, set
+//<UICulture>CultureYouAreCodingWith</UICulture> in your .csproj file
+//inside a <PropertyGroup>. For example, if you are using US english
+//in your source files, set the <UICulture> to en-US. Then uncomment
+//the NeutralResourceLanguage attribute below. Update the "en-US" in
+//the line below to match the UICulture setting in the project file.
+
+//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
+
+
+[assembly: ThemeInfo(
+ ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
+ //(used if a resource is not found in the page,
+ // or application resource dictionaries)
+ ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
+ //(used if a resource is not found in the page,
+ // app, or any theme specific resource dictionaries)
+)]
+
+
+// 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/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Properties/Resources.Designer.cs b/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Properties/Resources.Designer.cs
new file mode 100644
index 000000000..c6d4d1b69
--- /dev/null
+++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Properties/Resources.Designer.cs
@@ -0,0 +1,71 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 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.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Tango.FSE.PPCConsole.Properties
+{
+
+
+ /// <summary>
+ /// A strongly-typed resource class, for looking up localized strings, etc.
+ /// </summary>
+ // 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()
+ {
+ }
+
+ /// <summary>
+ /// Returns the cached ResourceManager instance used by this class.
+ /// </summary>
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager
+ {
+ get
+ {
+ if ((resourceMan == null))
+ {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Tango.FSE.PPCConsole.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ /// <summary>
+ /// Overrides the current thread's CurrentUICulture property for all
+ /// resource lookups using this strongly typed resource class.
+ /// </summary>
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture
+ {
+ get
+ {
+ return resourceCulture;
+ }
+ set
+ {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Properties/Resources.resx b/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Properties/Resources.resx
new file mode 100644
index 000000000..af7dbebba
--- /dev/null
+++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Properties/Resources.resx
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+ <!--
+ Microsoft ResX Schema
+
+ Version 2.0
+
+ The primary goals of this format is to allow a simple XML format
+ that is mostly human readable. The generation and parsing of the
+ various data types are done through the TypeConverter classes
+ associated with the data types.
+
+ Example:
+
+ ... ado.net/XML headers & schema ...
+ <resheader name="resmimetype">text/microsoft-resx</resheader>
+ <resheader name="version">2.0</resheader>
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>[base64 mime encoded serialized .NET Framework object]</value>
+ </data>
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+ <comment>This is a comment</comment>
+ </data>
+
+ There are any number of "resheader" rows that contain simple
+ name/value pairs.
+
+ Each data row contains a name, and value. The row also contains a
+ type or mimetype. Type corresponds to a .NET class that support
+ text/value conversion through the TypeConverter architecture.
+ Classes that don't support this are serialized and stored with the
+ mimetype set.
+
+ The mimetype is used for serialized objects, and tells the
+ ResXResourceReader how to depersist the object. This is currently not
+ extensible. For a given mimetype the value must be set accordingly:
+
+ Note - application/x-microsoft.net.object.binary.base64 is the format
+ that the ResXResourceWriter will generate, however the reader can
+ read any of the formats listed below.
+
+ mimetype: application/x-microsoft.net.object.binary.base64
+ value : The object must be serialized with
+ : System.Serialization.Formatters.Binary.BinaryFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.soap.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+ <xsd:element name="root" msdata:IsDataSet="true">
+ <xsd:complexType>
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:element name="metadata">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" />
+ <xsd:attribute name="type" type="xsd:string" />
+ <xsd:attribute name="mimetype" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="assembly">
+ <xsd:complexType>
+ <xsd:attribute name="alias" type="xsd:string" />
+ <xsd:attribute name="name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="data">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="resheader">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" />
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+ <resheader name="resmimetype">
+ <value>text/microsoft-resx</value>
+ </resheader>
+ <resheader name="version">
+ <value>2.0</value>
+ </resheader>
+ <resheader name="reader">
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <resheader name="writer">
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+</root> \ No newline at end of file
diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Properties/Settings.Designer.cs b/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Properties/Settings.Designer.cs
new file mode 100644
index 000000000..9ab0e913f
--- /dev/null
+++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Properties/Settings.Designer.cs
@@ -0,0 +1,30 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 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.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Tango.FSE.PPCConsole.Properties
+{
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
+ {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default
+ {
+ get
+ {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Properties/Settings.settings b/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Properties/Settings.settings
new file mode 100644
index 000000000..033d7a5e9
--- /dev/null
+++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Properties/Settings.settings
@@ -0,0 +1,7 @@
+<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)">
+ <Profiles>
+ <Profile Name="(Default)" />
+ </Profiles>
+ <Settings />
+</SettingsFile> \ No newline at end of file
diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Tango.FSE.PPCConsole.csproj b/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Tango.FSE.PPCConsole.csproj
new file mode 100644
index 000000000..6bd5c2a77
--- /dev/null
+++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Tango.FSE.PPCConsole.csproj
@@ -0,0 +1,180 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProjectGuid>{866B916A-207C-43F0-B403-7C4A820C2E11}</ProjectGuid>
+ <OutputType>library</OutputType>
+ <RootNamespace>Tango.FSE.PPCConsole</RootNamespace>
+ <AssemblyName>Tango.FSE.PPCConsole</AssemblyName>
+ <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <WarningLevel>4</WarningLevel>
+ <Deterministic>true</Deterministic>
+ <NuGetPackageImportStamp>
+ </NuGetPackageImportStamp>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>..\..\..\Build\FSE\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>..\..\..\Build\FSE\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="ControlzEx, Version=3.0.2.4, Culture=neutral, processorArchitecture=MSIL">
+ <HintPath>..\..\..\packages\ControlzEx.3.0.2.4\lib\net45\ControlzEx.dll</HintPath>
+ </Reference>
+ <Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
+ <HintPath>..\..\..\packages\EntityFramework.6.2.0\lib\net45\EntityFramework.dll</HintPath>
+ </Reference>
+ <Reference Include="EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
+ <HintPath>..\..\..\packages\EntityFramework.6.2.0\lib\net45\EntityFramework.SqlServer.dll</HintPath>
+ </Reference>
+ <Reference Include="Google.Protobuf, Version=3.4.1.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604, processorArchitecture=MSIL">
+ <HintPath>..\..\..\packages\Google.Protobuf.3.4.1\lib\net45\Google.Protobuf.dll</HintPath>
+ </Reference>
+ <Reference Include="MahApps.Metro, Version=1.6.5.1, Culture=neutral, processorArchitecture=MSIL">
+ <HintPath>..\..\..\packages\MahApps.Metro.1.6.5\lib\net46\MahApps.Metro.dll</HintPath>
+ </Reference>
+ <Reference Include="MaterialDesignColors, Version=1.2.2.920, Culture=neutral, processorArchitecture=MSIL">
+ <HintPath>..\..\..\packages\MaterialDesignColors.1.2.2\lib\net45\MaterialDesignColors.dll</HintPath>
+ </Reference>
+ <Reference Include="MaterialDesignThemes.Wpf, Version=3.0.1.920, Culture=neutral, processorArchitecture=MSIL">
+ <HintPath>..\..\..\packages\MaterialDesignThemes.3.0.1\lib\net45\MaterialDesignThemes.Wpf.dll</HintPath>
+ </Reference>
+ <Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
+ <HintPath>..\..\..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
+ </Reference>
+ <Reference Include="System" />
+ <Reference Include="System.ComponentModel.DataAnnotations" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Windows.Interactivity, Version=4.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
+ <HintPath>..\..\..\packages\ControlzEx.3.0.2.4\lib\net45\System.Windows.Interactivity.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Xml" />
+ <Reference Include="Microsoft.CSharp" />
+ <Reference Include="System.Core" />
+ <Reference Include="System.Xml.Linq" />
+ <Reference Include="System.Data.DataSetExtensions" />
+ <Reference Include="System.Net.Http" />
+ <Reference Include="System.Xaml">
+ <RequiredTargetFramework>4.0</RequiredTargetFramework>
+ </Reference>
+ <Reference Include="WindowsBase" />
+ <Reference Include="PresentationCore" />
+ <Reference Include="PresentationFramework" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="ViewModelLocator.cs" />
+ <Compile Include="PPCConsoleModule.cs" />
+ <Compile Include="ViewModels\MainViewVM.cs" />
+ <Compile Include="Views\MainView.xaml.cs">
+ <DependentUpon>MainView.xaml</DependentUpon>
+ </Compile>
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="Properties\AssemblyInfo.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Properties\Resources.Designer.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Resources.resx</DependentUpon>
+ </Compile>
+ <Compile Include="Properties\Settings.Designer.cs">
+ <AutoGen>True</AutoGen>
+ <DependentUpon>Settings.settings</DependentUpon>
+ <DesignTimeSharedInput>True</DesignTimeSharedInput>
+ </Compile>
+ <EmbeddedResource Include="Properties\Resources.resx">
+ <Generator>ResXFileCodeGenerator</Generator>
+ <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+ </EmbeddedResource>
+ <None Include="app.config" />
+ <None Include="packages.config" />
+ <None Include="Properties\Settings.settings">
+ <Generator>SettingsSingleFileGenerator</Generator>
+ <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+ </None>
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\..\..\SideChains\Tango.AutoComplete\Tango.AutoComplete.csproj">
+ <Project>{bb2abb74-ba58-4812-83aa-ec8171f42df4}</Project>
+ <Name>Tango.AutoComplete</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\..\Tango.BL\Tango.BL.csproj">
+ <Project>{f441feee-322a-4943-b566-110e12fd3b72}</Project>
+ <Name>Tango.BL</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\..\Tango.Core\Tango.Core.csproj">
+ <Project>{a34ee0f0-649d-41c8-8489-b6f1cc6924ee}</Project>
+ <Name>Tango.Core</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\..\Tango.Integration\Tango.Integration.csproj">
+ <Project>{4206ac58-3b57-4699-8835-90bf6db01a61}</Project>
+ <Name>Tango.Integration</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\..\Tango.Logging\Tango.Logging.csproj">
+ <Project>{bc932dbd-7cdb-488c-99e4-f02cf441f55e}</Project>
+ <Name>Tango.Logging</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\..\Tango.PMR\Tango.PMR.csproj">
+ <Project>{e4927038-348d-4295-aaf4-861c58cb3943}</Project>
+ <Name>Tango.PMR</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\..\Tango.Settings\Tango.Settings.csproj">
+ <Project>{d8f1ad85-526a-4f50-b6dc-d437af63d8d8}</Project>
+ <Name>Tango.Settings</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\..\Tango.SharedUI\Tango.SharedUI.csproj">
+ <Project>{8491d07b-c1f6-4b62-a412-41b9fd2d6538}</Project>
+ <Name>Tango.SharedUI</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\..\Tango.Transport\Tango.Transport.csproj">
+ <Project>{74e700b0-1156-4126-be40-ee450d3c3026}</Project>
+ <Name>Tango.Transport</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\Tango.FSE.BL\Tango.FSE.BL.csproj">
+ <Project>{834c81c3-09b5-45d7-be12-e7d1e6655a7c}</Project>
+ <Name>Tango.FSE.BL</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\Tango.FSE.Common\Tango.FSE.Common.csproj">
+ <Project>{bc37cccb-7392-4f78-8d1c-e9629e6e046e}</Project>
+ <Name>Tango.FSE.Common</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup>
+ <Page Include="App.xaml">
+ <Generator>MSBuild:Compile</Generator>
+ <SubType>Designer</SubType>
+ </Page>
+ <Page Include="Views\MainView.xaml">
+ <SubType>Designer</SubType>
+ <Generator>MSBuild:Compile</Generator>
+ </Page>
+ </ItemGroup>
+ <ItemGroup>
+ <Resource Include="Images\ppc_console.png" />
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ <Import Project="..\..\..\packages\MaterialDesignThemes.3.0.1\build\MaterialDesignThemes.targets" Condition="Exists('..\..\..\packages\MaterialDesignThemes.3.0.1\build\MaterialDesignThemes.targets')" />
+ <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
+ <PropertyGroup>
+ <ErrorText>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}.</ErrorText>
+ </PropertyGroup>
+ <Error Condition="!Exists('..\..\..\packages\MaterialDesignThemes.3.0.1\build\MaterialDesignThemes.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\MaterialDesignThemes.3.0.1\build\MaterialDesignThemes.targets'))" />
+ </Target>
+</Project> \ No newline at end of file
diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/ViewModelLocator.cs b/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/ViewModelLocator.cs
new file mode 100644
index 000000000..f6397cfa9
--- /dev/null
+++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/ViewModelLocator.cs
@@ -0,0 +1,26 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.Core.DI;
+using Tango.FSE.PPCConsole.ViewModels;
+
+namespace Tango.FSE.PPCConsole
+{
+ public static class ViewModelLocator
+ {
+ static ViewModelLocator()
+ {
+ TangoIOC.Default.Register<MainViewVM>();
+ }
+
+ public static MainViewVM MainViewVM
+ {
+ get
+ {
+ return TangoIOC.Default.GetInstance<MainViewVM>();
+ }
+ }
+ }
+}
diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/ViewModels/MainViewVM.cs b/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/ViewModels/MainViewVM.cs
new file mode 100644
index 000000000..8e1b4f920
--- /dev/null
+++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/ViewModels/MainViewVM.cs
@@ -0,0 +1,32 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.FSE.Common;
+using Tango.FSE.Common.Navigation;
+using Tango.SharedUI.Helpers;
+
+namespace Tango.FSE.PPCConsole.ViewModels
+{
+ public class MainViewVM : FSEViewModel
+ {
+ public override void OnApplicationStarted()
+ {
+ InvokeUI(() =>
+ {
+ NavigationManager.MenuItems.Add(new NavigationMenuItem(() =>
+ {
+ NavigationManager.NavigateTo<PPCConsoleModule>();
+ })
+ {
+ Name = "Console",
+ Index = 2,
+ Description = "Monitor the current connected machine telemetry",
+ Image = ResourceHelper.GetImageFromResources("Images/ppc_console.png"),
+ });
+ });
+ }
+ }
+}
diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Views/MainView.xaml b/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Views/MainView.xaml
new file mode 100644
index 000000000..174e2bde4
--- /dev/null
+++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Views/MainView.xaml
@@ -0,0 +1,14 @@
+<UserControl x:Class="Tango.FSE.PPCConsole.Views.MainView"
+ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+ xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+ xmlns:global="clr-namespace:Tango.FSE.PPCConsole"
+ xmlns:vm="clr-namespace:Tango.FSE.PPCConsole.ViewModels"
+ xmlns:local="clr-namespace:Tango.FSE.PPCConsole.Views"
+ mc:Ignorable="d"
+ d:DesignHeight="450" d:DesignWidth="800" d:DataContext="{d:DesignInstance Type=vm:MainViewVM, IsDesignTimeCreatable=False}" DataContext="{x:Static global:ViewModelLocator.MainViewVM}">
+ <Grid>
+ <TextBlock FontSize="60" HorizontalAlignment="Center" VerticalAlignment="Center">PPC Console</TextBlock>
+ </Grid>
+</UserControl>
diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Views/MainView.xaml.cs b/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Views/MainView.xaml.cs
new file mode 100644
index 000000000..71fd6bd92
--- /dev/null
+++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Views/MainView.xaml.cs
@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace Tango.FSE.PPCConsole.Views
+{
+ /// <summary>
+ /// Interaction logic for MainView.xaml
+ /// </summary>
+ public partial class MainView : UserControl
+ {
+ public MainView()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/app.config b/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/app.config
new file mode 100644
index 000000000..36bc04f85
--- /dev/null
+++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/app.config
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+ <configSections>
+ <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
+ <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
+ </configSections>
+ <runtime>
+ <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+ <dependentAssembly>
+ <assemblyIdentity name="Microsoft.IdentityModel.Clients.ActiveDirectory" publicKeyToken="31bf3856ad364e35" culture="neutral" />
+ <bindingRedirect oldVersion="0.0.0.0-5.0.5.0" newVersion="5.0.5.0" />
+ </dependentAssembly>
+ <dependentAssembly>
+ <assemblyIdentity name="System.Collections.Immutable" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+ <bindingRedirect oldVersion="0.0.0.0-1.2.2.0" newVersion="1.2.2.0" />
+ </dependentAssembly>
+ <dependentAssembly>
+ <assemblyIdentity name="System.Reflection.Metadata" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+ <bindingRedirect oldVersion="0.0.0.0-1.4.2.0" newVersion="1.4.2.0" />
+ </dependentAssembly>
+ <dependentAssembly>
+ <assemblyIdentity name="System.IO.FileSystem" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+ <bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
+ </dependentAssembly>
+ <dependentAssembly>
+ <assemblyIdentity name="System.ValueTuple" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
+ <bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
+ </dependentAssembly>
+ <dependentAssembly>
+ <assemblyIdentity name="System.IO.Compression" publicKeyToken="b77a5c561934e089" culture="neutral" />
+ <bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" />
+ </dependentAssembly>
+ <dependentAssembly>
+ <assemblyIdentity name="System.IO.FileSystem.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+ <bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
+ </dependentAssembly>
+ <dependentAssembly>
+ <assemblyIdentity name="System.Security.Cryptography.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+ <bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
+ </dependentAssembly>
+ <dependentAssembly>
+ <assemblyIdentity name="System.Xml.XPath.XDocument" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+ <bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
+ </dependentAssembly>
+ <dependentAssembly>
+ <assemblyIdentity name="System.Console" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+ <bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
+ </dependentAssembly>
+ <dependentAssembly>
+ <assemblyIdentity name="System.Diagnostics.StackTrace" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+ <bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
+ </dependentAssembly>
+ <dependentAssembly>
+ <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
+ <bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
+ </dependentAssembly>
+ <dependentAssembly>
+ <assemblyIdentity name="Microsoft.Data.Edm" publicKeyToken="31bf3856ad364e35" culture="neutral" />
+ <bindingRedirect oldVersion="0.0.0.0-5.6.4.0" newVersion="5.6.4.0" />
+ </dependentAssembly>
+ <dependentAssembly>
+ <assemblyIdentity name="Microsoft.Data.Services.Client" publicKeyToken="31bf3856ad364e35" culture="neutral" />
+ <bindingRedirect oldVersion="0.0.0.0-5.6.4.0" newVersion="5.6.4.0" />
+ </dependentAssembly>
+ <dependentAssembly>
+ <assemblyIdentity name="Microsoft.Data.OData" publicKeyToken="31bf3856ad364e35" culture="neutral" />
+ <bindingRedirect oldVersion="0.0.0.0-5.6.4.0" newVersion="5.6.4.0" />
+ </dependentAssembly>
+ <dependentAssembly>
+ <assemblyIdentity name="System.Reactive.Core" publicKeyToken="94bc3704cddfc263" culture="neutral" />
+ <bindingRedirect oldVersion="0.0.0.0-3.0.3000.0" newVersion="3.0.3000.0" />
+ </dependentAssembly>
+ <dependentAssembly>
+ <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" culture="neutral" />
+ <bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" />
+ </dependentAssembly>
+ </assemblyBinding>
+ </runtime>
+ <entityFramework>
+ <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
+ <providers>
+ <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
+ </providers>
+ </entityFramework>
+</configuration> \ No newline at end of file
diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/packages.config b/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/packages.config
new file mode 100644
index 000000000..dd8c723e4
--- /dev/null
+++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/packages.config
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+ <package id="ControlzEx" version="3.0.2.4" targetFramework="net461" />
+ <package id="EntityFramework" version="6.2.0" targetFramework="net461" />
+ <package id="Google.Protobuf" version="3.4.1" targetFramework="net461" />
+ <package id="MahApps.Metro" version="1.6.5" targetFramework="net461" />
+ <package id="MaterialDesignColors" version="1.2.2" targetFramework="net461" />
+ <package id="MaterialDesignThemes" version="3.0.1" targetFramework="net461" />
+ <package id="Newtonsoft.Json" version="9.0.1" targetFramework="net461" />
+</packages> \ No newline at end of file
diff --git a/Software/Visual_Studio/FSE/Tango.FSE.UI/Tango.FSE.UI.csproj b/Software/Visual_Studio/FSE/Tango.FSE.UI/Tango.FSE.UI.csproj
index cc995d342..7b3e64ff3 100644
--- a/Software/Visual_Studio/FSE/Tango.FSE.UI/Tango.FSE.UI.csproj
+++ b/Software/Visual_Studio/FSE/Tango.FSE.UI/Tango.FSE.UI.csproj
@@ -315,6 +315,10 @@
<Project>{8cffa4fc-f46f-475d-a270-dafbfb532bc8}</Project>
<Name>Tango.FSE.Diagnostics</Name>
</ProjectReference>
+ <ProjectReference Include="..\Modules\Tango.FSE.PPCConsole\Tango.FSE.PPCConsole.csproj">
+ <Project>{866b916a-207c-43f0-b403-7c4a820c2e11}</Project>
+ <Name>Tango.FSE.PPCConsole</Name>
+ </ProjectReference>
<ProjectReference Include="..\Tango.FSE.BL\Tango.FSE.BL.csproj">
<Project>{834c81c3-09b5-45d7-be12-e7d1e6655a7c}</Project>
<Name>Tango.FSE.BL</Name>
diff --git a/Software/Visual_Studio/Project Templates/TangoFSEModule.zip b/Software/Visual_Studio/Project Templates/TangoFSEModule.zip
new file mode 100644
index 000000000..d06efa163
--- /dev/null
+++ b/Software/Visual_Studio/Project Templates/TangoFSEModule.zip
Binary files differ
diff --git a/Software/Visual_Studio/Tango.Console/ConsoleCommand.cs b/Software/Visual_Studio/Tango.Console/ConsoleCommand.cs
new file mode 100644
index 000000000..033851932
--- /dev/null
+++ b/Software/Visual_Studio/Tango.Console/ConsoleCommand.cs
@@ -0,0 +1,47 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.Core;
+
+namespace Tango.Console
+{
+ public class ConsoleCommand : ExtendedObject
+ {
+ private String _workingFolder;
+ public String WorkingFolder
+ {
+ get { return _workingFolder; }
+ set { _workingFolder = value; RaisePropertyChangedAuto(); }
+ }
+
+ private String _commandText;
+ public String CommandText
+ {
+ get { return _commandText; }
+ set { _commandText = value; RaisePropertyChangedAuto(); }
+ }
+
+ private bool _isExecuting;
+ public bool IsExecuting
+ {
+ get { return _isExecuting; }
+ internal set { _isExecuting = value; RaisePropertyChangedAuto(); }
+ }
+
+ private String _output;
+ public String Output
+ {
+ get { return _output; }
+ internal set { _output = value; RaisePropertyChangedAuto(); }
+ }
+
+ private bool _isFromHistory;
+ public bool IsFromHistory
+ {
+ get { return _isFromHistory; }
+ set { _isFromHistory = value; RaisePropertyChangedAuto(); }
+ }
+ }
+}
diff --git a/Software/Visual_Studio/Tango.Console/ConsoleCommandDTO.cs b/Software/Visual_Studio/Tango.Console/ConsoleCommandDTO.cs
new file mode 100644
index 000000000..1d96fccc2
--- /dev/null
+++ b/Software/Visual_Studio/Tango.Console/ConsoleCommandDTO.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Tango.Console
+{
+ public class ConsoleCommandDTO
+ {
+ public String WorkingFolder { get; set; }
+ public String Command { get; set; }
+ public bool RunAsAdministrator { get; set; }
+ }
+}
diff --git a/Software/Visual_Studio/Tango.Console/ConsoleCommandExecutingEventArgs.cs b/Software/Visual_Studio/Tango.Console/ConsoleCommandExecutingEventArgs.cs
new file mode 100644
index 000000000..04ff41f91
--- /dev/null
+++ b/Software/Visual_Studio/Tango.Console/ConsoleCommandExecutingEventArgs.cs
@@ -0,0 +1,26 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Tango.Console
+{
+ public class ConsoleCommandExecutingEventArgs : EventArgs
+ {
+ private Action<String, String> _completedAction;
+
+ public ConsoleCommand Command { get; private set; }
+
+ public ConsoleCommandExecutingEventArgs(ConsoleCommand command, Action<String, String> completedAction)
+ {
+ Command = command;
+ _completedAction = completedAction;
+ }
+
+ public void Complete(String output, String nextWorkingFolder)
+ {
+ _completedAction.Invoke(output, nextWorkingFolder);
+ }
+ }
+}
diff --git a/Software/Visual_Studio/Tango.Console/ConsoleCommandExecutionResult.cs b/Software/Visual_Studio/Tango.Console/ConsoleCommandExecutionResult.cs
new file mode 100644
index 000000000..27e00d1e4
--- /dev/null
+++ b/Software/Visual_Studio/Tango.Console/ConsoleCommandExecutionResult.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Tango.Console
+{
+ public class ConsoleCommandExecutionResult
+ {
+ public String WorkingFolder { get; set; }
+ public String Output { get; set; }
+ }
+}
diff --git a/Software/Visual_Studio/Tango.Console/ConsoleControl.xaml b/Software/Visual_Studio/Tango.Console/ConsoleControl.xaml
new file mode 100644
index 000000000..fba10403a
--- /dev/null
+++ b/Software/Visual_Studio/Tango.Console/ConsoleControl.xaml
@@ -0,0 +1,75 @@
+<UserControl x:Class="Tango.Console.ConsoleControl"
+ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+ xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+ xmlns:converters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI"
+ xmlns:local="clr-namespace:Tango.Console"
+ mc:Ignorable="d"
+ d:DesignHeight="450" d:DesignWidth="800" FontFamily="Consolas" FontSize="14" FocusVisualStyle="{x:Null}" Focusable="False" d:DataContext="{d:DesignInstance Type=local:ConsoleControlVM, IsDesignTimeCreatable=False}" Background="Black" Foreground="Silver" x:Name="control">
+
+ <UserControl.Style>
+ <Style TargetType="UserControl">
+ <Setter Property="local:ConsoleControl.CaretBrush" Value="White"></Setter>
+ <Setter Property="local:ConsoleControl.SelectionBrush" Value="#828282"></Setter>
+ <Setter Property="local:ConsoleControl.BusyTemplate">
+ <Setter.Value>
+ <DataTemplate>
+ <TextBlock Margin="0 0 5 0" Foreground="Yellow" >...</TextBlock>
+ </DataTemplate>
+ </Setter.Value>
+ </Setter>
+ </Style>
+ </UserControl.Style>
+
+ <UserControl.Resources>
+ <converters:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
+ <local:ConsoleTextBoxMaxWidthConverter x:Key="ConsoleTextBoxMaxWidthConverter" />
+ </UserControl.Resources>
+
+ <Grid>
+ <ScrollViewer HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto" Focusable="False" PreviewMouseDown="ScrollViewer_PreviewMouseDown">
+ <StackPanel>
+ <ItemsControl ItemsSource="{Binding Commands}">
+ <ItemsControl.ItemTemplate>
+ <DataTemplate>
+ <StackPanel Margin="0 0 0 10">
+ <StackPanel Orientation="Horizontal">
+ <TextBlock>
+ <Run Text="{Binding WorkingFolder}"></Run><Run Text=">"></Run>
+ </TextBlock>
+ <StackPanel Margin="5 0 0 0" Orientation="Horizontal">
+ <TextBox IsReadOnly="True" Cursor="Arrow" AcceptsReturn="True" Background="Transparent" BorderThickness="0" Foreground="{Binding ElementName=control,Path=Foreground}" CaretBrush="{Binding ElementName=control,Path=CaretBrush}" SelectionBrush="{Binding ElementName=control,Path=SelectionBrush}" Text="{Binding CommandText}"></TextBox>
+ </StackPanel>
+ </StackPanel>
+
+ <TextBox IsReadOnly="True" Cursor="Arrow" TextWrapping="Wrap" AcceptsReturn="True" Background="Transparent" BorderThickness="0" Foreground="Silver" CaretBrush="White" SelectionBrush="#777777" Text="{Binding Output,Mode=OneWay}"></TextBox>
+ </StackPanel>
+ </DataTemplate>
+ </ItemsControl.ItemTemplate>
+ </ItemsControl>
+ <StackPanel Orientation="Horizontal">
+ <TextBlock x:Name="lbWorkingFolder">
+ <Run Text="{Binding CurrentCommand.WorkingFolder}"></Run><Run Text=">"></Run>
+ </TextBlock>
+ <StackPanel Margin="0 0 0 0" Orientation="Horizontal">
+ <ContentControl Margin="0 0 5 0" Content="{Binding}" ContentTemplate="{Binding ElementName=control,Path=BusyTemplate}" Visibility="{Binding CurrentCommand.IsExecuting,Converter={StaticResource BooleanToVisibilityConverter}}"/>
+ <local:ConsoleTextBox x:Name="txtCurrentCommand" Height="Auto" AcceptsReturn="False" TextWrapping="Wrap" VerticalScrollBarVisibility="Hidden" HorizontalScrollBarVisibility="Disabled" Cursor="Arrow" MinWidth="10" Background="Transparent" BorderThickness="0" Foreground="{Binding ElementName=control,Path=Foreground}" CaretBrush="Transparent" CaretBottomBrush="{Binding ElementName=control,Path=CaretBrush}" SelectionBrush="{Binding ElementName=control,Path=SelectionBrush}" Text="{Binding CurrentCommand.CommandText,UpdateSourceTrigger=PropertyChanged}" IsReadOnly="{Binding CurrentCommand.IsExecuting}">
+ <local:ConsoleTextBox.MaxWidth>
+ <MultiBinding Converter="{StaticResource ConsoleTextBoxMaxWidthConverter}">
+ <Binding ElementName="lbWorkingFolder" Path="ActualWidth" />
+ <Binding RelativeSource="{RelativeSource AncestorType=UserControl}" Path="ActualWidth"></Binding>
+ </MultiBinding>
+ </local:ConsoleTextBox.MaxWidth>
+ <TextBox.InputBindings>
+ <KeyBinding Key="Enter" Command="{Binding ExecuteCommand}" />
+ <KeyBinding Key="Up" Command="{Binding HistoryUpCommand}" />
+ <KeyBinding Key="Down" Command="{Binding HistoryDownCommand}" />
+ </TextBox.InputBindings>
+ </local:ConsoleTextBox>
+ </StackPanel>
+ </StackPanel>
+ </StackPanel>
+ </ScrollViewer>
+ </Grid>
+</UserControl>
diff --git a/Software/Visual_Studio/Tango.Console/ConsoleControl.xaml.cs b/Software/Visual_Studio/Tango.Console/ConsoleControl.xaml.cs
new file mode 100644
index 000000000..97059227c
--- /dev/null
+++ b/Software/Visual_Studio/Tango.Console/ConsoleControl.xaml.cs
@@ -0,0 +1,63 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace Tango.Console
+{
+ /// <summary>
+ /// Interaction logic for ConsoleControl.xaml
+ /// </summary>
+ public partial class ConsoleControl : UserControl
+ {
+ public ConsoleControl()
+ {
+ InitializeComponent();
+ MouseDown += ConsoleControl_MouseDown;
+ }
+
+ public Brush SelectionBrush
+ {
+ get { return (Brush)GetValue(SelectionBrushProperty); }
+ set { SetValue(SelectionBrushProperty, value); }
+ }
+ public static readonly DependencyProperty SelectionBrushProperty =
+ DependencyProperty.Register("SelectionBrush", typeof(Brush), typeof(ConsoleControl), new PropertyMetadata(Brushes.DimGray));
+
+ public Brush CaretBrush
+ {
+ get { return (Brush)GetValue(CaretBrushProperty); }
+ set { SetValue(CaretBrushProperty, value); }
+ }
+ public static readonly DependencyProperty CaretBrushProperty =
+ DependencyProperty.Register("CaretBrush", typeof(Brush), typeof(ConsoleControl), new PropertyMetadata(Brushes.White));
+
+ public DataTemplate BusyTemplate
+ {
+ get { return (DataTemplate)GetValue(BusyTemplateProperty); }
+ set { SetValue(BusyTemplateProperty, value); }
+ }
+ public static readonly DependencyProperty BusyTemplateProperty =
+ DependencyProperty.Register("BusyTemplate", typeof(DataTemplate), typeof(ConsoleControl), new PropertyMetadata(null));
+
+ private void ConsoleControl_MouseDown(object sender, MouseButtonEventArgs e)
+ {
+ Keyboard.Focus(txtCurrentCommand);
+ }
+
+ private void ScrollViewer_PreviewMouseDown(object sender, MouseButtonEventArgs e)
+ {
+ Keyboard.Focus(txtCurrentCommand);
+ }
+ }
+}
diff --git a/Software/Visual_Studio/Tango.Console/ConsoleControlVM.cs b/Software/Visual_Studio/Tango.Console/ConsoleControlVM.cs
new file mode 100644
index 000000000..c6092c6c4
--- /dev/null
+++ b/Software/Visual_Studio/Tango.Console/ConsoleControlVM.cs
@@ -0,0 +1,129 @@
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Diagnostics;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.Core.Commands;
+using Tango.SharedUI;
+
+namespace Tango.Console
+{
+ public class ConsoleControlVM : ViewModel
+ {
+ private int _historyIndex;
+
+ public event EventHandler<ConsoleCommandExecutingEventArgs> CommandExecuting;
+
+ public ObservableCollection<ConsoleCommand> Commands { get; private set; }
+
+ private ConsoleCommand _currentCommand;
+ public ConsoleCommand CurrentCommand
+ {
+ get { return _currentCommand; }
+ set { _currentCommand = value; RaisePropertyChangedAuto(); }
+ }
+
+ public RelayCommand ExecuteCommand { get; set; }
+
+ public RelayCommand HistoryDownCommand { get; set; }
+
+ public RelayCommand HistoryUpCommand { get; set; }
+
+ public ConsoleControlVM()
+ {
+ Commands = new ObservableCollection<ConsoleCommand>();
+ CurrentCommand = new ConsoleCommand()
+ {
+ WorkingFolder = Environment.CurrentDirectory
+ };
+
+ ExecuteCommand = new RelayCommand(Execute);
+
+ HistoryDownCommand = new RelayCommand(HistoryDown);
+ HistoryUpCommand = new RelayCommand(HistoryUp);
+ }
+
+ private void HistoryUp()
+ {
+ if (_historyIndex > 0)
+ {
+ _historyIndex--;
+ CreateNew(CurrentCommand.WorkingFolder, false, GetDistinctCommands()[_historyIndex].CommandText, true);
+ }
+ }
+
+ private void HistoryDown()
+ {
+ if (_historyIndex < GetDistinctCommands().Count - 1)
+ {
+ _historyIndex++;
+ CreateNew(CurrentCommand.WorkingFolder, false, GetDistinctCommands()[_historyIndex].CommandText, true);
+ }
+ }
+
+ private void Execute()
+ {
+ if (CurrentCommand != null)
+ {
+ if (!CurrentCommand.CommandText.IsNotNullOrEmpty())
+ {
+ CreateNew(CurrentCommand.WorkingFolder, true);
+ return;
+ }
+
+ if (CurrentCommand.CommandText.ToLower() == "clear")
+ {
+ Clear();
+ return;
+ }
+
+ CurrentCommand.IsExecuting = true;
+
+ ConsoleCommandExecutingEventArgs args = new ConsoleCommandExecutingEventArgs(CurrentCommand, (output, nextWorkingFolder) =>
+ {
+ CurrentCommand.IsExecuting = false;
+ CurrentCommand.Output = output;
+
+ CreateNew(nextWorkingFolder, true);
+ });
+
+ CommandExecuting?.Invoke(this, args);
+ }
+ }
+
+ public void Clear()
+ {
+ Commands.Clear();
+ CreateNew(CurrentCommand.WorkingFolder, false);
+ }
+
+ public void Clear(String workingFolder)
+ {
+ Commands.Clear();
+ CreateNew(workingFolder, false);
+ }
+
+ private void CreateNew(String workingFolder, bool pushCurrent, String commandText = null, bool fromHistory = false)
+ {
+ if (pushCurrent)
+ {
+ Commands.Add(CurrentCommand);
+ _historyIndex = GetDistinctCommands().Count;
+ }
+
+ CurrentCommand = new ConsoleCommand()
+ {
+ WorkingFolder = workingFolder != null ? workingFolder : CurrentCommand.WorkingFolder,
+ CommandText = commandText,
+ IsFromHistory = fromHistory
+ };
+ }
+
+ private List<ConsoleCommand> GetDistinctCommands()
+ {
+ return Commands.Where(x => !x.IsFromHistory).ToList();
+ }
+ }
+}
diff --git a/Software/Visual_Studio/Tango.Console/ConsoleExecutionEngine.cs b/Software/Visual_Studio/Tango.Console/ConsoleExecutionEngine.cs
new file mode 100644
index 000000000..194ff8454
--- /dev/null
+++ b/Software/Visual_Studio/Tango.Console/ConsoleExecutionEngine.cs
@@ -0,0 +1,88 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Tango.Console
+{
+ public class ConsoleExecutionEngine
+ {
+ private class ParsedCommand
+ {
+ public String Command { get; set; }
+ public String Arguments { get; set; }
+
+ public ParsedCommand(ConsoleCommandDTO dto)
+ {
+ String[] s = dto.Command.Split(' ');
+ Command = s.First();
+ Arguments = String.Join(" ", s.Skip(1));
+ }
+ }
+
+ public Task<ConsoleCommandExecutionResult> Execute(ConsoleCommandDTO command)
+ {
+ return Task.Factory.StartNew<ConsoleCommandExecutionResult>(() =>
+ {
+ ParsedCommand parsedCommand = new ParsedCommand(command);
+
+ if (parsedCommand.Command.ToLower() == "cd")
+ {
+ if (parsedCommand.Arguments.Contains(":\\") && Directory.Exists(parsedCommand.Arguments))
+ {
+ return new ConsoleCommandExecutionResult()
+ {
+ Output = String.Empty,
+ WorkingFolder = parsedCommand.Arguments,
+ };
+ }
+ else if (Directory.Exists(Path.Combine(command.WorkingFolder, parsedCommand.Arguments)))
+ {
+ return new ConsoleCommandExecutionResult()
+ {
+ Output = String.Empty,
+ WorkingFolder = Path.GetFullPath(Path.Combine(command.WorkingFolder, parsedCommand.Arguments)),
+ };
+ }
+ else
+ {
+ return new ConsoleCommandExecutionResult()
+ {
+ Output = "The directory does not exists.",
+ };
+ }
+ }
+
+ var process = new Process();
+ process.StartInfo.CreateNoWindow = true;
+ process.StartInfo.FileName = "cmd.exe";
+ process.StartInfo.UseShellExecute = false;
+ process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
+ process.StartInfo.RedirectStandardError = true;
+ process.StartInfo.RedirectStandardOutput = true;
+ process.StartInfo.RedirectStandardInput = true;
+ process.StartInfo.Arguments = "/C " + command.Command;
+ //process.StartInfo.Verb = "runas";
+
+ if (command.WorkingFolder != null)
+ {
+ process.StartInfo.WorkingDirectory = command.WorkingFolder;
+ }
+
+ process.Start();
+
+ String output = process.StandardOutput.ReadToEnd();
+ String error = process.StandardError.ReadToEnd();
+
+ return new ConsoleCommandExecutionResult()
+ {
+ WorkingFolder = command.WorkingFolder,
+ Output = String.IsNullOrWhiteSpace(error) ? output.Replace(command.WorkingFolder + ">", "") : error,
+ };
+ });
+ }
+ }
+}
diff --git a/Software/Visual_Studio/Tango.Console/ConsoleTextBox.cs b/Software/Visual_Studio/Tango.Console/ConsoleTextBox.cs
new file mode 100644
index 000000000..e2f1f53c3
--- /dev/null
+++ b/Software/Visual_Studio/Tango.Console/ConsoleTextBox.cs
@@ -0,0 +1,60 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace Tango.Console
+{
+ public class ConsoleTextBox : TextBox
+ {
+ private Border _caret;
+
+ static ConsoleTextBox()
+ {
+ DefaultStyleKeyProperty.OverrideMetadata(typeof(ConsoleTextBox), new FrameworkPropertyMetadata(typeof(ConsoleTextBox)));
+ }
+
+ public Brush CaretBottomBrush
+ {
+ get { return (Brush)GetValue(CaretBottomBrushProperty); }
+ set { SetValue(CaretBottomBrushProperty, value); }
+ }
+ public static readonly DependencyProperty CaretBottomBrushProperty =
+ DependencyProperty.Register("CaretBottomBrush", typeof(Brush), typeof(ConsoleTextBox), new PropertyMetadata(null));
+
+ public ConsoleTextBox()
+ {
+ SelectionChanged += (sender, e) => MoveCustomCaret();
+ LostFocus += (sender, e) => _caret.Visibility = Visibility.Collapsed;
+ GotKeyboardFocus += (sender, e) => _caret.Visibility = Visibility.Visible;
+ LostKeyboardFocus += (sender, e) => _caret.Visibility = Visibility.Collapsed;
+ }
+
+ public override void OnApplyTemplate()
+ {
+ base.OnApplyTemplate();
+
+ _caret = GetTemplateChild("PART_Caret") as Border;
+ }
+
+ private void MoveCustomCaret()
+ {
+ var caretLocation = GetRectFromCharacterIndex(CaretIndex).Location;
+
+ if (!double.IsInfinity(caretLocation.X))
+ {
+ Canvas.SetLeft(_caret, caretLocation.X);
+ }
+ }
+ }
+}
diff --git a/Software/Visual_Studio/Tango.Console/ConsoleTextBoxMaxWidthConverter.cs b/Software/Visual_Studio/Tango.Console/ConsoleTextBoxMaxWidthConverter.cs
new file mode 100644
index 000000000..5ed7c0938
--- /dev/null
+++ b/Software/Visual_Studio/Tango.Console/ConsoleTextBoxMaxWidthConverter.cs
@@ -0,0 +1,26 @@
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Data;
+
+namespace Tango.Console
+{
+ public class ConsoleTextBoxMaxWidthConverter : IMultiValueConverter
+ {
+ public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
+ {
+ double workingFolderWidth = (double)values[0];
+ double consoleWidth = (double)values[1];
+
+ return consoleWidth - workingFolderWidth;
+ }
+
+ public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
diff --git a/Software/Visual_Studio/Tango.Console/Properties/AssemblyInfo.cs b/Software/Visual_Studio/Tango.Console/Properties/AssemblyInfo.cs
new file mode 100644
index 000000000..2e7ba2c1f
--- /dev/null
+++ b/Software/Visual_Studio/Tango.Console/Properties/AssemblyInfo.cs
@@ -0,0 +1,55 @@
+using System.Reflection;
+using System.Resources;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Windows;
+
+// 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("Tango.Console")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Tango.Console")]
+[assembly: AssemblyCopyright("Copyright © 2020")]
+[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)]
+
+//In order to begin building localizable applications, set
+//<UICulture>CultureYouAreCodingWith</UICulture> in your .csproj file
+//inside a <PropertyGroup>. For example, if you are using US english
+//in your source files, set the <UICulture> to en-US. Then uncomment
+//the NeutralResourceLanguage attribute below. Update the "en-US" in
+//the line below to match the UICulture setting in the project file.
+
+//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
+
+
+[assembly:ThemeInfo(
+ ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
+ //(used if a resource is not found in the page,
+ // or application resource dictionaries)
+ ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
+ //(used if a resource is not found in the page,
+ // app, or any theme specific resource dictionaries)
+)]
+
+
+// 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/Software/Visual_Studio/Tango.Console/Properties/Resources.Designer.cs b/Software/Visual_Studio/Tango.Console/Properties/Resources.Designer.cs
new file mode 100644
index 000000000..d38cb44eb
--- /dev/null
+++ b/Software/Visual_Studio/Tango.Console/Properties/Resources.Designer.cs
@@ -0,0 +1,62 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 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.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Tango.Console.Properties {
+
+
+ /// <summary>
+ /// A strongly-typed resource class, for looking up localized strings, etc.
+ /// </summary>
+ // 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() {
+ }
+
+ /// <summary>
+ /// Returns the cached ResourceManager instance used by this class.
+ /// </summary>
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if ((resourceMan == null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Tango.Console.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ /// <summary>
+ /// Overrides the current thread's CurrentUICulture property for all
+ /// resource lookups using this strongly typed resource class.
+ /// </summary>
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/Software/Visual_Studio/Tango.Console/Properties/Resources.resx b/Software/Visual_Studio/Tango.Console/Properties/Resources.resx
new file mode 100644
index 000000000..af7dbebba
--- /dev/null
+++ b/Software/Visual_Studio/Tango.Console/Properties/Resources.resx
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+ <!--
+ Microsoft ResX Schema
+
+ Version 2.0
+
+ The primary goals of this format is to allow a simple XML format
+ that is mostly human readable. The generation and parsing of the
+ various data types are done through the TypeConverter classes
+ associated with the data types.
+
+ Example:
+
+ ... ado.net/XML headers & schema ...
+ <resheader name="resmimetype">text/microsoft-resx</resheader>
+ <resheader name="version">2.0</resheader>
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>[base64 mime encoded serialized .NET Framework object]</value>
+ </data>
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+ <comment>This is a comment</comment>
+ </data>
+
+ There are any number of "resheader" rows that contain simple
+ name/value pairs.
+
+ Each data row contains a name, and value. The row also contains a
+ type or mimetype. Type corresponds to a .NET class that support
+ text/value conversion through the TypeConverter architecture.
+ Classes that don't support this are serialized and stored with the
+ mimetype set.
+
+ The mimetype is used for serialized objects, and tells the
+ ResXResourceReader how to depersist the object. This is currently not
+ extensible. For a given mimetype the value must be set accordingly:
+
+ Note - application/x-microsoft.net.object.binary.base64 is the format
+ that the ResXResourceWriter will generate, however the reader can
+ read any of the formats listed below.
+
+ mimetype: application/x-microsoft.net.object.binary.base64
+ value : The object must be serialized with
+ : System.Serialization.Formatters.Binary.BinaryFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.soap.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+ <xsd:element name="root" msdata:IsDataSet="true">
+ <xsd:complexType>
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:element name="metadata">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" />
+ <xsd:attribute name="type" type="xsd:string" />
+ <xsd:attribute name="mimetype" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="assembly">
+ <xsd:complexType>
+ <xsd:attribute name="alias" type="xsd:string" />
+ <xsd:attribute name="name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="data">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="resheader">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" />
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+ <resheader name="resmimetype">
+ <value>text/microsoft-resx</value>
+ </resheader>
+ <resheader name="version">
+ <value>2.0</value>
+ </resheader>
+ <resheader name="reader">
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <resheader name="writer">
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+</root> \ No newline at end of file
diff --git a/Software/Visual_Studio/Tango.Console/Properties/Settings.Designer.cs b/Software/Visual_Studio/Tango.Console/Properties/Settings.Designer.cs
new file mode 100644
index 000000000..11e1ee7e0
--- /dev/null
+++ b/Software/Visual_Studio/Tango.Console/Properties/Settings.Designer.cs
@@ -0,0 +1,30 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 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.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Tango.Console.Properties
+{
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
+ {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default
+ {
+ get
+ {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/Software/Visual_Studio/Tango.Console/Properties/Settings.settings b/Software/Visual_Studio/Tango.Console/Properties/Settings.settings
new file mode 100644
index 000000000..033d7a5e9
--- /dev/null
+++ b/Software/Visual_Studio/Tango.Console/Properties/Settings.settings
@@ -0,0 +1,7 @@
+<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)">
+ <Profiles>
+ <Profile Name="(Default)" />
+ </Profiles>
+ <Settings />
+</SettingsFile> \ No newline at end of file
diff --git a/Software/Visual_Studio/Tango.Console/Tango.Console.csproj b/Software/Visual_Studio/Tango.Console/Tango.Console.csproj
new file mode 100644
index 000000000..27c4ab241
--- /dev/null
+++ b/Software/Visual_Studio/Tango.Console/Tango.Console.csproj
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProjectGuid>{199E8359-CAD3-433D-9EED-2027652B24A4}</ProjectGuid>
+ <OutputType>library</OutputType>
+ <RootNamespace>Tango.Console</RootNamespace>
+ <AssemblyName>Tango.Console</AssemblyName>
+ <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <WarningLevel>4</WarningLevel>
+ <Deterministic>true</Deterministic>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Xml" />
+ <Reference Include="Microsoft.CSharp" />
+ <Reference Include="System.Core" />
+ <Reference Include="System.Xml.Linq" />
+ <Reference Include="System.Data.DataSetExtensions" />
+ <Reference Include="System.Net.Http" />
+ <Reference Include="System.Xaml">
+ <RequiredTargetFramework>4.0</RequiredTargetFramework>
+ </Reference>
+ <Reference Include="WindowsBase" />
+ <Reference Include="PresentationCore" />
+ <Reference Include="PresentationFramework" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="ConsoleCommand.cs" />
+ <Compile Include="ConsoleCommandDTO.cs" />
+ <Compile Include="ConsoleCommandExecutingEventArgs.cs" />
+ <Compile Include="ConsoleCommandExecutionResult.cs" />
+ <Compile Include="ConsoleControl.xaml.cs">
+ <DependentUpon>ConsoleControl.xaml</DependentUpon>
+ </Compile>
+ <Compile Include="ConsoleControlVM.cs" />
+ <Compile Include="ConsoleExecutionEngine.cs" />
+ <Compile Include="ConsoleTextBox.cs" />
+ <Compile Include="ConsoleTextBoxMaxWidthConverter.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Properties\Resources.Designer.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Resources.resx</DependentUpon>
+ </Compile>
+ <Compile Include="Properties\Settings.Designer.cs">
+ <AutoGen>True</AutoGen>
+ <DependentUpon>Settings.settings</DependentUpon>
+ <DesignTimeSharedInput>True</DesignTimeSharedInput>
+ </Compile>
+ <EmbeddedResource Include="Properties\Resources.resx">
+ <Generator>ResXFileCodeGenerator</Generator>
+ <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+ </EmbeddedResource>
+ <None Include="Properties\Settings.settings">
+ <Generator>SettingsSingleFileGenerator</Generator>
+ <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+ </None>
+ </ItemGroup>
+ <ItemGroup>
+ <Page Include="ConsoleControl.xaml">
+ <Generator>MSBuild:Compile</Generator>
+ <SubType>Designer</SubType>
+ </Page>
+ <Page Include="Themes\Generic.xaml">
+ <Generator>MSBuild:Compile</Generator>
+ <SubType>Designer</SubType>
+ </Page>
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\Tango.Core\Tango.Core.csproj">
+ <Project>{a34ee0f0-649d-41c8-8489-b6f1cc6924ee}</Project>
+ <Name>Tango.Core</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\Tango.SharedUI\Tango.SharedUI.csproj">
+ <Project>{8491d07b-c1f6-4b62-a412-41b9fd2d6538}</Project>
+ <Name>Tango.SharedUI</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+</Project> \ No newline at end of file
diff --git a/Software/Visual_Studio/Tango.Console/Themes/Generic.xaml b/Software/Visual_Studio/Tango.Console/Themes/Generic.xaml
new file mode 100644
index 000000000..85ba88c33
--- /dev/null
+++ b/Software/Visual_Studio/Tango.Console/Themes/Generic.xaml
@@ -0,0 +1,73 @@
+<ResourceDictionary
+ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:local="clr-namespace:Tango.Console">
+
+
+ <SolidColorBrush x:Key="TextBox.Static.Border" Color="#FFABAdB3"/>
+ <SolidColorBrush x:Key="TextBox.MouseOver.Border" Color="#FF7EB4EA"/>
+ <SolidColorBrush x:Key="TextBox.Focus.Border" Color="#FF569DE5"/>
+ <Style TargetType="{x:Type local:ConsoleTextBox}">
+ <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"/>
+ <Setter Property="BorderBrush" Value="{StaticResource TextBox.Static.Border}"/>
+ <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
+ <Setter Property="BorderThickness" Value="1"/>
+ <Setter Property="KeyboardNavigation.TabNavigation" Value="None"/>
+ <Setter Property="HorizontalContentAlignment" Value="Left"/>
+ <Setter Property="CaretBrush" Value="{x:Null}"></Setter>
+ <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
+ <Setter Property="AllowDrop" Value="true"/>
+ <Setter Property="ScrollViewer.PanningMode" Value="VerticalFirst"/>
+ <Setter Property="Stylus.IsFlicksEnabled" Value="False"/>
+ <Setter Property="CaretBottomBrush" Value="White"></Setter>
+ <Setter Property="Template">
+ <Setter.Value>
+ <ControlTemplate TargetType="{x:Type local:ConsoleTextBox}">
+ <Grid>
+ <Border x:Name="border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
+ <ScrollViewer x:Name="PART_ContentHost" Focusable="false" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden"/>
+ </Border>
+ <Canvas>
+ <Border x:Name="PART_Caret" Visibility="Collapsed" IsHitTestVisible="False" Canvas.Left="0" Canvas.Bottom="0" Width="8" Height="4" Background="{TemplateBinding CaretBottomBrush}">
+ <Border.Triggers>
+ <EventTrigger RoutedEvent="Border.Loaded">
+ <BeginStoryboard>
+ <Storyboard x:Name="CaretStoryBoard" RepeatBehavior="Forever">
+ <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="Opacity" Duration="0:0:0:1" FillBehavior="HoldEnd">
+ <DoubleAnimationUsingKeyFrames.KeyFrames>
+ <DiscreteDoubleKeyFrame KeyTime="0:0:0.500" Value="0" />
+ <DiscreteDoubleKeyFrame KeyTime="0:0:0.000" Value="1"/>
+ </DoubleAnimationUsingKeyFrames.KeyFrames>
+ </DoubleAnimationUsingKeyFrames>
+ </Storyboard>
+ </BeginStoryboard>
+ </EventTrigger>
+ </Border.Triggers>
+ </Border>
+ </Canvas>
+ </Grid>
+ <ControlTemplate.Triggers>
+ <Trigger Property="IsEnabled" Value="false">
+ <Setter Property="Opacity" TargetName="border" Value="0.56"/>
+ </Trigger>
+ <Trigger Property="IsMouseOver" Value="true">
+ <Setter Property="BorderBrush" TargetName="border" Value="{StaticResource TextBox.MouseOver.Border}"/>
+ </Trigger>
+ <Trigger Property="IsKeyboardFocused" Value="true">
+ <Setter Property="BorderBrush" TargetName="border" Value="{StaticResource TextBox.Focus.Border}"/>
+ </Trigger>
+ </ControlTemplate.Triggers>
+ </ControlTemplate>
+ </Setter.Value>
+ </Setter>
+ <Style.Triggers>
+ <MultiTrigger>
+ <MultiTrigger.Conditions>
+ <Condition Property="IsInactiveSelectionHighlightEnabled" Value="true"/>
+ <Condition Property="IsSelectionActive" Value="false"/>
+ </MultiTrigger.Conditions>
+ <Setter Property="SelectionBrush" Value="{DynamicResource {x:Static SystemColors.InactiveSelectionHighlightBrushKey}}"/>
+ </MultiTrigger>
+ </Style.Triggers>
+ </Style>
+</ResourceDictionary>
diff --git a/Software/Visual_Studio/Tango.sln b/Software/Visual_Studio/Tango.sln
index fafd9a104..9ad8f52bd 100644
--- a/Software/Visual_Studio/Tango.sln
+++ b/Software/Visual_Studio/Tango.sln
@@ -355,6 +355,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tango.FSE.Web", "FSE\Tango.
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tango.FSE.BL", "FSE\Tango.FSE.BL\Tango.FSE.BL.csproj", "{834C81C3-09B5-45D7-BE12-E7D1E6655A7C}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tango.FSE.PPCConsole", "FSE\Modules\Tango.FSE.PPCConsole\Tango.FSE.PPCConsole.csproj", "{866B916A-207C-43F0-B403-7C4A820C2E11}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tango.Console", "Tango.Console\Tango.Console.csproj", "{199E8359-CAD3-433D-9EED-2027652B24A4}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
AppVeyor|Any CPU = AppVeyor|Any CPU
@@ -6287,6 +6291,86 @@ Global
{834C81C3-09B5-45D7-BE12-E7D1E6655A7C}.Release|x64.Build.0 = Release|Any CPU
{834C81C3-09B5-45D7-BE12-E7D1E6655A7C}.Release|x86.ActiveCfg = Release|Any CPU
{834C81C3-09B5-45D7-BE12-E7D1E6655A7C}.Release|x86.Build.0 = Release|Any CPU
+ {866B916A-207C-43F0-B403-7C4A820C2E11}.AppVeyor|Any CPU.ActiveCfg = Release|Any CPU
+ {866B916A-207C-43F0-B403-7C4A820C2E11}.AppVeyor|Any CPU.Build.0 = Release|Any CPU
+ {866B916A-207C-43F0-B403-7C4A820C2E11}.AppVeyor|ARM.ActiveCfg = Release|Any CPU
+ {866B916A-207C-43F0-B403-7C4A820C2E11}.AppVeyor|ARM.Build.0 = Release|Any CPU
+ {866B916A-207C-43F0-B403-7C4A820C2E11}.AppVeyor|ARM64.ActiveCfg = Release|Any CPU
+ {866B916A-207C-43F0-B403-7C4A820C2E11}.AppVeyor|ARM64.Build.0 = Release|Any CPU
+ {866B916A-207C-43F0-B403-7C4A820C2E11}.AppVeyor|x64.ActiveCfg = Release|Any CPU
+ {866B916A-207C-43F0-B403-7C4A820C2E11}.AppVeyor|x64.Build.0 = Release|Any CPU
+ {866B916A-207C-43F0-B403-7C4A820C2E11}.AppVeyor|x86.ActiveCfg = Release|Any CPU
+ {866B916A-207C-43F0-B403-7C4A820C2E11}.AppVeyor|x86.Build.0 = Release|Any CPU
+ {866B916A-207C-43F0-B403-7C4A820C2E11}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {866B916A-207C-43F0-B403-7C4A820C2E11}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {866B916A-207C-43F0-B403-7C4A820C2E11}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {866B916A-207C-43F0-B403-7C4A820C2E11}.Debug|ARM.Build.0 = Debug|Any CPU
+ {866B916A-207C-43F0-B403-7C4A820C2E11}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {866B916A-207C-43F0-B403-7C4A820C2E11}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {866B916A-207C-43F0-B403-7C4A820C2E11}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {866B916A-207C-43F0-B403-7C4A820C2E11}.Debug|x64.Build.0 = Debug|Any CPU
+ {866B916A-207C-43F0-B403-7C4A820C2E11}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {866B916A-207C-43F0-B403-7C4A820C2E11}.Debug|x86.Build.0 = Debug|Any CPU
+ {866B916A-207C-43F0-B403-7C4A820C2E11}.DefaultBuild|Any CPU.ActiveCfg = Debug|Any CPU
+ {866B916A-207C-43F0-B403-7C4A820C2E11}.DefaultBuild|Any CPU.Build.0 = Debug|Any CPU
+ {866B916A-207C-43F0-B403-7C4A820C2E11}.DefaultBuild|ARM.ActiveCfg = Debug|Any CPU
+ {866B916A-207C-43F0-B403-7C4A820C2E11}.DefaultBuild|ARM.Build.0 = Debug|Any CPU
+ {866B916A-207C-43F0-B403-7C4A820C2E11}.DefaultBuild|ARM64.ActiveCfg = Debug|Any CPU
+ {866B916A-207C-43F0-B403-7C4A820C2E11}.DefaultBuild|ARM64.Build.0 = Debug|Any CPU
+ {866B916A-207C-43F0-B403-7C4A820C2E11}.DefaultBuild|x64.ActiveCfg = Debug|Any CPU
+ {866B916A-207C-43F0-B403-7C4A820C2E11}.DefaultBuild|x64.Build.0 = Debug|Any CPU
+ {866B916A-207C-43F0-B403-7C4A820C2E11}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU
+ {866B916A-207C-43F0-B403-7C4A820C2E11}.DefaultBuild|x86.Build.0 = Debug|Any CPU
+ {866B916A-207C-43F0-B403-7C4A820C2E11}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {866B916A-207C-43F0-B403-7C4A820C2E11}.Release|Any CPU.Build.0 = Release|Any CPU
+ {866B916A-207C-43F0-B403-7C4A820C2E11}.Release|ARM.ActiveCfg = Release|Any CPU
+ {866B916A-207C-43F0-B403-7C4A820C2E11}.Release|ARM.Build.0 = Release|Any CPU
+ {866B916A-207C-43F0-B403-7C4A820C2E11}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {866B916A-207C-43F0-B403-7C4A820C2E11}.Release|ARM64.Build.0 = Release|Any CPU
+ {866B916A-207C-43F0-B403-7C4A820C2E11}.Release|x64.ActiveCfg = Release|Any CPU
+ {866B916A-207C-43F0-B403-7C4A820C2E11}.Release|x64.Build.0 = Release|Any CPU
+ {866B916A-207C-43F0-B403-7C4A820C2E11}.Release|x86.ActiveCfg = Release|Any CPU
+ {866B916A-207C-43F0-B403-7C4A820C2E11}.Release|x86.Build.0 = Release|Any CPU
+ {199E8359-CAD3-433D-9EED-2027652B24A4}.AppVeyor|Any CPU.ActiveCfg = Release|Any CPU
+ {199E8359-CAD3-433D-9EED-2027652B24A4}.AppVeyor|Any CPU.Build.0 = Release|Any CPU
+ {199E8359-CAD3-433D-9EED-2027652B24A4}.AppVeyor|ARM.ActiveCfg = Release|Any CPU
+ {199E8359-CAD3-433D-9EED-2027652B24A4}.AppVeyor|ARM.Build.0 = Release|Any CPU
+ {199E8359-CAD3-433D-9EED-2027652B24A4}.AppVeyor|ARM64.ActiveCfg = Release|Any CPU
+ {199E8359-CAD3-433D-9EED-2027652B24A4}.AppVeyor|ARM64.Build.0 = Release|Any CPU
+ {199E8359-CAD3-433D-9EED-2027652B24A4}.AppVeyor|x64.ActiveCfg = Release|Any CPU
+ {199E8359-CAD3-433D-9EED-2027652B24A4}.AppVeyor|x64.Build.0 = Release|Any CPU
+ {199E8359-CAD3-433D-9EED-2027652B24A4}.AppVeyor|x86.ActiveCfg = Release|Any CPU
+ {199E8359-CAD3-433D-9EED-2027652B24A4}.AppVeyor|x86.Build.0 = Release|Any CPU
+ {199E8359-CAD3-433D-9EED-2027652B24A4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {199E8359-CAD3-433D-9EED-2027652B24A4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {199E8359-CAD3-433D-9EED-2027652B24A4}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {199E8359-CAD3-433D-9EED-2027652B24A4}.Debug|ARM.Build.0 = Debug|Any CPU
+ {199E8359-CAD3-433D-9EED-2027652B24A4}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {199E8359-CAD3-433D-9EED-2027652B24A4}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {199E8359-CAD3-433D-9EED-2027652B24A4}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {199E8359-CAD3-433D-9EED-2027652B24A4}.Debug|x64.Build.0 = Debug|Any CPU
+ {199E8359-CAD3-433D-9EED-2027652B24A4}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {199E8359-CAD3-433D-9EED-2027652B24A4}.Debug|x86.Build.0 = Debug|Any CPU
+ {199E8359-CAD3-433D-9EED-2027652B24A4}.DefaultBuild|Any CPU.ActiveCfg = Debug|Any CPU
+ {199E8359-CAD3-433D-9EED-2027652B24A4}.DefaultBuild|Any CPU.Build.0 = Debug|Any CPU
+ {199E8359-CAD3-433D-9EED-2027652B24A4}.DefaultBuild|ARM.ActiveCfg = Debug|Any CPU
+ {199E8359-CAD3-433D-9EED-2027652B24A4}.DefaultBuild|ARM.Build.0 = Debug|Any CPU
+ {199E8359-CAD3-433D-9EED-2027652B24A4}.DefaultBuild|ARM64.ActiveCfg = Debug|Any CPU
+ {199E8359-CAD3-433D-9EED-2027652B24A4}.DefaultBuild|ARM64.Build.0 = Debug|Any CPU
+ {199E8359-CAD3-433D-9EED-2027652B24A4}.DefaultBuild|x64.ActiveCfg = Debug|Any CPU
+ {199E8359-CAD3-433D-9EED-2027652B24A4}.DefaultBuild|x64.Build.0 = Debug|Any CPU
+ {199E8359-CAD3-433D-9EED-2027652B24A4}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU
+ {199E8359-CAD3-433D-9EED-2027652B24A4}.DefaultBuild|x86.Build.0 = Debug|Any CPU
+ {199E8359-CAD3-433D-9EED-2027652B24A4}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {199E8359-CAD3-433D-9EED-2027652B24A4}.Release|Any CPU.Build.0 = Release|Any CPU
+ {199E8359-CAD3-433D-9EED-2027652B24A4}.Release|ARM.ActiveCfg = Release|Any CPU
+ {199E8359-CAD3-433D-9EED-2027652B24A4}.Release|ARM.Build.0 = Release|Any CPU
+ {199E8359-CAD3-433D-9EED-2027652B24A4}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {199E8359-CAD3-433D-9EED-2027652B24A4}.Release|ARM64.Build.0 = Release|Any CPU
+ {199E8359-CAD3-433D-9EED-2027652B24A4}.Release|x64.ActiveCfg = Release|Any CPU
+ {199E8359-CAD3-433D-9EED-2027652B24A4}.Release|x64.Build.0 = Release|Any CPU
+ {199E8359-CAD3-433D-9EED-2027652B24A4}.Release|x86.ActiveCfg = Release|Any CPU
+ {199E8359-CAD3-433D-9EED-2027652B24A4}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -6407,14 +6491,15 @@ Global
{8CFFA4FC-F46F-475D-A270-DAFBFB532BC8} = {4EE6DBA1-71BC-49E2-8DC7-266487E61050}
{D6F7D31D-7F8C-45E2-AE0A-FBBD1F5F9D5F} = {004337EB-0761-4D30-B9F5-AE6E1CFC6013}
{834C81C3-09B5-45D7-BE12-E7D1E6655A7C} = {004337EB-0761-4D30-B9F5-AE6E1CFC6013}
+ {866B916A-207C-43F0-B403-7C4A820C2E11} = {4EE6DBA1-71BC-49E2-8DC7-266487E61050}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
- BuildVersion_UseGlobalSettings = False
- BuildVersion_AssemblyInfoFilename = Properties\AssemblyInfo.cs
- BuildVersion_StartDate = 2000/1/1
- BuildVersion_UpdateFileVersion = False
- BuildVersion_UpdateAssemblyVersion = True
- BuildVersion_BuildVersioningStyle = None.None.Increment.DeltaBaseYearDayOfYear
SolutionGuid = {7986F7F4-A86A-4994-B1B6-0988D7F057B6}
+ BuildVersion_BuildVersioningStyle = None.None.Increment.DeltaBaseYearDayOfYear
+ BuildVersion_UpdateAssemblyVersion = True
+ BuildVersion_UpdateFileVersion = False
+ BuildVersion_StartDate = 2000/1/1
+ BuildVersion_AssemblyInfoFilename = Properties\AssemblyInfo.cs
+ BuildVersion_UseGlobalSettings = False
EndGlobalSection
EndGlobal