can't create procedure "tablelist::getTablelistColumn": unknown namespace
    while executing
"proc tablelist::getTablelistColumn w {
    if {[regexp {^(\..+)\.hdr\.t\.f\.l([0-9]+)(-[it]l)?$} $w dummy win col] ||
	[regexp {^(\..+)\.hdr\.t\.f\.c(..."
    (in namespace eval "::request" script line 27)
    invoked from within
"namespace eval ::request $script"
    ("::try" body line 12)

OUTPUT BUFFER:

#============================================================================== # Contains public and private procedures used in tablelist bindings. # # Structure of the module: # - Public helper procedures # - Binding tag Tablelist # - Binding tag TablelistMain # - Binding tag TablelistWindow # - Binding tag TablelistBody # - Binding tag TablelistHeader # - Binding tags TablelistLabel, TablelistSubLabel, and TablelistArrow # # Copyright (c) 2000-2020 Csaba Nemethi (E-mail: csaba.nemethi@t-online.de) #============================================================================== # # Public helper procedures # ======================== # #------------------------------------------------------------------------------ # tablelist::getTablelistColumn # # Gets the column number from the path name w of a (sub)label or sort arrow of # a tablelist widget. #------------------------------------------------------------------------------ proc tablelist::getTablelistColumn w { if {[regexp {^(\..+)\.hdr\.t\.f\.l([0-9]+)(-[it]l)?$} $w dummy win col] || [regexp {^(\..+)\.hdr\.t\.f\.c([0-9]+)$} $w dummy win col]} { return $col } else { return -1 } } #------------------------------------------------------------------------------ # tablelist::getTablelistPath # # Gets the path name of the tablelist widget from the path name w of one of its # descendants. It is assumed that all of the ancestors of w exist (but w # itself needn't exist). #------------------------------------------------------------------------------ proc tablelist::getTablelistPath w { return [mwutil::getAncestorByClass $w Tablelist] } #------------------------------------------------------------------------------ # tablelist::convEventFields # # Gets the path name of the tablelist widget and the x and y coordinates # relative to the latter from the path name w of one of its descendants and # from the x and y coordinates relative to the latter. #------------------------------------------------------------------------------ proc tablelist::convEventFields {w x y} { return [mwutil::convEventFields $w $x $y Tablelist] } #------------------------------------------------------------------------------ # tablelist::delaySashPosUpdates # # Overrides the Tk or Ttk library procedure ::tk::panedwindow::DragSash or # ::ttk::panedwindow::Drag with a version in which the "sash place ..." or # "sashpos ..." invocations for the (ttk::)panedwindow widget w are delayed by # ms milliseconds. #------------------------------------------------------------------------------ proc tablelist::delaySashPosUpdates {w ms} { # # Check the first argument # if {![winfo exists $w]} { return -code error "bad window path name \"$w\"" } set class [winfo class $w] switch $class { Panedwindow { if {[llength [info commands ::tk::panedwindow::DragSash]] == 0} { return -code error "window \"$w\" is not a panedwindow widget" } } TPanedwindow { if {[llength [info commands ::ttk::panedwindow::Drag]] != 0} { set namesp ::ttk::panedwindow } else { return -code error \ "window \"$w\" is not a ttk::panedwindow widget" } } TPaned { if {[llength [info commands ::ttk::paned::Drag]] != 0} { set namesp ::ttk::paned } elseif {[llength [info commands ::tile::paned::Drag]] != 0} { set namesp ::tile::paned } else { return -code error "window \"$w\" is not a ttk::paned widget" } } default { return -code error \ "window \"$w\" is not a (ttk::)panewindow widget" } } # # Check the second argument # if {[catch {format "%d" $ms} result] != 0} { ;# integer check with error msg return -code error $result } set ms $result if {$ms < 0} { # # Forget the sash position update delay for the given widget # if {[arrElemExists ::tablelist::sashPosUpdateDelays $w]} { unset ::tablelist::sashPosUpdateDelays($w) } return "" } # # Remember the sash position update delay for the given widget # set ::tablelist::sashPosUpdateDelays($w) $ms bind $w {+ # # Forget the sash position update delay for the given widget # if {[arrElemExists ::tablelist::sashPosUpdateDelays %W]} { unset ::tablelist::sashPosUpdateDelays(%W) } } # # Override the Tk or Ttk library procedure # ::tk::panedwindow::DragSash or ${namesp}::Drag # if {[string compare [winfo class $w] "Panedwindow"] == 0} { proc ::tk::panedwindow::DragSash {w x y proxy} { variable ::tk::Priv if {![arrElemExists Priv sash]} { return } if {[$w cget -opaqueresize]} { set proxy 0 } if {$proxy} { $w proxy place [expr {$x + $Priv(dx)}] [expr {$y + $Priv(dy)}] } elseif {[arrElemExists ::tablelist::sashPosUpdateDelays $w]} { set Priv(newSashX) [expr {$x + $Priv(dx)}] set Priv(newSashY) [expr {$y + $Priv(dy)}] if {![arrElemExists Priv sashPosId]} { set Priv(sashPosId) \ [after $::tablelist::sashPosUpdateDelays($w) \ [list ::tk::panedwindow::UpdateSashPos $w $Priv(sash)]] } } else { $w sash place $Priv(sash) \ [expr {$x + $Priv(dx)}] [expr {$y + $Priv(dy)}] } } proc ::tk::panedwindow::UpdateSashPos {w index} { variable ::tk::Priv unset Priv(sashPosId) if {[winfo exists $w]} { $w sash place $index $Priv(newSashX) $Priv(newSashY) } } } else { proc ${namesp}::Drag {w x y} [format { variable State if {!$State(pressed)} { return } switch -- [$w cget -orient] { horizontal { set delta [expr {$x - $State(pressX)}] } vertical { set delta [expr {$y - $State(pressY)}] } } if {[arrElemExists ::tablelist::sashPosUpdateDelays $w]} { set State(newSashPos) [expr {$State(sashPos) + $delta}] if {![arrElemExists State sashPosId]} { set State(sashPosId) \ [after $::tablelist::sashPosUpdateDelays($w) \ [list %s::UpdateSashPos $w $State(sash)]] } } else { $w sashpos $State(sash) [expr {$State(sashPos) + $delta}] } } $namesp] proc ${namesp}::UpdateSashPos {w index} { variable State unset State(sashPosId) if {[winfo exists $w]} { $w sashpos $index $State(newSashPos) } } } } # # Binding tag Tablelist # ===================== # #------------------------------------------------------------------------------ # tablelist::addActiveTag # # This procedure is invoked when the tablelist widget win gains the keyboard # focus. It moves the "active" tag to the line or cell that displays the # active item or element of the widget in its body text child. #------------------------------------------------------------------------------ proc tablelist::addActiveTag win { upvar ::tablelist::ns${win}::data data set data(ownsFocus) 1 # # Conditionally move the "active" tag to the line # or cell that displays the active item or element # if {![arrElemExists data dispId]} { moveActiveTag $win } } #------------------------------------------------------------------------------ # tablelist::removeActiveTag # # This procedure is invoked when the tablelist widget win loses the keyboard # focus. It removes the "active" tag from the body text child of the widget. #------------------------------------------------------------------------------ proc tablelist::removeActiveTag win { upvar ::tablelist::ns${win}::data data set data(ownsFocus) 0 $data(body) tag remove curRow 1.0 end $data(body) tag remove active 1.0 end } #------------------------------------------------------------------------------ # tablelist::cleanup # # This procedure is invoked when the tablelist widget win is destroyed. It # executes some cleanup operations. #------------------------------------------------------------------------------ proc tablelist::cleanup win { # # Cancel the execution of all delayed (hdr_)handleMotion, updateKeyToRowMap, # adjustSeps, makeStripes, showLineNumbers, stretchColumns, # (hdr_)updateColors, updateScrlColOffset, updateHScrlbar, updateVScrlbar, # updateView, synchronize, displayItems, horizMoveTo, horizScrollByUnits, # vertMoveTo, vertScrollByUnits, dragTo, autoScan, horizAutoScan, # forceRedraw, reconfigWindows, redisplay, and redisplayCol commands # upvar ::tablelist::ns${win}::data data foreach id {motionId hdr_motionId mapId sepsId stripesId lineNumsId stretchId colorsId hdr_colorsId offsetId hScrlbarId vScrlbarId viewId syncId dispId horizMoveToId horizScrollId vertMoveToId vertScrollId dragToId afterId redrawId reconfigId} { if {[arrElemExists data $id]} { after cancel $data($id) } } foreach name [array names data *redispId] { after cancel $data($name) } # # If there is a list variable associated with the # widget then remove the trace set on this variable # if {$data(hasListVar) && [uplevel #0 [list info exists $data(-listvariable)]]} { upvar #0 $data(-listvariable) var trace vdelete var wu $data(listVarTraceCmd) } # # Destroy any existing bindings for the tags data(bodyTag), # data(headerTag), data(labelTag), and data(editwinTag) # foreach tag [list $data(bodyTag) $data(headerTag) \ $data(labelTag) $data(editwinTag)] { foreach event [bind $tag] { bind $tag $event "" } } # # Delete the bitmaps displaying the sort ranks # and the images used to display the sort arrows # for {set rank 1} {$rank < 10} {incr rank} { image delete sortRank$rank$win } set imgNames [image names] for {set col 0} {$col < $data(colCount)} {incr col} { set w $data(hdrTxtFrmCanv)$col foreach shape {triangleUp darkLineUp lightLineUp triangleDn darkLineDn lightLineDn} { if {[lsearch -exact $imgNames $shape$w] >= 0} { image delete $shape$w } } } destroy $data(cornerFrm-ne) $data(cornerFrm-sw) namespace delete ::tablelist::ns$win catch {rename ::$win ""} } #------------------------------------------------------------------------------ # tablelist::updateBackgrounds # # This procedure handles the and events by configuring # the canvases displaying sort arrows and conditionally updating the background # color of some frames. #------------------------------------------------------------------------------ proc tablelist::updateBackgrounds {win updateFrames inActiveWin} { # # This is an "after idle" callback; check whether the window exists # if {[destroyed $win]} { return "" } upvar ::tablelist::ns${win}::data data foreach col $data(arrowColList) { configCanvas $win $col raiseArrow $win $col } # # Needed for the "aqua" theme if newAquaSupport is true # if {$updateFrames} { set data(inActiveWin) $inActiveWin ;# intentionally in this case only variable themeDefaults set name [expr {$inActiveWin ? "-labelbackground" : "-labeldeactivatedBg"}] foreach frm [list $data(hdrTxtFrm) $data(hdrFrm) $data(cornerFrmFrm)] { $frm configure -background $themeDefaults($name) } } } # # Binding tag TablelistMain # ========================= # #------------------------------------------------------------------------------ # tablelist::handleThemeChangedEvent # # This procedure handles the virtual event <>. #------------------------------------------------------------------------------ proc tablelist::handleThemeChangedEvent {} { variable currentTheme variable widgetStyle variable colorScheme set newTheme [mwutil::currentTheme] if {[string compare $newTheme $currentTheme] == 0} { if {[string compare $newTheme "tileqt"] == 0} { set newWidgetStyle [tileqt_currentThemeName] if {[arrElemExists ::env KDE_SESSION_VERSION] && [string length $::env(KDE_SESSION_VERSION)] != 0} { set newColorScheme [getKdeConfigVal "General" "ColorScheme"] } else { set newColorScheme [getKdeConfigVal "KDE" "colorScheme"] } if {[string compare $newWidgetStyle $widgetStyle] == 0 && [string compare $newColorScheme $colorScheme] == 0} { return "" } } else { return "" } } set currentTheme $newTheme if {[string compare $newTheme "tileqt"] == 0} { set widgetStyle $newWidgetStyle set colorScheme $newColorScheme } else { set widgetStyle "" set colorScheme "" } if {[string compare $newTheme "aqua"] == 0} { # # Work around some issues with the appearance # change support in Tk 8.6.10 and 8.7a3 # condOpenPipeline } # # Populate the array themeDefaults with # values corresponding to the new theme # setThemeDefaults event generate . <> # # Level-order traversal like in the Tk library procedue ::ttk::ThemeChanged # set lst1 {.} while {[llength $lst1] != 0} { set lst2 {} foreach w $lst1 { if {[string compare [winfo class $w] "Tablelist"] == 0} { updateConfigSpecs $w } foreach child [winfo children $w] { lappend lst2 $child } } set lst1 $lst2 } } #------------------------------------------------------------------------------ # tablelist::updateConfigSpecs # # Updates the theme-specific default values of some tablelist configuration # options. #------------------------------------------------------------------------------ proc tablelist::updateConfigSpecs win { upvar ::tablelist::ns${win}::data data variable usingTile if {$usingTile} { # # Populate the array tmp with values corresponding to the old theme # array set tmp $data(themeDefaults) # # Set those configuration options whose values equal the old # theme-specific defaults to the new theme-specific ones # variable themeDefaults foreach opt {-background -foreground -disabledforeground -stripebackground -selectbackground -selectforeground -selectborderwidth -font -labelforeground -labelfont -labelborderwidth -labelpady -treestyle} { if {[string compare $data($opt) $tmp($opt)] == 0} { doConfig $win $opt $themeDefaults($opt) } } if {[string compare $data(-arrowcolor) $tmp(-arrowcolor)] == 0 && [string compare $data(-arrowstyle) $tmp(-arrowstyle)] == 0} { foreach opt {-arrowcolor -arrowdisabledcolor -arrowstyle} { doConfig $win $opt $themeDefaults($opt) } } foreach opt {-background -foreground} { doConfig $win $opt $data($opt) ;# sets the bg color of the seps } updateBackgrounds $win 0 0 } # # Destroy and recreate the label images # for {set col 0} {$col < $data(colCount)} {incr col} { if {[arrElemExists data $col-labelimage]} { set val $data($col-labelimage) doColConfig $col $win -labelimage "" doColConfig $col $win -labelimage $val } } # # Destroy and recreate the edit window if present # if {[set editCol $data(editCol)] >= 0} { set editRow $data(editRow) saveEditData $win destroy $data(bodyFrm) doEditCell $win $editRow $editCol 1 } # # Destroy and recreate the embedded windows # for {set row 0} {$row < $data(hdr_itemCount)} {incr row} { for {set col 0} {$col < $data(colCount)} {incr col} { set key [lindex $data(hdr_keyList) $row] if {[arrElemExists data $key,$col-window]} { set val $data($key,$col-window) doCellConfig h$row $col $win -window "" doCellConfig h$row $col $win -window $val } } } if {$data(winCount) != 0} { for {set row 0} {$row < $data(itemCount)} {incr row} { for {set col 0} {$col < $data(colCount)} {incr col} { set key [lindex $data(keyList) $row] if {[arrElemExists data $key,$col-window]} { set val $data($key,$col-window) doCellConfig $row $col $win -window "" doCellConfig $row $col $win -window $val } } } } if {$usingTile} { set data(themeDefaults) [array get themeDefaults] set x 0 set y 0 variable currentTheme set aquaTheme [expr {[string compare $currentTheme "aqua"] == 0}] if {$aquaTheme} { variable newAquaSupport if {$newAquaSupport} { set y 4 } else { set x -1 } } place configure $data(hdrFrmLbl) -x $x -y $y set y 0 if {$aquaTheme && $newAquaSupport} { set y 4 } place configure $data(cornerLbl) -y $y if {$aquaTheme && $newAquaSupport} { set name [expr {$data(inActiveWin) ? "-labelbackground" : "-labeldeactivatedBg"}] foreach w [list $data(hdrTxtFrm) $data(hdrFrm) \ $data(cornerFrmFrm)] { $w configure -background $themeDefaults($name) } if {[tk::unsupported::MacWindowStyle isdark .]} { set labelBorderBg #4b4b4b } else { set labelBorderBg #c8c8c8 } foreach w [list $data(hdrTxtFrmFrm) $data(hdrFrmFrm) \ $data(cornerFrmFrmFrm)] { $w configure -background $labelBorderBg } } adjustColumns $win allCols 1 set showSeps $data(-showseparators) doConfig $win -showseparators 0 doConfig $win -showseparators $showSeps } } #------------------------------------------------------------------------------ # tablelist::handleAppearanceEvent # # This procedure handles the virtual events <> and <>. #------------------------------------------------------------------------------ proc tablelist::handleAppearanceEvent {} { variable appearanceId if {[info exists appearanceId] } { after cancel $appearanceId unset appearanceId } variable currentTheme if {[string compare $currentTheme "aqua"] != 0} { return "" } # # Work around some issues with the appearance # change support in Tk 8.6.10 and 8.7a3 # condOpenPipeline # # Populate the array themeDefaults with # values corresponding to the new appearance # setThemeDefaults event generate . <> # # Level-order traversal like in the Tk library procedue ::ttk::ThemeChanged # set lst1 {.} while {[llength $lst1] != 0} { set lst2 {} foreach w $lst1 { if {[string compare [winfo class $w] "Tablelist"] == 0} { updateAppearance $w } foreach child [winfo children $w] { lappend lst2 $child } } set lst1 $lst2 } } #------------------------------------------------------------------------------ # tablelist::updateAppearance # # Updates the appearance of the tablelist widget win according to the virtual # events <> and <>. #------------------------------------------------------------------------------ proc tablelist::updateAppearance win { upvar ::tablelist::ns${win}::data data # # Populate the array tmp with values # corresponding to the old appearance # array set tmp $data(themeDefaults) # # Set those configuration options whose values equal the old # theme-specific defaults to the new theme-specific ones # variable themeDefaults foreach opt {-background -foreground -disabledforeground -stripebackground -selectbackground -selectforeground -labelforeground} { if {[string compare $data($opt) $tmp($opt)] == 0} { doConfig $win $opt $themeDefaults($opt) } } if {[string compare $data(-arrowcolor) $tmp(-arrowcolor)] == 0} { foreach opt {-arrowcolor -arrowdisabledcolor} { doConfig $win $opt $themeDefaults($opt) } } foreach opt {-background -foreground} { doConfig $win $opt $data($opt) ;# sets the bg color of the seps } updateBackgrounds $win 0 0 # # Destroy and recreate the edit window if present # if {[set editCol $data(editCol)] >= 0} { set editRow $data(editRow) saveEditData $win destroy $data(bodyFrm) doEditCell $win $editRow $editCol 1 } set name [expr {$data(inActiveWin) ? "-labelbackground" : "-labeldeactivatedBg"}] foreach w [list $data(hdrTxtFrm) $data(hdrFrm) $data(cornerFrmFrm)] { $w configure -background $themeDefaults($name) } if {[tk::unsupported::MacWindowStyle isdark .]} { set labelBorderBg #4b4b4b } else { set labelBorderBg #c8c8c8 } foreach w [list $data(hdrTxtFrmFrm) $data(hdrFrmFrm) \ $data(cornerFrmFrmFrm)] { $w configure -background $labelBorderBg } set data(themeDefaults) [array get themeDefaults] } #------------------------------------------------------------------------------ # tablelist::condOpenPipeline # # Conditionally opens a command pipeline for getting the RGB values # corresponding to systemSelectedTextBackgroundColor on the Mac. #------------------------------------------------------------------------------ proc tablelist::condOpenPipeline {} { scan $::tcl_platform(osVersion) "%d" majorOSVersion if {$majorOSVersion < 18 || ([string compare $::tk_patchLevel "8.6.10"] != 0 && [string compare $::tk_patchLevel "8.7a3"] != 0)} { return "" } variable channel if {[catch {open "| [info nameofexecutable]" w+} channel] == 0} { puts $channel [format { package require Tk %s wm withdraw . puts [winfo rgb . systemSelectedTextBackgroundColor] flush stdout } $::tk_patchLevel] flush $channel } else { unset channel } } # # Binding tag TablelistWindow # =========================== # #------------------------------------------------------------------------------ # tablelist::cleanupWindow # # This procedure is invoked when a window embedded into a tablelist widget is # destroyed. It invokes the cleanup script associated with the cell containing # the window, if any. #------------------------------------------------------------------------------ proc tablelist::cleanupWindow aux { regexp {^(.+)\.(hdr\.t|body)\.frm_(h?k[0-9]+),([0-9]+)$} $aux \ dummy win textWidget key col upvar ::tablelist::ns${win}::data data \ ::tablelist::ns${win}::checkStates checkStates if {[arrElemExists data $key,$col-windowdestroy]} { set row [keyToRow $win $key] uplevel #0 $data($key,$col-windowdestroy) [list $win $row $col $aux.w] } if {[arrElemExists checkStates $key,$col]} { unset checkStates($key,$col) } } # # Binding tag TablelistBody # ========================= # #------------------------------------------------------------------------------ # tablelist::defineTablelistBody # # Defines the bindings for the binding tag TablelistBody. #------------------------------------------------------------------------------ proc tablelist::defineTablelistBody {} { variable priv array set priv { x "" y "" afterId "" prevRow "" prevCol "" prevActExpCollCtrlCell "" selection {} selClearPending 0 selChangePending 0 justClicked 0 justReleased 0 clickedInEditWin 0 clickedExpCollCtrl 0 } foreach event { } { bind TablelistBody $event [format { tablelist::handleMotionDelayed %%W %%x %%y %%X %%Y %%m %s } $event] } bind TablelistBody { if {[winfo exists %W]} { foreach {tablelist::W tablelist::x tablelist::y} \ [tablelist::convEventFields %W %x %y] {} if {$tablelist::y < [winfo y [$tablelist::W bodypath]]} { continue } set tablelist::priv(x) $tablelist::x set tablelist::priv(y) $tablelist::y set tablelist::priv(row) [$tablelist::W nearest $tablelist::y] set tablelist::priv(col) [$tablelist::W nearestcolumn $tablelist::x] set tablelist::priv(justClicked) 1 after 300 [list set tablelist::priv(justClicked) 0] set tablelist::priv(clickedInEditWin) 0 if {[$tablelist::W cget -setfocus] && [string compare [$tablelist::W cget -state] "normal"] == 0} { focus [$tablelist::W bodypath] } if {[tablelist::wasExpCollCtrlClicked %W %x %y]} { set tablelist::priv(clickedExpCollCtrl) 1 tablelist::doFinishEditing $tablelist::W } else { tablelist::condEditContainingCell $tablelist::W \ $tablelist::x $tablelist::y tablelist::condBeginMove $tablelist::W $tablelist::priv(row) tablelist::beginSelect $tablelist::W \ $tablelist::priv(row) $tablelist::priv(col) 1 } } } bind TablelistBody { if {[winfo exists %W]} { foreach {tablelist::W tablelist::x tablelist::y} \ [tablelist::convEventFields %W %x %y] {} if {$tablelist::y < [winfo y [$tablelist::W bodypath]]} { continue } if {[$tablelist::W cget -editselectedonly]} { tablelist::condEditContainingCell $tablelist::W \ $tablelist::x $tablelist::y } } } bind TablelistBody { if {$tablelist::priv(justClicked)} { continue } foreach {tablelist::W tablelist::x tablelist::y} \ [tablelist::convEventFields %W %x %y] {} if {[string length $tablelist::priv(x)] == 0 || [string length $tablelist::priv(y)] == 0} { set tablelist::priv(x) $tablelist::x set tablelist::priv(y) $tablelist::y } set tablelist::priv(prevX) $tablelist::priv(x) set tablelist::priv(prevY) $tablelist::priv(y) set tablelist::priv(x) $tablelist::x set tablelist::priv(y) $tablelist::y tablelist::condAutoScan $tablelist::W if {!$tablelist::priv(clickedExpCollCtrl)} { tablelist::motion $tablelist::W \ [$tablelist::W nearest $tablelist::y] \ [$tablelist::W nearestcolumn $tablelist::x] 1 tablelist::condShowTarget $tablelist::W $tablelist::y } } bind TablelistBody { if {[winfo exists %W]} { foreach {tablelist::W tablelist::x tablelist::y} \ [tablelist::convEventFields %W %x %y] {} if {$tablelist::y < [winfo y [$tablelist::W bodypath]] && [string length $tablelist::priv(afterId)] == 0} { ;# no autoscan continue } set tablelist::priv(x) "" set tablelist::priv(y) "" after cancel $tablelist::priv(afterId) set tablelist::priv(afterId) "" set tablelist::priv(justReleased) 1 after 100 [list set tablelist::priv(justReleased) 0] set tablelist::priv(releasedInEditWin) 0 if {!$tablelist::priv(clickedExpCollCtrl)} { if {$tablelist::priv(justClicked)} { tablelist::moveOrActivate $tablelist::W \ $tablelist::priv(row) $tablelist::priv(col) 1 } else { tablelist::moveOrActivate $tablelist::W \ [$tablelist::W nearest $tablelist::y] \ [$tablelist::W nearestcolumn $tablelist::x] \ [expr {$tablelist::x >= 0 && $tablelist::x < [winfo width $tablelist::W] && $tablelist::y >= [winfo y $tablelist::W.body] && $tablelist::y < [winfo height $tablelist::W]}] } } set tablelist::priv(clickedExpCollCtrl) 0 after 100 [list tablelist::condEvalInvokeCmd $tablelist::W] } } bind TablelistBody { foreach {tablelist::W tablelist::x tablelist::y} \ [tablelist::convEventFields %W %x %y] {} if {$tablelist::y < [winfo y [$tablelist::W bodypath]]} { continue } tablelist::beginExtend $tablelist::W \ [$tablelist::W nearest $tablelist::y] \ [$tablelist::W nearestcolumn $tablelist::x] tablelist::condFinishEditing $tablelist::W $tablelist::x $tablelist::y } bind TablelistBody { foreach {tablelist::W tablelist::x tablelist::y} \ [tablelist::convEventFields %W %x %y] {} if {$tablelist::y < [winfo y [$tablelist::W bodypath]]} { continue } tablelist::beginToggle $tablelist::W \ [$tablelist::W nearest $tablelist::y] \ [$tablelist::W nearestcolumn $tablelist::x] tablelist::condFinishEditing $tablelist::W $tablelist::x $tablelist::y } bind TablelistBody { tablelist::condEditActiveCell [tablelist::getTablelistPath %W] } bind TablelistBody { tablelist::condEditActiveCell [tablelist::getTablelistPath %W] } bind TablelistBody { tablelist::nextPrevCell [tablelist::getTablelistPath %W] 1 } bind TablelistBody { tablelist::nextPrevCell [tablelist::getTablelistPath %W] -1 } bind TablelistBody <> { tablelist::nextPrevCell [tablelist::getTablelistPath %W] -1 } bind TablelistBody { tablelist::plusMinus [tablelist::getTablelistPath %W] plus } bind TablelistBody { tablelist::plusMinus [tablelist::getTablelistPath %W] minus } bind TablelistBody { tablelist::plusMinus [tablelist::getTablelistPath %W] plus } bind TablelistBody { tablelist::plusMinus [tablelist::getTablelistPath %W] minus } foreach {virtual event} { PrevLine NextLine PrevChar NextChar LineStart LineEnd PrevWord NextWord SelectPrevLine SelectNextLine SelectPrevChar SelectNextChar SelectLineStart SelectLineEnd SelectAll SelectNone } { if {[llength [event info <<$virtual>>]] == 0} { set eventArr($virtual) $event } else { set eventArr($virtual) <<$virtual>> } } bind TablelistBody $eventArr(PrevLine) { tablelist::upDown [tablelist::getTablelistPath %W] -1 } bind TablelistBody $eventArr(NextLine) { tablelist::upDown [tablelist::getTablelistPath %W] 1 } bind TablelistBody $eventArr(PrevChar) { tablelist::leftRight [tablelist::getTablelistPath %W] -1 } bind TablelistBody $eventArr(NextChar) { tablelist::leftRight [tablelist::getTablelistPath %W] 1 } bind TablelistBody { tablelist::priorNext [tablelist::getTablelistPath %W] -1 } bind TablelistBody { tablelist::priorNext [tablelist::getTablelistPath %W] 1 } bind TablelistBody $eventArr(LineStart) { tablelist::homeEnd [tablelist::getTablelistPath %W] Home } bind TablelistBody $eventArr(LineEnd) { tablelist::homeEnd [tablelist::getTablelistPath %W] End } bind TablelistBody { tablelist::firstLast [tablelist::getTablelistPath %W] first } bind TablelistBody { tablelist::firstLast [tablelist::getTablelistPath %W] last } bind TablelistBody $eventArr(SelectPrevLine) { tablelist::extendUpDown [tablelist::getTablelistPath %W] -1 } bind TablelistBody $eventArr(SelectNextLine) { tablelist::extendUpDown [tablelist::getTablelistPath %W] 1 } bind TablelistBody $eventArr(SelectPrevChar) { tablelist::extendLeftRight [tablelist::getTablelistPath %W] -1 } bind TablelistBody $eventArr(SelectNextChar) { tablelist::extendLeftRight [tablelist::getTablelistPath %W] 1 } bind TablelistBody $eventArr(SelectLineStart) { tablelist::extendToHomeEnd [tablelist::getTablelistPath %W] Home } bind TablelistBody $eventArr(SelectLineEnd) { tablelist::extendToHomeEnd [tablelist::getTablelistPath %W] End } bind TablelistBody { tablelist::extendToFirstLast [tablelist::getTablelistPath %W] first } bind TablelistBody { tablelist::extendToFirstLast [tablelist::getTablelistPath %W] last } foreach event {