aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Tango.SharedUI/ExtensionMethods/FrameworkElementExtensions.cs
blob: 8bfc9149a9697ec813cfbc096d1cd0ea772a5c19 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
using System;
using System.Collections;
using System.Collections.Generic;
using System.Drawing.Imaging;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Markup;
using System.Windows.Media.Imaging;
using Tango.SharedUI.Controls;
using Tango.SharedUI.Rendering;

public static class FrameworkElementExtensions
{
    /// <summary>
    /// Renders the element to bitmap file.
    /// </summary>
    /// <param name="element">The element.</param>
    /// <param name="filePath">The file path.</param>
    /// <param name="format">The format.</param>
    /// <param name="renderSize">Size of the render.</param>
    /// <param name="quality">The quality.</param>
    public static void RenderToFile(this FrameworkElement element, String filePath, ImageFormat format, Size renderSize, int quality)
    {
        RenderWindow renderer = new RenderWindow(element);
        renderer.RenderToFileSynced(new Size(element.Width, element.Height), renderSize, filePath, format, quality, null);
    }
}
e.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tango.Emulations.Emulators;
using Tango.Logging;
using Tango.SharedUI;
using Tango.Core.Commands;
using Tango.Transport.Adapters;
using Tango.Transport.Servers;
using Tango.Transport.Transporters;
using Tango.Core;
using Tango.Settings;

namespace Tango.MachineEM.UI.ViewModels
{
    public class MainViewVM : ExtendedObject
    {
        private TcpServer TcpServer;
        private bool _running;
        private LogManager logManager = LogManager.Default;

        #region Properties

        private MachineEmulator _emulator;
        /// <summary>
        /// Gets or sets the machine emulator.
        /// </summary>
        public MachineEmulator Emulator
        {
            get { return _emulator; }
            set { _emulator = value; RaisePropertyChanged(nameof(Emulator)); }
        }

        private String _log;
        /// <summary>
        /// Gets or sets the log.
        /// </summary>
        public String Log
        {
            get { return _log; }
            set { _log = value; RaisePropertyChanged(nameof(Log)); }
        }

        private List<String> _ports;
        /// <summary>
        /// Gets or sets the ports.
        /// </summary>
        public List<String> Ports
        {
            get { return _ports; }
            set { _ports = value; RaisePropertyChanged(nameof(Ports)); }
        }

        private String _selectedPort;
        /// <summary>
        /// Gets or sets the selected port.
        /// </summary>
        public String SelectedPort
        {
            get { return _selectedPort; }
            set { _selectedPort = value; RaisePropertyChanged(nameof(SelectedPort)); }
        }

        #endregion

        #region Private Methods

        #endregion

        #region Commands

        /// <summary>
        /// Gets or sets the start command.
        /// </summary>
        public RelayCommand StartCommand { get; set; }

        /// <summary>
        /// Gets or sets the stop command.
        /// </summary>
        public RelayCommand StopCommand { get; set; }

        /// <summary>
        /// Gets or sets the run command.
        /// </summary>
        public RelayCommand RunCommand { get; set; }

        /// <summary>
        /// Gets or sets the cancel command.
        /// </summary>
        public RelayCommand CancelCommand { get; set; }

        /// <summary>
        /// Gets or sets the clear command.
        /// </summary>
        public RelayCommand ClearCommand { get; set; }

        #endregion

        #region Constructors

        /// <summary>
        /// Initializes a new instance of the <see cref="MainViewVM"/> class.
        /// </summary>
        public MainViewVM()
        {
            CoreSettings settings = SettingsManager.Default.GetOrCreate<CoreSettings>();
            settings.Save();

            SimpleStringLogger logger = new SimpleStringLogger(LogCategory.Critical, LogCategory.Error, LogCategory.Info, LogCategory.Warning);
            logger.LogReceived += (sedner, log) =>
            {
                Log += log.ToString() + Environment.NewLine;
            };

            logManager.RegisterLogger(logger);

            logManager.Log("Embedded Emulator Started...");


            Emulator = new MachineEmulator(new BasicTransporter());

            StartCommand = new RelayCommand(Start, (x) => !Emulator.IsStarted);
            StopCommand = new RelayCommand(Stop, (x) => Emulator.IsStarted);
            CancelCommand = new RelayCommand(Cancel, (x) => _running);
            ClearCommand = new RelayCommand(() => Log = String.Empty);

            Ports = new List<string>()
            {
                "TCP",
                "COM1",
                "COM2",
                "COM3",
                "COM4",
                "COM5",
                "COM6",
                "COM7",
                "COM8",
                "COM9",
            };

            SelectedPort = Ports.First();
        }

        #endregion

        #region Event Handlers

        /// <summary>
        /// Handles the ClientConnected event of the TcpServer control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="ClientConnectedEventArgs"/> instance containing the event data.</param>
        private void TcpServer_ClientConnected(object sender, ClientConnectedEventArgs e)
        {
            Emulator.Transporter.Adapter = new TcpTransportAdapter(e.Socket);
        }

        #endregion

        #region Command Handlers

        /// <summary>
        /// Stops the TCP server and emulator.
        /// </summary>
        private async void Start()
        {
            if (SelectedPort == Ports.First())
            {
                TcpServer = new TcpServer(9999);
                TcpServer.ClientConnected += TcpServer_ClientConnected;
                TcpServer.Start();
            }
            else
            {
                Emulator.Transporter.Adapter = new UsbTransportAdapter(SelectedPort);
            }
            await Emulator.Start();
            InvalidateRelayCommands();
        }

        /// <summary>
        /// Starts the TCP server/USB and emulator.
        /// </summary>
        private async void Stop()
        {
            if (TcpServer != null)
            {
                TcpServer.Stop();
            }
            await Emulator.Stop();
            InvalidateRelayCommands();
        }

        private void Cancel()
        {

        }

        #endregion
    }
}