From 7d6708cbbcf24c757b2b64068e6524f75c037aa6 Mon Sep 17 00:00:00 2001 From: Martin Hunt Date: Mon, 5 Nov 2001 19:00:30 +0000 Subject: 2001-10-18 Martin M. Hunt * library/globalpref.itb (GlobalPref::_init_var): New method to initialize _saved and _new arrays. (GlobalPref::constructor): Call _init_var. (GlobalPref::_buildwin): Use _new array for prefs variables. Font optimizations. Remove troublesome fonts and sort the list. (GlobalPref::toggle_tracing_mode): Removed. Some functionality moved to _apply and _cancel. (GlobalPref::_apply): Set prefs with values from the _new array. (SrcPref::_cancel): Reset prefs with values from _saved. * library/globalpref.ith: Changed private variables and methods to start with underscore. (tracing_cb): Removed. (_init): Changed from proc to method. --- gdb/gdbtk/ChangeLog | 17 +++ gdb/gdbtk/library/globalpref.itb | 226 +++++++++++++++++++++++---------------- gdb/gdbtk/library/globalpref.ith | 29 ++--- 3 files changed, 168 insertions(+), 104 deletions(-) (limited to 'gdb/gdbtk') diff --git a/gdb/gdbtk/ChangeLog b/gdb/gdbtk/ChangeLog index 49b44d2e318..cbc536934f3 100644 --- a/gdb/gdbtk/ChangeLog +++ b/gdb/gdbtk/ChangeLog @@ -1,3 +1,20 @@ +2001-10-18 Martin M. Hunt + * library/globalpref.itb (GlobalPref::_init_var): + New method to initialize _saved and _new arrays. + (GlobalPref::constructor): Call _init_var. + (GlobalPref::_buildwin): Use _new array for prefs + variables. Font optimizations. Remove troublesome + fonts and sort the list. + (GlobalPref::toggle_tracing_mode): Removed. Some + functionality moved to _apply and _cancel. + (GlobalPref::_apply): Set prefs with values from the + _new array. + (SrcPref::_cancel): Reset prefs with values from _saved. + * library/globalpref.ith: Changed private variables + and methods to start with underscore. + (tracing_cb): Removed. + (_init): Changed from proc to method. + 2001-11-01 Keith Seitz * library/memwin.itb (update_addr): Evaluate the address diff --git a/gdb/gdbtk/library/globalpref.itb b/gdb/gdbtk/library/globalpref.itb index 7b342c81d9d..058c5e8e73f 100644 --- a/gdb/gdbtk/library/globalpref.itb +++ b/gdb/gdbtk/library/globalpref.itb @@ -18,7 +18,7 @@ # ---------------------------------------------------------------------- # ------------------------------------------------------------------ -# PROC: _init - set up the tracing labels info +# METHOD: _init - set up the tracing labels info # ------------------------------------------------------------------ body GlobalPref::_init {} { if {$inited} { @@ -40,13 +40,27 @@ body GlobalPref::_init {} { } } +# ------------------------------------------------------------------ +# METHOD: init_var - initialize preference variables +# ------------------------------------------------------------------ +body GlobalPref::_init_var {} { + set vlist {gdb/ImageDir gdb/console/wrap gdb/mode + gdb/help/browser gdb/use_icons} + + foreach var $vlist { + set _saved($var) [pref get $var] + set _new($var) $_saved($var) + } +} + # ------------------------------------------------------------------ # METHOD: constructor - create the Global Preferences object # ------------------------------------------------------------------ body GlobalPref::constructor {args} { window_name "Global Preferences" _init - build_win + _init_var + _build_win eval itk_initialize $args } @@ -54,15 +68,15 @@ body GlobalPref::constructor {args} { # METHOD: destructor - destroy the Global Preferences object # ------------------------------------------------------------------ body GlobalPref::destructor {} { - foreach thunk $Fonts { + foreach thunk $_fonts { font delete test-$thunk-font } } # ------------------------------------------------------------------ -# METHOD: build_win - build the dialog +# METHOD: _build_win - build the dialog # ------------------------------------------------------------------ -body GlobalPref::build_win {} { +body GlobalPref::_build_win {} { global tcl_platform GDBTK_LIBRARY debug frame $itk_interior.f @@ -73,23 +87,22 @@ body GlobalPref::build_win {} { frame $frame.icons label $frame.icons.lab -text "Icons " combobox::combobox $frame.icons.cb -editable 0 -maxheight 10\ - -command [code $this change_icons] + -command [code $this _change_icons] # get list of icon directories set curdir [pwd] - set icondirlist "" + set _icondirlist "" cd $GDBTK_LIBRARY foreach foo [glob -- *] { if {[file isdirectory $foo] && [file exists [file join $foo "icons.txt"]]} { - lappend icondirlist $foo + lappend _icondirlist $foo } } set width 14 # load combobox - set imagedir [pref get gdb/ImageDir] - foreach dir $icondirlist { - if {![string compare $dir $imagedir]} { + foreach dir $_icondirlist { + if {![string compare $dir $_saved(gdb/ImageDir)]} { set cdir 1 } else { set cdir 0 @@ -121,6 +134,22 @@ body GlobalPref::build_win {} { # to rescan the font list, without deleting the entry from the # init file. set font_cache [pref get gdb/font_cache] + + # get list of fonts, removing some that typically + # are not useful or cause tk problems + set fam [lremove [font families] "open look glyph"] + set fam [lremove $fam "open look cursor"] + set fam [lremove $fam "song ti"] + set fam [lremove $fam "clearlyu"] + set fam [lremove $fam "clearlyu alternate glyphs"] + set fam [lremove $fam "clearlyu arabic extra"] + set fam [lremove $fam "clearlyu ligature"] + set fam [lremove $fam "clearlyu pua"] + set fam [lremove $fam "fangsong ti"] + set fam [lremove $fam "newspaper"] + set fam [lremove $fam "palatino linotype"] + set fam [lsort $fam] + if {$font_cache == ""} { if {$tcl_platform(platform) == "unix"} { toplevel .c @@ -135,40 +164,40 @@ body GlobalPref::build_win {} { ::raise .c ::update } - set fam [font families] + foreach fn $fam { if {[font metrics [list $fn] -fixed] == 1} { lappend font_cache $fn } } pref set gdb/font_cache $font_cache - if {$tcl_platform(platform) == "unix"} { destroy .c } + if {[winfo exists .c]} { destroy .c } } Labelledframe $frame.d -text "Fonts" set f [$frame.d get_frame] - make_font_item $f fixed "Fixed Font:" $font_cache + _make_font_item $f fixed "Fixed Font:" $font_cache if {$tcl_platform(platform) != "windows"} { # Cannot change the windows menu font ourselves - make_font_item $f menu "Menu Font:" [font families] + _make_font_item $f menu "Menu Font:" $fam } - make_font_item $f default "Default Font:" [font families] - make_font_item $f status "Status Bar Font:" [font families] + _make_font_item $f default "Default Font:" $fam + _make_font_item $f status "Status Bar Font:" $fam # This is the tracing preference set tracing_cb [pref get gdb/mode] if { ![info exists tracing_labels($tracing_cb)]} { - debug "Got unknown mode value: $tracing_cb" + dbug E "Got unknown mode value: $tracing_cb" set tracing_labels($tracing_cb) "Unknown gdb mode..." } frame $frame.tracing - checkbutton $frame.tracing.cb -variable [scope tracing_cb] \ + checkbutton $frame.tracing.cb -variable [scope _new(gdb/mode)] \ -text $tracing_labels($tracing_cb) \ - -command [code $this toggle_tracing $frame.tracing.cb] \ + -command [code $this _toggle_tracing $frame.tracing.cb] \ -width $tracing_labels(max_len) -anchor w pack $frame.tracing.cb -pady 10 -side left -fill none @@ -180,21 +209,21 @@ body GlobalPref::build_win {} { } frame $frame.browser checkbutton $frame.browser.cb \ - -text $help_text -variable [pref varname gdb/help/browser] + -text $help_text -variable [scope _new(gdb/help/browser)] pack $frame.browser.cb -pady 10 -side left -fill none # use_icons if {$tcl_platform(platform) == "unix"} { frame $frame.use_icons checkbutton $frame.use_icons.cb \ - -text "Use builtin image as icon." -variable [pref varname gdb/use_icons] + -text "Use builtin image as icon." -variable [scope _new(gdb/use_icons)] pack $frame.use_icons.cb -pady 10 -side left -fill none } # console wrap frame $frame.consolewrap checkbutton $frame.consolewrap.cw -text "wrap text in console window" \ - -variable [pref varname gdb/console/wrap] + -variable [scope _new(gdb/console/wrap)] pack $frame.consolewrap.cw -pady 10 -side left -fill none pack $frame.icons.lab $frame.icons.cb -side left @@ -208,9 +237,9 @@ body GlobalPref::build_win {} { pack $frame.d -side top -fill both -expand yes # make buttons - button $itk_interior.x.ok -text OK -underline 0 -width 7 -command [code $this ok] - button $itk_interior.x.apply -text Apply -width 7 -underline 0 -command [code $this apply] - button $itk_interior.x.cancel -text Cancel -width 7 -underline 0 -command [code $this cancel] + button $itk_interior.x.ok -text OK -underline 0 -width 7 -command [code $this _ok] + button $itk_interior.x.apply -text Apply -width 7 -underline 0 -command [code $this _apply] + button $itk_interior.x.cancel -text Cancel -width 7 -underline 0 -command [code $this _cancel] pack $itk_interior.x.ok $itk_interior.x.apply $itk_interior.x.cancel -side left standard_button_box $itk_interior.x pack $itk_interior.x -fill x -padx 5 -pady 5 -side bottom @@ -226,25 +255,25 @@ body GlobalPref::build_win {} { ::update idletasks - resize_font_item_height + _resize_font_item_height pack propagate $itk_interior.f 0 } # ------------------------------------------------------------------ -# PRIVATE METHOD: make_font_item +# PRIVATE METHOD: _make_font_item # ------------------------------------------------------------------ -body GlobalPref::make_font_item {f name label font_list} { +body GlobalPref::_make_font_item {f name label font_list} { # create ComboBox with font name - lappend Fonts $name + lappend _fonts $name - set Original($name,family) [font actual global/$name -family] - set Original($name,size) [font actual global/$name -size] - font create test-$name-font -family $Original($name,family) \ - -size $Original($name,size) + set _original($name,family) [font actual global/$name -family] + set _original($name,size) [font actual global/$name -size] + font create test-$name-font -family $_original($name,family) \ + -size $_original($name,size) label $f.${name}x -text $label - combobox::combobox $f.${name}n -editable 0 -value $Original($name,family) \ + combobox::combobox $f.${name}n -editable 0 -value $_original($name,family) \ -command [code $this _change_font $name] foreach a $font_list { @@ -258,17 +287,17 @@ body GlobalPref::make_font_item {f name label font_list} { -decrement [code $this _change_size down $name] } {} label $f.${name}l -text ABCDEFabcdef0123456789 -font test-$name-font - set _size($name) $Original($name,size) + set _size($name) $_original($name,size) grid $f.${name}x $f.${name}n $f.${name}s $f.${name}l -sticky we -padx 5 -pady 5 grid columnconfigure $f 3 -weight 1 } # ------------------------------------------------------------------ -# PRIVATE METHOD: resize_font_item_height +# PRIVATE METHOD: _resize_font_item_height # ------------------------------------------------------------------ -body GlobalPref::resize_font_item_height {} { - foreach font $Fonts { +body GlobalPref::_resize_font_item_height {} { + foreach font $_fonts { set master [$itk_interior.f.d get_frame] set row [gridCGet $master.${font}l -row] grid rowconfigure $master $row -minsize [lindex [grid bbox $master 0 $row 3 $row ] 3] @@ -276,16 +305,13 @@ body GlobalPref::resize_font_item_height {} { } # ------------------------------------------------------------------ -# PRIVATE METHOD: change_icons +# PRIVATE METHOD: _change_icons # ------------------------------------------------------------------ -body GlobalPref::change_icons {w args} { - global gdb_ImageDir GDBTK_LIBRARY +body GlobalPref::_change_icons {w args} { + debug set index [$w list curselection] if {$index != ""} { - set dir [lindex $icondirlist $index] - pref set gdb/ImageDir $dir - set gdb_ImageDir [file join $GDBTK_LIBRARY $dir] - ManagedWin::restart + set _new(gdb/ImageDir) [lindex $_icondirlist $index] } } @@ -328,34 +354,25 @@ body GlobalPref::_change_size {direction font} { font configure test-$font-font -size $_size($font) } -# ------------------------------------------------------------------ -# METHOD: toggle_tracing_mode - toggles the tracing mode on and off -# ------------------------------------------------------------------ -body GlobalPref::toggle_tracing_mode {} { - pref set gdb/mode $tracing_cb - # Reset the button-1 behavior if you are going out of trace mode. - if {!$tracing_cb} { - pref set gdb/B1_behavior 1 - } -} -body GlobalPref::toggle_tracing {win} { - debug foo - $win configure -text $tracing_labels($tracing_cb) +body GlobalPref::_toggle_tracing {win} { + debug + $win configure -text $tracing_labels($_new(gdb/mode)) } # ------------------------------------------------------------------ -# METHOD: ok - called to accept settings and close dialog +# METHOD: _ok - called to accept settings and close dialog # ------------------------------------------------------------------ -body GlobalPref::ok {} { - apply 1 +body GlobalPref::_ok {} { + _apply 1 } # ------------------------------------------------------------------ -# METHOD: apply - apply current settings to the screen +# METHOD: _apply - apply current settings to the screen # ------------------------------------------------------------------ -body GlobalPref::apply {{deleteMe 0}} { - set commands {} +body GlobalPref::_apply {{deleteMe 0}} { + debug + set changed_something 0 # If you are not destroying the window, then make sure to # propagate the geometry info from the font frame, so that changing @@ -366,61 +383,90 @@ body GlobalPref::apply {{deleteMe 0}} { pack propagate $itk_interior.f 1 } - foreach thunk $Fonts { + foreach thunk $_fonts { set font [font configure test-$thunk-font] if {[pref get global/font/$thunk] != $font} { - lappend commands [list pref set global/font/$thunk $font] + pref set global/font/$thunk $font + set changed_something 1 } } - if {[pref get gdb/mode] != $tracing_cb} { - lappend commands toggle_tracing_mode - } + foreach var [array names _new] { + if {$_new($var) != [pref get $var]} { + debug "$var = $_new($var)" - if {[llength $commands] > 0} { - foreach command $commands { - eval $command - } - if {$deleteMe} { - unpost + if {$var == "gdb/mode"} { + if {!$_new(gdb/mode)} { pref set gdb/B1_behavior 1 } + } elseif {$var == "gdb/ImageDir"} { + set ::gdb_ImageDir [file join $::GDBTK_LIBRARY $_new($var)] + } + pref set $var $_new($var) + set changed_something 1 } + } + + if {$changed_something} { + if {$deleteMe} { unpost } ManagedWin::restart return } - if {$deleteMe} { - unpost + if {$deleteMe} { + unpost } else { after idle " update idletasks - [code $this resize_font_item_height] + [code $this _resize_font_item_height] pack propagate $itk_interior.f 0 " } } # ------------------------------------------------------------------ -# METHOD: cancel - forget current settings -- reset to original +# METHOD: _cancel - forget current settings -- reset to original # state and close preferences # ------------------------------------------------------------------ -body GlobalPref::cancel {} { +body GlobalPref::_cancel {} { + debug + set changed_something 0 + # Reset fonts if different - set commands {} - foreach thunk $Fonts { + foreach thunk $_fonts { set family [font configure global/$thunk -family] set size [font configure global/$thunk -size] - if {$Original($thunk,family) != $family || $Original($thunk,size) != $size} { - lappend commands [list pref set global/font/$thunk \ - [list -family $Original($thunk,family) -size $Original($thunk,size)]] + if {$_original($thunk,family) != $family || $_original($thunk,size) != $size} { + pref set global/font/$thunk \ + [list -family $_original($thunk,family) -size $_original($thunk,size)] + set changed_something 1 } } - if {[llength $commands] > 0} { - foreach command $commands { - eval $command + foreach var [array names _saved] { + if {$_saved($var) != [pref get $var]} { + debug "$var = $_saved($var)" + + if {$var == "gdb/mode"} { + if {!$_saved(gdb/mode)} { pref set gdb/B1_behavior 1 } + } elseif {$var == "gdb/ImageDir"} { + set ::gdb_ImageDir [file join $::GDBTK_LIBRARY $_saved($var)] + } + pref set $var $_saved($var) + set changed_something 1 } } - if {[llength $commands] > 0} { + + if {$changed_something} { ManagedWin::restart } unpost } + +# ------------------------------------------------------------------ +# METHOD: cancel - override modal dialog cancel method. +# The cancel method is actually called when +# the window is closed. Name needs fixed. +# ------------------------------------------------------------------ +body GlobalPref::cancel {} { + # when the window is closed, we want the preferences selected to + # be applied. + _apply 1 +} diff --git a/gdb/gdbtk/library/globalpref.ith b/gdb/gdbtk/library/globalpref.ith index 36edd38cdc6..799625c9b6d 100644 --- a/gdb/gdbtk/library/globalpref.ith +++ b/gdb/gdbtk/library/globalpref.ith @@ -16,31 +16,32 @@ class GlobalPref { inherit ManagedWin ModalDialog private { - variable icondirlist "" - variable Original ;# Original settings + variable _new + variable _saved + variable _icondirlist "" + variable _original ;# Original font settings variable _size ;# Array tracking spinint values - variable Fonts ;# List of all available fonts for editing + variable _fonts ;# List of all available fonts for editing common tracing_labels common inited 0 - variable tracing_cb - proc _init {} - method build_win {} - method make_font_item {f name label font_list} - method resize_font_item_height {} - method change_icons {w args} + method _init {} + method _init_var {} + method _build_win {} + method _make_font_item {f name label font_list} + method _resize_font_item_height {} + method _change_icons {w args} method _change_font {font stupid implementation} method _change_size {direction font} - method toggle_tracing_mode {} - method ok {} - method apply {{deleteMe 0}} + method _ok {} + method _apply {{deleteMe 0}} + method _cancel {} method cancel {} - method toggle_tracing {win} + method _toggle_tracing {win} } public { method constructor {args} method destructor {} } - } -- cgit v1.2.1