# -*- 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 { tixScrolledGrid:Button-1 [tixGetMegaWidget %W] %x %y } tixBind TixScrolledGrid { tixScrolledGrid:Shift-Button-1 %W %x %y } tixBind TixScrolledGrid { tixScrolledGrid:Control-Button-1 %W %x %y } tixBind TixScrolledGrid { tixScrolledGrid:ButtonRelease-1 %W %x %y } tixBind TixScrolledGrid { tixScrolledGrid:Double-1 %W %x %y } tixBind TixScrolledGrid { set tkPriv(x) %x set tkPriv(y) %y set tkPriv(X) %X set tkPriv(Y) %Y tixScrolledGrid:B1-Motion %W %x %y } tixBind TixScrolledGrid { 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 { set tkPriv(x) %x set tkPriv(y) %y set tkPriv(X) %X set tkPriv(Y) %Y tixScrolledGrid:B1-Leave %W } tixBind TixScrolledGrid { tixScrolledGrid:B1-Enter %W %x %y } tixBind TixScrolledGrid { set tkPriv(x) %x set tkPriv(y) %y set tkPriv(X) %X set tkPriv(Y) %Y tixScrolledGrid:Control-B1-Leave %W } tixBind TixScrolledGrid { tixScrolledGrid:Control-B1-Enter %W %x %y } # Keyboard bindings # tixBind TixScrolledGrid { tixScrolledGrid:DirKey %W up } tixBind TixScrolledGrid { tixScrolledGrid:DirKey %W down } tixBind TixScrolledGrid { tixScrolledGrid:DirKey %W left } tixBind TixScrolledGrid { tixScrolledGrid:DirKey %W right } tixBind TixScrolledGrid { %W yview scroll -1 pages } tixBind TixScrolledGrid { %W yview scroll 1 pages } tixBind TixScrolledGrid { tixScrolledGrid:Return %W } tixBind TixScrolledGrid { 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] }