Browse Source

Fixed max opened recently not working and apply correct recently opened after chaning max

CPKreuz 4 years ago
parent
commit
1e0c4e7ef7

+ 1 - 1
PixiEditor/Models/DataHolders/Document/Document.IO.cs

@@ -66,7 +66,7 @@ namespace PixiEditor.Models.DataHolders
                 recentlyOpened.Move(index, 0);
             }
 
-            if (recentlyOpened.Count > IPreferences.Current.GetPreference("maxOpenedRecently", 8))
+            if (recentlyOpened.Count > IPreferences.Current.GetPreference("MaxOpenedRecently", 8))
             {
                 for (int i = 4; i < recentlyOpened.Count; i++)
                 {

+ 21 - 7
PixiEditor/Models/UserPreferences/PreferencesSettings.cs

@@ -119,14 +119,21 @@ namespace PixiEditor.Models.UserPreferences
                 Init();
             }
 
-            return Preferences.ContainsKey(name)
-                ? (T)Preferences[name]
-                : fallbackValue;
+            try
+            {
+                return Preferences.ContainsKey(name)
+                        ? (T)Convert.ChangeType(Preferences[name], typeof(T))
+                        : fallbackValue;
+            }
+            catch (InvalidCastException)
+            {
+                return fallbackValue;
+            }
         }
 
         public T? GetLocalPreference<T>(string name)
         {
-            return GetPreference(name, default(T));
+            return GetLocalPreference(name, default(T));
         }
 
         public T? GetLocalPreference<T>(string name, T? fallbackValue)
@@ -136,9 +143,16 @@ namespace PixiEditor.Models.UserPreferences
                 Init();
             }
 
-            return LocalPreferences.ContainsKey(name)
-                ? (T)LocalPreferences[name]
-                : fallbackValue;
+            try
+            {
+                return LocalPreferences.ContainsKey(name)
+                    ? (T)Convert.ChangeType(LocalPreferences[name], typeof(T))
+                    : fallbackValue;
+            }
+            catch (InvalidCastException)
+            {
+                return fallbackValue;
+            }
         }
 
 #nullable disable

+ 23 - 1
PixiEditor/ViewModels/SubViewModels/Main/FileViewModel.cs

@@ -61,6 +61,8 @@ namespace PixiEditor.ViewModels.SubViewModels.Main
             {
                 HasRecent = true;
             }
+
+            IPreferences.Current.AddCallback("MaxOpenedRecently", UpdateMaxRecentlyOpened);
         }
 
         public void OpenRecent(object parameter)
@@ -286,9 +288,29 @@ namespace PixiEditor.ViewModels.SubViewModels.Main
             return Owner.BitmapManager.ActiveDocument != null;
         }
 
+        private void UpdateMaxRecentlyOpened(object parameter)
+        {
+            int newAmount = (int)parameter;
+
+            if (newAmount >= RecentlyOpened.Count)
+            {
+                return;
+            }
+
+            var recentlyOpeneds = new List<RecentlyOpenedDocument>(RecentlyOpened.Take(newAmount));
+
+            RecentlyOpened.Clear();
+
+            foreach (var recent in recentlyOpeneds)
+            {
+                RecentlyOpened.Add(recent);
+            }
+        }
+
         private List<RecentlyOpenedDocument> GetRecentlyOpenedDocuments()
         {
-            var paths = IPreferences.Current.GetLocalPreference(nameof(RecentlyOpened), new JArray()).ToObject<string[]>();
+            var paths = IPreferences.Current.GetLocalPreference(nameof(RecentlyOpened), new JArray()).ToObject<string[]>()
+                .Take(IPreferences.Current.GetPreference("MaxOpenedRecently", 8));
 
             List<RecentlyOpenedDocument> documents = new List<RecentlyOpenedDocument>();
 

+ 1 - 5
PixiEditor/ViewModels/SubViewModels/UserPreferences/Settings/FileSettings.cs

@@ -47,11 +47,7 @@ namespace PixiEditor.ViewModels.SubViewModels.UserPreferences.Settings
         public int MaxOpenedRecently
         {
             get => maxOpenedRecently;
-            set
-            {
-                maxOpenedRecently = value;
-                RaiseAndUpdatePreference(nameof(MaxOpenedRecently), value);
-            }
+            set => RaiseAndUpdatePreference(ref maxOpenedRecently, value);
         }
     }
 }

+ 2 - 2
PixiEditor/Views/Dialogs/SettingsWindow.xaml

@@ -60,8 +60,8 @@
                         <CheckBox Content="Show Startup Window" 
                                   IsChecked="{Binding SettingsSubViewModel.File.ShowStartupWindow}"/>
                         <StackPanel Orientation="Horizontal" Margin="0,10,0,0">
-                            <Label Content="Max Saved Opened Recently:" ToolTip="How many documents are shown under File > Recent. Default: 10" Style="{StaticResource BaseLabel}"/>
-                            <views:NumberInput FontSize="16" Value="{Binding SettingsSubViewModel.File.MaxOpenedRecently}" Width="40"/>
+                            <Label Content="Max Saved Opened Recently:" ToolTip="How many documents are shown under File > Recent. Default: 8" Style="{StaticResource BaseLabel}"/>
+                            <views:NumberInput FontSize="16" Value="{Binding SettingsSubViewModel.File.MaxOpenedRecently, Mode=TwoWay}" Width="40"/>
                         </StackPanel>
                         <Label Content="Default new file size:" Style="{StaticResource Header2}" Margin="0 20 0 20"/>
                         <StackPanel Orientation="Horizontal" Margin="40,0,0,0">