From 1582060466ddbb7a8d98c3dd6e5c1e196839c31b Mon Sep 17 00:00:00 2001 From: Geoffroy Bonneville Date: Thu, 28 Sep 2017 17:51:30 +0200 Subject: [PATCH] Add currently opened database to main menu Save and close reloads the page Design enhancements Some refactoring --- ModernKeePass/Common/DatabaseHelper.cs | 22 +++++++------- ModernKeePass/MainPage.xaml | 13 ++++++++- ModernKeePass/MainPage.xaml.cs | 30 ++++++++++++++------ ModernKeePass/Models/MainMenuItem.cs | 13 ++++++++- ModernKeePass/Pages/OpenDatabasePage.xaml | 12 ++++---- ModernKeePass/Pages/SaveDatabasePage.xaml.cs | 15 ++++++++-- 6 files changed, 74 insertions(+), 31 deletions(-) diff --git a/ModernKeePass/Common/DatabaseHelper.cs b/ModernKeePass/Common/DatabaseHelper.cs index adc8966..ad4d0e9 100644 --- a/ModernKeePass/Common/DatabaseHelper.cs +++ b/ModernKeePass/Common/DatabaseHelper.cs @@ -11,16 +11,18 @@ namespace ModernKeePass.Common { public class DatabaseHelper { - private PwDatabase _pwDatabase = new PwDatabase(); - private StorageFile databaseFile; + private readonly PwDatabase _pwDatabase = new PwDatabase(); + private readonly StorageFile _databaseFile; public GroupVm RootGroup { get; set; } - public bool IsOpen { get; set; } - public string Name { get; set; } + + public bool IsOpen => _pwDatabase.IsOpen; + + public string Name => _databaseFile.Name; public DatabaseHelper(StorageFile databaseFile) { - this.databaseFile = databaseFile; + this._databaseFile = databaseFile; } public string Open(string password) { @@ -28,14 +30,10 @@ namespace ModernKeePass.Common try { key.AddUserKey(new KcpPassword(password)); - _pwDatabase.Open(IOConnectionInfo.FromFile(databaseFile), key, new NullStatusLogger()); + _pwDatabase.Open(IOConnectionInfo.FromFile(_databaseFile), key, new NullStatusLogger()); //_pwDatabase.Open(IOConnectionInfo.FromPath(databaseFile.Path), key, new NullStatusLogger()); - IsOpen = _pwDatabase.IsOpen; - if (IsOpen) - { - Name = databaseFile.DisplayName; - RootGroup = new GroupVm(_pwDatabase.RootGroup); - } + + if (IsOpen) RootGroup = new GroupVm(_pwDatabase.RootGroup); } catch (ArgumentNullException) { diff --git a/ModernKeePass/MainPage.xaml b/ModernKeePass/MainPage.xaml index 4b54697..728a129 100644 --- a/ModernKeePass/MainPage.xaml +++ b/ModernKeePass/MainPage.xaml @@ -14,7 +14,7 @@ + Source="{Binding MainMenuItems}" IsSourceGrouped="True" /> @@ -40,6 +40,17 @@ + + + + + + + + + + + diff --git a/ModernKeePass/MainPage.xaml.cs b/ModernKeePass/MainPage.xaml.cs index 524a4e4..88b70c8 100644 --- a/ModernKeePass/MainPage.xaml.cs +++ b/ModernKeePass/MainPage.xaml.cs @@ -1,5 +1,8 @@ using System.Collections.ObjectModel; +using System.Linq; +using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Navigation; using ModernKeePass.Models; using ModernKeePass.Pages; using ModernKeePass.ViewModels; @@ -16,26 +19,35 @@ namespace ModernKeePass public MainPage() { InitializeComponent(); + } + + protected override void OnNavigatedTo(NavigationEventArgs e) + { + base.OnNavigatedTo(e); var mainMenuItems = new ObservableCollection { - new MainMenuItem {Title = "File", PageType = typeof(OpenDatabasePage)}, - new MainMenuItem {Title = "New" /*, PageType = typeof(NewDatabasePage)*/}, - new MainMenuItem {Title = "Save" , PageType = typeof(SaveDatabasePage)}, - new MainMenuItem {Title = "Recent files - Coming soon" /*, PageType = typeof(RecentDatabasesPage)*/}, - new MainMenuItem {Title = "Url files - Coming soon" /*, PageType = typeof(OpenUrlPage)*/} + new MainMenuItem {Title = "Open", PageType = typeof(OpenDatabasePage), Destination = MenuFrame, Parameter = Frame}, + new MainMenuItem {Title = "New" /*, PageType = typeof(NewDatabasePage)*/, Destination = MenuFrame}, + new MainMenuItem {Title = "Save" , PageType = typeof(SaveDatabasePage), Destination = MenuFrame, Parameter = Frame}, + new MainMenuItem {Title = "Recent" /*, PageType = typeof(RecentDatabasesPage)*/, Destination = MenuFrame} }; - DataContext = new MainVm {MainMenuItems = mainMenuItems}; + var app = (App)Application.Current; + if (app.Database != null && app.Database.IsOpen) + mainMenuItems.Add(new MainMenuItem { Title = app.Database.Name, PageType = typeof(GroupDetailPage), Destination = Frame, Parameter = app.Database.RootGroup, Group = 1}); + var result = from item in mainMenuItems group item by item.Group into grp orderby grp.Key select grp; + MenuItemsSource.Source = result; + //DataContext = new MainVm {MainMenuItems = mainMenuItems}; + MenuListView.SelectedIndex = -1; } - + private void ListView_SelectionChanged(object sender, SelectionChangedEventArgs e) { - if (Frame == null) return; var listView = sender as ListView; if (listView == null) return; if (listView.SelectedIndex == -1) return; var selectedItem = listView.SelectedItem as MainMenuItem; - if (selectedItem != null) MenuFrame.Navigate(selectedItem.PageType, Frame); + selectedItem?.Destination.Navigate(selectedItem.PageType, selectedItem.Parameter); } } } diff --git a/ModernKeePass/Models/MainMenuItem.cs b/ModernKeePass/Models/MainMenuItem.cs index 9a38340..905a5cd 100644 --- a/ModernKeePass/Models/MainMenuItem.cs +++ b/ModernKeePass/Models/MainMenuItem.cs @@ -1,12 +1,23 @@ using System; +using Windows.UI.Xaml.Controls; using ModernKeePass.Interfaces; namespace ModernKeePass.Models { public class MainMenuItem: IIsEnabled { - public string Title { get; set; } + private string _title; + + public string Title + { + get { return IsEnabled ? _title : _title + " - Coming soon"; } + set { _title = value; } + } + public Type PageType { get; set; } + public object Parameter { get; set; } + public Frame Destination { get; set; } + public int Group { get; set; } = 0; public bool IsEnabled => PageType != null; public override string ToString() diff --git a/ModernKeePass/Pages/OpenDatabasePage.xaml b/ModernKeePass/Pages/OpenDatabasePage.xaml index 0c66e35..00ab3d4 100644 --- a/ModernKeePass/Pages/OpenDatabasePage.xaml +++ b/ModernKeePass/Pages/OpenDatabasePage.xaml @@ -25,13 +25,15 @@ + - - - - -