48 lines
1.6 KiB
C#
48 lines
1.6 KiB
C#
using Avalonia.Controls;
|
||
using Avalonia.Media;
|
||
using Avalonia.Threading;
|
||
using Mlaumcherb.Client.Avalonia.классы;
|
||
|
||
namespace Mlaumcherb.Client.Avalonia.зримое;
|
||
|
||
public abstract partial class GameVersionItemView : ListBoxItem
|
||
{
|
||
private static readonly SolidColorBrush _avaliableColor = new(Color.FromRgb(30, 130, 40));
|
||
private static readonly SolidColorBrush _unavaliableColor = new(Color.FromRgb(170, 70, 70));
|
||
|
||
protected GameVersionItemView(string name, bool initialStatus)
|
||
{
|
||
InitializeComponent();
|
||
text.Text = name;
|
||
UpdateBackground(initialStatus);
|
||
}
|
||
|
||
protected void UpdateBackground(bool isInstalled)
|
||
{
|
||
Dispatcher.UIThread.Invoke(() => Background = isInstalled ? _avaliableColor : _unavaliableColor);
|
||
}
|
||
}
|
||
|
||
// Background changes when props status changes
|
||
public class InstalledGameVersionItemView : GameVersionItemView
|
||
{
|
||
public readonly InstalledGameVersionProps Props;
|
||
|
||
public InstalledGameVersionItemView(InstalledGameVersionProps props) : base(props.Id, props.IsInstalled)
|
||
{
|
||
Props = props;
|
||
props.StatusChanged += UpdateBackground;
|
||
}
|
||
}
|
||
|
||
// Background is set once by checking if the version is present in InstalledVersionsCatalog
|
||
public class RemoteGameVersionItemView : GameVersionItemView
|
||
{
|
||
public readonly RemoteVersionDescriptorProps Props;
|
||
|
||
public RemoteGameVersionItemView(RemoteVersionDescriptorProps props)
|
||
: base(props.id, LauncherApp.InstalledVersionCatalog.versions.ContainsKey(props.id))
|
||
{
|
||
Props = props;
|
||
}
|
||
} |