From 4a9fb8a89a7fc48d9d3ecc9f24770c472834453d Mon Sep 17 00:00:00 2001 From: Victoria Plitt Date: Sun, 7 Apr 2019 16:14:48 +0300 Subject: added code to launch dynamically dialogs during run time, correct styles treeview item --- .../Tango.Scripting.IDE.UI/App.config | 36 ++++ .../Tango.Scripting.IDE.UI.csproj | 3 + .../Tango.Scripting.IDE.UI/packages.config | 1 + .../Converters/LeftMarginMultiplierConverter.cs | 54 ++++++ .../Tango.Scripting.IDE/Dialogs/AddNewControl.xaml | 132 --------------- .../Dialogs/AddNewControl.xaml.cs | 29 ---- .../Dialogs/AddProjectView.xaml | 131 ++++++++++++++ .../Dialogs/AddProjectView.xaml.cs | 28 +++ .../Dialogs/AddProjectViewVM.cs | 18 ++ .../Dialogs/BaseProjectDialogVM.cs | 96 +++++++++++ .../Dialogs/CommonOpenFileDialog.cs | 7 + .../Dialogs/NewProjectDialog.xaml | 35 ---- .../Dialogs/NewProjectDialog.xaml.cs | 62 ------- .../Dialogs/NewProjectDialogVM.cs | 95 ----------- .../Dialogs/NewProjectView.xaml | 139 +++++++++++++++ .../Dialogs/NewProjectView.xaml.cs | 29 ++++ .../Dialogs/NewProjectViewVM.cs | 59 +++++++ .../Tango.Scripting.IDE/IDEDialogViewModel.cs | 14 ++ .../Tango.Scripting.IDE/IDEViewModel.cs | 21 +++ .../Tango.Scripting.IDE/Images/stop.png | Bin 205 -> 183 bytes .../Notifications/DefaultNotificationManager.cs | 94 +++++++++++ .../Notifications/INotificationManager.cs | 95 +++++++++++ .../Notifications/ProgressNotificationHandler.cs | 23 +++ .../Tango.Scripting.IDE/ScriptIDEView2.xaml | 188 ++++++++++++++------- .../Tango.Scripting.IDE/ScriptIDEView2.xaml.cs | 32 ++++ .../Tango.Scripting.IDE/ScriptIDEViewVM.cs | 63 ++++++- .../Tango.Scripting.IDE/Tango.Scripting.IDE.csproj | 40 +++-- .../Tango.Scripting.IDE/Themes/ButtonStyle.xaml | 33 +++- .../Themes/DarkThemesColors.xaml | 3 + .../Tango.Scripting.IDE/Themes/MenuDict.xaml | 55 +++++- .../Tango.Scripting.IDE/Themes/ToolbarStyle.xaml | 32 ++++ .../Tango.Scripting.IDE/Themes/TreeViewItem.xaml | 58 ++++--- .../Tango.Scripting.IDE/ViewModelLocator.cs | 11 +- .../Tango.Scripting.IDE/Windows/DialogWindow.xaml | 28 +++ .../Windows/DialogWindow.xaml.cs | 28 +++ 35 files changed, 1306 insertions(+), 466 deletions(-) create mode 100644 Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Converters/LeftMarginMultiplierConverter.cs delete mode 100644 Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Dialogs/AddNewControl.xaml delete mode 100644 Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Dialogs/AddNewControl.xaml.cs create mode 100644 Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Dialogs/AddProjectView.xaml create mode 100644 Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Dialogs/AddProjectView.xaml.cs create mode 100644 Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Dialogs/AddProjectViewVM.cs create mode 100644 Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Dialogs/BaseProjectDialogVM.cs create mode 100644 Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Dialogs/CommonOpenFileDialog.cs delete mode 100644 Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Dialogs/NewProjectDialog.xaml delete mode 100644 Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Dialogs/NewProjectDialog.xaml.cs delete mode 100644 Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Dialogs/NewProjectDialogVM.cs create mode 100644 Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Dialogs/NewProjectView.xaml create mode 100644 Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Dialogs/NewProjectView.xaml.cs create mode 100644 Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Dialogs/NewProjectViewVM.cs create mode 100644 Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/IDEDialogViewModel.cs create mode 100644 Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/IDEViewModel.cs create mode 100644 Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Notifications/DefaultNotificationManager.cs create mode 100644 Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Notifications/INotificationManager.cs create mode 100644 Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Notifications/ProgressNotificationHandler.cs create mode 100644 Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Windows/DialogWindow.xaml create mode 100644 Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Windows/DialogWindow.xaml.cs (limited to 'Software/Visual_Studio/TEMP') diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE.UI/App.config b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE.UI/App.config index aa58e3cac..3c6b718b3 100644 --- a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE.UI/App.config +++ b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE.UI/App.config @@ -6,6 +6,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE.UI/Tango.Scripting.IDE.UI.csproj b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE.UI/Tango.Scripting.IDE.UI.csproj index f87325bc9..01f93cc44 100644 --- a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE.UI/Tango.Scripting.IDE.UI.csproj +++ b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE.UI/Tango.Scripting.IDE.UI.csproj @@ -46,6 +46,9 @@ ..\packages\Microsoft.CodeAnalysis.CSharp.2.4.0\lib\netstandard1.3\Microsoft.CodeAnalysis.CSharp.dll + + ..\packages\WindowsAPICodePack-Core.1.1.2\lib\Microsoft.WindowsAPICodePack.dll + ..\packages\System.AppContext.4.3.0\lib\net46\System.AppContext.dll diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE.UI/packages.config b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE.UI/packages.config index e207a9750..5fa98b5e2 100644 --- a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE.UI/packages.config +++ b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE.UI/packages.config @@ -45,4 +45,5 @@ + \ No newline at end of file diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Converters/LeftMarginMultiplierConverter.cs b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Converters/LeftMarginMultiplierConverter.cs new file mode 100644 index 000000000..2acefc09c --- /dev/null +++ b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Converters/LeftMarginMultiplierConverter.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Globalization; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Media; + +namespace Tango.Scripting.IDE.Converters +{ + public static class TreeViewItemExtensions + { + public static int GetDepth(this TreeViewItem item) + { + TreeViewItem parent; + while ((parent = GetParent(item)) != null) + { + return GetDepth(parent) + 1; + } + return 0; + } + + private static TreeViewItem GetParent(TreeViewItem item) + { + var parent = VisualTreeHelper.GetParent(item); + while (!(parent is TreeViewItem || parent is TreeView)) + { + parent = VisualTreeHelper.GetParent(parent); + } + return parent as TreeViewItem; + } + } + public class LeftMarginMultiplierConverter : IValueConverter + { + public double Length { get; set; } + + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + var item = value as TreeViewItem; + if (item == null) + return new Thickness(0); + + return new Thickness(Length * item.GetDepth(), 0, 0, 0); + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new System.NotImplementedException(); + } + } +} diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Dialogs/AddNewControl.xaml b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Dialogs/AddNewControl.xaml deleted file mode 100644 index e49925dad..000000000 --- a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Dialogs/AddNewControl.xaml +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Name: - - - - - - - + + + + + diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Dialogs/AddProjectView.xaml.cs b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Dialogs/AddProjectView.xaml.cs new file mode 100644 index 000000000..83856f4e7 --- /dev/null +++ b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Dialogs/AddProjectView.xaml.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace Tango.Scripting.IDE.Dialogs +{ + /// + /// Interaction logic for AddProjectControl.xaml + /// + public partial class AddProjectView : UserControl + { + public AddProjectView() + { + InitializeComponent(); + } + } +} diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Dialogs/AddProjectViewVM.cs b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Dialogs/AddProjectViewVM.cs new file mode 100644 index 000000000..2d636a6d5 --- /dev/null +++ b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Dialogs/AddProjectViewVM.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Tango.SharedUI; + +namespace Tango.Scripting.IDE.Dialogs +{ + public class AddProjectViewVM : BaseProjectDialogVM + { + public AddProjectViewVM() : base() + { + Title = "Add Project"; + //ProjectName + } + } +} diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Dialogs/BaseProjectDialogVM.cs b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Dialogs/BaseProjectDialogVM.cs new file mode 100644 index 000000000..5f2ebcb15 --- /dev/null +++ b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Dialogs/BaseProjectDialogVM.cs @@ -0,0 +1,96 @@ +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.Media.Imaging; +using Tango.Core.Commands; +using Tango.Scripting.IDE.ProjectTypes; +using Tango.SharedUI; + +namespace Tango.Scripting.IDE.Dialogs +{ + public class BaseProjectDialogVM : IDEDialogViewModel + { + #region properties + public ObservableCollection ProjectTypes { get; set; } + + private IProjectType _selectedProjectType = null; + public IProjectType SelectedProjectType + { + get { return _selectedProjectType; } + set + { + _selectedProjectType = value; + RaisePropertyChangedAuto(); + RaisePropertyChanged("LargeImage"); + RaisePropertyChanged("SelectedDescription"); + } + } + private BitmapSource _defaultLargeImage = ProjectType.GetImage("Images/test.png"); + public BitmapSource LargeImage + { + get + { + if (SelectedProjectType != null) + return SelectedProjectType.LargeImage; + else return _defaultLargeImage; + } + } + public string SelectedDescription + { + get + { + if (SelectedProjectType != null) + return SelectedProjectType.Description; + return ""; + } + } + private String _projectName = "App1"; + public String ProjectName + { + get { return _projectName; } + set { _projectName = value; RaisePropertyChangedAuto(); } + } + private String _projectLocation; + public String ProjectLocation + { + get { return _projectLocation; } + set { _projectLocation = value; RaisePropertyChangedAuto(); } + } + #endregion + #region constructor + public BaseProjectDialogVM() : base() + { + ProjectTypes = new ObservableCollection(); + RegisterProjectType(new StubProjectType()); + RegisterProjectType(new UnitTestProjectType()); + + _selectedProjectType = ProjectTypes.FirstOrDefault(); + + string workingDirectory = Environment.CurrentDirectory; + ProjectLocation = Directory.GetParent(workingDirectory).Parent.Parent.FullName; + + CanClose = true; + CloseCommand = new RelayCommand(Cancel, (x) => CanClose); + OKCommand = new RelayCommand(Accept, (x) => CanClose); + } + #endregion + #region commands + + #endregion + #region register_project_types + public void RegisterProjectType(IProjectType projectType) + { + ProjectTypes.Add(projectType); + } + + public void UnRegisterProjectItemHandler(IProjectType projectType) + { + ProjectTypes.Remove(projectType); + } + #endregion + } +} diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Dialogs/CommonOpenFileDialog.cs b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Dialogs/CommonOpenFileDialog.cs new file mode 100644 index 000000000..6664e2d9c --- /dev/null +++ b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Dialogs/CommonOpenFileDialog.cs @@ -0,0 +1,7 @@ +namespace Tango.Scripting.IDE.Dialogs +{ + //internal class CommonOpenFileDialog + //{ + // public string InitialDirectory { get; internal set; } + //} +} \ No newline at end of file diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Dialogs/NewProjectDialog.xaml b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Dialogs/NewProjectDialog.xaml deleted file mode 100644 index 914740ede..000000000 --- a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Dialogs/NewProjectDialog.xaml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Dialogs/NewProjectDialog.xaml.cs b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Dialogs/NewProjectDialog.xaml.cs deleted file mode 100644 index 24c9511e7..000000000 --- a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Dialogs/NewProjectDialog.xaml.cs +++ /dev/null @@ -1,62 +0,0 @@ - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows; -using System.Windows.Controls; -using System.Windows.Data; -using System.Windows.Documents; -using System.Windows.Input; -using System.Windows.Media; -using System.Windows.Media.Imaging; -using System.Windows.Navigation; -using System.Windows.Shapes; - -namespace Tango.Scripting.IDE.Dialogs -{ - /// - /// Interaction logic for NewProjectDialog.xaml - /// - public partial class NewProjectDialog : Window - { - static string _sAddNewProjectTitle = "Add New Project"; - static string _sNewProjectTitle = "New Project"; - protected bool _bNewProject; - - - public NewProjectDialog(bool bNewProject) - { - _bNewProject = bNewProject; - - InitializeComponent(); - Title = bNewProject ? _sAddNewProjectTitle : _sNewProjectTitle; - Loaded += DialogLoaded; - - - } - private void DialogLoaded(object sender, RoutedEventArgs e) - { - if (AddNewControl.DataContext is NewProjectDialogVM) - { - (AddNewControl.DataContext as NewProjectDialogVM).IsNewSolutionDialog = _bNewProject; - } - } - - private void CancelDialog(object sender, RoutedEventArgs e) - { - // Dialog box canceled - DialogResult = false; - } - - private void OKDialog(object sender, RoutedEventArgs e) - { - // Don't accept the dialog box if there is invalid data - // if (!IsValid(this)) return; - - // Dialog box accepted - DialogResult = true; - } - } -} diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Dialogs/NewProjectDialogVM.cs b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Dialogs/NewProjectDialogVM.cs deleted file mode 100644 index 1dd0e3205..000000000 --- a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Dialogs/NewProjectDialogVM.cs +++ /dev/null @@ -1,95 +0,0 @@ -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.Media.Imaging; -using Tango.Scripting.IDE.ProjectTypes; -using Tango.SharedUI; - -namespace Tango.Scripting.IDE.Dialogs -{ - public class NewProjectDialogVM : DialogViewVM - { - public ObservableCollection ProjectTypes { get; set; } - public List Locations { get; set; } - - private IProjectType _selectedProjectType = null; - public IProjectType SelectedProjectType - { - get { return _selectedProjectType; } - set { _selectedProjectType = value; - RaisePropertyChangedAuto(); - RaisePropertyChanged("LargeImage"); - RaisePropertyChanged("SelectedDescription"); - } - } - private BitmapSource _defaultLargeImage = ProjectType.GetImage("Images/test.png"); - public BitmapSource LargeImage - { - get - { - if (SelectedProjectType != null) - return SelectedProjectType.LargeImage; - else return _defaultLargeImage; - } - } - public string SelectedDescription - { - get - { - if (SelectedProjectType != null) - return SelectedProjectType.Description; - return ""; - } - } - private String _projectName = "App1"; - public String ProjectName - { - get { return _projectName; } - set { _projectName = value; RaisePropertyChangedAuto(); } - } - private String _projectLocation; - public String ProjectLocation - { - get { return _projectLocation; } - set { _projectLocation = value; RaisePropertyChangedAuto(); } - } - - private String _solutionName = "App1"; - public String SolutionName - { - get { return _solutionName; } - set { _solutionName = value; RaisePropertyChangedAuto(); } - } - - bool _isNewSolutionDialog = false; - public bool IsNewSolutionDialog { get { return _isNewSolutionDialog; } set { _isNewSolutionDialog = value; RaisePropertyChangedAuto(); } } - public NewProjectDialogVM() : base() - { - ProjectTypes = new ObservableCollection(); - RegisterProjectType(new StubProjectType()); - RegisterProjectType(new UnitTestProjectType()); - - _selectedProjectType = ProjectTypes.FirstOrDefault(); - - string workingDirectory = Environment.CurrentDirectory; - _projectLocation = Directory.GetParent(workingDirectory).Parent.Parent.FullName; - - Locations = new List(); - Locations.Add(_projectLocation); - - } - public void RegisterProjectType(IProjectType projectType) - { - ProjectTypes.Add(projectType); - } - - public void UnRegisterProjectItemHandler(IProjectType projectType) - { - ProjectTypes.Remove(projectType); - } - } -} diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Dialogs/NewProjectView.xaml b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Dialogs/NewProjectView.xaml new file mode 100644 index 000000000..20a334f3b --- /dev/null +++ b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Dialogs/NewProjectView.xaml @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Name: + + + + + + + + + + + + diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Dialogs/NewProjectView.xaml.cs b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Dialogs/NewProjectView.xaml.cs new file mode 100644 index 000000000..5221146d8 --- /dev/null +++ b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Dialogs/NewProjectView.xaml.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace Tango.Scripting.IDE.Dialogs +{ + /// + /// Interaction logic for AddNewControl.xaml + /// + public partial class NewProjectView : UserControl + { + public NewProjectView() + { + InitializeComponent(); + } + + } +} diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Dialogs/NewProjectViewVM.cs b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Dialogs/NewProjectViewVM.cs new file mode 100644 index 000000000..4b656c98c --- /dev/null +++ b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Dialogs/NewProjectViewVM.cs @@ -0,0 +1,59 @@ +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.Media.Imaging; +using Tango.Core.Commands; +using Tango.Scripting.IDE.ProjectTypes; +using Tango.SharedUI; +using Microsoft.WindowsAPICodePack.Dialogs; +using Microsoft.Win32; + +namespace Tango.Scripting.IDE.Dialogs +{ + public class NewProjectViewVM : BaseProjectDialogVM + { + + static public ObservableCollection Locations { get; set; } = new ObservableCollection(); + + private String _solutionName = "App1"; + public String SolutionName + { + get { return _solutionName; } + set { _solutionName = value; RaisePropertyChangedAuto(); } + } + #region Commands + public RelayCommand BrowseFileCommand { get; set; } + #endregion + public NewProjectViewVM() : base() + { + Title = "New Project"; + + if(Locations.IndexOf(ProjectLocation) < 0) + { + Locations.Add(ProjectLocation); + } + BrowseFileCommand = new RelayCommand(BrowseFile); + } + private void BrowseFile() + { + CommonOpenFileDialog dialog = new CommonOpenFileDialog(); + dialog.InitialDirectory = Locations.LastOrDefault(); + dialog.IsFolderPicker = true; + if (dialog.ShowDialog() == CommonFileDialogResult.Ok) + { + if( Directory.Exists(dialog.FileName) == true) + { + if(false == Locations.Contains(dialog.FileName)) + { + Locations.Add(dialog.FileName); + } + ProjectLocation = dialog.FileName; + } + } + } + } +} diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/IDEDialogViewModel.cs b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/IDEDialogViewModel.cs new file mode 100644 index 000000000..7532581b1 --- /dev/null +++ b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/IDEDialogViewModel.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Tango.SharedUI; + +namespace Tango.Scripting.IDE +{ + public class IDEDialogViewModel : DialogViewVM + { + public String Title { get; set; } + } +} diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/IDEViewModel.cs b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/IDEViewModel.cs new file mode 100644 index 000000000..ef413f69a --- /dev/null +++ b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/IDEViewModel.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Tango.Core.DI; +using Tango.Scripting.IDE.Notifications; +using Tango.SharedUI; + +namespace Tango.Scripting.IDE +{ + public class IDEViewModel : ViewModel + { + public INotificationManager NotificationManager { get; set; } + + public IDEViewModel() + { + TangoIOC.Default.Inject(this); + } + } +} diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Images/stop.png b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Images/stop.png index 7d1b1551a..33e74f508 100644 Binary files a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Images/stop.png and b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Images/stop.png differ diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Notifications/DefaultNotificationManager.cs b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Notifications/DefaultNotificationManager.cs new file mode 100644 index 000000000..7121e6ce0 --- /dev/null +++ b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Notifications/DefaultNotificationManager.cs @@ -0,0 +1,94 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Media.Imaging; +using Tango.Scripting.IDE.Windows; +using Tango.SharedUI; + +namespace Tango.Scripting.IDE.Notifications +{ + public class DefaultNotificationManager : INotificationManager + { + public Task ShowDialog(TViewModel viewModel, TView view) + where TViewModel : IDEDialogViewModel + where TView : FrameworkElement + { + TaskCompletionSource source = new TaskCompletionSource(); + + Application.Current.Dispatcher.BeginInvoke(new Action(() => + { + DialogWindow window = new DialogWindow(); + window.Title = viewModel.Title; + window.Content = view; + view.DataContext = viewModel; + window.WindowStartupLocation = WindowStartupLocation.CenterOwner; + window.Owner = Application.Current.MainWindow; + viewModel.Accepted += () => + { + window.Close(); + source.SetResult(viewModel); + }; + viewModel.Canceled += () => + { + window.Close(); + source.SetResult(viewModel); + }; + window.ShowDialog(); + })); + + return source.Task; + } + + public Task ShowDialog(TViewModel viewModel) where TViewModel : IDEDialogViewModel + { + var modelName = typeof(TViewModel).Name; + var viewName = modelName.Replace("VM", ""); + var viewType = typeof(TViewModel).Assembly.GetType(typeof(TViewModel).Namespace + "." + viewName); + var view = Activator.CreateInstance(viewType) as FrameworkElement; + return ShowDialog(viewModel, view); + } + + public Task ShowDialog() where TViewModel : IDEDialogViewModel + { + return ShowDialog(Activator.CreateInstance()); + } + + public Task ShowError(string title, string message) + { + throw new NotImplementedException(); + } + + public Task ShowInfo(string title, string message) + { + throw new NotImplementedException(); + } + + public ProgressNotificationHandler ShowProgress(string title, string message, bool canCancel = false) + { + throw new NotImplementedException(); + } + + public Task ShowQuestion(string title, string message) + { + throw new NotImplementedException(); + } + + public Task ShowSuccess(string title, string message) + { + throw new NotImplementedException(); + } + + public Task ShowWarning(string title, string message) + { + throw new NotImplementedException(); + } + + private Task ShowMessageBox(String title, String message, bool hasCancel, BitmapSource icon) + { + return null; + } + } +} diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Notifications/INotificationManager.cs b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Notifications/INotificationManager.cs new file mode 100644 index 000000000..1ed516b28 --- /dev/null +++ b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Notifications/INotificationManager.cs @@ -0,0 +1,95 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using Tango.SharedUI; + +namespace Tango.Scripting.IDE.Notifications +{ + /// + /// Represents the IDE notification manager. + /// + public interface INotificationManager + { + /// + /// Displays the specified TView as a dialog and TViewModel as it's data context. + /// + /// The type of the view model. + /// The type of the view. + /// The view model. + /// The view. + /// + Task ShowDialog(TViewModel viewModel, TView view) where TViewModel : IDEDialogViewModel where TView : FrameworkElement; + + /// + /// Finds (by convention )the appropriate view by the specified TViewModel name. + /// The search pattern is ViewVM - VM + View. + /// + /// The type of the view model. + /// The view model. + /// + Task ShowDialog(TViewModel viewModel) where TViewModel : IDEDialogViewModel; + + /// + /// Finds (by convention )the appropriate view by the specified TViewModel name. + /// The search pattern is ViewVM - VM + View. + /// The view model instance will be created automatically and must contain a parameterless constructor. + /// + /// The type of the view model. + /// The view model. + /// + Task ShowDialog() where TViewModel : IDEDialogViewModel; + + /// + /// Displays an error message. + /// + /// The title. + /// The message. + /// + Task ShowError(String title, String message); + + /// + /// Displays an error message. + /// + /// The title. + /// The message. + /// + Task ShowInfo(String title, String message); + + /// + /// Displays a warning message. + /// + /// The title. + /// The message. + /// + Task ShowWarning(String title, String message); + + /// + /// Displays a positive message. + /// + /// The title. + /// The message. + /// + Task ShowSuccess(String title, String message); + + /// + /// Displays a question and returns the result. + /// + /// The title. + /// The message. + /// + Task ShowQuestion(String title, String message); + + /// + /// Displays an intermediate progress dialog and returns an instance of . + /// Once the progress notification handler will be disposed the dialog will close. + /// + /// The title. + /// The message. + /// if set to true the dialog will contain a cancel button. + /// + ProgressNotificationHandler ShowProgress(String title, String message, bool canCancel = false); + } +} diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Notifications/ProgressNotificationHandler.cs b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Notifications/ProgressNotificationHandler.cs new file mode 100644 index 000000000..b36419400 --- /dev/null +++ b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Notifications/ProgressNotificationHandler.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Tango.Scripting.IDE.Notifications +{ + public class ProgressNotificationHandler : IDisposable + { + private Action _disposeAction; + + public ProgressNotificationHandler(Action disposeAction) + { + _disposeAction = disposeAction; + } + + public void Dispose() + { + _disposeAction?.Invoke(); + } + } +} diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/ScriptIDEView2.xaml b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/ScriptIDEView2.xaml index 7dbf5541f..67a673d3b 100644 --- a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/ScriptIDEView2.xaml +++ b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/ScriptIDEView2.xaml @@ -23,7 +23,7 @@ - + @@ -47,13 +47,17 @@ - + - + + + + + @@ -62,26 +66,52 @@ - - - - - - - - Debug @@ -89,54 +119,65 @@ Configuration Manager... - + - - + + + - - - - - - - - - - - - + + + + + + + + + + + + + - - + + + - - - + + + + + + + + + + - - - + - + @@ -161,38 +202,69 @@ - + - + + + - - - + + + - + - + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/ScriptIDEView2.xaml.cs b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/ScriptIDEView2.xaml.cs index 27251851c..5e4509beb 100644 --- a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/ScriptIDEView2.xaml.cs +++ b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/ScriptIDEView2.xaml.cs @@ -57,5 +57,37 @@ namespace Tango.Scripting.IDE { MessageBox.Show("I am here"); } + private void TreeViewControl_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs e) + { + + IProject SelectedItem = SolutionTree.SelectedItem as IProject; + if(SelectedItem != null && DataContext is ScriptIDEViewVM && ((ScriptIDEViewVM)DataContext).IsSolutionProject(SelectedItem)) + { + SolutionTree.ContextMenu = SolutionTree.Resources["SolutionContext"] as System.Windows.Controls.ContextMenu; + } + else + { + SolutionTree.ContextMenu = SolutionTree.Resources["FolderContext"] as System.Windows.Controls.ContextMenu; + } + } + + private void SolutionTree_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e) + { + TreeViewItem treeViewItem = VisualUpwardSearch(e.OriginalSource as DependencyObject); + + if (treeViewItem != null) + { + //treeViewItem.Focus(); + treeViewItem.IsSelected = true; + e.Handled = true; + } + } + static TreeViewItem VisualUpwardSearch(DependencyObject source) + { + while (source != null && !(source is TreeViewItem)) + source = VisualTreeHelper.GetParent(source); + + return source as TreeViewItem; + } } } diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/ScriptIDEViewVM.cs b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/ScriptIDEViewVM.cs index 3fc0ce0e1..d8a744fea 100644 --- a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/ScriptIDEViewVM.cs +++ b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/ScriptIDEViewVM.cs @@ -1,20 +1,24 @@ 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 : ViewModel + public class ScriptIDEViewVM : IDEViewModel { private List _projectTypes; public ObservableCollection ErrorList { get; set; } @@ -48,21 +52,34 @@ namespace Tango.Scripting.IDE 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() + public ScriptIDEViewVM() : base() { _projectTypes = new List(); OpenProjectItems = new ObservableCollection(); @@ -76,14 +93,22 @@ namespace Tango.Scripting.IDE //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"); + // MessageBox.Show("You said: RunProjectCommand"); + } + private void StopRunProjectCommand(object obj) + { + IsRunProject = false; } #endregion @@ -119,14 +144,36 @@ namespace Tango.Scripting.IDE /// /// Open a dialog to create a new project /// - private void AddNewProject() + private async void AddNewProject() { - Dialogs.NewProjectDialog dialog = new Dialogs.NewProjectDialog(true); - if(dialog.ShowDialog() == true) + var vm = await NotificationManager.ShowDialog(); + + if (vm.DialogResult) { - MessageBox.Show("You said: OK"); + } } + private async void AddProject() + { + var vm = await NotificationManager.ShowDialog(new AddProjectViewVM() + { + //ProjectLocation = Directory.GetParent(Environment.CurrentDirectory).Parent.Parent.FullName + //ProjectLocation = Path.GetDirectoryName(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)) + //ProjectLocation = "Current Solution folder..." + }); + + if (vm.DialogResult) + { + + } + } + public bool IsSolutionProject(IProject SelectedItem) + { + if (SelectedItem is StubProject) + return true; + return false; + + } #endregion } } diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Tango.Scripting.IDE.csproj b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Tango.Scripting.IDE.csproj index 0c53ed629..ea47eb8f7 100644 --- a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Tango.Scripting.IDE.csproj +++ b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Tango.Scripting.IDE.csproj @@ -37,6 +37,12 @@ ..\packages\MahApps.Metro.1.5.0\lib\net45\MahApps.Metro.dll + + ..\..\..\packages\WindowsAPICodePack-Core.1.1.1\lib\Microsoft.WindowsAPICodePack.dll + + + ..\..\..\packages\WindowsAPICodePack-Shell.1.1.1\lib\Microsoft.WindowsAPICodePack.Shell.dll + @@ -70,15 +76,24 @@ - - AddNewControl.xaml + + + + NewProjectView.xaml - - NewProjectDialog.xaml + + AddProjectView.xaml - + + + + + + + + CSharpScriptItemView.xaml @@ -104,11 +119,14 @@ - + + DialogWindow.xaml + + Designer MSBuild:Compile - + Designer MSBuild:Compile @@ -176,6 +194,10 @@ Designer MSBuild:Compile + + Designer + MSBuild:Compile + @@ -224,9 +246,7 @@ - - - + diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Themes/ButtonStyle.xaml b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Themes/ButtonStyle.xaml index 21ed3b4b8..f30adc85d 100644 --- a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Themes/ButtonStyle.xaml +++ b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Themes/ButtonStyle.xaml @@ -31,7 +31,6 @@ - @@ -48,5 +47,35 @@ - + \ No newline at end of file diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Themes/DarkThemesColors.xaml b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Themes/DarkThemesColors.xaml index 011b26c0d..caab88ef1 100644 --- a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Themes/DarkThemesColors.xaml +++ b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Themes/DarkThemesColors.xaml @@ -21,6 +21,7 @@ + @@ -93,5 +94,7 @@ + + \ No newline at end of file diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Themes/MenuDict.xaml b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Themes/MenuDict.xaml index b2c3fd965..f51a50b50 100644 --- a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Themes/MenuDict.xaml +++ b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Themes/MenuDict.xaml @@ -15,7 +15,7 @@ - + @@ -49,11 +49,15 @@ + - - + + + + + @@ -68,7 +72,7 @@ - + @@ -120,7 +124,10 @@ - + + + + @@ -134,6 +141,7 @@ + @@ -181,4 +189,41 @@ + + + + + \ No newline at end of file diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Themes/ToolbarStyle.xaml b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Themes/ToolbarStyle.xaml index 2cc24d31e..6223934b5 100644 --- a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Themes/ToolbarStyle.xaml +++ b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Themes/ToolbarStyle.xaml @@ -188,6 +188,38 @@ + + +