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