174 lines
4.3 KiB
C#
174 lines
4.3 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 bool blockEventTriggers = false;
|
|
private int totalUntitled = 0;
|
|
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()
|
|
{
|
|
toggleEvents();
|
|
this.lastSelected = -1;
|
|
this.SelectedIndex = -1;
|
|
toggleEvents();
|
|
}
|
|
|
|
|
|
public event EventHandler<EventArgs> Unselected;
|
|
public event EventHandler<EventArgs> Selected;
|
|
|
|
private void toggleEvents()
|
|
{
|
|
this.blockEventTriggers = !this.blockEventTriggers;
|
|
}
|
|
protected virtual void OnUnselected(EventArgs e)
|
|
{
|
|
EventHandler<EventArgs> handler = Unselected;
|
|
if (handler != null && !blockEventTriggers)
|
|
{
|
|
handler(this, e);
|
|
}
|
|
}
|
|
protected virtual void OnSelected(EventArgs e)
|
|
{
|
|
EventHandler<EventArgs> handler = Selected;
|
|
if (handler != null && !blockEventTriggers)
|
|
{
|
|
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)
|
|
{
|
|
toggleEvents();
|
|
|
|
int selIndx = this.SelectedIndex;
|
|
|
|
unselectWithoutSaveTrigger();
|
|
this.Items.RemoveAt(idx);
|
|
|
|
toggleEvents();
|
|
|
|
if (selIndx == idx)
|
|
{
|
|
if((selIndx - 1) < 0 && this.Items.Count > 0)
|
|
{
|
|
this.SelectedIndex = 0;
|
|
}
|
|
else if(selIndx > (this.Items.Count - 1))
|
|
{
|
|
this.SelectedIndex = this.Items.Count - 1;
|
|
}
|
|
else
|
|
{
|
|
this.SelectedIndex = selIndx;
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
|
|
private string processName(string name)
|
|
{
|
|
if(name == "")
|
|
{
|
|
totalUntitled++;
|
|
return "Untitled " + totalUntitled.ToString();
|
|
}
|
|
return name;
|
|
}
|
|
|
|
public void UpdateName(int idx, string name)
|
|
{
|
|
if (idx >= this.Items.Count) return;
|
|
if (idx < 0) return;
|
|
|
|
if(name != "")
|
|
{
|
|
toggleEvents();
|
|
this.Items[idx] = name;
|
|
toggleEvents();
|
|
}
|
|
}
|
|
|
|
public void LoadArray(SaveDataEntry[] arr)
|
|
{
|
|
toggleEvents();
|
|
unselectWithoutSaveTrigger();
|
|
this.Items.Clear();
|
|
for (int i = 0; i < arr.Length; i++)
|
|
{
|
|
string name = arr[i].FriendlyName;
|
|
this.Items.Add(processName(name));
|
|
}
|
|
toggleEvents();
|
|
}
|
|
|
|
public void LoadCollective(SaveDataCollective collective)
|
|
{
|
|
toggleEvents();
|
|
unselectWithoutSaveTrigger();
|
|
this.Items.Clear();
|
|
for (int i = 0; i < collective.Length; i++)
|
|
{
|
|
string name = collective[i].FriendlyName;
|
|
this.Items.Add(processName(name));
|
|
}
|
|
toggleEvents();
|
|
}
|
|
|
|
}
|
|
}
|