diff options
Diffstat (limited to 'itcl/iwidgets3.0.0/generic/timeentry.itk')
-rw-r--r-- | itcl/iwidgets3.0.0/generic/timeentry.itk | 398 |
1 files changed, 0 insertions, 398 deletions
diff --git a/itcl/iwidgets3.0.0/generic/timeentry.itk b/itcl/iwidgets3.0.0/generic/timeentry.itk deleted file mode 100644 index 8366e524f7e..00000000000 --- a/itcl/iwidgets3.0.0/generic/timeentry.itk +++ /dev/null @@ -1,398 +0,0 @@ -# -# Timeentry -# ---------------------------------------------------------------------- -# Implements a quicken style time entry field with a popup clock -# by combining the timefield and watch widgets together. This -# allows a user to enter the time via the keyboard or by using the -# mouse by selecting the watch icon which brings up a popup clock. -# ---------------------------------------------------------------------- -# AUTHOR: Mark L. Ulferts E-mail: mulferts@austin.dsccc.com -# -# @(#) $Id$ -# ---------------------------------------------------------------------- -# Copyright (c) 1997 DSC Technologies Corporation -# ====================================================================== -# Permission to use, copy, modify, distribute and license this software -# and its documentation for any purpose, and without fee or written -# agreement with DSC, is hereby granted, provided that the above copyright -# notice appears in all copies and that both the copyright notice and -# warranty disclaimer below appear in supporting documentation, and that -# the names of DSC Technologies Corporation or DSC Communications -# Corporation not be used in advertising or publicity pertaining to the -# software without specific, written prior permission. -# -# DSC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING -# ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, AND NON- -# INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND THE -# AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, -# SUPPORT, UPTIMES, ENHANCEMENTS, OR MODIFICATIONS. IN NO EVENT SHALL -# DSC BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR -# ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -# WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION, -# ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS -# SOFTWARE. -# ====================================================================== - -# -# Usual options. -# -itk::usual Timeentry { - keep -background -borderwidth -cursor -foreground -highlightcolor \ - -highlightthickness -labelfont -textbackground -textfont -} - -# ------------------------------------------------------------------ -# TIMEENTRY -# ------------------------------------------------------------------ -class iwidgets::Timeentry { - inherit iwidgets::Timefield - - constructor {args} {} - - itk_option define -grab grab Grab "global" - itk_option define -icon icon Icon {} - itk_option define -state state State normal - itk_option define -closetext closeText Text Close - - # - # The watch widget isn't created until needed, yet we need - # its options to be available upon creation of a timeentry widget. - # So, we'll define them in these class now so they can just be - # propagated onto the watch later. - # - itk_option define -hourradius hourRadius Radius .50 - itk_option define -hourcolor hourColor Color red - - itk_option define -minuteradius minuteRadius Radius .80 - itk_option define -minutecolor minuteColor Color yellow - - itk_option define -pivotradius pivotRadius Radius .10 - itk_option define -pivotcolor pivotColor Color white - - itk_option define -secondradius secondRadius Radius .90 - itk_option define -secondcolor secondColor Color black - - itk_option define -clockcolor clockColor Color white - itk_option define -clockstipple clockStipple ClockStipple {} - - itk_option define -tickcolor tickColor Color black - - itk_option define -watchheight watchHeight Height 175 - itk_option define -watchwidth watchWidth Width 155 - - protected { - method _getPopupTime {} - method _releaseGrab {} - method _popup {} - method _getDefaultIcon {} - - common _defaultIcon "" - } -} - -# -# Provide a lowercased access method for the timeentry class. -# -proc ::iwidgets::timeentry {pathName args} { - uplevel ::iwidgets::Timeentry $pathName $args -} - -# -# Use option database to override default resources of base classes. -# -option add *Timeentry.watchWidth 155 widgetDefault -option add *Timeentry.watchHeight 175 widgetDefault - -# ------------------------------------------------------------------ -# CONSTRUCTOR -# ------------------------------------------------------------------ -body iwidgets::Timeentry::constructor {args} { - # - # Create an icon label to act as a button to bring up the - # watch popup. - # - itk_component add iconbutton { - label $itk_interior.iconbutton -relief raised - } { - keep -borderwidth -cursor -foreground - } - grid $itk_component(iconbutton) -row 0 -column 0 -sticky ns - - # - # Initialize the widget based on the command line options. - # - eval itk_initialize $args -} - -# ------------------------------------------------------------------ -# OPTIONS -# ------------------------------------------------------------------ - -# ------------------------------------------------------------------ -# OPTION: -icon -# -# Specifies the clock icon image to be used in the time entry. -# Should one not be provided, then a default pixmap will be used -# if possible, bitmap otherwise. -# ------------------------------------------------------------------ -configbody iwidgets::Timeentry::icon { - if {$itk_option(-icon) == {}} { - $itk_component(iconbutton) configure -image [_getDefaultIcon] - } else { - if {[lsearch [image names] $itk_option(-icon)] == -1} { - error "bad icon option \"$itk_option(-icon)\":\ - should be an existing image" - } else { - $itk_component(iconbutton) configure -image $itk_option(-icon) - } - } -} - -# ------------------------------------------------------------------ -# OPTION: -grab -# -# Specifies the grab level, local or global, to be obtained when -# bringing up the popup watch. The default is global. -# ------------------------------------------------------------------ -configbody iwidgets::Timeentry::grab { - switch -- $itk_option(-grab) { - "local" - "global" {} - default { - error "bad grab option \"$itk_option(-grab)\":\ - should be local or global" - } - } -} - -# ------------------------------------------------------------------ -# OPTION: -state -# -# Specifies the state of the widget which may be disabled or -# normal. A disabled state prevents selection of the time field -# or time icon button. -# ------------------------------------------------------------------ -configbody iwidgets::Timeentry::state { - switch -- $itk_option(-state) { - normal { - bind $itk_component(iconbutton) <Button-1> [code $this _popup] - } - disabled { - bind $itk_component(iconbutton) <Button-1> {} - } - } -} - -# ------------------------------------------------------------------ -# METHODS -# ------------------------------------------------------------------ -# ------------------------------------------------------------------ -# PROTECTED METHOD: _getDefaultIcon -# -# This method is invoked uto retrieve the name of the default icon -# image displayed in the icon button. -# ------------------------------------------------------------------ -body iwidgets::Timeentry::_getDefaultIcon {} { - - if {[lsearch [image types] pixmap] != -1} { - set _defaultIcon [image create pixmap -data { - /* XPM */ - static char *watch1a[] = { - /* width height num_colors chars_per_pixel */ - " 20 20 8 1", - /* colors */ - ". c #000000", - "# c #000099", - "a c #009999", - "b c #999999", - "c c #cccccc", - "d c #ffff00", - "e c #d9d9d9", - "f c #ffffff", - /* pixels */ - "eeeeebbbcccccbbbeeee", - "eeeee...#####..beeee", - "eeeee#aacccccaabeeee", - "eeee#accccccccc##eee", - "eee#ccc#cc#ccdcff#ee", - "ee#accccccccccfcca#e", - "eeaccccccc.cccfcccae", - "eeac#cccfc.cccc##cae", - "e#cccccffc.cccccccc#", - "e#ccccfffc.cccccccc#", - "e#cc#ffcc......c#cc#", - "e#ccfffccc.cccccccc#", - "e#cffccfcc.cccccccc#", - "eeafdccfcccccccd#cae", - "eeafcffcccccccccccae", - "eee#fcc#cccccdccc#ee", - "eee#fcc#cc#cc#ccc#ee", - "eeee#accccccccc##eee", - "eeeee#aacccccaabeeee", - "eeeee...#####..beeee" - }; - }] - } else { - set _defaultIcon [image create bitmap -data { - #define watch1a_width 20 - #define watch1a_height 20 - static char watch1a_bits[] = { - 0x40,0x40,0xf0,0xe0,0x7f,0xf0,0xe0,0xe0,0xf0,0x30, - 0x80,0xf1,0x88,0x04,0xf2,0x0c,0x00,0xf6,0x04,0x04, - 0xf4,0x94,0x84,0xf5,0x02,0x06,0xf8,0x02,0x0c,0xf8, - 0x12,0x7e,0xf9,0x02,0x04,0xf8,0x02,0x24,0xf8,0x04, - 0x00,0xf5,0x04,0x00,0xf4,0x88,0x02,0xf2,0x88,0x64, - 0xf2,0x30,0x80,0xf1,0xe0,0x60,0xf0,0xe0,0xff,0xf0}; - }] - } - - # - # Since this image will only need to be created once, we redefine - # this method to just return the image name for subsequent calls. - # - body ::iwidgets::Timeentry::_getDefaultIcon {} { - return $_defaultIcon - } - - return $_defaultIcon -} - - -# ------------------------------------------------------------------ -# PROTECTED METHOD: _popup -# -# This method is invoked upon selection of the icon button. It -# creates a watch widget within a toplevel popup, calculates -# the position at which to display the watch, performs a grab -# and displays the watch. -# ------------------------------------------------------------------ -body iwidgets::Timeentry::_popup {} { - # - # First, let's nullify the icon binding so that any another - # selections are ignored until were done with this one. Next, - # change the relief of the icon. - # - bind $itk_component(iconbutton) <Button-1> {} - $itk_component(iconbutton) configure -relief sunken - - # - # Create a withdrawn toplevel widget and remove the window - # decoration via override redirect. - # - itk_component add -private popup { - toplevel $itk_interior.popup - } - $itk_component(popup) configure -borderwidth 2 -background black - wm withdraw $itk_component(popup) - wm overrideredirect $itk_component(popup) 1 - - # - # Add a binding to for Escape to always release the grab. - # - bind $itk_component(popup) <KeyPress-Escape> [code $this _releaseGrab] - - # - # Create the watch widget. - # - itk_component add watch { - iwidgets::Watch $itk_component(popup).watch - } { - usual - - rename -width -watchwidth watchWidth Width - rename -height -watchheight watchHeight Height - - keep -hourradius -minuteradius -minutecolor -pivotradius -pivotcolor \ - -secondradius -secondcolor -clockcolor -clockstipple -tickcolor - } - grid $itk_component(watch) -row 0 -column 0 - $itk_component(watch) configure -cursor top_left_arrow - - # - # Create a button widget so the user can say they are done. - # - itk_component add close { - button $itk_component(popup).close -command [code $this _getPopupTime] - } { - usual - rename -text -closetext closeText Text - } - grid $itk_component(close) -row 1 -column 0 -sticky ew - $itk_component(close) configure -cursor top_left_arrow - - # - # The icon button will be used as the basis for the position of the - # popup on the screen. We'll always attempt to locate the popup - # off the lower right corner of the button. If that would put - # the popup off the screen, then we'll put above the upper left. - # - set rootx [winfo rootx $itk_component(iconbutton)] - set rooty [winfo rooty $itk_component(iconbutton)] - set popupwidth [cget -watchwidth] - set popupheight [expr [cget -watchheight] + \ - [winfo reqheight $itk_component(close)]] - - set popupx [expr $rootx + 3 + \ - [winfo width $itk_component(iconbutton)]] - set popupy [expr $rooty + 3 + \ - [winfo height $itk_component(iconbutton)]] - - if {([expr $popupx + $popupwidth] > [winfo screenwidth .]) || \ - ([expr $popupy + $popupheight] > [winfo screenheight .])} { - set popupx [expr $rootx - 3 - $popupwidth] - set popupy [expr $rooty - 3 - $popupheight] - } - - # - # Get the current time from the timefield widget and both - # show and select it on the watch. - # - $itk_component(watch) show [get] - - # - # Display the popup at the calculated position. - # - wm geometry $itk_component(popup) +$popupx+$popupy - wm deiconify $itk_component(popup) - tkwait visibility $itk_component(popup) - - # - # Perform either a local or global grab based on the -grab option. - # - if {$itk_option(-grab) == "local"} { - grab $itk_component(popup) - } else { - grab -global $itk_component(popup) - } - - # - # Make sure the widget is above all others and give it focus. - # - raise $itk_component(popup) - focus $itk_component(watch) -} - -# ------------------------------------------------------------------ -# PROTECTED METHOD: _popupGetTime -# -# This method is the callback for selection of a time on the -# watch. It releases the grab and sets the time in the -# timefield widget. -# ------------------------------------------------------------------ -body iwidgets::Timeentry::_getPopupTime {} { - show [$itk_component(watch) get -clicks] - _releaseGrab -} - -# ------------------------------------------------------------------ -# PROTECTED METHOD: _releaseGrab -# -# This method releases the grab, destroys the popup, changes the -# relief of the button back to raised and reapplies the binding -# to the icon button that engages the popup action. -# ------------------------------------------------------------------ -body iwidgets::Timeentry::_releaseGrab {} { - grab release $itk_component(popup) - $itk_component(iconbutton) configure -relief raised - destroy $itk_component(popup) - bind $itk_component(iconbutton) <Button-1> [code $this _popup] -} |