# 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 }