From 080f1697e97e13461ec6df4d31c8924d01257a1b Mon Sep 17 00:00:00 2001 From: Roy Ben Shabat Date: Tue, 9 Apr 2019 01:47:48 +0300 Subject: MERGE --- .../Tango.Scripting.IDE/ScriptIDEViewVM.cs | 191 +++++++++++++++++++++ 1 file changed, 191 insertions(+) create mode 100644 Software/Visual_Studio/Scripting/Tango.Scripting.IDE/ScriptIDEViewVM.cs (limited to 'Software/Visual_Studio/Scripting/Tango.Scripting.IDE/ScriptIDEViewVM.cs') diff --git a/Software/Visual_Studio/Scripting/Tango.Scripting.IDE/ScriptIDEViewVM.cs b/Software/Visual_Studio/Scripting/Tango.Scripting.IDE/ScriptIDEViewVM.cs new file mode 100644 index 000000000..facebe061 --- /dev/null +++ b/Software/Visual_Studio/Scripting/Tango.Scripting.IDE/ScriptIDEViewVM.cs @@ -0,0 +1,191 @@ +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 + } +} -- cgit v1.3.1