|
|
@@ -38,6 +38,7 @@ from PySide6.QtWidgets import (
|
|
|
from src.clients.spectroscopy_client import SpectroscopyClient, SpectroscopyError
|
|
|
from src.gui.workers import OrchestratorWorker
|
|
|
from src.gui.scheme_panel import system_is_dark
|
|
|
+from src import i18n
|
|
|
|
|
|
|
|
|
# -- Colour palette -------------------------------------------------------------
|
|
|
@@ -160,13 +161,13 @@ class SpectroscopyTab(QWidget):
|
|
|
lay.setContentsMargins(6, 4, 6, 4)
|
|
|
lay.setSpacing(6)
|
|
|
|
|
|
- self._btn_load = QPushButton("Load JSON...")
|
|
|
+ self._btn_load = QPushButton(i18n.tr("btn_load_json"))
|
|
|
self._btn_load.setToolTip("Load a hardware JSON file and run NMR analysis")
|
|
|
self._btn_load.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed)
|
|
|
self._btn_load.clicked.connect(self._load_json)
|
|
|
lay.addWidget(self._btn_load)
|
|
|
|
|
|
- self._btn_analyze = QPushButton("Analyze")
|
|
|
+ self._btn_analyze = QPushButton(i18n.tr("btn_analyze"))
|
|
|
self._btn_analyze.setToolTip(
|
|
|
"Re-run analysis with the current parameters\n"
|
|
|
"(same file, updated settings)"
|
|
|
@@ -178,7 +179,7 @@ class SpectroscopyTab(QWidget):
|
|
|
|
|
|
lay.addWidget(_vsep())
|
|
|
|
|
|
- self._btn_batch = QPushButton("Batch...")
|
|
|
+ self._btn_batch = QPushButton(i18n.tr("btn_batch"))
|
|
|
self._btn_batch.setToolTip("Process a whole folder of hardware JSON files")
|
|
|
self._btn_batch.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed)
|
|
|
self._btn_batch.clicked.connect(self._open_batch_dialog)
|
|
|
@@ -186,14 +187,14 @@ class SpectroscopyTab(QWidget):
|
|
|
|
|
|
lay.addWidget(_vsep())
|
|
|
|
|
|
- self._btn_export = QPushButton("Export...")
|
|
|
+ self._btn_export = QPushButton(i18n.tr("btn_export_sp"))
|
|
|
self._btn_export.setToolTip("Save analysis results (.mat / .csv / .npz)")
|
|
|
self._btn_export.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed)
|
|
|
self._btn_export.setEnabled(False)
|
|
|
self._btn_export.clicked.connect(self._export_results)
|
|
|
lay.addWidget(self._btn_export)
|
|
|
|
|
|
- self._btn_clear = QPushButton("Clear")
|
|
|
+ self._btn_clear = QPushButton(i18n.tr("btn_clear"))
|
|
|
self._btn_clear.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed)
|
|
|
self._btn_clear.clicked.connect(self._clear_plots)
|
|
|
lay.addWidget(self._btn_clear)
|
|
|
@@ -230,8 +231,8 @@ class SpectroscopyTab(QWidget):
|
|
|
lay.setSpacing(8)
|
|
|
|
|
|
# -- NMR Parameters -----------------------------------------------
|
|
|
- nmr_grp = QGroupBox("NMR Parameters")
|
|
|
- nmr_frm = QFormLayout(nmr_grp)
|
|
|
+ self._nmr_grp = QGroupBox(i18n.tr("grp_nmr_params"))
|
|
|
+ nmr_frm = QFormLayout(self._nmr_grp)
|
|
|
nmr_frm.setFieldGrowthPolicy(QFormLayout.AllNonFixedFieldsGrow)
|
|
|
|
|
|
self._sb_fc = QDoubleSpinBox()
|
|
|
@@ -293,11 +294,11 @@ class SpectroscopyTab(QWidget):
|
|
|
nmr_frm.addRow("Avg num:", self._sb_avg)
|
|
|
nmr_frm.addRow("Data num:", self._sb_dnum)
|
|
|
nmr_frm.addRow("Channel:", self._sb_ch)
|
|
|
- lay.addWidget(nmr_grp)
|
|
|
+ lay.addWidget(self._nmr_grp)
|
|
|
|
|
|
# -- Metadata ------------------------------------------------------
|
|
|
- meta_grp = QGroupBox("Metadata")
|
|
|
- meta_frm = QFormLayout(meta_grp)
|
|
|
+ self._meta_grp = QGroupBox(i18n.tr("grp_metadata"))
|
|
|
+ meta_frm = QFormLayout(self._meta_grp)
|
|
|
meta_frm.setFieldGrowthPolicy(QFormLayout.AllNonFixedFieldsGrow)
|
|
|
self._lbl_n = QLabel("-")
|
|
|
self._lbl_fs = QLabel("-")
|
|
|
@@ -313,11 +314,11 @@ class SpectroscopyTab(QWidget):
|
|
|
meta_frm.addRow("Avg range:", self._lbl_avg_range)
|
|
|
meta_frm.addRow("Data range:", self._lbl_data_range)
|
|
|
meta_frm.addRow("Channel range:", self._lbl_ch_range)
|
|
|
- lay.addWidget(meta_grp)
|
|
|
+ lay.addWidget(self._meta_grp)
|
|
|
|
|
|
# -- Metrics -------------------------------------------------------
|
|
|
- met_grp = QGroupBox("Metrics")
|
|
|
- met_frm = QFormLayout(met_grp)
|
|
|
+ self._met_grp = QGroupBox(i18n.tr("grp_metrics"))
|
|
|
+ met_frm = QFormLayout(self._met_grp)
|
|
|
met_frm.setFieldGrowthPolicy(QFormLayout.AllNonFixedFieldsGrow)
|
|
|
mono9 = QFont("Courier New", 9)
|
|
|
self._lbl_peak_f = QLabel("-"); self._lbl_peak_f.setFont(mono9)
|
|
|
@@ -326,7 +327,7 @@ class SpectroscopyTab(QWidget):
|
|
|
met_frm.addRow("Peak freq:", self._lbl_peak_f)
|
|
|
met_frm.addRow("FWHM:", self._lbl_fwhm)
|
|
|
met_frm.addRow("Amplitude:", self._lbl_peak_amp)
|
|
|
- lay.addWidget(met_grp)
|
|
|
+ lay.addWidget(self._met_grp)
|
|
|
|
|
|
lay.addStretch()
|
|
|
|
|
|
@@ -538,14 +539,22 @@ class SpectroscopyTab(QWidget):
|
|
|
bar.setFixedHeight(22)
|
|
|
lay = QHBoxLayout(bar)
|
|
|
lay.setContentsMargins(6, 0, 6, 0)
|
|
|
- self._status_lbl = QLabel(
|
|
|
- "Click 'Load JSON...' to open a hardware JSON file and start NMR analysis"
|
|
|
- )
|
|
|
+ self._status_lbl = QLabel(i18n.tr("spec_status_init"))
|
|
|
self._status_lbl.setFont(QFont("Arial", 8))
|
|
|
lay.addWidget(self._status_lbl)
|
|
|
lay.addStretch()
|
|
|
return bar
|
|
|
|
|
|
+ def retranslate_ui(self) -> None:
|
|
|
+ self._btn_load .setText(i18n.tr("btn_load_json"))
|
|
|
+ self._btn_analyze.setText(i18n.tr("btn_analyze"))
|
|
|
+ self._btn_batch .setText(i18n.tr("btn_batch"))
|
|
|
+ self._btn_export .setText(i18n.tr("btn_export_sp"))
|
|
|
+ self._btn_clear .setText(i18n.tr("btn_clear"))
|
|
|
+ self._nmr_grp .setTitle(i18n.tr("grp_nmr_params"))
|
|
|
+ self._meta_grp.setTitle(i18n.tr("grp_metadata"))
|
|
|
+ self._met_grp .setTitle(i18n.tr("grp_metrics"))
|
|
|
+
|
|
|
# -- Actions -----------------------------------------------------------
|
|
|
|
|
|
def _load_json(self) -> None:
|
|
|
@@ -940,7 +949,7 @@ class BatchDialog(QDialog):
|
|
|
parent: QWidget | None = None,
|
|
|
) -> None:
|
|
|
super().__init__(parent)
|
|
|
- self.setWindowTitle("Batch NMR Analysis")
|
|
|
+ self.setWindowTitle(i18n.tr("batch_title"))
|
|
|
self.setMinimumSize(720, 540)
|
|
|
|
|
|
self._client = client
|
|
|
@@ -962,19 +971,17 @@ class BatchDialog(QDialog):
|
|
|
|
|
|
# Folder picker
|
|
|
fold_row = QHBoxLayout()
|
|
|
- fold_row.addWidget(QLabel("Folder:"))
|
|
|
+ fold_row.addWidget(QLabel(i18n.tr("folder_label")))
|
|
|
self._le_folder = QLineEdit()
|
|
|
self._le_folder.setPlaceholderText("Path to folder containing *.json files")
|
|
|
fold_row.addWidget(self._le_folder, stretch=1)
|
|
|
- btn_browse = QPushButton("Browse...")
|
|
|
+ btn_browse = QPushButton(i18n.tr("btn_browse"))
|
|
|
btn_browse.clicked.connect(self._browse_folder)
|
|
|
fold_row.addWidget(btn_browse)
|
|
|
lay.addLayout(fold_row)
|
|
|
|
|
|
# Params toggle
|
|
|
- self._cb_use_current = QCheckBox(
|
|
|
- "Use current parameters from the Spectroscopy tab"
|
|
|
- )
|
|
|
+ self._cb_use_current = QCheckBox(i18n.tr("cb_use_current"))
|
|
|
self._cb_use_current.setChecked(True)
|
|
|
self._cb_use_current.toggled.connect(self._on_use_current_toggled)
|
|
|
lay.addWidget(self._cb_use_current)
|
|
|
@@ -985,7 +992,7 @@ class BatchDialog(QDialog):
|
|
|
|
|
|
# Run row
|
|
|
run_row = QHBoxLayout()
|
|
|
- self._btn_run = QPushButton("Run Batch")
|
|
|
+ self._btn_run = QPushButton(i18n.tr("btn_run_batch"))
|
|
|
self._btn_run.setFixedWidth(100)
|
|
|
self._btn_run.clicked.connect(self._run_batch)
|
|
|
run_row.addWidget(self._btn_run)
|
|
|
@@ -1013,18 +1020,18 @@ class BatchDialog(QDialog):
|
|
|
|
|
|
# Bottom buttons
|
|
|
bot_row = QHBoxLayout()
|
|
|
- self._btn_csv = QPushButton("Export CSV...")
|
|
|
+ self._btn_csv = QPushButton(i18n.tr("btn_export_csv"))
|
|
|
self._btn_csv.setEnabled(False)
|
|
|
self._btn_csv.clicked.connect(self._export_csv)
|
|
|
bot_row.addWidget(self._btn_csv)
|
|
|
bot_row.addStretch()
|
|
|
- btn_close = QPushButton("Close")
|
|
|
+ btn_close = QPushButton(i18n.tr("btn_close"))
|
|
|
btn_close.clicked.connect(self.accept)
|
|
|
bot_row.addWidget(btn_close)
|
|
|
lay.addLayout(bot_row)
|
|
|
|
|
|
# Status line
|
|
|
- self._status_lbl = QLabel("Select a folder and click Run Batch.")
|
|
|
+ self._status_lbl = QLabel(i18n.tr("batch_status_init"))
|
|
|
lay.addWidget(self._status_lbl)
|
|
|
|
|
|
def _build_batch_params(self) -> QWidget:
|