Skip to content

Latest commit

 

History

History
50 lines (39 loc) · 16 KB

intro.md

File metadata and controls

50 lines (39 loc) · 16 KB

Введение

goTV - это библиотека пользовательского интерфейса для текстовых терминалов. Он предоставляет набор стандартных элементов управления пользовательского интерфейса для создания довольно сложных приложений пользовательского интерфейса. Библиотека поддерживает создание тем - вы можете легко изменить внешний вид работающего приложения на лету (см. пример изменения темы на лету в разделе снимков экрана README).

Ограничения

Библиотека поддерживает широкий спектр терминалов, которые поддерживает termbox, и должна без проблем работать в Windows, Linux и Mac. Но termbox не полностью совместим с UNIX в Windows, например с MSYS или Git bash. Например, библиотека не работает с более новым Git bash (входит в Git(Windows) 2.x), но у меня нет проблем с запуском демонстрации goTV внутри старого Git bash (входит в Git(Windows) 1.x - да, он довольно старый, но совместим).

Функции

  • широкий набор элементов управления из коробки;
  • темы - вам не нужно устанавливать цвет для всего: если у вас включена тема, вы можете использовать ColorDefault для текста и фона везде;
  • автоматическое позиционирование и изменение размера виджета в зависимости от размера родительского элемента или терминала: вам не нужно устанавливать положение виджета вручную. Единственное, что вам нужно сделать, это установить минимальную ширину и высоту виджета. Но даже в этом случае вы можете просто передать константу AutoSize, и минимальные размеры будут рассчитаны библиотекой (например, минимальная ширина метки и кнопки зависит от длины их текста);
  • виджет автомасштабирования в терминале/изменение размера окна; Установите коэффициент масштабирования при создании виджета, и библиотека автоматически изменит размер виджета. Автоматическое изменение размера виджета можно запретить, установив для коэффициента масштабирования значение Fixed - в этом случае размер виджета будет минимальным, что может быть полезно для кнопок;
  • все тексты можно раскрашивать: есть набор простых тегов, которые можно использовать внутри текста для временного изменения цвета текста или фона;
  • многие элементы управления генерируют события, когда что-то происходит (например, Button генерирует только событие OnClick, ListBox генерирует события OnKeyPress, которые могут быть полезны для поддержки фильтрации или инкрементного поиска, и OnSelectItem, который генерируется при изменении выбора);
  • Хотя окна могут перекрывать друг друга, виджет не может перекрывать другой виджет. Это может измениться в будущем, но в настоящий момент это сделает невозможным реализацию таких компонентов, как ComboBox или PopupMenu;
  • окном можно управлять как с помощью мыши, так и с клавиатуры - библиотека предоставляет встроенные горячие клавиши для выполнения общих задач, таких как перемещение окна или изменение размера (и дополнительная последовательность клавиш Ctrl-Q + Ctrl-Q для выхода из приложения);
  • несколько общих диалоговых окон доступны из коробки: диалоговое окно подтверждения и выбора. Оба имеют настраиваемые метки кнопок;

Элементы управления

Все элементы управления можно разделить на 4 категории:

  1. Невидимые элементы управления - на данный момент в эту категорию попадает только RadioGroup. Эти элементы управления являются помощниками или выполняют логическое группирование элементов управления. Например, RadioGroup следит за тем, чтобы выбрано не более одной радиокнопки группы.
  2. Элемент управления верхнего уровня - Window. Это единственный визуальный элемент управления, у которого нет родительского элемента и который не может быть дочерним элементом любого другого элемента управления. Каждое окно - это отдельный диалог/окно, которое пользователь может перемещать внутри окна терминала. Окна могут быть модальными - это может быть полезно для создания диалоговых окон подтверждения. В каждом приложении должно быть хотя бы одно видимое окно. Если пользователь закрывает последнее окно, приложение автоматически завершает работу.
  3. Виджеты - почти все элементы управления находятся в этой группе. Любой виджет может быть как родительским, так и дочерним (хотя он не был тщательно протестирован для случаев, когда родительский элемент не является фреймом, например, кнопка содержит несколько дочерних элементов - это не тестировалось). Виджет должен быть дочерним по отношению к Window или другому виджету - невозможно отобразить виджет без родителя.
  4. Диалоги - готовые к использованию модальные окна для взаимодействия с пользователем. В настоящий момент доступны два типа диалогов:
  • ConfirmationDialog - простой диалог с вопросом и до 3 кнопок с настраиваемыми текстами подсказок;
  • SelectDialog - окно, представляющее список элементов (отображаемых как ListBox или как RadioGroup) для выбора пользователем

