using OwnChar.App.Desktop.Api; using OwnChar.App.Desktop.LangRes; using OwnChar.Model; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Windows.Forms; using Telerik.WinControls; using Telerik.WinControls.UI; using Telerik.Windows.Documents.Fixed.Model.Navigation; namespace OwnChar.App.Desktop.UI.MainTabs.Controls; public partial class CharacterListControl : UserControl { private IMainWindowApi mainApi = null!; private UserProfile? profile; private Group? group; public void LoadContent(IMainWindowApi mainApi, UserProfile? profile) { LoadContent(mainApi, profile, null); } public void LoadContent(IMainWindowApi mainApi, Group? group) { LoadContent(mainApi, null, group); } private void LoadContent(IMainWindowApi mainApi, UserProfile? profile, Group? group) { this.mainApi = mainApi; this.profile = profile; this.group = group; InitializeComponent(); PrepareList(); LoadList(group); } private void PrepareList() { radListView_CharList.BeginUpdate(); radListView_CharList.Columns.Clear(); radListView_CharList.Columns.Add(CharListControlLangRes.Column_CharName); radListView_CharList.Columns.Add(CharListControlLangRes.Column_CharFandom); if (profile != null) radListView_CharList.Columns.Add(CharListControlLangRes.Column_CharOwner); else if (group != null) radListView_CharList.Columns.Add(CharListControlLangRes.Column_CharGroup); radListView_CharList.EndUpdate(); } private void LoadList(Group? group) { radListView_CharList.BeginUpdate(); radListView_CharList.Items.Clear(); if (profile != null && mainApi.Manager?.Characters.GetCharacters(profile) is IEnumerable characters) { foreach (Character character in characters) { AddCharToList(character); } } radListView_CharList.EndUpdate(); } private void AddCharToList(Character character) { var newItem = new ListViewDataItem(); UpdateCharListViewItem(newItem, character); newItem.Value = character; } private void UpdateCharListViewItem(ListViewDataItem listItem, Character character) { listItem[0] = character.Name; listItem[1] = character.Fandom; if (group != null) listItem[2] = group.Name; else listItem[2] = character.Owner; } private Character? GetSelectedChar() { return radListView_CharList.SelectedItem?.Value as Character; } private void NewChar() { if (mainApi.Manager?.Characters.AddCharacter() is Character newChar) AddCharToList(newChar); } private void TryDelChar() { var selChar = GetSelectedChar(); if (selChar != null) { if (RadMessageBox.Show(string.Format(CharListControlLangRes.MsgBox_ConfirmDeletion_Text, selChar.Name), CharListControlLangRes.MsgBox_ConfirmDeletion_Title, MessageBoxButtons.YesNo, RadMessageIcon.Exclamation) == DialogResult.Yes) { } } } private void TryOpenChar(Character? character) { if (character != null) OpenCharTab(character); } private void OpenCharTab(Character character) { mainApi.OpenTab(new TabCharView(mainApi, character), string.IsNullOrWhiteSpace(character.Name) ? CharListControlLangRes.Tab_UnnamedChar : character.Name); } // E V E N T S private void RadMenuItem_AddChar_Click(object sender, System.EventArgs e) { NewChar(); } private void RadMenuItem_DeleteChar_Click(object sender, System.EventArgs e) { TryDelChar(); } private void RadMenuItem_OpenChar_Click(object sender, System.EventArgs e) { TryOpenChar(GetSelectedChar()); } }