|
@@ -11,6 +11,7 @@ using System.Threading.Tasks;
|
|
using System.Windows;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Input;
|
|
using System.Windows.Input;
|
|
|
|
+using System.Windows.Threading;
|
|
using PixiEditor.Views.UserControls.Palettes;
|
|
using PixiEditor.Views.UserControls.Palettes;
|
|
using SkiaSharp;
|
|
using SkiaSharp;
|
|
using PixiEditor.Helpers;
|
|
using PixiEditor.Helpers;
|
|
@@ -144,6 +145,14 @@ namespace PixiEditor.Views.Dialogs
|
|
public WpfObservableRangeCollection<SKColor> CurrentEditingPalette { get; set; }
|
|
public WpfObservableRangeCollection<SKColor> CurrentEditingPalette { get; set; }
|
|
public static PalettesBrowser Instance { get; internal set; }
|
|
public static PalettesBrowser Instance { get; internal set; }
|
|
|
|
|
|
|
|
+ private LocalPalettesFetcher localPalettesFetcher
|
|
|
|
+ {
|
|
|
|
+ get
|
|
|
|
+ {
|
|
|
|
+ return _localPalettesFetcher ??= (LocalPalettesFetcher)PaletteListDataSources.First(x => x is LocalPalettesFetcher);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
private static PaletteList _cachedPaletteList;
|
|
private static PaletteList _cachedPaletteList;
|
|
|
|
|
|
private LocalPalettesFetcher _localPalettesFetcher;
|
|
private LocalPalettesFetcher _localPalettesFetcher;
|
|
@@ -154,7 +163,15 @@ namespace PixiEditor.Views.Dialogs
|
|
Instance = this;
|
|
Instance = this;
|
|
DeletePaletteCommand = new RelayCommand<Palette>(DeletePalette);
|
|
DeletePaletteCommand = new RelayCommand<Palette>(DeletePalette);
|
|
ToggleFavouriteCommand = new RelayCommand<Palette>(ToggleFavourite);
|
|
ToggleFavouriteCommand = new RelayCommand<Palette>(ToggleFavourite);
|
|
- Closed += (s, e) => Instance = null;
|
|
|
|
|
|
+ Loaded += (sender, args) =>
|
|
|
|
+ {
|
|
|
|
+ localPalettesFetcher.CacheUpdated += LocalCacheRefreshed;
|
|
|
|
+ };
|
|
|
|
+ Closed += (s, e) =>
|
|
|
|
+ {
|
|
|
|
+ Instance = null;
|
|
|
|
+ localPalettesFetcher.CacheUpdated -= LocalCacheRefreshed;
|
|
|
|
+ };
|
|
}
|
|
}
|
|
|
|
|
|
public static PalettesBrowser Open(WpfObservableRangeCollection<PaletteListDataSource> dataSources, ICommand importPaletteCommand, WpfObservableRangeCollection<SKColor> currentEditingPalette)
|
|
public static PalettesBrowser Open(WpfObservableRangeCollection<PaletteListDataSource> dataSources, ICommand importPaletteCommand, WpfObservableRangeCollection<SKColor> currentEditingPalette)
|
|
@@ -183,6 +200,14 @@ namespace PixiEditor.Views.Dialogs
|
|
return browser;
|
|
return browser;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ private async void LocalCacheRefreshed(List<Palette> obj)
|
|
|
|
+ {
|
|
|
|
+ await Dispatcher.InvokeAsync(async () =>
|
|
|
|
+ {
|
|
|
|
+ await UpdatePaletteList();
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+
|
|
private async void ToggleFavourite(Palette palette)
|
|
private async void ToggleFavourite(Palette palette)
|
|
{
|
|
{
|
|
palette.IsFavourite = !palette.IsFavourite;
|
|
palette.IsFavourite = !palette.IsFavourite;
|
|
@@ -212,9 +237,6 @@ namespace PixiEditor.Views.Dialogs
|
|
{
|
|
{
|
|
LocalPalettesFetcher.DeletePalette(palette.FileName);
|
|
LocalPalettesFetcher.DeletePalette(palette.FileName);
|
|
RemoveFavouritePalette(palette);
|
|
RemoveFavouritePalette(palette);
|
|
-
|
|
|
|
- await RefreshLocalCache();
|
|
|
|
- await UpdatePaletteList();
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -260,18 +282,6 @@ namespace PixiEditor.Views.Dialogs
|
|
browser.Sort();
|
|
browser.Sort();
|
|
}
|
|
}
|
|
|
|
|
|
- public async Task RefreshLocalCache()
|
|
|
|
- {
|
|
|
|
- if (_localPalettesFetcher == null)
|
|
|
|
- {
|
|
|
|
- _localPalettesFetcher = (LocalPalettesFetcher)PaletteListDataSources.First(x => x is LocalPalettesFetcher);
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- await _localPalettesFetcher.RefreshCache();
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
public async Task UpdatePaletteList()
|
|
public async Task UpdatePaletteList()
|
|
{
|
|
{
|
|
IsFetching = true;
|
|
IsFetching = true;
|
|
@@ -435,8 +445,6 @@ namespace PixiEditor.Views.Dialogs
|
|
}
|
|
}
|
|
|
|
|
|
await LocalPalettesFetcher.SavePalette(finalFileName, CurrentEditingPalette.ToArray());
|
|
await LocalPalettesFetcher.SavePalette(finalFileName, CurrentEditingPalette.ToArray());
|
|
- await RefreshLocalCache();
|
|
|
|
- await UpdatePaletteList();
|
|
|
|
|
|
|
|
var palette = _localPalettesFetcher.CachedPalettes.FirstOrDefault(x => x.FileName == finalFileName);
|
|
var palette = _localPalettesFetcher.CachedPalettes.FirstOrDefault(x => x.FileName == finalFileName);
|
|
if (palette != null)
|
|
if (palette != null)
|
|
@@ -475,26 +483,11 @@ namespace PixiEditor.Views.Dialogs
|
|
}
|
|
}
|
|
|
|
|
|
string finalNewName = $"{e.NewText}.pal";
|
|
string finalNewName = $"{e.NewText}.pal";
|
|
- string newPath = Path.Join(LocalPalettesFetcher.PathToPalettesFolder, finalNewName);
|
|
|
|
-
|
|
|
|
- while (File.Exists(newPath))
|
|
|
|
- {
|
|
|
|
- finalNewName = Path.GetFileNameWithoutExtension(finalNewName) + "(1).pal";
|
|
|
|
- if (finalNewName == oldFileName)
|
|
|
|
- {
|
|
|
|
- item.Palette.FileName = oldFileName;
|
|
|
|
- item.Palette.Name = e.OldText;
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
- newPath = Path.Join(LocalPalettesFetcher.PathToPalettesFolder, finalNewName);
|
|
|
|
- }
|
|
|
|
|
|
+ string newPath = Path.Join(LocalPalettesFetcher.PathToPalettesFolder, LocalPalettesFetcher.GetNonExistingName(finalNewName, true));
|
|
|
|
|
|
File.Move(oldPath, newPath);
|
|
File.Move(oldPath, newPath);
|
|
|
|
|
|
item.Palette.FileName = finalNewName;
|
|
item.Palette.FileName = finalNewName;
|
|
-
|
|
|
|
- await RefreshLocalCache();
|
|
|
|
- await UpdatePaletteList();
|
|
|
|
}
|
|
}
|
|
|
|
|
|
private void BrowseOnLospec_OnClick(object sender, RoutedEventArgs e)
|
|
private void BrowseOnLospec_OnClick(object sender, RoutedEventArgs e)
|