From 89e93dd467ee9f85610ce86471cf8264eabf10b1 Mon Sep 17 00:00:00 2001 From: stephen Date: Thu, 25 Jun 2026 23:02:42 +1000 Subject: [PATCH] added tag to sandbox_tab --- spanish_trainer.db | Bin 212992 -> 217088 bytes tabs/sandbox_tab.py | 44 +++++++++++++++++++++++++++++++------------- 2 files changed, 31 insertions(+), 13 deletions(-) diff --git a/spanish_trainer.db b/spanish_trainer.db index 301cac01b0dd28233b651e19ce13ab1e9e466e40..66228e771e63098e785ac7bed447981c894115f4 100644 GIT binary patch delta 441 zcmV;q0Y?6SfDM444UiiJ1^@s6HIX1c0S2*Pqz?`+4(9*>001-(`w#UF=aUc+S+i>p zd=3Tx000PqX0z=c1py8C13Cj80|f%olL%mtv$S9y z0<+f;p`WKIh>Hw1+M2uuhX2kHmE2bTwW2T}(m2L=Y_2FwPm28jk!1}+8<1@i^Q z1)K$c1ziO!1rY@41fv9nlL&A+vvzO~1hdg#*+0-U!9HUJ68362Ri zv4JQF2~~y>2LMGu86B5LIRiriVQ065IRktKmJkC3UM&bt01xC3$Pb|pe-B^}IS(5T z0uI>@ybhfXdk$X?Jq!N}kd~bmQ3?}@)`M*vU5{P7+usKVhmX9q_ zNz+Q9bn{y|Rz^OKCSjlw_C`-2$(FuJfzf~s$Vz9pKAAlreRG~bCEw=fak7joNemYm zCaWY&kYSm@lEz}j!p;1c`55y&=0fHmW+P?^rXNgKndWcak|4*lxvlI8K=i z?qbdZ8mY$gb8}e%Kg)J$ALggb%~=)gSrv@ivnrV8Z0E3J;5@YOXe~*0QKBUGXMYp diff --git a/tabs/sandbox_tab.py b/tabs/sandbox_tab.py index 6e3aa26..3978202 100644 --- a/tabs/sandbox_tab.py +++ b/tabs/sandbox_tab.py @@ -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("English Text:"), self.txt_english) form_layout.addRow(QLabel("Spanish Text:"), self.txt_spanish) form_layout.addRow(QLabel("Source Context:"), self.txt_context) + form_layout.addRow(QLabel("Tags:"), self.txt_tags) form_layout.addRow(QLabel("Historical Notes:"), 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) \ No newline at end of file