summaryrefslogtreecommitdiff
path: root/gdb/gdbtk/library/vartree.itb
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/gdbtk/library/vartree.itb')
-rw-r--r--gdb/gdbtk/library/vartree.itb431
1 files changed, 0 insertions, 431 deletions
diff --git a/gdb/gdbtk/library/vartree.itb b/gdb/gdbtk/library/vartree.itb
deleted file mode 100644
index 57d0c3228d5..00000000000
--- a/gdb/gdbtk/library/vartree.itb
+++ /dev/null
@@ -1,431 +0,0 @@
-# Variable tree implementation for Insight.
-# Copyright 2002 Red Hat, Inc.
-#
-# This program is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License (GPL) as published by
-# the Free Software Foundation; either version 2 of the License, or (at
-# your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-itcl::body VarTree::constructor {args} {
- debug $args
- if {!$initialized} {
- _init_data
- }
- eval itk_initialize $args
-
- itk_component add canvas {
- iwidgets::scrolledcanvas $itk_interior.c -autoresize 1 -hscrollmode dynamic -vscrollmode dynamic \
- -background $::Colors(textbg) -borderwidth 0 -highlightthickness 0
- }
- set c [$itk_component(canvas) childsite]
- pack $itk_component(canvas) -side top -fill both -expand 1
- bind $c <1> "[code $this clicked %W %x %y 0]"
-
- # Add popup menu - we populate it in _but3
- itk_component add popup {
- menu $itk_interior.pop -tearoff 0
- } {}
- set pop $itk_component(popup)
- $pop configure -disabledforeground $::Colors(fg)
- bind $c <3> [code $this _but3 %x %y %X %Y]
-
- set selection {}
- set selidx {}
- after idle [code $this build]
-}
-
-itcl::body VarTree::destructor {} {
- debug
-}
-
-itcl::body VarTree::build {} {
- debug
- $c delete all
- catch {unset var_to_items}
- catch {unset item_to_var}
- set _y 30
- buildlayer $rootlist 10
- $c config -scrollregion [$c bbox all] -background $::Colors(textbg) -borderwidth 0 -highlightthickness 0
- update 1
- drawselection
-}
-
-itcl::body VarTree::buildlayer {tlist in} {
- set start [expr $_y - 10]
-
- foreach var $tlist {
- set y $_y
- incr _y 17
-
- if {$in > 10} {
- $c create line $in $y [expr $in+10] $y -fill $colors(line)
- }
- set x [expr $in + 12]
-
- set j1 [$c create text $x $y -text "[$var name] = " -fill $colors(name) -anchor w -font global/fixed]
- set x [expr [lindex [$c bbox $j1] 2] + 5]
- set j2 [$c create text $x $y -text "([$var type])" -fill $colors(type) -anchor w -font global/fixed]
- set x [expr [lindex [$c bbox $j2] 2] + 5]
- if {[catch {$var value} val]} {
- # error accessing memory, etc.
- set j3 [$c create text $x $y -text $val -fill $colors(error) -anchor w -font global/fixed]
- } else {
- set j3 [$c create text $x $y -text $val -fill $colors(value) -anchor w -font global/fixed]
- }
-
- set var_to_items($var) [list $j1 $j2 $j3]
- set item_to_var($j1) $var
- set item_to_var($j2) $var
- set item_to_var($j3) $var
-
- $c bind $j1 <Double-1> "[code $this clicked %W %x %y 1]"
- $c bind $j2 <Double-1> "[code $this clicked %W %x %y 1]"
- $c bind $j3 <Double-1> "[code $this edit $j3];break"
-
- if {[$var numChildren]} {
- if {[closed $var]} {
- set j [$c create image $in $y -image closedbm]
- $c bind $j <1> "[code $this open $var]"
- } else {
- set j [$c create image $in $y -image openbm]
- $c bind $j <1> "[code $this close $var]"
- buildlayer [$var children] [expr $in+18]
- }
- }
- }
- if {$in > 10} {
- $c lower [$c create line $in $start $in [expr $y+1] -fill $colors(line) ]
- }
-}
-
-# add: add a list of varobj to the tree
-itcl::body VarTree::add {var} {
- debug $var
- if {$var == ""} {return}
- set rootlist [concat $rootlist $var]
- after idle [code $this build]
-}
-
-# remove: remove a varobj from the tree
-# if the name is "all" then remove all
-itcl::body VarTree::remove {name} {
- debug $name
- if {$name == ""} {return}
- if {$name == "all"} {
- set rootlist {}
- } else {
- set rootlist [lremove $rootlist $name]
- }
- after idle [code $this build]
-}
-
-# update a var
-itcl::body VarTree::update_var {var enabled check} {
- if {$enabled && $check} {return}
- lassign $var_to_items($var) nam typ val
- if {$enabled} {
- $c itemconfigure $nam -fill $colors(name)
- $c itemconfigure $typ -fill $colors(type)
-
- if {[catch {$var value} value]} {
- set color $colors(error)
- } elseif {[$c itemcget $val -text] != $value} {
- set color $colors(change)
- } else {
- set color $colors(value)
- }
- $c itemconfigure $val -text $value -fill $color
- } else {
- $c itemconfigure $nam -fill $colors(disabled)
- $c itemconfigure $typ -fill $colors(disabled)
- $c itemconfigure $val -fill $colors(disabled)
- }
-
- if {![closed $var] && [$var numChildren]} {
- foreach child [$var children] {
- update_var $child $enabled $check
- }
- }
-}
-
-# update: update the values of the vars in the tree.
-# The "check" argument is a hack we have to do because
-# [$varobj value] does not return an error; only [$varobj update]
-# does. So after changing the tree layout in build, we must then
-# do an update. The "check" argument just optimizes things a bit over
-# a normal update by not fetching values, just calling update.
-itcl::body VarTree::update {{check 0}} {
- debug
-
- # delete selection box if it is visible
- if {$selidx != ""} {
- $c delete $selidx
- }
-
- # update all the root variables
- foreach var $rootlist {
- if {[$var update] == "-1"} {
- set enabled 0
- } else {
- set enabled 1
- }
- update_var $var $enabled $check
- }
-}
-
-# Draw the selection highlight
-itcl::body VarTree::drawselection {} {
- #debug "selidx=$selidx selection=$selection"
- if {$selidx != ""} {
- $c delete $selidx
- }
- if {$selection == ""} return
- if {![info exists var_to_items($selection)]} return
- set bbox [eval "$c bbox $var_to_items($selection)"]
- if {[llength $bbox] == 4} {
- set selidx [eval $c create rectangle $bbox -fill $::Colors(sbg) -outline {{}}]
- $c lower $selidx
- } else {
- set selidx {}
- }
-}
-
-# button 1 callback
-itcl::body VarTree::clicked {w x y open} {
- #debug "clicked $w $x $y $open"
- set x [$w canvasx $x]
- set y [$w canvasy $y]
- foreach m [$w find overlapping $x $y $x $y] {
- if {[info exists item_to_var($m)]} {
- if {$open} {
- set var $item_to_var($m)
- if {[closed $var]} {
- set closed($var) 0
- } else {
- set closed($var) 1
- }
- after idle [code $this build]
- } else {
- setselection $item_to_var($m)
- }
- return
- }
- }
- if {!$open} {
- setselection ""
- }
-}
-
-
-#
-# Change the selection to the indicated item
-#
-itcl::body VarTree::setselection {var} {
- #debug "setselection $var"
- set selection $var
- drawselection
-}
-
-# Check if a node is closed.
-# If it is a new node, set it to closed
-itcl::body VarTree::closed {name} {
- if {![info exists closed($name)]} {
- set closed($name) 1
- }
- return $closed($name)
-}
-
-# mark a node open
-itcl::body VarTree::open {name} {
- set closed($name) 0
- after idle [code $this build]
-}
-
-# mark a node closed
-itcl::body VarTree::close {name} {
- set closed($name) 1
- after idle [code $this build]
-}
-
-# edit a varobj.
-# creates an entry widget in place of the current value
-itcl::body VarTree::edit {j} {
- #debug "$j"
-
- # if another edit is in progress, cancel it
- if {$entry != ""} { unedit $j }
-
- set entryobj $item_to_var($j)
- set entry [entry $c.entry -bg $::Colors(bg) -fg $::Colors(fg) -font global/fixed]
- set entrywin [$c create window [$c coords $j] -window $entry -anchor w]
- focus $entry
- bind $entry <Return> [code $this changeValue $j]
- bind $entry <Escape> [code $this unedit $j]
-}
-
-# cancel or clean up after an edit
-itcl::body VarTree::unedit {j} {
- #debug
- # cancel the edit
- $c delete $entrywin
- destroy $entry
- set entry ""
- $c raise $j
-}
-
-# change the value of a varobj.
-itcl::body VarTree::changeValue {j} {
- #debug "value = [$entry get]"
- set new [string trim [$entry get] \ \r\n]
- if {$new == ""} {
- unedit $j
- return
- }
- if {[catch {$entryobj value $new} errTxt]} {
- # gdbtk-varobj doesn't actually return meaningful error messages
- # so use a generic one.
- set errTxt "GDB could not evaluate that expression"
- tk_messageBox -icon error -type ok -message $errTxt \
- -title "Error in Expression" -parent [winfo toplevel $itk_interior]
- focus $entry
- $entry selection to end
- } else {
- unedit $j
-
- # We may have changed a register or something else that is
- # being displayed in another window
- gdbtk_update
- }
-}
-
-# change the format for a var
-itcl::body VarTree::_change_format {var} {
- #debug "$var $popup_temp"
- catch {$var format $popup_temp}
- after idle [code $this update]
-}
-
-# button 3 callback. Pops up a menu.
-itcl::body VarTree::_but3 {x y X Y} {
- set x [$c canvasx $x]
- set y [$c canvasy $y]
- catch {destroy $pop.format}
-
- set var ""
- foreach item [$c find overlapping $x $y $x $y] {
- if {![catch {set var $item_to_var($item)}]} {
- break
- }
- }
- setselection $var
- if {$var == ""} {
- _do_default_menu $X $Y
- return
- }
- set popup_temp [$var format]
- set j3 [lindex $var_to_items($var) 2]
- #debug "var=$var [$var name] format=$popup_temp this=$this"
- $pop delete 0 end
- $pop add command -label [$var name] -state disabled
- $pop add separator
- $pop add cascade -menu $pop.format -label "Format" -underline 0
- set f [menu $pop.format -tearoff 0]
- $f add radio -label "Natural" -variable [scope popup_temp] -value "natural" -command [code $this _change_format $var]
- $f add radio -label "Decimal" -variable [scope popup_temp] -value "decimal" -command [code $this _change_format $var]
- $f add radio -label "Hex" -variable [scope popup_temp] -value "hexadecimal" -command [code $this _change_format $var]
- $f add radio -label "Octal" -variable [scope popup_temp] -value "octal" -command [code $this _change_format $var]
- $f add radio -label "Binary" -variable [scope popup_temp] -value "binary" -command [code $this _change_format $var]
- $pop add command -label "Edit" -command [code $this edit $j3]
- $pop add command -label "Delete" -command [code $this remove $var]
- if {![catch {$var value} value]} {
- $pop add separator
- $pop add command -label "Dump Memory at [$var name]" -command [list ManagedWin::open MemWin -force -addr_exp [$var name]]
- }
- $pop add separator
- if {$type == "local"} {
- $pop add command -label "Help" -command "open_help watch.html"
- } else {
- $pop add command -label "Help" -command "open_help locals.html"
- }
- $pop add separator
- $pop add command -label "Close" -command "destroy [winfo toplevel $itk_interior]"
- tk_popup $pop $X $Y
-}
-
-# popup menu over empty space
-itcl::body VarTree::_do_default_menu {X Y} {
- #debug
- $pop delete 0 end
- if {$type == "local"} {
- $pop add command -label "Local Variables" -state disabled
- } else {
- $pop add command -label "Watch Window" -state disabled
- }
- $pop add separator
- $pop add command -label "Sort" -command [code $this _sort]
- if {$type == "local"} {
- $pop add command -label "Help" -command "open_help watch.html"
- } else {
- $pop add command -label "Help" -command "open_help locals.html"
- }
- $pop add separator
- $pop add command -label "Close" -command "destroy [winfo toplevel $itk_interior]"
- tk_popup $pop $X $Y
-}
-
-# alphabetize the variable names in the list
-itcl::body VarTree::_sort {} {
- #debug $rootlist
- set rootlist [lsort -command [code $this _compare] $rootlist]
- after idle [code $this build]
-}
-
-# comparison function for lsort.
-itcl::body VarTree::_compare {a b} {
- return [string compare [$a name] [$b name]]
-}
-
-# ititialize common data
-itcl::body VarTree::_init_data {} {
- set colors(name) "\#0000C0"
- set colors(type) "red"
- set colors(error) "red"
- set colors(value) "black"
- set colors(change) $::Colors(change)
- set colors(disabled) "gray50"
- set colors(line) "gray50"
-
- set maskdata "#define solid_width 9\n#define solid_height 9"
- append maskdata {
- static unsigned char solid_bits[] = {
- 0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
- 0xff, 0x01, 0xff, 0x01, 0xff, 0x01
- };
- }
- set data "#define open_width 9\n#define open_height 9"
- append data {
- static unsigned char open_bits[] = {
- 0xff, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x7d, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0xff, 0x01
- };
- }
- image create bitmap openbm -data $data -maskdata $maskdata \
- -foreground black -background white
- set data "#define closed_width 9\n#define closed_height 9"
- append data {
- static unsigned char closed_bits[] = {
- 0xff, 0x01, 0x01, 0x01, 0x11, 0x01, 0x11, 0x01, 0x7d, 0x01, 0x11, 0x01,
- 0x11, 0x01, 0x01, 0x01, 0xff, 0x01
- };
- }
- image create bitmap closedbm -data $data -maskdata $maskdata \
- -foreground black -background white
-
- set initialized 1
-}
-