import os from PyQt5.QtWidgets import (QGridLayout, QPushButton, QLabel, QHBoxLayout, QApplication, QVBoxLayout, QProgressBar, QGroupBox) from PyQt5.QtGui import QPixmap from PyQt5.QtCore import Qt import logline_leviathan.gui.versionvars as versionvars from logline_leviathan.gui.query_window import QueryLineEdit QApplication.setAttribute(Qt.AA_EnableHighDpiScaling) def initialize_main_window(main_window, app): main_window.setWindowTitle('Logline Leviathan') main_window.mainLayout = QVBoxLayout(main_window) #main_window.extendedLayout = QHBoxLayout(main_window) main_window.db_session = None # Logo pixmap = QPixmap(os.path.join('logline_leviathan', 'gui', 'logo.png')) scaled_pixmap = pixmap.scaled(400, 400, Qt.KeepAspectRatio, Qt.SmoothTransformation) logoLabel = QLabel(main_window) logoLabel.setPixmap(scaled_pixmap) # Version label versionLabel = QLabel(versionvars.version_string, main_window) # Replace X.X.X with your actual version number versionLabel.setAlignment(Qt.AlignLeft | Qt.AlignVCenter) # Horizontal layout hbox = QHBoxLayout() hbox.addWidget(versionLabel) # Add version label to the left hbox.addStretch() # Add stretchable space between the version label and logo hbox.addWidget(logoLabel, alignment=Qt.AlignRight) # Add logo label to the right # Add horizontal layout to the main layout main_window.mainLayout.addLayout(hbox) 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: 60px; 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 */ } """ main_window.setStyleSheet(stylesheet) # Data Ingestion Settings Label main_window.dataIngestionLabel = QLabel(' Willkommen beim LoglineLeviathan - Analyse/Export-Modul.\n Der Quick-Start-Button ermöglicht eine schnelle Selektion der zu analysierenden Daten.\n Nach Abschluss der Selektion über den Abbrechen-Button startet die Analyse sofort.') main_window.dataIngestionLabel.setWordWrap(True) main_window.dataIngestionLabel.setMinimumHeight(60) main_window.dataIngestionLabel.setStyleSheet("QLabel { background-color: #3C4043; color: white; }") # Quick Start Button quickStartButton = QPushButton('Quick Start', main_window) quickStartButton.setStyleSheet(highlited_button_style) quickStartButton.setFixedSize(270, 55) quickStartButton.clicked.connect(main_window.quickStartWorkflow) # Horizontal layout for label and button hBoxLayout = QHBoxLayout() hBoxLayout.addWidget(quickStartButton) hBoxLayout.addWidget(main_window.dataIngestionLabel) # Add horizontal layout to the main layout main_window.mainLayout.addLayout(hBoxLayout) # Grid Layout for Top Buttons topButtonGridLayout = QGridLayout() # Create Buttons main_window.openButton = QPushButton('Einzelne Dateien selektieren...', main_window) main_window.openButton.clicked.connect(main_window.openFileNameDialog) main_window.addDirButton = QPushButton('Pfad zur rekursiven Analyse selektieren...', main_window) main_window.addDirButton.clicked.connect(main_window.openDirNameDialog) main_window.openFileSettingsButton = QPushButton('Selektierte Dateien...', main_window) main_window.openFileSettingsButton.clicked.connect(lambda: main_window.openFileSettingsWindow()) main_window.createDbButton = QPushButton('Lokale Datenbank neu erstellen', main_window) main_window.createDbButton.clicked.connect(main_window.purgeDatabase) main_window.importDbButton = QPushButton('Existierende Datenbank importieren...', main_window) main_window.importDbButton.clicked.connect(main_window.importDatabase) main_window.exportDBButton = QPushButton('Lokale Datenbank speichern/exportieren...', main_window) main_window.exportDBButton.clicked.connect(main_window.exportDatabase) main_window.openAnalysisSettingsButton = QPushButton('Analyse-Einstellungen...', main_window) main_window.openAnalysisSettingsButton.clicked.connect(lambda: main_window.openAnalysisSettingsWindow()) main_window.processButton = QPushButton('Verarbeitung beginnen', main_window) main_window.processButton.setStyleSheet(highlited_button_style) main_window.processButton.clicked.connect(main_window.processFiles) main_window.abortAnalysisButton = QPushButton('Verarbeitung abbrechen', main_window) main_window.abortAnalysisButton.clicked.connect(main_window.abortAnalysis) # Create GroupBoxes fileSelectionGroup = QGroupBox("Datenselektion") databaseGroup = QGroupBox("Datenbank - Management") analysisGroup = QGroupBox("Analyse - Management") # Create Layouts for each GroupBox fileSelectionLayout = QVBoxLayout() databaseLayout = QVBoxLayout() analysisLayout = QVBoxLayout() # Add Buttons to their respective Layout fileSelectionLayout.addWidget(main_window.openButton) fileSelectionLayout.addWidget(main_window.addDirButton) fileSelectionLayout.addWidget(main_window.openFileSettingsButton) databaseLayout.addWidget(main_window.createDbButton) databaseLayout.addWidget(main_window.importDbButton) databaseLayout.addWidget(main_window.exportDBButton) analysisLayout.addWidget(main_window.openAnalysisSettingsButton) analysisLayout.addWidget(main_window.processButton) analysisLayout.addWidget(main_window.abortAnalysisButton) # Set Layouts to GroupBoxes fileSelectionGroup.setLayout(fileSelectionLayout) databaseGroup.setLayout(databaseLayout) analysisGroup.setLayout(analysisLayout) # Add GroupBoxes to Grid topButtonGridLayout.addWidget(fileSelectionGroup, 0, 0) topButtonGridLayout.addWidget(databaseGroup, 0, 1) topButtonGridLayout.addWidget(analysisGroup, 0, 2) # Set uniform spacing topButtonGridLayout.setHorizontalSpacing(20) topButtonGridLayout.setVerticalSpacing(10) # Add the Grid Layout to the Main Layout main_window.mainLayout.addLayout(topButtonGridLayout) # Progress Bar, Status Label, Entity Rate Label, File Count Label main_window.progressBar = QProgressBar(main_window) main_window.mainLayout.addWidget(main_window.progressBar) main_window.statusLabel = QLabel(' Bereit // Analyse starten oder Export generieren', main_window) main_window.statusLabel.setWordWrap(True) main_window.statusLabel.setMinimumHeight(40) main_window.statusLabel.setStyleSheet("QLabel { background-color: #3C4043; color: white; }") main_window.mainLayout.addWidget(main_window.statusLabel) main_window.entityRateLabel = QLabel(' Bereit // Analyse starten oder Export generieren', main_window) main_window.mainLayout.addWidget(main_window.entityRateLabel) main_window.fileCountLabel = QLabel(' Keine Dateien selektiert', main_window) main_window.fileCountLabel.setMinimumHeight(40) main_window.fileCountLabel.setStyleSheet("QLabel { background-color: #3C4043; color: white; }") main_window.mainLayout.addWidget(main_window.fileCountLabel) # Create the new QGroupBox for Database Query databaseQueryGroupBox = QGroupBox("Datensatz durchsuchen", main_window) databaseQueryLayout = QVBoxLayout(databaseQueryGroupBox) databaseQueryLayout.setAlignment(Qt.AlignTop) # Create QLineEdit for text input databaseQueryLineEdit = QueryLineEdit(main_window) databaseQueryLineEdit.setPlaceholderText(" Suchbegriff...") databaseQueryLineEdit.setStyleSheet(""" QLineEdit { background-color: #3C4043; color: white; min-height: 20px; } """) databaseQueryLineEdit.returnPressed.connect(lambda: main_window.execute_query_wrapper(databaseQueryLineEdit.text())) databaseQueryLabel = QLabel("\nIntelligentes Durchsuchen der Datenbank nach jeglichem Suchbegriff. Die Nutzung von Suchoperatoren +, - und '' ist möglich. Als Suchbegriffe können jegliche Entitäten, aber auch Dateinamen oder Sätze im Kontext, sowie Entitätentyp-Kurzbezeichnungen (s. rechts) verwendet werden.\n\n", main_window) databaseQueryLabel.setWordWrap(True) # Create QPushButton for executing the query executeQueryButton = QPushButton("Ausführen", main_window) executeQueryButton.clicked.connect(lambda: main_window.execute_query_wrapper(databaseQueryLineEdit.text())) main_window.databaseStatusLabel = QLabel(" Datenbank noch nicht initialisiert", main_window) # Add QLineEdit and QPushButton to the QVBoxLayout databaseQueryLayout.addWidget(databaseQueryLineEdit) databaseQueryLayout.addWidget(databaseQueryLabel) databaseQueryLayout.addWidget(executeQueryButton) databaseQueryLayout.addWidget(main_window.databaseStatusLabel) # Set the QVBoxLayout as the layout for the QGroupBox databaseQueryGroupBox.setLayout(databaseQueryLayout) databaseContentsGroupBox = QGroupBox("Datensatz", main_window) databaseContentsLayout = QHBoxLayout(databaseContentsGroupBox) databaseContentSwitchLayout = QVBoxLayout() expandAllButton = QPushButton("Expandieren", main_window) expandAllButton.clicked.connect(lambda: main_window.databaseTree.expandAllTreeItems()) collapseAllButton = QPushButton("Komprimieren", main_window) collapseAllButton.clicked.connect(lambda: main_window.databaseTree.collapseAllTreeItems()) databaseContentSwitchLayout.addWidget(expandAllButton) databaseContentSwitchLayout.addWidget(collapseAllButton) databaseContentSwitchLayout.setAlignment(Qt.AlignTop) databaseContentsLayout.addWidget(main_window.databaseTree) databaseContentsLayout.addLayout(databaseContentSwitchLayout) generationOptionsGroupBox = QGroupBox("Generator - Selektion", main_window) generationOptionsLayout = QVBoxLayout(generationOptionsGroupBox) generationOptionsLayout.setAlignment(Qt.AlignTop) # Corrected button creation openGenerateReportWindowButton = QPushButton("Report-Datei generieren", main_window) openGenerateReportWindowButton.clicked.connect(main_window.openGenerateReportWindow) openGenerateReportWindowButtonDescriptor = QLabel("REPORT-DATEI GENERIEREN:\nGeneriert eine Report-Datei, die einfach extern geteilt oder inspiziert werden kann. Im Auswahlfenster sind detaillierte Einstellungen verfügbar.\n", main_window) openGenerateReportWindowButtonDescriptor.setWordWrap(True) openGenerateWordlistButton = QPushButton("Wortliste generieren", main_window) openGenerateWordlistButton.clicked.connect(main_window.openGenerateWordlistWindow) openGenerateWordlistButtonDescriptor = QLabel("WORTLISTE GENERIEREN:\nGeneriert eine Wortliste, die entweder für die Analyse (auch für weitere Datensätze) genutzt werden, oder extern weiterverwendet werden kann. Im Auswahlfenster sind detaillierte Einstellungen verfügbar.\n\n\n", main_window) openGenerateWordlistButtonDescriptor.setWordWrap(True) generationOptionsLayout.addWidget(openGenerateReportWindowButton) generationOptionsLayout.addWidget(openGenerateReportWindowButtonDescriptor) generationOptionsLayout.addWidget(openGenerateWordlistButton) generationOptionsLayout.addWidget(openGenerateWordlistButtonDescriptor) # Create a new QGridLayout for arranging QGroupBoxes groupBoxLayout = QGridLayout() databaseQueryGroupBox.setFixedWidth(300) databaseContentsGroupBox.setFixedWidth(500) generationOptionsGroupBox.setFixedWidth(300) # Add databaseQueryGroupBox to the grid layout groupBoxLayout.addWidget(databaseQueryGroupBox, 0, 0) groupBoxLayout.addWidget(databaseContentsGroupBox, 0, 1) groupBoxLayout.addWidget(generationOptionsGroupBox, 0, 2) # Link to GitHub Repo main_window.githubLink = QLabel(f'{versionvars.repo_link_text}', main_window) main_window.githubLink.setOpenExternalLinks(True) main_window.openLogDirButton = QPushButton('Log-Verzeichnis', main_window) main_window.openLogDirButton.clicked.connect(main_window.openLogDir) # Exit Button main_window.exitButton = QPushButton('Beenden', main_window) main_window.exitButton.clicked.connect(main_window.close) groupBoxLayout.addWidget(main_window.githubLink, 1, 1) groupBoxLayout.addWidget(main_window.openLogDirButton, 1, 0) groupBoxLayout.addWidget(main_window.exitButton, 1, 2) # Add this grid layout to the main layout of the main window main_window.mainLayout.addLayout(groupBoxLayout) main_window.update()