home *** CD-ROM | disk | FTP | other *** search
/ PC World 2000 December / PCWorld_2000-12_cd.bin / Komunikace / Comanche / comanche.exe / lib / iwidgets2.2.0 / scripts / feedback.itk < prev    next >
Text File  |  1999-02-24  |  7KB  |  188 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:49:26 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 0 widgetDefault
  66. option add *Feedback.elementBorderWidth 2 widgetDefault
  67. option add *Feedback.relief flat widgetDefault
  68. option add *Feedback.labelPos n widgetDefault
  69. option add *Feedback.barWidth 200 widgetDefault
  70. option add *Feedback.barHeight 20 widgetDefault
  71. option add *Feedback.barColor blue widgetDefault
  72.  
  73. #
  74. # Usual options.
  75. #
  76. itk::usual Feedback {
  77.     keep -background -borderwidth -cursor \
  78.          -elementborderwidth -foreground -highlightcolor -highlightthickness \
  79.          -labelfont
  80. }
  81.  
  82. # ------------------------------------------------------------------
  83. #                          FEEDBACK
  84. # ------------------------------------------------------------------
  85. class ::iwidgets::Feedback {
  86.     inherit iwidgets::Labeledwidget
  87.  
  88.     constructor {args} {}
  89.  
  90.     itk_option define -steps steps Steps 10
  91.  
  92.     public method reset {}
  93.     public method step {{inc 1}}
  94.  
  95.     private variable _stepval 0
  96. }
  97.  
  98. #
  99. # Provide a lowercased access method for the Dialogshell class.
  100. proc ::iwidgets::feedback {pathName args} {
  101.     uplevel ::iwidgets::Feedback $pathName $args
  102. }
  103.  
  104. body ::iwidgets::Feedback::constructor {args} {
  105.   itk_option add hull.borderwidth hull.relief
  106.  
  107.   itk_component add spacer {
  108.     frame $itk_interior.spacer
  109.   } {
  110.     keep -background
  111.     rename -width -barwidth barWidth Width
  112.   }
  113.   pack $itk_component(spacer) -side top -padx 10
  114.  
  115.   itk_component add bar {
  116.     frame $itk_interior.bar -relief raised \
  117.         -borderwidth 2 -highlightthickness 0
  118.   } {
  119.     rename -background -barcolor barColor BarColor
  120.     rename -borderwidth -elementborderwidth elementBorderWidth BorderWidth
  121.     rename -height -barheight barHeight Height
  122.   }
  123.   pack $itk_component(bar) -side top -padx 10 -pady 2 -anchor w
  124.  
  125.   itk_component add percentage {
  126.     label $itk_interior.percentage -text "0%"
  127.   }
  128.   pack $itk_component(percentage) -side top -fill x -padx 2 -pady 2
  129.  
  130.   #
  131.   # Explicitly handle configs that may have been ignored earlier.
  132.   #
  133.   eval itk_initialize $args
  134. }
  135.  
  136. # ------------------------------------------------------------------
  137. #                            METHODS
  138. # ------------------------------------------------------------------
  139.  
  140. # ------------------------------------------------------------------
  141. # OPTION: -steps
  142. #
  143. # Set the total number of steps.
  144. # ------------------------------------------------------------------
  145. configbody ::iwidgets::Feedback::steps {
  146.   step 0
  147. }
  148.  
  149. # ------------------------------------------------------------------
  150. #                            METHODS
  151. # ------------------------------------------------------------------
  152.  
  153. # ------------------------------------------------------------------
  154. # METHOD: reset
  155. #
  156. # Resets the status bar to 0
  157. # ------------------------------------------------------------------
  158. body ::iwidgets::Feedback::reset {} {
  159.   set _stepval 0
  160.   step 0
  161. }
  162.  
  163. # ------------------------------------------------------------------
  164. # METHOD: step ?inc?
  165. #
  166. # Increase the value of the status bar by inc. Default of 1
  167. # ------------------------------------------------------------------
  168. body ::iwidgets::Feedback::step {{inc 1}} {
  169.   incr _stepval $inc
  170.   set fraction [expr 1.0*$_stepval/$itk_option(-steps)]
  171.  
  172.   if {$fraction > 1.0} {
  173.     set fraction 1
  174.   } elseif {$fraction < 0.0} {
  175.     set fraction 0
  176.   }
  177.   $itk_component(percentage) configure \
  178.       -text [format %.0f%% [expr 100.0*$fraction]]
  179.  
  180.   $itk_component(bar) configure \
  181.       -width [expr int($itk_option(-barwidth)*$fraction)]
  182.  
  183.   if {[winfo ismapped $itk_component(hull)]} {
  184.       update
  185.   }
  186. }
  187.