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 |