home *** CD-ROM | disk | FTP | other *** search
/ PC World 2005 June / PCWorld_2005-06_cd.bin / software / vyzkuste / firewally / firewally.exe / framework-2.3.exe / dialogshell.itk < prev    next >
Text File  |  2003-09-01  |  13KB  |  351 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@austin.dsccc.com
  9. #
  10. #  @(#) $Id: dialogshell.itk,v 1.3 2001/08/15 18:32:02 smithc 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 Dialogshell {
  38.     keep -background -cursor -foreground -modality 
  39. }
  40.  
  41. # ------------------------------------------------------------------
  42. #                            DIALOGSHELL
  43. # ------------------------------------------------------------------
  44. itcl::class iwidgets::Dialogshell {
  45.     inherit iwidgets::Shell
  46.  
  47.     constructor {args} {}
  48.  
  49.     itk_option define -thickness thickness Thickness 3
  50.     itk_option define -buttonboxpos buttonBoxPos Position s
  51.     itk_option define -separator separator Separator on
  52.     itk_option define -padx padX Pad 10
  53.     itk_option define -pady padY Pad 10
  54.  
  55.     public method childsite {}
  56.     public method index {args}
  57.     public method add {args}
  58.     public method insert {args}
  59.     public method delete {args}
  60.     public method hide {args}
  61.     public method show {args}
  62.     public method default {args}
  63.     public method invoke {args}
  64.     public method buttonconfigure {args}
  65.     public method buttoncget {index option}
  66. }
  67.  
  68. #
  69. # Provide a lowercased access method for the Dialogshell class.
  70. proc ::iwidgets::dialogshell {pathName args} {
  71.     uplevel ::iwidgets::Dialogshell $pathName $args
  72. }
  73.  
  74. #
  75. # Use option database to override default resources of base classes.
  76. #
  77. option add *Dialogshell.master "." widgetDefault
  78.  
  79. # ------------------------------------------------------------------
  80. #                        CONSTRUCTOR
  81. # ------------------------------------------------------------------
  82. itcl::body iwidgets::Dialogshell::constructor {args} {
  83.     itk_option remove iwidgets::Shell::padx iwidgets::Shell::pady
  84.  
  85.     #
  86.     # Create the user child site, separator, and button box,
  87.     #
  88.     itk_component add -protected dschildsite {
  89.     frame $itk_interior.dschildsite
  90.     } 
  91.     
  92.     itk_component add separator {
  93.     frame $itk_interior.separator -relief sunken 
  94.     } 
  95.     
  96.     itk_component add bbox {
  97.     iwidgets::Buttonbox $itk_interior.bbox
  98.     } {
  99.     usual
  100.  
  101.     rename -padx -buttonboxpadx buttonBoxPadX Pad
  102.     rename -pady -buttonboxpady buttonBoxPadY Pad
  103.     }
  104.     
  105.     #
  106.     # Set the itk_interior variable to be the childsite for derived 
  107.     # classes.
  108.     #
  109.     set itk_interior $itk_component(dschildsite)
  110.     
  111.     #
  112.     # Set up the default button so that if <Return> is pressed in
  113.     # any widget, it will invoke the default button.
  114.     #
  115.     bind $itk_component(hull) <Return> [itcl::code $this invoke]
  116.     
  117.     #
  118.     # Initialize the widget based on the command line options.
  119.     #
  120.     eval itk_initialize $args
  121. }
  122.  
  123. # ------------------------------------------------------------------
  124. #                             OPTIONS
  125. # ------------------------------------------------------------------
  126.  
  127. # ------------------------------------------------------------------
  128. # OPTION: -thickness
  129. #
  130. # Specifies the thickness of the separator.  It sets the width and
  131. # height of the separator to the thickness value and the borderwidth
  132. # to half the thickness.
  133. # ------------------------------------------------------------------
  134. itcl::configbody iwidgets::Dialogshell::thickness {
  135.     $itk_component(separator) config -height $itk_option(-thickness)
  136.     $itk_component(separator) config -width $itk_option(-thickness)
  137.     $itk_component(separator) config \
  138.         -borderwidth [expr {$itk_option(-thickness) / 2}]
  139. }
  140.  
  141. # ------------------------------------------------------------------
  142. # OPTION: -buttonboxpos
  143. #
  144. # Specifies the position of the button box relative to the child site.
  145. # The separator appears between the child site and button box.
  146. # ------------------------------------------------------------------
  147. itcl::configbody iwidgets::Dialogshell::buttonboxpos {
  148.     set parent [winfo parent $itk_component(bbox)]
  149.  
  150.     switch $itk_option(-buttonboxpos) {
  151.     n {
  152.         $itk_component(bbox) configure -orient horizontal
  153.  
  154.         grid $itk_component(bbox) -row 0 -column 0 -sticky ew
  155.         grid $itk_component(separator) -row 1 -column 0 -sticky ew
  156.         grid $itk_component(dschildsite) -row 2 -column 0 -sticky nsew
  157.  
  158.         grid rowconfigure $parent 0 -weight 0
  159.         grid rowconfigure $parent 1 -weight 0
  160.         grid rowconfigure $parent 2 -weight 1
  161.         grid columnconfigure $parent 0 -weight 1
  162.         grid columnconfigure $parent 1 -weight 0
  163.         grid columnconfigure $parent 2 -weight 0
  164.     }
  165.     s {
  166.         $itk_component(bbox) configure -orient horizontal
  167.  
  168.         grid $itk_component(dschildsite) -row 0 -column 0 -sticky nsew
  169.         grid $itk_component(separator) -row 1 -column 0 -sticky ew
  170.         grid $itk_component(bbox) -row 2 -column 0 -sticky ew
  171.  
  172.         grid rowconfigure $parent 0 -weight 1
  173.         grid rowconfigure $parent 1 -weight 0
  174.         grid rowconfigure $parent 2 -weight 0
  175.         grid columnconfigure $parent 0 -weight 1
  176.         grid columnconfigure $parent 1 -weight 0
  177.         grid columnconfigure $parent 2 -weight 0
  178.     }
  179.     w {
  180.         $itk_component(bbox) configure -orient vertical
  181.  
  182.         grid $itk_component(bbox) -row 0 -column 0 -sticky ns
  183.         grid $itk_component(separator) -row 0 -column 1 -sticky ns
  184.         grid $itk_component(dschildsite) -row 0 -column 2 -sticky nsew
  185.  
  186.         grid rowconfigure $parent 0 -weight 1
  187.         grid rowconfigure $parent 1 -weight 0
  188.         grid rowconfigure $parent 2 -weight 0
  189.         grid columnconfigure $parent 0 -weight 0
  190.         grid columnconfigure $parent 1 -weight 0
  191.         grid columnconfigure $parent 2 -weight 1
  192.     }
  193.     e {
  194.         $itk_component(bbox) configure -orient vertical
  195.  
  196.         grid $itk_component(dschildsite) -row 0 -column 0 -sticky nsew
  197.         grid $itk_component(separator) -row 0 -column 1 -sticky ns
  198.         grid $itk_component(bbox) -row 0 -column 2 -sticky ns
  199.  
  200.         grid rowconfigure $parent 0 -weight 1
  201.         grid rowconfigure $parent 1 -weight 0
  202.         grid rowconfigure $parent 2 -weight 0
  203.         grid columnconfigure $parent 0 -weight 1
  204.         grid columnconfigure $parent 1 -weight 0
  205.         grid columnconfigure $parent 2 -weight 0
  206.     }
  207.     default {
  208.         error "bad buttonboxpos option\
  209.             \"$itk_option(-buttonboxpos)\": should be n,\
  210.             s, e, or w"
  211.     }
  212.     }
  213. }
  214.  
  215. # ------------------------------------------------------------------
  216. # OPTION: -separator 
  217. #
  218. # Boolean option indicating wheather to display the separator.
  219. # ------------------------------------------------------------------
  220. itcl::configbody iwidgets::Dialogshell::separator {
  221.     if {$itk_option(-separator)} {
  222.     $itk_component(separator) configure -relief sunken
  223.     } else {
  224.     $itk_component(separator) configure -relief flat
  225.     }
  226. }
  227.  
  228. # ------------------------------------------------------------------
  229. # OPTION: -padx
  230. #
  231. # Specifies a padding distance for the childsite in the X-direction.
  232. # ------------------------------------------------------------------
  233. itcl::configbody iwidgets::Dialogshell::padx {
  234.     grid configure $itk_component(dschildsite) -padx $itk_option(-padx)
  235. }
  236.  
  237. # ------------------------------------------------------------------
  238. # OPTION: -pady
  239. #
  240. # Specifies a padding distance for the childsite in the Y-direction.
  241. # ------------------------------------------------------------------
  242. itcl::configbody iwidgets::Dialogshell::pady {
  243.     grid configure $itk_component(dschildsite) -pady $itk_option(-pady)
  244. }
  245.     
  246. # ------------------------------------------------------------------
  247. #                            METHODS
  248. # ------------------------------------------------------------------
  249.  
  250. # ------------------------------------------------------------------
  251. # METHOD: childsite
  252. #
  253. # Return the pathname of the user accessible area.
  254. # ------------------------------------------------------------------
  255. itcl::body iwidgets::Dialogshell::childsite {} {
  256.     return $itk_component(dschildsite)
  257. }
  258.  
  259. # ------------------------------------------------------------------
  260. # METHOD: index index
  261. #
  262. # Thin wrapper of Buttonbox's index method.
  263. # ------------------------------------------------------------------
  264. itcl::body iwidgets::Dialogshell::index {args} {
  265.     uplevel $itk_component(bbox) index $args
  266. }
  267.  
  268. # ------------------------------------------------------------------
  269. # METHOD: add tag ?option value ...?
  270. #
  271. # Thin wrapper of Buttonbox's add method.
  272. # ------------------------------------------------------------------
  273. itcl::body iwidgets::Dialogshell::add {args} {
  274.     uplevel $itk_component(bbox) add $args
  275. }
  276.  
  277. # ------------------------------------------------------------------
  278. # METHOD: insert index tag ?option value ...?
  279. #
  280. # Thin wrapper of Buttonbox's insert method.
  281. # ------------------------------------------------------------------
  282. itcl::body iwidgets::Dialogshell::insert {args} {
  283.     uplevel $itk_component(bbox) insert $args
  284. }
  285.  
  286. # ------------------------------------------------------------------
  287. # METHOD: delete tag
  288. #
  289. # Thin wrapper of Buttonbox's delete method.
  290. # ------------------------------------------------------------------
  291. itcl::body iwidgets::Dialogshell::delete {args} {
  292.     uplevel $itk_component(bbox) delete $args
  293. }
  294.  
  295. # ------------------------------------------------------------------
  296. # METHOD: hide index
  297. #
  298. # Thin wrapper of Buttonbox's hide method.
  299. # ------------------------------------------------------------------
  300. itcl::body iwidgets::Dialogshell::hide {args} {
  301.     uplevel $itk_component(bbox) hide $args
  302. }
  303.  
  304. # ------------------------------------------------------------------
  305. # METHOD: show index
  306. #
  307. # Thin wrapper of Buttonbox's show method.
  308. # ------------------------------------------------------------------
  309. itcl::body iwidgets::Dialogshell::show {args} {
  310.     uplevel $itk_component(bbox) show $args
  311. }
  312.  
  313. # ------------------------------------------------------------------
  314. # METHOD: default index
  315. #
  316. # Thin wrapper of Buttonbox's default method.
  317. # ------------------------------------------------------------------
  318. itcl::body iwidgets::Dialogshell::default {args} {
  319.     uplevel $itk_component(bbox) default $args
  320. }
  321.  
  322. # ------------------------------------------------------------------
  323. # METHOD: invoke ?index?
  324. #
  325. # Thin wrapper of Buttonbox's invoke method.
  326. # ------------------------------------------------------------------
  327. itcl::body iwidgets::Dialogshell::invoke {args} {
  328.     uplevel $itk_component(bbox) invoke $args
  329. }
  330.  
  331. # ------------------------------------------------------------------
  332. # METHOD: buttonconfigure index ?option? ?value option value ...?
  333. #
  334. # Thin wrapper of Buttonbox's buttonconfigure method.
  335. # ------------------------------------------------------------------
  336. itcl::body iwidgets::Dialogshell::buttonconfigure {args} {
  337.     uplevel $itk_component(bbox) buttonconfigure $args
  338. }
  339.  
  340. # ------------------------------------------------------------------
  341. # METHOD: buttoncget index option
  342. #
  343. # Thin wrapper of Buttonbox's buttoncget method.
  344. # ------------------------------------------------------------------
  345. itcl::body iwidgets::Dialogshell::buttoncget {index option} {
  346.   uplevel $itk_component(bbox) buttoncget [list $index] \
  347.       [list $option]
  348. }
  349.