LoglineLeviathan/logline_leviathan/gui/initui_report_window.py
2025-09-03 13:20:23 +02:00

339 lines
19 KiB
Python

from PyQt5.QtWidgets import QRadioButton, QDateTimeEdit, QVBoxLayout, QCheckBox, QHBoxLayout, QGroupBox, QPushButton, QLineEdit, QGridLayout, QLabel, QListWidget, QGridLayout
from PyQt5.QtCore import QDate
import logline_leviathan.gui.versionvars as versionvars
from logline_leviathan.gui.checkbox_panel import *
def initialize_generate_report_window(generate_report_window, app):
generate_report_window.setWindowTitle('Logline Leviathan - Report - Generator')
generate_report_window.mainLayout = QVBoxLayout(generate_report_window)
#generate_report_window.extendedLayout = QHBoxLayout(generate_report_window)
generate_report_window.db_session = None
stylesheet = """
/* Style for the main window */
QWidget {
background-color: #282C34; /* Dark grey background */
color: white; /* White text */
}
/* Style for buttons */
QPushButton {
background-color: #4B5563; /* Dark grey background */
color: white; /* White text */
border-style: outset;
border-width: 2px;
border-radius: 1px; /* Rounded corners */
border-color: #4A4A4A;
padding: 6px;
min-width: 50px;
min-height: 15px;
}
QPushButton:hover {
background-color: #6E6E6E; /* Slightly lighter grey on hover */
}
QPushButton:pressed {
background-color: #484848; /* Even darker grey when pressed */
}
"""
highlited_button_style = """
QPushButton {
background-color: #3C8CCE; /* Lighter blue background */
color: white; /* White text */
border-style: outset;
border-width: 2px;
border-radius: 1px; /* Rounded corners */
border-color: #4A4A4A;
padding: 6px;
min-width: 50px;
min-height: 15px;
}
QPushButton:hover {
background-color: #7EC0EE; /* Even lighter blue on hover */
}
QPushButton:pressed {
background-color: #4A86E8; /* Slightly darker blue when pressed */
}
"""
# Update function for output format selection label with custom text and line breaks
def update_output_format_label(current):
if current is not None:
format_text = current.text()
format_descriptions = {
'HTML': " HTML\n Generiert eine einzelne HTML-Datei, die einfach\n geteilt und mit jedem Browser geöffnet werden kann.\n Geeignet für Übersichtsanalyse, sofern der Datensatz nicht zu\n umfangreich ist.",
'Interactive HTML': " Interaktive HTML-Datei.\n Generiert eine einzelne HTML-Datei, die mit einem Webbrowser,\n der JavaScript unterstützt, angezeigt wird.\n Geeignet für umfangreichere Datensätze.",
'XLSX': " XLSX\n Exportiert Daten in eine Excel-Datei.\n Schreibe sämtliche Entitätentypen in\n separate Sheets, unterstützt keine visuelle Hervorhebung.\n Geeignet für weitere Analyse über MS-Excel."
}
generate_report_window.outputFormatSelectionLabel.setText(format_descriptions.get(format_text, ""))
def update_export_context_label(current):
if current is not None:
context_text = current.text() # Get the text of the current item
context_descriptions = {
"Kontext - gleiche Zeile": " Kontext - gleiche Zeile\n Eine Zeile pro Fundstelle einer Entität.\n Der Kontext innerhalb der gleichen Zeile\n wird dargestellt.\n",
"Kontext - mittelgroß": " Kontext - mittelgroß\n Eine Zeile pro Fundstelle einer Entität.\n Der Kontext von +/- 8 Zeilen wird dargestellt.\n",
"Kontext - umfangreich": " Kontext - umfangreich\n Eine Zeile pro Fundstelle einer Entität.\n Der Kontext von +/- 15 Zeilen wird dargestellt.\n",
"Kompakte Zusammenfassung ohne Kontext": " Kompakte Zusammenfassung ohne Kontext\n Listet Entitäten untereinander auf.\n Die jeweiligen Fundstellen werden komprimiert\n dargestellt.\n Kontext wird nicht unterstützt."
}
generate_report_window.exportContextSelectionLabel.setText(context_descriptions.get(context_text, ""))
generate_report_window.setStyleSheet(stylesheet)
generate_report_window.statusLabel = QLabel(' Erwarte Selektion von Entitätentypen, die im Export dargestellt werden.', generate_report_window)
generate_report_window.statusLabel.setWordWrap(True)
generate_report_window.statusLabel.setMinimumHeight(40)
generate_report_window.statusLabel.setStyleSheet("QLabel { background-color: #3C4043; color: white; }")
generate_report_window.mainLayout.addWidget(generate_report_window.statusLabel)
# Create a GroupBox for the CheckboxPanel
exportOptionsGroupBox = QGroupBox("Typen - Selektion", generate_report_window)
exportOptionsLayout = QVBoxLayout(exportOptionsGroupBox)
generate_report_window.checkboxPanel = CheckboxPanel()
# Checkbox Panel Filter Layout
checkboxFilterLayout = QHBoxLayout()
# Create the "Check All" button
checkAllButton = QPushButton("Alle markieren", generate_report_window)
checkAllButton.clicked.connect(lambda: generate_report_window.checkboxPanel.checkAllVisible())
# Create the "Uncheck All" button
uncheckAllButton = QPushButton("Keine markieren", generate_report_window)
uncheckAllButton.clicked.connect(lambda: generate_report_window.checkboxPanel.uncheckAllVisible())
expandAllButton = QPushButton("Expandieren", generate_report_window)
expandAllButton.clicked.connect(lambda: generate_report_window.checkboxPanel.expandAllTreeItems())
collapseAllButton = QPushButton("Komprimieren", generate_report_window)
collapseAllButton.clicked.connect(lambda: generate_report_window.checkboxPanel.collapseAllTreeItems())
checkboxFilterLayout.addWidget(checkAllButton)
checkboxFilterLayout.addWidget(uncheckAllButton)
checkboxFilterLayout.addWidget(expandAllButton)
checkboxFilterLayout.addWidget(collapseAllButton)
checkboxFilterLabel = QLabel("Filtern:")
checkboxFilterLayout.addWidget(checkboxFilterLabel)
checkboxFilterLineEdit = QLineEdit(generate_report_window)
checkboxFilterLineEdit.setPlaceholderText(" nach Typ, Tooltip oder Kurzbezeichnung filtern...")
checkboxFilterLineEdit.setStyleSheet("""
QLineEdit {
background-color: #3C4043;
color: white;
min-height: 20px;
}
""")
checkboxFilterLayout.addWidget(checkboxFilterLineEdit)
# Connect the textChanged signal of QLineEdit to the filter method
checkboxFilterLineEdit.textChanged.connect(generate_report_window.checkboxPanel.filterCheckboxes)
exportOptionsLayout.addLayout(checkboxFilterLayout)
exportOptionsLayout.addWidget(generate_report_window.checkboxPanel)
# Create a GroupBox for the FileCheckboxPanel
fileSelectionGroupBox = QGroupBox("Dateien - Selektion", generate_report_window)
fileExportOptionsLayout = QVBoxLayout(fileSelectionGroupBox)
generate_report_window.fileCheckboxPanel = FileCheckboxPanel()
# File Checkbox Panel Filter Layout
fileCheckboxFilterLayout = QHBoxLayout()
# Create the "Check All" button
filCheckAllButton = QPushButton("Alle markieren", generate_report_window)
filCheckAllButton.clicked.connect(lambda: generate_report_window.fileCheckboxPanel.checkAllVisible())
# Create the "Uncheck All" button
fileUncheckAllButton = QPushButton("Keine markieren", generate_report_window)
fileUncheckAllButton.clicked.connect(lambda: generate_report_window.fileCheckboxPanel.uncheckAllVisible())
fileCheckboxFilterLayout.addWidget(filCheckAllButton)
fileCheckboxFilterLayout.addWidget(fileUncheckAllButton)
fileFilterLabel = QLabel("Filtern:")
fileCheckboxFilterLayout.addWidget(fileFilterLabel)
fileFilterLineEdit = QLineEdit(generate_report_window)
fileFilterLineEdit.setPlaceholderText(" nach Dateiname filtern...")
fileFilterLineEdit.setStyleSheet("""
QLineEdit {
background-color: #3C4043;
color: white;
min-height: 20px;
}
""")
fileCheckboxFilterLayout.addWidget(fileFilterLineEdit)
# Connect the textChanged signal of QLineEdit to the filter method
fileFilterLineEdit.textChanged.connect(generate_report_window.fileCheckboxPanel.filterCheckboxes)
fileExportOptionsLayout.addLayout(fileCheckboxFilterLayout)
fileExportOptionsLayout.addWidget(generate_report_window.fileCheckboxPanel)
# First Horizontal Layout for Database Query and Export Options
topHBoxLayout = QHBoxLayout()
topHBoxLayout.addWidget(exportOptionsGroupBox)
topHBoxLayout.addWidget(fileSelectionGroupBox)
generate_report_window.mainLayout.addLayout(topHBoxLayout)
# Export Settings as a Grid Layout
exportCustomizationLayout = QGridLayout()
item_height = 20
visible_items = 3
# Set a fixed width for both QListWidgets (adjust the width as needed)
outputFormatGroupBox = QGroupBox("Ausgabeformat - Selektion", generate_report_window)
outputFormatGroupBox.setFixedHeight(200)
outputFormatLayout = QVBoxLayout(outputFormatGroupBox)
generate_report_window.outputFormatList = QListWidget()
generate_report_window.outputFormatList.addItems(['HTML', 'Interactive HTML', 'XLSX'])
generate_report_window.outputFormatList.setCurrentRow(0)
generate_report_window.outputFormatList.setFixedHeight(item_height * visible_items)
outputFormatLayout.addWidget(generate_report_window.outputFormatList)
# Label to display current selection of output format
generate_report_window.outputFormatSelectionLabel = QLabel('')
generate_report_window.outputFormatSelectionLabel.setStyleSheet("QLabel { background-color: #3C4043; color: white; }")
generate_report_window.outputFormatSelectionLabel.setWordWrap(True)
generate_report_window.outputFormatSelectionLabel.setFixedHeight(80)
outputFormatLayout.addWidget(generate_report_window.outputFormatSelectionLabel)
exportCustomizationLayout.addWidget(outputFormatGroupBox, 0, 0)
# Export Context Group Box
exportContextGroupBox = QGroupBox("Ausgabedatei - Aufbau", generate_report_window)
exportContextGroupBox.setFixedHeight(200)
exportContextLayout = QVBoxLayout(exportContextGroupBox)
generate_report_window.exportContextList = QListWidget()
generate_report_window.exportContextList.addItems(['Kontext - gleiche Zeile', 'Kontext - mittelgroß', 'Kontext - umfangreich', 'Kompakte Zusammenfassung ohne Kontext'])
generate_report_window.exportContextList.setCurrentRow(0)
generate_report_window.exportContextList.setFixedHeight(item_height * visible_items)
exportContextLayout.addWidget(generate_report_window.exportContextList)
# Label to display current selection of export context
generate_report_window.exportContextSelectionLabel = QLabel('')
generate_report_window.exportContextSelectionLabel.setStyleSheet("QLabel { background-color: #3C4043; color: white; }")
generate_report_window.exportContextSelectionLabel.setWordWrap(True)
generate_report_window.exportContextSelectionLabel.setFixedHeight(80)
exportContextLayout.addWidget(generate_report_window.exportContextSelectionLabel)
exportCustomizationLayout.addWidget(exportContextGroupBox, 0, 1)
# Connect signals to the update functions
generate_report_window.outputFormatList.currentItemChanged.connect(update_output_format_label)
generate_report_window.exportContextList.currentItemChanged.connect(update_export_context_label)
# Initially update the labels
update_output_format_label(generate_report_window.outputFormatList.currentItem())
update_export_context_label(generate_report_window.exportContextList.currentItem())
# Initially update the label
update_output_format_label(generate_report_window.outputFormatList.currentItem())
# Initially update the label
update_export_context_label(generate_report_window.exportContextList.currentItem())
#exportLayout.addLayout(exportCustomizationLayout)
generate_report_window.mainLayout.addLayout(exportCustomizationLayout)
exportSettingsLayout = QGridLayout()
# Add a checkbox for Crossmatches
generate_report_window.crossmatchesCheckbox = QCheckBox('Nur Kreuztreffer (Gibt Entitäten an, die in mehreren Dateien gefunden wurden)', generate_report_window)
exportSettingsLayout.addWidget(generate_report_window.crossmatchesCheckbox, 0, 0)
generate_report_window.timestampFilterCheckbox = QCheckBox('Nach Zeitstempel filtern:', generate_report_window)
generate_report_window.startDateEdit = QDateTimeEdit(generate_report_window)
generate_report_window.startDateEdit.setCalendarPopup(True)
generate_report_window.startDateEdit.setDate(QDate.currentDate())
generate_report_window.endDateEdit = QDateTimeEdit(generate_report_window)
generate_report_window.endDateEdit.setCalendarPopup(True)
generate_report_window.endDateEdit.setDate(QDate.currentDate())
generate_report_window.timestampFilterQHBoxLayout = QHBoxLayout()
generate_report_window.timestampFilterQHBoxLayout.addWidget(generate_report_window.timestampFilterCheckbox)
generate_report_window.timestampFilterQHBoxLayout.addWidget(generate_report_window.startDateEdit)
generate_report_window.timestampFilterQHBoxLayout.addWidget(generate_report_window.endDateEdit)
exportSettingsLayout.addLayout(generate_report_window.timestampFilterQHBoxLayout, 1, 0)
generate_report_window.flaggedEntriesLayout = QHBoxLayout()
generate_report_window.flaggedEntriesCheckbox = QCheckBox('Markierte Einträge berücksichtigen', generate_report_window)
generate_report_window.flaggedEntriesLayout.addWidget(generate_report_window.flaggedEntriesCheckbox)
generate_report_window.flaggedRadioButtonLayout = QHBoxLayout()
generate_report_window.flaggedRadioButton = QRadioButton('Nur markierte Einträge')
generate_report_window.notflaggedRadioButton = QRadioButton('Nur nicht markierte Einträge')
generate_report_window.flaggedRadioButtonLayout.addWidget(generate_report_window.flaggedRadioButton)
generate_report_window.flaggedRadioButtonLayout.addWidget(generate_report_window.notflaggedRadioButton)
generate_report_window.flaggedRadioButton.setChecked(True)
generate_report_window.flaggedEntriesLayout.addLayout(generate_report_window.flaggedRadioButtonLayout)
exportSettingsLayout.addLayout(generate_report_window.flaggedEntriesLayout, 2, 0)
generate_report_window.openAfterExportCheckbox = QCheckBox('Datei nach dem Export oeffnen', generate_report_window)
exportSettingsLayout.addWidget(generate_report_window.openAfterExportCheckbox, 3, 0)
# Output File Path Label
generate_report_window.outputFilePathLabel = QLabel('', generate_report_window)
generate_report_window.updateOutputFilePathLabel() # Call this method to set the initial text
exportSettingsLayout.addWidget(generate_report_window.outputFilePathLabel, 0, 1)
generate_report_window.setOutputFileNameLineEdit = QLineEdit(generate_report_window)
generate_report_window.setOutputFileNameLineEdit.setPlaceholderText(' Eigenen Dateinamen spezifizieren...')
exportSettingsLayout.addWidget(generate_report_window.setOutputFileNameLineEdit, 3, 1)
generate_report_window.mainLayout.addLayout(exportSettingsLayout)
# Exit Button Layout
bottomLayout = QGridLayout()
#generate_report_window.customizeResultsButton = QPushButton('Customize Results (WiP)', generate_report_window)
#generate_report_window.customizeResultsButton.setDisabled(True)
#generate_report_window.customizeResultsButton.clicked.connect(generate_report_window.openCustomizeResultsDialog)
#bottomLayout.addWidget(generate_report_window.customizeResultsButton, 0, 0)
generate_report_window.openOutputFilepathButton = QPushButton('Ausgabeverzeichnis öffnen...', generate_report_window)
generate_report_window.openOutputFilepathButton.clicked.connect(generate_report_window.openOutputFilepath)
bottomLayout.addWidget(generate_report_window.openOutputFilepathButton, 0, 1)
# Start Export Button
generate_report_window.startExportButton = QPushButton('Report generieren...', generate_report_window)
generate_report_window.startExportButton.clicked.connect(generate_report_window.start_export_process)
generate_report_window.startExportButton.setStyleSheet(highlited_button_style)
bottomLayout.addWidget(generate_report_window.startExportButton, 0, 2)
# Output File Directory
generate_report_window.selectOutputFileButton = QPushButton('Ausgabeverzeichnis setzen...', generate_report_window)
generate_report_window.selectOutputFileButton.clicked.connect(generate_report_window.selectOutputFile)
bottomLayout.addWidget(generate_report_window.selectOutputFileButton, 1, 1)
# Exit Button
generate_report_window.exitButton = QPushButton('Schließen', generate_report_window)
generate_report_window.exitButton.clicked.connect(generate_report_window.close)
bottomLayout.addWidget(generate_report_window.exitButton, 1, 2)
generate_report_window.mainLayout.addLayout(bottomLayout)
#Easteregg
#generate_report_window.extendedLayout.addLayout(generate_report_window.mainLayout)
#generate_report_window.terminalEasterEgg = TerminalEasterEgg(generate_report_window)
#generate_report_window.terminalEasterEgg.hide()
#logoLabel.clicked.connect(generate_report_window.terminalEasterEgg.show)
generate_report_window.setLayout(generate_report_window.mainLayout)