package ui import ( "fmt" "github.com/gdamore/tcell/v2" "github.com/rivo/tview" ) // createMainMenu creates the main menu screen func (se *SchemaEditor) createMainMenu() tview.Primitive { flex := tview.NewFlex().SetDirection(tview.FlexRow) // Title with database name dbName := se.db.Name if dbName == "" { dbName = "Untitled" } updateAtStr := "" if se.db.UpdatedAt != "" { updateAtStr = fmt.Sprintf("Updated @ %s", se.db.UpdatedAt) } titleText := fmt.Sprintf("[::b]RelSpec Schema Editor\n[::d]Database: %s %s\n[::d]Press arrow keys to navigate, Enter to select", dbName, updateAtStr) title := tview.NewTextView(). SetText(titleText). SetDynamicColors(true) // Menu options menu := tview.NewList(). AddItem("Edit Database", "Edit database name, description, and properties", 'e', func() { se.showEditDatabaseForm() }). AddItem("Manage Schemas", "View, create, edit, and delete schemas", 's', func() { se.showSchemaList() }). AddItem("Manage Tables", "View and manage tables in schemas", 't', func() { se.showTableList() }). AddItem("Manage Domains", "View, create, edit, and delete domains", 'd', func() { se.showDomainList() }). AddItem("Import & Merge", "Import and merge schema from another database", 'i', func() { se.showImportScreen() }). AddItem("Save Database", "Save database to file or database", 'w', func() { se.showSaveScreen() }). AddItem("Exit Editor", "Exit the editor", 'q', func() { se.app.Stop() }) menu.SetBorder(true).SetTitle(" Menu ").SetTitleAlign(tview.AlignLeft) menu.SetInputCapture(func(event *tcell.EventKey) *tcell.EventKey { if event.Key() == tcell.KeyEscape { se.showExitEditorConfirm() return nil } return event }) flex.AddItem(title, 5, 0, false). AddItem(menu, 0, 1, true) return flex }