Alterator/New/Packages
Текущее состояние модулей альтератора
Packages Internals
Таблица виджетов
Таблица общих атрибутов для всех виджетов
Attribute | Значения | Описание |
---|---|---|
align | "left" "right" "middle" "hmiddle" "center" "top" "bottom" | выравнивание внутри ячейки «сетки» |
activity | #t #f | активирует/отключает виджет |
visibility | #t #f | видимость/невидимость виджета |
colspan | <число> | количество столбцов "сетки" под данный виджет |
rowspan | <число> | количество строк "сетки" под данный виджет |
tooltip | <текст> | справочная информация, выводимая во всплывающей подсказке |
focus | #t #f | атрибут только для записи, помещает фокус на виджет для которого указано значение #t |
width | <число> | ширина виджета |
height | <число> | высота виджета |
title | <текст> | заголовок родительского контейнера |
name | <текст> | имя виджета |
nameref | <текст> | аналог name (?) |
margin | <число> | ширина "рамки" вокруг контейнера |
spacing | <число> | промежуток между виджетами (применим только к контейнерам) |
Описание виджетов и их атрибутов
Корневой виджет
Именно в этот виджет вставляются все остальные. Имеет следующие атрибуты:
- title - заголовок окна
- width -- ширина окна
- height -- высота окна
Box
Контейнер для других виджетов.
- orientation "horizontal" - это развернутый вариант виджета hbox;
- orientation "vertical" - развернутый вариант виджета vbox.
Button
Кнопка с текстом и картинкой.
Атрибуты:
- text - текст на кнопке;
- pixmap - картинка из списка.
События:
- clicked - вызывается при нажатии кнопки.
CheckBox
Кнопка-флажок с двумя состояниями true или false.
- text - описание кнопки;
- state - состояние флажка. Если значение #t, то флажок выставлен. При значении #f флажок отсутствует;
- value - то же, что и state.
DateEdit
Виджет отображения даты, календаря.
- expanded - со значением #t дополнительно отображает календарь;
- value - атрибут для задания даты (строка формата ГГГГ-ММ-ДД).
TimeEdit
Отображает время.
- expanded - со значением #t добавляет графические часы;
- stop - остановка счета времени;
- start - запуск счета времени;
- value - задание времени.
Radio
Радиокнопка позволяет выбрать один пункт из набора, в пределах одного контейнера.
- state - состояние пункта. Данный пункт выбран при значении #t;
- text - описание пункта;
Edit
Однострочное текстовое поле ввода.
- echo - режим отображения. Возможные варианты: normal (по умолчанию), stars (звёздочки, для паролей), no (ввод не отображается);
- alterability - разрешение на изменение текста. Если значение #f, содержимое поля доступно только для чтения;
- text - содержимое поля;
- value - то же, что и text.
GridBox
Вертикальный контейнер "сетки". Основой способ организации виджетов на экране.
- columns - ширина стобцов сетки в процентном соотношении от общей ширины.
Label
Предназначен для отображения какой-либо надписи без возможности редактирования.
- text-wrap - отображение одной длинной строки в виде многострочного текста (#t/#f);
- text - отображаемый текст.
GroupBox
Объединение группы виджетов в один контейнер.
- checked - в случае значения #t рядом с заголовком отображается checkbox (если он не выделен, то содержимое группы неактивно и недоступно для работы);
- orientation - ориентация контейнера (horizontal/vertical);
- state - состояние checkbox в случае режима checked;
- title - заголовок группы.
ProgressBar
Строка прогресса некоторого процесса.
- maximum - максимальное допустимое значение, соответствует 100%;
- minimum - минимальное допустимое значение, соответствует 0%;
- text - информация в строке прогресса;
- value - текущее значение прогресса.
SpinBox
Поле со счетчиком для ввода чисел.
- maximum - максимальное допустимое значение;
- minimum - минимальное допустимое значение;
- step - шаг приращения значения;
- value - текущее значение.
TextBox
Многострочное текстовое поле ввода.
- alterability - разрешение на изменение текста. Если значение #f, содержимое поля доступно только для чтения;
- text - содержимое поля;
- append-text - добавить текст в конец поля;
- url - показать содержимое указанного файла.
FileSelect
Выбор файла из файловой системы, для дальнейшей работы с ним.
- filter - допустимые расширения файлов;
- hints - условие выбора файла (обычно используется значение existing_file для проверки на существование выбранного файла);
- title - заголовок;
- url - путь поиска файлов.
Пример:
(document:surround "/std/frame") (define fileselect (make-widget 'fileselect)) (define url (make-attribute 'url)) (define filter (make-attribute 'filter)) (define hints (make-attribute 'hints)) (gridbox columns "100" margin "100" (vbox (label text "Simple import certificate") (fileselect title (_"Import CA certificate") url "/" filter "*.cert *.crt *.pem" hints "existing_file")))
SplitBox
Контейнер с изменяемой шириной колонок.
- columns - изначальная ширина колонок.
ListBox
Прокручиваемый список, с возможностью создания нескольких столбцов.
Атрибуты
- columns - количество колонок в списке;
- header - заголовок таблицы, вектор из строк с названиями колонок;
- enumref - адрес списка данных;
- rows - возвращает список значений в виде единой строки;
- rows-clear - очищает список;
- append-row - добавление в конец списка новой строки;
- row-item - работа с отдельным полем в списке. Координаты задаются списком из двух значений '(строка столбец) или указанием порядкового номера строки;
- row-remove - удаляет строку с указанным порядковым номером;
- text - возвращает строку с содержимым первого поля активной строки;
- current - номер выделенной строки. Если ничего не выделено, то значение равно -1;
- count - возвращает количество строк в таблице.
События
- clicked - одинарный щелчок правой кнопки мышки по элементу списка;
- double-clicked - двойной щелчок правой кнопки мышки по элементу списка;
- selected - изменение активной строки;
- return-pressed - нажатиe Enter на активной строке списка;
- changed - любое действие с виджетом (не рекомендуется использовать).
Пример: Пример состоит из нескольких файлов:
index.scm
(document:surround "/std/frame") (gridbox columns 100 margin 100 align "center" (label align "center" text "Simple label") (document:id list_one (listbox columns 3 name "new_list" enumref "/tests/list_columns" row '#((column1 . "") (column2 . "") (column3 . "")) header (vector "column 1" "column 2" "column 3") (when selected (testlist value (list_one current)) (testlist2 value (list_one text)) (testlist3 value (list_one rows)) (testlist4 value (list_one row-item (list (list_one current) 2) ))) (when double-clicked (list_one row-remove (list_one current))) )) (listbox name "list_two") (edit name "counter" visibility #t activity #f) (edit name "column" visibility #t) (gridbox columns "0;100" align "left" width 200 (label colspan 2) (label align "left" text "current") (document:id testlist (edit name "testlist" value (list_one current))) (label value "text") (document:id testlist2 (edit name "testlist2")) (label text "count") (document:id testlist3 (edit name "testlist3")) (label value "row-item") (document:id testlist4 (edit name "testlist4")) ) )
ajax.scm
(define-module (ui tests ajax) :use-module (alterator ajax) :use-module (alterator algo) :use-module (alterator woo) :export (on-load)) (define (do-apply data) (form-update-value-list '("counter" "column") data)) (define (do-update . args) (catch/message (lambda() (do-apply (apply woo-read-first "/simple_list" 'counter (form-value "counter") 'column (form-value "column") 'language (form-value "language") args))))) (define (do-list_two) (do-update 'list_two (form-value "list_two"))) (define (ui-list) (let ((facility-list (woo-call "/simple_list/list_one"))) (form-update-enum "name" facility-list) (or (null? facility-list) (let ((name (woo-get-option (car facility-list) 'name))) (form-update-value "name" name) ; (ui-read-facility) )))) (define (on-load) (ui-list) (catch/message (lambda() (form-update-enum "list_two" (woo-list "/simple_list/list_two" 'language (form-value "language"))) (let ((data (woo-read-first "/simple_list" 'language (form-value "language")))) (form-update-value-list '("counter" "column" "list_two") data) ) (form-bind "list_two" "change" do-list_two))))
backend/simple_list (для list_one; работает без использования ajax.scm и list_two)
#!/bin/sh alterator_api_version=1 . alterator-sh-functions list_size() { for i in 0 1 2 3 4 do local name="${i}" write_table_item column0 "row-$i" column1 "$i" column2 "$(($i+$i))" column3 "$(($i+12))" done } alterator_export_proc list_size