[chore:] several fixes and improvements

This commit is contained in:
Elias Fierke
2025-02-26 16:24:18 +01:00
parent 07089f7838
commit 316c849a5e

View File

@@ -16,6 +16,17 @@ using PdfSharp.Drawing;
using PdfSharp.Drawing.Layout;
using PdfSharp.Fonts;
using System.Globalization;
// ToDo
// - Rand
// - 1,5 zeilig
// - Namen auf jeder Seite
// - PDF Export keine Namen -> Error
//
namespace PLG_Exam
{
public partial class MainWindow : Window
@@ -271,9 +282,10 @@ namespace PLG_Exam
_tabCounter++;
var tabItem = new TabItem
{
Header = $"{tab.Aufgabennummer} - {tab.Überschrift}",
Content = CreateTabContent(tab.Aufgabennummer, tab.Überschrift, tab.Inhalt)
};
tabItem.Header = ReturnTabHeaderContent($"{tab.Aufgabennummer} - {tab.Überschrift}", tabItem);
TabView.Items.Add(tabItem);
}
@@ -281,6 +293,53 @@ namespace PLG_Exam
_isSaved = true;
}
private StackPanel ReturnTabHeaderContent(string name, TabItem curr_tab){
var closeButton = new Button
{
Content = "×",
FontSize = 14,
HorizontalContentAlignment = Avalonia.Layout.HorizontalAlignment.Center,
VerticalContentAlignment = Avalonia.Layout.VerticalAlignment.Center,
Width = 20,
Height = 20,
Background = new SolidColorBrush(Color.FromRgb(123,35,39)),
Foreground = new SolidColorBrush(Color.FromRgb(0,0,0)),
Padding = new Thickness(0),
Margin = new Thickness(5, 0, 0, 0),
VerticalAlignment = Avalonia.Layout.VerticalAlignment.Center
};
ToolTip.SetTip(closeButton, "Tab schließen");
var headerStackPanel = new StackPanel
{
Orientation = Avalonia.Layout.Orientation.Horizontal
};
var tabHeader = new TextBlock
{
Text = name,
VerticalAlignment = Avalonia.Layout.VerticalAlignment.Center
};
headerStackPanel.Children.Add(tabHeader);
headerStackPanel.Children.Add(closeButton);
// Schließen-Event hinzufügen
closeButton.Click += async (sender, e) =>
{
var result = await MessageBox.Show(this, "Diese Aktion schließt die Aufgabe unwiderruflich. Möchten Sie fortfahren?",
"Tab schließen", MessageBoxButton.YesNo);
if (result == MessageBoxResult.Yes)
{
TabView.Items.Remove(curr_tab);
_isSaved = false;
}
};
return headerStackPanel;
}
// Neu
private async void OnNewClick(object? sender, RoutedEventArgs e)
{
@@ -365,9 +424,9 @@ namespace PLG_Exam
var aufgabeText = string.IsNullOrWhiteSpace(aufgabennummer.Text) ? "Neu" : aufgabennummer.Text;
var ueberschriftText = string.IsNullOrWhiteSpace(ueberschrift.Text) ? "" : ueberschrift.Text;
tab.Header = string.IsNullOrWhiteSpace(ueberschriftText)
tab.Header = ReturnTabHeaderContent(string.IsNullOrWhiteSpace(ueberschriftText)
? aufgabeText
: $"{aufgabeText} - {ueberschriftText}";
: $"{aufgabeText} - {ueberschriftText}", tab);
}
@@ -558,7 +617,7 @@ namespace PLG_Exam
foreach (var tab in _currentExam.Tabs)
{
DrawTaskWithPageBreak(document, tab, descriptionFont, font);
DrawTaskWithPageBreak(document, tab, descriptionFont, font, fontsmall);
}
@@ -580,7 +639,7 @@ namespace PLG_Exam
// Text zeichnen
endformatter.DrawString(
"Erstellt mit PLG Exam - powered by PLG Development\nhttps://github.com/PLG-Development/PLG-Exam\n(c) 2024 - PLG Development",
"Erstellt mit PLG Exam - powered by PLG Development\nhttps://github.com/PLG-Development/PLG-Exam\n(c) 2025 - PLG Development",
fontsmall,
XBrushes.Black,
bottomDescriptionRect
@@ -599,16 +658,17 @@ namespace PLG_Exam
}
}
private void DrawTaskWithPageBreak(PdfDocument document, ExamTab tab, XFont font, XFont headerFont)
private void DrawTaskWithPageBreak(PdfDocument document, ExamTab tab, XFont font, XFont headerFont, XFont smallFont)
{
const double margin = 50; // Seitenränder
const double lineHeight = 14; // Höhe einer Textzeile
const double corr_margin = 250; // Seitenrand Korrektur
const double lineHeight = 21; // Höhe einer Textzeile
const double headerHeight = 30; // Platz für die Kopfzeile pro Seite
const double footerHeight = 20; // Platz für die Fußzeile
const double usableHeight = 842 - margin * 2 - headerHeight - footerHeight; // Höhe des nutzbaren Bereichs
// Text aufteilen
var lines = SplitTextIntoLines(tab.Inhalt, document.Pages[0].Width - margin * 2, font);
var lines = SplitTextIntoLines(tab.Inhalt, document.Pages[0].Width - margin -corr_margin, font);
double currentHeight = 0; // Aktuelle Höhe, die der Text benötigt
@@ -625,11 +685,12 @@ namespace PLG_Exam
currentHeight = 0;
// Kopfzeile zeichnen
DrawName(gfx, tab, smallFont, margin, headerHeight);
DrawHeader(gfx, tab, headerFont, margin, headerHeight);
}
// Zeile zeichnen
gfx.DrawString(line, font, XBrushes.Black, new XRect(margin, margin + headerHeight + currentHeight, page.Width - margin * 2, lineHeight), XStringFormats.TopLeft);
gfx.DrawString(line, font, XBrushes.Black, new XRect(margin, margin + headerHeight + currentHeight, page.Width - margin - corr_margin, lineHeight), XStringFormats.TopLeft);
currentHeight += lineHeight;
}
}
@@ -641,6 +702,16 @@ namespace PLG_Exam
gfx.DrawString(headerText, font, XBrushes.Gray, new XRect(margin, margin, gfx.PageSize.Width - margin * 2, headerHeight), XStringFormats.TopLeft);
}
private void DrawName(XGraphics gfx, ExamTab tab, XFont font, double margin, double headerHeight)
{
var headerText = $"{_currentExam.Name}, {_currentExam.Vorname}";
gfx.DrawString(headerText, font, XBrushes.Gray, new XRect(margin, margin-15, gfx.PageSize.Width - margin * 2, headerHeight), XStringFormats.TopLeft);
var headerText2 = _currentExam.Datum.Value.ToString("dd.MM.yyyy", CultureInfo.CreateSpecificCulture("de-DE"));
gfx.DrawString(headerText2, font, XBrushes.Gray, new XRect(margin, margin-15, gfx.PageSize.Width - margin * 2, headerHeight), XStringFormats.TopRight);
}
// Methode zum Aufteilen des Textes in Zeilen
private List<string> SplitTextIntoLines(string text, double maxWidth, XFont font)
{