Worms4Editor/W4Gui/Components/CollectiveListBox.cs

174 lines
4.3 KiB
C#
Raw Normal View History

2023-01-12 03:50:02 +00:00
using LibW4M.Data;
using System;
using System.Collections.Generic;
using System.ComponentModel;
2023-01-13 12:28:44 +00:00
using System.Diagnostics;
2023-01-12 03:50:02 +00:00
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace W4Gui.Components
{
2023-01-13 12:28:44 +00:00
public partial class CollectiveListBox : ListBox
2023-01-12 03:50:02 +00:00
{
2023-01-13 12:28:44 +00:00
public CollectiveListBox()
{
this.SelectedIndexChanged += selectedIndexChanged;
}
2023-04-01 12:57:34 +00:00
private bool blockEventTriggers = false;
2023-02-23 09:43:15 +00:00
private int totalUntitled = 0;
2023-01-12 03:50:02 +00:00
private int lastSelected = -1;
public int LastSelected
{
get
{
return lastSelected;
}
}
public int CurrentlySelected
{
get
{
2023-01-13 12:28:44 +00:00
return this.SelectedIndex;
2023-01-12 03:50:02 +00:00
}
}
public bool IsItemSelected
{
get
{
return this.CurrentlySelected >= 0;
}
}
private void unselectWithoutSaveTrigger()
{
2023-04-01 12:57:34 +00:00
toggleEvents();
2023-01-12 03:50:02 +00:00
this.lastSelected = -1;
2023-01-13 12:28:44 +00:00
this.SelectedIndex = -1;
2023-04-01 12:57:34 +00:00
toggleEvents();
2023-01-12 03:50:02 +00:00
}
2023-01-13 12:28:44 +00:00
public event EventHandler<EventArgs> Unselected;
public event EventHandler<EventArgs> Selected;
2023-04-01 12:57:34 +00:00
private void toggleEvents()
{
this.blockEventTriggers = !this.blockEventTriggers;
}
2023-01-12 03:50:02 +00:00
protected virtual void OnUnselected(EventArgs e)
{
EventHandler<EventArgs> handler = Unselected;
2023-04-01 12:57:34 +00:00
if (handler != null && !blockEventTriggers)
2023-01-12 03:50:02 +00:00
{
handler(this, e);
}
}
protected virtual void OnSelected(EventArgs e)
{
EventHandler<EventArgs> handler = Selected;
2023-04-01 12:57:34 +00:00
if (handler != null && !blockEventTriggers)
2023-01-12 03:50:02 +00:00
{
handler(this, e);
}
}
2023-01-13 12:28:44 +00:00
private void selectedIndexChanged(object? sender, EventArgs e)
2023-01-12 03:50:02 +00:00
{
if (LastSelected >= 0 && LastSelected != CurrentlySelected)
OnUnselected(e);
if (CurrentlySelected >= 0 && LastSelected != CurrentlySelected)
OnSelected(e);
lastSelected = CurrentlySelected;
}
public void Add(string name)
{
2023-01-13 12:28:44 +00:00
this.Items.Add(name);
2023-01-12 03:50:02 +00:00
}
public void Delete(int idx)
{
2023-04-01 12:57:34 +00:00
toggleEvents();
2023-03-07 07:49:53 +00:00
int selIndx = this.SelectedIndex;
2023-01-12 03:50:02 +00:00
unselectWithoutSaveTrigger();
2023-01-13 12:28:44 +00:00
this.Items.RemoveAt(idx);
2023-03-07 07:49:53 +00:00
2023-04-01 12:57:34 +00:00
toggleEvents();
2023-03-07 07:49:53 +00:00
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;
}
}
2023-01-12 03:50:02 +00:00
}
2023-02-23 09:43:15 +00:00
private string processName(string name)
{
if(name == "")
{
totalUntitled++;
return "Untitled " + totalUntitled.ToString();
}
return name;
}
2023-01-12 03:50:02 +00:00
public void UpdateName(int idx, string name)
{
2023-04-01 12:57:34 +00:00
if (idx >= this.Items.Count) return;
if (idx < 0) return;
2023-02-23 09:43:15 +00:00
if(name != "")
2023-04-01 12:57:34 +00:00
{
toggleEvents();
2023-02-23 09:43:15 +00:00
this.Items[idx] = name;
2023-04-01 12:57:34 +00:00
toggleEvents();
}
2023-01-12 03:50:02 +00:00
}
2023-02-16 04:12:22 +00:00
public void LoadArray(SaveDataEntry[] arr)
{
2023-04-01 12:57:34 +00:00
toggleEvents();
2023-02-16 04:12:22 +00:00
unselectWithoutSaveTrigger();
this.Items.Clear();
for (int i = 0; i < arr.Length; i++)
{
string name = arr[i].FriendlyName;
2023-02-23 09:43:15 +00:00
this.Items.Add(processName(name));
2023-02-16 04:12:22 +00:00
}
2023-04-01 12:57:34 +00:00
toggleEvents();
2023-02-16 04:12:22 +00:00
}
2023-01-12 03:50:02 +00:00
public void LoadCollective(SaveDataCollective collective)
{
2023-04-01 12:57:34 +00:00
toggleEvents();
2023-01-12 03:50:02 +00:00
unselectWithoutSaveTrigger();
2023-01-13 12:28:44 +00:00
this.Items.Clear();
2023-01-12 03:50:02 +00:00
for (int i = 0; i < collective.Length; i++)
{
string name = collective[i].FriendlyName;
2023-02-23 09:43:15 +00:00
this.Items.Add(processName(name));
2023-01-12 03:50:02 +00:00
}
2023-04-01 12:57:34 +00:00
toggleEvents();
2023-01-12 03:50:02 +00:00
}
2023-01-13 12:28:44 +00:00
2023-01-12 03:50:02 +00:00
}
}