Source code for mafw.steering_gui.views.meta_editor

#  Copyright 2026 European Union
#  Author: Bulgheroni Antonio (antonio.bulgheroni@ec.europa.eu)
#  SPDX-License-Identifier: EUPL-1.2
"""Editor showing metadata when the root node is selected.

:Author: Bulgheroni Antonio (antonio.bulgheroni@ec.europa.eu)
:Description: Give users contextual guidance when the entire steering file is selected.
"""

from __future__ import annotations

from PySide6.QtCore import Signal
from PySide6.QtWidgets import (
    QComboBox,
    QGridLayout,
    QGroupBox,
    QLabel,
    QPushButton,
    QVBoxLayout,
    QWidget,
)

from mafw.steering.builder import ValidationLevel


[docs] class MetadataEditor(QWidget): """Provide a quick summary of the steering file when no specific section is active.""" validation_level_changed = Signal(object) manual_edit_requested = Signal() def __init__(self, parent: QWidget | None = None) -> None: super().__init__(parent) layout = QVBoxLayout() layout.addWidget(QLabel('<b>MAFw Steering File</b>')) layout.addWidget(QLabel('Select a section on the left to configure its properties.')) steering_status_box = QGroupBox('Steering status') steering_status_layout = QVBoxLayout() self._analysis_label = QLabel() self._processor_label = QLabel() self._available_processors_label = QLabel() self._db_modules_label = QLabel() self._ui_label = QLabel() steering_status_layout.addWidget(self._analysis_label) steering_status_layout.addWidget(self._processor_label) steering_status_layout.addWidget(self._available_processors_label) steering_status_layout.addWidget(self._db_modules_label) steering_status_layout.addWidget(self._ui_label) steering_status_box.setLayout(steering_status_layout) validation_box = QGroupBox('Advanced options') validation_layout = QGridLayout() validation_layout.addWidget(QLabel('Validation level:'), 0, 0) self._validation_combo = QComboBox() self._validation_combo.addItem('None', None) for level in ValidationLevel: display = level.name.replace('_', ' ').title() self._validation_combo.addItem(display, level) self._validation_combo.currentIndexChanged.connect(self._emit_validation_level) validation_layout.addWidget(self._validation_combo, 0, 1) validation_layout.addWidget(QLabel('Edit current steering file in text editor:'), 1, 0) self._manual_edit_button = QPushButton('Open in editor') self._manual_edit_button.clicked.connect(self.manual_edit_requested.emit) validation_layout.addWidget(self._manual_edit_button, 1, 1) validation_box.setLayout(validation_layout) layout.addWidget(steering_status_box) layout.addWidget(validation_box) layout.addStretch(1) self.setLayout(layout)
[docs] def update_summary( self, analysis_name: str | None, processor_count: int, available_processors: int | None = None, available_db_modules: int | None = None, available_uis: int | None = None, ) -> None: """Refresh the summary labels to match the loaded model.""" if analysis_name: analysis_text = f'Analysis name: {analysis_name}' else: analysis_text = 'Analysis name: not set.' count_text = ( f'{processor_count} processor{"s" if processor_count != 1 else ""} configured.' if processor_count else 'No processors configured yet.' ) self._analysis_label.setText(analysis_text) self._processor_label.setText(count_text) self._available_processors_label.setText( f'Available processor types: {available_processors}' if available_processors is not None else 'Available processors: loading...' ) self._db_modules_label.setText( f'DB modules loaded: {available_db_modules}' if available_db_modules is not None else 'DB modules loaded: loading...' ) self._ui_label.setText( f'Available UIs: {available_uis}' if available_uis is not None else 'Available UIs: loading...' )
[docs] def set_validation_level(self, level: ValidationLevel | None) -> None: """Update the combo to reflect the controller's validation preference.""" target_index = 0 for index in range(self._validation_combo.count()): if self._validation_combo.itemData(index) == level: target_index = index break previous = self._validation_combo.blockSignals(True) self._validation_combo.setCurrentIndex(target_index) self._validation_combo.blockSignals(previous)
def _emit_validation_level(self, index: int) -> None: value = self._validation_combo.itemData(index) self.validation_level_changed.emit(value)