Шрифт:
Интервал:
Закладка:
#! /bin/sh
DIALOG=${DIALOG=dialog}
# ждем указанное количество секунд
left=10
unit="секунд"
while test $left != 0
do
$DIALOG --sleep 1
--title "INFO BOX"
--infobox "Это информационный бокс. Он отличается от
msgbox тем, что не ждёт, пока пользователь нажмет Enter,
а прекращает работу по истечении времени
(в данном примере - 10 секунд).
У вас $left $unit чтобы прочитать это сообщение..." 10 52
left=`expr $left — 1`
test $left = 1 && unit="second"
done
Параметр --sleep 1 означает, что программа dialog будет перерисовывать окно через одну секунду. Параметр --title задает заголовок виджита, --infobox — определяет тип виджита, после определения виджита следует отображаемое сообщение, а потом — размер виджита.
В цикле while мы проверяем, сколько секунд осталось, уменьшая значение переменной left.
25.3. Виджит Yes-no
Часто встречаются диалоговые окна, спрашивающие пользователя, согласен ли он с действиями программы, например, «Вы точно хотите выйти?» или «Удалить этот файл?». Пользователю же предлагается два варианта ответа — Да или Нет. Для организации такого диалога предназначен виджит yes-no.
Следующий листинг демонстрирует работу с этим виджитом:
Листинг 25.3. Работа с виджитом yes-no
#!/bin/sh
DIALOG=${DIALOG=dialog}
$DIALOG --title "YES/NO BOX" --clear
--yesno "Отформатировать /dev/hda1?" 5 41
case $? in
0)
echo "Да.";;
1)
echo "Нет.";;
255)
echo "ESC.";;
esac
Рис. 25.2. Виджит yes-no
Виджит используется так же, как и предыдущие: название виджита (yesno), текстовое сообщение, размеры виджита. Программа dialog возвращает следующие значения:
♦ 0, если пользователь нажал кнопку Yes;
♦ 1, если пользователь нажал кнопку No;
♦ 255, если пользователь нажал клавишу Esc.
25.4. Окно ввода текста
Следующим по частоте применения после информационных виджитов и виджита yes-no следует виджит ввода текстовой информации — Inputbox. Принцип работы данного виджита следующий:
♦ Мы определяем имя временного файла, в который будет записано введенное пользователем сообщение.
♦ Вызываем программу dialog с параметром --inputbox.
♦ Перенаправляем вывод программы во временный файл (программа выведет введенное пользователем значение).
♦ Выводим или обрабатываем каким-либо другим способом содержимое временного файла.
Листинг 25.4. Виджит Inputbox
#!/bin/sh
DIALOG=${DIALOG=dialog}
tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/test$$
trap "rm -f $tempfile" 0 1 2 5 15
$DIALOG --title "INPUT BOX" --clear
--inputbox "Данный виджит используется для ввода
информации nn
Введите свое имя:" 16 51 2 > $tempfile
retval=$?
case $retval in
0)
echo "Вы ввели `cat $tempfile`";;
1)
echo "Нажата Cancel";;
255)
if test -s $tempfile ; then
cat $tempfile
else
echo "Нажата ESC."
fi
;;
esac
Рис. 25.3. Виджит InputBox
Значения, возвращаемые программой dialog:
♦ 0, если пользователь что-то ввел и нажал Enter или просто нажал <Ввод>, не введя ничего (тогда временный файл будет пуст);
♦ 1, если пользователь нажал Cancel;
♦ 255, если пользователь нажал Esc.
25.5. Зависимые и независимые переключатели
Программа dialog позволяет вам использовать в своих сценариях зависимые и независимые переключатели. Зависимые переключатели реализуются виджитом radiolist, а независимые — checklist.
Листинг 25.5. Независимые переключатели
#!/bin/sh
DIALOG=${DIALOG=dialog}
tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/test$$
trap "rm -f $tempfile" 0 1 2 5 15
$DIALOG --backtitle "Пример"
--title "Независимые переключатели"
--checklist "Данный пример демонстрирует работу независимых n
переключателей, реализуемых с помощью пакета Dialog n
Используйте ПРОБЕЛ для включения или выключения переключателей.
nn
Какие произведения вы читали?" 20 61 5
"Почти как люди" "Саймак" off
"Фауст" "Гете" ON
"Мастер и Маргарита" "Булгаков" off
"Мир теней" "Саймак" off
"Демон" "Лермонтов" on 2> $tempfile
retval=$?
choice=`cat $tempfile`
case $retval in
0)
echo "Вы выбрали '$choice'";;
1)
echo "Нажата Cancel";;
255)
echo "Нажата ESC";;
esac
Рис. 25.4. Независимые переключатели
Выбранные пользователем значения помещаются во временный файл, который вам нужно будет обработать. Сейчас мы просто выведем его на консоль. Элемент списка checklist может находиться в одном из положений — On или Off. Эти значения не чувствительны к регистру. Во временный файл выводятся только включенные переключатели.
Работа с виджитом radiolist осуществляется так же, как и в виджитом checklist, за исключением того, что может быть активным лишь один элемент и во временный файл будет записан именно этот элемент.
Листинг 25.6. Зависимые переключатели
#!/bin/sh
DIALOG=${DIALOG=dialog}
tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/test$$
trap 'rm -f $tempfile" 0 1 2 5 15
$DIALOG --backtitle "Пример"
--title "RADIOLIST BOX" --clear
--radiolist "Это список зависимых переключателей n
Он позволяет выбрать только один вариант из списка n
Какую из этих книг вы читали последней?" 2 0 81 5
"Почти как люди" "Саймак" off
"Фауст" "Гете" off
"Мастер и Маргарита" "Булгаков" ON
"Мир теней" "Саймак" off
"Демон" "Лермонтов" on 2> $tempfile
retval=$?
choice=`cat $tempfile`
case $retval in
0)
echo "Вы выбрали '$choice'";;
1)
echo "Нажата Cancel";;
255)
echo "Нажата ESC";;
esac
25.6. Организация меню
Виджит MenuBox очень похож на radiolist — они прямо-таки братья-близнецы, только у menubox нет слева переключателя включено/выключено. Использовать MenuBox нужно так же, как и radiolist, но не указывая on или off для элементов меню.
Листинг 25.7. Меню
#!/bin/sh
DIALOG=${DIALOG=dialog}
tempfile=`tempfile 2>/dev/null` ||( tempfile=/tmp/test$$
trap "rm -f $tempfile" 0 1 2 5 15
$DIALOG --clear --title "MENU BOX"
--menu "Этот виджит поможет вам организовать небольшое меню n
MENU BOX предоставляет пользователю выбрать один вариант
из списка n
Данный виджит также позволяет прокручивать возможные варианты n
Вы можете использовать стрелки ВВЕРХ/ВНИЗ, а также клавиши n
1-9 для выбора.n
Выберите вашу ОС:" 2 0 71 4
"Linux" "А что, разве есть другие операционные системы"
"FreeBSD" "Это лучшая ОС"
"Windows" "Мы кроме Windows ничего не видели..."
"MSDOS" "На моей двойке ничего другого не запускается :(" 2> $tempfile
retval=$?
choice=`cat $tempfile`
case $retval in
0)
echo "Ваш выбор '$choice'";;
1)
echo "Нажата Cancel";;
255)
echo "Нажата Esc.";;
esac
Рис. 25.5. Виджит menubox
25.7. Календарь
Этот виджит позволяет пользователю удобно ввести дату. Работать с ним нужно так: с помощью клавиши Tab выбираете нужный элемент управления: кнопка OK, Cancel, поле изменения месяца, поле изменения года, поле выбора числа; с помощью стрелок вверх/вниз указываете нужное значения месяца, года, числа и нажимаете <Ввод>. Выбранная вами дата будет отображена на консоли.
Листинг 25.8. Календарь
#!/bin/sh
: ${DIALOG=dialog}
USERDATE=`$DIALOG --stdout --title "CALENDAR" —calendar
"Выберите дату..."
0 0 1 1 2004`
case $? in
0)
echo "Вы выбрали дату: $USERDATE.";;
1)
echo "Нажата Cancel.";;
255)
- Операционная система UNIX - Андрей Робачевский - Программное обеспечение
- Разработка приложений в среде Linux. Второе издание - Майкл Джонсон - Программное обеспечение
- Искусство программирования для Unix - Эрик Реймонд - Программное обеспечение
- Linux - Алексей Стахнов - Программное обеспечение
- Fedora 8 Руководство пользователя - Денис Колисниченко - Программное обеспечение
- Недокументированные и малоизвестные возможности Windows XP - Роман Клименко - Программное обеспечение
- Изучаем Windows Vista. Начали! - Дмитрий Донцов - Программное обеспечение
- Windows Vista - Виталий Леонтьев - Программное обеспечение
- Архитектура операционной системы UNIX - Морис Бах - Программное обеспечение
- Windows Vista. Трюки и эффекты - Юрий Зозуля - Программное обеспечение