Closed4
eefm作成日記
やりたいこと
TUI自作ファイラーを作りたい
動機
- Goの復習
- TUIを何か作ってみたい
- ファイラーであれば、最低限実装すべき機能が明確
- 既存のファイラーでは、複数のレイアウトの切り替えが面倒なので自作したい
なぜスクラップを使うか
Notionだと時系列順にアイデアをまとめるのが面倒
描画について
tviewを使用する。1から自分で実装するのは大変だし、本筋ではないから。
Frame
Primitiveのラッパー。指定したPrimitiveの上下にHeaderとFooterを追加
Grid
行と列の数を指定してからPrimitiveを配置する
AddItem(p Primitive, row, column, rowSpan, colSpan, minGridHeight, minGridWidth, focus bool)
Flex
AddItem(item Primitive, fixedSize, proportion, focus bool)
fixedSize
は、変更されない固定サイズ(幅または高)。0だったら柔軟。
proportion
は、他の同一box内のアイテムとの相対的なサイズ。
Flexアイテムの動的追加
以下のget_view
のように、view.Flex
に次々とAddItem
をすれば良い。
package main
import (
"github.com/rivo/tview"
"strconv"
)
func get_view() *tview.Flex {
var view *tview.Flex = tview.NewFlex()
for i := 0; i < 3; i++ {
view.AddItem(tview.NewBox().SetBorder(true).SetTitle("col "+strconv.Itoa(i)), 0, 1, false)
}
return view
}
func main() {
app := tview.NewApplication()
flex := get_view()
if err := app.SetRoot(flex, true).SetFocus(flex).Run(); err != nil {
panic(err)
}
}
結果
デフォルトでは、AddItem
を使うと右に追加されて列のような扱いになる。
AddItem
使用時に、下に追加されて行のような扱いにするにするには、tview.Flex
にSetDirection(tview.FlexRow)
を使う。
func get_view() *tview.Flex {
var view *tview.Flex = tview.NewFlex().SetDirection(tview.FlexRow)
for i := 0; i < 3; i++ {
view.AddItem(tview.NewBox().SetBorder(true).SetTitle("row "+strconv.Itoa(i)), 0, 1, false)
}
return view
}
このスクラップは2021/09/20にクローズされました