I18NCommander/I18N Commander/UI WinForms/Components/TextElements.cs

124 lines
4.2 KiB
C#
Raw Normal View History

2022-07-12 18:50:42 +00:00
using DataModel.Database;
using Processor;
using UI_WinForms.Dialogs;
using UI_WinForms.Resources;
2022-07-12 18:50:42 +00:00
namespace UI_WinForms.Components;
2022-07-11 17:52:15 +00:00
public partial class TextElements : UserControl
{
2022-07-12 18:50:42 +00:00
private Section? currentSection;
private TextElement? currentTextElement;
2022-07-12 18:50:42 +00:00
2022-07-11 17:52:15 +00:00
public TextElements()
{
this.InitializeComponent();
2022-07-12 18:50:42 +00:00
// Check if we are in the designer:
if(Program.SERVICE_PROVIDER is null)
return;
// Create an image list from a resource:
var imgList = new ImageList();
imgList.ImageSize = new Size(45, 45);
imgList.ColorDepth = ColorDepth.Depth32Bit;
imgList.Images.Add(Icons.icons8_align_text_left_512);
// Set the image list to the list box:
this.listTextElements.SmallImageList = imgList;
2022-07-12 18:50:42 +00:00
// When the section is changed, update this component:
AppEvents.WhenSectionChanged += async (sender, section) =>
2022-07-12 18:50:42 +00:00
{
this.currentSection = section;
this.currentTextElement = null;
2022-07-12 18:50:42 +00:00
this.buttonAdd.Enabled = this.currentSection is not null;
this.buttonRename.Enabled = this.buttonRemove.Enabled = false;
if (this.currentSection is null)
return;
// Update the path:
this.labelSectionPath.Text = await SectionProcessor.GetSectionPath(this.currentSection.DataKey);
this.LoadTextElements();
2022-07-12 18:50:42 +00:00
};
// When the text element is changed, update the button states:
AppEvents.WhenTextElementChanged += (sender, textElement) =>
{
this.currentTextElement = textElement;
this.buttonRename.Enabled = this.buttonRemove.Enabled = this.currentTextElement is not null;
};
2022-07-11 17:52:15 +00:00
}
// Loads all the text elements for the current section.
private async void LoadTextElements()
{
if (this.currentSection is null)
return;
// Load the text elements:
var textElements = await TextElementProcessor.GetTextElements(this.currentSection);
// Update the list:
this.listTextElements.Items.Clear();
foreach (var textElement in textElements)
this.listTextElements.Items.Add(new ListViewItem(textElement.Name, 0)
{
Tag = textElement.Id,
});
this.column.AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
}
private async void buttonAdd_Click(object sender, EventArgs e)
{
if(this.DesignMode)
return;
var result = InputDialog.Show(new InputDialog.Options(
Message: "Please type the desired text element's name.",
Title: "Add a text element",
Placeholder: "My text element",
ShowQuestionCheckbox: false
));
if(result.DialogResult == DialogResult.Cancel)
return;
// Add the text element to the database into the current section:
var newTextElement = await TextElementProcessor.AddTextElement(this.currentSection?.DataKey, result.Text);
newTextElement.ProcessError();
if(!newTextElement.Successful)
return;
// Add the text element to the list:
this.listTextElements.Items.Add(new ListViewItem(newTextElement.Result!.Name, 0)
{
Tag = newTextElement.Result.Id,
});
this.column.AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
}
private void buttonRemove_Click(object sender, EventArgs e)
{
}
private void buttonRename_Click(object sender, EventArgs e)
{
}
private async void listTextElements_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
{
// Load the text element:
var selectedTextElementId = (int)e.Item.Tag;
this.currentTextElement = await TextElementProcessor.LoadTextElement(selectedTextElementId);
// Fire the event:
AppEvents.TextElementChanged(this.currentTextElement);
}
2022-07-11 17:52:15 +00:00
}