using Google.Protobuf; using MaterialDesignThemes.Wpf; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Text; using System.Text.RegularExpressions; using System.Threading; using System.Threading.Tasks; using System.Windows; using System.Windows.Input; using System.Windows.Threading; using Tango.BL.Entities; using Tango.BL.Enumerations; using Tango.Core; using Tango.Core.Commands; using Tango.Core.ExtensionMethods; using Tango.Core.Helpers; using Tango.FSE.Common; using Tango.FSE.Common.FileAssociation; using Tango.FSE.Common.Navigation; using Tango.FSE.Common.Notifications; using Tango.FSE.Procedures.Contracts; using Tango.FSE.Procedures.Dialogs; using Tango.FSE.Procedures.Helpers; using Tango.FSE.Procedures.Messages; using Tango.FSE.Procedures.Navigation; using Tango.FSE.Procedures.Views; using Tango.Integration.Operation; using Tango.Scripting.Basic; using Tango.Scripting.Editors; using Tango.SharedUI.Components; using Tango.SharedUI.Helpers; using Tango.Transport; using static Tango.FSE.Procedures.ViewModels.ProcedureDesignerViewVM; namespace Tango.FSE.Procedures.ViewModels { public class ProcedureDesignerViewVM : FSEViewModel, IProcedureLogger, INavigationObjectReceiver { public class NavigationObject { public PublishedProcedureProject Project { get; set; } } public enum ToolWindows { Output, Errors, Inputs, Variables, Results, Publish } private System.Timers.Timer _compileTimer; private String _projectFile; private String PROJECT_FILE_EXTENSION = ".pproj"; private String PROJECT_DIALOG_FILTER = $"Procedure Project Files|*.pproj"; private bool _isProjectChanged; private TaskItem _symbolsTaskItem; private BreakPointRequestEventArgs _lastBreakPointRequestArgs; private String _lastProjectStringForCompilation; #region Properties private PublishedProcedureProject _publishedProcedureProject; public PublishedProcedureProject PublishedProcedureProject { get { return _publishedProcedureProject; } set { _publishedProcedureProject = value; RaisePropertyChangedAuto(); InvalidateRelayCommands(); } } private ToolWindows _selectedToolWindow; public ToolWindows SelectedToolWindow { get { return _selectedToolWindow; } set { _selectedToolWindow = value; RaisePropertyChangedAuto(); } } private ProcedureProject _project; public ProcedureProject Project { get { return _project; } set { _project = value; RaisePropertyChangedAuto(); OnProjectChanged(); } } private ProjectRunner _projectRunner; public ProjectRunner ProjectRunner { get { return _projectRunner; } set { _projectRunner = value; RaisePropertyChangedAuto(); } } private List _compilationErrors; public List CompilationErrors { get { return _compilationErrors; } set { _compilationErrors = value; RaisePropertyChangedAuto(); } } public ResultsViewVM ResultsViewVM { get; set; } public ObservableCollection