diff options
| author | Roy Ben-Shabat <Roy@Twine-s.com> | 2018-07-03 16:36:54 +0300 |
|---|---|---|
| committer | Roy Ben-Shabat <Roy@Twine-s.com> | 2018-07-03 16:36:54 +0300 |
| commit | 856773f7eafb9d04500ede0cfae9c0e75231418b (patch) | |
| tree | d1b4f9577b5a47dd10fa7243823fd1016de1418e /Software/Visual_Studio/MachineStudio | |
| parent | 94e4072838c235be4d48a4635e47204a39cdd78b (diff) | |
| download | Tango-856773f7eafb9d04500ede0cfae9c0e75231418b.tar.gz Tango-856773f7eafb9d04500ede0cfae9c0e75231418b.zip | |
Implemented StubsView & VM !!!
Diffstat (limited to 'Software/Visual_Studio/MachineStudio')
12 files changed, 18 insertions, 1210 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 < 10; i++) - /// { - /// stubManager.Run("calculate", 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(); - }); - }); } } } diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/StudioApplication/IStudioApplicationManager.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/StudioApplication/IStudioApplicationManager.cs index 1de18ac94..c5010cb26 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/StudioApplication/IStudioApplicationManager.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/StudioApplication/IStudioApplicationManager.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -11,7 +12,7 @@ namespace Tango.MachineStudio.Common.StudioApplication /// <summary> /// Represents the Machine Studio application manager. /// </summary> - public interface IStudioApplicationManager + public interface IStudioApplicationManager : INotifyPropertyChanged { /// <summary> /// Occurs when the connected machine property has changed. |
