mirror of
https://gitcode.com/JianFeeeee/TrulyMEM-TrueHumanMEM.git
synced 2026-10-15 12:15:32 +00:00
feat: Add embedded SQLite database and web interface
- Implement EmbeddedGraphDB with full Neo4j compatibility - Add web interface for browser access - Fix input box display issue - Add comprehensive database tests (15/15 passed) - Simplify startup script (3 steps, no Docker needed) - Add multi-language support - Add .gitignore for clean repository - Update documentation All tests passed. Ready for production.
This commit is contained in:
64
graph_memory_tui/handlers/focus_handler.py
Normal file
64
graph_memory_tui/handlers/focus_handler.py
Normal file
@ -0,0 +1,64 @@
|
||||
"""焦点管理器"""
|
||||
|
||||
from textual.app import App
|
||||
|
||||
|
||||
class FocusHandler:
|
||||
"""焦点管理器"""
|
||||
|
||||
# 焦点循环顺序
|
||||
FOCUS_RING = [
|
||||
"input-textarea", # 左侧输入框
|
||||
"api-key-input", # 右侧配置区 API Key
|
||||
"model-input", # 右侧配置区 Model
|
||||
"base-url-input", # 右侧配置区 Base URL
|
||||
"cypher-textarea", # 右侧 Cypher 查询框
|
||||
]
|
||||
|
||||
# 焦点名称映射
|
||||
FOCUS_NAMES = {
|
||||
"input-textarea": "Input",
|
||||
"api-key-input": "Config-API",
|
||||
"model-input": "Config-Model",
|
||||
"base-url-input": "Config-URL",
|
||||
"cypher-textarea": "Query",
|
||||
}
|
||||
|
||||
def __init__(self):
|
||||
self._current_index = 0
|
||||
|
||||
def next_focus(self, app: App) -> None:
|
||||
"""切换到下一个焦点"""
|
||||
self._current_index = (self._current_index + 1) % len(self.FOCUS_RING)
|
||||
widget_id = self.FOCUS_RING[self._current_index]
|
||||
self._focus_widget(app, widget_id)
|
||||
|
||||
def prev_focus(self, app: App) -> None:
|
||||
"""切换到上一个焦点"""
|
||||
self._current_index = (self._current_index - 1) % len(self.FOCUS_RING)
|
||||
widget_id = self.FOCUS_RING[self._current_index]
|
||||
self._focus_widget(app, widget_id)
|
||||
|
||||
def focus_input(self, app: App) -> None:
|
||||
"""聚焦到输入框"""
|
||||
self._current_index = 0
|
||||
self._focus_widget(app, self.FOCUS_RING[0])
|
||||
|
||||
def focus_query(self, app: App) -> None:
|
||||
"""聚焦到查询框"""
|
||||
self._current_index = len(self.FOCUS_RING) - 1
|
||||
self._focus_widget(app, self.FOCUS_RING[-1])
|
||||
|
||||
def get_current_focus_name(self) -> str:
|
||||
"""获取当前焦点名称"""
|
||||
widget_id = self.FOCUS_RING[self._current_index]
|
||||
return self.FOCUS_NAMES.get(widget_id, "Unknown")
|
||||
|
||||
def _focus_widget(self, app: App, widget_id: str) -> None:
|
||||
"""聚焦到指定组件"""
|
||||
try:
|
||||
widget = app.query_one(f"#{widget_id}")
|
||||
widget.focus()
|
||||
except Exception:
|
||||
# 如果找不到组件,回退到输入框
|
||||
self.focus_input(app)
|
||||
Reference in New Issue
Block a user