aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Scripting/Tango.Scripting/Script.cs
blob: a4cd38c3d4bb97477c4e02eb6db4633b85d4bb10 (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
32
33
34
35
36
37
38
39
40
41
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace Tango.Scripting
{
    public class Script
    {
        public String Name { get; set; }

        public String File { get; set; }

        public GlobalObject GlobalObject { get; set; }

        public List<ReferenceAssembly> ReferenceAssemblies { get; private set; }

        public List<String> Imports { get; private set; }

        public String Code { get; set; }

        public String WorkingFolder { get; set; }

        public String EntryPoint { get; set; }

        public ApartmentState ApartmentState { get; set; }

        public Script()
        {
            ReferenceAssemblies = new List<ReferenceAssembly>();
            Imports = new List<string>();
            GlobalObject = new GlobalObject();
            File = "Script.cs";
            Name = "Script.cs";
            WorkingFolder = Environment.CurrentDirectory;
            ApartmentState = ApartmentState.MTA;
        }
    }
}
n class="k">class ScriptIDEViewVM : IDEViewModel { private List<IProjectType> _projectTypes; public ObservableCollection<ErrorData> ErrorList { get; set; } #region Properties private Solution _solution; public Solution Solution { get { return _solution; } set { if (_solution != value) { if(_solution != null) _solution.AddProjectEvent -= delegate { AddProject(); }; _solution = value; _solution.AddProjectEvent += delegate { AddProject(); }; RaisePropertyChangedAuto(); } } } private IProject _selectedProject; public IProject SelectedProject { get { return _selectedProject; } set { _selectedProject = value; RaisePropertyChangedAuto(); } } private IProjectItem _selectedProjectItem; public IProjectItem SelectedProjectItem { get { return _selectedProjectItem; } set { _selectedProjectItem = value; RaisePropertyChangedAuto(); } } private ObservableCollection<IProjectItem> _openProjectItems; public ObservableCollection<IProjectItem> OpenProjectItems { get { return _openProjectItems; } set { _openProjectItems = value; RaisePropertyChangedAuto(); } } private bool _isRunProject = false; public bool IsRunProject { get { return _isRunProject; } set { if (_isRunProject != value) { _isRunProject = value; RaisePropertyChangedAuto(); } } } #endregion #region Commands public RelayCommand NewProjectCommand { get; set; } public RelayCommand AddProjectCommand { get; set; } public RelayCommand<IProjectItem> OpenProjectItemCommand { get; set; } public RelayCommand<IProjectItem> CloseProjectItemCommand { get; set; } public RelayCommand RunProject { get; set; } public RelayCommand StopProject { get; set; } #endregion #region Constructors public ScriptIDEViewVM() : base() { _projectTypes = new List<IProjectType>(); OpenProjectItems = new ObservableCollection<IProjectItem>(); ErrorList = new ObservableCollection<ErrorData>(); RegisterProjectType(new StubProjectType()); RegisterProjectType(new UnitTestProjectType()); Solution = new Solution(); Solution.Name = "Test Solution"; Solution.SolutionLocation = @"C:\Test"; Solution.Projects.Add(_projectTypes.First().NewProject("Test Project.stub")); //Init Commands NewProjectCommand = new RelayCommand(AddNewProject); AddProjectCommand = new RelayCommand(AddProject); OpenProjectItemCommand = new RelayCommand<IProjectItem>(OpenProjectItem); CloseProjectItemCommand = new RelayCommand<IProjectItem>(CloseProjectItem); RunProject = new RelayCommand(RunProjectCommand); StopProject = new RelayCommand(StopRunProjectCommand); NotificationManager = new DefaultNotificationManager(); } private void RunProjectCommand(object obj) { // MessageBox.Show("You said: RunProjectCommand"); } private void StopRunProjectCommand(object obj) { IsRunProject = false; } #endregion #region Public Methods private void OpenProjectItem(IProjectItem projectItem) { if (!OpenProjectItems.Contains(projectItem)) { OpenProjectItems.Add(projectItem); } SelectedProjectItem = projectItem; } private void CloseProjectItem(IProjectItem projectItem) { OpenProjectItems.Remove(projectItem); SelectedProjectItem = OpenProjectItems.FirstOrDefault(); } public void RegisterProjectType(IProjectType projectType) { _projectTypes.Add(projectType); } public void UnRegisterProjectItemHandler(IProjectType projectType) { _projectTypes.Remove(projectType); } /// <summary> /// Open a dialog to create a new project /// </summary> private async void AddNewProject() { var vm = await NotificationManager.ShowDialog<NewProjectViewVM>(new NewProjectViewVM(Settings.LastSolutionLocations, _projectTypes)); if (vm.DialogResult) { Solution newSolution = new Solution(); newSolution.Name = vm.SolutionName; newSolution.SolutionLocation = vm.ProjectLocation; Solution = newSolution; Solution.Projects.Add(vm.SelectedProjectType.NewProject(vm.GetFullProjectPath())); Settings.LastSolutionLocations.Insert(0, vm.ProjectLocation); Settings.Save(); } } private async void AddProject() { var vm = await NotificationManager.ShowDialog<AddProjectViewVM>(new AddProjectViewVM(_projectTypes) { ProjectLocation = Solution.SolutionLocation }); if (vm.DialogResult) { Solution.Projects.Add(vm.SelectedProjectType.NewProject(vm.GetFullProjectPath())); } } public bool IsSolutionProject(IProject SelectedItem) { if (SelectedItem is StubProject) return true; return false; } #endregion } }