@@ -520,6 +520,146 @@
+
+
+ Performance
+
+
+ -
+
+
+ ThreadPoolExecutor Einstellungen
+
+
+
-
+
+
+ Anzahl paralleler Worker für Transformationen:
+
+
+
+ -
+
+
+ Anzahl der parallelen Worker-Threads für Transformationen (Standard: 8)
+
+
+ 1
+
+
+ 32
+
+
+ 8
+
+
+
+
+
+
+ -
+
+
+ SaxonWorkerPool Einstellungen
+
+
+
-
+
+
+ Aktiviert persistente JVM-Prozesse für Saxon-Transformationen.
+Vorteile: Bis zu 10x schneller durch Eliminierung von JVM-Startup-Overhead
+Nachteile: Benötigt JDK (javac) - funktioniert nicht mit JRE allein
+
+Deaktivieren Sie diese Option, wenn:
+• Sie nur ein JRE (keine JDK) installiert haben
+• Sie Probleme mit dem Worker-Pool haben
+• Sie die Funktion testen möchten
+
+
+ SaxonWorkerPool verwenden (empfohlen)
+
+
+
+ -
+
+
+ <i>Hinweis: SaxonWorkerPool benötigt ein JDK (Java Development Kit).<br>Mit JRE allein werden Transformationen im Fallback-Modus ausgeführt.</i>
+
+
+ true
+
+
+
+
+
+
+ -
+
+
+ FopWorkerPool Einstellungen
+
+
+
-
+
+
+ Aktiviert persistente JVM-Prozesse für Apache FOP PDF-Generierung.
+Vorteile: Bis zu 10x schneller durch Eliminierung von JVM-Startup-Overhead
+Nachteile: Benötigt JDK (javac) - funktioniert nicht mit JRE allein
+
+Deaktivieren Sie diese Option, wenn:
+• Sie nur ein JRE (keine JDK) installiert haben
+• Sie Probleme mit dem Worker-Pool haben
+• Sie die Funktion testen möchten
+
+
+ FopWorkerPool verwenden (empfohlen)
+
+
+
+ -
+
+
+ <i>Hinweis: FopWorkerPool benötigt ein JDK (Java Development Kit).<br>Mit JRE allein werden PDFs im Fallback-Modus generiert.</i>
+
+
+ true
+
+
+
+
+
+
+ -
+
+
+ true
+
+
+ <html><head/><body><p><span style=" font-weight:700; font-style:italic;">Hinweis: Änderungen in diesem Dialog sind unter Umständen erst nach neu start der Anwendung wirksam.</span></p></body></html>
+
+
+ Qt::AlignmentFlag::AlignCenter
+
+
+ true
+
+
+
+ -
+
+
+ Qt::Orientation::Vertical
+
+
+
+ 20
+ 40
+
+
+
+
+
+
-
diff --git a/src/ui/AppSettings_ui.py b/src/ui/AppSettings_ui.py
index 4307ac4..f87de87 100644
--- a/src/ui/AppSettings_ui.py
+++ b/src/ui/AppSettings_ui.py
@@ -1,351 +1,458 @@
-# -*- coding: utf-8 -*-
-
-################################################################################
-## Form generated from reading UI file 'AppSettings.ui'
-##
-## Created by: Qt User Interface Compiler version 6.9.1
-##
-## WARNING! All changes made in this file will be lost when recompiling UI file!
-################################################################################
-
-from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
- QMetaObject, QObject, QPoint, QRect,
- QSize, QTime, QUrl, Qt)
-from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
- QFont, QFontDatabase, QGradient, QIcon,
- QImage, QKeySequence, QLinearGradient, QPainter,
- QPalette, QPixmap, QRadialGradient, QTransform)
-from PySide6.QtWidgets import (QAbstractButton, QApplication, QDialog, QDialogButtonBox,
- QFrame, QHBoxLayout, QHeaderView, QPushButton,
- QSizePolicy, QTabWidget, QTableWidget, QTableWidgetItem,
- QVBoxLayout, QWidget)
-
-class Ui_Dialog(object):
- def setupUi(self, Dialog):
- if not Dialog.objectName():
- Dialog.setObjectName(u"Dialog")
- Dialog.resize(833, 387)
- self.verticalLayout = QVBoxLayout(Dialog)
- self.verticalLayout.setObjectName(u"verticalLayout")
- self.tabSettings = QTabWidget(Dialog)
- self.tabSettings.setObjectName(u"tabSettings")
- self.tabSettings.setEnabled(True)
- self.tabSettings.setElideMode(Qt.TextElideMode.ElideRight)
- self.tabXsls = QWidget()
- self.tabXsls.setObjectName(u"tabXsls")
- self.verticalLayout_5 = QVBoxLayout(self.tabXsls)
- self.verticalLayout_5.setObjectName(u"verticalLayout_5")
- self.tableXsls = QTableWidget(self.tabXsls)
- if (self.tableXsls.columnCount() < 2):
- self.tableXsls.setColumnCount(2)
- self.tableXsls.setObjectName(u"tableXsls")
- self.tableXsls.setColumnCount(2)
-
- self.verticalLayout_5.addWidget(self.tableXsls)
-
- self.frame_2 = QFrame(self.tabXsls)
- self.frame_2.setObjectName(u"frame_2")
- sizePolicy = QSizePolicy(QSizePolicy.Policy.Maximum, QSizePolicy.Policy.Preferred)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(self.frame_2.sizePolicy().hasHeightForWidth())
- self.frame_2.setSizePolicy(sizePolicy)
- self.frame_2.setFrameShape(QFrame.Shape.NoFrame)
- self.frame_2.setFrameShadow(QFrame.Shadow.Raised)
- self.horizontalLayout_2 = QHBoxLayout(self.frame_2)
- self.horizontalLayout_2.setObjectName(u"horizontalLayout_2")
- self.horizontalLayout_2.setContentsMargins(0, 1, 0, 0)
- self.addXsl = QPushButton(self.frame_2)
- self.addXsl.setObjectName(u"addXsl")
- icon = QIcon(QIcon.fromTheme(QIcon.ThemeIcon.ListAdd))
- self.addXsl.setIcon(icon)
-
- self.horizontalLayout_2.addWidget(self.addXsl)
-
- self.removeXsl = QPushButton(self.frame_2)
- self.removeXsl.setObjectName(u"removeXsl")
- self.removeXsl.setEnabled(False)
- icon1 = QIcon(QIcon.fromTheme(QIcon.ThemeIcon.ListRemove))
- self.removeXsl.setIcon(icon1)
-
- self.horizontalLayout_2.addWidget(self.removeXsl)
-
-
- self.verticalLayout_5.addWidget(self.frame_2)
-
- self.tabSettings.addTab(self.tabXsls, "")
- self.tabJavaVm = QWidget()
- self.tabJavaVm.setObjectName(u"tabJavaVm")
- self.verticalLayout_2 = QVBoxLayout(self.tabJavaVm)
- self.verticalLayout_2.setObjectName(u"verticalLayout_2")
- self.tableJavaVms = QTableWidget(self.tabJavaVm)
- if (self.tableJavaVms.columnCount() < 2):
- self.tableJavaVms.setColumnCount(2)
- self.tableJavaVms.setObjectName(u"tableJavaVms")
- self.tableJavaVms.setColumnCount(2)
-
- self.verticalLayout_2.addWidget(self.tableJavaVms)
-
- self.frame_3 = QFrame(self.tabJavaVm)
- self.frame_3.setObjectName(u"frame_3")
- sizePolicy.setHeightForWidth(self.frame_3.sizePolicy().hasHeightForWidth())
- self.frame_3.setSizePolicy(sizePolicy)
- self.frame_3.setFrameShape(QFrame.Shape.NoFrame)
- self.frame_3.setFrameShadow(QFrame.Shadow.Raised)
- self.horizontalLayout_3 = QHBoxLayout(self.frame_3)
- self.horizontalLayout_3.setObjectName(u"horizontalLayout_3")
- self.horizontalLayout_3.setContentsMargins(0, 0, 0, 0)
- self.addJavaVm = QPushButton(self.frame_3)
- self.addJavaVm.setObjectName(u"addJavaVm")
- self.addJavaVm.setIcon(icon)
-
- self.horizontalLayout_3.addWidget(self.addJavaVm)
-
- self.removeJavaVm = QPushButton(self.frame_3)
- self.removeJavaVm.setObjectName(u"removeJavaVm")
- self.removeJavaVm.setEnabled(False)
- self.removeJavaVm.setIcon(icon1)
-
- self.horizontalLayout_3.addWidget(self.removeJavaVm)
-
-
- self.verticalLayout_2.addWidget(self.frame_3)
-
- self.tabSettings.addTab(self.tabJavaVm, "")
- self.tabSaxon = QWidget()
- self.tabSaxon.setObjectName(u"tabSaxon")
- self.verticalLayout_4 = QVBoxLayout(self.tabSaxon)
- self.verticalLayout_4.setObjectName(u"verticalLayout_4")
- self.tableSaxons = QTableWidget(self.tabSaxon)
- if (self.tableSaxons.columnCount() < 3):
- self.tableSaxons.setColumnCount(3)
- self.tableSaxons.setObjectName(u"tableSaxons")
- self.tableSaxons.setColumnCount(3)
-
- self.verticalLayout_4.addWidget(self.tableSaxons)
-
- self.frame_4 = QFrame(self.tabSaxon)
- self.frame_4.setObjectName(u"frame_4")
- sizePolicy.setHeightForWidth(self.frame_4.sizePolicy().hasHeightForWidth())
- self.frame_4.setSizePolicy(sizePolicy)
- self.frame_4.setFrameShape(QFrame.Shape.NoFrame)
- self.frame_4.setFrameShadow(QFrame.Shadow.Raised)
- self.horizontalLayout_4 = QHBoxLayout(self.frame_4)
- self.horizontalLayout_4.setObjectName(u"horizontalLayout_4")
- self.horizontalLayout_4.setContentsMargins(0, 0, 0, 0)
- self.addSaxon = QPushButton(self.frame_4)
- self.addSaxon.setObjectName(u"addSaxon")
- self.addSaxon.setIcon(icon)
-
- self.horizontalLayout_4.addWidget(self.addSaxon)
-
- self.removeSaxon = QPushButton(self.frame_4)
- self.removeSaxon.setObjectName(u"removeSaxon")
- self.removeSaxon.setEnabled(False)
- self.removeSaxon.setIcon(icon1)
-
- self.horizontalLayout_4.addWidget(self.removeSaxon)
-
-
- self.verticalLayout_4.addWidget(self.frame_4)
-
- self.tabSettings.addTab(self.tabSaxon, "")
- self.tabApacheFop = QWidget()
- self.tabApacheFop.setObjectName(u"tabApacheFop")
- self.verticalLayout_3 = QVBoxLayout(self.tabApacheFop)
- self.verticalLayout_3.setObjectName(u"verticalLayout_3")
- self.tableApacheFops = QTableWidget(self.tabApacheFop)
- if (self.tableApacheFops.columnCount() < 3):
- self.tableApacheFops.setColumnCount(3)
- self.tableApacheFops.setObjectName(u"tableApacheFops")
- self.tableApacheFops.setColumnCount(3)
-
- self.verticalLayout_3.addWidget(self.tableApacheFops)
-
- self.frame = QFrame(self.tabApacheFop)
- self.frame.setObjectName(u"frame")
- sizePolicy.setHeightForWidth(self.frame.sizePolicy().hasHeightForWidth())
- self.frame.setSizePolicy(sizePolicy)
- self.frame.setFrameShape(QFrame.Shape.NoFrame)
- self.frame.setFrameShadow(QFrame.Shadow.Raised)
- self.horizontalLayout = QHBoxLayout(self.frame)
- self.horizontalLayout.setObjectName(u"horizontalLayout")
- self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
- self.addApacheFop = QPushButton(self.frame)
- self.addApacheFop.setObjectName(u"addApacheFop")
- self.addApacheFop.setIcon(icon)
-
- self.horizontalLayout.addWidget(self.addApacheFop)
-
- self.removeApacheFop = QPushButton(self.frame)
- self.removeApacheFop.setObjectName(u"removeApacheFop")
- self.removeApacheFop.setEnabled(False)
- self.removeApacheFop.setIcon(icon1)
-
- self.horizontalLayout.addWidget(self.removeApacheFop)
-
-
- self.verticalLayout_3.addWidget(self.frame)
-
- self.tabSettings.addTab(self.tabApacheFop, "")
- self.tabDiffPdf = QWidget()
- self.tabDiffPdf.setObjectName(u"tabDiffPdf")
- self.verticalLayout_6 = QVBoxLayout(self.tabDiffPdf)
- self.verticalLayout_6.setObjectName(u"verticalLayout_6")
- self.tableDiffPdfs = QTableWidget(self.tabDiffPdf)
- if (self.tableDiffPdfs.columnCount() < 4):
- self.tableDiffPdfs.setColumnCount(4)
- self.tableDiffPdfs.setObjectName(u"tableDiffPdfs")
- self.tableDiffPdfs.setColumnCount(4)
-
- self.verticalLayout_6.addWidget(self.tableDiffPdfs)
-
- self.frame_5 = QFrame(self.tabDiffPdf)
- self.frame_5.setObjectName(u"frame_5")
- sizePolicy.setHeightForWidth(self.frame_5.sizePolicy().hasHeightForWidth())
- self.frame_5.setSizePolicy(sizePolicy)
- self.frame_5.setFrameShape(QFrame.Shape.NoFrame)
- self.frame_5.setFrameShadow(QFrame.Shadow.Raised)
- self.horizontalLayout_5 = QHBoxLayout(self.frame_5)
- self.horizontalLayout_5.setObjectName(u"horizontalLayout_5")
- self.horizontalLayout_5.setContentsMargins(0, 0, 0, 0)
- self.addDiffPdf = QPushButton(self.frame_5)
- self.addDiffPdf.setObjectName(u"addDiffPdf")
- self.addDiffPdf.setIcon(icon)
-
- self.horizontalLayout_5.addWidget(self.addDiffPdf)
-
- self.removeDiffPdf = QPushButton(self.frame_5)
- self.removeDiffPdf.setObjectName(u"removeDiffPdf")
- self.removeDiffPdf.setEnabled(False)
- self.removeDiffPdf.setIcon(icon1)
-
- self.horizontalLayout_5.addWidget(self.removeDiffPdf)
-
-
- self.verticalLayout_6.addWidget(self.frame_5)
-
- self.tabSettings.addTab(self.tabDiffPdf, "")
- self.tabPostgreSql = QWidget()
- self.tabPostgreSql.setObjectName(u"tabPostgreSql")
- self.verticalLayout_8 = QVBoxLayout(self.tabPostgreSql)
- self.verticalLayout_8.setObjectName(u"verticalLayout_8")
- self.tablePostgreSqlDbs = QTableWidget(self.tabPostgreSql)
- if (self.tablePostgreSqlDbs.columnCount() < 5):
- self.tablePostgreSqlDbs.setColumnCount(5)
- self.tablePostgreSqlDbs.setObjectName(u"tablePostgreSqlDbs")
- self.tablePostgreSqlDbs.setColumnCount(5)
-
- self.verticalLayout_8.addWidget(self.tablePostgreSqlDbs)
-
- self.frame_7 = QFrame(self.tabPostgreSql)
- self.frame_7.setObjectName(u"frame_7")
- sizePolicy.setHeightForWidth(self.frame_7.sizePolicy().hasHeightForWidth())
- self.frame_7.setSizePolicy(sizePolicy)
- self.frame_7.setFrameShape(QFrame.Shape.NoFrame)
- self.frame_7.setFrameShadow(QFrame.Shadow.Raised)
- self.horizontalLayout_7 = QHBoxLayout(self.frame_7)
- self.horizontalLayout_7.setObjectName(u"horizontalLayout_7")
- self.horizontalLayout_7.setContentsMargins(0, 0, 0, 0)
- self.addPostgreSql = QPushButton(self.frame_7)
- self.addPostgreSql.setObjectName(u"addPostgreSql")
- self.addPostgreSql.setIcon(icon)
-
- self.horizontalLayout_7.addWidget(self.addPostgreSql)
-
- self.removePostgreSql = QPushButton(self.frame_7)
- self.removePostgreSql.setObjectName(u"removePostgreSql")
- self.removePostgreSql.setEnabled(False)
- self.removePostgreSql.setIcon(icon1)
-
- self.horizontalLayout_7.addWidget(self.removePostgreSql)
-
-
- self.verticalLayout_8.addWidget(self.frame_7)
-
- self.tabSettings.addTab(self.tabPostgreSql, "")
- self.tabPdfProject = QWidget()
- self.tabPdfProject.setObjectName(u"tabPdfProject")
- self.verticalLayout_7 = QVBoxLayout(self.tabPdfProject)
- self.verticalLayout_7.setObjectName(u"verticalLayout_7")
- self.tablePdfProjects = QTableWidget(self.tabPdfProject)
- if (self.tablePdfProjects.columnCount() < 7):
- self.tablePdfProjects.setColumnCount(7)
- self.tablePdfProjects.setObjectName(u"tablePdfProjects")
- self.tablePdfProjects.setColumnCount(7)
-
- self.verticalLayout_7.addWidget(self.tablePdfProjects)
-
- self.frame_6 = QFrame(self.tabPdfProject)
- self.frame_6.setObjectName(u"frame_6")
- sizePolicy.setHeightForWidth(self.frame_6.sizePolicy().hasHeightForWidth())
- self.frame_6.setSizePolicy(sizePolicy)
- self.frame_6.setFrameShape(QFrame.Shape.NoFrame)
- self.frame_6.setFrameShadow(QFrame.Shadow.Raised)
- self.horizontalLayout_6 = QHBoxLayout(self.frame_6)
- self.horizontalLayout_6.setObjectName(u"horizontalLayout_6")
- self.horizontalLayout_6.setContentsMargins(0, 0, 0, 0)
- self.addProject = QPushButton(self.frame_6)
- self.addProject.setObjectName(u"addProject")
- self.addProject.setIcon(icon)
-
- self.horizontalLayout_6.addWidget(self.addProject)
-
- self.removeProject = QPushButton(self.frame_6)
- self.removeProject.setObjectName(u"removeProject")
- self.removeProject.setEnabled(False)
- self.removeProject.setIcon(icon1)
-
- self.horizontalLayout_6.addWidget(self.removeProject)
-
-
- self.verticalLayout_7.addWidget(self.frame_6)
-
- self.tabSettings.addTab(self.tabPdfProject, "")
-
- self.verticalLayout.addWidget(self.tabSettings)
-
- self.buttonBox = QDialogButtonBox(Dialog)
- self.buttonBox.setObjectName(u"buttonBox")
- self.buttonBox.setOrientation(Qt.Orientation.Horizontal)
- self.buttonBox.setStandardButtons(QDialogButtonBox.StandardButton.Cancel|QDialogButtonBox.StandardButton.Ok)
- self.buttonBox.setCenterButtons(True)
-
- self.verticalLayout.addWidget(self.buttonBox)
-
-
- self.retranslateUi(Dialog)
- self.buttonBox.accepted.connect(Dialog.accept)
- self.buttonBox.rejected.connect(Dialog.reject)
-
- self.tabSettings.setCurrentIndex(0)
-
-
- QMetaObject.connectSlotsByName(Dialog)
- # setupUi
-
- def retranslateUi(self, Dialog):
- Dialog.setWindowTitle(QCoreApplication.translate("Dialog", u"Programm Einstellungen", None))
- self.addXsl.setText(QCoreApplication.translate("Dialog", u"Hinzuf\u00fcgen", None))
- self.removeXsl.setText(QCoreApplication.translate("Dialog", u"Entfernen", None))
- self.tabSettings.setTabText(self.tabSettings.indexOf(self.tabXsls), QCoreApplication.translate("Dialog", u"XSL-Ordner", None))
- self.addJavaVm.setText(QCoreApplication.translate("Dialog", u"Hinzuf\u00fcgen", None))
- self.removeJavaVm.setText(QCoreApplication.translate("Dialog", u"Entfernen", None))
- self.tabSettings.setTabText(self.tabSettings.indexOf(self.tabJavaVm), QCoreApplication.translate("Dialog", u"Java VM", None))
- self.addSaxon.setText(QCoreApplication.translate("Dialog", u"Hinzuf\u00fcgen", None))
- self.removeSaxon.setText(QCoreApplication.translate("Dialog", u"Entfernen", None))
- self.tabSettings.setTabText(self.tabSettings.indexOf(self.tabSaxon), QCoreApplication.translate("Dialog", u"Saxon", None))
- self.addApacheFop.setText(QCoreApplication.translate("Dialog", u"Hinzuf\u00fcgen", None))
- self.removeApacheFop.setText(QCoreApplication.translate("Dialog", u"Entfernen", None))
- self.tabSettings.setTabText(self.tabSettings.indexOf(self.tabApacheFop), QCoreApplication.translate("Dialog", u"Apache FOP", None))
- self.addDiffPdf.setText(QCoreApplication.translate("Dialog", u"Hinzuf\u00fcgen", None))
- self.removeDiffPdf.setText(QCoreApplication.translate("Dialog", u"Entfernen", None))
- self.tabSettings.setTabText(self.tabSettings.indexOf(self.tabDiffPdf), QCoreApplication.translate("Dialog", u"Diff-PDF", None))
- self.addPostgreSql.setText(QCoreApplication.translate("Dialog", u"Hinzuf\u00fcgen", None))
- self.removePostgreSql.setText(QCoreApplication.translate("Dialog", u"Entfernen", None))
- self.tabSettings.setTabText(self.tabSettings.indexOf(self.tabPostgreSql), QCoreApplication.translate("Dialog", u"PostgreSQL", None))
- self.addProject.setText(QCoreApplication.translate("Dialog", u"Hinzuf\u00fcgen", None))
- self.removeProject.setText(QCoreApplication.translate("Dialog", u"Entfernen", None))
- self.tabSettings.setTabText(self.tabSettings.indexOf(self.tabPdfProject), QCoreApplication.translate("Dialog", u"PDF-Projekte", None))
- # retranslateUi
-
+# -*- coding: utf-8 -*-
+
+################################################################################
+## Form generated from reading UI file 'AppSettings.ui'
+##
+## Created by: Qt User Interface Compiler version 6.9.2
+##
+## WARNING! All changes made in this file will be lost when recompiling UI file!
+################################################################################
+
+from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
+ QMetaObject, QObject, QPoint, QRect,
+ QSize, QTime, QUrl, Qt)
+from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
+ QFont, QFontDatabase, QGradient, QIcon,
+ QImage, QKeySequence, QLinearGradient, QPainter,
+ QPalette, QPixmap, QRadialGradient, QTransform)
+from PySide6.QtWidgets import (QAbstractButton, QApplication, QCheckBox, QDialog,
+ QDialogButtonBox, QFrame, QGroupBox, QHBoxLayout,
+ QHeaderView, QLabel, QPushButton, QSizePolicy,
+ QSpacerItem, QSpinBox, QTabWidget, QTableWidget,
+ QTableWidgetItem, QVBoxLayout, QWidget)
+
+class Ui_Dialog(object):
+ def setupUi(self, Dialog):
+ if not Dialog.objectName():
+ Dialog.setObjectName(u"Dialog")
+ Dialog.resize(833, 446)
+ self.verticalLayout = QVBoxLayout(Dialog)
+ self.verticalLayout.setObjectName(u"verticalLayout")
+ self.tabSettings = QTabWidget(Dialog)
+ self.tabSettings.setObjectName(u"tabSettings")
+ self.tabSettings.setEnabled(True)
+ self.tabSettings.setElideMode(Qt.TextElideMode.ElideRight)
+ self.tabXsls = QWidget()
+ self.tabXsls.setObjectName(u"tabXsls")
+ self.verticalLayout_5 = QVBoxLayout(self.tabXsls)
+ self.verticalLayout_5.setObjectName(u"verticalLayout_5")
+ self.tableXsls = QTableWidget(self.tabXsls)
+ if (self.tableXsls.columnCount() < 2):
+ self.tableXsls.setColumnCount(2)
+ self.tableXsls.setObjectName(u"tableXsls")
+ self.tableXsls.setColumnCount(2)
+
+ self.verticalLayout_5.addWidget(self.tableXsls)
+
+ self.frame_2 = QFrame(self.tabXsls)
+ self.frame_2.setObjectName(u"frame_2")
+ sizePolicy = QSizePolicy(QSizePolicy.Policy.Maximum, QSizePolicy.Policy.Preferred)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.frame_2.sizePolicy().hasHeightForWidth())
+ self.frame_2.setSizePolicy(sizePolicy)
+ self.frame_2.setFrameShape(QFrame.Shape.NoFrame)
+ self.frame_2.setFrameShadow(QFrame.Shadow.Raised)
+ self.horizontalLayout_2 = QHBoxLayout(self.frame_2)
+ self.horizontalLayout_2.setObjectName(u"horizontalLayout_2")
+ self.horizontalLayout_2.setContentsMargins(0, 1, 0, 0)
+ self.addXsl = QPushButton(self.frame_2)
+ self.addXsl.setObjectName(u"addXsl")
+ icon = QIcon(QIcon.fromTheme(QIcon.ThemeIcon.ListAdd))
+ self.addXsl.setIcon(icon)
+
+ self.horizontalLayout_2.addWidget(self.addXsl)
+
+ self.removeXsl = QPushButton(self.frame_2)
+ self.removeXsl.setObjectName(u"removeXsl")
+ self.removeXsl.setEnabled(False)
+ icon1 = QIcon(QIcon.fromTheme(QIcon.ThemeIcon.ListRemove))
+ self.removeXsl.setIcon(icon1)
+
+ self.horizontalLayout_2.addWidget(self.removeXsl)
+
+
+ self.verticalLayout_5.addWidget(self.frame_2)
+
+ self.tabSettings.addTab(self.tabXsls, "")
+ self.tabJavaVm = QWidget()
+ self.tabJavaVm.setObjectName(u"tabJavaVm")
+ self.verticalLayout_2 = QVBoxLayout(self.tabJavaVm)
+ self.verticalLayout_2.setObjectName(u"verticalLayout_2")
+ self.tableJavaVms = QTableWidget(self.tabJavaVm)
+ if (self.tableJavaVms.columnCount() < 2):
+ self.tableJavaVms.setColumnCount(2)
+ self.tableJavaVms.setObjectName(u"tableJavaVms")
+ self.tableJavaVms.setColumnCount(2)
+
+ self.verticalLayout_2.addWidget(self.tableJavaVms)
+
+ self.frame_3 = QFrame(self.tabJavaVm)
+ self.frame_3.setObjectName(u"frame_3")
+ sizePolicy.setHeightForWidth(self.frame_3.sizePolicy().hasHeightForWidth())
+ self.frame_3.setSizePolicy(sizePolicy)
+ self.frame_3.setFrameShape(QFrame.Shape.NoFrame)
+ self.frame_3.setFrameShadow(QFrame.Shadow.Raised)
+ self.horizontalLayout_3 = QHBoxLayout(self.frame_3)
+ self.horizontalLayout_3.setObjectName(u"horizontalLayout_3")
+ self.horizontalLayout_3.setContentsMargins(0, 0, 0, 0)
+ self.addJavaVm = QPushButton(self.frame_3)
+ self.addJavaVm.setObjectName(u"addJavaVm")
+ self.addJavaVm.setIcon(icon)
+
+ self.horizontalLayout_3.addWidget(self.addJavaVm)
+
+ self.removeJavaVm = QPushButton(self.frame_3)
+ self.removeJavaVm.setObjectName(u"removeJavaVm")
+ self.removeJavaVm.setEnabled(False)
+ self.removeJavaVm.setIcon(icon1)
+
+ self.horizontalLayout_3.addWidget(self.removeJavaVm)
+
+
+ self.verticalLayout_2.addWidget(self.frame_3)
+
+ self.tabSettings.addTab(self.tabJavaVm, "")
+ self.tabSaxon = QWidget()
+ self.tabSaxon.setObjectName(u"tabSaxon")
+ self.verticalLayout_4 = QVBoxLayout(self.tabSaxon)
+ self.verticalLayout_4.setObjectName(u"verticalLayout_4")
+ self.tableSaxons = QTableWidget(self.tabSaxon)
+ if (self.tableSaxons.columnCount() < 3):
+ self.tableSaxons.setColumnCount(3)
+ self.tableSaxons.setObjectName(u"tableSaxons")
+ self.tableSaxons.setColumnCount(3)
+
+ self.verticalLayout_4.addWidget(self.tableSaxons)
+
+ self.frame_4 = QFrame(self.tabSaxon)
+ self.frame_4.setObjectName(u"frame_4")
+ sizePolicy.setHeightForWidth(self.frame_4.sizePolicy().hasHeightForWidth())
+ self.frame_4.setSizePolicy(sizePolicy)
+ self.frame_4.setFrameShape(QFrame.Shape.NoFrame)
+ self.frame_4.setFrameShadow(QFrame.Shadow.Raised)
+ self.horizontalLayout_4 = QHBoxLayout(self.frame_4)
+ self.horizontalLayout_4.setObjectName(u"horizontalLayout_4")
+ self.horizontalLayout_4.setContentsMargins(0, 0, 0, 0)
+ self.addSaxon = QPushButton(self.frame_4)
+ self.addSaxon.setObjectName(u"addSaxon")
+ self.addSaxon.setIcon(icon)
+
+ self.horizontalLayout_4.addWidget(self.addSaxon)
+
+ self.removeSaxon = QPushButton(self.frame_4)
+ self.removeSaxon.setObjectName(u"removeSaxon")
+ self.removeSaxon.setEnabled(False)
+ self.removeSaxon.setIcon(icon1)
+
+ self.horizontalLayout_4.addWidget(self.removeSaxon)
+
+
+ self.verticalLayout_4.addWidget(self.frame_4)
+
+ self.tabSettings.addTab(self.tabSaxon, "")
+ self.tabApacheFop = QWidget()
+ self.tabApacheFop.setObjectName(u"tabApacheFop")
+ self.verticalLayout_3 = QVBoxLayout(self.tabApacheFop)
+ self.verticalLayout_3.setObjectName(u"verticalLayout_3")
+ self.tableApacheFops = QTableWidget(self.tabApacheFop)
+ if (self.tableApacheFops.columnCount() < 3):
+ self.tableApacheFops.setColumnCount(3)
+ self.tableApacheFops.setObjectName(u"tableApacheFops")
+ self.tableApacheFops.setColumnCount(3)
+
+ self.verticalLayout_3.addWidget(self.tableApacheFops)
+
+ self.frame = QFrame(self.tabApacheFop)
+ self.frame.setObjectName(u"frame")
+ sizePolicy.setHeightForWidth(self.frame.sizePolicy().hasHeightForWidth())
+ self.frame.setSizePolicy(sizePolicy)
+ self.frame.setFrameShape(QFrame.Shape.NoFrame)
+ self.frame.setFrameShadow(QFrame.Shadow.Raised)
+ self.horizontalLayout = QHBoxLayout(self.frame)
+ self.horizontalLayout.setObjectName(u"horizontalLayout")
+ self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
+ self.addApacheFop = QPushButton(self.frame)
+ self.addApacheFop.setObjectName(u"addApacheFop")
+ self.addApacheFop.setIcon(icon)
+
+ self.horizontalLayout.addWidget(self.addApacheFop)
+
+ self.removeApacheFop = QPushButton(self.frame)
+ self.removeApacheFop.setObjectName(u"removeApacheFop")
+ self.removeApacheFop.setEnabled(False)
+ self.removeApacheFop.setIcon(icon1)
+
+ self.horizontalLayout.addWidget(self.removeApacheFop)
+
+
+ self.verticalLayout_3.addWidget(self.frame)
+
+ self.tabSettings.addTab(self.tabApacheFop, "")
+ self.tabDiffPdf = QWidget()
+ self.tabDiffPdf.setObjectName(u"tabDiffPdf")
+ self.verticalLayout_6 = QVBoxLayout(self.tabDiffPdf)
+ self.verticalLayout_6.setObjectName(u"verticalLayout_6")
+ self.tableDiffPdfs = QTableWidget(self.tabDiffPdf)
+ if (self.tableDiffPdfs.columnCount() < 4):
+ self.tableDiffPdfs.setColumnCount(4)
+ self.tableDiffPdfs.setObjectName(u"tableDiffPdfs")
+ self.tableDiffPdfs.setColumnCount(4)
+
+ self.verticalLayout_6.addWidget(self.tableDiffPdfs)
+
+ self.frame_5 = QFrame(self.tabDiffPdf)
+ self.frame_5.setObjectName(u"frame_5")
+ sizePolicy.setHeightForWidth(self.frame_5.sizePolicy().hasHeightForWidth())
+ self.frame_5.setSizePolicy(sizePolicy)
+ self.frame_5.setFrameShape(QFrame.Shape.NoFrame)
+ self.frame_5.setFrameShadow(QFrame.Shadow.Raised)
+ self.horizontalLayout_5 = QHBoxLayout(self.frame_5)
+ self.horizontalLayout_5.setObjectName(u"horizontalLayout_5")
+ self.horizontalLayout_5.setContentsMargins(0, 0, 0, 0)
+ self.addDiffPdf = QPushButton(self.frame_5)
+ self.addDiffPdf.setObjectName(u"addDiffPdf")
+ self.addDiffPdf.setIcon(icon)
+
+ self.horizontalLayout_5.addWidget(self.addDiffPdf)
+
+ self.removeDiffPdf = QPushButton(self.frame_5)
+ self.removeDiffPdf.setObjectName(u"removeDiffPdf")
+ self.removeDiffPdf.setEnabled(False)
+ self.removeDiffPdf.setIcon(icon1)
+
+ self.horizontalLayout_5.addWidget(self.removeDiffPdf)
+
+
+ self.verticalLayout_6.addWidget(self.frame_5)
+
+ self.tabSettings.addTab(self.tabDiffPdf, "")
+ self.tabPostgreSql = QWidget()
+ self.tabPostgreSql.setObjectName(u"tabPostgreSql")
+ self.verticalLayout_8 = QVBoxLayout(self.tabPostgreSql)
+ self.verticalLayout_8.setObjectName(u"verticalLayout_8")
+ self.tablePostgreSqlDbs = QTableWidget(self.tabPostgreSql)
+ if (self.tablePostgreSqlDbs.columnCount() < 5):
+ self.tablePostgreSqlDbs.setColumnCount(5)
+ self.tablePostgreSqlDbs.setObjectName(u"tablePostgreSqlDbs")
+ self.tablePostgreSqlDbs.setColumnCount(5)
+
+ self.verticalLayout_8.addWidget(self.tablePostgreSqlDbs)
+
+ self.frame_7 = QFrame(self.tabPostgreSql)
+ self.frame_7.setObjectName(u"frame_7")
+ sizePolicy.setHeightForWidth(self.frame_7.sizePolicy().hasHeightForWidth())
+ self.frame_7.setSizePolicy(sizePolicy)
+ self.frame_7.setFrameShape(QFrame.Shape.NoFrame)
+ self.frame_7.setFrameShadow(QFrame.Shadow.Raised)
+ self.horizontalLayout_7 = QHBoxLayout(self.frame_7)
+ self.horizontalLayout_7.setObjectName(u"horizontalLayout_7")
+ self.horizontalLayout_7.setContentsMargins(0, 0, 0, 0)
+ self.addPostgreSql = QPushButton(self.frame_7)
+ self.addPostgreSql.setObjectName(u"addPostgreSql")
+ self.addPostgreSql.setIcon(icon)
+
+ self.horizontalLayout_7.addWidget(self.addPostgreSql)
+
+ self.removePostgreSql = QPushButton(self.frame_7)
+ self.removePostgreSql.setObjectName(u"removePostgreSql")
+ self.removePostgreSql.setEnabled(False)
+ self.removePostgreSql.setIcon(icon1)
+
+ self.horizontalLayout_7.addWidget(self.removePostgreSql)
+
+
+ self.verticalLayout_8.addWidget(self.frame_7)
+
+ self.tabSettings.addTab(self.tabPostgreSql, "")
+ self.tabPdfProject = QWidget()
+ self.tabPdfProject.setObjectName(u"tabPdfProject")
+ self.verticalLayout_7 = QVBoxLayout(self.tabPdfProject)
+ self.verticalLayout_7.setObjectName(u"verticalLayout_7")
+ self.tablePdfProjects = QTableWidget(self.tabPdfProject)
+ if (self.tablePdfProjects.columnCount() < 7):
+ self.tablePdfProjects.setColumnCount(7)
+ self.tablePdfProjects.setObjectName(u"tablePdfProjects")
+ self.tablePdfProjects.setColumnCount(7)
+
+ self.verticalLayout_7.addWidget(self.tablePdfProjects)
+
+ self.frame_6 = QFrame(self.tabPdfProject)
+ self.frame_6.setObjectName(u"frame_6")
+ sizePolicy.setHeightForWidth(self.frame_6.sizePolicy().hasHeightForWidth())
+ self.frame_6.setSizePolicy(sizePolicy)
+ self.frame_6.setFrameShape(QFrame.Shape.NoFrame)
+ self.frame_6.setFrameShadow(QFrame.Shadow.Raised)
+ self.horizontalLayout_6 = QHBoxLayout(self.frame_6)
+ self.horizontalLayout_6.setObjectName(u"horizontalLayout_6")
+ self.horizontalLayout_6.setContentsMargins(0, 0, 0, 0)
+ self.addProject = QPushButton(self.frame_6)
+ self.addProject.setObjectName(u"addProject")
+ self.addProject.setIcon(icon)
+
+ self.horizontalLayout_6.addWidget(self.addProject)
+
+ self.removeProject = QPushButton(self.frame_6)
+ self.removeProject.setObjectName(u"removeProject")
+ self.removeProject.setEnabled(False)
+ self.removeProject.setIcon(icon1)
+
+ self.horizontalLayout_6.addWidget(self.removeProject)
+
+
+ self.verticalLayout_7.addWidget(self.frame_6)
+
+ self.tabSettings.addTab(self.tabPdfProject, "")
+ self.tabPerformance = QWidget()
+ self.tabPerformance.setObjectName(u"tabPerformance")
+ self.verticalLayout_9 = QVBoxLayout(self.tabPerformance)
+ self.verticalLayout_9.setObjectName(u"verticalLayout_9")
+ self.groupBoxWorker = QGroupBox(self.tabPerformance)
+ self.groupBoxWorker.setObjectName(u"groupBoxWorker")
+ self.verticalLayout_10 = QVBoxLayout(self.groupBoxWorker)
+ self.verticalLayout_10.setObjectName(u"verticalLayout_10")
+ self.labelWorkerCount = QLabel(self.groupBoxWorker)
+ self.labelWorkerCount.setObjectName(u"labelWorkerCount")
+
+ self.verticalLayout_10.addWidget(self.labelWorkerCount)
+
+ self.spinBoxWorkerCount = QSpinBox(self.groupBoxWorker)
+ self.spinBoxWorkerCount.setObjectName(u"spinBoxWorkerCount")
+ self.spinBoxWorkerCount.setMinimum(1)
+ self.spinBoxWorkerCount.setMaximum(32)
+ self.spinBoxWorkerCount.setValue(8)
+
+ self.verticalLayout_10.addWidget(self.spinBoxWorkerCount)
+
+
+ self.verticalLayout_9.addWidget(self.groupBoxWorker)
+
+ self.groupBoxSaxonPool = QGroupBox(self.tabPerformance)
+ self.groupBoxSaxonPool.setObjectName(u"groupBoxSaxonPool")
+ self.verticalLayout_11 = QVBoxLayout(self.groupBoxSaxonPool)
+ self.verticalLayout_11.setObjectName(u"verticalLayout_11")
+ self.checkBoxUseSaxonPool = QCheckBox(self.groupBoxSaxonPool)
+ self.checkBoxUseSaxonPool.setObjectName(u"checkBoxUseSaxonPool")
+
+ self.verticalLayout_11.addWidget(self.checkBoxUseSaxonPool)
+
+ self.labelSaxonPoolInfo = QLabel(self.groupBoxSaxonPool)
+ self.labelSaxonPoolInfo.setObjectName(u"labelSaxonPoolInfo")
+ self.labelSaxonPoolInfo.setWordWrap(True)
+
+ self.verticalLayout_11.addWidget(self.labelSaxonPoolInfo)
+
+
+ self.verticalLayout_9.addWidget(self.groupBoxSaxonPool)
+
+ self.groupBoxFopPool = QGroupBox(self.tabPerformance)
+ self.groupBoxFopPool.setObjectName(u"groupBoxFopPool")
+ self.verticalLayout_12 = QVBoxLayout(self.groupBoxFopPool)
+ self.verticalLayout_12.setObjectName(u"verticalLayout_12")
+ self.checkBoxUseFopPool = QCheckBox(self.groupBoxFopPool)
+ self.checkBoxUseFopPool.setObjectName(u"checkBoxUseFopPool")
+
+ self.verticalLayout_12.addWidget(self.checkBoxUseFopPool)
+
+ self.labelFopPoolInfo = QLabel(self.groupBoxFopPool)
+ self.labelFopPoolInfo.setObjectName(u"labelFopPoolInfo")
+ self.labelFopPoolInfo.setWordWrap(True)
+
+ self.verticalLayout_12.addWidget(self.labelFopPoolInfo)
+
+
+ self.verticalLayout_9.addWidget(self.groupBoxFopPool)
+
+ self.label = QLabel(self.tabPerformance)
+ self.label.setObjectName(u"label")
+ self.label.setMouseTracking(True)
+ self.label.setAlignment(Qt.AlignmentFlag.AlignCenter)
+ self.label.setWordWrap(True)
+
+ self.verticalLayout_9.addWidget(self.label)
+
+ self.verticalSpacerPerformance = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding)
+
+ self.verticalLayout_9.addItem(self.verticalSpacerPerformance)
+
+ self.tabSettings.addTab(self.tabPerformance, "")
+
+ self.verticalLayout.addWidget(self.tabSettings)
+
+ self.buttonBox = QDialogButtonBox(Dialog)
+ self.buttonBox.setObjectName(u"buttonBox")
+ self.buttonBox.setOrientation(Qt.Orientation.Horizontal)
+ self.buttonBox.setStandardButtons(QDialogButtonBox.StandardButton.Cancel|QDialogButtonBox.StandardButton.Ok)
+ self.buttonBox.setCenterButtons(True)
+
+ self.verticalLayout.addWidget(self.buttonBox)
+
+
+ self.retranslateUi(Dialog)
+ self.buttonBox.accepted.connect(Dialog.accept)
+ self.buttonBox.rejected.connect(Dialog.reject)
+
+ self.tabSettings.setCurrentIndex(0)
+
+
+ QMetaObject.connectSlotsByName(Dialog)
+ # setupUi
+
+ def retranslateUi(self, Dialog):
+ Dialog.setWindowTitle(QCoreApplication.translate("Dialog", u"Programm Einstellungen", None))
+ self.addXsl.setText(QCoreApplication.translate("Dialog", u"Hinzuf\u00fcgen", None))
+ self.removeXsl.setText(QCoreApplication.translate("Dialog", u"Entfernen", None))
+ self.tabSettings.setTabText(self.tabSettings.indexOf(self.tabXsls), QCoreApplication.translate("Dialog", u"XSL-Ordner", None))
+ self.addJavaVm.setText(QCoreApplication.translate("Dialog", u"Hinzuf\u00fcgen", None))
+ self.removeJavaVm.setText(QCoreApplication.translate("Dialog", u"Entfernen", None))
+ self.tabSettings.setTabText(self.tabSettings.indexOf(self.tabJavaVm), QCoreApplication.translate("Dialog", u"Java VM", None))
+ self.addSaxon.setText(QCoreApplication.translate("Dialog", u"Hinzuf\u00fcgen", None))
+ self.removeSaxon.setText(QCoreApplication.translate("Dialog", u"Entfernen", None))
+ self.tabSettings.setTabText(self.tabSettings.indexOf(self.tabSaxon), QCoreApplication.translate("Dialog", u"Saxon", None))
+ self.addApacheFop.setText(QCoreApplication.translate("Dialog", u"Hinzuf\u00fcgen", None))
+ self.removeApacheFop.setText(QCoreApplication.translate("Dialog", u"Entfernen", None))
+ self.tabSettings.setTabText(self.tabSettings.indexOf(self.tabApacheFop), QCoreApplication.translate("Dialog", u"Apache FOP", None))
+ self.addDiffPdf.setText(QCoreApplication.translate("Dialog", u"Hinzuf\u00fcgen", None))
+ self.removeDiffPdf.setText(QCoreApplication.translate("Dialog", u"Entfernen", None))
+ self.tabSettings.setTabText(self.tabSettings.indexOf(self.tabDiffPdf), QCoreApplication.translate("Dialog", u"Diff-PDF", None))
+ self.addPostgreSql.setText(QCoreApplication.translate("Dialog", u"Hinzuf\u00fcgen", None))
+ self.removePostgreSql.setText(QCoreApplication.translate("Dialog", u"Entfernen", None))
+ self.tabSettings.setTabText(self.tabSettings.indexOf(self.tabPostgreSql), QCoreApplication.translate("Dialog", u"PostgreSQL", None))
+ self.addProject.setText(QCoreApplication.translate("Dialog", u"Hinzuf\u00fcgen", None))
+ self.removeProject.setText(QCoreApplication.translate("Dialog", u"Entfernen", None))
+ self.tabSettings.setTabText(self.tabSettings.indexOf(self.tabPdfProject), QCoreApplication.translate("Dialog", u"PDF-Projekte", None))
+ self.groupBoxWorker.setTitle(QCoreApplication.translate("Dialog", u"ThreadPoolExecutor Einstellungen", None))
+ self.labelWorkerCount.setText(QCoreApplication.translate("Dialog", u"Anzahl paralleler Worker f\u00fcr Transformationen:", None))
+#if QT_CONFIG(tooltip)
+ self.spinBoxWorkerCount.setToolTip(QCoreApplication.translate("Dialog", u"Anzahl der parallelen Worker-Threads f\u00fcr Transformationen (Standard: 8)", None))
+#endif // QT_CONFIG(tooltip)
+ self.groupBoxSaxonPool.setTitle(QCoreApplication.translate("Dialog", u"SaxonWorkerPool Einstellungen", None))
+#if QT_CONFIG(tooltip)
+ self.checkBoxUseSaxonPool.setToolTip(QCoreApplication.translate("Dialog", u"Aktiviert persistente JVM-Prozesse f\u00fcr Saxon-Transformationen.\n"
+"Vorteile: Bis zu 10x schneller durch Eliminierung von JVM-Startup-Overhead\n"
+"Nachteile: Ben\u00f6tigt JDK (javac) - funktioniert nicht mit JRE allein\n"
+"\n"
+"Deaktivieren Sie diese Option, wenn:\n"
+"\u2022 Sie nur ein JRE (keine JDK) installiert haben\n"
+"\u2022 Sie Probleme mit dem Worker-Pool haben\n"
+"\u2022 Sie die Funktion testen m\u00f6chten", None))
+#endif // QT_CONFIG(tooltip)
+ self.checkBoxUseSaxonPool.setText(QCoreApplication.translate("Dialog", u"SaxonWorkerPool verwenden (empfohlen)", None))
+ self.labelSaxonPoolInfo.setText(QCoreApplication.translate("Dialog", u"Hinweis: SaxonWorkerPool ben\u00f6tigt ein JDK (Java Development Kit).
Mit JRE allein werden Transformationen im Fallback-Modus ausgef\u00fchrt.", None))
+ self.groupBoxFopPool.setTitle(QCoreApplication.translate("Dialog", u"FopWorkerPool Einstellungen", None))
+#if QT_CONFIG(tooltip)
+ self.checkBoxUseFopPool.setToolTip(QCoreApplication.translate("Dialog", u"Aktiviert persistente JVM-Prozesse f\u00fcr Apache FOP PDF-Generierung.\n"
+"Vorteile: Bis zu 10x schneller durch Eliminierung von JVM-Startup-Overhead\n"
+"Nachteile: Ben\u00f6tigt JDK (javac) - funktioniert nicht mit JRE allein\n"
+"\n"
+"Deaktivieren Sie diese Option, wenn:\n"
+"\u2022 Sie nur ein JRE (keine JDK) installiert haben\n"
+"\u2022 Sie Probleme mit dem Worker-Pool haben\n"
+"\u2022 Sie die Funktion testen m\u00f6chten", None))
+#endif // QT_CONFIG(tooltip)
+ self.checkBoxUseFopPool.setText(QCoreApplication.translate("Dialog", u"FopWorkerPool verwenden (empfohlen)", None))
+ self.labelFopPoolInfo.setText(QCoreApplication.translate("Dialog", u"Hinweis: FopWorkerPool ben\u00f6tigt ein JDK (Java Development Kit).
Mit JRE allein werden PDFs im Fallback-Modus generiert.", None))
+ self.label.setText(QCoreApplication.translate("Dialog", u" Hinweis: \u00c4nderungen in diesem Dialog sind unter Umst\u00e4nden erst nach neu start der Anwendung wirksam.
", None))
+ self.tabSettings.setTabText(self.tabSettings.indexOf(self.tabPerformance), QCoreApplication.translate("Dialog", u"Performance", None))
+ # retranslateUi
+
diff --git a/src/ui/MainWindow.py b/src/ui/MainWindow.py
index 2bdb43c..b0cf1c1 100644
--- a/src/ui/MainWindow.py
+++ b/src/ui/MainWindow.py
@@ -554,9 +554,6 @@ class MainWindow(QMainWindow):
# Vorhandene Projekte-Menü initialisieren
self._setup_projects_menu()
- # Performance-Einstellungen-Menü initialisieren
- self._setup_performance_menu()
-
#
if theme := app_settings.theme:
self.change_theme(theme)
@@ -655,201 +652,6 @@ class MainWindow(QMainWindow):
logger.info(f"Projekte-Menü initialisiert mit {len(app_settings.pdf_projects)} Projekten")
- def _setup_performance_menu(self):
- """Fügt ein Menü-Item für Performance-Einstellungen hinzu."""
- # Füge Separator vor der Performance-Einstellung hinzu
- self.ui.menuProjekt.addSeparator()
-
- # Erstelle Aktion für Performance-Einstellungen
- performance_action = QAction("Performance-Einstellungen...", self)
- saxon_pool_status = "aktiviert" if app_settings.use_saxon_worker_pool else "deaktiviert"
- fop_pool_status = "aktiviert" if app_settings.use_fop_worker_pool else "deaktiviert"
- performance_action.setToolTip(
- f"Worker: {app_settings.max_workers} | SaxonWorkerPool: {saxon_pool_status} | FopWorkerPool: {fop_pool_status}"
- )
- performance_action.triggered.connect(self._open_performance_settings)
-
- # Füge die Aktion zum Projekt-Menü hinzu
- self.ui.menuProjekt.addAction(performance_action)
-
- logger.debug(f"Performance-Menü initialisiert (max_workers={app_settings.max_workers})")
-
- def _open_performance_settings(self):
- """Öffnet einen Dialog für Performance-Einstellungen."""
- from PySide6.QtWidgets import (
- QDialog,
- QVBoxLayout,
- QHBoxLayout,
- QLabel,
- QSpinBox,
- QCheckBox,
- QPushButton,
- QGroupBox,
- )
-
- # Erstelle benutzerdefinierten Dialog
- dialog = QDialog(self)
- dialog.setWindowTitle("Performance-Einstellungen")
- dialog.setMinimumWidth(450)
-
- layout = QVBoxLayout()
-
- # Worker-Anzahl Einstellung
- worker_group = QGroupBox("ThreadPoolExecutor Einstellungen")
- worker_layout = QVBoxLayout()
-
- worker_label = QLabel("Anzahl paralleler Worker für Transformationen:")
- worker_spinbox = QSpinBox()
- worker_spinbox.setMinimum(1)
- worker_spinbox.setMaximum(32)
- worker_spinbox.setValue(app_settings.max_workers)
- worker_spinbox.setToolTip("Anzahl der parallelen Worker-Threads für Transformationen (Standard: 8)")
-
- worker_layout.addWidget(worker_label)
- worker_layout.addWidget(worker_spinbox)
- worker_group.setLayout(worker_layout)
- layout.addWidget(worker_group)
-
- # SaxonWorkerPool Einstellung
- pool_group = QGroupBox("SaxonWorkerPool Einstellungen")
- pool_layout = QVBoxLayout()
-
- pool_checkbox = QCheckBox("SaxonWorkerPool verwenden (empfohlen)")
- pool_checkbox.setChecked(app_settings.use_saxon_worker_pool)
- pool_checkbox.setToolTip(
- "Aktiviert persistente JVM-Prozesse für Saxon-Transformationen.\n"
- "Vorteile: Bis zu 10x schneller durch Eliminierung von JVM-Startup-Overhead\n"
- "Nachteile: Benötigt JDK (javac) - funktioniert nicht mit JRE allein\n\n"
- "Deaktivieren Sie diese Option, wenn:\n"
- "• Sie nur ein JRE (keine JDK) installiert haben\n"
- "• Sie Probleme mit dem Worker-Pool haben\n"
- "• Sie die Funktion testen möchten"
- )
-
- pool_info = QLabel(
- "Hinweis: SaxonWorkerPool benötigt ein JDK (Java Development Kit).
"
- "Mit JRE allein werden Transformationen im Fallback-Modus ausgeführt."
- )
- pool_info.setWordWrap(True)
-
- pool_layout.addWidget(pool_checkbox)
- pool_layout.addWidget(pool_info)
- pool_group.setLayout(pool_layout)
- layout.addWidget(pool_group)
-
- # FopWorkerPool Einstellung
- fop_pool_group = QGroupBox("FopWorkerPool Einstellungen")
- fop_pool_layout = QVBoxLayout()
-
- fop_pool_checkbox = QCheckBox("FopWorkerPool verwenden (empfohlen)")
- fop_pool_checkbox.setChecked(app_settings.use_fop_worker_pool)
- fop_pool_checkbox.setToolTip(
- "Aktiviert persistente JVM-Prozesse für Apache FOP PDF-Generierung.\n"
- "Vorteile: Bis zu 10x schneller durch Eliminierung von JVM-Startup-Overhead\n"
- "Nachteile: Benötigt JDK (javac) - funktioniert nicht mit JRE allein\n\n"
- "Deaktivieren Sie diese Option, wenn:\n"
- "• Sie nur ein JRE (keine JDK) installiert haben\n"
- "• Sie Probleme mit dem Worker-Pool haben\n"
- "• Sie die Funktion testen möchten"
- )
-
- fop_pool_info = QLabel(
- "Hinweis: FopWorkerPool benötigt ein JDK (Java Development Kit).
"
- "Mit JRE allein werden PDFs im Fallback-Modus generiert."
- )
- fop_pool_info.setWordWrap(True)
-
- fop_pool_layout.addWidget(fop_pool_checkbox)
- fop_pool_layout.addWidget(fop_pool_info)
- fop_pool_group.setLayout(fop_pool_layout)
- layout.addWidget(fop_pool_group)
-
- # OK/Abbrechen Buttons
- button_layout = QHBoxLayout()
- ok_button = QPushButton("OK")
- cancel_button = QPushButton("Abbrechen")
-
- ok_button.clicked.connect(dialog.accept)
- cancel_button.clicked.connect(dialog.reject)
-
- button_layout.addStretch()
- button_layout.addWidget(ok_button)
- button_layout.addWidget(cancel_button)
- layout.addLayout(button_layout)
-
- dialog.setLayout(layout)
-
- # Dialog anzeigen
- if dialog.exec() == QDialog.DialogCode.Accepted:
- # Speichere Änderungen
- current_workers = app_settings.max_workers
- current_use_pool = app_settings.use_saxon_worker_pool
- current_use_fop_pool = app_settings.use_fop_worker_pool
-
- new_workers = worker_spinbox.value()
- new_use_pool = pool_checkbox.isChecked()
- new_use_fop_pool = fop_pool_checkbox.isChecked()
-
- changes = []
-
- if new_workers != current_workers:
- app_settings.max_workers = new_workers
- changes.append(f"Worker-Anzahl: {current_workers} → {new_workers}")
- logger.info(f"max_workers geändert: {current_workers} → {new_workers}")
-
- if new_use_pool != current_use_pool:
- app_settings.use_saxon_worker_pool = new_use_pool
- status = "aktiviert" if new_use_pool else "deaktiviert"
- changes.append(f"SaxonWorkerPool: {status}")
- logger.info(f"use_saxon_worker_pool geändert: {current_use_pool} → {new_use_pool}")
-
- if new_use_fop_pool != current_use_fop_pool:
- app_settings.use_fop_worker_pool = new_use_fop_pool
- status = "aktiviert" if new_use_fop_pool else "deaktiviert"
- changes.append(f"FopWorkerPool: {status}")
- logger.info(f"use_fop_worker_pool geändert: {current_use_fop_pool} → {new_use_fop_pool}")
-
- if changes:
- # WICHTIG: Speichere Settings BEVOR wir Pools neu initialisieren
- app_settings.save()
- logger.info(f"Performance-Einstellungen gespeichert: {changes}")
-
- # Initialisiere Worker Pools neu falls sich relevante Einstellungen geändert haben
- pools_reinitialized = False
- if self.project:
- # Saxon Worker Pool neu initialisieren?
- if new_use_pool != current_use_pool or new_workers != current_workers:
- logger.info(
- f"Saxon Worker Pool wird neu initialisiert "
- f"(use_pool: {current_use_pool}→{new_use_pool}, workers: {current_workers}→{new_workers})"
- )
- self._initialize_saxon_worker_pool()
- pools_reinitialized = True
-
- # FOP Worker Pool neu initialisieren?
- if new_use_fop_pool != current_use_fop_pool or new_workers != current_workers:
- logger.info(
- f"FOP Worker Pool wird neu initialisiert "
- f"(use_pool: {current_use_fop_pool}→{new_use_fop_pool}, workers: {current_workers}→{new_workers})"
- )
- self._initialize_fop_worker_pool()
- pools_reinitialized = True
- else:
- logger.warning("Kein Projekt geladen - Worker Pools werden nicht neu initialisiert")
-
- # Informiere Benutzer über Änderungen
- changes_text = "\n".join(f"• {change}" for change in changes)
- status_hint = ""
-
- if pools_reinitialized:
- status_hint = "\n\nDie Worker Pools wurden automatisch mit den neuen Einstellungen neu gestartet."
-
- QMessageBox.information(
- self,
- "Einstellungen gespeichert",
- f"Folgende Einstellungen wurden geändert:\n\n{changes_text}{status_hint}",
- )
-
def open_existing_project(self, project: Project):
"""
Öffnet ein vorhandenes Projekt.