extensions.st
changeset 11401 a228326e3eee
parent 11400 a9ad41342a52
child 11450 e0692491f820
--- a/extensions.st	Thu Mar 08 16:21:33 2012 +0100
+++ b/extensions.st	Thu Mar 08 21:30:08 2012 +0100
@@ -22,9 +22,10 @@
 !ArrayedCollection methodsFor:'inspecting'!
 
 inspector2TabForHexDump
-    "a tab, showing a hex dump"
-
-    |wrapper myByteSize|
+    "a tab, showing a hex dump; defined here, so that both byteArrays and other bulk data
+     containers can define it in their inspector2Tabs methods."
+
+    |wrapper myByteSize v genDump baseAddress|
 
     myByteSize := self size * self class elementByteSize.
 
@@ -37,15 +38,50 @@
                                             ].
                                 ].
 
+    baseAddress := 0.
+    genDump := [
+                    |dump|
+
+                    v topView withWaitCursorDo:[
+                        dump := AbstractFileBrowser 
+                            contentsOfBytesAsHexDump:wrapper 
+                            numberOfAddressDigits:(myByteSize hexPrintString size) 
+                            addressStart:baseAddress.
+                        v list:dump expandTabs:false scanForNonStrings:false includesNonStrings:false.
+                    ].
+               ].
+
+    v := ScrollableView for:TextView. 
+    genDump value.
+
+    v scrolledView 
+        menuHolder:
+            [    
+                |m| 
+
+                m := v scrolledView editMenu.
+                m addLabel:'-' selector:nil.
+                m addLabel:'Change Base Address...' selector:#changeBase.
+                m actionAt:#changeBase 
+                    put:[ 
+                        |s b|
+
+                        s := Dialog request:'Base address (hex):' initialAnswer:(baseAddress printStringRadix:16).
+                        s notEmptyOrNil ifTrue:[
+                            b := Integer readFrom:s radix:16 onError:nil.
+                            b notNil ifTrue:[
+                                baseAddress := b. genDump value
+                            ].
+                        ].
+                    ].
+                m.
+            ];
+        menuMessage: #value.
+
     ^ Tools::Inspector2Tab new
             priority: 40;
             label:'Hexdump';
-            view: ((ScrollableView for:TextView) 
-                    list:(AbstractFileBrowser 
-                                contentsOfBytesAsHexDump:wrapper 
-                                numberOfAddressDigits:(myByteSize hexPrintString size) 
-                                addressStart:0) expandTabs:false scanForNonStrings:false includesNonStrings:false;
-                    yourself);
+            view: v;
             yourself
 
     "Created: / 13-02-2012 / 15:08:42 / cg"
@@ -1852,5 +1888,5 @@
 !stx_libtool class methodsFor:'documentation'!
 
 extensionsVersion_CVS
-    ^ '$Header: /cvs/stx/stx/libtool/extensions.st,v 1.75 2012-03-08 15:21:33 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/extensions.st,v 1.76 2012-03-08 20:30:08 cg Exp $'
 ! !
\ No newline at end of file