244 lines
5.8 KiB
Tcl
244 lines
5.8 KiB
Tcl
# -*- 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]
|
|
}
|