From 7e337c4a405573acf50ce7d03a556eda8a88be61 Mon Sep 17 00:00:00 2001 From: BONNEVILLE Geoffroy Date: Fri, 15 Jun 2018 18:07:44 +0200 Subject: [PATCH] History list fully functional in Entry page Viewing a historic entry disables controls on the page Enhancements in the hamburger menu --- ModernKeePass/Controls/TextBoxWithButton.cs | 12 ++++++++ ModernKeePass/ModernKeePass.App.csproj | 1 - ModernKeePass/Strings/en-US/CodeBehind.resw | 3 ++ ModernKeePass/Strings/fr-FR/CodeBehind.resw | 3 ++ .../Styles/HamburgerButtonStyle.xaml | 6 ++-- .../Styles/TextBoxWithButtonStyle.xaml | 3 ++ ModernKeePass/ViewModels/EntryVm.cs | 27 +++++++++++++---- ModernKeePass/ViewModels/GroupVm.cs | 1 + ModernKeePass/ViewModels/HistoryVm.cs | 19 ------------ ModernKeePass/Views/EntryDetailPage.xaml | 30 +++++++++---------- ModernKeePass/Views/EntryDetailPage.xaml.cs | 16 ++++++++++ ModernKeePass/Views/GroupDetailPage.xaml | 2 +- .../HamburgerMenuUserControl.xaml | 19 ++++-------- .../HamburgerMenuUserControl.xaml.cs | 22 ++++++++++---- 14 files changed, 101 insertions(+), 63 deletions(-) delete mode 100644 ModernKeePass/ViewModels/HistoryVm.cs diff --git a/ModernKeePass/Controls/TextBoxWithButton.cs b/ModernKeePass/Controls/TextBoxWithButton.cs index 602fadd..99f0e5f 100644 --- a/ModernKeePass/Controls/TextBoxWithButton.cs +++ b/ModernKeePass/Controls/TextBoxWithButton.cs @@ -1,6 +1,7 @@ using System; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Controls.Primitives; namespace ModernKeePass.Controls { @@ -43,6 +44,17 @@ namespace ModernKeePass.Controls typeof(TextBoxWithButton), new PropertyMetadata(true, (o, args) => { })); + public FlyoutBase ButtonFlyout + { + get { return (FlyoutBase)GetValue(ButtonFlyoutProperty); } + set { SetValue(ButtonFlyoutProperty, value); } + } + public static readonly DependencyProperty ButtonFlyoutProperty = + DependencyProperty.Register( + "ButtonFlyout", + typeof(FlyoutBase), + typeof(TextBoxWithButton), + new PropertyMetadata(null, (o, args) => { })); protected override void OnApplyTemplate() { diff --git a/ModernKeePass/ModernKeePass.App.csproj b/ModernKeePass/ModernKeePass.App.csproj index ed9c35d..7c74128 100644 --- a/ModernKeePass/ModernKeePass.App.csproj +++ b/ModernKeePass/ModernKeePass.App.csproj @@ -123,7 +123,6 @@ - DonatePage.xaml diff --git a/ModernKeePass/Strings/en-US/CodeBehind.resw b/ModernKeePass/Strings/en-US/CodeBehind.resw index ba9af2f..e3273cf 100644 --- a/ModernKeePass/Strings/en-US/CodeBehind.resw +++ b/ModernKeePass/Strings/en-US/CodeBehind.resw @@ -267,4 +267,7 @@ Recycle Bin + + Current + \ No newline at end of file diff --git a/ModernKeePass/Strings/fr-FR/CodeBehind.resw b/ModernKeePass/Strings/fr-FR/CodeBehind.resw index e8e76d4..afbcc62 100644 --- a/ModernKeePass/Strings/fr-FR/CodeBehind.resw +++ b/ModernKeePass/Strings/fr-FR/CodeBehind.resw @@ -267,4 +267,7 @@ Corbeille + + Courante + \ No newline at end of file diff --git a/ModernKeePass/Styles/HamburgerButtonStyle.xaml b/ModernKeePass/Styles/HamburgerButtonStyle.xaml index cecece0..a534789 100644 --- a/ModernKeePass/Styles/HamburgerButtonStyle.xaml +++ b/ModernKeePass/Styles/HamburgerButtonStyle.xaml @@ -16,13 +16,13 @@ - + - - + + diff --git a/ModernKeePass/Styles/TextBoxWithButtonStyle.xaml b/ModernKeePass/Styles/TextBoxWithButtonStyle.xaml index 3664575..973338a 100644 --- a/ModernKeePass/Styles/TextBoxWithButtonStyle.xaml +++ b/ModernKeePass/Styles/TextBoxWithButtonStyle.xaml @@ -246,6 +246,9 @@ Content="{TemplateBinding ButtonSymbol}" IsEnabled="{TemplateBinding IsButtonEnabled}" VerticalAlignment="Stretch"> + + + diff --git a/ModernKeePass/ViewModels/EntryVm.cs b/ModernKeePass/ViewModels/EntryVm.cs index 7931110..d19240f 100644 --- a/ModernKeePass/ViewModels/EntryVm.cs +++ b/ModernKeePass/ViewModels/EntryVm.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.ComponentModel; +using System.Globalization; using ModernKeePass.Interfaces; using ModernKeePass.Services; using ModernKeePassLib; @@ -10,7 +11,7 @@ using ModernKeePassLib.Cryptography; namespace ModernKeePass.ViewModels { - public class EntryVm : INotifyPropertyChanged, IPwEntity + public class EntryVm : INotifyPropertyChanged, IPwEntity, ISelectableModel { public GroupVm ParentGroup { get; private set; } public GroupVm PreviousGroup { get; private set; } @@ -19,7 +20,6 @@ namespace ModernKeePass.ViewModels public bool IsRevealPasswordEnabled => !string.IsNullOrEmpty(Password); public bool HasExpired => HasExpirationDate && _pwEntry.ExpiryTime < DateTime.Now; public double PasswordComplexityIndicator => QualityEstimation.EstimatePasswordBits(Password?.ToCharArray()); - public bool IsFirstItem => _pwEntry == null; public bool UpperCasePatternSelected { get; set; } = true; public bool LowerCasePatternSelected { get; set; } = true; public bool DigitsPatternSelected { get; set; } = true; @@ -33,6 +33,10 @@ namespace ModernKeePass.ViewModels public string Id => _pwEntry?.Uuid.ToHexString(); public bool IsRecycleOnDelete => _database.RecycleBinEnabled && !ParentGroup.IsSelected; public IEnumerable BreadCrumb => new List(ParentGroup.BreadCrumb) {ParentGroup}; + /// + /// Determines if the Entry is current or from history + /// + public bool IsSelected { get; set; } = true; public double PasswordLength { @@ -73,6 +77,7 @@ namespace ModernKeePass.ViewModels get { return GetEntryValue(PwDefs.UrlField); } set { SetEntryValue(PwDefs.UrlField, value); } } + public string Notes { get { return GetEntryValue(PwDefs.NotesField); } @@ -102,7 +107,7 @@ namespace ModernKeePass.ViewModels public bool IsEditMode { - get { return _isEditMode; } + get { return IsSelected && _isEditMode; } set { _isEditMode = value; @@ -143,10 +148,13 @@ namespace ModernKeePass.ViewModels { get { + var history = new List {this}; foreach (var historyEntry in _pwEntry.History) { - yield return new EntryVm(historyEntry, ParentGroup); + history.Add(new EntryVm(historyEntry, ParentGroup) {IsSelected = false}); } + + return history; } } @@ -154,6 +162,7 @@ namespace ModernKeePass.ViewModels private readonly PwEntry _pwEntry; private readonly IDatabaseService _database; + private readonly IResourceService _resource; private bool _isEditMode; private bool _isRevealPassword; private double _passwordLength = 25; @@ -166,11 +175,12 @@ namespace ModernKeePass.ViewModels public EntryVm() { } - internal EntryVm(PwEntry entry, GroupVm parent) : this(entry, parent, DatabaseService.Instance) { } + internal EntryVm(PwEntry entry, GroupVm parent) : this(entry, parent, DatabaseService.Instance, new ResourcesService()) { } - public EntryVm(PwEntry entry, GroupVm parent, IDatabaseService database) + public EntryVm(PwEntry entry, GroupVm parent, IDatabaseService database, IResourceService resource) { _database = database; + _resource = resource; _pwEntry = entry; ParentGroup = parent; } @@ -254,5 +264,10 @@ namespace ModernKeePass.ViewModels { return _pwEntry; } + + public override string ToString() + { + return IsSelected ? _resource.GetResourceValue("EntryCurrent") : _pwEntry.LastModificationTime.ToString("g"); + } } } diff --git a/ModernKeePass/ViewModels/GroupVm.cs b/ModernKeePass/ViewModels/GroupVm.cs index 81a1848..1ea1b7e 100644 --- a/ModernKeePass/ViewModels/GroupVm.cs +++ b/ModernKeePass/ViewModels/GroupVm.cs @@ -45,6 +45,7 @@ namespace ModernKeePass.ViewModels public bool ShowRestore => IsNotRoot && ParentGroup.IsSelected; public bool IsRecycleOnDelete => _database.RecycleBinEnabled && !IsSelected && !ParentGroup.IsSelected; + /// /// Is the Group the database Recycle Bin? /// diff --git a/ModernKeePass/ViewModels/HistoryVm.cs b/ModernKeePass/ViewModels/HistoryVm.cs deleted file mode 100644 index 070a70d..0000000 --- a/ModernKeePass/ViewModels/HistoryVm.cs +++ /dev/null @@ -1,19 +0,0 @@ -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 238a400..15cd483 100644 --- a/ModernKeePass/Views/EntryDetailPage.xaml +++ b/ModernKeePass/Views/EntryDetailPage.xaml @@ -429,13 +429,13 @@ - - - - - - - + + + + + + + - - + + - - - + + + @@ -464,7 +464,7 @@ - + @@ -472,8 +472,8 @@ - - + + diff --git a/ModernKeePass/Views/EntryDetailPage.xaml.cs b/ModernKeePass/Views/EntryDetailPage.xaml.cs index 2e44338..2771d7b 100644 --- a/ModernKeePass/Views/EntryDetailPage.xaml.cs +++ b/ModernKeePass/Views/EntryDetailPage.xaml.cs @@ -97,5 +97,21 @@ namespace ModernKeePass.Views { VisualStateManager.GoToState(this, e.NewSize.Width < 700 ? "Small" : "Large", true); } + + private void HamburgerMenuUserControl_OnSelectionChanged(object sender, SelectionChangedEventArgs e) + { + var listView = sender as ListView; + EntryVm entry; + switch (listView?.SelectedIndex) + { + case -1: + return; + default: + entry = listView?.SelectedItem as EntryVm; + break; + } + + StackPanel.DataContext = entry; + } } } diff --git a/ModernKeePass/Views/GroupDetailPage.xaml b/ModernKeePass/Views/GroupDetailPage.xaml index 3ee9dc8..597aa27 100644 --- a/ModernKeePass/Views/GroupDetailPage.xaml +++ b/ModernKeePass/Views/GroupDetailPage.xaml @@ -116,7 +116,7 @@ - + diff --git a/ModernKeePass/Views/UserControls/HamburgerMenuUserControl.xaml b/ModernKeePass/Views/UserControls/HamburgerMenuUserControl.xaml index 3216683..8332659 100644 --- a/ModernKeePass/Views/UserControls/HamburgerMenuUserControl.xaml +++ b/ModernKeePass/Views/UserControls/HamburgerMenuUserControl.xaml @@ -10,21 +10,22 @@ xmlns:converters="using:ModernKeePass.Converters" mc:Ignorable="d"> - + Foreground="{ThemeResource DefaultTextForegroundThemeBrush}" + ItemContainerStyle="{StaticResource ListViewLeftIndicatorItemExpanded}"> - + @@ -34,7 +35,7 @@ - + @@ -46,14 +47,6 @@ - - - @@ -76,7 +69,7 @@ - +