You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
136 lines
4.9 KiB
Plaintext
136 lines
4.9 KiB
Plaintext
15 years ago
|
# IPC preferences dialog for Insight.
|
||
|
# Copyright (C) 2004 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.
|
||
|
|
||
|
|
||
|
# ------------------------------------------------------------------
|
||
|
# CONSTRUCTOR - create new IPC preferences window
|
||
|
# ------------------------------------------------------------------
|
||
|
itcl::body IPCPref::constructor {args} {
|
||
|
window_name "Insight IPC Preferences"
|
||
|
_init_var
|
||
|
_build_win
|
||
|
}
|
||
|
|
||
|
# ------------------------------------------------------------------
|
||
|
# METHOD: init_var - initialize preference variables
|
||
|
# ------------------------------------------------------------------
|
||
|
itcl::body IPCPref::_init_var {} {
|
||
|
set vlist [list gdb/ipc/enabled gdb/ipc/port gdb/ipc/step_button gdb/ipc/stop_button \
|
||
|
gdb/ipc/cont_button gdb/ipc/exit gdb/ipc/run_button]
|
||
|
|
||
|
foreach var $vlist {
|
||
|
set _saved($var) [pref get $var]
|
||
|
set _new($var) $_saved($var)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
# ------------------------------------------------------------------
|
||
|
# METHOD: build_win - build the dialog
|
||
|
# ------------------------------------------------------------------
|
||
|
itcl::body IPCPref::_build_win {} {
|
||
|
frame $itk_interior.f
|
||
|
frame $itk_interior.f.a
|
||
|
frame $itk_interior.f.b
|
||
|
set f $itk_interior.f.a
|
||
|
|
||
|
# Description frame
|
||
|
set d [labelframe $f.desc -text "Description"]
|
||
|
label $d.txt -justify left -wraplength 6i -background $::Colors(textbg) \
|
||
|
-text "Some multiprocessor systems use multiple instances of Insight \
|
||
|
for debugging different CPUs. In these cases it may be desirable to have \
|
||
|
all the instances stop, start, or continue at the same time. The IPC \
|
||
|
feature can do that and more.\n\nThe IPC uses local TCP connections to the\
|
||
|
port number specified below."
|
||
|
|
||
|
pack $d.txt -side top
|
||
|
|
||
|
checkbutton $f.enabled -text "Enable IPC" -variable [scope _new(gdb/ipc/enabled)]
|
||
|
frame $f.port
|
||
|
spinbox $f.port.box -from 0 -to 65535 -wrap 0\
|
||
|
-width 6 -textvariable [scope _new(gdb/ipc/port)] -validate key \
|
||
|
-vcmd {string is integer %P}
|
||
|
label $f.port.label -text "TCP Port Number"
|
||
|
pack $f.desc -expand yes -fill both
|
||
|
pack $f.enabled -anchor w -pady 10
|
||
|
pack $f.port.box $f.port.label -side left -pady 10
|
||
|
pack $f.port -anchor w -pady 10
|
||
|
|
||
|
set w [labelframe $f.buttons -text "Enable IPC on these buttons"]
|
||
|
checkbutton $w.0 -text "Run" -variable [scope _new(gdb/ipc/run_button)]
|
||
|
checkbutton $w.1 -text "Stop" -variable [scope _new(gdb/ipc/stop_button)]
|
||
|
checkbutton $w.2 -text "Continue" -variable [scope _new(gdb/ipc/cont_button)]
|
||
|
checkbutton $w.3 -text "Step" -variable [scope _new(gdb/ipc/step_button)]
|
||
|
checkbutton $w.4 -text "Exit" -variable [scope _new(gdb/ipc/exit)]
|
||
|
grid $w.0 $w.1 -padx 10 -pady 10 -sticky w
|
||
|
grid $w.2 $w.3 -padx 10 -pady 10 -sticky w
|
||
|
grid $w.4 -padx 10 -pady 10 -sticky w
|
||
|
pack $w -fill both -expand yes
|
||
|
pack $f.buttons -fill both -expand yes
|
||
|
|
||
|
button $itk_interior.f.b.ok -text OK -width 7 -underline 0 -command [code $this _save]
|
||
|
button $itk_interior.f.b.quit -text Cancel -width 7 -underline 0 -command [code $this _cancel]
|
||
|
standard_button_box $itk_interior.f.b
|
||
|
pack $itk_interior.f.a $itk_interior.f.b $itk_interior.f -expand yes -fill both -padx 5 -pady 5
|
||
|
}
|
||
|
|
||
|
# ------------------------------------------------------------------
|
||
|
# METHOD: apply - apply changes
|
||
|
# ------------------------------------------------------------------
|
||
|
itcl::body IPCPref::_apply {} {
|
||
|
set enable_changed 0
|
||
|
if {[pref get gdb/ipc/enabled] != $_new(gdb/ipc/enabled)} {
|
||
|
set enable_changed 1
|
||
|
}
|
||
|
if {$_new(gdb/ipc/enabled) && [pref get gdb/ipc/port] != $_new(gdb/ipc/port)} {
|
||
|
set enable_changed 1
|
||
|
}
|
||
|
|
||
|
foreach var [array names _new] {
|
||
|
if {$_new($var) != [pref get $var]} {
|
||
|
pref set $var $_new($var)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if {$enable_changed} {
|
||
|
if {$_new(gdb/ipc/enabled)} {
|
||
|
# must start up ipc
|
||
|
catch {delete object $::insight_ipc}
|
||
|
set ::insight_ipc [Iipc \#auto]
|
||
|
} else {
|
||
|
delete object $::insight_ipc
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
# ------------------------------------------------------------------
|
||
|
# METHOD: _cancel
|
||
|
# ------------------------------------------------------------------
|
||
|
itcl::body IPCPref::_cancel {} {
|
||
|
foreach elem [array names _saved] {
|
||
|
set cur_val [pref get $elem]
|
||
|
if {[string compare $cur_val $_saved($elem)] != 0} {
|
||
|
pref set $elem $_saved($elem)
|
||
|
}
|
||
|
}
|
||
|
unpost
|
||
|
}
|
||
|
|
||
|
# ------------------------------------------------------------------
|
||
|
# METHOD: save - apply changes and quit
|
||
|
# ------------------------------------------------------------------
|
||
|
itcl::body IPCPref::_save {} {
|
||
|
_apply
|
||
|
unpost
|
||
|
}
|