using DataModel.Database; using DataModel.Database.Common; using Microsoft.Extensions.DependencyInjection; using Processor; using UI_WinForms.Dialogs; namespace UI_WinForms.Components; public partial class TextElements : UserControl { private readonly DataContext db; private Section? currentSection; public TextElements() { this.InitializeComponent(); // Check if we are in the designer: if(Program.SERVICE_PROVIDER is null) return; // Get the DI context from the main form: this.db = Program.SERVICE_PROVIDER.GetService()!; // Dispose of the context when the control is disposed: this.Disposed += (_, _) => this.db.Dispose(); // When the section is changed, update this component: AppEvents.WhenSectionChanged += async (sender, section) => { this.currentSection = section; this.buttonAdd.Enabled = this.currentSection is not null; // Update the path: if (this.currentSection is null) return; this.labelSectionPath.Text = await SectionProcessor.GetSectionPath(this.db, this.currentSection.DataKey); this.LoadTextElements(); }; } // 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.db, this.currentSection); // Update the list: this.listTextElements.Items.Clear(); await foreach (var textElement in textElements) { var item = new ListViewItem(textElement.Name) { Tag = textElement.Code, }; this.listTextElements.Items.Add(item); } } 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.db, this.currentSection?.DataKey, result.Text); newTextElement.ProcessError(); if(!newTextElement.Successful) return; // Add the text element to the list: var item = new ListViewItem(newTextElement.Result!.Name) { Tag = newTextElement.Result.Code, }; this.listTextElements.Items.Add(item); } private void buttonRemove_Click(object sender, EventArgs e) { } private void buttonRename_Click(object sender, EventArgs e) { } }