Initial support for user general remarks

This commit is contained in:
sebastien committed 2026-10-28 13:51:59 +01:00
1 parent a38c1ff4b3
commit 2c9dc65640
16 files changed
+606 -20

No files matched your search

+32 -3
View File
@@ -29,6 +29,7 @@ from .diagnostics import collect_diagnostics
from .batch_monitor import BatchMonitor
from .giving_names import GivingNamesPanel, find_name_issues
from .scores import ScoreEditorPanel
from .general_remarks import GeneralRemarksPanel
from .notifications import notify_desktop
from .syncthing import SyncthingPanel
from .manual_resolution import ManualResolutionPanel
@@ -285,6 +286,7 @@ class CopienatorApp(tk.Tk):
self._rendering = False
self.refaire_panel: RefaireSelection | None = None
self.giving_names_panel: GivingNamesPanel | None = None
self.general_remarks_panel = None
self.score_editor_panel: ScoreEditorPanel | None = None
self.complete_giving_names_button: ttk.Button | None = None
self.label_groups_button: ttk.Button | None = None
@@ -816,7 +818,7 @@ class CopienatorApp(tk.Tk):
if not step:
return
self._rendering = True
if step.id in {"personal_read", "edit_scores"}:
if step.id in {"personal_read", "edit_scores", "general_remarks"}:
self.command_box.grid_remove()
else:
self.command_box.grid()
@@ -831,6 +833,7 @@ class CopienatorApp(tk.Tk):
"modify_annotations",
"giving_names",
"edit_scores",
"general_remarks",
"statement_persp",
}
self.console.configure(height=8 if expanded_form else 14)
@@ -844,6 +847,7 @@ class CopienatorApp(tk.Tk):
self.arg_vars.clear()
self.refaire_panel = None
self.giving_names_panel = None
self.general_remarks_panel = None
self.score_editor_panel = None
self.complete_giving_names_button = None
self.label_groups_button = None
@@ -1084,6 +1088,12 @@ class CopienatorApp(tk.Tk):
)
row += 1
return row
if step.id == "general_remarks" and self.evaluation:
self.general_remarks_panel = GeneralRemarksPanel(
self.form, self.evaluation, self._general_remarks_changed
)
self.general_remarks_panel.grid(row=row, column=0, columnspan=2, sticky="ew", pady=8)
row += 1
if step.id == "edit_scores" and self.evaluation:
self.score_editor_panel = ScoreEditorPanel(
self.form, self.evaluation, self._score_changed, self._remark_changed
@@ -1644,7 +1654,7 @@ class CopienatorApp(tk.Tk):
if (step.is_manual or step.id == "personal_create"
or (step.id == "personal_read" and review_command is None)):
self._mark_step("success")
if step.id == "edit_scores":
if step.id == "general_remarks":
entry = self.state_store.step("read_annotations")
values = dict(entry.get("values", {}))
values["update_score"] = True
@@ -1778,7 +1788,7 @@ class CopienatorApp(tk.Tk):
return
self._save_current_form()
# Score edits already invalidate downstream steps when Set saves a change.
if self.current_step.id != "edit_scores":
if self.current_step.id not in {"edit_scores", "general_remarks"}:
self._invalidate_after_step(self.current_step, self._current_variant().id)
self.state_store.update_step(self.current_step.id, status=status)
history: dict[str, object] = {
@@ -1808,6 +1818,23 @@ class CopienatorApp(tk.Tk):
self._populate_tree()
self.info_var.set("Renommage validé — aucun fichier modifié.")
def _general_remarks_changed(self, copy_id, previous, current):
step = self.step_by_id["general_remarks"]
self._invalidate_after_step(step, "default")
self.state_store.update_step(step.id, status="detected")
entry = self.state_store.step("read_annotations")
values = dict(entry.get("values", {}))
values["update_score"] = True
self.state_store.update_step("read_annotations", status="stale", values=values)
self.state_store.add_history({
"step": step.id, "copy_id": copy_id, "previous_remarks": previous,
"remarks": current, "manual": True,
})
for item in self.steps:
if self.tree.exists(item.id):
status = self._step_status(item)
self.tree.item(item.id, values=(STATUS_LABELS.get(status, status),))
def _remark_changed(self, copy_id: str, label: str, previous: str, current: str) -> None:
self._score_changed(copy_id, label, previous, current, remark=True)
@@ -2243,6 +2270,8 @@ class CopienatorApp(tk.Tk):
self.complete_giving_names_button.configure(
state="disabled" if running else "normal"
)
if self.general_remarks_panel is not None:
self.general_remarks_panel.set_busy(running)
if self.score_editor_panel is not None:
self.score_editor_panel.set_busy(running)