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)