#!/bin/bash # This example requires bash. GTKDIALOG=gtkdialog progress() { for i in $(seq 0 10 100); do echo $i [ "$i" -le 30 ] && echo "Start..." [ "$i" -le 60 -a "$i" -gt 30 ] && echo "Middle..." [ "$i" -gt 60 ] && echo "End..." sleep 0.3 done; }; export -f progress progress_fast() { for i in $(seq 0 1 10000); do echo $((i/100)) [ "$i" -le 3000 ] && echo "Start..." [ "$i" -le 6000 -a "$i" -gt 3000 ] && echo "Middle..." [ "$i" -gt 6000 ] && echo "End..." #sleep 0.1 done; }; export -f progress_fast export BAR_DIALOG=' <window> <vbox> <frame Progress> <text> <label>Some text describing what is happening.</label> </text> <progressbar> <variable>PROGRESS_BAR</variable> <label>Some Text</label> <input>bash -c progress_fast</input> <action function="refresh">ENTRY</action> <action function="closewindow">BAR_DIALOG</action> <action>echo ready</action> </progressbar> </frame> <hbox> <button cancel> <action function="closewindow">BAR_DIALOG</action> </button> </hbox> </vbox> <variable>BAR_DIALOG</variable> </window> ' export MAIN_DIALOG=' <window> <vbox> <entry> <variable>ENTRY</variable> <input>date</input> </entry> <hbox> <button cancel></button> <button> <label>Launch</label> <action function="launch">BAR_DIALOG</action> </button> <button> <label>Close</label> <action function="exit">CLOSE</action> </button> </hbox> </vbox> </window> ' case $1 in -d | --dump) echo "$MAIN_DIALOG" "$BAR_DIALOG" ;; *) $GTKDIALOG --program=MAIN_DIALOG ;; esac