home *** CD-ROM | disk | FTP | other *** search
/ PC World 2000 December / PCWorld_2000-12_cd.bin / Komunikace / Comanche / comanche.exe / lib / iwidgets3.0.0 / scripts / feedback.itk < prev    next >
Text File  |  1999-02-24  |  8KB  |  208 lines

  1. #
  2. # Feedback
  3. # ----------------------------------------------------------------------
  4. # Implements a Feedback widget, to display feedback on the status of an 
  5. # process to the user. Display is given as a percentage and as a 
  6. # thermometer type bar. Options exist for adding a label and controlling its
  7. # position.
  8. #
  9. # ----------------------------------------------------------------------
  10. #  AUTHOR: Kris Raney                    EMAIL: kraney@spd.dsccc.com
  11. #
  12. #  @(#) $Id: feedback.itk,v 1.1 1998/07/27 18:53:05 stanton Exp $
  13. # ----------------------------------------------------------------------
  14. #            Copyright (c) 1996 DSC Technologies Corporation
  15. # ======================================================================
  16. # Permission to use, copy, modify, distribute and license this software
  17. # and its documentation for any purpose, and without fee or written
  18. # agreement with DSC, is hereby granted, provided that the above copyright
  19. # notice appears in all copies and that both the copyright notice and
  20. # warranty disclaimer below appear in supporting documentation, and that
  21. # the names of DSC Technologies Corporation or DSC Communications
  22. # Corporation not be used in advertising or publicity pertaining to the
  23. # software without specific, written prior permission.
  24. #
  25. # DSC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
  26. # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, AND NON-
  27. # INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND THE
  28. # AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE,
  29. # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. IN NO EVENT SHALL
  30. # DSC BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
  31. # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
  32. # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION,
  33. # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
  34. # SOFTWARE.
  35. # ======================================================================
  36.  
  37. # Acknowledgements:
  38. #
  39. # Special thanks go to Sam Shen(SLShen@lbl.gov), as this code is based on his 
  40. # feedback.tcl code from tk inspect. The original code is copyright 1995
  41. # Lawrence Berkeley Laboratory.
  42. #
  43. # This software is copyright (C) 1994 by the Lawrence Berkeley Laboratory.
  44. #  
  45. # Redistribution and use in source and binary forms, with or without
  46. # modification, are permitted provided that: (1) source code distributions
  47. # retain the above copyright notice and this paragraph in its entirety, (2)
  48. # distributions including binary code include the above copyright notice and
  49. # this paragraph in its entirety in the documentation or other materials
  50. # provided with the distribution, and (3) all advertising materials mentioning
  51. # features or use of this software display the following acknowledgement:
  52. # ``This product includes software developed by the University of California,
  53. # Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
  54. # the University nor the names of its contributors may be used to endorse
  55. # or promote products derived from this software without specific prior
  56. # written permission.
  57. #  
  58. # THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
  59. # WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
  60. # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  61.  
  62. #
  63. # Default resources.
  64. #
  65. option add *Feedback.borderWidth    2        widgetDefault
  66. option add *Feedback.labelPos        n        widgetDefault
  67. option add *Feedback.barHeight        20        widgetDefault
  68. option add *Feedback.troughColor    White        widgetDefault
  69. option add *Feedback.barColor        Blue            widgetDefault
  70.  
  71. #
  72. # Usual options.
  73. #
  74. itk::usual Feedback {
  75.     keep -background -cursor -foreground
  76. }
  77.  
  78. # ------------------------------------------------------------------
  79. #                          FEEDBACK
  80. # ------------------------------------------------------------------
  81. class iwidgets::Feedback {
  82.     inherit iwidgets::Labeledwidget
  83.  
  84.     constructor {args} {}
  85.     destructor {}
  86.  
  87.     itk_option define -steps steps Steps 10
  88.  
  89.     public {
  90.     method reset {}
  91.     method step {{inc 1}}
  92.     }
  93.  
  94.     private {
  95.     method _display
  96.  
  97.     variable _barwidth 0
  98.     variable _stepval 0
  99.     }
  100. }
  101.  
  102. #
  103. # Provide a lowercased access method for the Dialogshell class.
  104. proc ::iwidgets::feedback {pathName args} {
  105.     uplevel ::iwidgets::Feedback $pathName $args
  106. }
  107.  
  108. # ------------------------------------------------------------------
  109. #                        CONSTRUCTOR
  110. # ------------------------------------------------------------------
  111. body iwidgets::Feedback::constructor {args} {
  112.     itk_component add trough {
  113.     frame $itk_interior.trough -relief sunken
  114.     } {
  115.     usual
  116.     keep -borderwidth
  117.     rename -background -troughcolor troughColor TroughColor
  118.     rename -height -barheight barHeight Height
  119.     }
  120.  
  121.     itk_component add bar {
  122.     frame $itk_component(trough).bar -relief raised
  123.     } {
  124.     usual
  125.     keep -borderwidth
  126.     rename -background -barcolor barColor BarColor
  127.     rename -height -barheight barHeight Height
  128.     }
  129.     pack $itk_component(bar) -side left -fill y -anchor w
  130.  
  131.     itk_component add percentage {
  132.     label $itk_interior.percentage -text "0%"
  133.     }
  134.     grid $itk_component(trough) -row 1 -column 0 -sticky sew -padx 2 -pady 2
  135.     grid $itk_component(percentage) -row 2 -column 0 -sticky nsew -padx 2 -pady 2
  136.     grid rowconfigure $itk_interior 0 -weight 1
  137.     grid rowconfigure $itk_interior 1 -weight 1
  138.     grid columnconfigure $itk_interior 0 -weight 1
  139.  
  140.     eval itk_initialize $args
  141. }
  142.  
  143. # ------------------------------------------------------------------
  144. #                          DESTRUCTOR
  145. # ------------------------------------------------------------------
  146. body iwidgets::Feedback::destructor {} {
  147. }
  148.  
  149. # ------------------------------------------------------------------
  150. #                            OPTIONS
  151. # ------------------------------------------------------------------
  152.  
  153. # ------------------------------------------------------------------
  154. # OPTION: -steps
  155. #
  156. # Set the total number of steps.
  157. # ------------------------------------------------------------------
  158. configbody iwidgets::Feedback::steps {
  159.     step 0
  160. }
  161.  
  162. # ------------------------------------------------------------------
  163. #                            METHODS
  164. # ------------------------------------------------------------------
  165.  
  166. # -----------------------------------------------------------------------------
  167. # PROTECTED METHOD: _display 
  168. #
  169. # Displays the bar in the trough with the width set using the current number
  170. # of steps.
  171. # -----------------------------------------------------------------------------
  172. body iwidgets::Feedback::_display {} {
  173.     set troughwidth [winfo width $itk_component(trough)]
  174.     set _barwidth [expr $troughwidth.0/$itk_option(-steps)]
  175.     set fraction [expr int((1.0*$_stepval)/$itk_option(-steps)*100.0)]
  176.  
  177.     $itk_component(percentage) config -text "$fraction%"
  178.     $itk_component(bar) config -width [expr $_barwidth*$_stepval]
  179.  
  180.     update
  181. }
  182.  
  183. # ------------------------------------------------------------------
  184. # METHOD: reset
  185. #
  186. # Resets the status bar to 0
  187. # ------------------------------------------------------------------
  188. body iwidgets::Feedback::reset {} {
  189.     set _stepval 0
  190.     _display 
  191. }
  192.  
  193. # ------------------------------------------------------------------
  194. # METHOD: step ?inc?
  195. #
  196. # Increase the value of the status bar by inc. Default to 1
  197. # ------------------------------------------------------------------
  198. body iwidgets::Feedback::step {{inc 1}} {
  199.  
  200.     if {$_stepval >= $itk_option(-steps)} {
  201.     return
  202.     }
  203.  
  204.     incr _stepval $inc
  205.     _display 
  206. }
  207.