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 / scrolledcanvas.itk < prev    next >
Text File  |  1999-02-24  |  17KB  |  478 lines

  1. #
  2. # Scrolledcanvas
  3. # ----------------------------------------------------------------------
  4. # Implements horizontal and vertical scrollbars around a canvas childsite
  5. # Includes options to control display of scrollbars.  The standard
  6. # canvas options and methods are supported.
  7. #
  8. # ----------------------------------------------------------------------
  9. #  AUTHOR: Mark Ulferts                        mulferts@austin.dsccc.com 
  10. #
  11. #  @(#) $Id: scrolledcanvas.itk,v 1.1 1998/07/27 18:53:15 stanton Exp $
  12. # ----------------------------------------------------------------------
  13. #            Copyright (c) 1995 DSC Technologies Corporation
  14. # ======================================================================
  15. # Permission to use, copy, modify, distribute and license this software 
  16. # and its documentation for any purpose, and without fee or written 
  17. # agreement with DSC, is hereby granted, provided that the above copyright 
  18. # notice appears in all copies and that both the copyright notice and 
  19. # warranty disclaimer below appear in supporting documentation, and that 
  20. # the names of DSC Technologies Corporation or DSC Communications 
  21. # Corporation not be used in advertising or publicity pertaining to the 
  22. # software without specific, written prior permission.
  23. # DSC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING 
  24. # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, AND NON-
  25. # INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND THE
  26. # AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, 
  27. # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. IN NO EVENT SHALL 
  28. # DSC BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR 
  29. # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, 
  30. # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION,
  31. # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS 
  32. # SOFTWARE.
  33. # ======================================================================
  34.  
  35. #
  36. # Usual options.
  37. #
  38. itk::usual Scrolledcanvas {
  39.     keep -activebackground -activerelief -background -borderwidth -cursor \
  40.      -elementborderwidth -foreground -highlightcolor -highlightthickness \
  41.      -insertbackground -insertborderwidth -insertofftime -insertontime \
  42.      -insertwidth -jump -labelfont -selectbackground -selectborderwidth \
  43.      -selectforeground -textbackground -troughcolor
  44. }
  45.  
  46. # ------------------------------------------------------------------
  47. #                            SCROLLEDCANVAS
  48. # ------------------------------------------------------------------
  49. class iwidgets::Scrolledcanvas {
  50.     inherit iwidgets::Scrolledwidget
  51.  
  52.     constructor {args} {}
  53.     destructor {}
  54.  
  55.     itk_option define -autoresize autoResize AutoResize 1 
  56.     itk_option define -automargin autoMargin AutoMargin 0
  57.  
  58.     public method childsite {} 
  59.     public method justify {direction} 
  60.  
  61.     public method addtag {args} 
  62.     public method bbox {args} 
  63.     public method bind {args} 
  64.     public method canvasx {args} 
  65.     public method canvasy {args} 
  66.     public method coords {args} 
  67.     public method create {args} 
  68.     public method dchars {args} 
  69.     public method delete {args} 
  70.     public method dtag {args} 
  71.     public method find {args} 
  72.     public method focus {args} 
  73.     public method gettags {args} 
  74.     public method icursor {args} 
  75.     public method index {args} 
  76.     public method insert {args} 
  77.     public method itemconfigure {args} 
  78.     public method itemcget {args} 
  79.     public method lower {args} 
  80.     public method move {args} 
  81.     public method postscript {args} 
  82.     public method raise {args} 
  83.     public method scale {args} 
  84.     public method scan {args} 
  85.     public method select {args} 
  86.     public method type {args} 
  87.     public method xview {args} 
  88.     public method yview {args} 
  89. }
  90.  
  91. #
  92. # Provide a lowercased access method for the Scrolledcanvas class.
  93. proc ::iwidgets::scrolledcanvas {pathName args} {
  94.     uplevel ::iwidgets::Scrolledcanvas $pathName $args
  95. }
  96.  
  97. #
  98. # Use option database to override default resources of base classes.
  99. #
  100. option add *Scrolledcanvas.width 200 widgetDefault
  101. option add *Scrolledcanvas.height 230 widgetDefault
  102. option add *Scrolledcanvas.labelPos n widgetDefault
  103.  
  104. # ------------------------------------------------------------------
  105. #                        CONSTRUCTOR
  106. # ------------------------------------------------------------------
  107. body iwidgets::Scrolledcanvas::constructor {args} {
  108.     #
  109.     # Create a clipping frame which will provide the border for
  110.     # relief display.
  111.     #
  112.     itk_component add clipper {
  113.     frame $itk_interior.clipper
  114.     } {
  115.     usual
  116.  
  117.     keep -borderwidth -relief -highlightthickness -highlightcolor
  118.     rename -highlightbackground -background background Background
  119.     }    
  120.     grid $itk_component(clipper) -row 0 -column 0 -sticky nsew
  121.     grid rowconfigure $_interior 0 -weight 1
  122.     grid columnconfigure $_interior 0 -weight 1
  123.  
  124.     # 
  125.     # Create a canvas to scroll
  126.     #
  127.     itk_component add canvas {
  128.     canvas $itk_component(clipper).canvas \
  129.         -height 1.0 -width 1.0 \
  130.                 -scrollregion "0 0 1 1" \
  131.                 -xscrollcommand \
  132.         [code $this _scrollWidget $itk_interior.horizsb] \
  133.         -yscrollcommand \
  134.         [code $this _scrollWidget $itk_interior.vertsb]
  135.     } {
  136.     usual
  137.  
  138.     ignore -highlightthickness -highlightcolor
  139.  
  140.     keep -closeenough -confine -scrollregion 
  141.     keep -xscrollincrement -yscrollincrement
  142.  
  143.     rename -background -textbackground textBackground Background
  144.     }
  145.     grid $itk_component(canvas) -row 0 -column 0 -sticky nsew
  146.     grid rowconfigure $itk_component(clipper) 0 -weight 1
  147.     grid columnconfigure $itk_component(clipper) 0 -weight 1
  148.     
  149.     # 
  150.     # Configure the command on the vertical scroll bar in the base class.
  151.     #
  152.     $itk_component(vertsb) configure \
  153.     -command [code $itk_component(canvas) yview]
  154.  
  155.     #
  156.     # Configure the command on the horizontal scroll bar in the base class.
  157.     #
  158.     $itk_component(horizsb) configure \
  159.         -command [code $itk_component(canvas) xview]
  160.     
  161.     #
  162.     # Initialize the widget based on the command line options.
  163.     #
  164.     eval itk_initialize $args
  165. }
  166.  
  167. # ------------------------------------------------------------------
  168. #                           DESTURCTOR
  169. # ------------------------------------------------------------------
  170. body iwidgets::Scrolledcanvas::destructor {} {
  171. }
  172.  
  173. # ------------------------------------------------------------------
  174. #                             OPTIONS
  175. # ------------------------------------------------------------------
  176.  
  177. # ------------------------------------------------------------------
  178. # OPTION: -autoresize
  179. #
  180. # Automatically adjusts the scrolled region to be the bounding 
  181. # box covering all the items in the canvas following the execution 
  182. # of any method which creates or destroys items.  Thus, as new 
  183. # items are added, the scrollbars adjust accordingly.
  184. # ------------------------------------------------------------------
  185. configbody iwidgets::Scrolledcanvas::autoresize {
  186.     if {$itk_option(-autoresize)} {
  187.     set bbox [$itk_component(canvas) bbox all]
  188.  
  189.     if {$bbox != {}} {
  190.         set marg $itk_option(-automargin)
  191.         set bbox [lreplace $bbox 0 0 [expr [lindex $bbox 0] - $marg]]
  192.         set bbox [lreplace $bbox 1 1 [expr [lindex $bbox 1] - $marg]]
  193.         set bbox [lreplace $bbox 2 2 [expr [lindex $bbox 2] + $marg]]
  194.         set bbox [lreplace $bbox 3 3 [expr [lindex $bbox 3] + $marg]]
  195.     }
  196.  
  197.     $itk_component(canvas) configure -scrollregion $bbox
  198.     }
  199. }
  200.  
  201. # ------------------------------------------------------------------
  202. #                            METHODS
  203. # ------------------------------------------------------------------
  204.  
  205. # ------------------------------------------------------------------
  206. # METHOD: childsite
  207. #
  208. # Returns the path name of the child site widget.
  209. # ------------------------------------------------------------------
  210. body iwidgets::Scrolledcanvas::childsite {} {
  211.     return $itk_component(canvas)
  212. }
  213.  
  214. # ------------------------------------------------------------------
  215. # METHOD: justify
  216. #
  217. # Justifies the canvas scrolled region in one of four directions: top,
  218. # bottom, left, or right.
  219. # ------------------------------------------------------------------
  220. body iwidgets::Scrolledcanvas::justify {direction} {
  221.     if {[winfo ismapped $itk_component(canvas)]} {
  222.     update idletasks
  223.     
  224.     switch $direction {
  225.         left { 
  226.         $itk_component(canvas) xview moveto 0
  227.         }
  228.         right {
  229.         $itk_component(canvas) xview moveto 1
  230.         }
  231.         top {
  232.         $itk_component(canvas) yview moveto 0
  233.         }
  234.         bottom {
  235.         $itk_component(canvas) yview moveto 1
  236.         }
  237.         default {
  238.         error "bad justify argument \"$direction\": should be\
  239.             left, right, top, or bottom"
  240.         }
  241.     }
  242.     }
  243. }
  244.  
  245. # ------------------------------------------------------------------
  246. # CANVAS METHODS:
  247. #
  248. # The following methods are thin wraps of standard canvas methods.
  249. # Consult the Tk canvas man pages for functionallity and argument
  250. # documentation
  251. # ------------------------------------------------------------------
  252.  
  253. # ------------------------------------------------------------------
  254. # METHOD: addtag tag searchSpec ?arg arg ...?
  255. # ------------------------------------------------------------------
  256. body iwidgets::Scrolledcanvas::addtag {args} {
  257.     return [eval $itk_component(canvas) addtag $args]
  258. }
  259.  
  260. # ------------------------------------------------------------------
  261. # METHOD: bbox tagOrId ?tagOrId tagOrId ...?
  262. # ------------------------------------------------------------------
  263. body iwidgets::Scrolledcanvas::bbox {args} {
  264.     return [eval $itk_component(canvas) bbox $args]
  265. }
  266.  
  267. # ------------------------------------------------------------------
  268. # METHOD: bind tagOrId ?sequence? ?command?
  269. # ------------------------------------------------------------------
  270. body iwidgets::Scrolledcanvas::bind {args} {
  271.     return [eval $itk_component(canvas) bind $args]
  272. }
  273.  
  274. # ------------------------------------------------------------------
  275. # METHOD: canvasx screenx ?gridspacing?
  276. # ------------------------------------------------------------------
  277. body iwidgets::Scrolledcanvas::canvasx {args} {
  278.     return [eval $itk_component(canvas) canvasx $args]
  279. }
  280.  
  281. # ------------------------------------------------------------------
  282. # METHOD: canvasy screeny ?gridspacing?
  283. # ------------------------------------------------------------------
  284. body iwidgets::Scrolledcanvas::canvasy {args} {
  285.     return [eval $itk_component(canvas) canvasy $args]
  286. }
  287.  
  288. # ------------------------------------------------------------------
  289. # METHOD: coords tagOrId ?x0 y0 ...?
  290. # ------------------------------------------------------------------
  291. body iwidgets::Scrolledcanvas::coords {args} {
  292.     return [eval $itk_component(canvas) coords $args]
  293. }
  294.  
  295. # ------------------------------------------------------------------
  296. # METHOD: create type x y ?x y ...? ?option value ...?
  297. # ------------------------------------------------------------------
  298. body iwidgets::Scrolledcanvas::create {args} {
  299.     set retval [eval $itk_component(canvas) create $args]
  300.     
  301.     configure -autoresize $itk_option(-autoresize)
  302.     
  303.     return $retval
  304. }
  305.  
  306. # ------------------------------------------------------------------
  307. # METHOD: dchars  tagOrId first ?last?
  308. # ------------------------------------------------------------------
  309. body iwidgets::Scrolledcanvas::dchars {args} {
  310.     return [eval $itk_component(canvas) dchars $args]
  311. }
  312.  
  313. # ------------------------------------------------------------------
  314. # METHOD: delete tagOrId ?tagOrId tagOrId ...?
  315. # ------------------------------------------------------------------
  316. body iwidgets::Scrolledcanvas::delete {args} {
  317.     set retval [eval $itk_component(canvas) delete $args]
  318.     
  319.     configure -autoresize $itk_option(-autoresize)
  320.     
  321.     return $retval
  322. }
  323.  
  324. # ------------------------------------------------------------------
  325. # METHOD: dtag tagOrId ?tagToDelete?
  326. # ------------------------------------------------------------------
  327. body iwidgets::Scrolledcanvas::dtag {args} {
  328.     eval $itk_component(canvas) dtag $args
  329.     
  330.     configure -autoresize $itk_option(-autoresize)
  331. }
  332.  
  333. # ------------------------------------------------------------------
  334. # METHOD: find searchCommand ?arg arg ...?
  335. # ------------------------------------------------------------------
  336. body iwidgets::Scrolledcanvas::find {args} {
  337.     return [eval $itk_component(canvas) find $args]
  338. }
  339.  
  340. # ------------------------------------------------------------------
  341. # METHOD: focus ?tagOrId?
  342. # ------------------------------------------------------------------
  343. body iwidgets::Scrolledcanvas::focus {args} {
  344.     return [eval $itk_component(canvas) focus $args]
  345. }
  346.  
  347. # ------------------------------------------------------------------
  348. # METHOD: gettags tagOrId
  349. # ------------------------------------------------------------------
  350. body iwidgets::Scrolledcanvas::gettags {args} {
  351.     return [eval $itk_component(canvas) gettags $args]
  352. }
  353.  
  354. # ------------------------------------------------------------------
  355. # METHOD: icursor tagOrId index
  356. # ------------------------------------------------------------------
  357. body iwidgets::Scrolledcanvas::icursor {args} {
  358.     eval $itk_component(canvas) icursor $args
  359. }
  360.  
  361. # ------------------------------------------------------------------
  362. # METHOD: index tagOrId index
  363. # ------------------------------------------------------------------
  364. body iwidgets::Scrolledcanvas::index {args} {
  365.     return [eval $itk_component(canvas) index $args]
  366. }
  367.  
  368. # ------------------------------------------------------------------
  369. # METHOD: insert tagOrId beforeThis string
  370. # ------------------------------------------------------------------
  371. body iwidgets::Scrolledcanvas::insert {args} {
  372.     eval $itk_component(canvas) insert $args
  373. }
  374.  
  375. # ------------------------------------------------------------------
  376. # METHOD: itemconfigure tagOrId ?option? ?value? ?option value ...?
  377. # ------------------------------------------------------------------
  378. body iwidgets::Scrolledcanvas::itemconfigure {args} {
  379.     set retval [eval $itk_component(canvas) itemconfigure $args]
  380.     
  381.     configure -autoresize $itk_option(-autoresize)
  382.     
  383.     return $retval
  384. }
  385.  
  386. # ------------------------------------------------------------------
  387. # METHOD: itemcget tagOrId ?option? 
  388. # ------------------------------------------------------------------
  389. body iwidgets::Scrolledcanvas::itemcget {args} {
  390.     set retval [eval $itk_component(canvas) itemcget $args]
  391.     
  392.     return $retval
  393. }
  394.  
  395. # ------------------------------------------------------------------
  396. # METHOD: lower tagOrId ?belowThis?
  397. # ------------------------------------------------------------------
  398. body iwidgets::Scrolledcanvas::lower {args} {
  399.     eval $itk_component(canvas) lower $args
  400. }
  401.  
  402. # ------------------------------------------------------------------
  403. # METHOD: move tagOrId xAmount yAmount
  404. # ------------------------------------------------------------------
  405. body iwidgets::Scrolledcanvas::move {args} {
  406.     eval $itk_component(canvas) move $args
  407.     
  408.     configure -autoresize $itk_option(-autoresize)
  409. }
  410.  
  411. # ------------------------------------------------------------------
  412. # METHOD: postscript ?option value ...?
  413. # ------------------------------------------------------------------
  414. body iwidgets::Scrolledcanvas::postscript {args} {
  415.     #
  416.     # Make sure the fontmap is in scope.
  417.     #
  418.     set fontmap ""
  419.     regexp -- {-fontmap +([^ ]+)} $args all fontmap
  420.  
  421.     if {$fontmap != ""} {
  422.     global $fontmap
  423.     }
  424.  
  425.     return [eval $itk_component(canvas) postscript $args]
  426. }
  427.  
  428. # ------------------------------------------------------------------
  429. # METHOD: raise tagOrId ?aboveThis?
  430. # ------------------------------------------------------------------
  431. body iwidgets::Scrolledcanvas::raise {args} {
  432.     eval $itk_component(canvas) raise $args
  433. }
  434.  
  435. # ------------------------------------------------------------------
  436. # METHOD: scale tagOrId xOrigin yOrigin xScale yScale
  437. # ------------------------------------------------------------------
  438. body iwidgets::Scrolledcanvas::scale {args} {
  439.     eval $itk_component(canvas) scale $args
  440. }
  441.  
  442. # ------------------------------------------------------------------
  443. # METHOD: scan option args
  444. # ------------------------------------------------------------------
  445. body iwidgets::Scrolledcanvas::scan {args} {
  446.     eval $itk_component(canvas) scan $args
  447. }
  448.  
  449. # ------------------------------------------------------------------
  450. # METHOD: select option ?tagOrId arg?
  451. # ------------------------------------------------------------------
  452. body iwidgets::Scrolledcanvas::select {args} {
  453.     eval $itk_component(canvas) select $args
  454. }
  455.  
  456. # ------------------------------------------------------------------
  457. # METHOD: type tagOrId
  458. # ------------------------------------------------------------------
  459. body iwidgets::Scrolledcanvas::type {args} {
  460.     return [eval $itk_component(canvas) type $args]
  461. }
  462.  
  463. # ------------------------------------------------------------------
  464. # METHOD: xview index
  465. # ------------------------------------------------------------------
  466. body iwidgets::Scrolledcanvas::xview {args} {
  467.     eval $itk_component(canvas) xview $args
  468. }
  469.  
  470. # ------------------------------------------------------------------
  471. # METHOD: yview index 
  472. # ------------------------------------------------------------------
  473. body iwidgets::Scrolledcanvas::yview {args} {
  474.     eval $itk_component(canvas) yview $args
  475. }
  476.