123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243 |
- # -*- mode: TCL; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
- #
- # $Id: SGrid.tcl,v 1.6 2002/01/24 09:13:58 idiscovery Exp $
- #
- # SGrid.tcl --
- #
- # This file implements Scrolled Grid widgets
- #
- # Copyright (c) 1993-1999 Ioi Kim Lam.
- # Copyright (c) 2000-2001 Tix Project Group.
- #
- # See the file "license.terms" for information on usage and redistribution
- # of this file, and for a DISCLAIMER OF ALL WARRANTIES.
- #
- global tkPriv
- if {![llength [info globals tkPriv]]} {
- tk::unsupported::ExposePrivateVariable tkPriv
- }
- #--------------------------------------------------------------------------
- # tkPriv elements used in this file:
- #
- # x -
- # y -
- # X -
- # Y -
- #--------------------------------------------------------------------------
- #
- tixWidgetClass tixScrolledGrid {
- -classname TixScrolledGrid
- -superclass tixScrolledWidget
- -method {
- }
- -flag {
- }
- -configspec {
- }
- -default {
- {.scrollbar auto}
- {*grid.borderWidth 1}
- {*grid.Background #c3c3c3}
- {*grid.highlightBackground #d9d9d9}
- {*grid.relief sunken}
- {*grid.takeFocus 1}
- {*Scrollbar.takeFocus 0}
- }
- }
- proc tixScrolledGrid:ConstructWidget {w} {
- upvar #0 $w data
- tixChainMethod $w ConstructWidget
- set data(w:grid) [tixGrid $w.grid]
- set data(w:hsb) \
- [scrollbar $w.hsb -orient horizontal -takefocus 0]
- set data(w:vsb) \
- [scrollbar $w.vsb -orient vertical -takefocus 0]
- set data(pw:client) $data(w:grid)
- pack $data(w:grid) -expand yes -fill both -padx 0 -pady 0
- }
- proc tixScrolledGrid:SetBindings {w} {
- upvar #0 $w data
- tixChainMethod $w SetBindings
- $data(w:grid) config \
- -xscrollcommand "$data(w:hsb) set"\
- -yscrollcommand "$data(w:vsb) set"\
- -sizecmd [list tixScrolledWidget:Configure $w] \
- -formatcmd "tixCallMethod $w FormatCmd"
- $data(w:hsb) config -command "$data(w:grid) xview"
- $data(w:vsb) config -command "$data(w:grid) yview"
- bindtags $data(w:grid) \
- "$data(w:grid) TixSGrid TixGrid [winfo toplevel $data(w:grid)] all"
- tixSetMegaWidget $data(w:grid) $w
- }
- #----------------------------------------------------------------------
- # RAW event bindings
- #----------------------------------------------------------------------
- proc tixScrolledGridBind {} {
- tixBind TixScrolledGrid <ButtonPress-1> {
- tixScrolledGrid:Button-1 [tixGetMegaWidget %W] %x %y
- }
- tixBind TixScrolledGrid <Shift-ButtonPress-1> {
- tixScrolledGrid:Shift-Button-1 %W %x %y
- }
- tixBind TixScrolledGrid <Control-ButtonPress-1> {
- tixScrolledGrid:Control-Button-1 %W %x %y
- }
- tixBind TixScrolledGrid <ButtonRelease-1> {
- tixScrolledGrid:ButtonRelease-1 %W %x %y
- }
- tixBind TixScrolledGrid <Double-ButtonPress-1> {
- tixScrolledGrid:Double-1 %W %x %y
- }
- tixBind TixScrolledGrid <B1-Motion> {
- set tkPriv(x) %x
- set tkPriv(y) %y
- set tkPriv(X) %X
- set tkPriv(Y) %Y
- tixScrolledGrid:B1-Motion %W %x %y
- }
- tixBind TixScrolledGrid <Control-B1-Motion> {
- set tkPriv(x) %x
- set tkPriv(y) %y
- set tkPriv(X) %X
- set tkPriv(Y) %Y
- tixScrolledGrid:Control-B1-Motion %W %x %y
- }
- tixBind TixScrolledGrid <B1-Leave> {
- set tkPriv(x) %x
- set tkPriv(y) %y
- set tkPriv(X) %X
- set tkPriv(Y) %Y
- tixScrolledGrid:B1-Leave %W
- }
- tixBind TixScrolledGrid <B1-Enter> {
- tixScrolledGrid:B1-Enter %W %x %y
- }
- tixBind TixScrolledGrid <Control-B1-Leave> {
- set tkPriv(x) %x
- set tkPriv(y) %y
- set tkPriv(X) %X
- set tkPriv(Y) %Y
- tixScrolledGrid:Control-B1-Leave %W
- }
- tixBind TixScrolledGrid <Control-B1-Enter> {
- tixScrolledGrid:Control-B1-Enter %W %x %y
- }
- # Keyboard bindings
- #
- tixBind TixScrolledGrid <Up> {
- tixScrolledGrid:DirKey %W up
- }
- tixBind TixScrolledGrid <Down> {
- tixScrolledGrid:DirKey %W down
- }
- tixBind TixScrolledGrid <Left> {
- tixScrolledGrid:DirKey %W left
- }
- tixBind TixScrolledGrid <Right> {
- tixScrolledGrid:DirKey %W right
- }
- tixBind TixScrolledGrid <Prior> {
- %W yview scroll -1 pages
- }
- tixBind TixScrolledGrid <Next> {
- %W yview scroll 1 pages
- }
- tixBind TixScrolledGrid <Return> {
- tixScrolledGrid:Return %W
- }
- tixBind TixScrolledGrid <space> {
- tixScrolledGrid:Space %W
- }
- }
- #----------------------------------------------------------------------
- #
- #
- # Mouse bindings
- #
- #
- #----------------------------------------------------------------------
- proc tixScrolledGrid:Button-1 {w x y} {
- if {[$w cget -state] == "disabled"} {
- return
- }
- if {[$w cget -takefocus]} {
- focus $w
- }
- case [tixScrolled:GetState $w] {
- {0} {
- tixScrolledGrid:GoState s1 $w $x $y
- }
- {b0} {
- tixScrolledGrid:GoState b1 $w $x $y
- }
- {m0} {
- tixScrolledGrid:GoState m1 $w $x $y
- }
- {e0} {
- tixScrolledGrid:GoState e1 $w $x $y
- }
- }
- }
- #----------------------------------------------------------------------
- #
- # option configs
- #----------------------------------------------------------------------
- #----------------------------------------------------------------------
- #
- # Widget commands
- #----------------------------------------------------------------------
- #----------------------------------------------------------------------
- #
- # Private Methods
- #----------------------------------------------------------------------
- #----------------------------------------------------------------------
- # Virtual Methods
- #----------------------------------------------------------------------
- proc tixScrolledGrid:FormatCmd {w area x1 y1 x2 y2} {
- # do nothing
- }
- #----------------------------------------------------------------------
- # virtual functions to query the client window's scroll requirement
- #----------------------------------------------------------------------
- proc tixScrolledGrid:GeometryInfo {w mW mH} {
- upvar #0 $w data
- if {$mW < 1} {
- set mW 1
- }
- if {$mH < 1} {
- set mH 1
- }
- return [$data(w:grid) geometryinfo $mW $mH]
- }
|