From 2b48b64f2f7959562696f57a60f50aedf7ea0e25 Mon Sep 17 00:00:00 2001 From: BONNEVILLE Geoffroy Date: Thu, 14 Jun 2018 18:38:05 +0200 Subject: [PATCH] Hamburger button menu is now a User Control WIP History in Entry page --- ModernKeePass/ModernKeePass.App.csproj | 8 ++ ModernKeePass/Strings/en-US/Resources.resw | 21 ++-- ModernKeePass/Strings/fr-FR/Resources.resw | 21 ++-- ModernKeePass/ViewModels/EntryVm.cs | 17 ++- ModernKeePass/ViewModels/HistoryVm.cs | 19 +++ ModernKeePass/Views/EntryDetailPage.xaml | 115 +++++++++--------- ModernKeePass/Views/GroupDetailPage.xaml | 85 +------------ ModernKeePass/Views/GroupDetailPage.xaml.cs | 5 +- .../HamburgerMenuUserControl.xaml | 95 +++++++++++++++ .../HamburgerMenuUserControl.xaml.cs | 82 +++++++++++++ 10 files changed, 299 insertions(+), 169 deletions(-) create mode 100644 ModernKeePass/ViewModels/HistoryVm.cs create mode 100644 ModernKeePass/Views/UserControls/HamburgerMenuUserControl.xaml create mode 100644 ModernKeePass/Views/UserControls/HamburgerMenuUserControl.xaml.cs diff --git a/ModernKeePass/ModernKeePass.App.csproj b/ModernKeePass/ModernKeePass.App.csproj index e76076f..ed9c35d 100644 --- a/ModernKeePass/ModernKeePass.App.csproj +++ b/ModernKeePass/ModernKeePass.App.csproj @@ -123,6 +123,7 @@ + DonatePage.xaml @@ -229,6 +230,9 @@ + + HamburgerMenuUserControl.xaml + @@ -352,6 +356,10 @@ MSBuild:Compile PreserveNewest + + Designer + MSBuild:Compile + diff --git a/ModernKeePass/Strings/en-US/Resources.resw b/ModernKeePass/Strings/en-US/Resources.resw index fa743dc..1a15826 100644 --- a/ModernKeePass/Strings/en-US/Resources.resw +++ b/ModernKeePass/Strings/en-US/Resources.resw @@ -213,21 +213,9 @@ Filter... - - New group - - - New group - Search... - - Groups - - - Groups - New group name... @@ -390,4 +378,13 @@ Have an existing password database? Open it here. + + New group + + + Groups + + + History + \ No newline at end of file diff --git a/ModernKeePass/Strings/fr-FR/Resources.resw b/ModernKeePass/Strings/fr-FR/Resources.resw index 9f6e508..b33fda5 100644 --- a/ModernKeePass/Strings/fr-FR/Resources.resw +++ b/ModernKeePass/Strings/fr-FR/Resources.resw @@ -213,21 +213,9 @@ Filtrer... - - Nouveau groupe - - - Nouveau groupe - Rechercher... - - Groupes - - - Groupes - Nom du nouveau groupe... @@ -390,4 +378,13 @@ Pour ouvrir une base de données existante, c'est ici. + + Nouveau groupe + + + Groupes + + + Historique + \ No newline at end of file diff --git a/ModernKeePass/ViewModels/EntryVm.cs b/ModernKeePass/ViewModels/EntryVm.cs index a5ca84f..7931110 100644 --- a/ModernKeePass/ViewModels/EntryVm.cs +++ b/ModernKeePass/ViewModels/EntryVm.cs @@ -31,6 +31,8 @@ namespace ModernKeePass.ViewModels public string CustomChars { get; set; } = string.Empty; public PwUuid IdUuid => _pwEntry?.Uuid; public string Id => _pwEntry?.Uuid.ToHexString(); + public bool IsRecycleOnDelete => _database.RecycleBinEnabled && !ParentGroup.IsSelected; + public IEnumerable BreadCrumb => new List(ParentGroup.BreadCrumb) {ParentGroup}; public double PasswordLength { @@ -117,9 +119,7 @@ namespace ModernKeePass.ViewModels NotifyPropertyChanged("IsVisible"); } } - - public bool IsRecycleOnDelete => _database.RecycleBinEnabled && !ParentGroup.IsSelected; - + public bool IsRevealPassword { get { return _isRevealPassword; } @@ -139,7 +139,16 @@ namespace ModernKeePass.ViewModels } } - public IEnumerable BreadCrumb => new List(ParentGroup.BreadCrumb) {ParentGroup}; + public IEnumerable History + { + get + { + foreach (var historyEntry in _pwEntry.History) + { + yield return new EntryVm(historyEntry, ParentGroup); + } + } + } public event PropertyChangedEventHandler PropertyChanged; diff --git a/ModernKeePass/ViewModels/HistoryVm.cs b/ModernKeePass/ViewModels/HistoryVm.cs new file mode 100644 index 0000000..070a70d --- /dev/null +++ b/ModernKeePass/ViewModels/HistoryVm.cs @@ -0,0 +1,19 @@ +using System.Collections.Generic; +using ModernKeePass.Interfaces; + +namespace ModernKeePass.ViewModels +{ + public class HistoryVm: IHasSelectableObject + { + public IEnumerable History { get; } + + public HistoryVm() { } + + public HistoryVm(IEnumerable history) + { + History = history; + } + + public ISelectableModel SelectedItem { get; set; } + } +} \ No newline at end of file diff --git a/ModernKeePass/Views/EntryDetailPage.xaml b/ModernKeePass/Views/EntryDetailPage.xaml index 73fde7e..238a400 100644 --- a/ModernKeePass/Views/EntryDetailPage.xaml +++ b/ModernKeePass/Views/EntryDetailPage.xaml @@ -373,9 +373,9 @@ - + @@ -429,63 +429,68 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + diff --git a/ModernKeePass/Views/GroupDetailPage.xaml b/ModernKeePass/Views/GroupDetailPage.xaml index 923231d..85ed539 100644 --- a/ModernKeePass/Views/GroupDetailPage.xaml +++ b/ModernKeePass/Views/GroupDetailPage.xaml @@ -116,90 +116,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + diff --git a/ModernKeePass/Views/GroupDetailPage.xaml.cs b/ModernKeePass/Views/GroupDetailPage.xaml.cs index 5b40af4..3fa5fdf 100644 --- a/ModernKeePass/Views/GroupDetailPage.xaml.cs +++ b/ModernKeePass/Views/GroupDetailPage.xaml.cs @@ -79,13 +79,14 @@ namespace ModernKeePass.Views private void groups_SelectionChanged(object sender, SelectionChangedEventArgs e) { + var listView = sender as ListView; GroupVm group; - switch (LeftListView.SelectedIndex) + switch (listView?.SelectedIndex) { case -1: return; default: - group = LeftListView.SelectedItem as GroupVm; + group = listView?.SelectedItem as GroupVm; break; } Frame.Navigate(typeof(GroupDetailPage), group); diff --git a/ModernKeePass/Views/UserControls/HamburgerMenuUserControl.xaml b/ModernKeePass/Views/UserControls/HamburgerMenuUserControl.xaml new file mode 100644 index 0000000..c2525c3 --- /dev/null +++ b/ModernKeePass/Views/UserControls/HamburgerMenuUserControl.xaml @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ModernKeePass/Views/UserControls/HamburgerMenuUserControl.xaml.cs b/ModernKeePass/Views/UserControls/HamburgerMenuUserControl.xaml.cs new file mode 100644 index 0000000..a6cdeee --- /dev/null +++ b/ModernKeePass/Views/UserControls/HamburgerMenuUserControl.xaml.cs @@ -0,0 +1,82 @@ +using System.Collections.Generic; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using ModernKeePass.Interfaces; + +// The User Control item template is documented at http://go.microsoft.com/fwlink/?LinkId=234236 + +namespace ModernKeePass.Views.UserControls +{ + // TODO: Add a property (string path) that allows chosing which field to display + public sealed partial class HamburgerMenuUserControl + { + public HamburgerMenuUserControl() + { + InitializeComponent(); + } + + public string HeaderLabel + { + get { return (string)GetValue(HeaderLabelProperty); } + set { SetValue(HeaderLabelProperty, value); } + } + public static readonly DependencyProperty HeaderLabelProperty = + DependencyProperty.Register( + "HeaderLabel", + typeof(string), + typeof(HamburgerMenuUserControl), + new PropertyMetadata("Header", (o, args) => { })); + + public string ButtonLabel + { + get { return (string)GetValue(ButtonLabelProperty); } + set { SetValue(ButtonLabelProperty, value); } + } + // TODO: set a boolean that will show/hide the button when a value is set/not set + public static readonly DependencyProperty ButtonLabelProperty = + DependencyProperty.Register( + "ButtonLabel", + typeof(string), + typeof(HamburgerMenuUserControl), + new PropertyMetadata("Button", (o, args) => { })); + + public object ResizeTarget + { + get { return GetValue(ResizeTargetProperty); } + set { SetValue(ResizeTargetProperty, value); } + } + public static readonly DependencyProperty ResizeTargetProperty = + DependencyProperty.Register( + "ResizeTarget", + typeof(object), + typeof(HamburgerMenuUserControl), + new PropertyMetadata(null, (o, args) => { })); + + public IEnumerable ItemsSource + { + get { return (IEnumerable)GetValue(ItemsSourceProperty); } + set { SetValue(ItemsSourceProperty, value); } + } + + public static readonly DependencyProperty ItemsSourceProperty = + DependencyProperty.Register( + "ItemsSource", + typeof(IEnumerable), + typeof(HamburgerMenuUserControl), + new PropertyMetadata(new List(), (o, args) => { })); + + public event SelectionChangedEventHandler SelectionChanged; + public delegate void SelectionChangedEventHandler(object sender, SelectionChangedEventArgs e); + private void Selector_OnSelectionChanged(object sender, SelectionChangedEventArgs e) + { + SelectionChanged?.Invoke(sender, e); + } + + public event ButtonClickedEventHandler ButtonClicked; + public delegate void ButtonClickedEventHandler(object sender, RoutedEventArgs e); + private void ButtonBase_OnClick(object sender, RoutedEventArgs e) + { + ButtonClicked?.Invoke(sender, e); + } + } +}