Files
xsl-validator/src/ui/AppSettings_ui.py
T
info f59e51c081 Performance: Lazy Worker-Pool Init + XSL-Stylesheet-Caching
RAM-Optimierung (Lazy Loading):
- Worker-Pools werden erst bei Transformation gestartet (nicht beim Projekt-Öffnen)
- Worker-Pools werden nach Transformation automatisch beendet
- RAM im Ruhezustand: 0 MB (vorher: ~1.2 GB)
- Temporäre Verzeichnisse werden sauber aufgeräumt

XSL-Stylesheet-Caching (Massive Performance-Steigerung):
- Saxon s9api: HashMap<String, XsltExecutable> Cache
- Saxon JAXP: HashMap<String, Templates> Cache
- Kompilierte Stylesheets werden pro Worker wiederverwendet
- Bei 82 Transformationen mit 8 XSL-Dateien:
  * 1. Durchlauf: 8× Kompilierung
  * Weitere 74×: Cache-Treffer (sehr schnell!)

Technische Details:
- Worker-Pool-Init verschoben von _on_project_opened zu _start_transformation
- Worker-Pool-Shutdown in _on_all_transformations_finished
- Java-seitiger HashMap-Cache für beide Saxon-Varianten
- Cache-Logging für Debugging

Perfekt für Dauerbetrieb im Hintergrund!

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-07 18:44:32 +01:00

499 lines
24 KiB
Python

# -*- 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, QComboBox,
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, 526)
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.horizontalLayoutXsltVersion = QHBoxLayout()
self.horizontalLayoutXsltVersion.setObjectName(u"horizontalLayoutXsltVersion")
self.labelXsltVersion = QLabel(self.groupBoxSaxonPool)
self.labelXsltVersion.setObjectName(u"labelXsltVersion")
self.horizontalLayoutXsltVersion.addWidget(self.labelXsltVersion)
self.comboBoxXsltVersion = QComboBox(self.groupBoxSaxonPool)
self.comboBoxXsltVersion.addItem("")
self.comboBoxXsltVersion.addItem("")
self.comboBoxXsltVersion.setObjectName(u"comboBoxXsltVersion")
self.horizontalLayoutXsltVersion.addWidget(self.comboBoxXsltVersion)
self.horizontalSpacerXsltVersion = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
self.horizontalLayoutXsltVersion.addItem(self.horizontalSpacerXsltVersion)
self.verticalLayout_11.addLayout(self.horizontalLayoutXsltVersion)
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.verticalSpacer = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding)
self.verticalLayout_9.addItem(self.verticalSpacer)
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.labelXsltVersion.setText(QCoreApplication.translate("Dialog", u"XSLT-Version:", None))
self.comboBoxXsltVersion.setItemText(0, QCoreApplication.translate("Dialog", u"XSLT 1.0 (JAXP)", None))
self.comboBoxXsltVersion.setItemText(1, QCoreApplication.translate("Dialog", u"XSLT 2.0/3.0 (s9api) - Empfohlen", None))
#if QT_CONFIG(tooltip)
self.comboBoxXsltVersion.setToolTip(QCoreApplication.translate("Dialog", u"W\u00e4hlen Sie die XSLT-Version f\u00fcr Saxon-Transformationen:\n"
"\n"
"XSLT 1.0 (JAXP): Verwendet die JAXP Transformer API\n"
"\u2022 Nur f\u00fcr XSLT 1.0 vollst\u00e4ndig spezifiziert\n"
"\u2022 Kann bei XSLT 2.0/3.0 zu fehlerhaften Ausgaben f\u00fchren\n"
"\n"
"XSLT 2.0/3.0 (s9api): Verwendet die Saxon s9api\n"
"\u2022 Vollst\u00e4ndige Unterst\u00fctzung f\u00fcr XSLT 2.0 und 3.0\n"
"\u2022 Empfohlen f\u00fcr moderne XSLT-Stylesheets", None))
#endif // QT_CONFIG(tooltip)
self.labelSaxonPoolInfo.setText(QCoreApplication.translate("Dialog", u"<i>Hinweis: SaxonWorkerPool ben\u00f6tigt ein JDK (Java Development Kit).<br>Mit JRE allein werden Transformationen im Fallback-Modus ausgef\u00fchrt.</i>", 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"<i>Hinweis: FopWorkerPool ben\u00f6tigt ein JDK (Java Development Kit).<br>Mit JRE allein werden PDFs im Fallback-Modus generiert.</i>", None))
self.label.setText(QCoreApplication.translate("Dialog", u"<html><head/><body><p><span style=\" font-weight:700; font-style:italic;\">Hinweis: \u00c4nderungen in diesem Dialog sind unter Umst\u00e4nden erst nach neu start der Anwendung wirksam.</span></p></body></html>", None))
self.tabSettings.setTabText(self.tabSettings.indexOf(self.tabPerformance), QCoreApplication.translate("Dialog", u"Performance", None))
# retranslateUi