From 5638b59fda6b8e8db3cfae9919fd49ae2f3b328b Mon Sep 17 00:00:00 2001 From: Geoffroy Bonneville Date: Fri, 13 Oct 2017 11:48:58 +0200 Subject: [PATCH] Corrected Entry password not synchronized bug Created a new welcome page to be shown on first launch Added descriptive text in main menu pages --- ModernKeePass/MainPage.xaml.cs | 2 ++ ModernKeePass/ModernKeePass.csproj | 7 +++++ ModernKeePass/Pages/NewDatabasePage.xaml | 3 +- ModernKeePass/Pages/OpenDatabasePage.xaml | 2 ++ ModernKeePass/Pages/SaveDatabasePage.xaml | 6 ++-- ModernKeePass/Pages/WelcomePage.xaml | 20 +++++++++++++ ModernKeePass/Pages/WelcomePage.xaml.cs | 30 +++++++++++++++++++ ModernKeePass/ViewModels/EntryVm.cs | 28 +++++++++++++---- .../ViewModels/Items/MainMenuItemVm.cs | 9 ++---- ModernKeePass/ViewModels/MainVm.cs | 5 ++-- ModernKeePass/ViewModels/SaveVm.cs | 22 ++------------ 11 files changed, 97 insertions(+), 37 deletions(-) create mode 100644 ModernKeePass/Pages/WelcomePage.xaml create mode 100644 ModernKeePass/Pages/WelcomePage.xaml.cs diff --git a/ModernKeePass/MainPage.xaml.cs b/ModernKeePass/MainPage.xaml.cs index 0692664..e552153 100644 --- a/ModernKeePass/MainPage.xaml.cs +++ b/ModernKeePass/MainPage.xaml.cs @@ -1,5 +1,6 @@ using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Navigation; +using ModernKeePass.Pages; using ModernKeePass.ViewModels; // The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234238 @@ -22,6 +23,7 @@ namespace ModernKeePass { base.OnNavigatedTo(e); DataContext = new MainVm(Frame, MenuFrame); + if (Model.SelectedItem == null) MenuFrame.Navigate(typeof(WelcomePage)); } private void ListView_SelectionChanged(object sender, SelectionChangedEventArgs e) diff --git a/ModernKeePass/ModernKeePass.csproj b/ModernKeePass/ModernKeePass.csproj index 8beb5ef..cb620ac 100644 --- a/ModernKeePass/ModernKeePass.csproj +++ b/ModernKeePass/ModernKeePass.csproj @@ -136,6 +136,9 @@ NewDatabasePage.xaml + + WelcomePage.xaml + @@ -211,6 +214,10 @@ Designer MSBuild:Compile + + Designer + MSBuild:Compile + Designer MSBuild:Compile diff --git a/ModernKeePass/Pages/NewDatabasePage.xaml b/ModernKeePass/Pages/NewDatabasePage.xaml index ad2f32d..7a9df0e 100644 --- a/ModernKeePass/Pages/NewDatabasePage.xaml +++ b/ModernKeePass/Pages/NewDatabasePage.xaml @@ -17,7 +17,8 @@ + Create a new password database to the location of your chosing. - + diff --git a/ModernKeePass/Pages/OpenDatabasePage.xaml b/ModernKeePass/Pages/OpenDatabasePage.xaml index fc2f9d1..95a5463 100644 --- a/ModernKeePass/Pages/OpenDatabasePage.xaml +++ b/ModernKeePass/Pages/OpenDatabasePage.xaml @@ -17,7 +17,9 @@ + Open an existing password database from your PC. + Open an existing password database from an Internet location (not yet implemented). diff --git a/ModernKeePass/Pages/SaveDatabasePage.xaml b/ModernKeePass/Pages/SaveDatabasePage.xaml index 858d54c..8e7d74a 100644 --- a/ModernKeePass/Pages/SaveDatabasePage.xaml +++ b/ModernKeePass/Pages/SaveDatabasePage.xaml @@ -11,7 +11,9 @@ - - + + This will save and close the currently opened database. + + This will save the currently opened database as a new file and leave it open. diff --git a/ModernKeePass/Pages/WelcomePage.xaml b/ModernKeePass/Pages/WelcomePage.xaml new file mode 100644 index 0000000..54ec365 --- /dev/null +++ b/ModernKeePass/Pages/WelcomePage.xaml @@ -0,0 +1,20 @@ + + + + Welcome + + + Have an existing password database? Open it here. + + + + Want to create a new password database? Do it here. + + + diff --git a/ModernKeePass/Pages/WelcomePage.xaml.cs b/ModernKeePass/Pages/WelcomePage.xaml.cs new file mode 100644 index 0000000..8e5e6a9 --- /dev/null +++ b/ModernKeePass/Pages/WelcomePage.xaml.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices.WindowsRuntime; +using Windows.Foundation; +using Windows.Foundation.Collections; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Controls.Primitives; +using Windows.UI.Xaml.Data; +using Windows.UI.Xaml.Input; +using Windows.UI.Xaml.Media; +using Windows.UI.Xaml.Navigation; + +// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234238 + +namespace ModernKeePass.Pages +{ + /// + /// An empty page that can be used on its own or navigated to within a Frame. + /// + public sealed partial class WelcomePage : Page + { + public WelcomePage() + { + this.InitializeComponent(); + } + } +} diff --git a/ModernKeePass/ViewModels/EntryVm.cs b/ModernKeePass/ViewModels/EntryVm.cs index cb9a28f..5598efe 100644 --- a/ModernKeePass/ViewModels/EntryVm.cs +++ b/ModernKeePass/ViewModels/EntryVm.cs @@ -1,4 +1,4 @@ -using Windows.UI.Text; +using System.ComponentModel; using Windows.UI.Xaml.Controls; using ModernKeePass.Common; using ModernKeePass.Mappings; @@ -7,7 +7,7 @@ using ModernKeePassLib.Security; namespace ModernKeePass.ViewModels { - public class EntryVm: NotifyPropertyChangedBase + public class EntryVm : INotifyPropertyChanged { public GroupVm ParentGroup { get; } public PwEntry Entry { get; } @@ -36,7 +36,11 @@ namespace ModernKeePass.ViewModels public string Password { get { return GetEntryValue(PwDefs.PasswordField); } - set { SetEntryValue(PwDefs.PasswordField, value); } + set + { + SetEntryValue(PwDefs.PasswordField, value); + NotifyPropertyChanged("Password"); + } } public string Url { @@ -62,17 +66,31 @@ namespace ModernKeePass.ViewModels public bool IsEditMode { get { return _isEditMode; } - set { SetProperty(ref _isEditMode, value); } + set + { + _isEditMode = value; + NotifyPropertyChanged("IsEditMode"); + } } public bool IsRevealPassword { get { return _isRevealPassword; } - set { SetProperty(ref _isRevealPassword, value); } + set + { + _isRevealPassword = value; + NotifyPropertyChanged("IsRevealPassword"); + } } + public event PropertyChangedEventHandler PropertyChanged; + private bool _isEditMode; private bool _isRevealPassword; + private void NotifyPropertyChanged(string propertyName) + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } public EntryVm() { } public EntryVm(PwEntry entry, GroupVm parent) diff --git a/ModernKeePass/ViewModels/Items/MainMenuItemVm.cs b/ModernKeePass/ViewModels/Items/MainMenuItemVm.cs index 14070ef..1d7e5b8 100644 --- a/ModernKeePass/ViewModels/Items/MainMenuItemVm.cs +++ b/ModernKeePass/ViewModels/Items/MainMenuItemVm.cs @@ -7,21 +7,16 @@ namespace ModernKeePass.ViewModels { public class MainMenuItemVm: NotifyPropertyChangedBase, IIsEnabled { - private string _title; private bool _isSelected; - public string Title - { - get { return IsEnabled ? _title : _title + " - Coming soon"; } - set { _title = value; } - } + public string Title { get; set; } public Type PageType { get; set; } public object Parameter { get; set; } public Frame Destination { get; set; } public int Group { get; set; } = 0; public Symbol SymbolIcon { get; set; } - public bool IsEnabled => PageType != null; + public bool IsEnabled { get; set; } = true; public bool IsSelected { diff --git a/ModernKeePass/ViewModels/MainVm.cs b/ModernKeePass/ViewModels/MainVm.cs index 086951c..06cfeea 100644 --- a/ModernKeePass/ViewModels/MainVm.cs +++ b/ModernKeePass/ViewModels/MainVm.cs @@ -45,6 +45,7 @@ namespace ModernKeePass.ViewModels { var app = (App)Application.Current; var mru = StorageApplicationPermissions.MostRecentlyUsedList; + var isDatabaseOpen = app.Database != null && app.Database.Status == DatabaseHelper.DatabaseStatus.Opened; var mainMenuItems = new ObservableCollection { @@ -60,11 +61,11 @@ namespace ModernKeePass.ViewModels new MainMenuItemVm { Title = "Save" , PageType = typeof(SaveDatabasePage), Destination = destinationFrame, Parameter = referenceFrame, SymbolIcon = Symbol.Save, - IsSelected = app.Database != null && app.Database.Status == DatabaseHelper.DatabaseStatus.Opened + IsSelected = isDatabaseOpen, IsEnabled = isDatabaseOpen }, new MainMenuItemVm { Title = "Recent" , PageType = typeof(RecentDatabasesPage), Destination = destinationFrame, Parameter = referenceFrame, SymbolIcon = Symbol.Copy, - IsSelected = (app.Database == null || app.Database.Status == DatabaseHelper.DatabaseStatus.Closed) && mru.Entries.Count > 0 + IsSelected = (app.Database == null || app.Database.Status == DatabaseHelper.DatabaseStatus.Closed) && mru.Entries.Count > 0, IsEnabled = mru.Entries.Count > 0 } }; // Auto-select the Recent Items menu item if the conditions are met diff --git a/ModernKeePass/ViewModels/SaveVm.cs b/ModernKeePass/ViewModels/SaveVm.cs index 7001054..e10863e 100644 --- a/ModernKeePass/ViewModels/SaveVm.cs +++ b/ModernKeePass/ViewModels/SaveVm.cs @@ -1,34 +1,16 @@ -using System.ComponentModel; -using Windows.Storage; +using Windows.Storage; using Windows.UI.Xaml; -using ModernKeePass.Common; namespace ModernKeePass.ViewModels { - public class SaveVm: INotifyPropertyChanged + public class SaveVm { - public bool IsSaveEnabled - { - get - { - var app = (App)Application.Current; - return app.Database.Status == DatabaseHelper.DatabaseStatus.Opened; - } - } - - public event PropertyChangedEventHandler PropertyChanged; - private void NotifyPropertyChanged(string propertyName) - { - PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); - } - public void Save(bool close = true) { var app = (App)Application.Current; app.Database.Save(); if (!close) return; app.Database.Close(); - NotifyPropertyChanged("IsSaveEnabled"); } internal void Save(StorageFile file)