339 lines
19 KiB
Python
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) |