Текущий список доступных элементов управления

  • Window - это элемент управления верхнего уровня с уникальными функциями: ручное изменение размера, максимальные и минимальные возможности, перекрытие других окон
  • Label - для отображения статичных текстов. Текст может отображаться в горизонтальном или вертикальном направлении
  • Button - это простое кнопочное управление
  • EditField - элемент управления для редактирования текста. Он ограничен одной строкой текста. Имеется базовая поддержка буфера обмена: копирование и вставка.
  • ListBox - это прокручиваемый элемент управления для отображения списка элементов
  • TextView - это прокручиваемая (поддерживаются вертикальная и горизонтальная прокрутка) программа просмотра большого количества текста. Необязательная функция: перенос слов (который отключает горизонтальную прокрутку) и ограничение максимального количества элементов, содержащихся в элементе управления (что полезно, например, для имитации tail -f и отображения только N последних элементов - если новая строка добавлена ​​полностью TextView, тогда первая строка удаляется автоматически)
  • ProgressBar - индикатор прогресса. Поддерживаются как вертикальное, так и горизонтальное направление. Для горизонтального ProgressBar можно отображать настраиваемый текст над элементом управления. Пользовательский текст поддерживает несколько внутренних переменных, таких как процент или текущее значение.
  • Frame - это декоративный элемент управления для рисования рамки вокруг группы элементов управления. Без рамки он может играть роль разделителя между элементами управления для более точного изменения размера (например, для создания окна с элементом управления фиксированного размера, который придерживается правой стороны, вы можете создать рамку без полей с масштабным коэффициентом 1, а затем добавить контроль с фиксированным размером)
  • CheckBox - элемент управления флажком с тремя состояниями (по умолчанию три состояния отключены)
  • Radio - это простая радиокнопка. В качестве отдельного элемента управления бесполезен - его нужно прикрепить к RadioGroup.
  • RadioGroup - это невизуальный элемент управления для управления группой RadioButton. Это гарантирует, что в любой момент времени выбрано не более одного RadioButton
  • BarChart - диаграмма, представляющая сгруппированные данные. Он поддерживает отображение полосок, реальных значений под полосами и легенды. Полосы могут отображаться с пробелами или одна за другой. BarChart поддерживает настраиваемую окраску при рисовании, поэтому можно, например, пометить часть полосы красным цветом, если ее значение превышает определенный предел (см. Демонстрационные примеры barchart.go для реальных примеров). Высота столбцов по вертикали всегда изменяется автоматически, поэтому самая высокая полоса всегда перекрывает полную высоту управления. Но ширина полосы может быть изменена автоматически (рассчитывается в зависимости от количества полосок и ширины элемента управления) или может определяться пользователем.
  • SparkChart - это элемент управления, аналогичный BarChart, но для динамических данных. Максимальное количество отображаемых полос зависит от ширины элемента управления и ширины области слева от отображаемых значений. Если вы добавляете новое значение и элемент управления заполнен, самое старое значение удаляется, а все остальные полосы сдвигаются влево. Можно сделать полоски автоматически масштабируемыми (в этом случае самая высокая полоса занимает всю высоту элемента управления, а высота других полос пересчитывается) или вы можете установить постоянный максимум (например, может быть полезно отображать историю загрузки процессора). Дополнительная функция: отображение разным цветом полос с наибольшим значением
  • GridView - таблица для отображения структурированных данных. Он не поддерживает редактирование на месте, но GridView генерирует события для сортировки, удаления, добавления и изменения данных. Дополнительные функции: дополнительные линии между столбцами и строками, настраиваемое рисование любой ячейки
  • ConfirmationDialog - это модальное диалоговое окно, запрашивающее у пользователя подтверждение какого-либо действия. В диалоговом окне может отображаться до трех кнопок с настраиваемым текстом. Любую кнопку можно сделать кнопкой по умолчанию
  • SelectDialog - модальный диалог для выбора элемента из списка. Списки могут отображаться как ListBox или как RadioGroup.