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 / scrolledframe.itk < prev    next >
Text File  |  1999-02-24  |  9KB  |  251 lines

  1. #
  2. # Scrolledframe
  3. # ----------------------------------------------------------------------
  4. # Implements horizontal and vertical scrollbars around a childsite
  5. # frame.  Includes options to control display of scrollbars.
  6. #
  7. # ----------------------------------------------------------------------
  8. #  AUTHOR: Mark Ulferts                        mulferts@austin.dsccc.com 
  9. #
  10. #  @(#) $Id: scrolledframe.itk,v 1.2 1998/08/11 14:42:13 welch Exp $
  11. # ----------------------------------------------------------------------
  12. #            Copyright (c) 1995 DSC Technologies Corporation
  13. # ======================================================================
  14. # Permission to use, copy, modify, distribute and license this software 
  15. # and its documentation for any purpose, and without fee or written 
  16. # agreement with DSC, is hereby granted, provided that the above copyright 
  17. # notice appears in all copies and that both the copyright notice and 
  18. # warranty disclaimer below appear in supporting documentation, and that 
  19. # the names of DSC Technologies Corporation or DSC Communications 
  20. # Corporation not be used in advertising or publicity pertaining to the 
  21. # software without specific, written prior permission.
  22. # DSC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING 
  23. # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, AND NON-
  24. # INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND THE
  25. # AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, 
  26. # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. IN NO EVENT SHALL 
  27. # DSC BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR 
  28. # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, 
  29. # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION,
  30. # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS 
  31. # SOFTWARE.
  32. # ======================================================================
  33.  
  34. #
  35. # Usual options.
  36. #
  37. itk::usual Scrolledframe {
  38.     keep -activebackground -activerelief -background -borderwidth -cursor \
  39.      -elementborderwidth -foreground -highlightcolor -highlightthickness \
  40.      -jump -labelfont -troughcolor
  41. }
  42.  
  43. # ------------------------------------------------------------------
  44. #                            SCROLLEDFRAME
  45. # ------------------------------------------------------------------
  46. class iwidgets::Scrolledframe {
  47.     inherit iwidgets::Scrolledwidget
  48.  
  49.     constructor {args} {}
  50.     destructor {}
  51.  
  52.     public method childsite {} 
  53.     public method justify {direction} 
  54.     public method xview {args} 
  55.     public method yview {args} 
  56.  
  57.     protected method _configureCanvas {} 
  58.     protected method _configureFrame {} 
  59. }
  60.  
  61. #
  62. # Provide a lowercased access method for the Scrolledframe class.
  63. proc ::iwidgets::scrolledframe {pathName args} {
  64.     uplevel ::iwidgets::Scrolledframe $pathName $args
  65. }
  66.  
  67. #
  68. # Use option database to override default resources of base classes.
  69. #
  70. option add *Scrolledframe.width 100 widgetDefault
  71. option add *Scrolledframe.height 100 widgetDefault
  72. option add *Scrolledframe.labelPos n widgetDefault
  73.  
  74. # ------------------------------------------------------------------
  75. #                        CONSTRUCTOR
  76. # ------------------------------------------------------------------
  77. body iwidgets::Scrolledframe::constructor {args} {
  78.     itk_option remove iwidgets::Labeledwidget::state
  79.  
  80.     #
  81.     # Create a clipping frame which will provide the border for
  82.     # relief display.
  83.     #
  84.     itk_component add clipper {
  85.     frame $itk_interior.clipper 
  86.     } {
  87.     usual
  88.  
  89.     keep -borderwidth -relief 
  90.     }    
  91.     grid $itk_component(clipper) -row 0 -column 0 -sticky nsew
  92.     grid rowconfigure $_interior 0 -weight 1
  93.     grid columnconfigure $_interior 0 -weight 1
  94.  
  95.     # 
  96.     # Create a canvas to scroll
  97.     #
  98.     itk_component add canvas {
  99.     canvas $itk_component(clipper).canvas \
  100.         -height 1.0 -width 1.0 \
  101.                 -scrollregion "0 0 1 1" \
  102.                 -xscrollcommand \
  103.         [code $this _scrollWidget $itk_interior.horizsb] \
  104.         -yscrollcommand \
  105.         [code $this _scrollWidget $itk_interior.vertsb] \
  106.             -highlightthickness 0 -takefocus 0
  107.     } {
  108.     ignore -highlightcolor -highlightthickness
  109.     keep -background -cursor
  110.     }
  111.     grid $itk_component(canvas) -row 0 -column 0 -sticky nsew
  112.     grid rowconfigure $itk_component(clipper) 0 -weight 1
  113.     grid columnconfigure $itk_component(clipper) 0 -weight 1
  114.     
  115.     # 
  116.     # Configure the command on the vertical scroll bar in the base class.
  117.     #
  118.     $itk_component(vertsb) configure \
  119.     -command [code $itk_component(canvas) yview]
  120.  
  121.     #
  122.     # Configure the command on the horizontal scroll bar in the base class.
  123.     #
  124.     $itk_component(horizsb) configure \
  125.         -command [code $itk_component(canvas) xview]
  126.     
  127.     #
  128.     # Handle configure events on the canvas to adjust the frame size
  129.     # according to the scrollregion.
  130.     #
  131.     bind $itk_component(canvas) <Configure> [code $this _configureCanvas]
  132.     
  133.     #
  134.     # Create a Frame inside canvas to hold widgets to be scrolled 
  135.     #
  136.     itk_component add -protected sfchildsite {
  137.     frame $itk_component(canvas).sfchildsite 
  138.     } {
  139.     keep -background -cursor
  140.     }
  141.     pack $itk_component(sfchildsite) -fill both -expand yes
  142.     $itk_component(canvas) create window 0 0 -tags frameTag \
  143.             -window $itk_component(sfchildsite) -anchor nw
  144.     set itk_interior $itk_component(sfchildsite)
  145.     bind $itk_component(sfchildsite) <Configure> [code $this _configureFrame]
  146.     
  147.     #
  148.     # Initialize the widget based on the command line options.
  149.     #
  150.     eval itk_initialize $args
  151. }
  152.  
  153. # ------------------------------------------------------------------
  154. #                           DESTURCTOR
  155. # ------------------------------------------------------------------
  156. body iwidgets::Scrolledframe::destructor {} {
  157. }
  158.  
  159.  
  160. # ------------------------------------------------------------------
  161. #                            METHODS
  162. # ------------------------------------------------------------------
  163.  
  164. # ------------------------------------------------------------------
  165. # METHOD: childsite
  166. #
  167. # Returns the path name of the child site widget.
  168. # ------------------------------------------------------------------
  169. body iwidgets::Scrolledframe::childsite {} {
  170.     return $itk_component(sfchildsite)
  171. }
  172.  
  173. # ------------------------------------------------------------------
  174. # METHOD: justify
  175. #
  176. # Justifies the scrolled region in one of four directions: top,
  177. # bottom, left, or right.
  178. # ------------------------------------------------------------------
  179. body iwidgets::Scrolledframe::justify {direction} {
  180.     if {[winfo ismapped $itk_component(canvas)]} {
  181.     update idletasks
  182.     
  183.     switch $direction {
  184.         left {
  185.         $itk_component(canvas) xview moveto 0
  186.         }
  187.         right {
  188.         $itk_component(canvas) xview moveto 1
  189.         }
  190.         top {
  191.         $itk_component(canvas) yview moveto 0
  192.         }
  193.         bottom {
  194.         $itk_component(canvas) yview moveto 1
  195.         }
  196.         default {
  197.         error "bad justify argument \"$direction\": should be\
  198.             left, right, top, or bottom"
  199.         }
  200.     }
  201.     }
  202. }
  203.  
  204. # ------------------------------------------------------------------
  205. # METHOD: xview index
  206. #
  207. # Adjust the view in the frame so that character position index
  208. # is displayed at the left edge of the widget.
  209. # ------------------------------------------------------------------
  210. body iwidgets::Scrolledframe::xview {args} {
  211.     return [eval $itk_component(canvas) xview $args]
  212. }
  213.  
  214. # ------------------------------------------------------------------
  215. # METHOD: yview index
  216. #
  217. # Adjust the view in the frame so that character position index
  218. # is displayed at the top edge of the widget.
  219. # ------------------------------------------------------------------
  220. body iwidgets::Scrolledframe::yview {args} {
  221.     return [eval $itk_component(canvas) yview $args]
  222. }
  223.  
  224. # ------------------------------------------------------------------
  225. # PRIVATE METHOD: _configureCanvas 
  226. #
  227. # Responds to configure events on the canvas widget.  When canvas 
  228. # changes size, adjust frame size.
  229. # ------------------------------------------------------------------
  230. body iwidgets::Scrolledframe::_configureCanvas {} {
  231.     set sr [$itk_component(canvas) cget -scrollregion]
  232.     set srw [lindex $sr 2]
  233.     set srh [lindex $sr 3]
  234.     
  235.     $itk_component(sfchildsite) configure -height $srh -width $srw
  236. }
  237.  
  238. # ------------------------------------------------------------------
  239. # PRIVATE METHOD: _configureFrame 
  240. #
  241. # Responds to configure events on the frame widget.  When the frame 
  242. # changes size, adjust scrolling region size.
  243. # ------------------------------------------------------------------
  244. body iwidgets::Scrolledframe::_configureFrame {} {
  245.     $itk_component(canvas) configure \
  246.         -scrollregion [$itk_component(canvas) bbox frameTag] 
  247. }
  248.  
  249.