This is the mail archive of the insight@sourceware.org mailing list for the Insight project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Arbitrary width memory window.


Here is the patch again complete with documentation changes I missed before.
2005-01-10  Andrew Stubbs  <andrew.stubbs@st.com>

	* library/mempref.itb (MemPref::constructor): Allow the Byte Per Row
	combo box to accept arbitrary values.
	(MemPref::set_bytes_per_row): Validate the new value; reject invalid
	entries and round up to a multiple of the word size.
	(MemPref::apply): Read the value from the text box even if the user
	has not pressed return.
	(MemPref::enable_format): Ensure the bytes per row value is still valid.
	(MemPref::disable_format): Likewise.
	* library/mempref.ith (MemPref): Add $gbprlist.
	* library/help/memory.html: Update.

Index: src/gdb/gdbtk/library/mempref.itb
===================================================================
--- src.orig/gdb/gdbtk/library/mempref.itb	2006-01-10 14:59:39.000000000 +0000
+++ src/gdb/gdbtk/library/mempref.itb	2006-01-10 15:19:54.000000000 +0000
@@ -41,6 +41,7 @@ itcl::body MemPref::constructor {args} {
   
   set gnumbytes $numbytes
   set gbpr $bpr
+  set gbprlist [list 4 8 16 32 64 128]
   set gascii $ascii
   set gascii_char $ascii_char
   
@@ -153,14 +154,11 @@ itcl::body MemPref::build_win {} {
   label $fr.2.l -text "Bytes Per Row "
   set Widgets(b-bytes_per_row) [::combobox::combobox $fr.2.c \
 				  -command [code $this set_bytes_per_row]  \
-				  -width 4 -editable 0 -font global/fixed \
+				  -width 4 -editable 1 -font global/fixed \
 				  -bg $::Colors(textbg)]
-  $fr.2.c list insert end 4
-  $fr.2.c list insert end 8
-  $fr.2.c list insert end 16
-  $fr.2.c list insert end 32
-  $fr.2.c list insert end 64
-  $fr.2.c list insert end 128
+  foreach item $gbprlist {
+    $fr.2.c list insert end $item
+  }
   $fr.2.c configure -value $gbpr
 
   pack $fr.2.l -side left -anchor e
@@ -264,7 +262,40 @@ itcl::body MemPref::check_numbytes {var 
 #  METHOD:  set_bytes_per_row - combobox callback to set the bytes per row
 # ------------------------------------------------------------------
 itcl::body MemPref::set_bytes_per_row {w value} {
-  set gbpr $value
+  if {[string is integer -strict $value] && [expr {$value != 0}]} {
+    # The input is a value number.
+    set gbpr $value
+    set gbpr [string trim $gbpr]
+
+    # Too high a number will cause a Segmentation fault.
+    if {[expr {$gbpr > 150}]} {set gbpr 150}
+
+    # Insert the value into the combo box list, if it isn't there already.
+    set found 0
+    foreach item $gbprlist {
+      if {$item == $gbpr} {
+        set found 1
+      }
+    }
+    if {[expr {$found == 0}]} {
+      lappend gbprlist $gbpr
+      $Widgets(b-bytes_per_row) list insert end $gbpr
+    }
+
+    set s $gsize
+    if {[expr {$s == 3}]} {set s 4}
+    if {[expr {$s == 5}]} {set s 8}
+    set rem [expr {$gbpr % $s}]
+    if {[expr {$rem != 0}]} {
+      # The bytes-per-row is not a multiple of the size.
+      set gbpr [expr {$gbpr + ($s - $rem)}]
+    }
+  }
+
+  # Set the display to the new value. This may be different if the input
+  # was zero or not a number, or if the user entered any whitespace.
+  $Widgets(b-bytes_per_row) delete 0 end
+  $Widgets(b-bytes_per_row) insert end $gbpr
 }
 
 # ------------------------------------------------------------------
@@ -318,6 +349,9 @@ itcl::body MemPref::apply {} {
     }
   }
 
+  # Ensure the value has been read from the text field.
+  set_bytes_per_row "" [$Widgets(b-bytes_per_row) get]
+
   # pass all the changed values back to parent
   debug "$win configChange -size $size -numbytes $numbytes \
 	     -format $format -ascii $gascii \
@@ -338,6 +372,10 @@ itcl::body MemPref::apply {} {
 #  METHOD:  enable_format - turn on the format radio buttons 
 # ------------------------------------------------------------------
 itcl::body MemPref::enable_format {} {
+  # First ensure bytes per row is a multiple of the size.
+  # Use the value of the widget, not $gbpr to ensure the typed value is kept.
+  set_bytes_per_row "" [$Widgets(b-bytes_per_row) get]
+
   if {!$format_disabled} {
     return
   }
@@ -353,6 +391,10 @@ itcl::body MemPref::enable_format {} {
 #  METHOD:  disable_format - turn off the format radio buttons 
 # ------------------------------------------------------------------
 itcl::body MemPref::disable_format {} {
+  # First ensure bytes per row is a multiple of the size.
+  # Use the value of the widget, not $gbpr to ensure the typed value is kept.
+  set_bytes_per_row "" [$Widgets(b-bytes_per_row) get]
+
   if {$format_disabled} {
     return
   }
Index: src/gdb/gdbtk/library/mempref.ith
===================================================================
--- src.orig/gdb/gdbtk/library/mempref.ith	2006-01-10 14:59:39.000000000 +0000
+++ src/gdb/gdbtk/library/mempref.ith	2006-01-10 15:19:54.000000000 +0000
@@ -47,6 +47,7 @@ itcl::class MemPref {
     variable gformat 
     variable gnumbytes 
     variable gbpr 
+    variable gbprlist
     variable gascii  
     variable gascii_char 
     variable gvar
Index: src/gdb/gdbtk/library/help/memory.html
===================================================================
--- src.orig/gdb/gdbtk/library/help/memory.html	2006-01-10 15:48:34.000000000 +0000
+++ src/gdb/gdbtk/library/help/memory.html	2006-01-10 15:26:08.000000000 +0000
@@ -232,7 +232,9 @@ of bytes. By default, the Memory Window 
 Miscellaneous memory preferences include the option to display the ASCII
 representation of the memory, including what character to use for non-ASCII
 bytes (the "control" character). Additionally, users may specify the number
-of bytes per row, either four, eight, sixteen, or thirty-two. The default
-is sixteen bytes per row.
+of bytes per row, either by typing a number into the box or by choosing one
+from the list. The default is sixteen bytes per row. If the entered value is
+not a multiple of the cell size then it will be automatically rounded up. The
+maximum permitted value is 150 (before rounding).
 </BODY>
 </HTML>

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]