summaryrefslogtreecommitdiff
path: root/gdb/gdbtk/library/locals.tcl
blob: 64daaf87ff9ec7b3668957351e9adc67c2d7aecd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
# Local variable window for Insight.
# Copyright 1997, 1998, 1999, 2001 Red Hat
#
# 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.


class LocalsWin {
    inherit VariableWin

    # ------------------------------------------------------------------
    #  CONSTRUCTOR - create new locals window
    # ------------------------------------------------------------------
    constructor {args} {
	update dummy
    }

    # ------------------------------------------------------------------
    # DESTRUCTOR - delete locals window
    # ------------------------------------------------------------------
    destructor {
    }

    method build_win {f} {
	global tcl_platform
	build_menu_helper Variable
	if {$tcl_platform(platform) == "windows"} {
	    frame $f.f
	    VariableWin::build_win $f.f
	    pack $f.f -expand yes -fill both -side top
	    frame $f.stat
	    pack $f.stat -side bottom -fill x
	} else {
	    VariableWin::build_win $f
	}
    }


    # ------------------------------------------------------------------
    # METHOD: reconfig
    # Overrides VarialbeWin::reconfig method.  Have to make sure the locals
    #  will get redrawn after everything is destroyed...
    # ------------------------------------------------------------------
    method reconfig {} {
	VariableWin::reconfig
	populate {}
    }

    # ------------------------------------------------------------------
    # METHOD: getVariablesBlankPath
    # Overrides VarialbeWin::getVariablesBlankPath. For a Locals Window,
    # this method returns a list of local variables.
    # ------------------------------------------------------------------
    method getVariablesBlankPath {} {
	global Update
	debug

	return [$_frame variables]
    }

    method update {event} {
	global Update Display

	debug "START LOCALS UPDATE CALLBACK"
	# Check that a context switch has not occured
	if {[context_switch]} {
	    debug "CONTEXT SWITCH"

	    # our context has changed... repopulate with new variables
	    # destroy the old tree and create a new one
	    #
	    # We need to be more intelligent about saving window state
	    # when browsing the stack or stepping into new frames, but
	    # for now, we'll have to settle for just getting this working.
	    deleteTree
	    set ChangeList {}
	    
	    # context_switch will have already created the new frame for
	    # us, so all we need to do is shove stuff into the window.
	    debug "_frame=$_frame"
	    if {$_frame != ""} {
		debug "vars=[$_frame variables]"
	    }
	    if {$_frame != "" && [$_frame variables] != ""} {
		populate {}
	    }
	}

	# Erase old variables
	if {$_frame != ""} {
	    foreach var [$_frame old] {
		$Hlist delete entry $var
		$_frame deleteOld
		unset Update($this,$var)
	    }

	    # Add new variables
	    foreach var [$_frame new] {
		set Update($this,$var) 1
		$Hlist add $var                 \
		    -itemtype text              \
		    -text [label $var]
		if {[$var numChildren] > 0} {
		    # Make sure we get this labeled as openable
		    $Tree setmode $var open
		}
	    }
	}

	# Update variables in window
	VariableWin::update dummy

	debug "END LOCALS UPDATE CALLBACK"
    }
}