Resolve "Component: Text Element Navigator" #67

Merged
thorsten merged 43 commits from 11-component-text-element-navigator into main 2022-07-23 19:29:16 +00:00
2 changed files with 58 additions and 1 deletions
Showing only changes of commit 9ad19efc46 - Show all commits

No files matched your search

@@ -57,4 +57,34 @@ public static class TextElementProcessor
return updateException.ToProcessorResult<TextElement>(); return updateException.ToProcessorResult<TextElement>();
} }
} }
// Renames a text element:
public static async Task<ProcessorResult<TextElement>> RenameTextElement(int id, string newName)
{
await using var db = ProcessorMeta.ServiceProvider.GetRequiredService<DataContext>();
var textElement = await db.TextElements.FirstAsync(n => n.Id == id);
if (textElement is null)
throw new ArgumentOutOfRangeException(nameof(id));
// Get the corresponding section:
var section = (await db.TextElements.FirstAsync(n => n.Id == id)).Section;
// Generate a code:
var code = await Utils.GenerateCode(newName, db.TextElements, (n, code) => n.Section == section && n.Code == code);
textElement.Name = newName;
textElement.Code = code;
// Save the changes:
try
{
await db.SaveChangesAsync();
return new ProcessorResult<TextElement>(textElement);
}
catch (DbUpdateException updateException)
{
return updateException.ToProcessorResult<TextElement>();
}
}
} }
@@ -107,9 +107,36 @@ public partial class TextElements : UserControl
} }
private void buttonRename_Click(object sender, EventArgs e) private async void buttonRename_Click(object sender, EventArgs e)
{ {
if(this.DesignMode)
return;
// Ask the user if he really wants to rename the text element:
if(MessageBox.Show("Are you sure, you want to rename the selected text element? If you are already using this element in your code, you will need to manually refactor your code after renaming it.", "Rename text element", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.No)
return;
// Ask the user for the new name:
var result = InputDialog.Show(new InputDialog.Options(
Message: "Please edit the text element's name.",
PreloadedText: this.currentTextElement!.Name,
ShowQuestionCheckbox: false,
Title: "Rename text element"
));
// If the user canceled, return:
if(result.DialogResult == DialogResult.Cancel)
return;
// Rename the text element:
var alteredTextElement = await TextElementProcessor.RenameTextElement(this.currentTextElement.Id, result.Text);
alteredTextElement.ProcessError();
if(!alteredTextElement.Successful)
return;
// Reload the text elements:
this.LoadTextElements();
} }
private async void listTextElements_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e) private async void listTextElements_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)