Worms4Editor/W4Gui/Components/CollectiveListBox.cs

109 lines
2.6 KiB
C#

using LibW4M.Data;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace W4Gui.Components
{
public partial class CollectiveListBox : ListBox
{
public CollectiveListBox()
{
this.SelectedIndexChanged += selectedIndexChanged;
}
private int lastSelected = -1;
public int LastSelected
{
get
{
return lastSelected;
}
}
public int CurrentlySelected
{
get
{
return this.SelectedIndex;
}
}
public bool IsItemSelected
{
get
{
return this.CurrentlySelected >= 0;
}
}
private void unselectWithoutSaveTrigger()
{
this.lastSelected = -1;
this.SelectedIndex = -1;
}
public event EventHandler<EventArgs> Unselected;
public event EventHandler<EventArgs> Selected;
protected virtual void OnUnselected(EventArgs e)
{
EventHandler<EventArgs> handler = Unselected;
if (handler != null)
{
handler(this, e);
}
}
protected virtual void OnSelected(EventArgs e)
{
EventHandler<EventArgs> handler = Selected;
if (handler != null)
{
handler(this, e);
}
}
private void selectedIndexChanged(object? sender, EventArgs e)
{
if (LastSelected >= 0 && LastSelected != CurrentlySelected)
OnUnselected(e);
if (CurrentlySelected >= 0 && LastSelected != CurrentlySelected)
OnSelected(e);
lastSelected = CurrentlySelected;
}
public void Add(string name)
{
this.Items.Add(name);
}
public void Delete(int idx)
{
unselectWithoutSaveTrigger();
this.Items.RemoveAt(idx);
}
public void UpdateName(int idx, string name)
{
this.Items[idx] = name;
}
public void LoadCollective(SaveDataCollective collective)
{
unselectWithoutSaveTrigger();
this.Items.Clear();
for (int i = 0; i < collective.Length; i++)
{
string name = collective[i].FriendlyName;
this.Items.Add(name);
}
}
}
}