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 { _solution = value; 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.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)); if (vm.DialogResult) { Solution newSolution = new Solution(); newSolution.Name = vm.SolutionName; newSolution.SolutionLocation = vm.ProjectLocation; Solution = newSolution; StringBuilder builder = new StringBuilder(vm.ProjectLocation); builder.AppendFormat(@"\{0}", vm.ProjectName); Solution.Projects.Add(vm.SelectedProjectType.NewProject(builder.ToString())); Settings.LastSolutionLocations.Insert(0, vm.ProjectLocation); Settings.Save(); } } private async void AddProject() { var vm = await NotificationManager.ShowDialog(new AddProjectViewVM() { ProjectLocation = Solution.SolutionLocation //ProjectLocation = Path.GetDirectoryName(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)) //ProjectLocation = "Current Solution folder..." }); if (vm.DialogResult) { StringBuilder builder = new StringBuilder(vm.ProjectLocation); builder.AppendFormat(@"\{0}", vm.ProjectName); Solution.Projects.Add(vm.SelectedProjectType.NewProject(builder.ToString())); } } public bool IsSolutionProject(IProject SelectedItem) { if (SelectedItem is StubProject) return true; return false; } #endregion } }