feat: shortcuts dialog, tab context menus, smart status bar, recent files
- ShortcutsDialog: grouped tree of all keyboard shortcuts (Help menu) - Workspace tab context menu: Rename, Close, Close Others, Close to Right - SQL query tab context menu: Rename, Duplicate, Close, Close Others - Smart status bar: right-side connection indicator + selected cell preview - File → Open SQL File (Ctrl+O), Save (Ctrl+S), Save As, Open Recent - Recent files persisted to ~/.dbclient/recent_files.json (last 10) - TableViewer.cell_selected signal wired to status bar cell preview - EditorTab._filepath tracks the file associated with each query tab Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -301,6 +301,7 @@ _PAGE_OPTIONS = [("50", 50), ("100", 100), ("All", 0)]
|
||||
|
||||
class TableViewer(QWidget):
|
||||
status_message = pyqtSignal(str)
|
||||
cell_selected = pyqtSignal(str) # emits display value of clicked cell
|
||||
|
||||
def __init__(self, driver, database: str, table: str, parent=None):
|
||||
super().__init__(parent)
|
||||
@@ -398,7 +399,7 @@ class TableViewer(QWidget):
|
||||
self._table_view.doubleClicked.connect(self._on_double_click)
|
||||
# Track selection to enable/disable Edit/Delete buttons.
|
||||
# Use both signals: clicked covers mouse, selectionChanged covers keyboard.
|
||||
self._table_view.clicked.connect(lambda _: self._refresh_action_states())
|
||||
self._table_view.clicked.connect(self._on_cell_click)
|
||||
self._table_view.selectionModel().selectionChanged.connect(
|
||||
self._on_selection_changed)
|
||||
|
||||
@@ -584,6 +585,12 @@ class TableViewer(QWidget):
|
||||
|
||||
# ── Selection tracking ─────────────────────────────────────────────────────
|
||||
|
||||
def _on_cell_click(self, index: "QModelIndex") -> None:
|
||||
self._refresh_action_states()
|
||||
if index.isValid():
|
||||
val = self._model.data(index, Qt.ItemDataRole.DisplayRole)
|
||||
self.cell_selected.emit(str(val) if val is not None else "NULL")
|
||||
|
||||
def _on_selection_changed(self, *_):
|
||||
has_sel = bool(self._table_view.selectionModel().selectedRows())
|
||||
self._edit_btn.setEnabled(has_sel)
|
||||
|
||||
Reference in New Issue
Block a user