spinbox.tcl –

This file defines the default bindings for Tk spinbox widgets and provides

procedures that help in implementing those bindings. The spinbox builds

off the entry widget, so it can reuse Entry bindings and procedures.

RCS: @(#) $Id: spinbox.tcl,v 1.6.2.1 2006/01/25 18:21:41 dgp Exp $

Copyright (c) 1992-1994 The Regents of the University of California.

Copyright (c) 1994-1997 Sun Microsystems, Inc.

Copyright (c) 1999-2000 Jeffrey Hobbs

Copyright (c) 2000 Ajuba Solutions

See the file “license.terms” for information on usage and redistribution

of this file, and for a DISCLAIMER OF ALL WARRANTIES.

#———————————————————————––

Elements of tk::Priv that are used in this file:

afterId - If non-null, it means that auto-scanning is underway

and it gives the “after” id for the next auto-scan

command to be executed.

mouseMoved - Non-zero means the mouse has moved a significant

amount since the button went down (so, for example,

start dragging out a selection).

pressX - X-coordinate at which the mouse button was pressed.

selectMode - The style of selection currently underway:

char, word, or line.

x, y - Last known mouse coordinates for scanning

and auto-scanning.

data - Used for Cut and Copy

#———————————————————————––

Initialize namespace

namespace eval ::tk::spinbox {}

#———————————————————————––

The code below creates the default class bindings for entries.

#———————————————————————––
bind Spinbox <> {
if {![catch {::tk::spinbox::GetSelection %W} tk::Priv(data)]} {
clipboard clear -displayof %W
clipboard append -displayof %W $tk::Priv(data)
%W delete sel.first sel.last
unset tk::Priv(data)
}
}
bind Spinbox <> {
if {![catch {::tk::spinbox::GetSelection %W} tk::Priv(data)]} {
clipboard clear -displayof %W
clipboard append -displayof %W tk::Priv(data) unset tk::Priv(data) } } bind Spinbox <<Paste>> { global tcl_platform catch { if {[tk windowingsystem] ne "x11"} { catch { %W delete sel.first sel.last } } %W insert insert [::tk::GetSelection %W CLIPBOARD] ::tk::EntrySeeInsert %W } } bind Spinbox <<Clear>> { %W delete sel.first sel.last } bind Spinbox <<PasteSelection>> { if {tk_strictMotif || ![info exists tk::Priv(mouseMoved)]
|| !$tk::Priv(mouseMoved)} {
::tk::spinbox::Paste %W %x
}
}

Standard Motif bindings:

bind Spinbox <1> {
::tk::spinbox::ButtonDown %W %x %y
}
bind Spinbox {
::tk::spinbox::Motion %W %x %y
}
bind Spinbox {
set tk::Priv(selectMode) word
::tk::spinbox::MouseSelect %W %x sel.first
}
bind Spinbox {
set tk::Priv(selectMode) line
::tk::spinbox::MouseSelect %W %x 0
}
bind Spinbox {
set tk::Priv(selectMode) char
%W selection adjust @%x
}
bind Spinbox {
set tk::Priv(selectMode) word
::tk::spinbox::MouseSelect %W %x
}
bind Spinbox {
set tk::Priv(selectMode) line
::tk::spinbox::MouseSelect %W %x
}
bind Spinbox {
set tk::Priv(x) %x
::tk::spinbox::AutoScan %W
}
bind Spinbox {
tk::CancelRepeat
}
bind Spinbox {
::tk::spinbox::ButtonUp %W %x %y
}
bind Spinbox {
%W icursor @%x
}

bind Spinbox {
%W invoke buttonup
}
bind Spinbox {
%W invoke buttondown
}

bind Spinbox {
::tk::EntrySetCursor %W [expr {[%W index insert] - 1}]
}
bind Spinbox {
::tk::EntrySetCursor %W [expr {[%W index insert] + 1}]
}
bind Spinbox {
::tk::EntryKeySelect %W [expr {[%W index insert] - 1}]
::tk::EntrySeeInsert %W
}
bind Spinbox {
::tk::EntryKeySelect %W [expr {[%W index insert] + 1}]
::tk::EntrySeeInsert %W
}
bind Spinbox {
::tk::EntrySetCursor %W [::tk::EntryPreviousWord %W insert]
}
bind Spinbox {
::tk::EntrySetCursor %W [::tk::EntryNextWord %W insert]
}
bind Spinbox {
::tk::EntryKeySelect %W [::tk::EntryPreviousWord %W insert]
::tk::EntrySeeInsert %W
}
bind Spinbox {
::tk::EntryKeySelect %W [::tk::EntryNextWord %W insert]
::tk::EntrySeeInsert %W
}
bind Spinbox {
::tk::EntrySetCursor %W 0
}
bind Spinbox {
::tk::EntryKeySelect %W 0
::tk::EntrySeeInsert %W
}
bind Spinbox {
::tk::EntrySetCursor %W end
}
bind Spinbox {
::tk::EntryKeySelect %W end
::tk::EntrySeeInsert %W
}

bind Spinbox {
if {[%W selection present]} {
%W delete sel.first sel.last
} else {
%W delete insert
}
}
bind Spinbox {
::tk::EntryBackspace %W
}

bind Spinbox {
%W selection from insert
}
bind Spinbox