diff --git a/VECTO3GUI2020/App.xaml.cs b/VECTO3GUI2020/App.xaml.cs index eb0f63b9761845715b48454d9ea20be1d744364d..7475864d68bb7ac004fc538fce28a7ddd985a8b9 100644 --- a/VECTO3GUI2020/App.xaml.cs +++ b/VECTO3GUI2020/App.xaml.cs @@ -48,7 +48,7 @@ namespace VECTO3GUI2020 container.Bind<ISettingsModel>().To<SettingsModel>(); - container.Bind<IDialogHelper>().To<DialogHelper>(); + container.Bind<IDialogHelper>().To<DialogHelper>().InSingletonScope(); container.Bind<IWindowHelper>().To<WindowHelper>(); } diff --git a/VECTO3GUI2020/Helper/DialogHelper.cs b/VECTO3GUI2020/Helper/DialogHelper.cs index 3c85504230abf8bc78bc2de5ffc85ffb567afdfb..190866f8a6e2fe1eebb9703db9deca096a41a2d3 100644 --- a/VECTO3GUI2020/Helper/DialogHelper.cs +++ b/VECTO3GUI2020/Helper/DialogHelper.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -14,23 +15,31 @@ namespace VECTO3GUI2020.Helper { public class DialogHelper : IDialogHelper { - private readonly string _defaultInitialDirectory = System.IO.Path.GetDirectoryName( - System.Reflection.Assembly.GetExecutingAssembly().Location); - + private readonly string _defaultInitialDirectory = Settings.Default.DefaultFilePath; #region File and Folder Dialogs private string _xmlFilter = "XML Files (*.xml)|*.xml"; + + private Dictionary<string, string> lastUsedDirectories = new Dictionary<string, string>(); + + private string lastUsedDirectoryFolderPicker = null; private string[] OpenFilesDialog(string filter, string initialDirectory, bool multiselect) { + if (initialDirectory == null) { + initialDirectory = LookUpLastDir(filter); + } + + using (OpenFileDialog fd = new OpenFileDialog { InitialDirectory = initialDirectory ?? _defaultInitialDirectory, Multiselect = multiselect, - Filter = filter + Filter = filter, + RestoreDirectory = true }) { var result = fd.ShowDialog(); - if (result == DialogResult.OK) - { + if (result == DialogResult.OK) { + lastUsedDirectories[filter] = Path.GetDirectoryName(fd.FileName); return fd.FileNames; } } @@ -39,6 +48,16 @@ namespace VECTO3GUI2020.Helper return null; } + private string LookUpLastDir(string filter) + { + string lastUsedDirectory = null; + if (lastUsedDirectories.TryGetValue(filter, out lastUsedDirectory)) { + return lastUsedDirectory; + } else { + return Settings.Default.DefaultFilePath; + } + } + public string OpenFileDialog(string filter = "All files (*.*)|*.*", string initialDirectory = null) { return OpenFilesDialog(filter, initialDirectory)?[0]; @@ -69,14 +88,20 @@ namespace VECTO3GUI2020.Helper public string OpenFolderDialog(string initialDirectory = null) { + + if (initialDirectory == null) { + initialDirectory = lastUsedDirectoryFolderPicker; + } using (var dialog = new CommonOpenFileDialog()) { dialog.InitialDirectory = initialDirectory; dialog.IsFolderPicker = true; + dialog.Multiselect = false; + dialog.RestoreDirectory = true; var result = dialog.ShowDialog(); - if (result == CommonFileDialogResult.Ok) - { + if (result == CommonFileDialogResult.Ok) { + lastUsedDirectoryFolderPicker = Path.GetDirectoryName(dialog.FileName); return dialog.FileName; } } diff --git a/VECTO3GUI2020/ViewModel/Implementation/JobListViewModel.cs b/VECTO3GUI2020/ViewModel/Implementation/JobListViewModel.cs index daef720bf3793e1061a64ec35085f71b541c467f..014b95dc66735ba0c4d905237ddba2ac2db8dd0e 100644 --- a/VECTO3GUI2020/ViewModel/Implementation/JobListViewModel.cs +++ b/VECTO3GUI2020/ViewModel/Implementation/JobListViewModel.cs @@ -122,9 +122,7 @@ namespace VECTO3GUI2020.ViewModel.Implementation private void AddJobExecute() { IsLoading = true; - string path = _settings.DefaultFilePath; - var filename = _dialogHelper.OpenXMLFileDialog(path); - + var filename = _dialogHelper.OpenXMLFileDialog(); if (filename != null) { fileReadingBackgroundWorker.RunWorkerAsync(filename); diff --git a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageAirdragViewModel.cs b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageAirdragViewModel.cs index 240f3f990b1f93fef5106ee7cdaac83c66411db4..e3e54ba60dd8c98fa6469d4c4d09e38ea78c54e6 100644 --- a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageAirdragViewModel.cs +++ b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageAirdragViewModel.cs @@ -93,7 +93,7 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation public void LoadAirdragFileCommandExecute() { - var fileName =_dependencies.DialogHelper.OpenXMLFileDialog(Settings.Default.DefaultFilePath); + var fileName =_dependencies.DialogHelper.OpenXMLFileDialog(); if (fileName == null) { return; } diff --git a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageJobViewModel_v0_1.cs b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageJobViewModel_v0_1.cs index 06594be48c34a512ee335cedaf508b7c8dcc0138..ab0664fc21781a49a38721b5952a9d4014ce4f34 100644 --- a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageJobViewModel_v0_1.cs +++ b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageJobViewModel_v0_1.cs @@ -185,7 +185,7 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation private void LoadVehicleDataExecute() { - var fileName = _dialogHelper.Value.OpenXMLFileDialog(Settings.Default.DefaultFilePath); + var fileName = _dialogHelper.Value.OpenXMLFileDialog(); if (fileName == null) { return; } diff --git a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/NewMultiStageJobViewModel.cs b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/NewMultiStageJobViewModel.cs index 57cef695880e21a2abad16b1b9165e5f257a4220..bb569a84ed6cdcb38508b80cf9724e5d2ad0a662 100644 --- a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/NewMultiStageJobViewModel.cs +++ b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/NewMultiStageJobViewModel.cs @@ -62,7 +62,7 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation private void AddVifFileExecute() { - var fileName = _dialogHelper.OpenXMLFileDialog(_settings.DefaultFilePath); + var fileName = _dialogHelper.OpenXMLFileDialog(); if (fileName == null) { return; } diff --git a/Vecto3GUI2020Test/ViewModelTests/LoadAndSaveVehicleData.cs b/Vecto3GUI2020Test/ViewModelTests/LoadAndSaveVehicleData.cs index 14e2ce67f47913b86b19de4da4a2206702818f52..f02da4bbe75be1d903ced5c0be99f5487e147979 100644 --- a/Vecto3GUI2020Test/ViewModelTests/LoadAndSaveVehicleData.cs +++ b/Vecto3GUI2020Test/ViewModelTests/LoadAndSaveVehicleData.cs @@ -115,7 +115,7 @@ namespace Vecto3GUI2020Test public void loadInputFilePrimaryOnly() { var vm = loadFile(primary_vehicle_only); - Assert.AreEqual(1, vm.MultiStageJobViewModel.ManufacturingStageViewModel.StageCount); + Assert.AreEqual(2, vm.MultiStageJobViewModel.ManufacturingStageViewModel.StageCount); var primaryVehicle = vm.MultiStageJobViewModel.PrimaryVehicle; Assert.NotNull(primaryVehicle);