#/////////////////////////////////////////////////////////////////////////////
# FILE    : progressbar.tcl
# PURPOSE : facilitates the use of a progress bar in tcl
#/////////////////////////////////////////////////////////////////////////////

namespace eval ::progressbar {
  variable data
}

#/////////////////////////////////////////////////////////////////////////////
proc ::progressbar::Show { {title ""} {w 20} {h 2} {tolvar {}}} {
#/////////////////////////////////////////////////////////////////////////////
  variable data
  
  set cmd {}
  set stop {}
  
  if { [llength $tolvar] } {
    set cmd "::progressbar::AbortAndDestroy $tolvar"
    set stop [mc "Abort"]
  }
  
  ProgressDlg .__ProgressBarDialog -title  $title \
    -variable     ::progressbar::data(var) \
    -textvariable ::progressbar::data(txt) \
    -width $w -height $h -stop $stop -command $cmd
  wm protocol .__ProgressBarDialog WM_DELETE_WINDOW [list ::progressbar::Destroy]   
  set data(var) 0
  update
}


#/////////////////////////////////////////////////////////////////////////////
proc ::progressbar::Destroy { } {
#/////////////////////////////////////////////////////////////////////////////
  variable data
      
  destroy .__ProgressBarDialog
  set data(var) ""
  set data(txt) ""
}


#/////////////////////////////////////////////////////////////////////////////
proc ::progressbar::Set { p } {
#/////////////////////////////////////////////////////////////////////////////
  variable data
			        
  set data(var) $p
  update
}


#/////////////////////////////////////////////////////////////////////////////
proc ::progressbar::SetText { t } {
#/////////////////////////////////////////////////////////////////////////////
  variable data
				      
  set data(txt) $t
  update
}


#/////////////////////////////////////////////////////////////////////////////
proc ::progressbar::AbortAndDestroy { tolvar } {
#/////////////////////////////////////////////////////////////////////////////
  ::tol::console eval "Real $tolvar := (1.0)"
  ::tol::console stack release $tolvar
  ::progressbar::Destroy
}
