aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Scripting/Tango.Scripting.IDE/ScriptIDEViewVM.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Software/Visual_Studio/Scripting/Tango.Scripting.IDE/ScriptIDEViewVM.cs')
-rw-r--r--Software/Visual_Studio/Scripting/Tango.Scripting.IDE/ScriptIDEViewVM.cs191
1 files changed, 191 insertions, 0 deletions
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<IProjectType> _projectTypes;
+ public ObservableCollection<ErrorData> 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<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.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));
+
+ 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<AddProjectViewVM>(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
+ }
+}