# OpenPBS (Portable Batch System) v2.3 Software License # # Copyright (c) 1999-2000 Veridian Information Solutions, Inc. # All rights reserved. # # --------------------------------------------------------------------------- # For a license to use or redistribute the OpenPBS software under conditions # other than those described below, or to purchase support for this software, # please contact Veridian Systems, PBS Products Department ("Licensor") at: # # www.OpenPBS.org +1 650 967-4675 sales@OpenPBS.org # 877 902-4PBS (US toll-free) # --------------------------------------------------------------------------- # # This license covers use of the OpenPBS v2.3 software (the "Software") at # your site or location, and, for certain users, redistribution of the # Software to other sites and locations. Use and redistribution of # OpenPBS v2.3 in source and binary forms, with or without modification, # are permitted provided that all of the following conditions are met. # After December 31, 2001, only conditions 3-6 must be met: # # 1. Commercial and/or non-commercial use of the Software is permitted # provided a current software registration is on file at www.OpenPBS.org. # If use of this software contributes to a publication, product, or # service, proper attribution must be given; see www.OpenPBS.org/credit.html # # 2. Redistribution in any form is only permitted for non-commercial, # non-profit purposes. There can be no charge for the Software or any # software incorporating the Software. Further, there can be no # expectation of revenue generated as a consequence of redistributing # the Software. # # 3. Any Redistribution of source code must retain the above copyright notice # and the acknowledgment contained in paragraph 6, this list of conditions # and the disclaimer contained in paragraph 7. # # 4. Any Redistribution in binary form must reproduce the above copyright # notice and the acknowledgment contained in paragraph 6, this list of # conditions and the disclaimer contained in paragraph 7 in the # documentation and/or other materials provided with the distribution. # # 5. Redistributions in any form must be accompanied by information on how to # obtain complete source code for the OpenPBS software and any # modifications and/or additions to the OpenPBS software. The source code # must either be included in the distribution or be available for no more # than the cost of distribution plus a nominal fee, and all modifications # and additions to the Software must be freely redistributable by any party # (including Licensor) without restriction. # # 6. All advertising materials mentioning features or use of the Software must # display the following acknowledgment: # # "This product includes software developed by NASA Ames Research Center, # Lawrence Livermore National Laboratory, and Veridian Information # Solutions, Inc. # Visit www.OpenPBS.org for OpenPBS software support, # products, and information." # # 7. DISCLAIMER OF WARRANTY # # THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. ANY EXPRESS # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT # ARE EXPRESSLY DISCLAIMED. # # IN NO EVENT SHALL VERIDIAN CORPORATION, ITS AFFILIATED COMPANIES, OR THE # U.S. GOVERNMENT OR ANY OF ITS AGENCIES BE LIABLE FOR ANY DIRECT OR INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, # OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, # EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # # This license will be governed by the laws of the Commonwealth of Virginia, # without reference to its choice of law rules. ################################################################################ # This file contains procedures related to entry widgets used in xpbs. ################################################################################ # buildFullEntrybox: builds one of the following entry boxes and display it on # the 'frame_name' specified. # ----------- # (1) label | | <|=|> mode: right horizontal scrollbar # ----------- no all button # # ----------- # (2) label [all] | | <|=|> mode: right horizontal scrollbar # ----------- all button # # # ----------- # (3) label | | mode: bottom horiz. scrollbar # ----------- no all button # <|=======|> # # # ----------- # (4) label [all] | | mode: bottom horiz. scrollbar # ----------- all button # <|=======|> # OPTION: # The 'label_placement' allows for the label to be set "left", "right", # "top", and "bottom". # RETURNS: a list containing the frame holding the full entry box, # all_button (if any) label, entry, scrollbar widget names. proc buildFullEntrybox {frame_name label_width label entry_width \ default_entryval scrollbar_placement all_button \ {label_placement "left"}} { global TEXTFONT LABELFONT tk_version if {$all_button} { button $frame_name.all -font $LABELFONT -width 4 -text "all" -padx 1 \ -pady 1 } label $frame_name.label -font $LABELFONT -width $label_width \ -text $label -padx 1 -pady 1 entry $frame_name.entry -font $TEXTFONT \ -relief sunken \ -borderwidth 2 \ -width $entry_width if { $tk_version < 4.0 } { $frame_name.entry configure -scrollcommand "$frame_name.hscroll set" } else { $frame_name.entry configure -xscrollcommand "$frame_name.hscroll set" } $frame_name.entry insert 0 $default_entryval bind_entry_overselect $frame_name.entry if { [string compare $scrollbar_placement ""] != 0 } { scrollbar $frame_name.hscroll -orient horizontal \ -borderwidth 2 \ -relief groove if { $tk_version < 4.0 } { $frame_name.hscroll configure -command "$frame_name.entry view" } else { $frame_name.hscroll configure -command "$frame_name.entry xview" } } if {$label_width > 0} { if {[string compare $scrollbar_placement "left"] != 0} { if {[string compare $label_placement "left"] == 0} { pack $frame_name.label -side left -anchor nw -ipadx 1m -fill x } elseif {[string compare $label_placement "right"] == 0} { pack $frame_name.label -side right -anchor nw -ipadx 1m -fill x } elseif {[string compare $label_placement "top"] == 0} { pack $frame_name.label -side top -anchor nw -ipadx 1m -fill x } elseif {[string compare $label_placement "bottom"] == 0} { pack $frame_name.label -side bottom -anchor nw -ipadx 1m -fill x } } } if {$all_button && [string compare $scrollbar_placement "right"] == 0} { pack $frame_name.all $frame_name.entry \ $frame_name.hscroll -side left -anchor nw -ipadx 1m -fill x } elseif {!$all_button && \ [string compare $scrollbar_placement "right"] == 0} { pack $frame_name.entry $frame_name.hscroll \ -side left -anchor nw -ipadx 1m -fill x } elseif {$all_button && \ [string compare $scrollbar_placement "bottom"] == 0} { pack $frame_name.all $frame_name.entry \ -side left -anchor nw -fill x pack $frame_name.hscroll -side bottom -fill x -expand 1 } elseif {!$all_button && \ [string compare $scrollbar_placement "bottom"] == 0} { pack $frame_name.entry -side left -anchor nw -fill x pack $frame_name.hscroll -before $frame_name.entry -side bottom -fill x -expand 1 \ -anchor nw } elseif {$all_button && [string compare $scrollbar_placement "left"] == 0} { pack $frame_name.hscroll $frame_name.label $frame_name.all \ $frame_name.entry -side left -anchor nw -ipadx 1m -fill x } elseif {!$all_button && \ [string compare $scrollbar_placement "left"] == 0} { pack $frame_name.hscroll $frame_name.label $frame_name.entry \ -side left -anchor nw -ipadx 1m -fill x } else { pack $frame_name.entry -side left -anchor nw -fill x if {$tk_version < 4.0} { $frame_name.entry configure -scrollcommand "" } else { $frame_name.entry configure -xscrollcommand "" } } if {$all_button} { return [list $frame_name $frame_name.label $frame_name.all \ $frame_name.entry $frame_name.hscroll] } else { return [list $frame_name $frame_name.label $frame_name.entry \ $frame_name.hscroll] } } # disable_fullentry: disables all components of an entry box. proc disable_fullentry {entryLabel entry entryScroll {allButton ""}} { global disabledColor selColor if {[string compare $entryLabel ""] != 0} { disable_label $entryLabel $disabledColor } if {[string compare $entryScroll ""] != 0} { disable_scrollbar $entryScroll $disabledColor } if {[string compare $allButton ""] != 0} { disable_button $allButton } set state [lindex [$entry configure -state] 4] if {[string compare $state "disabled"] != 0} { set selColor($entry) [lindex [$entry configure -foreground] 4] $entry configure -state disabled -foreground $disabledColor } } # enable_fullentry: enables all components of an entry box. proc enable_fullentry {entryLabel entry entryScroll {allButton ""}} { global selColor foregroundColor if {[string compare $entryLabel ""] != 0} { enable_label $entryLabel } if {[string compare $entryScroll ""] != 0} { enable_scrollbar $entryScroll } if {[string compare $allButton ""] != 0} { enable_button $allButton } if [info exists selColor($entry)] { $entry configure -state normal -foreground $selColor($entry) } else { $entry configure -state normal } focus $entry } # compress_array: compresses a numerically-indexed array and returns its size. proc compress_array array_name { upvar $array_name arr set i 0 set next 0 for {set i 0} {$i < [array size arr]} {incr i} { if { [string compare $arr($i) ""] != 0 } { set arr2($next) $arr($i) incr next } } catch {unset arr} if [info exists arr2] { for {set i 0} {$i < [array size arr2]} {incr i} { set arr($i) $arr2($i) } } return $next } proc menuEntry {frame_name {args}} { set menuName [string trim $frame_name "."] global $menuName canvas tk_version TEXTFONT LABELFONT disabledColor set configure 0 set argc [llength $args] for {set i 0} {$i < $argc} {incr i} { switch -exact -- [lindex $args $i] { configure { set configure 1 } menubutton { if { ![info exists [set menuName](menubutton)]} { return "" } return [set [set menuName](menubutton)] } labelWidgets { if { ![info exists [set menuName](labelWidgets)]} { return "" } return [set [set menuName](labelWidgets)] } -menuvalues { set [set menuName](menuvalues) [join [lindex $args [incr i]]] } menuvalues { if { ![info exists [set menuName](menuvalues)]} { return "" } return [set [set menuName](menuvalues)] } -title { set [set menuName](title) [lindex $args [incr i]] } title { if { ![info exists [set menuName](title)]} { return "" } return [set [set menuName](title)] } -noDFLT { set [set menuName](noDFLT) [lindex $args [incr i]] } noDFLT { if { ![info exists [set menuName](noDFLT)]} { return 0 } return [set [set menuName](noDFLT)] } -prefix { set [set menuName](prefix) [lindex $args [incr i]] } prefix { if { ![info exists [set menuName](prefix)]} { return "" } return [set [set menuName](prefix)] } -textvariable { set [set menuName](textvariable) [lindex $args [incr i]] } -command { set [set menuName](command) [lindex $args [incr i]] } command { if { ![info exists [set menuName](command)]} { return "" } return [set [set menuName](command)] } disable { set labels [menuEntry $frame_name labelWidgets] foreach l $labels { if {[string compare $l ""] == 0} { break } disable_label $l $disabledColor } set mb [menuEntry $frame_name menubutton] $mb configure -state disabled return } enable { set labels [box $frame_name labelWidgets] foreach l $labels { if {[string compare $l ""] == 0} { break } enable_label $l } set mb [menuEntry $frame_name menubutton] $mb configure -state normal return } create { catch {unset $menuName} } getMenuArray { return "[set menuName]" } } } global [set [set menuName](textvariable)] set [set [set menuName](textvariable)] " " set f $frame_name set label [menuEntry $f title] label $frame_name.l -width [string length $label] -text $label -padx 1 \ -pady 1 -justify left -font $LABELFONT set [set menuName](labelWidgets) $frame_name.l menubutton $f.m -relief raised -bd 2 -anchor w -menu $f.m.menu \ -textvariable [set [set menuName](textvariable)] -font $LABELFONT set [set menuName](menubutton) $f.m menu $f.m.menu -borderwidth 2 -relief raised if {$tk_version >= 4.0} { $f.m configure -indicatoron 1 $f.m.menu configure -tearoff 0 } bind_button1 $f.m.menu set k 0 set maxwidth 0 set prefix [menuEntry $f prefix] set values [menuEntry $f menuvalues] foreach v $values { set cascLabel [lindex $v 0] set entries [lrange $v 1 end] set m2 $f.m.menu if {[string compare $cascLabel ""] != 0} { set m2 [menu $f.m.menu.$k] if {$tk_version >= 4.0} { $m2 configure -tearoff 0 } $f.m.menu add cascade -label $cascLabel -menu $m2 \ -font $LABELFONT } if {$k == 0} { set firstentry $m2 } foreach e $entries { set width [string length $prefix$e] if {$width > $maxwidth} { set maxwidth $width } set cmd [menuEntry $f command] if {[string compare $cmd ""] == 0} { $m2 add command -label $prefix$e -font $LABELFONT \ -command \ "set [set [set menuName](textvariable)] $prefix$e" } else { $m2 add command -label $prefix$e -font $LABELFONT \ -command \ "set [set [set menuName](textvariable)] $prefix$e; $cmd $e" } } incr k } if {![menuEntry $f noDFLT]} { $firstentry invoke 0 } $f.m configure -width $maxwidth pack $f.l $f.m -side top -anchor nw }