slitaz-tools annotate tinyutils/tazdialog @ rev 190

Add tazdialog
author Pascal Bellard <pascal.bellard@slitaz.org>
date Wed May 14 13:52:28 2008 +0000 (2008-05-14)
parents
children 564833d84fbb
rev   line source
pascal@190 1 #!/bin/sh
pascal@190 2 # tazdialog - SliTaz GNU/Linux dialog wrapper to gtkdialog.
pascal@190 3 #
pascal@190 4 # (C) 2008 SliTaz - GNU General Public License v3.
pascal@190 5 #
pascal@190 6 # Author : Pascal Bellard <pascal.bellard@slitaz.org>
pascal@190 7 #
pascal@190 8
pascal@190 9 toutf8()
pascal@190 10 {
pascal@190 11 echo -e $1 | sed -e 's/\\Z.//g' | tr 'àâäçéèêëîïûü' 'aaaceeeeiiuu'
pascal@190 12 }
pascal@190 13
pascal@190 14 if [ -z "$XAUTHORITY" ]; then
pascal@190 15 [ -n "$TEXTDIALOG" ] || TEXTDIALOG="dialog"
pascal@190 16 export DIALOG=$TEXTDIALOG
pascal@190 17 $TEXTDIALOG "$@"
pascal@190 18 return $?
pascal@190 19 else
pascal@190 20 title=""
pascal@190 21 backtitle=""
pascal@190 22 lines="10"
pascal@190 23 cols="10"
pascal@190 24 [ -n "$ICON" ] || ICON="media-flash"
pascal@190 25 buttonok=""
pascal@190 26 buttoncancel=""
pascal@190 27 buttonextra=""
pascal@190 28 yeslabel="ok"
pascal@190 29 nolabel="cancel"
pascal@190 30 extralabel="rename"
pascal@190 31 gauge=""
pascal@190 32 inputbox=""
pascal@190 33 default=""
pascal@190 34
pascal@190 35 buttonhelp=""
pascal@190 36 checklist=""
pascal@190 37 menu=""
pascal@190 38 textbox=""
pascal@190 39 args=""
pascal@190 40 while [ -n "$1" ]; do
pascal@190 41 case "$1" in
pascal@190 42 --title) title="$2"; shift 2;;
pascal@190 43 --backtitle) backtitle="$2"; shift 2;;
pascal@190 44 --clear|--colors) shift;;
pascal@190 45 --yes-label) yeslabel="$2"; shift 2;;
pascal@190 46 --no-label) nolabel="$2"; shift 2;;
pascal@190 47 --extra-label) extralabel="$2"; shift 2;;
pascal@190 48 --extra-button) buttonextra="1"; shift;;
pascal@190 49 --help-button) buttonhelp="1"; shift;;
pascal@190 50 --msgbox) msgbox="$2"; lines="$3"; cols="$4"
pascal@190 51 buttonok="1"; break;;
pascal@190 52 --yesno) msgbox="$2"; lines="$3"; cols="$4"
pascal@190 53 buttonok="1"; buttoncancel="1"; break;;
pascal@190 54 --gauge) msgbox="$2"; lines="$3"; cols="$4"
pascal@190 55 percent="$5"; gauge="1"; break;;
pascal@190 56 --inputbox) msgbox="$2"; lines="$3"; cols="$4"
pascal@190 57 default="$5"
pascal@190 58 buttonok="1"; buttoncancel="1"
pascal@190 59 inputbox="1"; break;;
pascal@190 60
pascal@190 61 --checklist) msgbox="$2"; lines="$3"; cols="$4"; inlines="$5"
pascal@190 62 buttonok="1"; checklist="1"; shift 5; args="$@"; break;;
pascal@190 63 --menu) msgbox="$2"; lines="$3"; cols="$4"; inlines="$5"
pascal@190 64 buttonok="1"; buttoncancel="1"
pascal@190 65 menu="1"; shift 5; args="$@"; break;;
pascal@190 66 --textbox) textbox="$2"; lines="$3"; cols="$4"
pascal@190 67 buttonok="1"; break;;
pascal@190 68 *) echo "Unknown arg $1"; return 255;;
pascal@190 69 esac
pascal@190 70 done
pascal@190 71 fi
pascal@190 72 msgbox="$(toutf8 "$msgbox")"
pascal@190 73 textbox="$(toutf8 "$textbox")"
pascal@190 74 BOX="<window"
pascal@190 75 [ -n "$backtitle" ] && BOX="$BOX title=\"$backtitle\""
pascal@190 76 [ -n "$ICON" ] && BOX="$BOX icon-name=\"$ICON\""
pascal@190 77 BOX="$BOX> <vbox>"
pascal@190 78 [ -n "$title" ] && BOX="$BOX <text use-markup=\"true\"> \
pascal@190 79 <label> \"<b>$title</b>\" </label> </text>"
pascal@190 80 #[ -n "$msgbox" ] && BOX="$BOX <text wrap=\"true\" \
pascal@190 81 #width-chars=\"$cols\" use-markup=\"true\"><label> \"$msgbox\" </label></text>"
pascal@190 82 [ -n "$msgbox" ] && BOX="$BOX <text wrap=\"true\" \
pascal@190 83 use-markup=\"true\"><label> \"$msgbox\" </label></text>"
pascal@190 84 [ -n "$gauge" ] && BOX="$BOX <progressbar><input>while read data; do \
pascal@190 85 echo \$data; done</input><action type=\"exit\">0</action></progressbar>"
pascal@190 86 [ -n "$default" ] && default="<default>$default</default>"
pascal@190 87 [ -n "$inputbox" ] && BOX="$BOX <entry>$default<variable>OUTPUT</variable> \
pascal@190 88 </entry>"
pascal@190 89 #[ -n "$textbox" ] && BOX="$BOX <text><input file width-chars=\"$cols\" \
pascal@190 90 #height=\"$lines\" wrap=\"true\">$textbox</input></text>"
pascal@190 91 [ -n "$textbox" ] && BOX="$BOX <text><input file \
pascal@190 92 wrap=\"true\">$textbox</input></text>"
pascal@190 93 [ -n "$menu" ] && BOX="$BOX <list>$(
pascal@190 94 set -- $args | while [ -n "$1" ]; do
pascal@190 95 echo "<item>$1 $2</item>"
pascal@190 96 shift 2
pascal@190 97 done) <variable>LIST</variable> </list>"
pascal@190 98 [ -n "$checklist" ] && BOX="$BOX $(
pascal@190 99 i=0; set -- $args | while [ -n "$1" ]; do
pascal@190 100 [ "$3" = "on" ] && c=" active=\"true\"" || c=""
pascal@190 101 echo "<checkbox$c><label>$1 $2</label><variable>CHECK$i</variable></checkbox>"
pascal@190 102 i=$(($i+1))
pascal@190 103 shift 3
pascal@190 104 done)"
pascal@190 105 [ "$yeslabel" = "ok" ] && yeslabel="" || yeslabel="<label>$yeslabel</label>"
pascal@190 106 [ "$nolabel" = "cancel" ] && nolabel="" || nolabel="<label>$nolabel</label>"
pascal@190 107 [ -n "$buttonok$buttonextra$buttoncancel" ] && BOX="$BOX <hbox>"
pascal@190 108 [ -n "$buttonok" ] && BOX="$BOX <button ok>$yeslabel \
pascal@190 109 <action type=\"exit\">0</action> </button>"
pascal@190 110 [ -n "$buttonextra" ] && BOX="$BOX <button><label>$extralabel</label> \
pascal@190 111 <input file icon=\"forward\"> </input> <action type=\"exit\">3</action> \
pascal@190 112 </button>"
pascal@190 113 [ -n "$buttoncancel" ] && BOX="$BOX <button cancel>$nolabel \
pascal@190 114 <action type=\"exit\">1</action> </button>"
pascal@190 115 [ -n "$buttonhelp" ] && BOX="$BOX <button help> <action type=\"exit\">2\
pascal@190 116 </action> </button>"
pascal@190 117 [ -n "$buttonok$buttonextra$buttoncancel" ] && BOX="$BOX </hbox>"
pascal@190 118 BOX="$BOX </vbox></window>"
pascal@190 119 export BOX
pascal@190 120 status=$(if [ -n "$gauge" ]; then
pascal@190 121 ( while read line; do
pascal@190 122 case "$line" in
pascal@190 123 [0-9]*) echo $line;;
pascal@190 124 *);;
pascal@190 125 esac
pascal@190 126 done ; echo 100) | gtkdialog --center --program=BOX
pascal@190 127 else
pascal@190 128 gtkdialog --center --program=BOX
pascal@190 129 fi 2> /dev/null | while read line; do
pascal@190 130 case "$line" in
pascal@190 131 *OUTPUT*) eval $line
pascal@190 132 echo "$OUTPUT" 1>&2 ;;
pascal@190 133 *CHECK*true*) line=${line%=*}; line=${line#CHECK}
pascal@190 134 set -- $args
pascal@190 135 [ $line -eq 0 ] || shift $(($line * 3))
pascal@190 136 echo -n "\"$1\" " 1>&2 ;;
pascal@190 137 *LIST=*) eval $line; set -- $LIST
pascal@190 138 echo "$1" 1>&2 ;;
pascal@190 139 *EXIT*abort*) echo 255;;
pascal@190 140 *EXIT*) eval $line
pascal@190 141 echo $EXIT ;;
pascal@190 142 esac
pascal@190 143 done)
pascal@190 144 exit $status