Создайте пустое приложение. Сначала вам нужно импортировать библиотеку goTV
:
import (
"github.com/prospero78/goTV/tv"
)
Библиотеку необходимо инициализировать перед созданием первого элемента управления. Инициализация создает управляющие элементы и диспетчеры тем, инициализирует библиотеку termbox
и подготавливает главный цикл событий. Завершение просто очищает терминал - вызовите его перед выходом из приложения. Если вы забыли вызвать финализацию или приложение выйдет из строя, это обычно приводит к исчезновению курсора, потому что библиотека отключает текстовый курсор при его запуске.
В простом приложении это можно сделать так:
func main() {
tv.InitLibrary()
defer tv.DeinitLibrary()
... тут ваш код ...
}
Приложение UI без окна бесполезно. Создадим пустое окно. Добавьте следующий код после defer:
view := tv.AddWindow(0, 0, 10, 7, "Привет мир!")
0, 0
- позиция нового окна. Левый верхний угол в нашем случае
10, 7
- минимальная ширина и высота окна
"Привет мир!" - это заголовок окна
Последним шагом является запуск основного цикла событий, который отвечает за отображение и взаимодействие всех элементов пользовательского интерфейса. Добавьте эту строку перед последней фигурной скобкой:
tv.MainLoop()
Примечание: этот вызов должен быть последней строкой в функции, потому что код после этой строки не выполняется, пока приложение не будет закрыто.
Пустое окно - это скучно. Давайте создадим кнопку, которая закрывает приложение, когда кто-либо нажимает на нее. Добавьте код между инициализацией библиотеки и вызовом основного цикла событий:
btnQuit := tv.CreateButton(view, 15, 4, "Hi", 1)
btnQuit.OnClick(func(ev tv.Event) {
go tv.Stop()
})
Первая строка добавляет кнопку в наше окно (первый аргумент - это наше окно). Кнопка имеет минимальную ширину 15
и высоту 4
. Текст кнопки - «Hi». А коэффициент масштабирования равен 1
, что означает, что размер кнопки будет автоматически изменен при изменении размера ее родителя. Попробуйте изменить размер окна, и кнопка всегда будет заполнять все окна, потому что биттон является единственным дочерним элементом окна.
Вторая строка добавляет обратный вызов события, который запускается, когда кто-то щелкает кнопку мышью или нажимает клавишу «пробел». В обратном вызове мы просто отправляем событие в основной цикл, который приложение завершает. tv.Stop()
- щадящий способ выйти из терминального приложения.
Полный код примера можно найти в helloworld.go