aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs
diff options
context:
space:
mode:
authorRoy Ben-Shabat <Roy@Twine-s.com>2018-07-03 16:36:54 +0300
committerRoy Ben-Shabat <Roy@Twine-s.com>2018-07-03 16:36:54 +0300
commit856773f7eafb9d04500ede0cfae9c0e75231418b (patch)
treed1b4f9577b5a47dd10fa7243823fd1016de1418e /Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs
parent94e4072838c235be4d48a4635e47204a39cdd78b (diff)
downloadTango-856773f7eafb9d04500ede0cfae9c0e75231418b.tar.gz
Tango-856773f7eafb9d04500ede0cfae9c0e75231418b.zip
Implemented StubsView & VM !!!
Diffstat (limited to 'Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs')
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/Properties/Resources.Designer.cs29
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/Properties/Resources.resx4
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/Resources/CodeTabTemplate.cs20
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/StubManager.cs181
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/StubOnExecuteParameters.cs30
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/Tango.MachineStudio.Stubs.csproj5
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/ViewModels/CodeTabVM.cs100
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/ViewModels/MainViewVM.cs463
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/ViewModels/StubSnippetVM.cs47
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/Views/MainView.xaml325
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/Views/MainView.xaml.cs21
11 files changed, 16 insertions, 1209 deletions
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/Properties/Resources.Designer.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/Properties/Resources.Designer.cs
index e712344b4..646376036 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/Properties/Resources.Designer.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/Properties/Resources.Designer.cs
@@ -59,34 +59,5 @@ namespace Tango.MachineStudio.Stubs.Properties {
resourceCulture = value;
}
}
-
- /// <summary>
- /// Looks up a localized string similar to using System;
- ///using System.Text;
- ///using System.Linq;
- ///using System.Drawing;
- ///using System.Diagnostics;
- ///using System.Windows.Forms;
- ///using System.Threading;
- ///using System.Threading.Tasks;
- ///using System.Collections.Generic;
- ///using Tango.Stubs.UI;
- ///
- ///public void OnExecute(StubManager stubManager)
- ///{
- /// for (int i = 0; i &lt; 10; i++)
- /// {
- /// stubManager.Run(&quot;calculate&quot;, 10, 5);
- /// Thread.Sleep(10);
- /// }
- ///}
- ///
- ///.
- /// </summary>
- internal static string CodeTabTemplate {
- get {
- return ResourceManager.GetString("CodeTabTemplate", resourceCulture);
- }
- }
}
}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/Properties/Resources.resx b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/Properties/Resources.resx
index 7693cadac..1af7de150 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/Properties/Resources.resx
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/Properties/Resources.resx
@@ -117,8 +117,4 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
- <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
- <data name="CodeTabTemplate" type="System.Resources.ResXFileRef, System.Windows.Forms">
- <value>..\Resources\CodeTabTemplate.cs;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
- </data>
</root> \ No newline at end of file
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/Resources/CodeTabTemplate.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/Resources/CodeTabTemplate.cs
deleted file mode 100644
index b21e6e758..000000000
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/Resources/CodeTabTemplate.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-using System;
-using System.Text;
-using System.Linq;
-using System.Drawing;
-using System.Diagnostics;
-using System.Windows.Forms;
-using System.Threading;
-using System.Threading.Tasks;
-using System.Collections.Generic;
-using Tango.MachineStudio.Stubs;
-
-public void OnExecute(StubManager stubManager)
-{
- for (int i = 0; i < 10; i++)
- {
- stubManager.Run("calculate", 10, 5);
- Thread.Sleep(10);
- }
-}
-
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/StubManager.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/StubManager.cs
deleted file mode 100644
index 1808e2a53..000000000
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/StubManager.cs
+++ /dev/null
@@ -1,181 +0,0 @@
-using Google.Protobuf;
-using Newtonsoft.Json;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Reflection;
-using System.Text;
-using System.Threading;
-using System.Threading.Tasks;
-using Tango.PMR;
-using Tango.PMR.Common;
-using Tango.Stubs;
-using Tango.Transport;
-using Tango.Transport.Adapters;
-
-namespace Tango.MachineStudio.Stubs
-{
- /// <summary>
- /// Represents a manager capable of executing stub scripts asynchronously.
- /// </summary>
- public class StubManager
- {
- public ITransportAdapter Adapter { get; private set; }
-
- /// <summary>
- /// Occurs when the stub has failed to execute.
- /// </summary>
- public event EventHandler<Exception> Failed;
-
- /// <summary>
- /// Occurs when the stub has completed successfully.
- /// </summary>
- public event EventHandler<String> Completed;
-
- /// <summary>
- /// Occurs when the stub has been initialized and executed.
- /// </summary>
- public event EventHandler<String> Executed;
-
- /// <summary>
- /// Gets a value indicating whether this <see cref="StubManager"/> is aborted.
- /// </summary>
- internal bool Aborted { get; private set; }
-
- /// <summary>
- /// Initializes a new instance of the <see cref="StubManager"/> class.
- /// </summary>
- /// <param name="adapter">The adapter.</param>
- public StubManager(ITransportAdapter adapter)
- {
- Adapter = adapter;
- }
-
- /// <summary>
- /// Aborts the current script.
- /// </summary>
- internal void Abort()
- {
- Aborted = true;
- }
-
- /// <summary>
- /// Runs the specified stub name.
- /// </summary>
- /// <param name="stubName">Name of the stub.</param>
- /// <param name="args">The arguments.</param>
- public void Run(String stubName, params Object[] args)
- {
- if (Aborted) return;
-
- var stubType = StubBase.GetAvailableRequestStubs().SingleOrDefault(x => x.Name.ToLower() == stubName.ToLower() || x.Name.Replace("Request", "").ToLower() == stubName.ToLower());
- if (stubType == null)
- {
- OnFailed(new ArgumentException("Invalid stub '" + stubName + "'."));
- return;
- }
-
- var stubProps = stubType.GetProperties(BindingFlags.Public | BindingFlags.Instance);
-
- if (stubProps.Length > args.Length)
- {
- OnFailed(new ArgumentOutOfRangeException("Not enough arguments for " + stubType.Name + "."));
- return;
- }
-
- Executed?.Invoke(this, stubType.Name);
-
- try
- {
- MessageContainer container = new MessageContainer();
- container.Token = Guid.NewGuid().ToString();
- container.Type = MessageFactory.ParseMessageType(stubType.Name);
-
- Object request = Activator.CreateInstance(stubType);
-
- int argIndex = 0;
- foreach (var prop in stubProps)
- {
- String arg = args[argIndex++].ToString();
-
- if (prop.PropertyType == typeof(UInt32))
- {
- prop.SetValue(request, UInt32.Parse(arg));
- }
- else if (prop.PropertyType == typeof(bool))
- {
- prop.SetValue(request, bool.Parse(arg));
- }
- else
- {
- object converted = Convert.ChangeType(arg, prop.PropertyType);
- prop.SetValue(request, converted);
- }
- }
-
- container.Data = typeof(IMessage).GetExtensionMethod(typeof(ByteString).Assembly, "ToByteString").Invoke(request, new object[] { request }) as ByteString;
-
- byte[] requestData = container.ToByteArray();
-
- bool done = false;
-
- Task.Factory.StartNew(() =>
- {
- Adapter.Write(requestData);
-
- DateTime startTime = DateTime.Now;
-
- MessageContainer responseContainer = null;
-
- Adapter.DataAvailable += (sender, data) =>
- {
- responseContainer = MessageFactory.ParseContainer(data);
- };
-
- while (responseContainer == null)
- {
- Thread.Sleep(2);
-
- if (DateTime.Now > startTime.AddSeconds(2))
- {
- done = true;
- OnFailed(new TimeoutException("Response has failed to arrive after 2 seconds."));
- return;
- }
- }
-
- IMessage message = MessageFactory.ExtractMessageFromContainer(responseContainer);
- OnCompleted(JsonConvert.SerializeObject(message, Formatting.Indented));
- done = true;
- });
-
- while (!done)
- {
- Thread.Sleep(2);
- }
- }
- catch (Exception ex)
- {
- OnFailed(ex);
- }
- }
-
- /// <summary>
- /// Raises the <see cref="Failed"/> event.
- /// </summary>
- /// <param name="ex">The exception.</param>
- protected virtual void OnFailed(Exception ex)
- {
- Failed?.Invoke(this, ex);
- }
-
- /// <summary>
- /// Raises the <see cref="Completed"/> event.
- /// </summary>
- /// <param name="response">The response.</param>
- protected virtual void OnCompleted(String response)
- {
- Completed?.Invoke(this, response);
- }
- }
-}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/StubOnExecuteParameters.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/StubOnExecuteParameters.cs
deleted file mode 100644
index 761375818..000000000
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/StubOnExecuteParameters.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Tango.Scripting;
-
-namespace Tango.MachineStudio.Stubs
-{
- /// <summary>
- /// Represents the global object which will be sent to the scripting engine.
- /// </summary>
- /// <seealso cref="Tango.Scripting.OnExecuteParameters" />
- public class StubOnExecuteParameters : OnExecuteParameters
- {
- /// <summary>
- /// Provides access to the script stub manager.
- /// </summary>
- public StubManager stubManager;
-
- /// <summary>
- /// Initializes a new instance of the <see cref="StubOnExecuteParameters"/> class.
- /// </summary>
- /// <param name="manager">The manager.</param>
- public StubOnExecuteParameters(StubManager manager)
- {
- stubManager = manager;
- }
- }
-}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/Tango.MachineStudio.Stubs.csproj b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/Tango.MachineStudio.Stubs.csproj
index a3618de3a..99ba89122 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/Tango.MachineStudio.Stubs.csproj
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/Tango.MachineStudio.Stubs.csproj
@@ -68,17 +68,12 @@
<Reference Include="PresentationFramework" />
</ItemGroup>
<ItemGroup>
- <None Include="Resources\CodeTabTemplate.cs" />
<Compile Include="..\..\..\Versioning\MachineStudio.cs">
<Link>MachineStudio.cs</Link>
</Compile>
- <Compile Include="StubManager.cs" />
- <Compile Include="StubOnExecuteParameters.cs" />
<Compile Include="StubsModuleSettings.cs" />
<Compile Include="ViewModelLocator.cs" />
- <Compile Include="ViewModels\CodeTabVM.cs" />
<Compile Include="ViewModels\MainViewVM.cs" />
- <Compile Include="ViewModels\StubSnippetVM.cs" />
<Compile Include="Views\MainView.xaml.cs">
<DependentUpon>MainView.xaml</DependentUpon>
<SubType>
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/ViewModels/CodeTabVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/ViewModels/CodeTabVM.cs
deleted file mode 100644
index 451e1a1f0..000000000
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/ViewModels/CodeTabVM.cs
+++ /dev/null
@@ -1,100 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Tango.Core.Commands;
-using Tango.SharedUI;
-
-namespace Tango.MachineStudio.Stubs.ViewModels
-{
- /// <summary>
- /// Represents a single script editor tab view model;
- /// </summary>
- /// <seealso cref="Tango.SharedUI.ViewModel" />
- public class CodeTabVM : ViewModel
- {
- private String _title;
- /// <summary>
- /// Gets or sets the script title/file name.
- /// </summary>
- public String Title
- {
- get
- {
- return File != null ? Path.GetFileName(File) : _title;
- }
- set
- {
- _title = value;
- RaisePropertyChanged(nameof(Title));
- }
- }
-
- private String _file;
- /// <summary>
- /// Gets or sets the full script file path.
- /// </summary>
- public String File
- {
- get { return _file; }
- set
- {
- _file = value;
- RaisePropertyChanged(nameof(File));
- RaisePropertyChanged(nameof(Title));
- }
- }
-
- private String _code;
- /// <summary>
- /// Gets or sets the script code.
- /// </summary>
- public String Code
- {
- get { return _code; }
- set { _code = value; RaisePropertyChanged(nameof(Code)); }
- }
-
- private bool _isRunning;
- /// <summary>
- /// Gets or sets a value indicating whether this instance is running.
- /// </summary>
- public bool IsRunning
- {
- get { return _isRunning; }
- set { _isRunning = value; RaisePropertyChangedAuto(); }
- }
-
- private RelayCommand _insertCodeSnippetCommand;
- /// <summary>
- /// Gets or sets the insert snippet command. (Inserts stub snippet to editor)
- /// </summary>
- public RelayCommand InsertSnippetCommand
- {
- get { return _insertCodeSnippetCommand; }
- set { _insertCodeSnippetCommand = value; RaisePropertyChanged(nameof(InsertSnippetCommand)); }
- }
-
- /// <summary>
- /// Initializes a new instance of the <see cref="CodeTabVM"/> class.
- /// </summary>
- public CodeTabVM()
- {
- Title = "untitled";
- Code = Properties.Resources.CodeTabTemplate;
- }
-
- /// <summary>
- /// Returns a <see cref="System.String" /> that represents this instance.
- /// </summary>
- /// <returns>
- /// A <see cref="System.String" /> that represents this instance.
- /// </returns>
- public override string ToString()
- {
- return Title;
- }
- }
-}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/ViewModels/MainViewVM.cs
index afd5e4d70..f222b7584 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/ViewModels/MainViewVM.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/ViewModels/MainViewVM.cs
@@ -12,10 +12,12 @@ using Tango.Core.Commands;
using Tango.MachineStudio.Common;
using Tango.MachineStudio.Common.Notifications;
using Tango.MachineStudio.Common.StudioApplication;
+using Tango.PMR;
using Tango.Scripting;
using Tango.Settings;
using Tango.SharedUI;
using Tango.Stubs;
+using Tango.Stubs.ViewModels;
using Tango.Transport;
using Tango.Transport.Adapters;
@@ -27,8 +29,6 @@ namespace Tango.MachineStudio.Stubs.ViewModels
/// <seealso cref="Tango.SharedUI.ViewModel" />
public class MainViewVM : StudioViewModel<StubsModule>
{
- private UsbTransportAdapter _adapter; //Holds the USB transport adapter.
- private StubManager _stubManager;
private INotificationProvider _notification;
private StubsModuleSettings _settings;
@@ -58,162 +58,18 @@ namespace Tango.MachineStudio.Stubs.ViewModels
}
}
+ private StubsViewVM _stubsViewVM;
/// <summary>
- /// Gets or sets the code tabs.
+ /// Gets or sets the stubs view vm.
/// </summary>
- public ObservableCollection<CodeTabVM> CodeTabs { get; set; }
-
- /// <summary>
- /// Gets or sets the additional highlight C# types.
- /// </summary>
- public ObservableCollection<KeyValuePair<String, Type>> HighlightTypes { get; set; }
-
- /// <summary>
- /// Gets or sets the collection of stub snippets.
- /// </summary>
- public ObservableCollection<StubSnippetVM> StubSnippets { get; set; }
-
- private StubSnippetVM _selectedStubSnippet;
- /// <summary>
- /// Gets or sets the selected stub snippet.
- /// </summary>
- public StubSnippetVM SelectedStubSnippet
- {
- get { return _selectedStubSnippet; }
- set { _selectedStubSnippet = value; RaisePropertyChanged(nameof(SelectedStubSnippet)); }
- }
-
- private String _log;
- /// <summary>
- /// Gets or sets the current response log.
- /// </summary>
- public String Log
+ public StubsViewVM StubsViewVM
{
- get { return _log; }
- set { _log = value; RaisePropertyChanged(nameof(Log)); }
- }
-
- private CodeTabVM _selectedCodeTab;
- /// <summary>
- /// Gets or sets the selected code tab.
- /// </summary>
- public CodeTabVM SelectedCodeTab
- {
- get { return _selectedCodeTab; }
- set { _selectedCodeTab = value; RaisePropertyChanged(nameof(SelectedCodeTab)); InvalidateRelayCommands(); }
- }
-
- private bool _isConnected;
- /// <summary>
- /// Gets or sets a value indicating whether the USB adapter is connected.
- /// </summary>
- public bool IsConnected
- {
- get { return _isConnected; }
- set { _isConnected = value; RaisePropertyChanged(nameof(IsConnected)); InvalidateRelayCommands(); }
- }
-
- private List<String> _ports;
- /// <summary>
- /// Gets or sets the available USB ports.
- /// </summary>
- public List<String> Ports
- {
- get { return _ports; }
- set { _ports = value; RaisePropertyChanged(nameof(Ports)); }
- }
-
- private String _selectedPort;
- /// <summary>
- /// Gets or sets the selected USB port.
- /// </summary>
- public String SelectedPort
- {
- get { return _selectedPort; }
- set { _selectedPort = value; RaisePropertyChanged(nameof(SelectedPort)); InvalidateRelayCommands(); }
- }
-
- private String _status;
- /// <summary>
- /// Gets or sets the current status bar text.
- /// </summary>
- public String Status
- {
- get { return _status; }
- set { _status = value; RaisePropertyChanged(nameof(Status)); }
- }
-
- private bool _isRunning;
- /// <summary>
- /// Gets or sets a value indicating whether a stub is currently running.
- /// </summary>
- public bool IsRunning
- {
- get { return _isRunning; }
- set { _isRunning = value; RaisePropertyChanged(nameof(IsRunning)); InvalidateRelayCommands(); }
+ get { return _stubsViewVM; }
+ set { _stubsViewVM = value; RaisePropertyChangedAuto(); }
}
#endregion
- #region Commands
-
- /// <summary>
- /// Gets or sets the new command.
- /// </summary>
- public RelayCommand NewCommand { get; set; }
-
- /// <summary>
- /// Gets or sets the close tab command.
- /// </summary>
- public RelayCommand<CodeTabVM> CloseTabCommand { get; set; }
-
- /// <summary>
- /// Gets or sets the run command.
- /// </summary>
- public RelayCommand RunCommand { get; set; }
-
- /// <summary>
- /// Gets or sets the stop command.
- /// </summary>
- public RelayCommand StopCommand { get; set; }
-
- /// <summary>
- /// Gets or sets the toggle connection command.
- /// </summary>
- public RelayCommand ToggleConnectionCommand { get; set; }
-
- /// <summary>
- /// Gets or sets the open command.
- /// </summary>
- public RelayCommand OpenCommand { get; set; }
-
- /// <summary>
- /// Gets or sets the save command.
- /// </summary>
- public RelayCommand SaveCommand { get; set; }
-
- /// <summary>
- /// Gets or sets the save as command.
- /// </summary>
- public RelayCommand SaveAsCommand { get; set; }
-
- /// <summary>
- /// Gets or sets the stub snippet selected command.
- /// </summary>
- public RelayCommand StubSnippetSelectedCommand { get; set; }
-
- /// <summary>
- /// Gets or sets the insert snippet command.
- /// </summary>
- public RelayCommand<String> InsertSnippetCommand { get; set; }
-
- /// <summary>
- /// Gets or sets the exit command.
- /// </summary>
- public RelayCommand ExitCommand { get; set; }
-
- #endregion
-
#region Constructors
/// <summary>
@@ -221,310 +77,14 @@ namespace Tango.MachineStudio.Stubs.ViewModels
/// </summary>
public MainViewVM(IStudioApplicationManager applicationManager, INotificationProvider notification)
{
+ StubsViewVM = new StubsViewVM(ConnectionMode.External);
+
_settings = SettingsManager.Default.GetOrCreate<StubsModuleSettings>();
ApplicationManager = applicationManager;
_notification = notification;
- CodeTabs = new ObservableCollection<CodeTabVM>();
-
- NewCommand = new RelayCommand(CreateNewTab);
- CloseTabCommand = new RelayCommand<CodeTabVM>(OnTabClosing);
- RunCommand = new RelayCommand(RunTab, (x) => (IsConnected || UseConnectedMachine) && !IsRunning && SelectedCodeTab != null);
- StopCommand = new RelayCommand(StopTab, (x) => (IsConnected || UseConnectedMachine) && IsRunning && SelectedCodeTab != null);
- InsertSnippetCommand = new RelayCommand<string>((x) => { });
-
- HighlightTypes = new ObservableCollection<KeyValuePair<string, Type>>();
- HighlightTypes.Add(new KeyValuePair<string, Type>("stubManager", typeof(StubManager)));
-
- StubSnippets = new ObservableCollection<StubSnippetVM>();
-
- foreach (var stubType in StubBase.GetAvailableRequestStubs())
- {
- StubSnippetVM snippet = new StubSnippetVM();
- snippet.Name = stubType.Name.Replace("Stub_", "");
- snippet.Code = String.Format("stubManager.Run(\"{0}\" ,{1});", stubType.Name, String.Join(", ", stubType.GetProperties(BindingFlags.Public | BindingFlags.Instance).Select(x => x.PropertyType.Name == "string" ? "\"string\"" : x.PropertyType.Name)));
- StubSnippets.Add(snippet);
- }
-
- ToggleConnectionCommand = new RelayCommand(ToggleConnection, (x) => !IsRunning);
- OpenCommand = new RelayCommand(OpenFile);
- SaveCommand = new RelayCommand(SaveFile);
- SaveAsCommand = new RelayCommand(SaveAsFile);
- StubSnippetSelectedCommand = new RelayCommand(OnStubSnippetSelected);
- ExitCommand = new RelayCommand(() => Application.Current.Shutdown());
-
- Ports = new List<string>()
- {
- "COM1",
- "COM2",
- "COM3",
- "COM4",
- "COM5",
- "COM6",
- "COM7",
- "COM8",
- "COM9",
- };
-
- SelectedPort = _settings.SelectedPort != null ? _settings.SelectedPort : Ports.First();
-
- Status = "Ready";
-
- if (_settings.LastTabs.Count > 0)
- {
- foreach (var file in _settings.LastTabs)
- {
- if (File.Exists(file))
- {
- OpenFile(file);
- }
- }
- }
- else
- {
- CreateNewTab();
- }
- }
-
- #endregion
-
- #region Virtual Methods
-
- /// <summary>
- /// Called when a stub snippet is double clicked.
- /// </summary>
- protected virtual void OnStubSnippetSelected()
- {
- if (SelectedStubSnippet != null)
- {
- if (InsertSnippetCommand != null)
- {
- InsertSnippetCommand.Execute(SelectedStubSnippet.Code);
- }
- }
- }
-
- /// <summary>
- /// Called when user closes a script tab.
- /// </summary>
- /// <param name="codeTab">The code tab.</param>
- protected virtual void OnTabClosing(CodeTabVM codeTab)
- {
- CodeTabs.Remove(codeTab);
- }
-
- #endregion
-
- #region Private Methods
-
- /// <summary>
- /// Saves the selected script file.
- /// </summary>
- private void SaveFile()
- {
- if (SelectedCodeTab != null)
- {
- if (SelectedCodeTab.File == null)
- {
- SaveAsFile();
- }
- else
- {
- File.WriteAllText(SelectedCodeTab.File, SelectedCodeTab.Code);
- }
- }
- }
-
- /// <summary>
- /// Saves the selected script file.
- /// </summary>
- private void SaveAsFile()
- {
- if (SelectedCodeTab != null)
- {
- SaveFileDialog dlg = new SaveFileDialog();
- dlg.Filter = "C# Script Files|*.cs";
- dlg.DefaultExt = ".cs";
- if (dlg.ShowDialog().Value)
- {
- File.WriteAllText(dlg.FileName, SelectedCodeTab.Code);
- SelectedCodeTab.File = dlg.FileName;
- }
- }
- }
-
- /// <summary>
- /// Opens a script from HD.
- /// </summary>
- private void OpenFile()
- {
- OpenFileDialog dlg = new OpenFileDialog();
- dlg.Filter = "C# Script Files|*.cs";
- dlg.Multiselect = true;
- if (dlg.ShowDialog().Value)
- {
- foreach (var file in dlg.FileNames)
- {
- OpenFile(file);
- }
- }
- }
-
- /// <summary>
- /// Opens the file.
- /// </summary>
- /// <param name="file">The file.</param>
- private void OpenFile(String file)
- {
- var newTab = new CodeTabVM();
- newTab.File = file;
- newTab.Code = File.ReadAllText(file);
- CodeTabs.Add(newTab);
- SelectedCodeTab = newTab;
- }
-
- /// <summary>
- /// Toggles the USB adapter connection.
- /// </summary>
- private void ToggleConnection()
- {
- try
- {
- if (!IsConnected)
- {
- _adapter = new UsbTransportAdapter(SelectedPort);
- _adapter.Connect().Wait();
- IsConnected = true;
- }
- else
- {
- _adapter.Disconnect().Wait();
- IsConnected = false;
- }
- }
- catch (Exception ex)
- {
- MessageBox.Show(ex.ToString(), "Tango");
- }
- }
-
- /// <summary>
- /// Creates a new script tab.
- /// </summary>
- private void CreateNewTab()
- {
- var newTab = new CodeTabVM();
- CodeTabs.Add(newTab);
- SelectedCodeTab = newTab;
- }
-
- /// <summary>
- /// Runs the selected script tab.
- /// </summary>
- private async void RunTab()
- {
- if (UseConnectedMachine && !ApplicationManager.IsMachineConnected)
- {
- _notification.ShowError("Cannot execute stub while 'Connected Machine' is set but no machine connected.");
- return;
- }
-
- IsRunning = true;
- SelectedCodeTab.IsRunning = true;
- Log = (DateTime.Now.ToTimeString() + ": ") + "Executing script '" + SelectedCodeTab.Title + "'..." + Environment.NewLine;
-
- await Task.Factory.StartNew(async () =>
- {
- try
- {
- ITransportAdapter adapter = _adapter;
-
- if (ApplicationManager.IsMachineConnected && UseConnectedMachine)
- {
- adapter = ApplicationManager.ConnectedMachine.Adapter;
- }
-
- _stubManager = new StubManager(adapter);
- var thisStubManager = _stubManager;
- _stubManager.Completed += Manager_Completed;
- _stubManager.Failed += Manager_Failed;
- _stubManager.Executed += Manager_Executed;
-
- ScriptEngine engine = new ScriptEngine(new StubOnExecuteParameters(_stubManager));
-
- engine.ReferencedAssemblies.Add(this.GetType());
- await engine.Run(SelectedCodeTab.Code,null);
-
- if (!thisStubManager.Aborted)
- {
- IsRunning = false;
- SelectedCodeTab.IsRunning = false;
- }
- }
- catch (Exception ex)
- {
- IsRunning = false;
- SelectedCodeTab.IsRunning = false;
- MessageBox.Show(ex.Message, "Tango");
- }
- });
- }
-
- /// <summary>
- /// Stops the currently current script.
- /// </summary>
- private void StopTab()
- {
- if (_stubManager != null)
- {
- _stubManager.Abort();
- IsRunning = false;
- SelectedCodeTab.IsRunning = false;
- Status = "Stopped!";
- Log += (DateTime.Now.ToTimeString() + ": ") + "Stopped!" + Environment.NewLine;
- }
- }
-
- #endregion
-
- #region Event Handlers
-
- /// <summary>
- /// Handled the <see cref="StubManager"/> Executed event.
- /// </summary>
- /// <param name="sender">The sender.</param>
- /// <param name="stubName">Name of the stub.</param>
- private void Manager_Executed(object sender, string stubName)
- {
- Log += (DateTime.Now.ToTimeString() + ": ") + "Executing '" + stubName + "'..." + Environment.NewLine;
- Status = "Executing " + stubName + "...";
- }
-
- /// <summary>
- /// Handled the <see cref="StubManager"/> Failed event.
- /// </summary>
- /// <param name="sender">The sender.</param>
- /// <param name="ex">The exception.</param>
- private void Manager_Failed(object sender, Exception ex)
- {
- if (IsRunning)
- {
- Log += (DateTime.Now.ToTimeString() + ": ") + ex.Message + Environment.NewLine;
- Status = "Failed!";
- }
- }
-
- /// <summary>
- /// Handled the <see cref="StubManager"/> Completed event.
- /// </summary>
- /// <param name="sender">The sender.</param>
- /// <param name="response">The response.</param>
- private void Manager_Completed(object sender, string response)
- {
- Log += (DateTime.Now.ToTimeString() + ": ") + "Response Received:" + Environment.NewLine;
- Log += (DateTime.Now.ToTimeString() + ": ") + response + Environment.NewLine;
- Status = "Completed";
+ StubsViewVM.Bind(nameof(StubsViewVM.MachineOperator), ApplicationManager, nameof(ApplicationManager.ConnectedMachine));
}
#endregion
@@ -537,8 +97,7 @@ namespace Tango.MachineStudio.Stubs.ViewModels
/// <returns></returns>
public override void OnShuttingDown()
{
- _settings.SelectedPort = SelectedPort;
- _settings.LastTabs = CodeTabs.Select(x => x.File).ToList();
+
}
#endregion
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/ViewModels/StubSnippetVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/ViewModels/StubSnippetVM.cs
deleted file mode 100644
index d99906f20..000000000
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/ViewModels/StubSnippetVM.cs
+++ /dev/null
@@ -1,47 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Tango.SharedUI;
-
-namespace Tango.MachineStudio.Stubs.ViewModels
-{
- /// <summary>
- /// Represents a single stub snippet view model.
- /// </summary>
- /// <seealso cref="Tango.SharedUI.ViewModel" />
- public class StubSnippetVM : ViewModel
- {
- private String _name;
- /// <summary>
- /// Gets or sets the stub name.
- /// </summary>
- public String Name
- {
- get { return _name; }
- set { _name = value; RaisePropertyChanged(nameof(Name)); }
- }
-
- private String _code;
- /// <summary>
- /// Gets or sets the snippet code.
- /// </summary>
- public String Code
- {
- get { return _code; }
- set { _code = value; RaisePropertyChanged(nameof(Code)); }
- }
-
- /// <summary>
- /// Returns a <see cref="System.String" /> that represents this instance.
- /// </summary>
- /// <returns>
- /// A <see cref="System.String" /> that represents this instance.
- /// </returns>
- public override string ToString()
- {
- return Name;
- }
- }
-}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/Views/MainView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/Views/MainView.xaml
index f1254db47..bac93bff3 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/Views/MainView.xaml
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/Views/MainView.xaml
@@ -2,18 +2,16 @@
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:mahapps="http://metro.mahapps.com/winfx/xaml/controls"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:views="clr-namespace:Tango.MachineStudio.Stubs.Views"
- xmlns:fa="http://schemas.fontawesome.io/icons/"
xmlns:global="clr-namespace:Tango.MachineStudio.Stubs"
+ xmlns:stubs="clr-namespace:Tango.Stubs.Views;assembly=Tango.Stubs"
+
xmlns:local="clr-namespace:Tango.MachineStudio.Stubs.Views"
- xmlns:converters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI"
- xmlns:controls="clr-namespace:Tango.SharedUI.Controls;assembly=Tango.SharedUI"
mc:Ignorable="d"
d:DesignHeight="720" d:DesignWidth="1280" Background="#202020" Foreground="Gainsboro" DataContext="{x:Static global:ViewModelLocator.MainViewVM}">
- <UserControl.Resources>
+ <UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<!-- MahApps.Metro resource dictionaries. Make sure that all file names are Case Sensitive! -->
@@ -28,324 +26,11 @@
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/VS/Colors.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/VS/Styles.xaml" />
-
- <ResourceDictionary>
- <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"></BooleanToVisibilityConverter>
- <converters:BooleanInverseConverter x:Key="BooleanInverseConverter"></converters:BooleanInverseConverter>
- <Style BasedOn="{StaticResource MetroTabItem}" TargetType="{x:Type TabItem}">
- <Style.Triggers>
- <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self},Path=IsSelected}" Value="True">
- <Setter Property="Background" Value="#007ACC"></Setter>
- </DataTrigger>
- </Style.Triggers>
- <Setter Property="mahapps:ControlsHelper.HeaderFontSize" Value="12"></Setter>
- <Setter Property="HeaderTemplate">
- <Setter.Value>
- <DataTemplate>
- <Border>
- <StackPanel Orientation="Horizontal">
- <mahapps:ProgressRing Width="5" Height="5" Margin="0 0 5 0" Foreground="White" Visibility="{Binding IsRunning,Converter={StaticResource BooleanToVisibilityConverter}}"></mahapps:ProgressRing>
- <TextBlock Text="{Binding Title}" ToolTip="{Binding File}" Foreground="Gainsboro" VerticalAlignment="Center"></TextBlock>
- <Button Command="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DataContext.CloseTabCommand}" CommandParameter="{Binding}" Margin="5 0 0 0" Cursor="Hand" Width="24" Height="24" VerticalAlignment="Center" Style="{DynamicResource MetroCircleButtonStyle}" mahapps:ButtonHelper.PreserveTextCase="True" BorderThickness="0">
- <StackPanel Orientation="Horizontal">
- <fa:ImageAwesome Width="10" Height="10" Icon="Close" Foreground="Gainsboro"></fa:ImageAwesome>
- </StackPanel>
- </Button>
- </StackPanel>
- </Border>
- </DataTemplate>
- </Setter.Value>
- </Setter>
- <Setter Property="ContentTemplate">
- <Setter.Value>
- <DataTemplate>
- <Grid Background="#181818">
- <controls:ScriptEditorControl Text="{Binding Code,Mode=TwoWay}" InsertSnippetCommand="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DataContext.InsertSnippetCommand,Mode=TwoWay}" SaveCommand="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DataContext.SaveCommand}" HighlightTypes="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DataContext.HighlightTypes}" RunCommand="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DataContext.RunCommand}" StopCommand="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DataContext.StopCommand}" />
- </Grid>
- </DataTemplate>
- </Setter.Value>
- </Setter>
- </Style>
- </ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
- <UserControl.Style>
- <Style TargetType="UserControl">
- <Style.Triggers>
- <DataTrigger Binding="{Binding IsRunning}" Value="True">
- <Setter Property="Cursor" Value="AppStarting"></Setter>
- </DataTrigger>
- </Style.Triggers>
- </Style>
- </UserControl.Style>
- <Grid>
- <Grid.RowDefinitions>
- <RowDefinition Height="Auto"/>
- <RowDefinition Height="1*"/>
- </Grid.RowDefinitions>
-
- <Grid>
- <Menu IsMainMenu="True" BorderThickness="0" Height="30" Padding="0 10 0 0">
- <MenuItem Header="File">
- <MenuItem Header="New" Command="{Binding NewCommand}">
- <MenuItem.Icon>
- <fa:ImageAwesome Icon="FileOutline" Width="12" Foreground="Gainsboro" Margin="2" />
- </MenuItem.Icon>
- </MenuItem>
- <Separator/>
- <MenuItem Header="Open" MinWidth="150" Command="{Binding OpenCommand}">
- <MenuItem.Icon>
- <fa:ImageAwesome Icon="FolderOutline" Width="12" Foreground="Gainsboro" Margin="2" />
- </MenuItem.Icon>
- </MenuItem>
- <Separator/>
- <MenuItem Header="Save" Command="{Binding SaveCommand}">
- <MenuItem.Icon>
- <fa:ImageAwesome Icon="Save" Width="12" Foreground="Gainsboro" Margin="2" />
- </MenuItem.Icon>
- </MenuItem>
- <MenuItem Header="Save as" Command="{Binding SaveAsCommand}">
- <MenuItem.Icon>
- <Grid>
- <fa:ImageAwesome Icon="Save" Width="10" Foreground="Gainsboro" Margin="2" />
- <fa:ImageAwesome Icon="Save" Width="10" Foreground="Gainsboro" Margin="2 -5 -5 2" />
- </Grid>
- </MenuItem.Icon>
- </MenuItem>
- <Separator/>
- <MenuItem Header="Exit" Command="{Binding ExitCommand}">
- <MenuItem.Icon>
- <fa:ImageAwesome Icon="SignOut" Width="12" Foreground="Gainsboro" Margin="2" />
- </MenuItem.Icon>
- </MenuItem>
- </MenuItem>
- <MenuItem Header="Edit">
- <MenuItem Header="Cut" MinWidth="150" Command="Cut">
- <MenuItem.Icon>
- <fa:ImageAwesome Icon="Cut" Width="12" Foreground="Gainsboro" Margin="2" />
- </MenuItem.Icon>
- </MenuItem>
- <Separator/>
- <MenuItem Header="Copy" Command="Copy">
- <MenuItem.Icon>
- <fa:ImageAwesome Icon="Copy" Width="12" Foreground="Gainsboro" Margin="2" />
- </MenuItem.Icon>
- </MenuItem>
- <MenuItem Header="Paste" Command="Paste">
- <MenuItem.Icon>
- <fa:ImageAwesome Icon="Paste" Width="12" Foreground="Gainsboro" Margin="2" />
- </MenuItem.Icon>
- </MenuItem>
- <Separator/>
- <MenuItem Header="Undo" Command="Undo">
- <MenuItem.Icon>
- <fa:ImageAwesome Icon="Undo" Width="12" Foreground="Gainsboro" Margin="2" />
- </MenuItem.Icon>
- </MenuItem>
- <MenuItem Header="Redo" Command="Redo">
- <MenuItem.Icon>
- <fa:ImageAwesome Icon="Repeat" Width="12" Foreground="Gainsboro" Margin="2" />
- </MenuItem.Icon>
- </MenuItem>
- </MenuItem>
- <MenuItem Header="Build">
- <MenuItem Header="Run (F5)" MinWidth="150" Command="{Binding RunCommand}" >
- <MenuItem.Icon>
- <fa:ImageAwesome Icon="Play" Width="12" Margin="2">
- <fa:ImageAwesome.Style>
- <Style TargetType="fa:ImageAwesome">
- <Setter Property="Foreground" Value="#8DD28A"></Setter>
- <Style.Triggers>
- <Trigger Property="IsEnabled" Value="False">
- <Setter Property="Foreground" Value="Gray"></Setter>
- </Trigger>
- </Style.Triggers>
- </Style>
- </fa:ImageAwesome.Style>
- </fa:ImageAwesome>
- </MenuItem.Icon>
- </MenuItem>
- <MenuItem Header="Stop" Command="{Binding StopCommand}" IsEnabled="False">
- <MenuItem.Icon>
- <fa:ImageAwesome Icon="Stop" Width="12" Margin="2">
- <fa:ImageAwesome.Style>
- <Style TargetType="fa:ImageAwesome">
- <Setter Property="Foreground" Value="#F38B76"></Setter>
- <Style.Triggers>
- <Trigger Property="IsEnabled" Value="False">
- <Setter Property="Foreground" Value="Gray"></Setter>
- </Trigger>
- </Style.Triggers>
- </Style>
- </fa:ImageAwesome.Style>
- </fa:ImageAwesome>
- </MenuItem.Icon>
- </MenuItem>
- </MenuItem>
- </Menu>
- </Grid>
-
- <Grid Grid.Row="2">
- <Grid.ColumnDefinitions>
- <ColumnDefinition Width="1*"/>
- <ColumnDefinition Width="250"/>
- </Grid.ColumnDefinitions>
- <Grid.RowDefinitions>
- <RowDefinition Height="1*"/>
- <RowDefinition Height="5"/>
- <RowDefinition Height="0.5*"/>
- </Grid.RowDefinitions>
-
- <Grid>
- <TabControl x:Name="tabControl" Margin="5" ItemsSource="{Binding CodeTabs}" SelectedItem="{Binding SelectedCodeTab}">
- <TabControl.Resources>
- <Style BasedOn="{StaticResource MetroTabItem}" TargetType="{x:Type TabItem}">
- <Style.Triggers>
- <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self},Path=IsSelected}" Value="True">
- <Setter Property="Background" Value="#007ACC"></Setter>
- </DataTrigger>
- </Style.Triggers>
- <Setter Property="mahapps:ControlsHelper.HeaderFontSize" Value="12"></Setter>
- <Setter Property="HeaderTemplate">
- <Setter.Value>
- <DataTemplate>
- <Border>
- <StackPanel Orientation="Horizontal">
- <mahapps:ProgressRing Width="5" Height="5" Margin="0 0 5 0" Foreground="White" Visibility="{Binding IsRunning,Converter={StaticResource BooleanToVisibilityConverter}}"></mahapps:ProgressRing>
- <TextBlock Text="{Binding Title}" ToolTip="{Binding File}" Foreground="Gainsboro" VerticalAlignment="Center"></TextBlock>
- <Button Command="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DataContext.CloseTabCommand}" CommandParameter="{Binding}" Margin="5 0 0 0" Cursor="Hand" Width="24" Height="24" VerticalAlignment="Center" Style="{DynamicResource MetroCircleButtonStyle}" mahapps:ButtonHelper.PreserveTextCase="True" BorderThickness="0">
- <StackPanel Orientation="Horizontal">
- <fa:ImageAwesome Width="10" Height="10" Icon="Close" Foreground="Gainsboro"></fa:ImageAwesome>
- </StackPanel>
- </Button>
- </StackPanel>
- </Border>
- </DataTemplate>
- </Setter.Value>
- </Setter>
- <Setter Property="ContentTemplate">
- <Setter.Value>
- <DataTemplate>
- <Grid Background="#181818">
- <controls:ScriptEditorControl Text="{Binding Code,Mode=TwoWay}" InsertSnippetCommand="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DataContext.InsertSnippetCommand,Mode=TwoWay}" SaveCommand="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DataContext.SaveCommand}" HighlightTypes="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DataContext.HighlightTypes}" RunCommand="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DataContext.RunCommand}" StopCommand="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DataContext.StopCommand}" />
- </Grid>
- </DataTemplate>
- </Setter.Value>
- </Setter>
- </Style>
- </TabControl.Resources>
- </TabControl>
- <Grid HorizontalAlignment="Right" Margin="0 45 40 0" VerticalAlignment="Top" Visibility="{Binding IsRunning,Converter={StaticResource BooleanToVisibilityConverter}}">
- <StackPanel Orientation="Horizontal">
- <mahapps:ProgressRing Foreground="#007ACC" Width="20" Height="20"></mahapps:ProgressRing>
- <TextBlock Text="Running..." FontStyle="Italic" Margin="10 0 0 0" FontSize="14" VerticalAlignment="Center"></TextBlock>
- </StackPanel>
- </Grid>
- </Grid>
-
- <Grid Grid.Column="1" Grid.RowSpan="3">
- <Grid VerticalAlignment="Bottom" Height="25" Background="#007ACC">
-
- </Grid>
- <DockPanel>
- <GroupBox Header="COMMUNICATION PORT" VerticalAlignment="Top" DockPanel.Dock="Top" Margin="0 2 0 0">
- <StackPanel>
- <StackPanel Orientation="Horizontal">
- <ToggleButton Margin="5" Style="{StaticResource MaterialDesignSwitchToggleButton}" Height="35" HorizontalAlignment="Left" x:Name="chkUseCurrentMachine" ToolTip="Use the currently connected machine to execute stubs" IsChecked="{Binding UseConnectedMachine}"></ToggleButton>
- <TextBlock Margin="5 0 0 0" VerticalAlignment="Center">Use Connected Machine</TextBlock>
- </StackPanel>
- <ComboBox Margin="5" IsEnabled="{Binding ElementName=chkUseCurrentMachine,Path=IsChecked,Converter={StaticResource BooleanInverseConverter}}" BorderThickness="0" ItemsSource="{Binding Ports}" Height="35" SelectedItem="{Binding SelectedPort}"></ComboBox>
- </StackPanel>
- </GroupBox>
-
- <GroupBox Header="CONNECTION" DockPanel.Dock="Bottom" VerticalAlignment="Bottom" Margin="0 10 0 25">
- <StackPanel>
- <Button IsEnabled="{Binding ElementName=chkUseCurrentMachine,Path=IsChecked,Converter={StaticResource BooleanInverseConverter}}" Height="50" MinWidth="100" mahapps:ButtonHelper.PreserveTextCase="True" BorderThickness="0" Command="{Binding ToggleConnectionCommand}">
- <Button.Style>
- <Style TargetType="Button" BasedOn="{StaticResource AccentedSquareButtonStyle}">
- <Style.Triggers>
- <DataTrigger Binding="{Binding IsConnected}" Value="False">
- <Setter Property="Content">
- <Setter.Value>
- <StackPanel Orientation="Horizontal">
- <fa:ImageAwesome Icon="Link" Width="16"></fa:ImageAwesome>
- <TextBlock VerticalAlignment="Center" Margin="10 0 10 0">CONNECT</TextBlock>
- </StackPanel>
- </Setter.Value>
- </Setter>
- </DataTrigger>
- <DataTrigger Binding="{Binding IsConnected}" Value="True">
- <Setter Property="Content">
- <Setter.Value>
- <StackPanel Orientation="Horizontal">
- <fa:ImageAwesome Icon="Unlink" Width="16"></fa:ImageAwesome>
- <TextBlock VerticalAlignment="Center" Margin="10 0 10 0">DISCONNECT</TextBlock>
- </StackPanel>
- </Setter.Value>
- </Setter>
- </DataTrigger>
- </Style.Triggers>
- </Style>
- </Button.Style>
- </Button>
- </StackPanel>
- </GroupBox>
-
- <GroupBox Header="STUB SNIPPETS" Margin="0 10 0 0">
- <Grid>
- <ListBox BorderThickness="0" ItemsSource="{Binding StubSnippets}" HorizontalContentAlignment="Stretch" SelectedItem="{Binding SelectedStubSnippet}">
- <ListBox.ItemContainerStyle>
- <Style TargetType="ListBoxItem" BasedOn="{StaticResource {x:Type ListBoxItem}}">
- <Setter Property="Padding" Value="0"></Setter>
- <Setter Property="Margin" Value="0 2 0 2"></Setter>
- <Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter>
- </Style>
- </ListBox.ItemContainerStyle>
- <ListBox.ItemTemplate>
- <DataTemplate>
- <Border BorderThickness="1" BorderBrush="#007ACC" Padding="8" Background="Transparent">
- <Border.InputBindings>
- <MouseBinding Gesture="LeftDoubleClick" Command="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DataContext.StubSnippetSelectedCommand}"/>
- </Border.InputBindings>
- <Grid>
- <fa:ImageAwesome Icon="ArrowLeft" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="5 0 0 0" Foreground="#007ACC" Width="16" Height="16"></fa:ImageAwesome>
- <TextBlock VerticalAlignment="Center" FontSize="11" HorizontalAlignment="Center" Text="{Binding Name}"></TextBlock>
- </Grid>
- </Border>
- </DataTemplate>
- </ListBox.ItemTemplate>
- </ListBox>
- </Grid>
- </GroupBox>
- </DockPanel>
- </Grid>
-
- <GridSplitter Margin="5 0 5 0" Grid.Row="1" Height="5" HorizontalAlignment="Stretch" VerticalAlignment="Center">
- <GridSplitter.Background>
- <LinearGradientBrush>
- <GradientStop/>
- <GradientStop Color="#007ACC" Offset="0.5"/>
- <GradientStop Offset="1"/>
- </LinearGradientBrush>
- </GridSplitter.Background>
- </GridSplitter>
-
- <Grid Grid.Row="2">
- <Grid.RowDefinitions>
- <RowDefinition Height="1*"/>
- <RowDefinition Height="25"/>
- </Grid.RowDefinitions>
- <GroupBox Header="Response">
- <Grid Background="#151515">
- <TextBox x:Name="txtLog" FontFamily="Lucida Console" TextChanged="TextBox_TextChanged" Background="Transparent" Text="{Binding Log}" BorderThickness="0" AcceptsReturn="True" VerticalScrollBarVisibility="Visible" Padding="5" IsReadOnly="True" TextWrapping="Wrap" FontSize="11" Foreground="Gainsboro"></TextBox>
- </Grid>
- </GroupBox>
- <StatusBar Background="#007ACC" Grid.Row="1">
- <TextBlock Text="{Binding Status}"></TextBlock>
- </StatusBar>
- </Grid>
- </Grid>
+ <Grid>
+ <stubs:StubsView DataContext="{Binding StubsViewVM}" />
</Grid>
</UserControl>
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/Views/MainView.xaml.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/Views/MainView.xaml.cs
index 2d099ef16..238772f07 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/Views/MainView.xaml.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/Views/MainView.xaml.cs
@@ -26,27 +26,6 @@ namespace Tango.MachineStudio.Stubs.Views
public MainView() : base()
{
InitializeComponent();
- this.Loaded += MainView_Loaded;
- }
-
- private void MainView_Loaded(object sender, RoutedEventArgs e)
- {
- //ServiceLocator.Current.GetInstance<MainViewVM>().CodeTabs.RemoveAt(0);
- }
-
- //Auto scroll to bottom of response log each time it is changed.
- private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
- {
- Task.Factory.StartNew(() =>
- {
- Thread.Sleep(50);
-
- this.Dispatcher.Invoke(() =>
- {
- txtLog.SelectionStart = txtLog.Text.Length;
- txtLog.ScrollToEnd();
- });
- });
}
}
}