Source code for mafw.steering_gui.dialogs.validation_issues_dialog

#  Copyright 2026 European Union
#  Author: Bulgheroni Antonio (antonio.bulgheroni@ec.europa.eu)
#  SPDX-License-Identifier: EUPL-1.2
"""Dialog that lets the user review validation issues and optionally save anyway."""

from __future__ import annotations

from typing import Sequence

from PySide6.QtWidgets import (
    QAbstractItemView,
    QDialog,
    QDialogButtonBox,
    QHeaderView,
    QLabel,
    QTableWidget,
    QTableWidgetItem,
    QVBoxLayout,
    QWidget,
)

from mafw.mafw_errors import ValidationIssue


[docs] class ValidationIssuesDialog(QDialog): """Present every validation issue and allow the user to cancel or save anyway.""" def __init__(self, issues: Sequence[ValidationIssue], parent: QWidget | None = None) -> None: super().__init__(parent) self.setWindowTitle('Validation Issues') layout = QVBoxLayout(self) layout.addWidget(QLabel('The steering file has validation problems:')) self._table = QTableWidget(self) self._table.setColumnCount(2) self._table.setHorizontalHeaderLabels(['Issue', 'Details']) self._table.setRowCount(len(issues)) self._table.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers) self._table.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeMode.Interactive) for row, issue in enumerate(issues): self._table.setItem(row, 0, QTableWidgetItem(issue.__class__.__name__)) self._table.setItem(row, 1, QTableWidgetItem(str(issue))) layout.addWidget(self._table) self._adjust_column_widths() self._table.resizeColumnsToContents() buttons = QDialogButtonBox(QDialogButtonBox.StandardButton.Save | QDialogButtonBox.StandardButton.Cancel) save_button = buttons.button(QDialogButtonBox.StandardButton.Save) save_button.setText('Save Anyway') buttons.accepted.connect(self.accept) buttons.rejected.connect(self.reject) layout.addWidget(buttons)
[docs] def _adjust_column_widths(self) -> None: """Resize each column once so every issue text fits.""" header = self._table.horizontalHeader() for column in range(self._table.columnCount()): header.setSectionResizeMode(column, QHeaderView.ResizeMode.ResizeToContents) self._table.resizeColumnToContents(column) header.setStretchLastSection(True) total_width = sum(header.sectionSize(column) for column in range(self._table.columnCount())) scrollbar_width = self._table.verticalScrollBar().sizeHint().width() self._table.setMinimumWidth(total_width + scrollbar_width + self._table.verticalHeader().width())