diff --git a/src/UniGetUI.Avalonia/Assets/Images/jetpack_Maurice2-blue.png b/src/UniGetUI.Avalonia/Assets/Images/jetpack_Maurice2-blue.png new file mode 100644 index 0000000000..82b85dd7f3 Binary files /dev/null and b/src/UniGetUI.Avalonia/Assets/Images/jetpack_Maurice2-blue.png differ diff --git a/src/UniGetUI.Avalonia/Assets/Images/maurice_penseur.png b/src/UniGetUI.Avalonia/Assets/Images/maurice_penseur.png new file mode 100644 index 0000000000..0c48cddf7c Binary files /dev/null and b/src/UniGetUI.Avalonia/Assets/Images/maurice_penseur.png differ diff --git a/src/UniGetUI.Avalonia/Assets/Images/relax.png b/src/UniGetUI.Avalonia/Assets/Images/relax.png new file mode 100644 index 0000000000..eac5cabd52 Binary files /dev/null and b/src/UniGetUI.Avalonia/Assets/Images/relax.png differ diff --git a/src/UniGetUI.Avalonia/UniGetUI.Avalonia.csproj b/src/UniGetUI.Avalonia/UniGetUI.Avalonia.csproj index 85814df5cf..d4bbb6acc1 100644 --- a/src/UniGetUI.Avalonia/UniGetUI.Avalonia.csproj +++ b/src/UniGetUI.Avalonia/UniGetUI.Avalonia.csproj @@ -189,6 +189,9 @@ + + + diff --git a/src/UniGetUI.Avalonia/ViewModels/SoftwarePages/PackagesPageViewModel.cs b/src/UniGetUI.Avalonia/ViewModels/SoftwarePages/PackagesPageViewModel.cs index b306d878a3..6e8d932571 100644 --- a/src/UniGetUI.Avalonia/ViewModels/SoftwarePages/PackagesPageViewModel.cs +++ b/src/UniGetUI.Avalonia/ViewModels/SoftwarePages/PackagesPageViewModel.cs @@ -8,6 +8,8 @@ using Avalonia.Controls; using Avalonia.Layout; using Avalonia.Media; +using Avalonia.Media.Imaging; +using Avalonia.Platform; using Avalonia.Threading; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; @@ -55,6 +57,7 @@ public struct PackagesPageData public string IconName; // SVG filename without extension, e.g. "search" public string NoPackages_BackgroundText; + public string NoPackages_ImagePath; // optional avares:// illustration shown when no packages are present public string NoPackages_SourcesText; public string NoPackages_SubtitleText_Base; public string MainSubtitle_StillLoading; @@ -145,6 +148,9 @@ partial void OnIsFilterPaneOpenChanged(bool value) [ObservableProperty] private string _subtitle = ""; [ObservableProperty] private bool _isLoading; [ObservableProperty] private bool _backgroundTextVisible; + [ObservableProperty] private bool _loadingImageVisible; + [ObservableProperty] private Bitmap? _noPackagesImage; + [ObservableProperty] private bool _noPackagesImageVisible; [ObservableProperty] private string _backgroundText = ""; [ObservableProperty] private bool _sourcesPlaceholderVisible = true; [ObservableProperty] private bool _sourcesTreeVisible; @@ -216,6 +222,11 @@ public PackagesPageViewModel(PackagesPageData data) _showLastCheckedTime = data.ShowLastLoadTime; NoPackagesText = data.NoPackages_BackgroundText; NoMatchesText = data.NoMatches_BackgroundText; + if (!string.IsNullOrEmpty(data.NoPackages_ImagePath)) + { + using var stream = AssetLoader.Open(new Uri(data.NoPackages_ImagePath)); + NoPackagesImage = new Bitmap(stream); + } _noPackagesSubtitleBase = data.NoPackages_SubtitleText_Base; _stillLoadingSubtitle = data.MainSubtitle_StillLoading; SimilarSearchEnabled = !data.DisableSuggestedResultsRadio; @@ -544,15 +555,22 @@ public void FilterPackages(bool fromQuery = false) { BackgroundText = _stillLoadingSubtitle; BackgroundTextVisible = true; + LoadingImageVisible = true; + NoPackagesImageVisible = false; } else if (FilteredPackages.Count == 0) { - BackgroundText = string.IsNullOrWhiteSpace(query) ? NoPackagesText : NoMatchesText; - BackgroundTextVisible = !MegaQueryBoxEnabled || !string.IsNullOrWhiteSpace(query); + bool noQuery = string.IsNullOrWhiteSpace(query); + BackgroundText = noQuery ? NoPackagesText : NoMatchesText; + BackgroundTextVisible = !MegaQueryBoxEnabled || !noQuery; + LoadingImageVisible = false; + NoPackagesImageVisible = noQuery && BackgroundTextVisible && NoPackagesImage is not null; } else { BackgroundTextVisible = false; + LoadingImageVisible = false; + NoPackagesImageVisible = false; } } diff --git a/src/UniGetUI.Avalonia/Views/SoftwarePages/AbstractPackagesPage.axaml b/src/UniGetUI.Avalonia/Views/SoftwarePages/AbstractPackagesPage.axaml index 2379344734..a5e2090aea 100644 --- a/src/UniGetUI.Avalonia/Views/SoftwarePages/AbstractPackagesPage.axaml +++ b/src/UniGetUI.Avalonia/Views/SoftwarePages/AbstractPackagesPage.axaml @@ -795,17 +795,30 @@ - - + + + IsVisible="{Binding LoadingImageVisible}"/> + + + diff --git a/src/UniGetUI.Avalonia/Views/SoftwarePages/InstalledPackagesPage.cs b/src/UniGetUI.Avalonia/Views/SoftwarePages/InstalledPackagesPage.cs index d816834c1b..c7db88f6ec 100644 --- a/src/UniGetUI.Avalonia/Views/SoftwarePages/InstalledPackagesPage.cs +++ b/src/UniGetUI.Avalonia/Views/SoftwarePages/InstalledPackagesPage.cs @@ -50,6 +50,7 @@ public InstalledPackagesPage() : base(new PackagesPageData DisableFilterOnQueryChange = false, DisableReload = false, NoPackages_BackgroundText = CoreTools.Translate("No packages were found"), + NoPackages_ImagePath = "avares://UniGetUI/Assets/Images/maurice_penseur.png", NoPackages_SourcesText = CoreTools.Translate("No packages were found"), NoPackages_SubtitleText_Base = CoreTools.Translate("No packages were found"), MainSubtitle_StillLoading = CoreTools.Translate("Loading packages"), diff --git a/src/UniGetUI.Avalonia/Views/SoftwarePages/PackageBundlesPage.cs b/src/UniGetUI.Avalonia/Views/SoftwarePages/PackageBundlesPage.cs index 1f825cf9ac..1e7e9b7531 100644 --- a/src/UniGetUI.Avalonia/Views/SoftwarePages/PackageBundlesPage.cs +++ b/src/UniGetUI.Avalonia/Views/SoftwarePages/PackageBundlesPage.cs @@ -62,6 +62,7 @@ public PackageBundlesPage() : base(new PackagesPageData DisableFilterOnQueryChange = false, DisableReload = true, NoPackages_BackgroundText = CoreTools.Translate("Add packages or open an existing package bundle"), + NoPackages_ImagePath = "avares://UniGetUI/Assets/Images/maurice_penseur.png", NoPackages_SourcesText = CoreTools.Translate("Add packages to start"), NoPackages_SubtitleText_Base = CoreTools.Translate("The current bundle has no packages. Add some packages to get started"), MainSubtitle_StillLoading = CoreTools.Translate("Loading packages"), diff --git a/src/UniGetUI.Avalonia/Views/SoftwarePages/SoftwareUpdatesPage.cs b/src/UniGetUI.Avalonia/Views/SoftwarePages/SoftwareUpdatesPage.cs index 48fc7f3fc9..495d649679 100644 --- a/src/UniGetUI.Avalonia/Views/SoftwarePages/SoftwareUpdatesPage.cs +++ b/src/UniGetUI.Avalonia/Views/SoftwarePages/SoftwareUpdatesPage.cs @@ -43,6 +43,7 @@ public SoftwareUpdatesPage() : base(new PackagesPageData DisableFilterOnQueryChange = false, DisableReload = false, NoPackages_BackgroundText = CoreTools.Translate("Hooray! No updates were found."), + NoPackages_ImagePath = "avares://UniGetUI/Assets/Images/relax.png", NoPackages_SourcesText = CoreTools.Translate("Everything is up to date"), NoPackages_SubtitleText_Base = CoreTools.Translate("Everything is up to date"), MainSubtitle_StillLoading = CoreTools.Translate("Loading packages"),