aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio
diff options
context:
space:
mode:
authorRoy Ben-Shabat <Roy@Twine-s.com>2018-12-16 10:14:14 +0200
committerRoy Ben-Shabat <Roy@Twine-s.com>2018-12-16 10:14:14 +0200
commitd8d1128887089087578286f37561dc8942726ba4 (patch)
treed328d815d5d49686182fec33983e6c18eda72df6 /Software/Visual_Studio
parentf8138b3d641d51bba4bda9056f0b1187da6bebb6 (diff)
parentecf55f4193c0a7ab273c7e8243e446a2f2c32d51 (diff)
downloadTango-d8d1128887089087578286f37561dc8942726ba4.tar.gz
Tango-d8d1128887089087578286f37561dc8942726ba4.zip
Merge branch 'master' of https://twinetfs.visualstudio.com/_git/Tango
Diffstat (limited to 'Software/Visual_Studio')
-rw-r--r--Software/Visual_Studio/Build/Shortcuts/Machine Emulator.lnkbin1471 -> 1530 bytes
-rw-r--r--Software/Visual_Studio/Build/Shortcuts/Machine Studio.lnkbin1516 -> 1581 bytes
-rw-r--r--Software/Visual_Studio/Build/Shortcuts/Proto Compiler GUI.lnkbin1464 -> 1529 bytes
-rw-r--r--Software/Visual_Studio/Build/Shortcuts/Stubs Execution GUI.lnkbin1462 -> 1547 bytes
-rw-r--r--Software/Visual_Studio/Build/Shortcuts/Transport Router.lnkbin1493 -> 1578 bytes
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Logging/Tango.MachineStudio.Logging.csproj6
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Logging/ViewModels/ApplicationLogsViewVM.cs2
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Logging/ViewModels/EmbeddedLogsViewVM.cs2
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.Logging/App.xaml11
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.Logging/Images/logging_module.pngbin0 -> 1345 bytes
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.Logging/LoggingModule.cs47
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.Logging/Properties/AssemblyInfo.cs20
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.Logging/Properties/Resources.Designer.cs62
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.Logging/Properties/Resources.resx117
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.Logging/Properties/Settings.Designer.cs30
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.Logging/Properties/Settings.settings7
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.Logging/Tango.PPC.Logging.csproj117
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.Logging/ViewModelLocator.cs32
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.Logging/ViewModels/MainViewVM.cs17
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.Logging/Views/MainView.xaml45
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.Logging/Views/MainView.xaml.cs28
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.Common/Application/IPPCApplicationManager.cs10
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.Common/IPPCModule.cs15
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.Common/Navigation/NavigationView.cs1
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.Common/PPCModuleBase.cs26
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.UI/Images/no-permissions.pngbin0 -> 5640 bytes
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.UI/MainWindow.xaml.cs35
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.UI/Navigation/DefaultNavigationManager.cs16
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.UI/PPCApplication/DefaultPPCApplicationManager.cs26
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.UI/Tango.PPC.UI.csproj15
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModelLocator.cs9
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/LoadingViewVM.cs2
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/LoginViewVM.cs18
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/NoPermissionsViewVM.cs30
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.UI/Views/LayoutView.xaml16
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.UI/Views/MainView.xaml1
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.UI/Views/NoPermissionsView.xaml27
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.UI/Views/NoPermissionsView.xaml.cs28
-rw-r--r--Software/Visual_Studio/Tango.Integration/Logging/EmbeddedLogFileParser.cs (renamed from Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Logging/Parsing/EmbeddedLogFileParser.cs)2
-rw-r--r--Software/Visual_Studio/Tango.Integration/Logging/EmbeddedLogItem.cs (renamed from Software/Visual_Studio/Tango.Integration/Operation/EmbeddedLogItem.cs)2
-rw-r--r--Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs1
-rw-r--r--Software/Visual_Studio/Tango.Integration/Tango.Integration.csproj5
-rw-r--r--Software/Visual_Studio/Tango.Logging/ApplicationLogFileParser.cs (renamed from Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Logging/Parsing/ApplicationLogFileParser.cs)6
-rw-r--r--Software/Visual_Studio/Tango.Logging/ILogFileParser.cs (renamed from Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Logging/Parsing/ILogFileParser.cs)2
-rw-r--r--Software/Visual_Studio/Tango.Logging/LogFile.cs (renamed from Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Logging/Parsing/LogFile.cs)2
-rw-r--r--Software/Visual_Studio/Tango.Logging/Tango.Logging.csproj5
-rw-r--r--Software/Visual_Studio/Tango.Touch/Controls/TouchCalendar.cs30
-rw-r--r--Software/Visual_Studio/Tango.Touch/Controls/TouchCalendar.xaml634
-rw-r--r--Software/Visual_Studio/Tango.Touch/Controls/TouchComboBox.xaml1
-rw-r--r--Software/Visual_Studio/Tango.Touch/Controls/TouchDatePicker.cs57
-rw-r--r--Software/Visual_Studio/Tango.Touch/Controls/TouchDatePicker.xaml123
-rw-r--r--Software/Visual_Studio/Tango.Touch/Controls/TouchPanel.cs70
-rw-r--r--Software/Visual_Studio/Tango.Touch/Controls/TouchPanel.xaml43
-rw-r--r--Software/Visual_Studio/Tango.Touch/Converters/DateTimeToCalendarHeaderConverter.cs30
-rw-r--r--Software/Visual_Studio/Tango.Touch/Tango.Touch.csproj13
-rw-r--r--Software/Visual_Studio/Tango.Touch/Themes/Generic.xaml2
-rw-r--r--Software/Visual_Studio/Tango.sln55
-rw-r--r--Software/Visual_Studio/Utilities/Tango.UITests/MainWindow.xaml14
58 files changed, 1861 insertions, 54 deletions
diff --git a/Software/Visual_Studio/Build/Shortcuts/Machine Emulator.lnk b/Software/Visual_Studio/Build/Shortcuts/Machine Emulator.lnk
index 83636b215..391bb5fd2 100644
--- a/Software/Visual_Studio/Build/Shortcuts/Machine Emulator.lnk
+++ b/Software/Visual_Studio/Build/Shortcuts/Machine Emulator.lnk
Binary files differ
diff --git a/Software/Visual_Studio/Build/Shortcuts/Machine Studio.lnk b/Software/Visual_Studio/Build/Shortcuts/Machine Studio.lnk
index fdcc9c9f3..96a6550d7 100644
--- a/Software/Visual_Studio/Build/Shortcuts/Machine Studio.lnk
+++ b/Software/Visual_Studio/Build/Shortcuts/Machine Studio.lnk
Binary files differ
diff --git a/Software/Visual_Studio/Build/Shortcuts/Proto Compiler GUI.lnk b/Software/Visual_Studio/Build/Shortcuts/Proto Compiler GUI.lnk
index bbe8a4be2..98e7572e8 100644
--- a/Software/Visual_Studio/Build/Shortcuts/Proto Compiler GUI.lnk
+++ b/Software/Visual_Studio/Build/Shortcuts/Proto Compiler GUI.lnk
Binary files differ
diff --git a/Software/Visual_Studio/Build/Shortcuts/Stubs Execution GUI.lnk b/Software/Visual_Studio/Build/Shortcuts/Stubs Execution GUI.lnk
index 8da1d6aa3..26bdb7c64 100644
--- a/Software/Visual_Studio/Build/Shortcuts/Stubs Execution GUI.lnk
+++ b/Software/Visual_Studio/Build/Shortcuts/Stubs Execution GUI.lnk
Binary files differ
diff --git a/Software/Visual_Studio/Build/Shortcuts/Transport Router.lnk b/Software/Visual_Studio/Build/Shortcuts/Transport Router.lnk
index 51ce1a265..355f4b364 100644
--- a/Software/Visual_Studio/Build/Shortcuts/Transport Router.lnk
+++ b/Software/Visual_Studio/Build/Shortcuts/Transport Router.lnk
Binary files differ
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Logging/Tango.MachineStudio.Logging.csproj b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Logging/Tango.MachineStudio.Logging.csproj
index b81ba731d..b5108b75a 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Logging/Tango.MachineStudio.Logging.csproj
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Logging/Tango.MachineStudio.Logging.csproj
@@ -83,10 +83,6 @@
<Compile Include="LoggingModule.cs" />
<Compile Include="Navigation\LoggingNavigationManager.cs" />
<Compile Include="Navigation\LoggingNavigationView.cs" />
- <Compile Include="Parsing\ApplicationLogFileParser.cs" />
- <Compile Include="Parsing\EmbeddedLogFileParser.cs" />
- <Compile Include="Parsing\ILogFileParser.cs" />
- <Compile Include="Parsing\LogFile.cs" />
<Compile Include="ViewModelLocator.cs" />
<Compile Include="ViewModels\EmbeddedLogsViewVM.cs" />
<Compile Include="ViewModels\ApplicationLogsViewVM.cs" />
@@ -254,7 +250,7 @@
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<ProjectExtensions>
<VisualStudio>
- <UserProperties BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UseGlobalSettings="False" BuildVersion_StartDate="2000/1/1" />
+ <UserProperties BuildVersion_StartDate="2000/1/1" BuildVersion_UseGlobalSettings="False" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" />
</VisualStudio>
</ProjectExtensions>
</Project> \ No newline at end of file
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Logging/ViewModels/ApplicationLogsViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Logging/ViewModels/ApplicationLogsViewVM.cs
index 3e0e3ab84..91cc677e0 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Logging/ViewModels/ApplicationLogsViewVM.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Logging/ViewModels/ApplicationLogsViewVM.cs
@@ -10,7 +10,6 @@ using Tango.Core.Commands;
using Tango.Logging;
using Tango.MachineStudio.Common.Notifications;
using Tango.MachineStudio.Logging.Navigation;
-using Tango.MachineStudio.Logging.Parsing;
using Tango.MachineStudio.Logging.Views;
using Tango.SharedUI;
using Tango.SharedUI.Components;
@@ -105,7 +104,6 @@ namespace Tango.MachineStudio.Logging.ViewModels
set { _maxDate = value; RaisePropertyChangedAuto(); }
}
-
private bool _isRealTime;
public bool IsRealTime
{
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Logging/ViewModels/EmbeddedLogsViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Logging/ViewModels/EmbeddedLogsViewVM.cs
index 3f6775b75..d8ecca4bb 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Logging/ViewModels/EmbeddedLogsViewVM.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Logging/ViewModels/EmbeddedLogsViewVM.cs
@@ -5,12 +5,12 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tango.Core.Commands;
+using Tango.Integration.Logging;
using Tango.Integration.Operation;
using Tango.Logging;
using Tango.MachineStudio.Common.Notifications;
using Tango.MachineStudio.Common.StudioApplication;
using Tango.MachineStudio.Logging.Navigation;
-using Tango.MachineStudio.Logging.Parsing;
using Tango.MachineStudio.Logging.Views;
using Tango.SharedUI;
diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Logging/App.xaml b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Logging/App.xaml
new file mode 100644
index 000000000..66ea48976
--- /dev/null
+++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Logging/App.xaml
@@ -0,0 +1,11 @@
+<Application x:Class="Tango.PPC.Logging.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.PPC.Common;component/Resources/Merged.xaml" />
+ </ResourceDictionary.MergedDictionaries>
+ </ResourceDictionary>
+ </Application.Resources>
+</Application> \ No newline at end of file
diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Logging/Images/logging_module.png b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Logging/Images/logging_module.png
new file mode 100644
index 000000000..3f8318f70
--- /dev/null
+++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Logging/Images/logging_module.png
Binary files differ
diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Logging/LoggingModule.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Logging/LoggingModule.cs
new file mode 100644
index 000000000..78c597e81
--- /dev/null
+++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Logging/LoggingModule.cs
@@ -0,0 +1,47 @@
+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.PPC.Common;
+using Tango.PPC.Logging.Views;
+using Tango.SharedUI.Helpers;
+
+namespace Tango.PPC.Logging
+{
+ [PPCModule(5)]
+ public class LoggingModule : PPCModuleBase
+ {
+ public override string Name => "Logging";
+ public override string Description => "PPC logging module.";
+ public override BitmapSource Image => ResourceHelper.GetImageFromResources("Images/logging_module.png");
+ public override Type MainViewType => typeof(MainView);
+ public override Permissions Permission => Permissions.RunPPC;
+
+ public LoggingModule()
+ {
+ IsVisibleInMenu = false;
+ }
+
+ public override void OnTechnicianEntered()
+ {
+ base.OnTechnicianEntered();
+
+ IsVisibleInMenu = true;
+ }
+
+ public override void OnTechnicianExited()
+ {
+ base.OnTechnicianExited();
+
+ IsVisibleInMenu = false;
+ }
+
+ public override void Dispose()
+ {
+
+ }
+ }
+}
diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Logging/Properties/AssemblyInfo.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Logging/Properties/AssemblyInfo.cs
new file mode 100644
index 000000000..612af80ce
--- /dev/null
+++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Logging/Properties/AssemblyInfo.cs
@@ -0,0 +1,20 @@
+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 PPC Logging Module")]
+[assembly: AssemblyVersion("2.0.4.1119")]
+
+[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)
+)]
diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Logging/Properties/Resources.Designer.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Logging/Properties/Resources.Designer.cs
new file mode 100644
index 000000000..6cbf8164a
--- /dev/null
+++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Logging/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.PPC.Logging.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.PPC.Logging.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/PPC/Modules/Tango.PPC.Logging/Properties/Resources.resx b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Logging/Properties/Resources.resx
new file mode 100644
index 000000000..af7dbebba
--- /dev/null
+++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Logging/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/PPC/Modules/Tango.PPC.Logging/Properties/Settings.Designer.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Logging/Properties/Settings.Designer.cs
new file mode 100644
index 000000000..ab102e0eb
--- /dev/null
+++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Logging/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.PPC.Logging.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/PPC/Modules/Tango.PPC.Logging/Properties/Settings.settings b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Logging/Properties/Settings.settings
new file mode 100644
index 000000000..033d7a5e9
--- /dev/null
+++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Logging/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/PPC/Modules/Tango.PPC.Logging/Tango.PPC.Logging.csproj b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Logging/Tango.PPC.Logging.csproj
new file mode 100644
index 000000000..cc6394c9f
--- /dev/null
+++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Logging/Tango.PPC.Logging.csproj
@@ -0,0 +1,117 @@
+<?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>{D2EE865B-B006-487A-9487-60A663636AC3}</ProjectGuid>
+ <OutputType>library</OutputType>
+ <RootNamespace>Tango.PPC.Logging</RootNamespace>
+ <AssemblyName>Tango.PPC.Logging</AssemblyName>
+ <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>..\..\..\Build\PPC\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\PPC\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="..\..\..\Versioning\GlobalVersionInfo.cs">
+ <Link>GlobalVersionInfo.cs</Link>
+ </Compile>
+ <Compile Include="LoggingModule.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>
+ <Compile Include="ViewModelLocator.cs" />
+ <Compile Include="ViewModels\MainViewVM.cs" />
+ <Compile Include="Views\MainView.xaml.cs">
+ <DependentUpon>MainView.xaml</DependentUpon>
+ </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>
+ <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.SharedUI\Tango.SharedUI.csproj">
+ <Project>{8491D07B-C1F6-4B62-A412-41B9FD2D6538}</Project>
+ <Name>Tango.SharedUI</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\..\Tango.Touch\Tango.Touch.csproj">
+ <Project>{fd86424c-6e84-491b-8df9-3d0f5c236a2a}</Project>
+ <Name>Tango.Touch</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\Tango.PPC.Common\Tango.PPC.Common.csproj">
+ <Project>{0BE74EEE-22CB-4DBA-B896-793B9E1A3AC0}</Project>
+ <Name>Tango.PPC.Common</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup>
+ <Resource Include="Images\logging_module.png" />
+ </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>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+</Project> \ No newline at end of file
diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Logging/ViewModelLocator.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Logging/ViewModelLocator.cs
new file mode 100644
index 000000000..d86a0d2ab
--- /dev/null
+++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Logging/ViewModelLocator.cs
@@ -0,0 +1,32 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.Core.DI;
+using Tango.PPC.Logging.ViewModels;
+
+namespace Tango.PPC.Logging
+{
+ public static class ViewModelLocator
+ {
+ /// <summary>
+ /// Initializes a new instance of the ViewModelLocator class.
+ /// </summary>
+ static ViewModelLocator()
+ {
+ TangoIOC.Default.Register<MainViewVM>();
+ }
+
+ /// <summary>
+ /// Gets the main view VM.
+ /// </summary>
+ public static MainViewVM MainViewVM
+ {
+ get
+ {
+ return TangoIOC.Default.GetInstance<MainViewVM>();
+ }
+ }
+ }
+}
diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Logging/ViewModels/MainViewVM.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Logging/ViewModels/MainViewVM.cs
new file mode 100644
index 000000000..736bff5a2
--- /dev/null
+++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Logging/ViewModels/MainViewVM.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.PPC.Common;
+
+namespace Tango.PPC.Logging.ViewModels
+{
+ public class MainViewVM : PPCViewModel
+ {
+ public override void OnApplicationStarted()
+ {
+
+ }
+ }
+}
diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Logging/Views/MainView.xaml b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Logging/Views/MainView.xaml
new file mode 100644
index 000000000..fb4dd5d04
--- /dev/null
+++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Logging/Views/MainView.xaml
@@ -0,0 +1,45 @@
+<UserControl x:Class="Tango.PPC.Logging.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:sys="clr-namespace:System;assembly=mscorlib"
+ xmlns:vm="clr-namespace:Tango.PPC.Logging.ViewModels"
+ xmlns:touch="clr-namespace:Tango.Touch.Controls;assembly=Tango.Touch"
+ xmlns:global="clr-namespace:Tango.PPC.Logging"
+ xmlns:local="clr-namespace:Tango.PPC.Logging.Views"
+ mc:Ignorable="d"
+ d:DesignHeight="1280" d:DesignWidth="800" d:DataContext="{d:DesignInstance Type=vm:MainViewVM, IsDesignTimeCreatable=False}" DataContext="{x:Static global:ViewModelLocator.MainViewVM}">
+ <Grid Background="{StaticResource TangoMidBackgroundBrush}">
+ <Grid.RowDefinitions>
+ <RowDefinition Height="Auto"/>
+ <RowDefinition Height="1*"/>
+ </Grid.RowDefinitions>
+
+ <Border Padding="20" Background="{StaticResource TangoPrimaryBackgroundBrush}" BorderThickness="0 0 0 1" BorderBrush="{StaticResource TangoDividerBrush}">
+ <Border.Effect>
+ <DropShadowEffect Color="Silver" ShadowDepth="0" BlurRadius="20" Opacity="1" />
+ </Border.Effect>
+ <TextBlock VerticalAlignment="Center" FontSize="{StaticResource TangoHeaderFontSize}" FontWeight="SemiBold">Logs</TextBlock>
+ </Border>
+
+ <Grid Grid.Row="1">
+
+ <DockPanel>
+ <DockPanel DockPanel.Dock="Top">
+ <touch:TouchNavigationLinks Margin="20" FontSize="{StaticResource TangoNavigationLinksFontSize}">
+ <sys:String>Application</sys:String>
+ <sys:String>Embedded</sys:String>
+ </touch:TouchNavigationLinks>
+
+ <touch:TouchDatePicker SelectedDate="12/15/2018" Height="40" />
+ </DockPanel>
+
+ <Grid>
+
+ </Grid>
+ </DockPanel>
+
+ </Grid>
+ </Grid>
+</UserControl>
diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Logging/Views/MainView.xaml.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Logging/Views/MainView.xaml.cs
new file mode 100644
index 000000000..eb448c67c
--- /dev/null
+++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Logging/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.PPC.Logging.Views
+{
+ /// <summary>
+ /// Interaction logic for MainView.xaml
+ /// </summary>
+ public partial class MainView : UserControl
+ {
+ public MainView()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/Application/IPPCApplicationManager.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/Application/IPPCApplicationManager.cs
index 003229e65..5f0b35ce2 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.Common/Application/IPPCApplicationManager.cs
+++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/Application/IPPCApplicationManager.cs
@@ -61,6 +61,16 @@ namespace Tango.PPC.Common.Application
void Restart();
/// <summary>
+ /// Enteres the application technician mode.
+ /// </summary>
+ void EnterTechnicianMode();
+
+ /// <summary>
+ /// Exits the application technician mode.
+ /// </summary>
+ void ExitTechnicianMode();
+
+ /// <summary>
/// Gets the application version.
/// </summary>
Version Version { get; }
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/IPPCModule.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/IPPCModule.cs
index 7bee755a2..51f361cfb 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.Common/IPPCModule.cs
+++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/IPPCModule.cs
@@ -40,5 +40,20 @@ namespace Tango.PPC.Common
/// Gets the permission required to see and load this module.
/// </summary>
Permissions Permission { get; }
+
+ /// <summary>
+ /// Gets a value indicating whether this module should be displayed in the application menu.
+ /// </summary>
+ bool IsVisibleInMenu { get; }
+
+ /// <summary>
+ /// Called when the application has entered the technician mode.
+ /// </summary>
+ void OnTechnicianEntered();
+
+ /// <summary>
+ /// Called when the application has exited the technician mode.
+ /// </summary>
+ void OnTechnicianExited();
}
}
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/Navigation/NavigationView.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/Navigation/NavigationView.cs
index 3c3a6e19b..2c6e8d4c1 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.Common/Navigation/NavigationView.cs
+++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/Navigation/NavigationView.cs
@@ -13,6 +13,7 @@ namespace Tango.PPC.Common.Navigation
{
LoadingView,
LoadingErrorView,
+ NoPermissionsView,
LayoutView,
LoginView,
MachineSetupView,
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/PPCModuleBase.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/PPCModuleBase.cs
index 316236626..5aa003c1e 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.Common/PPCModuleBase.cs
+++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/PPCModuleBase.cs
@@ -17,6 +17,16 @@ namespace Tango.PPC.Common
/// <seealso cref="Tango.MachineStudio.Common.IStudioModule" />
public abstract class PPCModuleBase : ExtendedObject, IPPCModule
{
+ private bool _isVisibleInMenu = true;
+ /// <summary>
+ /// Gets a value indicating whether this module should be displayed in the application menu.
+ /// </summary>
+ public bool IsVisibleInMenu
+ {
+ get { return _isVisibleInMenu; }
+ protected set { _isVisibleInMenu = value; RaisePropertyChangedAuto(); }
+ }
+
/// <summary>
/// Gets the module name.
/// </summary>
@@ -46,5 +56,21 @@ namespace Tango.PPC.Common
/// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
/// </summary>
public abstract void Dispose();
+
+ /// <summary>
+ /// Called when the application has entered the technician mode.
+ /// </summary>
+ public virtual void OnTechnicianEntered()
+ {
+
+ }
+
+ /// <summary>
+ /// Called when the application has exited the technician mode.
+ /// </summary>
+ public virtual void OnTechnicianExited()
+ {
+
+ }
}
}
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Images/no-permissions.png b/Software/Visual_Studio/PPC/Tango.PPC.UI/Images/no-permissions.png
new file mode 100644
index 000000000..405b94a26
--- /dev/null
+++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Images/no-permissions.png
Binary files differ
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/MainWindow.xaml.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/MainWindow.xaml.cs
index 219c25f45..302e401fb 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.UI/MainWindow.xaml.cs
+++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/MainWindow.xaml.cs
@@ -15,6 +15,8 @@ using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
+using Tango.Core.DI;
+using Tango.PPC.Common.Application;
using Tango.Touch.Helpers;
namespace Tango.PPC.UI
@@ -24,6 +26,8 @@ namespace Tango.PPC.UI
/// </summary>
public partial class MainWindow : Window
{
+ private String _technician_mode_buffer;
+
public static MainWindow Instance { get; private set; }
public MainWindow()
@@ -32,6 +36,8 @@ namespace Tango.PPC.UI
InitializeComponent();
+ _technician_mode_buffer = String.Empty;
+
#if !DESKTOP
if (TouchHelper.IsTouchEnabled())
{
@@ -62,5 +68,34 @@ namespace Tango.PPC.UI
{
Environment.Exit(0);
}
+
+ protected override void OnPreviewKeyDown(System.Windows.Input.KeyEventArgs e)
+ {
+ base.OnPreviewKeyDown(e);
+
+ try
+ {
+ _technician_mode_buffer += Char.Parse(e.Key.ToString());
+ }
+ catch{}
+
+ if (e.Key == Key.Return || e.Key == Key.Tab)
+ {
+ if (_technician_mode_buffer.ToLower().Contains("ENTERTECHNICIAN".ToLower()))
+ {
+ _technician_mode_buffer = String.Empty;
+ TangoIOC.Default.GetInstance<IPPCApplicationManager>().EnterTechnicianMode();
+ e.Handled = true;
+ }
+ else if (_technician_mode_buffer.ToLower().Contains("EXITTECHNICIAN".ToLower()))
+ {
+ _technician_mode_buffer = String.Empty;
+ TangoIOC.Default.GetInstance<IPPCApplicationManager>().ExitTechnicianMode();
+ e.Handled = true;
+ }
+
+ _technician_mode_buffer = String.Empty;
+ }
+ }
}
}
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Navigation/DefaultNavigationManager.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/Navigation/DefaultNavigationManager.cs
index efe8149f6..fe3cabcc1 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.UI/Navigation/DefaultNavigationManager.cs
+++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Navigation/DefaultNavigationManager.cs
@@ -90,15 +90,23 @@ namespace Tango.PPC.UI.Navigation
_lastFullPath = null;
var firstModule = _moduleLoader.UserModules.FirstOrDefault();
- var moduleAtt = firstModule.GetType().GetCustomAttribute<PPCModuleAttribute>();
- if (moduleAtt != null)
+ if (firstModule != null)
{
- return NavigateTo(firstModule.GetType(), pushToHistory, moduleAtt.HomeViewName);
+ var moduleAtt = firstModule.GetType().GetCustomAttribute<PPCModuleAttribute>();
+
+ if (moduleAtt != null)
+ {
+ return NavigateTo(firstModule.GetType(), pushToHistory, moduleAtt.HomeViewName);
+ }
+ else
+ {
+ return NavigateTo(firstModule.GetType(), pushToHistory);
+ }
}
else
{
- return NavigateTo(firstModule.GetType(), pushToHistory);
+ return NavigateTo(NavigationView.NoPermissionsView);
}
}
else
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/PPCApplication/DefaultPPCApplicationManager.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/PPCApplication/DefaultPPCApplicationManager.cs
index f8a0fdc36..f9830940b 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.UI/PPCApplication/DefaultPPCApplicationManager.cs
+++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/PPCApplication/DefaultPPCApplicationManager.cs
@@ -26,6 +26,7 @@ using Tango.PPC.Common.Threading;
using System.Diagnostics;
using Tango.PPC.Common.EventLogging;
using Tango.BL.Enumerations;
+using Tango.PPC.Common.Notifications;
namespace Tango.PPC.UI.PPCApplication
{
@@ -41,6 +42,8 @@ namespace Tango.PPC.UI.PPCApplication
private Machine _machine;
private IDispatcherProvider _dispatcher;
private IEventLogger _eventLogger;
+ private IPPCModuleLoader _moduleLoader;
+ private INotificationProvider _notificationProvider;
/// <summary>
/// Occurs when the application has started.
@@ -102,12 +105,13 @@ namespace Tango.PPC.UI.PPCApplication
/// <summary>
/// Initializes a new instance of the <see cref="DefaultPPCApplicationManager"/> class.
/// </summary>
- public DefaultPPCApplicationManager(IMachineProvider machineProvider, IDispatcherProvider dispatcherProvider, IEventLogger eventLogger)
+ public DefaultPPCApplicationManager(IMachineProvider machineProvider, IDispatcherProvider dispatcherProvider, IEventLogger eventLogger, IPPCModuleLoader moduleLoader, INotificationProvider notificationProvider)
{
+ _notificationProvider = notificationProvider;
_machineProvider = machineProvider;
_dispatcher = dispatcherProvider;
_eventLogger = eventLogger;
- ;
+ _moduleLoader = moduleLoader;
if (!DesignMode)
{
@@ -320,5 +324,23 @@ namespace Tango.PPC.UI.PPCApplication
Process.Start(Application.ResourceAssembly.Location);
Environment.Exit(0);
}
+
+ /// <summary>
+ /// Enteres the application technician mode.
+ /// </summary>
+ public void EnterTechnicianMode()
+ {
+ _moduleLoader.AllModules.ToList().ForEach(x => x.OnTechnicianEntered());
+ _notificationProvider.ShowInfo("Technician mode is now enabled.");
+ }
+
+ /// <summary>
+ /// Exits the application technician mode.
+ /// </summary>
+ public void ExitTechnicianMode()
+ {
+ _moduleLoader.AllModules.ToList().ForEach(x => x.OnTechnicianExited());
+ _notificationProvider.ShowInfo("Technician mode is now disabled.");
+ }
}
}
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Tango.PPC.UI.csproj b/Software/Visual_Studio/PPC/Tango.PPC.UI/Tango.PPC.UI.csproj
index 406568f71..836878152 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.UI/Tango.PPC.UI.csproj
+++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Tango.PPC.UI.csproj
@@ -143,6 +143,7 @@
<Compile Include="ViewModels\MachineSetupViewVM.cs" />
<Compile Include="ViewModels\MainViewVM.cs" />
<Compile Include="ViewModels\MachineUpdateViewVM.cs" />
+ <Compile Include="ViewModels\NoPermissionsViewVM.cs" />
<Compile Include="ViewsContracts\ILayoutView.cs" />
<Compile Include="ViewsContracts\IMachineSetupView.cs" />
<Compile Include="ViewsContracts\IMachineUpdateView.cs" />
@@ -170,6 +171,9 @@
<Compile Include="Views\MachineUpdateView.xaml.cs">
<DependentUpon>MachineUpdateView.xaml</DependentUpon>
</Compile>
+ <Compile Include="Views\NoPermissionsView.xaml.cs">
+ <DependentUpon>NoPermissionsView.xaml</DependentUpon>
+ </Compile>
<Page Include="Connectivity\WiFiAuthenticationView.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
@@ -234,6 +238,10 @@
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
+ <Page Include="Views\NoPermissionsView.xaml">
+ <SubType>Designer</SubType>
+ <Generator>MSBuild:Compile</Generator>
+ </Page>
</ItemGroup>
<ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs">
@@ -339,6 +347,10 @@
<Project>{096f16c8-6d06-4b5f-9496-b9d2df2d94a3}</Project>
<Name>Tango.PPC.Jobs</Name>
</ProjectReference>
+ <ProjectReference Include="..\Modules\Tango.PPC.Logging\Tango.PPC.Logging.csproj">
+ <Project>{d2ee865b-b006-487a-9487-60a663636ac3}</Project>
+ <Name>Tango.PPC.Logging</Name>
+ </ProjectReference>
<ProjectReference Include="..\Modules\Tango.PPC.MachineSettings\Tango.PPC.MachineSettings.csproj">
<Project>{91b70e9b-66a7-4873-ae10-400e71cf404f}</Project>
<Name>Tango.PPC.MachineSettings</Name>
@@ -397,6 +409,7 @@
<Link>Tango.ColorLib.dll</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
+ <Resource Include="Images\no-permissions.png" />
<Resource Include="Images\GlobalStatus\machine-off.png" />
<Resource Include="Images\machine-update-firmware.png" />
<Resource Include="Images\chip_128px.png" />
@@ -472,7 +485,7 @@ del "$(TargetDir)firmware_package.tfp"</PostBuildEvent>
</PropertyGroup>
<ProjectExtensions>
<VisualStudio>
- <UserProperties BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UseGlobalSettings="False" BuildVersion_StartDate="2000/1/1" />
+ <UserProperties BuildVersion_StartDate="2000/1/1" BuildVersion_UseGlobalSettings="False" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" />
</VisualStudio>
</ProjectExtensions>
</Project> \ No newline at end of file
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModelLocator.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModelLocator.cs
index 81c76b51c..f8b7ce003 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModelLocator.cs
+++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModelLocator.cs
@@ -95,6 +95,7 @@ namespace Tango.PPC.UI
TangoIOC.Default.Register<MachineSetupViewVM>();
TangoIOC.Default.Register<MachineUpdateViewVM>();
TangoIOC.Default.Register<LoadingErrorViewVM>();
+ TangoIOC.Default.Register<NoPermissionsViewVM>();
TangoIOC.Default.GetInstance<IPPCApplicationManager>().ContentRendered += (_, __) =>
@@ -176,5 +177,13 @@ namespace Tango.PPC.UI
return TangoIOC.Default.GetInstance<LoadingErrorViewVM>();
}
}
+
+ public static NoPermissionsViewVM NoPermissionsViewVM
+ {
+ get
+ {
+ return TangoIOC.Default.GetInstance<NoPermissionsViewVM>();
+ }
+ }
}
} \ No newline at end of file
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/LoadingViewVM.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/LoadingViewVM.cs
index 281e54958..516349a18 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/LoadingViewVM.cs
+++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/LoadingViewVM.cs
@@ -20,6 +20,7 @@ using Tango.PPC.Common.Notifications.NotificationItems;
using Tango.PPC.Jobs;
using Tango.SharedUI;
using System.Data.Entity;
+using Tango.BL.Enumerations;
namespace Tango.PPC.UI.ViewModels
{
@@ -79,6 +80,7 @@ namespace Tango.PPC.UI.ViewModels
if (db.Users.Count() == 1 || machine.AutoLogin)
{
var user = await db.Users.FirstAsync();
+
LogManager.Log($"Application started. Single user/Auto login detected ({user.Email}). Skipping LoginView...");
await AuthenticationProvider.Login(user.Email, user.Password, false);
IsLoading = false;
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/LoginViewVM.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/LoginViewVM.cs
index 9d17a4a76..aa9689ef3 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/LoginViewVM.cs
+++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/LoginViewVM.cs
@@ -11,6 +11,8 @@ using System.ComponentModel.DataAnnotations;
using Tango.SharedUI.Helpers;
using Tango.PPC.Common.Authentication;
using Tango.BL.Entities;
+using Tango.BL.Enumerations;
+using Tango.Logging;
namespace Tango.PPC.UI.ViewModels
{
@@ -89,9 +91,19 @@ namespace Tango.PPC.UI.ViewModels
base.OnApplicationReady();
await Task.Delay(500);
- LogManager.Log("Application is ready! Navigating to home module...");
- await NavigationManager.NavigateTo(NavigationView.HomeModule);
- IsLoading = false;
+
+ if (AuthenticationProvider.CurrentUser != null && AuthenticationProvider.CurrentUser.HasPermission(Permissions.RunPPC))
+ {
+ LogManager.Log("Application is ready! Navigating to home module...");
+ await NavigationManager.NavigateTo(NavigationView.HomeModule);
+ IsLoading = false;
+ }
+ else
+ {
+ LogManager.Log("Application is ready! The logged in user does not have permission to run the application!", LogCategory.Warning);
+ await NavigationManager.NavigateTo(NavigationView.NoPermissionsView);
+ IsLoading = false;
+ }
}
#endregion
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/NoPermissionsViewVM.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/NoPermissionsViewVM.cs
new file mode 100644
index 000000000..cea8a7d63
--- /dev/null
+++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/NoPermissionsViewVM.cs
@@ -0,0 +1,30 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.Core.Commands;
+using Tango.PPC.Common;
+
+namespace Tango.PPC.UI.ViewModels
+{
+ public class NoPermissionsViewVM : PPCViewModel
+ {
+ public RelayCommand RestartCommand { get; set; }
+
+ public NoPermissionsViewVM()
+ {
+ RestartCommand = new RelayCommand(Restart);
+ }
+
+ private void Restart()
+ {
+ ApplicationManager.Restart();
+ }
+
+ public override void OnApplicationStarted()
+ {
+
+ }
+ }
+}
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/LayoutView.xaml b/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/LayoutView.xaml
index 98451dacb..b89b2c9de 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/LayoutView.xaml
+++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/LayoutView.xaml
@@ -49,13 +49,15 @@
<ItemsControl ItemsSource="{Binding ModuleLoader.UserModules}">
<ItemsControl.ItemTemplate>
<DataTemplate>
- <Border BorderBrush="{StaticResource TangoDividerBrush}" BorderThickness="0 1 0 0">
- <touch:TouchButton Margin="0 0 0 0" Padding="30" Foreground="{StaticResource TangoDarkForegroundBrush}" Style="{StaticResource TangoFlatButton}" FontSize="{StaticResource TangoHeaderFontSize}" Command="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DataContext.ModuleNavigationCommand}" CommandParameter="{Binding Name}">
- <StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
- <Image VerticalAlignment="Center" Source="{Binding Image}" Width="48" Height="48"></Image>
- <TextBlock VerticalAlignment="Center" Margin="20 0 0 0" Text="{Binding Name}"></TextBlock>
- </StackPanel>
- </touch:TouchButton>
+ <Border>
+ <Border BorderBrush="{StaticResource TangoDividerBrush}" BorderThickness="0 1 0 0" Visibility="{Binding IsVisibleInMenu,Converter={StaticResource BooleanToVisibilityConverter}}">
+ <touch:TouchButton Margin="0 0 0 0" Padding="30" Foreground="{StaticResource TangoDarkForegroundBrush}" Style="{StaticResource TangoFlatButton}" FontSize="{StaticResource TangoHeaderFontSize}" Command="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DataContext.ModuleNavigationCommand}" CommandParameter="{Binding Name}">
+ <StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
+ <Image VerticalAlignment="Center" Source="{Binding Image}" Width="48" Height="48"></Image>
+ <TextBlock VerticalAlignment="Center" Margin="20 0 0 0" Text="{Binding Name}"></TextBlock>
+ </StackPanel>
+ </touch:TouchButton>
+ </Border>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/MainView.xaml b/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/MainView.xaml
index e684f4969..9df92bbcc 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/MainView.xaml
+++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/MainView.xaml
@@ -83,6 +83,7 @@
<controls:NavigationControl TransitionAlwaysFades="True" KeepElementsAttached="True" TransitionType="Zoom" x:Name="NavigationControl" x:FieldModifier="public">
<local:LoadingView></local:LoadingView>
<local:LoadingErrorView></local:LoadingErrorView>
+ <local:NoPermissionsView></local:NoPermissionsView>
<local:LoginView></local:LoginView>
<local:LayoutView></local:LayoutView>
<local:ExternalBridgeView></local:ExternalBridgeView>
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/NoPermissionsView.xaml b/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/NoPermissionsView.xaml
new file mode 100644
index 000000000..95839453a
--- /dev/null
+++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/NoPermissionsView.xaml
@@ -0,0 +1,27 @@
+<UserControl x:Class="Tango.PPC.UI.Views.NoPermissionsView"
+ 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:vm="clr-namespace:Tango.PPC.UI.ViewModels"
+ xmlns:global="clr-namespace:Tango.PPC.UI"
+ xmlns:touch="clr-namespace:Tango.Touch.Controls;assembly=Tango.Touch"
+ xmlns:local="clr-namespace:Tango.PPC.UI.Views"
+ mc:Ignorable="d"
+ d:DesignHeight="1280" d:DesignWidth="800" d:DataContext="{d:DesignInstance Type=vm:NoPermissionsViewVM, IsDesignTimeCreatable=False}" DataContext="{x:Static global:ViewModelLocator.NoPermissionsViewVM}">
+ <Grid>
+ <DockPanel Margin="20 60 20 20">
+ <StackPanel DockPanel.Dock="Top">
+ <Image Source="../Images/no-permissions.png" Width="256" RenderOptions.BitmapScalingMode="Fant" Stretch="Uniform" HorizontalAlignment="Center"></Image>
+ <TextBlock HorizontalAlignment="Center" Margin="0 40 0 0" FontSize="{StaticResource TangoHeaderFontSize}">No Application Modules Loaded</TextBlock>
+ <TextBlock TextWrapping="Wrap" TextAlignment="Center" HorizontalAlignment="Center" Margin="0 20 0 0" FontSize="{StaticResource TangoTitleFontSize}">The current user does not seems to have a permission to load any of the application modules. Please contact your administrator.</TextBlock>
+ </StackPanel>
+
+ <Grid>
+ <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" Width="320">
+ <touch:TouchButton Command="{Binding RestartCommand}" Padding="0 30" CornerRadius="40">RESTART</touch:TouchButton>
+ </StackPanel>
+ </Grid>
+ </DockPanel>
+ </Grid>
+</UserControl>
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/NoPermissionsView.xaml.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/NoPermissionsView.xaml.cs
new file mode 100644
index 000000000..0bbaee554
--- /dev/null
+++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/NoPermissionsView.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.PPC.UI.Views
+{
+ /// <summary>
+ /// Interaction logic for NoPermissionsView.xaml
+ /// </summary>
+ public partial class NoPermissionsView : UserControl
+ {
+ public NoPermissionsView()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Logging/Parsing/EmbeddedLogFileParser.cs b/Software/Visual_Studio/Tango.Integration/Logging/EmbeddedLogFileParser.cs
index 50c9d7532..98a3ac543 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Logging/Parsing/EmbeddedLogFileParser.cs
+++ b/Software/Visual_Studio/Tango.Integration/Logging/EmbeddedLogFileParser.cs
@@ -10,7 +10,7 @@ using Tango.Integration.Operation;
using Tango.Logging;
using Tango.Settings;
-namespace Tango.MachineStudio.Logging.Parsing
+namespace Tango.Integration.Logging
{
public class EmbeddedLogFileParser : ILogFileParser<EmbeddedLogItem>
{
diff --git a/Software/Visual_Studio/Tango.Integration/Operation/EmbeddedLogItem.cs b/Software/Visual_Studio/Tango.Integration/Logging/EmbeddedLogItem.cs
index a644b071d..607472e82 100644
--- a/Software/Visual_Studio/Tango.Integration/Operation/EmbeddedLogItem.cs
+++ b/Software/Visual_Studio/Tango.Integration/Logging/EmbeddedLogItem.cs
@@ -7,7 +7,7 @@ using System.Threading.Tasks;
using Tango.Logging;
using Tango.PMR.Debugging;
-namespace Tango.Integration.Operation
+namespace Tango.Integration.Logging
{
public class EmbeddedLogItem : MessageLogItem
{
diff --git a/Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs b/Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs
index 991442510..45b2943c1 100644
--- a/Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs
+++ b/Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs
@@ -31,6 +31,7 @@ using Tango.Core.Threading;
using Tango.PMR.IO;
using Tango.Integration.Upgrade;
using Tango.PMR.FirmwareUpgrade;
+using Tango.Integration.Logging;
namespace Tango.Integration.Operation
{
diff --git a/Software/Visual_Studio/Tango.Integration/Tango.Integration.csproj b/Software/Visual_Studio/Tango.Integration/Tango.Integration.csproj
index 865738305..8edb04384 100644
--- a/Software/Visual_Studio/Tango.Integration/Tango.Integration.csproj
+++ b/Software/Visual_Studio/Tango.Integration/Tango.Integration.csproj
@@ -87,8 +87,9 @@
<Compile Include="ExtensionMethods\IExternalBridgeClientExtensions.cs" />
<Compile Include="ExternalBridge\ExternalBridgeClientConnectedEventArgs.cs" />
<Compile Include="IntegrationSettings.cs" />
+ <Compile Include="Logging\EmbeddedLogFileParser.cs" />
<Compile Include="Operation\DefaultMachineEventsStateProvider.cs" />
- <Compile Include="Operation\EmbeddedLogItem.cs" />
+ <Compile Include="Logging\EmbeddedLogItem.cs" />
<Compile Include="Operation\SpoolChangeRequiredEventArgs.cs" />
<Compile Include="Upgrade\FirmwareUpgradeHandler.cs" />
<Compile Include="Upgrade\FirmwareUpgradeProgressEventArgs.cs" />
@@ -167,7 +168,7 @@
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<ProjectExtensions>
<VisualStudio>
- <UserProperties BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UseGlobalSettings="False" BuildVersion_StartDate="2000/1/1" />
+ <UserProperties BuildVersion_StartDate="2000/1/1" BuildVersion_UseGlobalSettings="False" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" />
</VisualStudio>
</ProjectExtensions>
</Project> \ No newline at end of file
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Logging/Parsing/ApplicationLogFileParser.cs b/Software/Visual_Studio/Tango.Logging/ApplicationLogFileParser.cs
index d3b33c436..2870ce95d 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Logging/Parsing/ApplicationLogFileParser.cs
+++ b/Software/Visual_Studio/Tango.Logging/ApplicationLogFileParser.cs
@@ -8,7 +8,7 @@ using System.Text.RegularExpressions;
using System.Threading.Tasks;
using Tango.Logging;
-namespace Tango.MachineStudio.Logging.Parsing
+namespace Tango.Logging
{
public class ApplicationLogFileParser : ILogFileParser<LogItemBase>
{
@@ -20,11 +20,11 @@ namespace Tango.MachineStudio.Logging.Parsing
String logFile = logger != null ? logger.LogFile : null;
- foreach (var file in Directory.GetFiles(FileLogger.DefaultLogsFolder, "*.log").Where(x => Path.GetFileName(x).StartsWith("Tango.MachineStudio.UI") && x != logger.LogFile))
+ foreach (var file in Directory.GetFiles(FileLogger.DefaultLogsFolder, "*.log").Where(x => Path.GetFileName(x).StartsWith(logger.Tag) && x != logger.LogFile))
{
try
{
- String dateString = Path.GetFileNameWithoutExtension(file).Replace("Tango.MachineStudio.UI-", "");
+ String dateString = Path.GetFileNameWithoutExtension(file).Replace($"{logger.Tag}-", "");
DateTime date = DateTime.ParseExact(dateString, "dd-MM-yyyy_HH-mm-ss", CultureInfo.InvariantCulture);
logFiles.Add(new LogFile() { DateTime = date, File = file });
}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Logging/Parsing/ILogFileParser.cs b/Software/Visual_Studio/Tango.Logging/ILogFileParser.cs
index 05003c1a2..bc43c7cd0 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Logging/Parsing/ILogFileParser.cs
+++ b/Software/Visual_Studio/Tango.Logging/ILogFileParser.cs
@@ -4,7 +4,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
-namespace Tango.MachineStudio.Logging.Parsing
+namespace Tango.Logging
{
public interface ILogFileParser<T>
{
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Logging/Parsing/LogFile.cs b/Software/Visual_Studio/Tango.Logging/LogFile.cs
index 4248bdbdc..66988b7ed 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Logging/Parsing/LogFile.cs
+++ b/Software/Visual_Studio/Tango.Logging/LogFile.cs
@@ -4,7 +4,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
-namespace Tango.MachineStudio.Logging.Parsing
+namespace Tango.Logging
{
public class LogFile
{
diff --git a/Software/Visual_Studio/Tango.Logging/Tango.Logging.csproj b/Software/Visual_Studio/Tango.Logging/Tango.Logging.csproj
index d67cd8f69..311579625 100644
--- a/Software/Visual_Studio/Tango.Logging/Tango.Logging.csproj
+++ b/Software/Visual_Studio/Tango.Logging/Tango.Logging.csproj
@@ -64,6 +64,9 @@
<Compile Include="LogItemBase.cs" />
<Compile Include="LogManager.cs" />
<Compile Include="MessageLogItem.cs" />
+ <Compile Include="ApplicationLogFileParser.cs" />
+ <Compile Include="ILogFileParser.cs" />
+ <Compile Include="LogFile.cs" />
<Compile Include="ProducerConsumerQueue.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="SimpleStringLogger.cs" />
@@ -78,7 +81,7 @@
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<ProjectExtensions>
<VisualStudio>
- <UserProperties BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UseGlobalSettings="False" BuildVersion_StartDate="2000/1/1" />
+ <UserProperties BuildVersion_StartDate="2000/1/1" BuildVersion_UseGlobalSettings="False" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" />
</VisualStudio>
</ProjectExtensions>
</Project> \ No newline at end of file
diff --git a/Software/Visual_Studio/Tango.Touch/Controls/TouchCalendar.cs b/Software/Visual_Studio/Tango.Touch/Controls/TouchCalendar.cs
new file mode 100644
index 000000000..a26cb6710
--- /dev/null
+++ b/Software/Visual_Studio/Tango.Touch/Controls/TouchCalendar.cs
@@ -0,0 +1,30 @@
+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.Touch.Controls
+{
+ public class TouchCalendar : Calendar
+ {
+ static TouchCalendar()
+ {
+ DefaultStyleKeyProperty.OverrideMetadata(typeof(TouchCalendar), new FrameworkPropertyMetadata(typeof(TouchCalendar)));
+ }
+
+ public TouchCalendar()
+ {
+
+ }
+ }
+}
diff --git a/Software/Visual_Studio/Tango.Touch/Controls/TouchCalendar.xaml b/Software/Visual_Studio/Tango.Touch/Controls/TouchCalendar.xaml
new file mode 100644
index 000000000..0bac1a801
--- /dev/null
+++ b/Software/Visual_Studio/Tango.Touch/Controls/TouchCalendar.xaml
@@ -0,0 +1,634 @@
+<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:components="clr-namespace:Tango.Touch.Components"
+ xmlns:converters="clr-namespace:Tango.Touch.Converters"
+ xmlns:local="clr-namespace:Tango.Touch.Controls">
+
+ <ResourceDictionary.MergedDictionaries>
+ <ResourceDictionary Source="../Resources/Colors.xaml" />
+ <ResourceDictionary Source="../Resources/Fonts.xaml" />
+ <ResourceDictionary Source="../Controls/Shared.xaml" />
+ </ResourceDictionary.MergedDictionaries>
+
+ <converters:DateTimeToCalendarHeaderConverter x:Key="DateTimeToCalendarHeaderConverter" />
+
+ <Style x:Key="TouchCalendarButton" TargetType="{x:Type CalendarButton}">
+ <Setter Property="MinWidth" Value="5"/>
+ <Setter Property="MinHeight" Value="5"/>
+ <Setter Property="FontSize" Value="{StaticResource TangoDefaultFontSize}"/>
+ <Setter Property="Cursor" Value="Hand"/>
+ <Setter Property="Background" Value="Transparent"/>
+ <Setter Property="Margin" Value="10"/>
+ <Setter Property="Width" Value="48" />
+ <Setter Property="Height" Value="48" />
+ <Setter Property="HorizontalContentAlignment" Value="Center"/>
+ <Setter Property="VerticalContentAlignment" Value="Center"/>
+ <Setter Property="Template">
+ <Setter.Value>
+ <ControlTemplate TargetType="{x:Type CalendarButton}">
+ <Grid>
+ <VisualStateManager.VisualStateGroups>
+ <VisualStateGroup x:Name="CommonStates">
+ <VisualStateGroup.Transitions>
+ <VisualTransition GeneratedDuration="0:0:0.1"/>
+ </VisualStateGroup.Transitions>
+ <VisualState x:Name="Normal"/>
+ <VisualState x:Name="MouseOver">
+ <Storyboard>
+ <DoubleAnimation Duration="0" To="0.5" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="HighlightBackground"/>
+ </Storyboard>
+ </VisualState>
+ <VisualState x:Name="Pressed">
+ <Storyboard>
+ <DoubleAnimation Duration="0" To="0.5" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="HighlightBackground"/>
+ </Storyboard>
+ </VisualState>
+ <VisualState x:Name="Disabled">
+ <Storyboard>
+ <DoubleAnimation Duration="0" To="0" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="HighlightBackground"/>
+ <DoubleAnimation Duration="0" To=".35" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="NormalText"/>
+ </Storyboard>
+ </VisualState>
+ </VisualStateGroup>
+ <VisualStateGroup x:Name="SelectionStates">
+ <VisualStateGroup.Transitions>
+ <VisualTransition GeneratedDuration="0"/>
+ </VisualStateGroup.Transitions>
+ <VisualState x:Name="Unselected"/>
+ <VisualState x:Name="Selected">
+ <Storyboard>
+ <DoubleAnimation Duration="0" To=".75" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="SelectedBackground"/>
+ <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(TextElement.Foreground)" Storyboard.TargetName="NormalText">
+ <DiscreteObjectKeyFrame Value="{StaticResource TangoPrimaryAccentBrush}" KeyTime="0" />
+ </ObjectAnimationUsingKeyFrames>
+ </Storyboard>
+ </VisualState>
+ </VisualStateGroup>
+ <VisualStateGroup x:Name="CalendarButtonFocusStates">
+ <VisualStateGroup.Transitions>
+ <VisualTransition GeneratedDuration="0"/>
+ </VisualStateGroup.Transitions>
+ <VisualState x:Name="CalendarButtonFocused">
+ <Storyboard>
+ <ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetProperty="Visibility" Storyboard.TargetName="DayButtonFocusVisual">
+ <DiscreteObjectKeyFrame KeyTime="0">
+ <DiscreteObjectKeyFrame.Value>
+ <Visibility>Visible</Visibility>
+ </DiscreteObjectKeyFrame.Value>
+ </DiscreteObjectKeyFrame>
+ </ObjectAnimationUsingKeyFrames>
+ </Storyboard>
+ </VisualState>
+ <VisualState x:Name="CalendarButtonUnfocused">
+ <Storyboard>
+ <ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetProperty="Visibility" Storyboard.TargetName="DayButtonFocusVisual">
+ <DiscreteObjectKeyFrame KeyTime="0">
+ <DiscreteObjectKeyFrame.Value>
+ <Visibility>Collapsed</Visibility>
+ </DiscreteObjectKeyFrame.Value>
+ </DiscreteObjectKeyFrame>
+ </ObjectAnimationUsingKeyFrames>
+ </Storyboard>
+ </VisualState>
+ </VisualStateGroup>
+ <VisualStateGroup x:Name="ActiveStates">
+ <VisualStateGroup.Transitions>
+ <VisualTransition GeneratedDuration="0"/>
+ </VisualStateGroup.Transitions>
+ <VisualState x:Name="Active"/>
+ <VisualState x:Name="Inactive" />
+ </VisualStateGroup>
+ </VisualStateManager.VisualStateGroups>
+ <Border>
+ <components:Ripple RippleBrush="#20202020" CornerRadius="30">
+ <Grid>
+ <Ellipse x:Name="TodayBackground"
+ Fill="{DynamicResource PrimaryHueLightBrush}"
+ Opacity="0" />
+ <Ellipse x:Name="SelectedBackground"
+ Fill="{DynamicResource PrimaryHueMidBrush}"
+ Opacity="0" />
+ <Border BorderBrush="{TemplateBinding BorderBrush}"
+ BorderThickness="{TemplateBinding BorderThickness}"
+ Background="{TemplateBinding Background}" />
+ <Ellipse x:Name="HighlightBackground"
+ Fill="{DynamicResource PrimaryHueDarkBrush}"
+ Opacity="0" />
+ <ContentPresenter x:Name="NormalText"
+ TextElement.Foreground="{TemplateBinding Foreground}"
+ HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
+ Margin="5,1,5,1"
+ VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
+ <Ellipse x:Name="DayButtonFocusVisual"
+ Stroke="{DynamicResource PrimaryHueDarkBrush}"
+ Opacity="0"
+ Visibility="Collapsed"
+ StrokeThickness="1" />
+ </Grid>
+ </components:Ripple>
+ </Border>
+ </Grid>
+ </ControlTemplate>
+ </Setter.Value>
+ </Setter>
+ <Style.Triggers>
+ <Trigger Property="IsInactive"
+ Value="True">
+ <Setter Property="MinHeight"
+ Value="0" />
+ <Setter Property="MaxHeight"
+ Value="0" />
+ </Trigger>
+ </Style.Triggers>
+ </Style>
+
+ <Style x:Key="TouchCalendarDayButton" TargetType="{x:Type CalendarDayButton}">
+ <Setter Property="Foreground" Value="{DynamicResource TangoDarkForegroundBrush}"/>
+ <Setter Property="MinWidth" Value="5"/>
+ <Setter Property="MinHeight" Value="5"/>
+ <Setter Property="FontSize" Value="{StaticResource TangoDefaultFontSize}"/>
+ <Setter Property="Cursor" Value="Hand" />
+ <Setter Property="Margin" Value="2 5"/>
+ <Setter Property="Width" Value="40" />
+ <Setter Property="Focusable" Value="False" />
+ <Setter Property="Height" Value="40" />
+ <Setter Property="HorizontalContentAlignment" Value="Center"/>
+ <Setter Property="VerticalContentAlignment" Value="Center"/>
+ <Setter Property="Template">
+ <Setter.Value>
+ <ControlTemplate TargetType="{x:Type CalendarDayButton}">
+ <Grid>
+ <VisualStateManager.VisualStateGroups>
+ <VisualStateGroup x:Name="CommonStates">
+ <VisualStateGroup.Transitions>
+ <VisualTransition GeneratedDuration="0:0:0.1"/>
+ </VisualStateGroup.Transitions>
+ <VisualState x:Name="Normal"/>
+ <VisualState x:Name="MouseOver">
+ <Storyboard>
+ <DoubleAnimation Duration="0" To="0.5" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="HighlightBackground"/>
+ </Storyboard>
+ </VisualState>
+ <VisualState x:Name="Pressed">
+ <Storyboard>
+ <DoubleAnimation Duration="0" To="0.5" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="HighlightBackground"/>
+ </Storyboard>
+ </VisualState>
+ </VisualStateGroup>
+ <VisualStateGroup x:Name="SelectionStates">
+ <VisualStateGroup.Transitions>
+ <VisualTransition GeneratedDuration="0"/>
+ </VisualStateGroup.Transitions>
+ <VisualState x:Name="Unselected"/>
+ <VisualState x:Name="Selected">
+ <Storyboard>
+ <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="SelectedBackground"/>
+ <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(TextElement.Foreground)" Storyboard.TargetName="NormalText">
+ <DiscreteObjectKeyFrame Value="{StaticResource TangoPrimaryBackgroundBrush}" KeyTime="0" />
+ </ObjectAnimationUsingKeyFrames>
+ </Storyboard>
+ </VisualState>
+ </VisualStateGroup>
+ <VisualStateGroup x:Name="CalendarButtonFocusStates">
+ <VisualStateGroup.Transitions>
+ <VisualTransition GeneratedDuration="0"/>
+ </VisualStateGroup.Transitions>
+ <VisualState x:Name="CalendarButtonFocused">
+ <Storyboard>
+ <ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetProperty="Visibility" Storyboard.TargetName="DayButtonFocusVisual">
+ <DiscreteObjectKeyFrame KeyTime="0">
+ <DiscreteObjectKeyFrame.Value>
+ <Visibility>Visible</Visibility>
+ </DiscreteObjectKeyFrame.Value>
+ </DiscreteObjectKeyFrame>
+ </ObjectAnimationUsingKeyFrames>
+ </Storyboard>
+ </VisualState>
+ <VisualState x:Name="CalendarButtonUnfocused">
+ <Storyboard>
+ <ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetProperty="Visibility" Storyboard.TargetName="DayButtonFocusVisual">
+ <DiscreteObjectKeyFrame KeyTime="0">
+ <DiscreteObjectKeyFrame.Value>
+ <Visibility>Collapsed</Visibility>
+ </DiscreteObjectKeyFrame.Value>
+ </DiscreteObjectKeyFrame>
+ </ObjectAnimationUsingKeyFrames>
+ </Storyboard>
+ </VisualState>
+ </VisualStateGroup>
+ <VisualStateGroup x:Name="ActiveStates">
+ <VisualStateGroup.Transitions>
+ <VisualTransition GeneratedDuration="0"/>
+ </VisualStateGroup.Transitions>
+ <VisualState x:Name="Active"/>
+ <VisualState x:Name="Inactive"/>
+ </VisualStateGroup>
+ <VisualStateGroup x:Name="DayStates">
+ <VisualStateGroup.Transitions>
+ <VisualTransition GeneratedDuration="0"/>
+ </VisualStateGroup.Transitions>
+ <VisualState x:Name="RegularDay"/>
+ <VisualState x:Name="Today">
+ <Storyboard>
+ <DoubleAnimation Duration="0" To=".75" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="TodayBackground"/>
+ <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(TextElement.Foreground)" Storyboard.TargetName="NormalText">
+ <DiscreteObjectKeyFrame Value="{StaticResource TangoDarkForegroundBrush}" KeyTime="0" />
+ </ObjectAnimationUsingKeyFrames>
+ </Storyboard>
+ </VisualState>
+ </VisualStateGroup>
+ <VisualStateGroup x:Name="BlackoutDayStates">
+ <VisualStateGroup.Transitions>
+ <VisualTransition GeneratedDuration="0"/>
+ </VisualStateGroup.Transitions>
+ <VisualState x:Name="NormalDay"/>
+ <VisualState x:Name="BlackoutDay">
+ <Storyboard>
+ <DoubleAnimation Duration="0"
+ To="0"
+ Storyboard.TargetProperty="Opacity"
+ Storyboard.TargetName="HighlightingBorder"/>
+ <DoubleAnimation Duration="0"
+ To="0.38"
+ Storyboard.TargetProperty="Opacity"
+ Storyboard.TargetName="NormalText" />
+ </Storyboard>
+ </VisualState>
+ </VisualStateGroup>
+ </VisualStateManager.VisualStateGroups>
+ <Grid>
+ <Ellipse x:Name="TodayBackground"
+ Fill="{StaticResource TangoPrimaryAccentBrush}"
+ Opacity="0" />
+ <Ellipse x:Name="SelectedBackground"
+ Fill="{StaticResource TangoPrimaryAccentBrush}"
+ Opacity="0" />
+ <Border BorderBrush="{TemplateBinding BorderBrush}"
+ BorderThickness="{TemplateBinding BorderThickness}"
+ Background="{TemplateBinding Background}"/>
+ <Border x:Name="HighlightingBorder"
+ Opacity="1">
+ <Ellipse x:Name="HighlightBackground"
+ Fill="{StaticResource TangoPrimaryAccentBrush}"
+ Opacity="0"/>
+ </Border>
+ <ContentPresenter x:Name="NormalText"
+ TextElement.Foreground="{TemplateBinding Foreground}"
+ HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
+ Margin="5,1,5,1"
+ VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
+ <Ellipse x:Name="DayButtonFocusVisual"
+ Stroke="{DynamicResource TangoPrimaryAccentBrush}"
+ Opacity="0"
+ Visibility="Collapsed"
+ StrokeThickness="1"/>
+ </Grid>
+ </Grid>
+ </ControlTemplate>
+ </Setter.Value>
+ </Setter>
+ <Style.Triggers>
+ <Trigger Property="IsInactive"
+ Value="True">
+ <Setter Property="MinHeight"
+ Value="0" />
+ <Setter Property="MaxHeight"
+ Value="0" />
+ </Trigger>
+ <Trigger Property="IsBlackedOut"
+ Value="True">
+ <Setter Property="Cursor"
+ Value="No" />
+ </Trigger>
+ </Style.Triggers>
+ </Style>
+
+ <Style x:Key="TouchCalendarItem" TargetType="{x:Type CalendarItem}">
+ <Setter Property="Margin" Value="0"></Setter>
+ <Setter Property="BorderThickness" Value="0"/>
+ <Setter Property="Template">
+ <Setter.Value>
+ <ControlTemplate TargetType="{x:Type CalendarItem}">
+ <ControlTemplate.Resources>
+ <SineEase x:Key="EasingFunction" EasingMode="EaseOut"/>
+ <CubicEase x:Key="EasingFunctionIn" EasingMode="EaseIn"/>
+
+ <DataTemplate x:Key="{x:Static CalendarItem.DayTitleTemplateResourceKey}">
+ <TextBlock Foreground="{StaticResource TangoGrayTextBrush}"
+ Opacity="0.65"
+ FontWeight="Bold"
+ FontSize="{StaticResource TangoDefaultFontSize}"
+ HorizontalAlignment="Center" VerticalAlignment="Center"
+ Margin="0,6,0,6"
+ Text="{Binding [0]}"/>
+ </DataTemplate>
+ </ControlTemplate.Resources>
+ <Grid x:Name="PART_Root">
+ <Grid.Resources>
+ <SolidColorBrush x:Key="DisabledColor" Color="#A5FFFFFF"/>
+ </Grid.Resources>
+ <VisualStateManager.VisualStateGroups>
+ <VisualStateGroup x:Name="CommonStates">
+ <VisualState x:Name="Normal"/>
+ <VisualState x:Name="Disabled">
+ <Storyboard>
+ <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="PART_DisabledVisual"/>
+ </Storyboard>
+ </VisualState>
+ </VisualStateGroup>
+ </VisualStateManager.VisualStateGroups>
+ <Border CornerRadius="5">
+ <Grid>
+ <Grid.Resources>
+ <ControlTemplate x:Key="PreviousButtonTemplate" TargetType="{x:Type Button}">
+ <Grid Cursor="Hand" Background="Transparent">
+ <VisualStateManager.VisualStateGroups>
+ <VisualStateGroup x:Name="CommonStates">
+ <VisualState x:Name="Normal"/>
+ <VisualState x:Name="MouseOver" />
+ <VisualState x:Name="Disabled">
+ <Storyboard>
+ <DoubleAnimation Duration="0" To=".56" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="path"/>
+ </Storyboard>
+ </VisualState>
+ </VisualStateGroup>
+ </VisualStateManager.VisualStateGroups>
+ <Border>
+ <components:Ripple RippleBrush="#20202020" CornerRadius="50">
+ <Viewbox Height="12" Margin="8" HorizontalAlignment="Center" VerticalAlignment="Center">
+ <Path x:Name="path" Data="M15.41,16.58L10.83,12L15.41,7.41L14,6L8,12L14,18L15.41,16.58Z" Fill="{TemplateBinding Foreground}" Stretch="Fill" />
+ </Viewbox>
+ </components:Ripple>
+ </Border>
+ </Grid>
+ </ControlTemplate>
+ <ControlTemplate x:Key="NextButtonTemplate" TargetType="{x:Type Button}">
+ <Grid Cursor="Hand" Background="Transparent">
+ <VisualStateManager.VisualStateGroups>
+ <VisualStateGroup x:Name="CommonStates">
+ <VisualState x:Name="Normal"/>
+ <VisualState x:Name="MouseOver"/>
+ <VisualState x:Name="Disabled">
+ <Storyboard>
+ <DoubleAnimation Duration="0" To=".5" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="path"/>
+ </Storyboard>
+ </VisualState>
+ </VisualStateGroup>
+ </VisualStateManager.VisualStateGroups>
+ <Border>
+ <components:Ripple RippleBrush="#20202020" CornerRadius="50">
+ <Viewbox Height="12" Margin="8" HorizontalAlignment="Center" VerticalAlignment="Center">
+ <Path x:Name="path" Data="M8.59,16.58L13.17,12L8.59,7.41L10,6L16,12L10,18L8.59,16.58Z" Fill="{TemplateBinding Foreground}" Stretch="Fill" />
+ </Viewbox>
+ </components:Ripple>
+ </Border>
+ </Grid>
+ </ControlTemplate>
+ <ControlTemplate x:Key="HeaderButtonTemplate" TargetType="{x:Type Button}">
+ <Grid Cursor="Hand" Background="Transparent">
+ <VisualStateManager.VisualStateGroups>
+ <VisualStateGroup x:Name="CommonStates">
+ <VisualState x:Name="Normal"/>
+ <VisualState x:Name="MouseOver" />
+ <VisualState x:Name="Disabled"/>
+ </VisualStateGroup>
+ </VisualStateManager.VisualStateGroups>
+ <Border Background="{StaticResource TangoPrimaryAccentBrush}" CornerRadius="5 5 0 0" Width="{Binding RelativeSource={RelativeSource AncestorType=local:TouchCalendar},Path=Width}">
+ <components:Ripple RippleBrush="#20202020">
+ <Border Padding="20 40" CornerRadius="5" TextElement.Foreground="{StaticResource TangoPrimaryBackgroundBrush}">
+ <StackPanel>
+ <TextBlock FontSize="{StaticResource TangoDefaultFontSize}" Text="{Binding RelativeSource={RelativeSource AncestorType=local:TouchCalendar},Path=SelectedDate.Year}"></TextBlock>
+ <TextBlock Margin="0 10 0 0" FontSize="{StaticResource TangoHeaderFontSize}" Text="{Binding RelativeSource={RelativeSource AncestorType=local:TouchCalendar},Path=SelectedDate,Converter={StaticResource DateTimeToCalendarHeaderConverter}}"></TextBlock>
+ </StackPanel>
+ </Border>
+ </components:Ripple>
+ </Border>
+ </Grid>
+ </ControlTemplate>
+ </Grid.Resources>
+ <Grid.ColumnDefinitions>
+ <ColumnDefinition Width="Auto"/>
+ <ColumnDefinition Width="Auto"/>
+ <ColumnDefinition Width="Auto"/>
+ </Grid.ColumnDefinitions>
+ <Grid.RowDefinitions>
+ <RowDefinition Height="Auto"/>
+ <RowDefinition Height="70"/>
+ <RowDefinition Height="Auto"/>
+ <RowDefinition Height="*"/>
+ </Grid.RowDefinitions>
+ <Border Grid.ColumnSpan="3" Grid.Row="0" />
+ <Button x:Name="PART_HeaderButton" Background="Transparent"
+ Grid.Row="0"
+ Grid.ColumnSpan="3" Focusable="False"
+ Template="{StaticResource HeaderButtonTemplate}"
+ Height="Auto"/>
+ <Button x:Name="PART_PreviousButton" Width="{Binding RelativeSource={RelativeSource Self},Path=ActualHeight}" Background="Transparent" Grid.Row="1" Grid.Column="0" Focusable="False" HorizontalAlignment="Left" Template="{StaticResource PreviousButtonTemplate}" Margin="6 0 0 0" Foreground="{TemplateBinding Foreground}" />
+ <TextBlock x:Name="CurrentDateTextBlock"
+ HorizontalAlignment="Center" VerticalAlignment="Center"
+ Margin="8"
+ FontSize="{StaticResource TangoDefaultFontSize}"
+ Grid.Row="1" Grid.Column="1"
+ FontWeight="SemiBold"
+ RenderTransformOrigin="0, 0.5"
+ Text="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Calendar}}, Path=DisplayDate, StringFormat=MMMM yyyy}">
+ <TextBlock.RenderTransform>
+ <TranslateTransform X="0" Y="0"/>
+ </TextBlock.RenderTransform>
+ </TextBlock>
+ <Button x:Name="PART_NextButton" Width="{Binding RelativeSource={RelativeSource Self},Path=ActualHeight}" Background="Transparent" Grid.Row="1" Grid.Column="2" Focusable="False" HorizontalAlignment="Right" Template="{StaticResource NextButtonTemplate}"
+ Margin="0 0 6 0" Foreground="{TemplateBinding Foreground}" />
+
+ <Grid x:Name="MonthViewWrapperGrid"
+ Grid.ColumnSpan="3"
+ Grid.Row="2"
+ HorizontalAlignment="Center"
+ VerticalAlignment="Top"
+ Margin="6 -1 6 6"
+ Visibility="Visible">
+ <Border x:Name="PART_MonthViewCopy" RenderTransformOrigin="0, 0.5"
+ Opacity="0" Margin="4 7 4 3">
+ <Border.Background>
+ <VisualBrush Visual="{Binding ElementName=PART_MonthView}" Stretch="UniformToFill"/>
+ </Border.Background>
+ <Border.RenderTransform>
+ <TranslateTransform X="0"/>
+ </Border.RenderTransform>
+ </Border>
+ <Grid x:Name="PART_MonthView" RenderTransformOrigin="0, 0.5">
+ <Grid.RenderTransform>
+ <TranslateTransform X="0" />
+ </Grid.RenderTransform>
+ <Grid.ColumnDefinitions>
+ <ColumnDefinition Width="Auto"/>
+ <ColumnDefinition Width="Auto"/>
+ <ColumnDefinition Width="Auto"/>
+ <ColumnDefinition Width="Auto"/>
+ <ColumnDefinition Width="Auto"/>
+ <ColumnDefinition Width="Auto"/>
+ <ColumnDefinition Width="Auto"/>
+ </Grid.ColumnDefinitions>
+ <Grid.RowDefinitions>
+ <RowDefinition Height="Auto"/>
+ <RowDefinition Height="Auto"/>
+ <RowDefinition Height="Auto"/>
+ <RowDefinition Height="Auto"/>
+ <RowDefinition Height="Auto"/>
+ <RowDefinition Height="Auto"/>
+ <RowDefinition Height="Auto"/>
+ </Grid.RowDefinitions>
+ </Grid>
+ </Grid>
+
+ <Grid x:Name="YearViewWrapperGrid"
+ Grid.ColumnSpan="3"
+ Grid.Row="2"
+ HorizontalAlignment="Center"
+ VerticalAlignment="Top"
+ Margin="6 -3 7 6"
+ Visibility="Hidden">
+ <Border x:Name="PART_YearViewCopy" RenderTransformOrigin="0, 0.5"
+ Opacity="0" Margin="2">
+ <Border.Background>
+ <VisualBrush Visual="{Binding ElementName=PART_YearView}" Stretch="UniformToFill"/>
+ </Border.Background>
+ <Border.RenderTransform>
+ <TranslateTransform X="0"/>
+ </Border.RenderTransform>
+ </Border>
+ <Grid x:Name="PART_YearView"
+ RenderTransformOrigin="0, 0.5">
+ <Grid.RenderTransform>
+ <TranslateTransform X="0" />
+ </Grid.RenderTransform>
+ <Grid.ColumnDefinitions>
+ <ColumnDefinition Width="Auto"/>
+ <ColumnDefinition Width="Auto"/>
+ <ColumnDefinition Width="Auto"/>
+ <ColumnDefinition Width="Auto"/>
+ </Grid.ColumnDefinitions>
+ <Grid.RowDefinitions>
+ <RowDefinition Height="Auto"/>
+ <RowDefinition Height="Auto"/>
+ <RowDefinition Height="Auto"/>
+ </Grid.RowDefinitions>
+ </Grid>
+ </Grid>
+ </Grid>
+ </Border>
+ <Rectangle x:Name="PART_DisabledVisual" Fill="{StaticResource DisabledColor}" Opacity="0" RadiusY="2" RadiusX="2" Stretch="Fill" Stroke="{StaticResource DisabledColor}" StrokeThickness="1" Visibility="Collapsed"/>
+ </Grid>
+ <ControlTemplate.Triggers>
+ <Trigger Property="IsEnabled" Value="False">
+ <Setter Property="Visibility" TargetName="PART_DisabledVisual" Value="Visible"/>
+ </Trigger>
+ <DataTrigger Binding="{Binding DisplayMode, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Calendar}}}" Value="Year">
+ <Setter Property="Visibility" TargetName="MonthViewWrapperGrid" Value="Hidden"/>
+ <Setter Property="Visibility" TargetName="YearViewWrapperGrid" Value="Visible"/>
+ </DataTrigger>
+ <DataTrigger Binding="{Binding DisplayMode, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Calendar}}}" Value="Decade">
+ <Setter Property="Visibility" TargetName="MonthViewWrapperGrid" Value="Hidden"/>
+ <Setter Property="Visibility" TargetName="YearViewWrapperGrid" Value="Visible"/>
+ </DataTrigger>
+ <EventTrigger RoutedEvent="Button.Click" SourceName="PART_NextButton">
+ <BeginStoryboard>
+ <Storyboard>
+ <DoubleAnimation Storyboard.TargetName="CurrentDateTextBlock"
+ Storyboard.TargetProperty="(UIElement.RenderTransform).(TranslateTransform.X)"
+ EasingFunction="{StaticResource EasingFunction}"
+ AccelerationRatio="0.1" DecelerationRatio="0.89"
+ From="240" To="0" Duration="0:0:0.450"/>
+
+ <DoubleAnimation Storyboard.TargetName="PART_MonthViewCopy"
+ Storyboard.TargetProperty="(UIElement.Opacity)"
+ From="1" To="0" Duration="0:0:0.450"/>
+
+ <DoubleAnimation Storyboard.TargetName="PART_MonthViewCopy"
+ Storyboard.TargetProperty="(UIElement.RenderTransform).(TranslateTransform.X)"
+ From="0" To="-270" Duration="0:0:0.450"
+ AccelerationRatio="0.3" DecelerationRatio="0.69"/>
+
+ <DoubleAnimation Storyboard.TargetName="PART_MonthView"
+ Storyboard.TargetProperty="(UIElement.RenderTransform).(TranslateTransform.X)"
+ From="270" To="0" Duration="0:0:0.450"
+ AccelerationRatio="0.3" DecelerationRatio="0.69"/>
+
+ <DoubleAnimation Storyboard.TargetName="PART_YearViewCopy"
+ Storyboard.TargetProperty="(UIElement.Opacity)"
+ From="1" To="0" Duration="0:0:0.450"/>
+
+ <DoubleAnimation Storyboard.TargetName="PART_YearViewCopy"
+ Storyboard.TargetProperty="(UIElement.RenderTransform).(TranslateTransform.X)"
+ From="0" To="-240" Duration="0:0:0.450"
+ AccelerationRatio="0.3" DecelerationRatio="0.69"/>
+
+ <DoubleAnimation Storyboard.TargetName="PART_YearView"
+ Storyboard.TargetProperty="(UIElement.RenderTransform).(TranslateTransform.X)"
+ From="240" To="0" Duration="0:0:0.450"
+ AccelerationRatio="0.3" DecelerationRatio="0.69"/>
+ </Storyboard>
+ </BeginStoryboard>
+ </EventTrigger>
+ <EventTrigger RoutedEvent="Button.Click" SourceName="PART_PreviousButton">
+ <BeginStoryboard>
+ <Storyboard>
+ <DoubleAnimation Storyboard.TargetName="CurrentDateTextBlock"
+ Storyboard.TargetProperty="(UIElement.RenderTransform).(TranslateTransform.X)"
+ EasingFunction="{StaticResource EasingFunction}"
+ AccelerationRatio="0.1" DecelerationRatio="0.89"
+ From="-240" To="0" Duration="0:0:0.450"/>
+
+ <DoubleAnimation Storyboard.TargetName="PART_MonthViewCopy"
+ Storyboard.TargetProperty="(UIElement.Opacity)"
+ From="1" To="0" Duration="0:0:0.450"/>
+
+ <DoubleAnimation Storyboard.TargetName="PART_MonthViewCopy"
+ Storyboard.TargetProperty="(UIElement.RenderTransform).(TranslateTransform.X)"
+ From="0" To="270" Duration="0:0:0.450"
+ AccelerationRatio="0.3" DecelerationRatio="0.69"/>
+
+ <DoubleAnimation Storyboard.TargetName="PART_MonthView"
+ Storyboard.TargetProperty="(UIElement.RenderTransform).(TranslateTransform.X)"
+ From="-270" To="0" Duration="0:0:0.450"
+ AccelerationRatio="0.3" DecelerationRatio="0.69"/>
+
+ <DoubleAnimation Storyboard.TargetName="PART_YearViewCopy"
+ Storyboard.TargetProperty="(UIElement.Opacity)"
+ From="1" To="0" Duration="0:0:0.450"/>
+
+ <DoubleAnimation Storyboard.TargetName="PART_YearViewCopy"
+ Storyboard.TargetProperty="(UIElement.RenderTransform).(TranslateTransform.X)"
+ From="0" To="240" Duration="0:0:0.450"
+ AccelerationRatio="0.3" DecelerationRatio="0.69"/>
+
+ <DoubleAnimation Storyboard.TargetName="PART_YearView"
+ Storyboard.TargetProperty="(UIElement.RenderTransform).(TranslateTransform.X)"
+ From="-240" To="0" Duration="0:0:0.450"
+ AccelerationRatio="0.3" DecelerationRatio="0.69"/>
+ </Storyboard>
+ </BeginStoryboard>
+ </EventTrigger>
+ </ControlTemplate.Triggers>
+ </ControlTemplate>
+ </Setter.Value>
+ </Setter>
+ </Style>
+
+ <Style TargetType="{x:Type local:TouchCalendar}">
+ <Setter Property="ClipToBounds" Value="True"></Setter>
+ <Setter Property="CalendarItemStyle" Value="{StaticResource TouchCalendarItem}"></Setter>
+ <Setter Property="CalendarDayButtonStyle" Value="{StaticResource TouchCalendarDayButton}"></Setter>
+ <Setter Property="CalendarButtonStyle" Value="{StaticResource TouchCalendarButton}"></Setter>
+ <Setter Property="Foreground" Value="{StaticResource TangoDarkForegroundBrush}"/>
+ <Setter Property="BorderThickness" Value="0"/>
+ <Setter Property="Template">
+ <Setter.Value>
+ <ControlTemplate TargetType="{x:Type Calendar}">
+ <StackPanel x:Name="PART_Root" HorizontalAlignment="Center">
+ <CalendarItem x:Name="PART_CalendarItem" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Style="{TemplateBinding CalendarItemStyle}"/>
+ </StackPanel>
+ </ControlTemplate>
+ </Setter.Value>
+ </Setter>
+ </Style>
+</ResourceDictionary> \ No newline at end of file
diff --git a/Software/Visual_Studio/Tango.Touch/Controls/TouchComboBox.xaml b/Software/Visual_Studio/Tango.Touch/Controls/TouchComboBox.xaml
index 5ea529c70..8e29231af 100644
--- a/Software/Visual_Studio/Tango.Touch/Controls/TouchComboBox.xaml
+++ b/Software/Visual_Studio/Tango.Touch/Controls/TouchComboBox.xaml
@@ -23,7 +23,6 @@
<Setter Property="MinPopupHeight" Value="400"></Setter>
<Setter Property="MinPopupWidth" Value="500"></Setter>
<Setter Property="Title" Value="Select a value"></Setter>
- <!--<Setter Property="IsManipulationEnabled" Value="True"></Setter>-->
<Setter Property="ItemTemplate">
<Setter.Value>
<DataTemplate>
diff --git a/Software/Visual_Studio/Tango.Touch/Controls/TouchDatePicker.cs b/Software/Visual_Studio/Tango.Touch/Controls/TouchDatePicker.cs
new file mode 100644
index 000000000..49c7e6aa2
--- /dev/null
+++ b/Software/Visual_Studio/Tango.Touch/Controls/TouchDatePicker.cs
@@ -0,0 +1,57 @@
+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;
+using Tango.Core.EventArguments;
+
+namespace Tango.Touch.Controls
+{
+ public class TouchDatePicker : DatePicker
+ {
+ static TouchDatePicker()
+ {
+ DefaultStyleKeyProperty.OverrideMetadata(typeof(TouchDatePicker), new FrameworkPropertyMetadata(typeof(TouchDatePicker)));
+ }
+
+ public TouchDatePicker()
+ {
+ this.RegisterForPreviewMouseOrTouchDown(OnMouseDown);
+ this.RegisterForPreviewMouseOrTouchUp(OnMouseUp);
+ }
+
+ private void OnMouseUp(object sender, MouseOrTouchEventArgs e)
+ {
+ ShowSelectionOnTouchPanel();
+ }
+
+ private void OnMouseDown(object sender, MouseOrTouchEventArgs e)
+ {
+ System.Windows.Input.Keyboard.Focus(this);
+ }
+
+ private void ShowSelectionOnTouchPanel()
+ {
+ TouchPanel touchPanel = this.FindAncestor<TouchPanel>();
+
+ if (touchPanel != null)
+ {
+ touchPanel.CurrentDatePicker = this;
+ }
+ }
+
+ internal void SetResultFromTouchPanel(DateTime selectedDate)
+ {
+ SelectedDate = selectedDate;
+ }
+ }
+}
diff --git a/Software/Visual_Studio/Tango.Touch/Controls/TouchDatePicker.xaml b/Software/Visual_Studio/Tango.Touch/Controls/TouchDatePicker.xaml
new file mode 100644
index 000000000..eb22c441a
--- /dev/null
+++ b/Software/Visual_Studio/Tango.Touch/Controls/TouchDatePicker.xaml
@@ -0,0 +1,123 @@
+<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:components="clr-namespace:Tango.Touch.Components"
+ xmlns:converters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI"
+ xmlns:local="clr-namespace:Tango.Touch.Controls">
+
+ <ResourceDictionary.MergedDictionaries>
+ <ResourceDictionary Source="../Resources/Colors.xaml" />
+ <ResourceDictionary Source="../Resources/Fonts.xaml" />
+ <ResourceDictionary Source="../Controls/Shared.xaml" />
+ </ResourceDictionary.MergedDictionaries>
+
+ <converters:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
+
+ <Style TargetType="{x:Type local:TouchDatePicker}">
+ <Setter Property="Focusable" Value="True"></Setter>
+ <Setter Property="Validation.ErrorTemplate" Value="{x:Null}"></Setter>
+ <Setter Property="FocusVisualStyle" Value="{x:Null}"></Setter>
+ <Setter Property="Padding" Value="10"></Setter>
+ <Setter Property="Template">
+ <Setter.Value>
+ <ControlTemplate TargetType="{x:Type local:TouchDatePicker}">
+ <Border Background="{TemplateBinding Background}"
+ BorderBrush="{TemplateBinding BorderBrush}"
+ BorderThickness="{TemplateBinding BorderThickness}">
+
+ <DockPanel Background="Transparent">
+ <Border DockPanel.Dock="Bottom" Visibility="{Binding RelativeSource={RelativeSource AncestorType=local:TouchDatePicker},Path=(Validation.HasError),Converter={StaticResource BooleanToVisibilityConverter}}">
+ <TextBlock FontSize="12" Foreground="{StaticResource TangoValidationErrorBrush}" Margin="0 5 0 0" TextWrapping="Wrap" Text="{Binding RelativeSource={RelativeSource AncestorType=local:TouchDatePicker},Path=(Validation.Errors).CurrentItem.ErrorContent}"></TextBlock>
+ </Border>
+
+ <DockPanel>
+ <Grid DockPanel.Dock="Bottom" Height="2">
+ <Rectangle Height="1" Fill="{StaticResource TangoTextWatermarkBrush}" />
+ <Rectangle Height="2" RenderTransformOrigin="0.5,0.5" >
+ <Rectangle.Style>
+ <Style TargetType="Rectangle">
+ <Setter Property="Fill" Value="{StaticResource TangoPrimaryAccentBrush}"></Setter>
+ <Setter Property="RenderTransform">
+ <Setter.Value>
+ <ScaleTransform ScaleY="1" ScaleX="0" />
+ </Setter.Value>
+ </Setter>
+ <Style.Triggers>
+ <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=local:TouchDatePicker},Path=IsFocused}" Value="True">
+ <DataTrigger.EnterActions>
+ <BeginStoryboard>
+ <Storyboard>
+ <DoubleAnimation Storyboard.TargetProperty="RenderTransform.ScaleX" To="1" Duration="00:00:0.4" />
+ </Storyboard>
+ </BeginStoryboard>
+ </DataTrigger.EnterActions>
+ <DataTrigger.ExitActions>
+ <BeginStoryboard>
+ <Storyboard>
+ <DoubleAnimation Storyboard.TargetProperty="RenderTransform.ScaleX" To="0" Duration="00:00:0.4" />
+ </Storyboard>
+ </BeginStoryboard>
+ </DataTrigger.ExitActions>
+ </DataTrigger>
+ <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=local:TouchDatePicker},Path=IsFocused}" Value="True">
+ <DataTrigger.EnterActions>
+ <BeginStoryboard>
+ <Storyboard>
+ <DoubleAnimation Storyboard.TargetProperty="RenderTransform.ScaleX" To="1" Duration="00:00:0.4" />
+ </Storyboard>
+ </BeginStoryboard>
+ </DataTrigger.EnterActions>
+ <DataTrigger.ExitActions>
+ <BeginStoryboard>
+ <Storyboard>
+ <DoubleAnimation Storyboard.TargetProperty="RenderTransform.ScaleX" To="0" Duration="00:00:0.4" />
+ </Storyboard>
+ </BeginStoryboard>
+ </DataTrigger.ExitActions>
+ </DataTrigger>
+ <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=local:TouchDatePicker},Path=(Validation.HasError)}" Value="True">
+ <Setter Property="Fill" Value="{StaticResource TangoValidationErrorBrush}"></Setter>
+ <Setter Property="RenderTransform">
+ <Setter.Value>
+ <ScaleTransform ScaleY="1" ScaleX="1" />
+ </Setter.Value>
+ </Setter>
+ </DataTrigger>
+ </Style.Triggers>
+ </Style>
+ </Rectangle.Style>
+ </Rectangle>
+ </Grid>
+
+ <Grid>
+ <components:Ripple RippleBrush="{StaticResource TangoRippleDarkBrush}" RippleFactor="15">
+ <DockPanel>
+ <local:TouchIcon IsHitTestVisible="False" VerticalAlignment="Bottom" Margin="0 0 0 5" DockPanel.Dock="Right" Icon="Calendar" Width="12">
+ <local:TouchIcon.Style>
+ <Style TargetType="local:TouchIcon">
+ <Setter Property="Foreground" Value="{StaticResource TangoTextWatermarkBrush}"></Setter>
+ <Style.Triggers>
+ <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=local:TouchDatePicker},Path=IsFocused}" Value="True">
+ <Setter Property="Foreground" Value="{StaticResource TangoPrimaryAccentBrush}"></Setter>
+ </DataTrigger>
+ </Style.Triggers>
+ </Style>
+ </local:TouchIcon.Style>
+ </local:TouchIcon>
+
+ <Grid>
+ <ContentControl VerticalAlignment="Bottom" Margin="0 0 0 5" Padding="0 0 0 4" FocusVisualStyle="{x:Null}" Content="{Binding RelativeSource={RelativeSource AncestorType=local:TouchDatePicker},Path=SelectedDate}" Background="Transparent"></ContentControl>
+ </Grid>
+ </DockPanel>
+ </components:Ripple>
+ </Grid>
+ </DockPanel>
+ </DockPanel>
+
+ </Border>
+ </ControlTemplate>
+ </Setter.Value>
+ </Setter>
+ </Style>
+
+
+</ResourceDictionary> \ No newline at end of file
diff --git a/Software/Visual_Studio/Tango.Touch/Controls/TouchPanel.cs b/Software/Visual_Studio/Tango.Touch/Controls/TouchPanel.cs
index aa311a986..54906c7a6 100644
--- a/Software/Visual_Studio/Tango.Touch/Controls/TouchPanel.cs
+++ b/Software/Visual_Studio/Tango.Touch/Controls/TouchPanel.cs
@@ -7,6 +7,7 @@ using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
+using System.Windows.Input;
using Tango.Core.Commands;
using Tango.Core.EventArguments;
using Tango.SharedUI;
@@ -18,6 +19,8 @@ namespace Tango.Touch.Controls
{
private TouchListBox _combobox_list;
private Grid _combobox_grid;
+ private TouchCalendar _calendar;
+ private Grid _calendar_grid;
static TouchPanel()
{
@@ -32,6 +35,17 @@ namespace Tango.Touch.Controls
CurrentComboBox = null;
});
+ DateSelectedCommand = new RelayCommand(() =>
+ {
+ CurrentDatePicker.SetResultFromTouchPanel(_calendar.SelectedDate.Value);
+ CurrentDatePicker = null;
+ });
+
+ CancelDateCommand = new RelayCommand(() =>
+ {
+ CurrentDatePicker = null;
+ });
+
this.RegisterForMouseOrTouchDown(OnMouseDown);
}
@@ -52,8 +66,28 @@ namespace Tango.Touch.Controls
_combobox_list = GetTemplateChild("PART_ComboBoxList") as TouchListBox;
_combobox_grid = GetTemplateChild("PART_combobox_grid") as Grid;
+ _calendar_grid = GetTemplateChild("PART_datepicker_grid") as Grid;
+ _calendar = GetTemplateChild("PART_calendar") as TouchCalendar;
_combobox_grid.RegisterForMouseOrTouchDown(OnComboBoxGridDown);
+ _calendar_grid.RegisterForMouseOrTouchDown(OnCalendarGridDown);
+
+ _calendar.SelectionMode = CalendarSelectionMode.SingleDate;
+ _calendar.SelectedDatesChanged += _calendar_SelectedDatesChanged;
+ }
+
+ private void _calendar_SelectedDatesChanged(object sender, SelectionChangedEventArgs e)
+ {
+ Mouse.Capture(null);
+ ReleaseAllTouchCaptures();
+ }
+
+ private void OnCalendarGridDown(object sender, MouseOrTouchEventArgs e)
+ {
+ if (e.Source == _calendar_grid)
+ {
+ CurrentDatePicker = null;
+ }
}
private void OnComboBoxGridDown(object sender, MouseOrTouchEventArgs e)
@@ -81,6 +115,16 @@ namespace Tango.Touch.Controls
}
}
+ private void OnCurrentDatePickerChanged()
+ {
+ if (CurrentDatePicker != null)
+ {
+ _calendar.SelectedDate = CurrentDatePicker.SelectedDate;
+ _calendar.DisplayDateStart = CurrentDatePicker.DisplayDateStart;
+ _calendar.DisplayDateEnd = CurrentDatePicker.DisplayDateEnd;
+ }
+ }
+
internal RelayCommand ComboBoxPickedCommand
{
get { return (RelayCommand)GetValue(ComboBoxPickedCommandProperty); }
@@ -98,6 +142,32 @@ namespace Tango.Touch.Controls
internal static readonly DependencyProperty CurrentComboBoxProperty =
DependencyProperty.Register("CurrentComboBox", typeof(TouchComboBox), typeof(TouchPanel), new PropertyMetadata(null,(d,e) => (d as TouchPanel).OnCurrentComboBoxChanged()));
+ internal TouchDatePicker CurrentDatePicker
+ {
+ get { return (TouchDatePicker)GetValue(CurrentDatePickerProperty); }
+ set { SetValue(CurrentDatePickerProperty, value); }
+ }
+ internal static readonly DependencyProperty CurrentDatePickerProperty =
+ DependencyProperty.Register("CurrentDatePicker", typeof(TouchDatePicker), typeof(TouchPanel), new PropertyMetadata(null, (d, e) => (d as TouchPanel).OnCurrentDatePickerChanged()));
+
+ internal RelayCommand DateSelectedCommand
+ {
+ get { return (RelayCommand)GetValue(DateSelectedCommandProperty); }
+ set { SetValue(DateSelectedCommandProperty, value); }
+ }
+ internal static readonly DependencyProperty DateSelectedCommandProperty =
+ DependencyProperty.Register("DateSelectedCommand", typeof(RelayCommand), typeof(TouchPanel), new PropertyMetadata(null));
+
+ internal RelayCommand CancelDateCommand
+ {
+ get { return (RelayCommand)GetValue(CancelDateCommandProperty); }
+ set { SetValue(CancelDateCommandProperty, value); }
+ }
+ internal static readonly DependencyProperty CancelDateCommandProperty =
+ DependencyProperty.Register("CancelDateCommand", typeof(RelayCommand), typeof(TouchPanel), new PropertyMetadata(null));
+
+
+
public bool HasMessageBox
{
get { return (bool)GetValue(HasMessageBoxProperty); }
diff --git a/Software/Visual_Studio/Tango.Touch/Controls/TouchPanel.xaml b/Software/Visual_Studio/Tango.Touch/Controls/TouchPanel.xaml
index 92e838c1e..77eb794a0 100644
--- a/Software/Visual_Studio/Tango.Touch/Controls/TouchPanel.xaml
+++ b/Software/Visual_Studio/Tango.Touch/Controls/TouchPanel.xaml
@@ -83,6 +83,49 @@
</Grid>
</Grid>
+ <!--Date Picker-->
+ <Grid Background="#9E000000" x:Name="PART_datepicker_grid">
+ <Grid.Style>
+ <Style TargetType="Grid">
+ <Setter Property="Opacity" Value="0"></Setter>
+ <Setter Property="Visibility" Value="Hidden"></Setter>
+ <Style.Triggers>
+ <DataTrigger Binding="{Binding RelativeSource={RelativeSource TemplatedParent},Path=CurrentDatePicker,Converter={StaticResource NullObjectToBooleanConverter}}" Value="True">
+ <Setter Property="Visibility" Value="Visible"></Setter>
+ <DataTrigger.EnterActions>
+ <BeginStoryboard>
+ <Storyboard>
+ <DoubleAnimation To="1" Storyboard.TargetProperty="Opacity" Duration="00:00:0.2" />
+ </Storyboard>
+ </BeginStoryboard>
+ </DataTrigger.EnterActions>
+ </DataTrigger>
+ </Style.Triggers>
+ </Style>
+ </Grid.Style>
+
+ <Grid DataContext="{Binding RelativeSource={RelativeSource TemplatedParent},Path=CurrentDatePicker}" VerticalAlignment="Center" HorizontalAlignment="Center">
+ <Border Background="{StaticResource TangoPrimaryBackgroundBrush}" CornerRadius="5" Margin="10" HorizontalAlignment="Center" VerticalAlignment="Center">
+ <Border.Effect>
+ <DropShadowEffect BlurRadius="10" />
+ </Border.Effect>
+
+ <DockPanel>
+ <StackPanel Margin="0 40 0 10" DockPanel.Dock="Bottom" HorizontalAlignment="Right" Orientation="Horizontal">
+ <local:TouchButton Command="{Binding RelativeSource={RelativeSource TemplatedParent},Path=CancelDateCommand}" Width="80" Margin="2 0" FontSize="{StaticResource TangoDefaultFontSize}" Style="{StaticResource TangoMessageBoxButton}">CANCEL</local:TouchButton>
+ <local:TouchButton Command="{Binding RelativeSource={RelativeSource TemplatedParent},Path=DateSelectedCommand}" Width="100" Margin="2 0" FontSize="{StaticResource TangoDefaultFontSize}" Style="{StaticResource TangoMessageBoxButton}">OK</local:TouchButton>
+ </StackPanel>
+
+ <local:TouchCalendar Width="370" x:Name="PART_calendar" Focusable="False"
+ SelectedDate="{Binding RelativeSource={RelativeSource TemplatedParent},Path=CurrentDatePicker.SelectedDate,Mode=OneWay}"
+ DisplayDateStart="{Binding RelativeSource={RelativeSource TemplatedParent},Path=CurrentDatePicker.DisplayDateStart,Mode=OneWay}"
+ DisplayDateEnd="{Binding RelativeSource={RelativeSource TemplatedParent},Path=CurrentDatePicker.DisplayDateEnd,Mode=OneWay}"
+ />
+ </DockPanel>
+ </Border>
+ </Grid>
+ </Grid>
+
<!--Dialogs-->
<Grid>
<Grid.Style>
diff --git a/Software/Visual_Studio/Tango.Touch/Converters/DateTimeToCalendarHeaderConverter.cs b/Software/Visual_Studio/Tango.Touch/Converters/DateTimeToCalendarHeaderConverter.cs
new file mode 100644
index 000000000..0d5909d65
--- /dev/null
+++ b/Software/Visual_Studio/Tango.Touch/Converters/DateTimeToCalendarHeaderConverter.cs
@@ -0,0 +1,30 @@
+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.Touch.Converters
+{
+ public class DateTimeToCalendarHeaderConverter : IValueConverter
+ {
+ public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ DateTime? date = value as DateTime?;
+
+ if (date == null)
+ {
+ date = DateTime.Now;
+ }
+
+ return date.Value.ToString("ddd, MMM d");
+ }
+
+ public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
diff --git a/Software/Visual_Studio/Tango.Touch/Tango.Touch.csproj b/Software/Visual_Studio/Tango.Touch/Tango.Touch.csproj
index 469fbeb3a..9bd7f0b71 100644
--- a/Software/Visual_Studio/Tango.Touch/Tango.Touch.csproj
+++ b/Software/Visual_Studio/Tango.Touch/Tango.Touch.csproj
@@ -65,8 +65,10 @@
<Compile Include="Controls\IValueControl.cs" />
<Compile Include="Controls\MessageBoxVM.cs" />
<Compile Include="Controls\TouchAutoComplete.cs" />
+ <Compile Include="Controls\TouchCalendar.cs" />
<Compile Include="Controls\TouchCheckBox.cs" />
<Compile Include="Controls\TouchComboBox.cs" />
+ <Compile Include="Controls\TouchDatePicker.cs" />
<Compile Include="Controls\TouchExpander.cs" />
<Compile Include="Controls\TouchFlatListBox.cs" />
<Compile Include="Controls\TouchGifAnimation.cs" />
@@ -89,6 +91,7 @@
<Compile Include="Controls\TouchPanel.cs" />
<Compile Include="Controls\TouchToggleIconButton.cs" />
<Compile Include="Controls\TouchToggleSlider.cs" />
+ <Compile Include="Converters\DateTimeToCalendarHeaderConverter.cs" />
<Compile Include="Converters\NumericTextBoxDoubleConverter.cs" />
<Compile Include="Converters\NumericTextBoxIntegerConverter.cs" />
<Compile Include="Converters\StringToPasswordConverter.cs" />
@@ -110,6 +113,10 @@
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
+ <Page Include="Controls\TouchCalendar.xaml">
+ <SubType>Designer</SubType>
+ <Generator>MSBuild:Compile</Generator>
+ </Page>
<Page Include="Controls\TouchCheckBox.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
@@ -118,6 +125,10 @@
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
+ <Page Include="Controls\TouchDatePicker.xaml">
+ <SubType>Designer</SubType>
+ <Generator>MSBuild:Compile</Generator>
+ </Page>
<Page Include="Controls\TouchExpander.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
@@ -374,7 +385,7 @@
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<ProjectExtensions>
<VisualStudio>
- <UserProperties BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UseGlobalSettings="False" BuildVersion_StartDate="2000/1/1" />
+ <UserProperties BuildVersion_StartDate="2000/1/1" BuildVersion_UseGlobalSettings="False" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" />
</VisualStudio>
</ProjectExtensions>
</Project> \ No newline at end of file
diff --git a/Software/Visual_Studio/Tango.Touch/Themes/Generic.xaml b/Software/Visual_Studio/Tango.Touch/Themes/Generic.xaml
index ad85463dd..832a3bf95 100644
--- a/Software/Visual_Studio/Tango.Touch/Themes/Generic.xaml
+++ b/Software/Visual_Studio/Tango.Touch/Themes/Generic.xaml
@@ -42,6 +42,8 @@
<ResourceDictionary Source="pack://application:,,,/Tango.Touch;component/Controls/TouchFlatListBox.xaml" />
<ResourceDictionary Source="pack://application:,,,/Tango.Touch;component/Controls/TouchStepProgressBar.xaml" />
<ResourceDictionary Source="pack://application:,,,/Tango.Touch;component/Controls/TouchProgressBar.xaml" />
+ <ResourceDictionary Source="pack://application:,,,/Tango.Touch;component/Controls/TouchCalendar.xaml" />
+ <ResourceDictionary Source="pack://application:,,,/Tango.Touch;component/Controls/TouchDatePicker.xaml" />
<ResourceDictionary Source="pack://application:,,,/Tango.Touch;component/Styles/TouchToggleButton.xaml" />
diff --git a/Software/Visual_Studio/Tango.sln b/Software/Visual_Studio/Tango.sln
index a190fd04a..387a9e1bf 100644
--- a/Software/Visual_Studio/Tango.sln
+++ b/Software/Visual_Studio/Tango.sln
@@ -244,6 +244,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tango.FirmwarePackageGenera
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tango.PPC.BootScreen", "PPC\Tango.PPC.BootScreen\Tango.PPC.BootScreen.csproj", "{7E5E4BED-538C-4566-A005-DCC070AF8715}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tango.PPC.Logging", "PPC\Modules\Tango.PPC.Logging\Tango.PPC.Logging.csproj", "{D2EE865B-B006-487A-9487-60A663636AC3}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
AppVeyor|Any CPU = AppVeyor|Any CPU
@@ -4367,6 +4369,46 @@ Global
{7E5E4BED-538C-4566-A005-DCC070AF8715}.Release|x64.Build.0 = Release|Any CPU
{7E5E4BED-538C-4566-A005-DCC070AF8715}.Release|x86.ActiveCfg = Release|Any CPU
{7E5E4BED-538C-4566-A005-DCC070AF8715}.Release|x86.Build.0 = Release|Any CPU
+ {D2EE865B-B006-487A-9487-60A663636AC3}.AppVeyor|Any CPU.ActiveCfg = Release|Any CPU
+ {D2EE865B-B006-487A-9487-60A663636AC3}.AppVeyor|Any CPU.Build.0 = Release|Any CPU
+ {D2EE865B-B006-487A-9487-60A663636AC3}.AppVeyor|ARM.ActiveCfg = Release|Any CPU
+ {D2EE865B-B006-487A-9487-60A663636AC3}.AppVeyor|ARM.Build.0 = Release|Any CPU
+ {D2EE865B-B006-487A-9487-60A663636AC3}.AppVeyor|ARM64.ActiveCfg = Release|Any CPU
+ {D2EE865B-B006-487A-9487-60A663636AC3}.AppVeyor|ARM64.Build.0 = Release|Any CPU
+ {D2EE865B-B006-487A-9487-60A663636AC3}.AppVeyor|x64.ActiveCfg = Release|Any CPU
+ {D2EE865B-B006-487A-9487-60A663636AC3}.AppVeyor|x64.Build.0 = Release|Any CPU
+ {D2EE865B-B006-487A-9487-60A663636AC3}.AppVeyor|x86.ActiveCfg = Release|Any CPU
+ {D2EE865B-B006-487A-9487-60A663636AC3}.AppVeyor|x86.Build.0 = Release|Any CPU
+ {D2EE865B-B006-487A-9487-60A663636AC3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D2EE865B-B006-487A-9487-60A663636AC3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D2EE865B-B006-487A-9487-60A663636AC3}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {D2EE865B-B006-487A-9487-60A663636AC3}.Debug|ARM.Build.0 = Debug|Any CPU
+ {D2EE865B-B006-487A-9487-60A663636AC3}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {D2EE865B-B006-487A-9487-60A663636AC3}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {D2EE865B-B006-487A-9487-60A663636AC3}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {D2EE865B-B006-487A-9487-60A663636AC3}.Debug|x64.Build.0 = Debug|Any CPU
+ {D2EE865B-B006-487A-9487-60A663636AC3}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {D2EE865B-B006-487A-9487-60A663636AC3}.Debug|x86.Build.0 = Debug|Any CPU
+ {D2EE865B-B006-487A-9487-60A663636AC3}.DefaultBuild|Any CPU.ActiveCfg = Debug|Any CPU
+ {D2EE865B-B006-487A-9487-60A663636AC3}.DefaultBuild|Any CPU.Build.0 = Debug|Any CPU
+ {D2EE865B-B006-487A-9487-60A663636AC3}.DefaultBuild|ARM.ActiveCfg = Debug|Any CPU
+ {D2EE865B-B006-487A-9487-60A663636AC3}.DefaultBuild|ARM.Build.0 = Debug|Any CPU
+ {D2EE865B-B006-487A-9487-60A663636AC3}.DefaultBuild|ARM64.ActiveCfg = Debug|Any CPU
+ {D2EE865B-B006-487A-9487-60A663636AC3}.DefaultBuild|ARM64.Build.0 = Debug|Any CPU
+ {D2EE865B-B006-487A-9487-60A663636AC3}.DefaultBuild|x64.ActiveCfg = Debug|Any CPU
+ {D2EE865B-B006-487A-9487-60A663636AC3}.DefaultBuild|x64.Build.0 = Debug|Any CPU
+ {D2EE865B-B006-487A-9487-60A663636AC3}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU
+ {D2EE865B-B006-487A-9487-60A663636AC3}.DefaultBuild|x86.Build.0 = Debug|Any CPU
+ {D2EE865B-B006-487A-9487-60A663636AC3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D2EE865B-B006-487A-9487-60A663636AC3}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D2EE865B-B006-487A-9487-60A663636AC3}.Release|ARM.ActiveCfg = Release|Any CPU
+ {D2EE865B-B006-487A-9487-60A663636AC3}.Release|ARM.Build.0 = Release|Any CPU
+ {D2EE865B-B006-487A-9487-60A663636AC3}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {D2EE865B-B006-487A-9487-60A663636AC3}.Release|ARM64.Build.0 = Release|Any CPU
+ {D2EE865B-B006-487A-9487-60A663636AC3}.Release|x64.ActiveCfg = Release|Any CPU
+ {D2EE865B-B006-487A-9487-60A663636AC3}.Release|x64.Build.0 = Release|Any CPU
+ {D2EE865B-B006-487A-9487-60A663636AC3}.Release|x86.ActiveCfg = Release|Any CPU
+ {D2EE865B-B006-487A-9487-60A663636AC3}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -4443,14 +4485,15 @@ Global
{5991F6B5-EA4E-41E9-A4F6-7D3A50010FD6} = {B2AF4F3F-2828-47C3-8F3E-A0EA0BD66FF8}
{43135FB9-41DB-4F87-9771-CF2C762027C0} = {5F6BBAA8-EAD0-4B18-97E5-55B4F56DD760}
{7E5E4BED-538C-4566-A005-DCC070AF8715} = {C81ED1A3-D18C-4D80-A8F5-061994A14A60}
+ {D2EE865B-B006-487A-9487-60A663636AC3} = {0048447D-1D94-4E60-9DAD-7349C777CB4E}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
- 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
+ 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}
EndGlobalSection
EndGlobal
diff --git a/Software/Visual_Studio/Utilities/Tango.UITests/MainWindow.xaml b/Software/Visual_Studio/Utilities/Tango.UITests/MainWindow.xaml
index b8301312d..1ab00e18f 100644
--- a/Software/Visual_Studio/Utilities/Tango.UITests/MainWindow.xaml
+++ b/Software/Visual_Studio/Utilities/Tango.UITests/MainWindow.xaml
@@ -14,19 +14,11 @@
xmlns:commonControls="clr-namespace:Tango.PPC.Common.Controls;assembly=Tango.PPC.Common"
xmlns:explorer="clr-namespace:Tango.Explorer;assembly=Tango.Explorer"
mc:Ignorable="d"
- Title="MainWindow" Height="564.721" Width="504.315" DataContext="{Binding RelativeSource={RelativeSource Self}}">
+ Title="MainWindow" Height="1280" Width="800" DataContext="{Binding RelativeSource={RelativeSource Self}}">
<Grid>
- <Grid.RowDefinitions>
- <RowDefinition Height="232*"/>
- <RowDefinition Height="50"/>
- </Grid.RowDefinitions>
- <explorer:ExplorerControl x:Name="explorer" CurrentPath="{Binding CurrentPath,Mode=TwoWay}" />
- <StackPanel Orientation="Horizontal" Grid.Row="1">
- <Button Click="Button_Click">LOAD</Button>
- <Button Command="{Binding ElementName=explorer,Path=BackCommand}">BACK</Button>
- <TextBox Width="200" Margin="10 0 0 0" Text="{Binding ElementName=explorer,Path=CurrentPath}"></TextBox>
- </StackPanel>
+ <touch:TouchDatePicker VerticalAlignment="Center" Height="40" HorizontalAlignment="Center" Width="300" SelectedDate="12/15/2018" />
+ <!--<touch:TouchCalendar DisplayDateStart="12/10/2018" DisplayDateEnd="1/1/2019" SelectedDate="12/15/2018" HorizontalAlignment="Center" VerticalAlignment="Center" />-->
</Grid>
</Window>