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"),