Attachment "scrollw.patch" to
ticket [6632134ce9]
added by
oehhar
2013-10-14 15:58:01.
--- U:/elmicron/tech/tcl/bwidget/Kechel_2013-10-07/scrollw.tcl Mon Oct 07 16:28:01 2013
+++ U:/elmicron/tech/tcl/bwidget/checkout_bwidget/scrollw.tcl Mon Sep 02 11:37:00 2013
@@ -1,296 +1,295 @@
-# -----------------------------------------------------------------------------
-# scrollw.tcl
-# This file is part of Unifix BWidget Toolkit
-# $Id: scrollw.tcl,v 1.13.2.2 2011/02/14 16:56:09 oehhar Exp $
-# -----------------------------------------------------------------------------
-# Index of commands:
-# - ScrolledWindow::create
-# - ScrolledWindow::getframe
-# - ScrolledWindow::setwidget
-# - ScrolledWindow::configure
-# - ScrolledWindow::cget
-# - ScrolledWindow::_set_hframe
-# - ScrolledWindow::_set_vscroll
-# - ScrolledWindow::_setData
-# - ScrolledWindow::_setSBSize
-# - ScrolledWindow::_realize
-# -----------------------------------------------------------------------------
-
-namespace eval ScrolledWindow {
- Widget::define ScrolledWindow scrollw
-
- Widget::declare ScrolledWindow {
- {-background TkResource "" 0 button}
- {-scrollbar Enum both 0 {none both vertical horizontal}}
- {-auto Enum both 0 {none both vertical horizontal}}
- {-sides Enum se 0 {ne en nw wn se es sw ws}}
- {-size Int 0 1 "%d >= 0"}
- {-ipad Int 1 1 "%d >= 0"}
- {-managed Boolean 1 1}
- {-relief TkResource flat 0 frame}
- {-borderwidth TkResource 0 0 frame}
- {-bg Synonym -background}
- {-bd Synonym -borderwidth}
- }
-
- Widget::addmap ScrolledWindow "" :cmd {-relief {} -borderwidth {}}
-}
-
-
-# -----------------------------------------------------------------------------
-# Command ScrolledWindow::create
-# -----------------------------------------------------------------------------
-proc ScrolledWindow::create { path args } {
- Widget::init ScrolledWindow $path $args
-
- Widget::getVariable $path data
-
- set bg [Widget::cget $path -background]
- set sbsize [Widget::cget $path -size]
-
- if { $::Widget::_theme } {
- set sw [eval [list ttk::frame $path \
- -relief flat -borderwidth 0 -takefocus 0] \
- [Widget::subcget $path :cmd]]
- ttk::scrollbar $path.hscroll \
- -takefocus 0 -orient horiz
- ttk::scrollbar $path.vscroll \
- -takefocus 0 -orient vert
- } else {
- if {$bg != ""} {
- set bg [list -background $bg]
- }
- set sw [eval [list frame $path \
- -relief flat -borderwidth 0] $bg [list \
- -highlightthickness 0 -takefocus 0] \
- [Widget::subcget $path :cmd]]
- scrollbar $path.hscroll \
- -highlightthickness 0 -takefocus 0 \
- -orient horiz \
- -relief sunken
- scrollbar $path.vscroll \
- -highlightthickness 0 -takefocus 0 \
- -orient vert \
- -relief sunken
- }
-
- set data(realized) 0
-
- _setData $path \
- [Widget::cget $path -scrollbar] \
- [Widget::cget $path -auto] \
- [Widget::cget $path -sides]
-
- if {[Widget::cget $path -managed]} {
- set data(hsb,packed) $data(hsb,present)
- set data(vsb,packed) $data(vsb,present)
- } else {
- set data(hsb,packed) 0
- set data(vsb,packed) 0
- }
- if { ! $::Widget::_theme } {
- if {$sbsize} {
- $path.vscroll configure -width $sbsize
- $path.hscroll configure -width $sbsize
- } else {
- set sbsize [$path.vscroll cget -width]
- }
- }
- set data(ipad) [Widget::cget $path -ipad]
-
- if {$data(hsb,packed)} {
- grid $path.hscroll -column 1 -row $data(hsb,row) \
- -sticky ew -ipady $data(ipad)
- }
- if {$data(vsb,packed)} {
- grid $path.vscroll -column $data(vsb,column) -row 1 \
- -sticky ns -ipadx $data(ipad)
- }
-
- grid columnconfigure $path 1 -weight 1
- grid rowconfigure $path 1 -weight 1
-
- bind $path <Configure> [list ScrolledWindow::_realize $path]
- bind $path <Destroy> [list ScrolledWindow::_destroy $path]
-
- return [Widget::create ScrolledWindow $path]
-}
-
-
-# -----------------------------------------------------------------------------
-# Command ScrolledWindow::getframe
-# -----------------------------------------------------------------------------
-proc ScrolledWindow::getframe { path } {
- return $path
-}
-
-
-# -----------------------------------------------------------------------------
-# Command ScrolledWindow::setwidget
-# -----------------------------------------------------------------------------
-proc ScrolledWindow::setwidget { path widget } {
- Widget::getVariable $path data
-
- if {[info exists data(widget)] && [winfo exists $data(widget)]
- && ![string equal $data(widget) $widget]} {
- grid remove $data(widget)
- $data(widget) configure -xscrollcommand "" -yscrollcommand ""
- }
- set data(widget) $widget
- grid $widget -in $path -row 1 -column 1 -sticky news
- raise $widget;
-
- $path.hscroll configure -command [list $widget xview]
- $path.vscroll configure -command [list $widget yview]
- $widget configure \
- -xscrollcommand [list ScrolledWindow::_set_hscroll $path] \
- -yscrollcommand [list ScrolledWindow::_set_vscroll $path]
-}
-
-
-# -----------------------------------------------------------------------------
-# Command ScrolledWindow::configure
-# -----------------------------------------------------------------------------
-proc ScrolledWindow::configure { path args } {
- Widget::getVariable $path data
-
- set res [Widget::configure $path $args]
- if { ! $::Widget::_theme && [Widget::hasChanged $path -background bg] } {
- $path configure -background $bg
- catch {$path.hscroll configure -background $bg}
- catch {$path.vscroll configure -background $bg}
- }
-
- if {[Widget::hasChanged $path -scrollbar scrollbar] | \
- [Widget::hasChanged $path -auto auto] | \
- [Widget::hasChanged $path -sides sides]} {
- _setData $path $scrollbar $auto $sides
- foreach {vmin vmax} [$path.hscroll get] { break }
- set data(hsb,packed) [expr {$data(hsb,present) && \
- (!$data(hsb,auto) || ($vmin != 0 || $vmax != 1))}]
- foreach {vmin vmax} [$path.vscroll get] { break }
- set data(vsb,packed) [expr {$data(vsb,present) && \
- (!$data(vsb,auto) || ($vmin != 0 || $vmax != 1))}]
-
- set data(ipad) [Widget::cget $path -ipad]
-
- if {$data(hsb,packed)} {
- grid $path.hscroll -column 1 -row $data(hsb,row) \
- -sticky ew -ipady $data(ipad)
- } else {
- if {![info exists data(hlock)]} {
- set data(hsb,packed) 0
- grid remove $path.hscroll
- }
- }
- if {$data(vsb,packed)} {
- grid $path.vscroll -column $data(vsb,column) -row 1 \
- -sticky ns -ipadx $data(ipad)
- } else {
- if {![info exists data(hlock)]} {
- set data(vsb,packed) 0
- grid remove $path.vscroll
- }
- }
- }
- return $res
-}
-
-
-# -----------------------------------------------------------------------------
-# Command ScrolledWindow::cget
-# -----------------------------------------------------------------------------
-proc ScrolledWindow::cget { path option } {
- return [Widget::cget $path $option]
-}
-
-
-# -----------------------------------------------------------------------------
-# Command ScrolledWindow::_set_hscroll
-# -----------------------------------------------------------------------------
-proc ScrolledWindow::_set_hscroll { path vmin vmax } {
- Widget::getVariable $path data
-
- if {$data(realized) && $data(hsb,present)} {
- if {$data(hsb,auto) && ![info exists data(hlock)]} {
- if {$data(hsb,packed) && $vmin == 0 && $vmax == 1} {
- set data(hsb,packed) 0
- grid remove $path.hscroll
- set data(hlock) 1
- update idletasks
- unset data(hlock)
- } elseif {!$data(hsb,packed) && ($vmin != 0 || $vmax != 1)} {
- set data(hsb,packed) 1
- grid $path.hscroll -column 1 -row $data(hsb,row) \
- -sticky ew -ipady $data(ipad)
- set data(hlock) 1
- update idletasks
- unset data(hlock)
- }
- }
- $path.hscroll set $vmin $vmax
- }
-}
-
-
-# -----------------------------------------------------------------------------
-# Command ScrolledWindow::_set_vscroll
-# -----------------------------------------------------------------------------
-proc ScrolledWindow::_set_vscroll { path vmin vmax } {
- Widget::getVariable $path data
-
- if {$data(realized) && $data(vsb,present)} {
- if {$data(vsb,auto) && ![info exists data(vlock)]} {
- if {$data(vsb,packed) && $vmin == 0 && $vmax == 1} {
- set data(vsb,packed) 0
- grid remove $path.vscroll
- set data(vlock) 1
- update idletasks
- unset data(vlock)
- } elseif {!$data(vsb,packed) && ($vmin != 0 || $vmax != 1) } {
- set data(vsb,packed) 1
- grid $path.vscroll -column $data(vsb,column) -row 1 \
- -sticky ns -ipadx $data(ipad)
- set data(vlock) 1
- update idletasks
- unset data(vlock)
- }
- }
- $path.vscroll set $vmin $vmax
- }
-}
-
-
-proc ScrolledWindow::_setData {path scrollbar auto sides} {
- Widget::getVariable $path data
-
- set sb [lsearch {none horizontal vertical both} $scrollbar]
- set auto [lsearch {none horizontal vertical both} $auto]
-
- set data(hsb,present) [expr {($sb & 1) != 0}]
- set data(hsb,auto) [expr {($auto & 1) != 0}]
- set data(hsb,row) [expr {[string match *n* $sides] ? 0 : 2}]
-
- set data(vsb,present) [expr {($sb & 2) != 0}]
- set data(vsb,auto) [expr {($auto & 2) != 0}]
- set data(vsb,column) [expr {[string match *w* $sides] ? 0 : 2}]
-}
-
-
-# -----------------------------------------------------------------------------
-# Command ScrolledWindow::_realize
-# -----------------------------------------------------------------------------
-proc ScrolledWindow::_realize { path } {
- Widget::getVariable $path data
-
- bind $path <Configure> {}
- set data(realized) 1
-}
-
-
-# -----------------------------------------------------------------------------
-# Command ScrolledWindow::_destroy
-# -----------------------------------------------------------------------------
-proc ScrolledWindow::_destroy { path } {
- Widget::destroy $path
-}
+# -----------------------------------------------------------------------------
+# scrollw.tcl
+# This file is part of Unifix BWidget Toolkit
+# $Id: scrollw.tcl,v 1.13.2.2 2011/02/14 16:56:09 oehhar Exp $
+# -----------------------------------------------------------------------------
+# Index of commands:
+# - ScrolledWindow::create
+# - ScrolledWindow::getframe
+# - ScrolledWindow::setwidget
+# - ScrolledWindow::configure
+# - ScrolledWindow::cget
+# - ScrolledWindow::_set_hframe
+# - ScrolledWindow::_set_vscroll
+# - ScrolledWindow::_setData
+# - ScrolledWindow::_setSBSize
+# - ScrolledWindow::_realize
+# -----------------------------------------------------------------------------
+
+namespace eval ScrolledWindow {
+ Widget::define ScrolledWindow scrollw
+
+ Widget::declare ScrolledWindow {
+ {-background TkResource "" 0 button}
+ {-scrollbar Enum both 0 {none both vertical horizontal}}
+ {-auto Enum both 0 {none both vertical horizontal}}
+ {-sides Enum se 0 {ne en nw wn se es sw ws}}
+ {-size Int 0 1 "%d >= 0"}
+ {-ipad Int 1 1 "%d >= 0"}
+ {-managed Boolean 1 1}
+ {-relief TkResource flat 0 frame}
+ {-borderwidth TkResource 0 0 frame}
+ {-bg Synonym -background}
+ {-bd Synonym -borderwidth}
+ }
+
+ Widget::addmap ScrolledWindow "" :cmd {-relief {} -borderwidth {}}
+}
+
+
+# -----------------------------------------------------------------------------
+# Command ScrolledWindow::create
+# -----------------------------------------------------------------------------
+proc ScrolledWindow::create { path args } {
+ Widget::init ScrolledWindow $path $args
+
+ Widget::getVariable $path data
+
+ set bg [Widget::cget $path -background]
+ set sbsize [Widget::cget $path -size]
+
+ if { $::Widget::_theme } {
+ set sw [eval [list ttk::frame $path \
+ -relief flat -borderwidth 0 -takefocus 0] \
+ [Widget::subcget $path :cmd]]
+ ttk::scrollbar $path.hscroll \
+ -takefocus 0 -orient horiz
+ ttk::scrollbar $path.vscroll \
+ -takefocus 0 -orient vert
+ } else {
+ if {$bg != ""} {
+ set bg [list -background $bg]
+ }
+ set sw [eval [list frame $path \
+ -relief flat -borderwidth 0] $bg [list \
+ -highlightthickness 0 -takefocus 0] \
+ [Widget::subcget $path :cmd]]
+ scrollbar $path.hscroll \
+ -highlightthickness 0 -takefocus 0 \
+ -orient horiz \
+ -relief sunken
+ scrollbar $path.vscroll \
+ -highlightthickness 0 -takefocus 0 \
+ -orient vert \
+ -relief sunken
+ }
+
+ set data(realized) 0
+
+ _setData $path \
+ [Widget::cget $path -scrollbar] \
+ [Widget::cget $path -auto] \
+ [Widget::cget $path -sides]
+
+ if {[Widget::cget $path -managed]} {
+ set data(hsb,packed) $data(hsb,present)
+ set data(vsb,packed) $data(vsb,present)
+ } else {
+ set data(hsb,packed) 0
+ set data(vsb,packed) 0
+ }
+ if { ! $::Widget::_theme } {
+ if {$sbsize} {
+ $path.vscroll configure -width $sbsize
+ $path.hscroll configure -width $sbsize
+ } else {
+ set sbsize [$path.vscroll cget -width]
+ }
+ }
+ set data(ipad) [Widget::cget $path -ipad]
+
+ if {$data(hsb,packed)} {
+ grid $path.hscroll -column 1 -row $data(hsb,row) \
+ -sticky ew -ipady $data(ipad)
+ }
+ if {$data(vsb,packed)} {
+ grid $path.vscroll -column $data(vsb,column) -row 1 \
+ -sticky ns -ipadx $data(ipad)
+ }
+
+ grid columnconfigure $path 1 -weight 1
+ grid rowconfigure $path 1 -weight 1
+
+ bind $path <Configure> [list ScrolledWindow::_realize $path]
+ bind $path <Destroy> [list ScrolledWindow::_destroy $path]
+
+ return [Widget::create ScrolledWindow $path]
+}
+
+
+# -----------------------------------------------------------------------------
+# Command ScrolledWindow::getframe
+# -----------------------------------------------------------------------------
+proc ScrolledWindow::getframe { path } {
+ return $path
+}
+
+
+# -----------------------------------------------------------------------------
+# Command ScrolledWindow::setwidget
+# -----------------------------------------------------------------------------
+proc ScrolledWindow::setwidget { path widget } {
+ Widget::getVariable $path data
+
+ if {[info exists data(widget)] && [winfo exists $data(widget)]
+ && ![string equal $data(widget) $widget]} {
+ grid remove $data(widget)
+ $data(widget) configure -xscrollcommand "" -yscrollcommand ""
+ }
+ set data(widget) $widget
+ grid $widget -in $path -row 1 -column 1 -sticky news
+
+ $path.hscroll configure -command [list $widget xview]
+ $path.vscroll configure -command [list $widget yview]
+ $widget configure \
+ -xscrollcommand [list ScrolledWindow::_set_hscroll $path] \
+ -yscrollcommand [list ScrolledWindow::_set_vscroll $path]
+}
+
+
+# -----------------------------------------------------------------------------
+# Command ScrolledWindow::configure
+# -----------------------------------------------------------------------------
+proc ScrolledWindow::configure { path args } {
+ Widget::getVariable $path data
+
+ set res [Widget::configure $path $args]
+ if { ! $::Widget::_theme && [Widget::hasChanged $path -background bg] } {
+ $path configure -background $bg
+ catch {$path.hscroll configure -background $bg}
+ catch {$path.vscroll configure -background $bg}
+ }
+
+ if {[Widget::hasChanged $path -scrollbar scrollbar] | \
+ [Widget::hasChanged $path -auto auto] | \
+ [Widget::hasChanged $path -sides sides]} {
+ _setData $path $scrollbar $auto $sides
+ foreach {vmin vmax} [$path.hscroll get] { break }
+ set data(hsb,packed) [expr {$data(hsb,present) && \
+ (!$data(hsb,auto) || ($vmin != 0 || $vmax != 1))}]
+ foreach {vmin vmax} [$path.vscroll get] { break }
+ set data(vsb,packed) [expr {$data(vsb,present) && \
+ (!$data(vsb,auto) || ($vmin != 0 || $vmax != 1))}]
+
+ set data(ipad) [Widget::cget $path -ipad]
+
+ if {$data(hsb,packed)} {
+ grid $path.hscroll -column 1 -row $data(hsb,row) \
+ -sticky ew -ipady $data(ipad)
+ } else {
+ if {![info exists data(hlock)]} {
+ set data(hsb,packed) 0
+ grid remove $path.hscroll
+ }
+ }
+ if {$data(vsb,packed)} {
+ grid $path.vscroll -column $data(vsb,column) -row 1 \
+ -sticky ns -ipadx $data(ipad)
+ } else {
+ if {![info exists data(hlock)]} {
+ set data(vsb,packed) 0
+ grid remove $path.vscroll
+ }
+ }
+ }
+ return $res
+}
+
+
+# -----------------------------------------------------------------------------
+# Command ScrolledWindow::cget
+# -----------------------------------------------------------------------------
+proc ScrolledWindow::cget { path option } {
+ return [Widget::cget $path $option]
+}
+
+
+# -----------------------------------------------------------------------------
+# Command ScrolledWindow::_set_hscroll
+# -----------------------------------------------------------------------------
+proc ScrolledWindow::_set_hscroll { path vmin vmax } {
+ Widget::getVariable $path data
+
+ if {$data(realized) && $data(hsb,present)} {
+ if {$data(hsb,auto) && ![info exists data(hlock)]} {
+ if {$data(hsb,packed) && $vmin == 0 && $vmax == 1} {
+ set data(hsb,packed) 0
+ grid remove $path.hscroll
+ set data(hlock) 1
+ update idletasks
+ unset data(hlock)
+ } elseif {!$data(hsb,packed) && ($vmin != 0 || $vmax != 1)} {
+ set data(hsb,packed) 1
+ grid $path.hscroll -column 1 -row $data(hsb,row) \
+ -sticky ew -ipady $data(ipad)
+ set data(hlock) 1
+ update idletasks
+ unset data(hlock)
+ }
+ }
+ $path.hscroll set $vmin $vmax
+ }
+}
+
+
+# -----------------------------------------------------------------------------
+# Command ScrolledWindow::_set_vscroll
+# -----------------------------------------------------------------------------
+proc ScrolledWindow::_set_vscroll { path vmin vmax } {
+ Widget::getVariable $path data
+
+ if {$data(realized) && $data(vsb,present)} {
+ if {$data(vsb,auto) && ![info exists data(vlock)]} {
+ if {$data(vsb,packed) && $vmin == 0 && $vmax == 1} {
+ set data(vsb,packed) 0
+ grid remove $path.vscroll
+ set data(vlock) 1
+ update idletasks
+ unset data(vlock)
+ } elseif {!$data(vsb,packed) && ($vmin != 0 || $vmax != 1) } {
+ set data(vsb,packed) 1
+ grid $path.vscroll -column $data(vsb,column) -row 1 \
+ -sticky ns -ipadx $data(ipad)
+ set data(vlock) 1
+ update idletasks
+ unset data(vlock)
+ }
+ }
+ $path.vscroll set $vmin $vmax
+ }
+}
+
+
+proc ScrolledWindow::_setData {path scrollbar auto sides} {
+ Widget::getVariable $path data
+
+ set sb [lsearch {none horizontal vertical both} $scrollbar]
+ set auto [lsearch {none horizontal vertical both} $auto]
+
+ set data(hsb,present) [expr {($sb & 1) != 0}]
+ set data(hsb,auto) [expr {($auto & 1) != 0}]
+ set data(hsb,row) [expr {[string match *n* $sides] ? 0 : 2}]
+
+ set data(vsb,present) [expr {($sb & 2) != 0}]
+ set data(vsb,auto) [expr {($auto & 2) != 0}]
+ set data(vsb,column) [expr {[string match *w* $sides] ? 0 : 2}]
+}
+
+
+# -----------------------------------------------------------------------------
+# Command ScrolledWindow::_realize
+# -----------------------------------------------------------------------------
+proc ScrolledWindow::_realize { path } {
+ Widget::getVariable $path data
+
+ bind $path <Configure> {}
+ set data(realized) 1
+}
+
+
+# -----------------------------------------------------------------------------
+# Command ScrolledWindow::_destroy
+# -----------------------------------------------------------------------------
+proc ScrolledWindow::_destroy { path } {
+ Widget::destroy $path
+}