diff --git a/DocuMentor.wxs b/DocuMentor.wxs index f98cf1c..b41347f 100644 --- a/DocuMentor.wxs +++ b/DocuMentor.wxs @@ -4,7 +4,7 @@ 0 0 1263 - 774 + 779 @@ -100,7 +100,7 @@ QTreeWidget::item:selected { } - 3 + 2 true @@ -118,11 +118,6 @@ QTreeWidget::item:selected { 2 - - - 3 - - @@ -149,7 +144,7 @@ QTreeWidget::item:selected { 0 0 68 - 728 + 733 @@ -385,8 +380,8 @@ QTreeWidget::item:selected { 0 0 - 880 - 697 + 892 + 702 diff --git a/src/ui/MainWinddow_ui.py b/src/ui/MainWinddow_ui.py index c07df68..226a58a 100644 --- a/src/ui/MainWinddow_ui.py +++ b/src/ui/MainWinddow_ui.py @@ -91,7 +91,6 @@ class Ui_MainWindow(object): self.treeWidget = QTreeWidget(self.frame) __qtreewidgetitem = QTreeWidgetItem() - __qtreewidgetitem.setText(2, u"3"); __qtreewidgetitem.setText(1, u"2"); __qtreewidgetitem.setText(0, u"1"); self.treeWidget.setHeaderItem(__qtreewidgetitem) @@ -109,7 +108,7 @@ class Ui_MainWindow(object): " background-color: palette(highlight);\n" " color: palette(highlighted-text);\n" "}") - self.treeWidget.setColumnCount(3) + self.treeWidget.setColumnCount(2) self.treeWidget.header().setHighlightSections(True) self.treeWidget.header().setStretchLastSection(True) diff --git a/src/ui/MainWindow.py b/src/ui/MainWindow.py index b165470..ef693bb 100644 --- a/src/ui/MainWindow.py +++ b/src/ui/MainWindow.py @@ -586,7 +586,7 @@ class MainWindow( if expected_pdf.exists(): # Icon setzen icon_widget = self._create_centered_diff_icon(xml_path, xsl_id_str) - self.ui.treeWidget.setItemWidget(tree_item, 2, icon_widget) + self.ui.treeWidget.setItemWidget(tree_item, 1, icon_widget) icon_count += 1 logger.debug(f"Diff-Icon für existierende PDF gesetzt: {map_key}") @@ -755,9 +755,9 @@ class MainWindow( map_key = f"{xml_relative_path}|{xsl_id_str}" if map_key in self.xml_item_map: tree_item = self.xml_item_map[map_key] - # Entferne Icon-Widget aus Spalte 2 - tree_item.setData(2, Qt.ItemDataRole.UserRole, None) - self.ui.treeWidget.setItemWidget(tree_item, 2, None) + # Entferne Icon-Widget aus Spalte 1 + tree_item.setData(1, Qt.ItemDataRole.UserRole, None) + self.ui.treeWidget.setItemWidget(tree_item, 1, None) logger.info(f"Änderungen akzeptiert für: {pdf_basename}") return True @@ -904,9 +904,9 @@ class MainWindow( map_key = f"{self.current_diff_xml_path}|{self.current_diff_xsl_id}" if map_key in self.xml_item_map: tree_item = self.xml_item_map[map_key] - # Entferne Icon-Widget aus Spalte 2 - tree_item.setData(2, Qt.ItemDataRole.UserRole, None) - self.ui.treeWidget.setItemWidget(tree_item, 2, None) + # Entferne Icon-Widget aus Spalte 1 + tree_item.setData(1, Qt.ItemDataRole.UserRole, None) + self.ui.treeWidget.setItemWidget(tree_item, 1, None) logger.info(f"Diff-Icon entfernt für: {map_key}") # Diff-PDF-Anzahl auf übergeordneten Ebenen aktualisieren diff --git a/src/ui/XslFileEditDialog.py b/src/ui/XslFileEditDialog.py index f0c4a42..685f094 100644 --- a/src/ui/XslFileEditDialog.py +++ b/src/ui/XslFileEditDialog.py @@ -7,3 +7,10 @@ class XslFileEditDialog(XsltParamsEditDialog): def _create_ui(self): return Ui_XslFileEditDialog() + + def _load_data(self): + """Lädt die Daten des XslFile-Knotens in den Dialog.""" + if not self.node: + return + self.ui.xslFileValueLabel.setText(str(self.node.xsl_file) if self.node.xsl_file else "") + super()._load_data() diff --git a/src/ui/XslFileEditDialog.ui b/src/ui/XslFileEditDialog.ui index c561cc4..4eb6d48 100644 --- a/src/ui/XslFileEditDialog.ui +++ b/src/ui/XslFileEditDialog.ui @@ -7,7 +7,7 @@ 0 0 865 - 400 + 403 @@ -23,13 +23,30 @@ QLayout::SizeConstraint::SetMaximumSize + + + XSL-Datei: + + + + + + + + + + Qt::TextInteractionFlag::TextSelectableByMouse + + + + Bezeichnung: - + diff --git a/src/ui/XslFileEditDialog_ui.py b/src/ui/XslFileEditDialog_ui.py index 3987e21..9d5e3b8 100644 --- a/src/ui/XslFileEditDialog_ui.py +++ b/src/ui/XslFileEditDialog_ui.py @@ -33,15 +33,26 @@ class Ui_XslFileEditDialog(object): self.formLayout = QFormLayout() self.formLayout.setObjectName(u"formLayout") self.formLayout.setSizeConstraint(QLayout.SizeConstraint.SetMaximumSize) + self.xslFileLabel = QLabel(XslFileEditDialog) + self.xslFileLabel.setObjectName(u"xslFileLabel") + + self.formLayout.setWidget(0, QFormLayout.ItemRole.LabelRole, self.xslFileLabel) + + self.xslFileValueLabel = QLabel(XslFileEditDialog) + self.xslFileValueLabel.setObjectName(u"xslFileValueLabel") + self.xslFileValueLabel.setTextInteractionFlags(Qt.TextInteractionFlag.TextSelectableByMouse) + + self.formLayout.setWidget(0, QFormLayout.ItemRole.FieldRole, self.xslFileValueLabel) + self.bezLabel = QLabel(XslFileEditDialog) self.bezLabel.setObjectName(u"bezLabel") - self.formLayout.setWidget(0, QFormLayout.ItemRole.LabelRole, self.bezLabel) + self.formLayout.setWidget(1, QFormLayout.ItemRole.LabelRole, self.bezLabel) self.bezEdit = QLineEdit(XslFileEditDialog) self.bezEdit.setObjectName(u"bezEdit") - self.formLayout.setWidget(0, QFormLayout.ItemRole.FieldRole, self.bezEdit) + self.formLayout.setWidget(1, QFormLayout.ItemRole.FieldRole, self.bezEdit) self.verticalLayout.addLayout(self.formLayout) @@ -151,6 +162,8 @@ class Ui_XslFileEditDialog(object): def retranslateUi(self, XslFileEditDialog): XslFileEditDialog.setWindowTitle(QCoreApplication.translate("XslFileEditDialog", u"XSL-Datei bearbeiten", None)) + self.xslFileLabel.setText(QCoreApplication.translate("XslFileEditDialog", u"XSL-Datei:", None)) + self.xslFileValueLabel.setText("") self.bezLabel.setText(QCoreApplication.translate("XslFileEditDialog", u"Bezeichnung:", None)) self.xsltParamsGroupBox.setTitle(QCoreApplication.translate("XslFileEditDialog", u"XSLT-Parameter", None)) ___qtablewidgetitem = self.xsltParamsTable.horizontalHeaderItem(0) diff --git a/src/ui/mixins/transformation.py b/src/ui/mixins/transformation.py index d954640..6f8fcba 100644 --- a/src/ui/mixins/transformation.py +++ b/src/ui/mixins/transformation.py @@ -227,7 +227,7 @@ class TransformationMixin: def _update_diff_pdf_counts_recursive(self, tree_item: QTreeWidgetItem): """ - Aktualisiert rekursiv die Diff-PDF-Anzahl in Spalte 2 für alle TreeNode und XslFile Items. + Aktualisiert rekursiv die Diff-PDF-Anzahl in Spalte 1 für alle TreeNode und XslFile Items. Args: tree_item: Das TreeWidgetItem (kann Root oder beliebiger Knoten sein) @@ -237,7 +237,7 @@ class TransformationMixin: # Aktualisiere nur für TreeNode und XslFile, nicht für XmlFile if isinstance(node, (TreeNode, XslFile)): count = self._count_diff_pdfs_under_node(node, tree_item) - tree_item.setText(2, str(count) if count > 0 else "") + tree_item.setText(1, str(count) if count > 0 else "") # Rekursiv für alle Kinder for i in range(tree_item.childCount()): @@ -614,11 +614,11 @@ class TransformationMixin: self.ui.treeWidget.scrollToItem(tree_item) # Entferne vorhandenes Widget (falls Icon vorhanden) - self.ui.treeWidget.removeItemWidget(tree_item, 2) + self.ui.treeWidget.removeItemWidget(tree_item, 1) # Erstelle und setze Progress Bar progress_widget, progress_bar = self._create_centered_progress_bar() - self.ui.treeWidget.setItemWidget(tree_item, 2, progress_widget) + self.ui.treeWidget.setItemWidget(tree_item, 1, progress_widget) logger.debug(f"Progress Bar für {xml_file_name} gesetzt und Eltern-Knoten geöffnet") else: @@ -659,7 +659,7 @@ class TransformationMixin: self, "Transformation fehlgeschlagen", f"XML-Datei: {xml_file}\n\nFehler:\n{error_text}" ) - # Update Widget in Spalte 2: Entferne Progress Bar, zeige Icon wenn Diff-PDF existiert + # Update Widget in Spalte 1: Entferne Progress Bar, zeige Icon wenn Diff-PDF existiert xml_file_str = result.get("xml_file", "") xsl_id = result.get("xsl_id", None) xsl_id_str = "_".join(str(x) for x in xsl_id) if xsl_id else "" @@ -669,13 +669,13 @@ class TransformationMixin: if tree_item: # Entferne Progress Bar - self.ui.treeWidget.removeItemWidget(tree_item, 2) + self.ui.treeWidget.removeItemWidget(tree_item, 1) # Wenn Diff-PDF existiert, zeige Icon if diff_pdf_str and Path(diff_pdf_str).exists(): xml_file_path = Path(xml_file_str) icon_widget = self._create_centered_diff_icon(xml_file_path, xsl_id_str) - self.ui.treeWidget.setItemWidget(tree_item, 2, icon_widget) + self.ui.treeWidget.setItemWidget(tree_item, 1, icon_widget) logger.debug(f"Diff-Icon für {xml_file_str} gesetzt") else: logger.debug(f"Keine Diff-PDF für {xml_file_str}, kein Icon gesetzt") @@ -699,7 +699,7 @@ class TransformationMixin: map_key = f"{xml_file_name}|{xsl_id_str}" tree_item = self.xml_item_map.get(map_key) if tree_item: - self.ui.treeWidget.removeItemWidget(tree_item, 2) + self.ui.treeWidget.removeItemWidget(tree_item, 1) logger.debug(f"Progress Bar für {map_key} entfernt (Fehler)") def _on_all_transformations_finished(self, successful_count: int, total_count: int, total_duration: float): diff --git a/src/ui/mixins/tree_manager.py b/src/ui/mixins/tree_manager.py index 33034b8..9be7261 100644 --- a/src/ui/mixins/tree_manager.py +++ b/src/ui/mixins/tree_manager.py @@ -120,7 +120,7 @@ class TreeManagerMixin: if node_type == ItemType.XML_FILE: # Hole XmlFile-Objekt und XSL-ID aus UserRole xml_file_obj = item.data(0, Qt.ItemDataRole.UserRole) - xsl_id_str = item.data(1, Qt.ItemDataRole.UserRole) + xsl_id_str = item.data(0, Qt.ItemDataRole.UserRole + 2) logger.debug(f"XML-File-Daten: xml_file_obj={xml_file_obj}, xsl_id_str={xsl_id_str}") @@ -630,12 +630,7 @@ class TreeManagerMixin: xsl_icon = QIcon.fromTheme("text-x-generic") item.setIcon(0, xsl_icon) - # Setze zusätzliche Informationen in Spalte 1 if isinstance(node, TreeNode): - # TreeNode: Zeige Anzahl der Knoten - child_count = len(node.children) if node.children else 0 - item.setText(1, f"{child_count} Knoten") - # Speichere zusätzlich die Node-ID in UserRole+1 für Kompatibilität item.setData(0, Qt.ItemDataRole.UserRole + 1, node.id) @@ -646,22 +641,19 @@ class TreeManagerMixin: child_item = self._create_tree_item_from_node(child) item.addChild(child_item) - # Setze Diff-PDF-Anzahl in Spalte 2 (wird später aktualisiert) + # Setze Diff-PDF-Anzahl in Spalte 1 diff_count = self._count_diff_pdfs_under_node(node, item) if diff_count > 0: - item.setText(2, str(diff_count)) + item.setText(1, str(diff_count)) elif isinstance(node, XslFile): - # XslFile: Zeige XSL-Datei-Pfad - item.setText(1, str(node.xsl_file)) - # Speichere zusätzlich die Node-ID in UserRole+1 für Kompatibilität item.setData(0, Qt.ItemDataRole.UserRole + 1, node.id) - # Setze Diff-PDF-Anzahl in Spalte 2 (wird später aktualisiert) + # Setze Diff-PDF-Anzahl in Spalte 1 diff_count = self._count_diff_pdfs_under_node(node, item) if diff_count > 0: - item.setText(2, str(diff_count)) + item.setText(1, str(diff_count)) # Prüfe ob XSL-Datei existiert xsl_file_missing = False @@ -689,15 +681,14 @@ class TreeManagerMixin: for xml in node.xmls: xml_item = QTreeWidgetItem() xml_item.setText(0, f"XML: {xml.xml.name}") - xml_item.setText(1, str(xml.xml)) # Speichere auch das XmlFile-Objekt für XML-Items xml_item.setData(0, Qt.ItemDataRole.UserRole, xml) xml_item.setData(0, Qt.ItemDataRole.UserRole + 1, f"xml_{xml.xml.name}") - # Speichere XSL-ID in Spalte 1, UserRole für einfachen Zugriff + # Speichere XSL-ID in Spalte 0, UserRole+2 für einfachen Zugriff xsl_id_str = "_".join(str(x) for x in node.id) - xml_item.setData(1, Qt.ItemDataRole.UserRole, xsl_id_str) + xml_item.setData(0, Qt.ItemDataRole.UserRole + 2, xsl_id_str) # Setze XML-Icon xml_icon = QIcon.fromTheme("text-xml") @@ -736,7 +727,7 @@ class TreeManagerMixin: # Fallback: Erstelle einfaches Item fallback_item = QTreeWidgetItem() fallback_item.setText(0, "Fehler beim Laden") - fallback_item.setText(1, str(e)) + fallback_item.setToolTip(0, str(e)) return fallback_item def _create_centered_progress_bar(self) -> tuple[QWidget, QProgressBar]: diff --git a/uv.lock b/uv.lock index b06a450..d245999 100644 --- a/uv.lock +++ b/uv.lock @@ -34,7 +34,7 @@ wheels = [ [[package]] name = "documentor" -version = "1.4.1" +version = "1.5.0" source = { virtual = "." } dependencies = [ { name = "connectorx" },