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 / dialogshell.itk < prev    next >
Text File  |  1999-02-24  |  12KB  |  327 lines

  1. # Dialogshell
  2. # ----------------------------------------------------------------------
  3. # This class is implements a dialog shell which is a top level widget
  4. # composed of a button box, separator, and child site area.  The class
  5. # also has methods to control button construction.
  6. #    
  7. # ----------------------------------------------------------------------
  8. #  AUTHOR: Mark L. Ulferts               EMAIL: mulferts@spd.dsccc.com
  9. #
  10. #  @(#) $Id: dialogshell.itk,v 1.1 1998/07/27 18:49:24 stanton 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. # Default resources,
  36. #
  37. option add *Dialogshell.thickness 3 widgetDefault
  38. option add *Dialogshell.buttonBoxPos s widgetDefault
  39. option add *Dialogshell.modality none widgetDefault
  40. option add *Dialogshell.separator on widgetDefault
  41. option add *Dialogshell.padX 10 widgetDefault
  42. option add *Dialogshell.padY 10 widgetDefault
  43. option add *Dialogshell.master "." widgetDefault
  44.  
  45. #
  46. # Usual options.
  47. #
  48. itk::usual Dialogshell {
  49.     keep -background -cursor -foreground -modality 
  50. }
  51.  
  52. # ------------------------------------------------------------------
  53. #                            DIALOGSHELL
  54. # ------------------------------------------------------------------
  55. class iwidgets::Dialogshell {
  56.     inherit iwidgets::Shell
  57.  
  58.     constructor {args} {}
  59.  
  60.     itk_option define -thickness thickness Thickness 3
  61.     itk_option define -buttonboxpos buttonBoxPos Position s
  62.     itk_option define -separator separator Separator on
  63.     itk_option define -padx padX Pad 10
  64.     itk_option define -pady padY Pad 10
  65.  
  66.     public method childsite {}
  67.     public method index {args}
  68.     public method add {args}
  69.     public method insert {args}
  70.     public method delete {args}
  71.     public method hide {args}
  72.     public method show {args}
  73.     public method default {args}
  74.     public method invoke {args}
  75.     public method buttonconfigure {args}
  76. }
  77.  
  78. #
  79. # Provide a lowercased access method for the Dialogshell class.
  80. proc ::iwidgets::dialogshell {pathName args} {
  81.     uplevel ::iwidgets::Dialogshell $pathName $args
  82. }
  83.  
  84. # ------------------------------------------------------------------
  85. #                        CONSTRUCTOR
  86. # ------------------------------------------------------------------
  87. body iwidgets::Dialogshell::constructor {args} {
  88.     itk_option remove iwidgets::Shell::padx iwidgets::Shell::pady
  89.  
  90.     #
  91.     # Create the user child site, separator, and button box,
  92.     #
  93.     itk_component add dschildsite {
  94.     frame $itk_interior.dschildsite
  95.     } {
  96.     keep -background -cursor
  97.     }
  98.     pack $itk_component(dschildsite) -fill both -expand yes
  99.     
  100.     itk_component add separator {
  101.     frame $itk_interior.separator -relief sunken 
  102.     } {
  103.     keep -background -cursor
  104.     }
  105.     pack $itk_component(separator) -expand no
  106.     
  107.     itk_component add bbox {
  108.     iwidgets::Buttonbox $itk_interior.bbox
  109.     } {
  110.     keep -background -cursor -foreground
  111.     
  112.     rename -padx -buttonboxpadx buttonBoxPadX Pad
  113.     rename -pady -buttonboxpady buttonBoxPadY Pad
  114.     }
  115.     pack $itk_component(bbox) -expand no
  116.     
  117.     #
  118.     # Set the itk_interior variable to be the childsite for derived 
  119.     # classes.
  120.     #
  121.     set itk_interior $itk_component(dschildsite)
  122.     
  123.     #
  124.     # Set up the default button so that if <Return> is pressed in
  125.     # any widget, it will invoke the default button.
  126.     #
  127.     bind $itk_component(hull) <Return> [code $this invoke]
  128.     
  129.     #
  130.     # Explicitly handle configs that may have been ignored earlier.
  131.     #
  132.     eval itk_initialize $args
  133. }
  134.  
  135. # ------------------------------------------------------------------
  136. #                             OPTIONS
  137. # ------------------------------------------------------------------
  138.  
  139. # ------------------------------------------------------------------
  140. # OPTION: -thickness
  141. #
  142. # Specifies the thickness of the separator.  It sets the width and
  143. # height of the separator to the thickness value and the borderwidth
  144. # to half the thickness.
  145. # ------------------------------------------------------------------
  146. configbody iwidgets::Dialogshell::thickness {
  147.     $itk_component(separator) config -height $itk_option(-thickness)
  148.     $itk_component(separator) config -width $itk_option(-thickness)
  149.     $itk_component(separator) config \
  150.         -borderwidth [expr $itk_option(-thickness) / 2]
  151. }
  152.  
  153. # ------------------------------------------------------------------
  154. # OPTION: -buttonboxpos
  155. #
  156. # Specifies the position of the button box relative to the child site.
  157. # The separator appears between the child site and button box.
  158. # ------------------------------------------------------------------
  159. configbody iwidgets::Dialogshell::buttonboxpos {
  160.     switch $itk_option(-buttonboxpos) {
  161.     n {
  162.         pack config $itk_component(dschildsite) -side top
  163.         pack config $itk_component(separator) -side top \
  164.             -before $itk_component(dschildsite) -fill x
  165.         $itk_component(bbox) configure -orient horizontal
  166.         pack config $itk_component(bbox) -side top \
  167.             -before $itk_component(separator) -fill x 
  168.     }
  169.     s {
  170.         pack config $itk_component(dschildsite) -side top
  171.         pack config $itk_component(separator) -side top \
  172.             -after $itk_component(dschildsite) -fill x
  173.         $itk_component(bbox) configure -orient horizontal
  174.         pack config $itk_component(bbox) -side top \
  175.             -after $itk_component(separator) -fill x 
  176.     }
  177.     w {
  178.         pack config $itk_component(dschildsite) -side left
  179.         pack config $itk_component(separator) -side left \
  180.             -before $itk_component(dschildsite) -fill y
  181.         $itk_component(bbox) configure -orient vertical
  182.         pack config $itk_component(bbox) -side left \
  183.             -before $itk_component(separator) -fill y
  184.     }
  185.     e {
  186.         pack config $itk_component(dschildsite) -side left
  187.         pack config $itk_component(separator) -side left \
  188.             -after $itk_component(dschildsite) -fill y
  189.         $itk_component(bbox) configure -orient vertical
  190.         pack config $itk_component(bbox) -side left \
  191.             -after $itk_component(separator) -fill y
  192.     }
  193.     default {
  194.         error "bad buttonboxpos option\
  195.             \"$itk_option(-buttonboxpos)\": should be n,\
  196.             s, e, or w"
  197.     }
  198.     }
  199. }
  200.  
  201. # ------------------------------------------------------------------
  202. # OPTION: -separator 
  203. #
  204. # Boolean option indicating wheather to display the separator.
  205. # ------------------------------------------------------------------
  206. configbody iwidgets::Dialogshell::separator {
  207.     if {$itk_option(-separator)} {
  208.     $itk_component(separator) configure -relief sunken
  209.     } else {
  210.     $itk_component(separator) configure -relief flat
  211.     }
  212. }
  213.  
  214. # ------------------------------------------------------------------
  215. # OPTION: -padx
  216. #
  217. # Specifies a padding distance for the childsite in the X-direction.
  218. # ------------------------------------------------------------------
  219. configbody iwidgets::Dialogshell::padx {
  220.     pack config $itk_component(dschildsite) -padx $itk_option(-padx)
  221. }
  222.  
  223. # ------------------------------------------------------------------
  224. # OPTION: -pady
  225. #
  226. # Specifies a padding distance for the childsite in the Y-direction.
  227. # ------------------------------------------------------------------
  228. configbody iwidgets::Dialogshell::pady {
  229.     pack config $itk_component(dschildsite) -pady $itk_option(-pady)
  230. }
  231.     
  232. # ------------------------------------------------------------------
  233. #                            METHODS
  234. # ------------------------------------------------------------------
  235.  
  236. # ------------------------------------------------------------------
  237. # METHOD: childsite
  238. #
  239. # Return the pathname of the user accessible area.
  240. # ------------------------------------------------------------------
  241. body iwidgets::Dialogshell::childsite {} {
  242.     return $itk_component(dschildsite)
  243. }
  244.  
  245. # ------------------------------------------------------------------
  246. # METHOD: index index
  247. #
  248. # Thin wrapper of Buttonbox's index method.
  249. # ------------------------------------------------------------------
  250. body iwidgets::Dialogshell::index {args} {
  251.     uplevel $itk_component(bbox) index $args
  252. }
  253.  
  254. # ------------------------------------------------------------------
  255. # METHOD: add tag ?option value ...?
  256. #
  257. # Thin wrapper of Buttonbox's add method.
  258. # ------------------------------------------------------------------
  259. body iwidgets::Dialogshell::add {args} {
  260.     uplevel $itk_component(bbox) add $args
  261. }
  262.  
  263. # ------------------------------------------------------------------
  264. # METHOD: insert index tag ?option value ...?
  265. #
  266. # Thin wrapper of Buttonbox's insert method.
  267. # ------------------------------------------------------------------
  268. body iwidgets::Dialogshell::insert {args} {
  269.     uplevel $itk_component(bbox) insert $args
  270. }
  271.  
  272. # ------------------------------------------------------------------
  273. # METHOD: delete tag
  274. #
  275. # Thin wrapper of Buttonbox's delete method.
  276. # ------------------------------------------------------------------
  277. body iwidgets::Dialogshell::delete {args} {
  278.     uplevel $itk_component(bbox) delete $args
  279. }
  280.  
  281. # ------------------------------------------------------------------
  282. # METHOD: hide index
  283. #
  284. # Thin wrapper of Buttonbox's hide method.
  285. # ------------------------------------------------------------------
  286. body iwidgets::Dialogshell::hide {args} {
  287.     uplevel $itk_component(bbox) hide $args
  288. }
  289.  
  290. # ------------------------------------------------------------------
  291. # METHOD: show index
  292. #
  293. # Thin wrapper of Buttonbox's show method.
  294. # ------------------------------------------------------------------
  295. body iwidgets::Dialogshell::show {args} {
  296.     uplevel $itk_component(bbox) show $args
  297. }
  298.  
  299. # ------------------------------------------------------------------
  300. # METHOD: default index
  301. #
  302. # Thin wrapper of Buttonbox's default method.
  303. # ------------------------------------------------------------------
  304. body iwidgets::Dialogshell::default {args} {
  305.     uplevel $itk_component(bbox) default $args
  306. }
  307.  
  308. # ------------------------------------------------------------------
  309. # METHOD: invoke ?index?
  310. #
  311. # Thin wrapper of Buttonbox's invoke method.
  312. # ------------------------------------------------------------------
  313. body iwidgets::Dialogshell::invoke {args} {
  314.     uplevel $itk_component(bbox) invoke $args
  315. }
  316.  
  317. # ------------------------------------------------------------------
  318. # METHOD: buttonconfigure index ?option? ?value option value ...?
  319. #
  320. # Thin wrapper of Buttonbox's buttonconfigure method.
  321. # ------------------------------------------------------------------
  322. body iwidgets::Dialogshell::buttonconfigure {args} {
  323.     uplevel $itk_component(bbox) buttonconfigure $args
  324. }
  325.