|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tixWidgetClass tixScrolledListBox { |
|
-classname TixScrolledListBox |
|
-superclass tixScrolledWidget |
|
-method { |
|
} |
|
-flag { |
|
-anchor -browsecmd -command -state |
|
} |
|
-static { |
|
-anchor |
|
} |
|
-configspec { |
|
{-anchor anchor Anchor w} |
|
{-browsecmd browseCmd BrowseCmd ""} |
|
{-command command Command ""} |
|
{-state state State normal} |
|
{-takefocus takeFocus TakeFocus 1 tixVerifyBoolean} |
|
} |
|
-default { |
|
{.scrollbar auto} |
|
{*borderWidth 1} |
|
{*listbox.highlightBackground #d9d9d9} |
|
{*listbox.relief sunken} |
|
{*listbox.background #c3c3c3} |
|
{*listbox.takeFocus 1} |
|
{*Scrollbar.takeFocus 0} |
|
} |
|
} |
|
|
|
proc tixScrolledListBox:InitWidgetRec {w} { |
|
upvar #0 $w data |
|
|
|
tixChainMethod $w InitWidgetRec |
|
|
|
set data(x-first) 0 |
|
set data(x-last) 1 |
|
set data(y-first) 0 |
|
set data(y-last) 1 |
|
} |
|
|
|
proc tixScrolledListBox:ConstructWidget {w} { |
|
upvar #0 $w data |
|
|
|
tixChainMethod $w ConstructWidget |
|
|
|
set data(w:listbox) \ |
|
[listbox $w.listbox] |
|
set data(w:hsb) \ |
|
[scrollbar $w.hsb -orient horizontal] |
|
set data(w:vsb) \ |
|
[scrollbar $w.vsb -orient vertical ] |
|
|
|
set data(pw:client) $data(w:listbox) |
|
} |
|
|
|
proc tixScrolledListBox:SetBindings {w} { |
|
upvar #0 $w data |
|
|
|
tixChainMethod $w SetBindings |
|
|
|
$data(w:listbox) config \ |
|
-xscrollcommand "tixScrolledListBox:XView $w"\ |
|
-yscrollcommand "tixScrolledListBox:YView $w" |
|
|
|
$data(w:hsb) config -command "$data(w:listbox) xview" |
|
$data(w:vsb) config -command "$data(w:listbox) yview" |
|
|
|
bind $w <Configure> "+tixScrolledListBox:Configure $w" |
|
bind $w <FocusIn> "focus $data(w:listbox)" |
|
|
|
bindtags $data(w:listbox) \ |
|
"$data(w:listbox) TixListboxState Listbox TixListbox [winfo toplevel $data(w:listbox)] all" |
|
tixSetMegaWidget $data(w:listbox) $w |
|
} |
|
|
|
proc tixScrolledListBoxBind {} { |
|
tixBind TixListboxState <1> { |
|
if {[set [tixGetMegaWidget %W](-state)] eq "disabled"} { |
|
break |
|
} |
|
} |
|
tixBind TixListbox <1> { |
|
if {[string is true -strict [%W cget -takefocus]]} { |
|
focus %W |
|
} |
|
tixScrolledListBox:Browse [tixGetMegaWidget %W] |
|
} |
|
|
|
tixBind TixListboxState <B1-Motion> { |
|
if {[set [tixGetMegaWidget %W](-state)] eq "disabled"} { |
|
break |
|
} |
|
} |
|
tixBind TixListbox <B1-Motion> { |
|
tixScrolledListBox:Browse [tixGetMegaWidget %W] |
|
} |
|
|
|
tixBind TixListboxState <Up> { |
|
if {[set [tixGetMegaWidget %W](-state)] eq "disabled"} { |
|
break |
|
} |
|
} |
|
tixBind TixListbox <Up> { |
|
tixScrolledListBox:KeyBrowse [tixGetMegaWidget %W] |
|
} |
|
|
|
tixBind TixListboxState <Down> { |
|
if {[set [tixGetMegaWidget %W](-state)] eq "disabled"} { |
|
break |
|
} |
|
} |
|
tixBind TixListbox <Down> { |
|
tixScrolledListBox:KeyBrowse [tixGetMegaWidget %W] |
|
} |
|
|
|
tixBind TixListboxState <Return> { |
|
if {[set [tixGetMegaWidget %W](-state)] eq "disabled"} { |
|
break |
|
} |
|
} |
|
tixBind TixListbox <Return> { |
|
tixScrolledListBox:KeyInvoke [tixGetMegaWidget %W] |
|
} |
|
|
|
|
|
tixBind TixListboxState <Double-1> { |
|
if {[set [tixGetMegaWidget %W](-state)] eq "disabled"} { |
|
break |
|
} |
|
} |
|
tixBind TixListbox <Double-1> { |
|
tixScrolledListBox:Invoke [tixGetMegaWidget %W] |
|
} |
|
|
|
tixBind TixListboxState <ButtonRelease-1> { |
|
if {[set [tixGetMegaWidget %W](-state)] eq "disabled"} { |
|
break |
|
} |
|
} |
|
tixBind TixListbox <ButtonRelease-1> { |
|
tixScrolledListBox:Browse [tixGetMegaWidget %W] |
|
} |
|
} |
|
|
|
proc tixScrolledListBox:Browse {w} { |
|
upvar #0 $w data |
|
|
|
if {$data(-browsecmd) != ""} { |
|
set bind(specs) {%V} |
|
set bind(%V) [$data(w:listbox) get \ |
|
[$data(w:listbox) nearest [tixEvent flag y]]] |
|
tixEvalCmdBinding $w $data(-browsecmd) bind |
|
} |
|
} |
|
|
|
proc tixScrolledListBox:KeyBrowse {w} { |
|
upvar #0 $w data |
|
|
|
if {$data(-browsecmd) != ""} { |
|
set bind(specs) {%V} |
|
set bind(%V) [$data(w:listbox) get active] |
|
tixEvalCmdBinding $w $data(-browsecmd) bind |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
proc tixScrolledListBox:Invoke {w} { |
|
upvar #0 $w data |
|
|
|
if {$data(-command) != ""} { |
|
set bind(specs) {%V} |
|
set bind(%V) [$data(w:listbox) get \ |
|
[$data(w:listbox) nearest [tixEvent flag y]]] |
|
tixEvalCmdBinding $w $data(-command) bind |
|
} |
|
} |
|
|
|
proc tixScrolledListBox:KeyInvoke {w} { |
|
upvar #0 $w data |
|
|
|
if {$data(-command) != ""} { |
|
set bind(specs) {%V} |
|
set bind(%V) [$data(w:listbox) get active] |
|
tixEvalCmdBinding $w $data(-command) bind |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
|
|
proc tixScrolledListBox:config-takefocus {w value} { |
|
upvar #0 $w data |
|
$data(w:listbox) config -takefocus $value |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
proc tixScrolledListBox:XView {w first last} { |
|
upvar #0 $w data |
|
|
|
set data(x-first) $first |
|
set data(x-last) $last |
|
|
|
$data(w:hsb) set $first $last |
|
tixWidgetDoWhenIdle tixScrolledWidget:Configure $w |
|
|
|
|
|
} |
|
|
|
proc tixScrolledListBox:YView {w first last} { |
|
upvar #0 $w data |
|
|
|
set data(y-first) $first |
|
set data(y-last) $last |
|
|
|
$data(w:vsb) set $first $last |
|
tixWidgetDoWhenIdle tixScrolledWidget:Configure $w |
|
|
|
|
|
|
|
update idletasks |
|
} |
|
|
|
|
|
|
|
|
|
|
|
proc tixScrolledListBox:GeometryInfo {w mW mH} { |
|
upvar #0 $w data |
|
|
|
return [list \ |
|
[list $data(x-first) $data(x-last)]\ |
|
[list $data(y-first) $data(y-last)]] |
|
} |
|
|
|
proc tixScrolledListBox:Configure {w} { |
|
upvar #0 $w data |
|
|
|
tixWidgetDoWhenIdle tixScrolledListBox:TrickScrollbar $w |
|
|
|
if {$data(-anchor) eq "e"} { |
|
$data(w:listbox) xview 100000 |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
proc tixScrolledListBox:TrickScrollbar {w} { |
|
upvar #0 $w data |
|
|
|
set inc [$data(w:listbox) select include 0] |
|
|
|
$data(w:listbox) select set 0 |
|
if {!$inc} { |
|
$data(w:listbox) select clear 0 |
|
} |
|
} |
|
|