* Add schema management screen with list and editor * Implement table management screen with list and editor * Create data operations for schema and table management * Define UI rules and guidelines for consistency * Ensure circular tab navigation and keyboard shortcuts * Add forms for creating and editing schemas and tables * Implement confirmation dialogs for destructive actions
63 lines
1.7 KiB
Go
63 lines
1.7 KiB
Go
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("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
|
|
}
|