From 97e45f70267d961168b77b149022b94022e0e199 Mon Sep 17 00:00:00 2001 From: Roy Ben-Shabat Date: Tue, 24 Apr 2018 19:05:53 +0300 Subject: Working on reporting... --- .../Tango.MachineStudio.UI/Images/bug.png | Bin 0 -> 5276 bytes .../TFS/SystemInformationModel.cs | 19 +++ .../TFS/SystemInformationTemplate.cshtml | 70 +++++++++ .../TFS/TeamFoundationServiceExtendedClient.cs | 160 +++++++++++++++++++++ .../TFS/TeamMembersProvider.cs | 19 +++ .../TFS/WorkItemValidationAttribute.cs | 32 +++++ .../Tango.MachineStudio.UI.csproj | 22 +++ .../Tango.MachineStudio.UI/ViewModelLocator.cs | 4 + .../ViewModels/LoadingViewVM.cs | 14 +- .../ViewModels/MainViewVM.cs | 28 +++- .../ViewModels/ReportIssueViewVM.cs | 43 ++++++ .../Tango.MachineStudio.UI/Views/MainView.xaml | 16 +++ .../Views/ReportIssueView.xaml | 92 ++++++++++++ .../Views/ReportIssueView.xaml.cs | 28 ++++ 14 files changed, 545 insertions(+), 2 deletions(-) create mode 100644 Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Images/bug.png create mode 100644 Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/TFS/SystemInformationModel.cs create mode 100644 Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/TFS/SystemInformationTemplate.cshtml create mode 100644 Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/TFS/TeamFoundationServiceExtendedClient.cs create mode 100644 Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/TFS/TeamMembersProvider.cs create mode 100644 Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/TFS/WorkItemValidationAttribute.cs create mode 100644 Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/ReportIssueViewVM.cs create mode 100644 Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/ReportIssueView.xaml create mode 100644 Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/ReportIssueView.xaml.cs (limited to 'Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI') diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Images/bug.png b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Images/bug.png new file mode 100644 index 000000000..ed4b8e6e6 Binary files /dev/null and b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Images/bug.png differ diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/TFS/SystemInformationModel.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/TFS/SystemInformationModel.cs new file mode 100644 index 000000000..eb9ef8012 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/TFS/SystemInformationModel.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Tango.BL.Entities; + +namespace Tango.MachineStudio.UI.TFS +{ + public class SystemInformationModel + { + public String ApplicationVersion { get; set; } + public String EmbeddedVersion { get; set; } + public String UserName { get; set; } + public String HostName { get; set; } + public Machine Machine { get; set; } + public String ConfigurationString { get; set; } + } +} diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/TFS/SystemInformationTemplate.cshtml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/TFS/SystemInformationTemplate.cshtml new file mode 100644 index 000000000..7b0c4a896 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/TFS/SystemInformationTemplate.cshtml @@ -0,0 +1,70 @@ +@{ + Tango.MachineStudio.UI.TFS.SystemInformationModel vm = Model as Tango.MachineStudio.UI.TFS.SystemInformationModel; +} + +
+
System Information
+ + + + + + + + + + + + + + + + + + + + + + + + +
Application Version:@vm.ApplicationVersion
Embedded Version:@vm.EmbeddedVersion
Host Name:@vm.HostName
User:@vm.UserName
+ +
Machine
+ + @if (vm.Machine != null) + { + + + + + + + + + + + + + + + + + + + + + + + + +
Organization:@vm.Machine.Organization.Name
Name:@vm.Machine.Name
S/N:@vm.Machine.SerialNumber
Version:@vm.Machine.MachineVersion.Version
+ +
Configuration
+
@vm.ConfigurationString
+ } + else + { +
Not Connected
+ } +
\ No newline at end of file diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/TFS/TeamFoundationServiceExtendedClient.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/TFS/TeamFoundationServiceExtendedClient.cs new file mode 100644 index 000000000..27b257e61 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/TFS/TeamFoundationServiceExtendedClient.cs @@ -0,0 +1,160 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using Tango.BL.Entities; +using Tango.Core.DI; +using Tango.Core.Helpers; +using Tango.Integration.Operation; +using Tango.Logging; +using Tango.MachineStudio.Common.Authentication; +using Tango.MachineStudio.Common.StudioApplication; +using Tango.SharedUI.Helpers; +using Tango.TFS; + +namespace Tango.MachineStudio.UI.TFS +{ + public class TeamFoundationServiceExtendedClient : TeamFoundationServiceClient + { + public Project Project { get; private set; } + + private bool _isInitialized; + public bool IsInitialized + { + get { return _isInitialized; } + private set { _isInitialized = value; RaisePropertyChangedAuto(); } + } + + public TeamFoundationServiceExtendedClient(string collectionURL, string userName, string personalToken) : base(collectionURL, userName, personalToken) + { + + } + + public Task UploadWorkItem(WorkItem workItem) + { + return UploadWorkItem(Project, workItem); + } + + public void Initialize() + { + Task.Factory.StartNew(() => + { + if (!IsInitialized) + { + Project = GetProject("Tango").Result; + IsInitialized = true; + } + }); + } + + public WorkItem CreateBug() + { + WorkItem item = new WorkItem(); + + IAuthenticationProvider auth = TangoIOC.Default.GetInstance(); + IStudioApplicationManager app = TangoIOC.Default.GetInstance(); + + item.Area = Project.Areas.FirstOrDefault(); + item.Iteration = Project.Iterations.FirstOrDefault(); + + TeamMember currentUser = Project.Members.SingleOrDefault(x => x.UniqueName.ToLower().Contains(auth.CurrentUser.Email.ToLower())); + item.CreatedBy = currentUser; + item.ChangedBy = currentUser; + item.AuthorizedAs = currentUser; + + item.FoundInBuild = app.Version; + item.Priority = Priority.Priority3; + item.Severity = Severity.Medium; + item.State = State.New; + item.Type = WorkItemType.Bug; + + var bitmap = UIHelper.TakeSnapshot(MainWindow.Instance); + String filePath = PathHelper.GetTempFilePath(); + bitmap.SaveJpeg(filePath, 30); + + item.Attachments.Add(new Attachment() + { + Description = "Screen Capture", + FilePath = filePath, + Name = "Screen Capture.jpg", + }); + + FileLogger appFileLogger = LogManager.Default.RegisteredLoggers.FirstOrDefault(x => x.GetType() == typeof(FileLogger)) as FileLogger; + FileLogger embeddedFileLogger = MachineOperator.EmbeddedLogManager.RegisteredLoggers.FirstOrDefault(x => x.GetType() == typeof(FileLogger)) as FileLogger; + + if (appFileLogger != null) + { + String appLogFile = PathHelper.GetTempFilePath(); + File.Copy(appFileLogger.LogFile, appLogFile); + + item.Attachments.Add(new Attachment() + { + Description = "Application Log File", + FilePath = appLogFile, + Name = Path.GetFileName(appFileLogger.LogFile), + }); + } + + if (embeddedFileLogger != null && File.Exists(embeddedFileLogger.LogFile)) + { + String embeddedLogFile = PathHelper.GetTempFilePath(); + File.Copy(appFileLogger.LogFile, embeddedLogFile); + + item.Attachments.Add(new Attachment() + { + Description = "Embedded Log File", + FilePath = embeddedLogFile, + Name = Path.GetFileName(embeddedFileLogger.LogFile), + }); + } + + SystemInformationModel sysModel = new SystemInformationModel(); + sysModel.ApplicationVersion = app.Version; + sysModel.EmbeddedVersion = "Fake Version"; + sysModel.HostName = Environment.MachineName; + sysModel.UserName = auth.CurrentUser.Contact.FullName; + + if (app.ConnectedMachine != null) + { + Machine machine = app.ConnectedMachine.Machine; + + sysModel.Machine = machine; + + MachineDesigner.Views.MainView machineView = new MachineDesigner.Views.MainView(); + machineView.Width = 1280; + machineView.Height = 1100; + machineView.PanelColumnDefinition.Width = new System.Windows.GridLength(0); + machineView.stackHeader.Visibility = Visibility.Collapsed; + machineView.Background = System.Windows.Media.Brushes.White; + machineView.DataContext = new MachineDesigner.ViewModels.MainViewVM() { SelectedMachine = machine, Configuration = machine.Configuration }; + + String configImageFile = PathHelper.GetTempFilePath(); + machineView.RenderToFile(configImageFile, System.Drawing.Imaging.ImageFormat.Jpeg, new System.Windows.Size(machineView.Width, machineView.Height), 100); + + item.Attachments.Add(new Attachment() + { + Description = "Machine Configuration", + FilePath = configImageFile, + Name = "Machine Configuration.jpg" + }); + + sysModel.ConfigurationString = machine.Configuration.CloneConfiguration().ToJsonString(); + } + + String html = String.Empty; + + using (var stream = EmbeddedResourceHelper.GetEmbeddedResourceStream("Tango.MachineStudio.UI.TFS.SystemInformationTemplate.cshtml")) + { + StreamReader reader = new StreamReader(stream); + html = reader.ReadToEnd(); + } + + item.SystemInformation = CodeGeneration.Helper.Parse(html, sysModel); + + return item; + } + } +} diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/TFS/TeamMembersProvider.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/TFS/TeamMembersProvider.cs new file mode 100644 index 000000000..0691ca6bd --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/TFS/TeamMembersProvider.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Tango.AutoComplete.Editors; +using Tango.Core.DI; + +namespace Tango.MachineStudio.UI.TFS +{ + public class TeamMembersProvider : ISuggestionProvider + { + public IEnumerable GetSuggestions(string filter) + { + return TangoIOC.Default.GetInstance().Project.Members.Where(x => x.AssignName.ToLower().Contains(filter.ToLower())); + } + } +} diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/TFS/WorkItemValidationAttribute.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/TFS/WorkItemValidationAttribute.cs new file mode 100644 index 000000000..1418d0576 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/TFS/WorkItemValidationAttribute.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Tango.TFS; + +namespace Tango.MachineStudio.UI.TFS +{ + public class WorkItemValidationAttribute : ValidationAttribute + { + public override bool IsValid(object value) + { + WorkItem item = value as WorkItem; + + if (String.IsNullOrWhiteSpace(item.Title)) + { + ErrorMessage = "Title is empty"; + return false; + } + + if (item.AssignedTo == null) + { + ErrorMessage = "Assigned To is empty"; + return false; + } + + return true; + } + } +} diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Tango.MachineStudio.UI.csproj b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Tango.MachineStudio.UI.csproj index 722d37d77..8ab6bb188 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Tango.MachineStudio.UI.csproj +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Tango.MachineStudio.UI.csproj @@ -147,6 +147,10 @@ MessageBoxWindow.xaml + + + + @@ -156,6 +160,7 @@ + @@ -182,6 +187,9 @@ DialogWindow.xaml + + ReportIssueView.xaml + ShutdownView.xaml @@ -258,6 +266,10 @@ Designer MSBuild:Compile + + Designer + MSBuild:Compile + Designer MSBuild:Compile @@ -319,6 +331,10 @@ {f441feee-322a-4943-b566-110e12fd3b72} Tango.BL + + {caedae94-11ed-473c-888a-268a6d38cd20} + Tango.CodeGeneration + {a34ee0f0-649d-41c8-8489-b6f1cc6924ee} Tango.Core @@ -347,6 +363,10 @@ {8491d07b-c1f6-4b62-a412-41b9fd2d6538} Tango.SharedUI + + {998f8471-dc1b-41b6-9d96-354e1b4e7a32} + Tango.TFS + {74e700b0-1156-4126-be40-ee450d3c3026} Tango.Transport @@ -440,6 +460,8 @@ + + diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs index c4b8a1a59..8e6f11452 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs @@ -19,9 +19,11 @@ using Tango.MachineStudio.UI.Navigation; using Tango.MachineStudio.UI.Notifications; using Tango.MachineStudio.UI.StudioApplication; using Tango.MachineStudio.UI.SupervisingController; +using Tango.MachineStudio.UI.TFS; using Tango.MachineStudio.UI.ViewModels; using Tango.MachineStudio.UI.Views; using Tango.Settings; +using Tango.TFS; namespace Tango.MachineStudio.UI { @@ -60,7 +62,9 @@ namespace Tango.MachineStudio.UI TangoIOC.Default.Unregister(); TangoIOC.Default.Unregister(); TangoIOC.Default.Unregister(); + TangoIOC.Default.Unregister(); + TangoIOC.Default.Register(new TeamFoundationServiceExtendedClient("https://twinetfs.visualstudio.com/DefaultCollection", "Roy", "szzfokrceo4rhd4eqi5qpmxn3pa5iwl3q7tlqd36l2m7smz2ynoa")); TangoIOC.Default.Register(); TangoIOC.Default.Register(); TangoIOC.Default.Register(); diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoadingViewVM.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoadingViewVM.cs index 512341f7e..2b2b442f7 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoadingViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoadingViewVM.cs @@ -15,6 +15,7 @@ using Tango.SharedUI; using Tango.BL; using Tango.MachineStudio.Common.EventLogging; using Tango.BL.Enumerations; +using Tango.MachineStudio.UI.TFS; namespace Tango.MachineStudio.UI.ViewModels { @@ -25,6 +26,7 @@ namespace Tango.MachineStudio.UI.ViewModels public class LoadingViewVM : ViewModel { private INotificationProvider _notificationProvider; + private TeamFoundationServiceExtendedClient _tfs; private INavigationManager _navigationManager; private IStudioModuleLoader _studioModuleLoader; private IEventLogger _eventLogger; @@ -45,8 +47,9 @@ namespace Tango.MachineStudio.UI.ViewModels /// The navigation manager. /// The studio module loader. /// The notification provider. - public LoadingViewVM(IStudioApplicationManager applicationManager, INavigationManager navigationManager, IStudioModuleLoader studioModuleLoader, INotificationProvider notificationProvider, IEventLogger eventLogger) + public LoadingViewVM(IStudioApplicationManager applicationManager, INavigationManager navigationManager, IStudioModuleLoader studioModuleLoader, INotificationProvider notificationProvider, IEventLogger eventLogger, TeamFoundationServiceExtendedClient teamFoundationClient) { + _tfs = teamFoundationClient; _eventLogger = eventLogger; ApplicationManager = applicationManager; _navigationManager = navigationManager; @@ -66,6 +69,15 @@ namespace Tango.MachineStudio.UI.ViewModels { try { + try + { + _tfs.Initialize(); + } + catch (Exception ex) + { + LogManager.Log(ex, "Could not initialize Team Foundation Service client."); + } + ObservablesEntitiesAdapter.Instance.Initialize(); _eventLogger.Log(EventTypes.ApplicationStarted, "Application Started!"); diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs index 2144983de..0882267e8 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs @@ -29,6 +29,7 @@ using Tango.MachineStudio.Common.StudioApplication; using Tango.MachineStudio.Common.Update; using Tango.MachineStudio.UI.StudioApplication; using Tango.MachineStudio.UI.SupervisingController; +using Tango.MachineStudio.UI.TFS; using Tango.MachineStudio.UI.Views; using Tango.MachineStudio.UI.Windows; using Tango.PMR.Stubs; @@ -142,6 +143,11 @@ namespace Tango.MachineStudio.UI.ViewModels /// public RelayCommand ResolveMachineEventCommand { get; set; } + /// + /// Gets or sets the report issue command. + /// + public RelayCommand ReportIssueCommand { get; set; } + private IAuthenticationProvider _authenticationProvider; /// /// Gets or sets the authentication provider. @@ -182,6 +188,11 @@ namespace Tango.MachineStudio.UI.ViewModels set { _applicationManager = value; RaisePropertyChangedAuto(); } } + /// + /// Gets or sets the TFS client. + /// + public TeamFoundationServiceExtendedClient TFSClient { get; set; } + /// /// Gets or sets the speech provider. /// @@ -247,8 +258,9 @@ namespace Tango.MachineStudio.UI.ViewModels IEventLogger eventLogger, IDiagnosticsFrameProvider frameProvider, ISpeechProvider speechProvider, - IHtmlPresenter htmlPresenter) : base() + IHtmlPresenter htmlPresenter, TeamFoundationServiceExtendedClient tfs) : base() { + TFSClient = tfs; _eventLogger = eventLogger; _navigation = navigationManager; AuthenticationProvider = authenticationProvider; @@ -288,6 +300,8 @@ namespace Tango.MachineStudio.UI.ViewModels ToggleSpeechCommand = new RelayCommand(() => { SpeechProvider.Mute = !SpeechProvider.Mute; }); ResolveMachineEventCommand = new RelayCommand(ResolveMachineEvent); + + ReportIssueCommand = new RelayCommand(ReportIssue); } private void MachineEventsStateProvider_EventsResolved(object sender, IEnumerable e) @@ -628,5 +642,17 @@ namespace Tango.MachineStudio.UI.ViewModels _notificationProvider.ShowWarning("Could not locate guidance content for the specified event."); } } + + private void ReportIssue() + { + _notificationProvider.ShowModalDialog(new ReportIssueViewVM(TFSClient.Project, TFSClient.CreateBug()), async (vm) => + { + using (_notificationProvider.PushTaskItem("Uploading bug report...")) + { + await TFSClient.UploadWorkItem(vm.WorkItem); + } + + }, null); + } } } diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/ReportIssueViewVM.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/ReportIssueViewVM.cs new file mode 100644 index 000000000..9660db8a5 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/ReportIssueViewVM.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Tango.MachineStudio.Common.Notifications; +using Tango.MachineStudio.UI.TFS; +using Tango.SharedUI.Components; +using Tango.TFS; + +namespace Tango.MachineStudio.UI.ViewModels +{ + public class ReportIssueViewVM : DialogViewVM + { + public SelectedObjectCollection SelectedTags { get; set; } + + public Project Project { get; set; } + + [WorkItemValidation] + public WorkItem WorkItem { get; set; } + + public ReportIssueViewVM() : base() + { + + } + + public ReportIssueViewVM(Project project, WorkItem workItem) : this() + { + Project = project; + WorkItem = workItem; + SelectedTags = new SelectedObjectCollection(Project.Tags.ToObservableCollection(), new System.Collections.ObjectModel.ObservableCollection()); + } + + protected override void Accept() + { + if (Validate()) + { + WorkItem.Tags = SelectedTags.SynchedSource.ToList(); + base.Accept(); + } + } + } +} diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml index dd3d122b6..86723479b 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml @@ -316,6 +316,22 @@ + + diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/ReportIssueView.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/ReportIssueView.xaml new file mode 100644 index 000000000..f2e3038b9 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/ReportIssueView.xaml @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + Report Issue + + + + + + + + + + + + Tags + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * + + + + + + + diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/ReportIssueView.xaml.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/ReportIssueView.xaml.cs new file mode 100644 index 000000000..91a288d3e --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/ReportIssueView.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.MachineStudio.UI.Views +{ + /// + /// Interaction logic for ReportIssueView.xaml + /// + public partial class ReportIssueView : UserControl + { + public ReportIssueView() + { + InitializeComponent(); + } + } +} -- cgit v1.3.1