added tag to sandbox_tab

This commit is contained in:
stephen 2026-06-25 23:02:42 +10:00
parent b5567bf498
commit 89e93dd467
2 changed files with 31 additions and 13 deletions

Binary file not shown.

View file

@ -44,6 +44,12 @@ class SandboxTab(QWidget):
self.txt_context.setPlaceholderText("e.g., Camino 2027, Café, Market conversation...")
self.txt_context.setStyleSheet("padding: 6px; font-size: 14px;")
self.txt_context.textChanged.connect(self.handle_live_filter)
# NEW: Tags input field with live filter connection
self.txt_tags = QLineEdit()
self.txt_tags.setPlaceholderText("e.g., verb, greeting, subjunctive, travel...")
self.txt_tags.setStyleSheet("padding: 6px; font-size: 14px;")
self.txt_tags.textChanged.connect(self.handle_live_filter)
self.txt_notes = QLineEdit()
self.txt_notes.setPlaceholderText("Grammar rules, formal vs informal nuances...")
@ -53,6 +59,7 @@ class SandboxTab(QWidget):
form_layout.addRow(QLabel("<b>English Text:</b>"), self.txt_english)
form_layout.addRow(QLabel("<b>Spanish Text:</b>"), self.txt_spanish)
form_layout.addRow(QLabel("<b>Source Context:</b>"), self.txt_context)
form_layout.addRow(QLabel("<b>Tags:</b>"), self.txt_tags)
form_layout.addRow(QLabel("<b>Historical Notes:</b>"), self.txt_notes)
main_layout.addWidget(form_container)
@ -155,8 +162,8 @@ class SandboxTab(QWidget):
# --- SECTION 4: DATALIST DISPLAY REGION ---
self.table = QTableWidget()
self.table.setColumnCount(5)
self.table.setHorizontalHeaderLabels(["ID", "English Phrase", "Spanish Translation", "Context", "Notes"])
self.table.setColumnCount(6) # Increased to 6 to display Tags column
self.table.setHorizontalHeaderLabels(["ID", "English Phrase", "Spanish Translation", "Context", "Tags", "Notes"])
self.table.setSelectionBehavior(QTableWidget.SelectionBehavior.SelectRows)
self.table.setEditTriggers(QTableWidget.EditTrigger.NoEditTriggers)
@ -169,7 +176,8 @@ class SandboxTab(QWidget):
header.setSectionResizeMode(1, QHeaderView.ResizeMode.Stretch)
header.setSectionResizeMode(2, QHeaderView.ResizeMode.Stretch)
header.setSectionResizeMode(3, QHeaderView.ResizeMode.Interactive)
header.setSectionResizeMode(4, QHeaderView.ResizeMode.Interactive)
header.setSectionResizeMode(4, QHeaderView.ResizeMode.Interactive) # Tags Header
header.setSectionResizeMode(5, QHeaderView.ResizeMode.Interactive) # Notes Header
main_layout.addWidget(self.table)
@ -193,13 +201,14 @@ class SandboxTab(QWidget):
@pyqtSlot()
def handle_live_filter(self):
"""Filters the visible database entries based on current text input criteria."""
"""Filters the visible entries based on English, Spanish, Context, and Tags criteria."""
# Temporary block signals to prevent selection loops from fighting text changes
self.table.blockSignals(True)
filter_en = self.txt_english.text().lower().strip()
filter_es = self.txt_spanish.text().lower().strip()
filter_ctx = self.txt_context.text().lower().strip()
filter_tag = self.txt_tags.text().lower().strip() # Capture tag text query
self.table.setRowCount(0)
visible_row_index = 0
@ -208,15 +217,17 @@ class SandboxTab(QWidget):
val_en = (row["en_text"] or "").lower()
val_es = (row["es_text"] or "").lower()
val_ctx = (row["source_context"] or "").lower()
val_tag = (row["tags"] or "").lower() # Extract tags criteria
# Look for matches across English, Spanish, and Source Context
if (filter_en in val_en) and (filter_es in val_es) and (filter_ctx in val_ctx):
# Look for explicit matching conditions across all 4 entry variables
if (filter_en in val_en) and (filter_es in val_es) and (filter_ctx in val_ctx) and (filter_tag in val_tag):
self.table.insertRow(visible_row_index)
item_id = QTableWidgetItem(str(row["translation_id"]))
item_en = QTableWidgetItem(row["en_text"])
item_es = QTableWidgetItem(row["es_text"])
item_ctx = QTableWidgetItem(row["source_context"] or "")
item_tag = QTableWidgetItem(row["tags"] or "")
item_nts = QTableWidgetItem(row["notes"] or "")
item_id.setTextAlignment(Qt.AlignmentFlag.AlignCenter)
@ -225,7 +236,8 @@ class SandboxTab(QWidget):
self.table.setItem(visible_row_index, 1, item_en)
self.table.setItem(visible_row_index, 2, item_es)
self.table.setItem(visible_row_index, 3, item_ctx)
self.table.setItem(visible_row_index, 4, item_nts)
self.table.setItem(visible_row_index, 4, item_tag)
self.table.setItem(visible_row_index, 5, item_nts)
# If we have an active editing ID, highlight that specific row during re-renders
if self.selected_translation_id == row["translation_id"]:
@ -256,17 +268,20 @@ class SandboxTab(QWidget):
self.txt_english.blockSignals(True)
self.txt_spanish.blockSignals(True)
self.txt_context.blockSignals(True)
self.txt_tags.blockSignals(True)
self.txt_notes.blockSignals(True)
self.selected_translation_id = record["translation_id"]
self.txt_english.setText(record["en_text"])
self.txt_spanish.setText(record["es_text"])
self.txt_context.setText(record["source_context"] or "")
self.txt_tags.setText(record["tags"] or "")
self.txt_notes.setText(record["notes"] or "")
self.txt_english.blockSignals(False)
self.txt_spanish.blockSignals(False)
self.txt_context.blockSignals(False)
self.txt_tags.blockSignals(False)
self.txt_notes.blockSignals(False)
@pyqtSlot()
@ -284,8 +299,8 @@ class SandboxTab(QWidget):
en_text = self.txt_english.text().strip()
es_text = self.txt_spanish.text().strip()
context = self.txt_context.text().strip()
tags = self.txt_tags.text().strip()
notes = self.txt_notes.text().strip()
tags = "" # Default empty placeholder string to fit the backend DB method signature
if not en_text or not es_text:
QMessageBox.warning(self, "Validation Alert", "Both English and Spanish base text blocks are required.")
@ -293,14 +308,12 @@ class SandboxTab(QWidget):
try:
if self.selected_translation_id is not None:
# Direct match for database.update_translation_record signature:
# (translation_id, es_text, en_text, source_context, tags, notes)
# database.update_translation_record signature: (translation_id, es_text, en_text, source_context, tags, notes)
database.update_translation_record(
self.selected_translation_id, es_text, en_text, context, tags, notes
)
else:
# Direct match for database.insert_translation_record signature:
# (es_text, en_text, source_context, tags, notes)
# database.insert_translation_record signature: (es_text, en_text, source_context, tags, notes)
database.insert_translation_record(
es_text, en_text, context, tags, notes
)
@ -331,16 +344,19 @@ class SandboxTab(QWidget):
self.txt_english.blockSignals(True)
self.txt_spanish.blockSignals(True)
self.txt_context.blockSignals(True)
self.txt_tags.blockSignals(True)
self.txt_notes.blockSignals(True)
self.txt_english.clear()
self.txt_spanish.clear()
self.txt_context.clear()
self.txt_tags.clear()
self.txt_notes.clear()
self.txt_english.blockSignals(False)
self.txt_spanish.blockSignals(False)
self.txt_context.blockSignals(False)
self.txt_tags.blockSignals(False)
self.txt_notes.blockSignals(False)
def reload_table_display(self):
@ -358,6 +374,7 @@ class SandboxTab(QWidget):
item_en = QTableWidgetItem(row["en_text"])
item_es = QTableWidgetItem(row["es_text"])
item_ctx = QTableWidgetItem(row["source_context"] or "")
item_tag = QTableWidgetItem(row["tags"] or "")
item_nts = QTableWidgetItem(row["notes"] or "")
item_id.setTextAlignment(Qt.AlignmentFlag.AlignCenter)
@ -366,6 +383,7 @@ class SandboxTab(QWidget):
self.table.setItem(idx, 1, item_en)
self.table.setItem(idx, 2, item_es)
self.table.setItem(idx, 3, item_ctx)
self.table.setItem(idx, 4, item_nts)
self.table.setItem(idx, 4, item_tag)
self.table.setItem(idx, 5, item_nts)
self.table.blockSignals(False)