我正在使用 tslocum ( https://code.rocketnine.space/tslocum/cview ) 的 CView 库创建一个 TUI 应用程序,并想知道是否有人知道如何处理这个问题。
我为动态布局创建了一个网格;顶部有一个“横幅”文本视图,顶部有一个标题。显示屏底部一分为二;左侧是带有一些按钮的表单,右侧是带有一些解释性文本的文本视图。
如果选择/聚焦左列,则使用鼠标(以及选项卡和 shift-tab)导航按钮有效。如果单击文本视图,它们将获得焦点,并且不清楚如何再次选择表单以使用键盘导航按钮。我不想完全禁用鼠标。
所以除非有另一种方法来处理它,有没有办法让表单成为唯一的可选项目,或者禁用文本视图获得焦点?或者将一个动作附加到网格中的文本视图,这样如果它们被选中,它会将选择移回表单?我一直在尝试在演示和扩展坞中找到解决方案,但我还没有完全找到可行的方法。
这是我用来创建网格的内容:
func ViewTaskChoose(app *cview.Application) *cview.Grid {
fmMenu := cview.NewForm()
tvHeader := cview.NewTextView()
grid := cview.NewGrid()
tvInfo := cview.NewTextView()
// Create the header with a title
tvHeader.SetTextAlign(cview.AlignCenter)
tvHeader.SetText("Fancy Application with a TUI Twist")
tvHeader.SetBorder(true)
// Create a text area for texty stuffs
tvInfo.SetTextAlign(cview.AlignLeft)
tvInfo.SetBorder(true)
tvInfo.SetText("Fancy texty stuff here")
// Format a menu area for buttons
fmMenu.SetTitle("Task Selection")
fmMenu.SetTitleAlign(cview.AlignLeft)
fmMenu.SetTitleColor(tcell.ColorYellow)
fmMenu.SetBorder(true)
fmMenu.SetHorizontal(true)
// Buttons to add
fmMenu.AddButton("Button 1", nil)
fmMenu.AddButton("Button 2", nil)
fmMenu.AddButton("Button 3", nil)
fmMenu.AddButton("Quit", func() {
app.Stop()
})
// Define the grid and layout properties
grid.SetRows(4, 0)
grid.SetColumns(30, 0)
grid.SetBorders(false)
grid.SetBackgroundTransparent(true)
// Now compose the display
grid.AddItem(tvHeader, 0, 0, 1, 3, 0, 0, false)
grid.AddItem(tvInfo, 1, 1, 1, 2, 0, 0, false)
grid.AddItem(fmMenu, 1, 0, 1, 1, 0, 0, true)
return grid
}