using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Media.Imaging; using Tango.Core.Commands; using Tango.Scripting.IDE.Controls; using Tango.Scripting.IDE.Dialogs; using Tango.Scripting.IDE.Notifications; using Tango.Scripting.IDE.Projects; using Tango.Scripting.IDE.ProjectTypes; using Tango.SharedUI; namespace Tango.Scripting.IDE { public class ScriptIDEViewVM : IDEViewModel { private List _projectTypes; public ObservableCollection 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 _openProjectItems; public ObservableCollection 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 OpenProjectItemCommand { get; set; } public RelayCommand CloseProjectItemCommand { get; set; } public RelayCommand RunProject { get; set; } public RelayCommand StopProject { get; set; } #endregion #region Constructors public ScriptIDEViewVM() : base() { _projectTypes = new List(); OpenProjectItems = new ObservableCollection(); ErrorList = new ObservableCollection(); 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(OpenProjectItem); CloseProjectItemCommand = new RelayCommand(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); } /// /// Open a dialog to create a new project /// private async void AddNewProject() { var vm = await NotificationManager.ShowDialog(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(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 } }