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 / mainwindow.itk < prev    next >
Text File  |  1999-02-24  |  11KB  |  314 lines

  1. #
  2. # Mainwindow
  3. # ----------------------------------------------------------------------
  4. # This class implements a mainwindow containing a menubar, toolbar,
  5. # mousebar, childsite, status line, and help line.  Each item may
  6. # be filled and configured to suit individual needs.
  7. #
  8. # ----------------------------------------------------------------------
  9. #  AUTHOR: Mark L. Ulferts              EMAIL: mulferts@austin.dsccc.com
  10. #
  11. #  @(#) RCS: $Id: mainwindow.itk,v 1.1 1998/07/27 18:53:09 stanton Exp $
  12. # ----------------------------------------------------------------------
  13. #            Copyright (c) 1997 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. #                             MAINWINDOW
  37. # ------------------------------------------------------------------
  38. class iwidgets::Mainwindow {
  39.     inherit iwidgets::Shell
  40.  
  41.     constructor {args} {}
  42.  
  43.     itk_option define -helpline helpLine HelpLine 1
  44.     itk_option define -statusline statusLine StatusLine 1
  45.  
  46.     public {
  47.     method childsite {}
  48.     method menubar {args}
  49.     method mousebar {args}
  50.     method msgd {args}
  51.     method toolbar {args}
  52.     }
  53.  
  54.     protected {
  55.     method _exitCB {}
  56.  
  57.     common _helpVar
  58.     common _statusVar
  59.     }
  60. }
  61.  
  62. #
  63. # Provide a lowercased access method for the ::iwidgets::Mainwindow class.
  64. proc iwidgets::mainwindow {pathName args} {
  65.     uplevel ::iwidgets::Mainwindow $pathName $args
  66. }
  67.  
  68. # ------------------------------------------------------------------
  69. #                           CONSTRUCTOR
  70. # ------------------------------------------------------------------
  71. body iwidgets::Mainwindow::constructor {args} {
  72.     itk_option add hull.width hull.height
  73.  
  74.     pack propagate $itk_component(hull) no
  75.  
  76.     wm protocol $itk_component(hull) WM_DELETE_WINDOW [code $this _exitCB]
  77.  
  78.     #
  79.     # Create a menubar, renaming the font, foreground, and background
  80.     # so they may be separately set.  The help variable will be setup
  81.     # as well.
  82.     #
  83.     itk_component add menubar {
  84.     iwidgets::Menubar $itk_interior.menubar \
  85.       -helpvariable [scope _helpVar($this)] 
  86.     } {
  87.     keep -disabledforeground -cursor \
  88.         -highlightbackground -highlightthickness
  89.     rename -font \
  90.         -menubarfont menuBarFont Font
  91.     rename -foreground \
  92.         -menubarforeground menuBarForeground Foreground
  93.     rename -background \
  94.         -menubarbackground menuBarBackground Background
  95.     }
  96.  
  97.     #
  98.     # Add a toolbar beneath the menubar.
  99.     #
  100.     itk_component add toolbar {
  101.     iwidgets::Toolbar $itk_interior.toolbar -orient horizontal \
  102.         -helpvariable [scope _helpVar($this)] 
  103.     } {
  104.     keep -balloonbackground -balloondelay1 -balloondelay2 \
  105.         -balloonfont -balloonforeground -disabledforeground -cursor \
  106.         -highlightbackground -highlightthickness
  107.     rename -font -toolbarfont toolbarFont Font
  108.     rename -foreground -toolbarforeground toolbarForeground Foreground
  109.     rename -background -toolbarbackground toolbarBackground Background
  110.     }
  111.  
  112.     #
  113.     # Add a mouse bar on the left.  
  114.     #
  115.     itk_component add mousebar {
  116.     iwidgets::Toolbar $itk_interior.mousebar -orient vertical \
  117.         -helpvariable [scope _helpVar($this)] 
  118.     } {
  119.     keep -balloonbackground -balloondelay1 -balloondelay2 \
  120.         -balloonfont -balloonforeground -disabledforeground -cursor \
  121.         -highlightbackground -highlightthickness
  122.     rename -font -toolbarfont toolbarFont Font
  123.     rename -foreground -toolbarforeground toolbarForeground Foreground
  124.     rename -background -toolbarbackground toolbarBackground Background
  125.     }
  126.  
  127.     #
  128.     # Create the childsite window window.
  129.     #
  130.     itk_component add -protected mwchildsite {
  131.     frame $itk_interior.mwchildsite
  132.     } 
  133.  
  134.     #
  135.     # Add the help and system status lines
  136.     #
  137.     itk_component add -protected lineframe {
  138.     frame $itk_interior.lineframe
  139.     }
  140.  
  141.     itk_component add help {
  142.     label $itk_component(lineframe).help \
  143.         -textvariable [scope _helpVar($this)] \
  144.         -relief sunken -borderwidth 2 -width 10
  145.     }
  146.  
  147.     itk_component add status {
  148.     label $itk_component(lineframe).status \
  149.         -textvariable [scope _statusVar($this)] \
  150.         -relief sunken -borderwidth 2 -width 10
  151.     }
  152.  
  153.     #
  154.     # Create the message dialog for use throughout the mainwindow.
  155.     #
  156.     itk_component add msgd {
  157.     iwidgets::Messagedialog $itk_interior.msgd -modality application
  158.     } {
  159.       usual
  160.       ignore -modality
  161.     }
  162.  
  163.     #
  164.     # Use the grid to pack together the menubar, toolbar, mousebar,
  165.     # childsite, and status area.
  166.     #
  167.     grid $itk_component(menubar) -row 0 -column 0 -columnspan 2 -sticky ew
  168.     grid $itk_component(toolbar) -row 1 -column 0 -columnspan 2 -sticky ew
  169.     grid $itk_component(mousebar) -row 2 -column 0 -sticky ns 
  170.     grid $itk_component(mwchildsite) -row 2 -column 1 -sticky nsew \
  171.     -padx 5 -pady 5 
  172.     grid $itk_component(lineframe) -row 3 -column 0 -columnspan 2 -sticky ew
  173.  
  174.     grid columnconfigure $itk_interior 1 -weight 1
  175.     grid rowconfigure $itk_interior 2 -weight 1
  176.  
  177.     #
  178.     # Set the interior to be the childsite for derived classes.
  179.     #
  180.     set itk_interior $itk_component(mwchildsite)
  181.  
  182.     #
  183.     # Initialize all the configuration options.
  184.     #
  185.     eval itk_initialize $args
  186. }
  187.  
  188. # ------------------------------------------------------------------
  189. #                             OPTIONS
  190. # ------------------------------------------------------------------
  191.  
  192. # ------------------------------------------------------------------
  193. # OPTION: -helpline
  194. #
  195. # Specifies whether or not to display the help line.  The value
  196. # may be given in any of the forms acceptable to Tk_GetBoolean.
  197. # ------------------------------------------------------------------
  198. configbody iwidgets::Mainwindow::helpline {
  199.     if {$itk_option(-helpline)} {
  200.     pack $itk_component(help) -side left -fill x -expand yes -padx 2
  201.     } else {
  202.     pack forget $itk_component(help)
  203.     }
  204. }
  205.  
  206. # ------------------------------------------------------------------
  207. # OPTION: -statusline
  208. #
  209. # Specifies whether or not to display the status line.  The value
  210. # may be given in any of the forms acceptable to Tk_GetBoolean.
  211. # ------------------------------------------------------------------
  212. configbody iwidgets::Mainwindow::statusline {
  213.     if {$itk_option(-statusline)} {
  214.     pack $itk_component(status) -side right -fill x -expand yes -padx 2
  215.     } else {
  216.     pack forget $itk_component(status)
  217.     }
  218. }
  219.  
  220. # ------------------------------------------------------------------
  221. #                            METHODS
  222. # ------------------------------------------------------------------
  223.  
  224. # ------------------------------------------------------------------
  225. # METHOD: childsite
  226. #
  227. # Return the childsite widget.
  228. # ------------------------------------------------------------------
  229. body iwidgets::Mainwindow::childsite {} {
  230.     return $itk_component(mwchildsite)
  231. }
  232.  
  233. # ------------------------------------------------------------------
  234. # METHOD: menubar ?args?
  235. #
  236. # Evaluate the args against the Menubar component.
  237. # ------------------------------------------------------------------
  238. body iwidgets::Mainwindow::menubar {args} {
  239.     if {[llength $args] == 0} {
  240.     return $itk_component(menubar)
  241.     } else {
  242.     return [eval $itk_component(menubar) $args]
  243.     }
  244. }
  245.  
  246. # ------------------------------------------------------------------
  247. # METHOD: toolbar ?args?
  248. #
  249. # Evaluate the args against the Toolbar component.
  250. # ------------------------------------------------------------------
  251. body iwidgets::Mainwindow::toolbar {args} {
  252.     if {[llength $args] == 0} {
  253.     return $itk_component(toolbar)
  254.     } else {
  255.     return [eval $itk_component(toolbar) $args]
  256.     }
  257. }
  258.  
  259. # ------------------------------------------------------------------
  260. # METHOD: mousebar ?args?
  261. #
  262. # Evaluate the args against the Mousebar component.
  263. # ------------------------------------------------------------------
  264. body iwidgets::Mainwindow::mousebar {args} {
  265.     if {[llength $args] == 0} {
  266.     return $itk_component(mousebar)
  267.     } else {
  268.     return [eval $itk_component(mousebar) $args]
  269.     }
  270. }
  271.  
  272. # ------------------------------------------------------------------
  273. # METHOD: msgd ?args?
  274. #
  275. # Evaluate the args against the Messagedialog component.
  276. # ------------------------------------------------------------------
  277. body iwidgets::Mainwindow::msgd {args} {
  278.     if {[llength $args] == 0} {
  279.     return $itk_component(msgd)
  280.     } else {
  281.     return [eval $itk_component(msgd) $args]
  282.     }
  283. }
  284.  
  285. # ------------------------------------------------------------------
  286. # PRIVATE METHOD: _exitCB
  287. #
  288. # Menu callback for the exit option from the file menu.  The method
  289. # confirms the user's request to exit the application prior to
  290. # taking the action.
  291. # ------------------------------------------------------------------
  292. body iwidgets::Mainwindow::_exitCB {} {
  293.     #
  294.     # Configure the message dialog for confirmation of the exit request.
  295.     #
  296.     msgd configure -title Confirmation -bitmap questhead \
  297.         -text "Exit confirmation\n\
  298.            Are you sure ?"
  299.     msgd buttonconfigure OK -text Yes
  300.     msgd buttonconfigure Cancel -text No
  301.     msgd default Cancel
  302.     msgd center $itk_component(hull)
  303.  
  304.     #
  305.     # Activate the message dialog and given a positive response 
  306.     # proceed to exit the application
  307.     #
  308.     if {[msgd activate]} {
  309.     ::exit
  310.     }    
  311. }
  312.