Squashed commit of the following: commit 724c487ff5feca1e5ed1e0f006dd1c8e0112954b Author: luxick <git@luxick.de> Date: Thu Mar 5 17:56:01 2020 +0100 Reorder player columns commit 5f56f73912122a42c3ee8fc64ed9760d18b9e706 Author: luxick <git@luxick.de> Date: Thu Mar 5 17:52:17 2020 +0100 Data column constructor fix commit fae314804b5bbe1be58ebdcb64690544bae76d1b Author: luxick <git@luxick.de> Date: Thu Mar 5 17:51:39 2020 +0100 Do not cast values in liststore to string
88 lines
3.1 KiB
C#
88 lines
3.1 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Threading.Tasks;
|
|
using EstusShots.Gtk.Controls;
|
|
using EstusShots.Gtk.Dialogs;
|
|
using EstusShots.Shared.Dto;
|
|
using EstusShots.Shared.Models.Parameters;
|
|
using Gtk;
|
|
using UI = Gtk.Builder.ObjectAttribute;
|
|
|
|
namespace EstusShots.Gtk
|
|
{
|
|
internal partial class MainWindow
|
|
{
|
|
[UI] public readonly Box PlayersPage = null;
|
|
[UI] public readonly Overlay PlayersOverlay = null;
|
|
[UI] public readonly TreeView PlayersTreeView = null;
|
|
[UI] public readonly Button NewPlayerButton = null;
|
|
[UI] public readonly Box PlayerEditorContainer = null;
|
|
|
|
private BindableListControl<Player> PlayersControl;
|
|
|
|
private void InitPlayersPage()
|
|
{
|
|
NewPlayerButton.Clicked += NewPlayerButtonOnClicked;
|
|
|
|
var columns = new List<DataColumn>
|
|
{
|
|
new DataColumn(nameof(Player.Name)),
|
|
new DataColumn(nameof(Player.Alias)),
|
|
new DataColumn(nameof(Player.Anonymous)) {Title = "Is Anonymous?", FixedWidth = 120},
|
|
new DataColumn(nameof(Player.HexId)) {Title = "Hex ID"},
|
|
};
|
|
PlayersControl = new BindableListControl<Player>(columns, nameof(Player.PlayerId), PlayersTreeView);
|
|
PlayersControl.OnSelectionChanged += PlayersControlOnOnSelectionChanged;
|
|
|
|
Task.Factory.StartNew(ReloadPlayers);
|
|
}
|
|
|
|
// Events
|
|
|
|
private void PlayersControlOnOnSelectionChanged(object o, SelectionChangedEventArgs args)
|
|
{
|
|
if (!(args.Selection is Player player)) return;
|
|
var dialog = new PlayerEditor(this, player);
|
|
dialog.OnDialogClosed += PlayerEditorClosed;
|
|
}
|
|
|
|
private void NewPlayerButtonOnClicked(object sender, EventArgs e)
|
|
{
|
|
var dialog = new PlayerEditor(this, new Player());
|
|
dialog.OnDialogClosed += PlayerEditorClosed;
|
|
}
|
|
|
|
private async void PlayerEditorClosed(object o, DialogClosedEventArgs args)
|
|
{
|
|
if (!args.Ok || !(args.Model is Player player)) return;
|
|
var res = await Task.Factory.StartNew(()
|
|
=> Client.Players.SavePlayer(new SavePlayerParameter(player)).Result);
|
|
if (!res.OperationResult.Success)
|
|
{
|
|
Info($"Unable to save: {res.OperationResult.ShortMessage}");
|
|
ErrorDialog.Show(res.OperationResult);
|
|
return;
|
|
}
|
|
|
|
await ReloadPlayers();
|
|
}
|
|
|
|
// Private Methods
|
|
|
|
private async Task ReloadPlayers()
|
|
{
|
|
var res = await Task.Factory.StartNew(()
|
|
=> Client.Players.GetPlayers(new GetPlayersParameter()).Result);
|
|
if (!res.OperationResult.Success)
|
|
{
|
|
InfoLabel.Text = $"Refresh failed: {res.OperationResult.ShortMessage}";
|
|
ErrorDialog.Show(res.OperationResult);
|
|
return;
|
|
}
|
|
|
|
PlayersControl.Items = res.Data.Players;
|
|
PlayersControl.DataBind();
|
|
Info("Player list refreshed");
|
|
}
|
|
}
|
|
} |