'10/3/99 3:18:01 am'! '# # This file is encoded in (so called) SHIFT-JIS, # line delimitor is CR. # VW252-diving-inspector Enhancements Goodies for VisualWorks 2.5 Copyleft 1999 NISHIHARA Satoshi Broken English description Summary: This goodies adds "browse full" item for diving-inspector menu. Another goodies "InspectorMenuEnhancements" has this feature, so if you installed "InspectorMenuEnhancements", you don''t have to install this goodies. This goodies Requires official patch: "VW252-diving-inspector". How to install: FileIn this goodies and makes a class "VW252DivingInspectorEnhancements" in a category "Goodies-Misc". 2 methods are modified or added in the class "Inspector". Inspector>>browseFieldFull Inspector>>basicUtilsMenu When you want to restore your image, please remove this class "VW252DivingInspectorEnhancements" from your system, simply. Also a menu item "browse full" is removed automatically from Inspector menu. How to use: When you install this goodies, it adds a menu item "browse full" to Inspector menu automatically. ---------------------------------------------------------- m (NISHIHARA Satoshi) e-mail: mailto:nishis@zephyr.dti.ne.jp URL: http://www.zephyr.dti.ne.jp/~nishis/ ---------------------------------------------------------- '! Object subclass: #VW252DivingInspectorEnhancements instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Goodies-Misc'! Object subclass: #VW252DivingInspectorEnhancements instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Goodies-Misc'! VW252DivingInspectorEnhancements comment: '# # This file is encoded in (so called) SHIFT-JIS, # line delimitor is CR. # VW252-diving-inspector Enhancements Goodies for VisualWorks 2.5 Copyleft 1999 NISHIHARA Satoshi Broken English description Summary: This goodies adds "browse full" item for diving-inspector menu. Another goodies "InspectorMenuEnhancements" has this feature, so if you installed "InspectorMenuEnhancements", you don''t have to install this goodies. This goodies Requires official patch: "VW252-diving-inspector". How to install: FileIn this goodies and makes a class "VW252DivingInspectorEnhancements" in a category "Goodies-Misc". 2 methods are modified or added in the class "Inspector". Inspector>>browseFieldFull Inspector>>basicUtilsMenu When you want to restore your image, please remove this class "VW252DivingInspectorEnhancements" from your system, simply. Also a menu item "browse full" is removed automatically from Inspector menu. How to use: When you install this goodies, it adds a menu item "browse full" to Inspector menu automatically. ---------------------------------------------------------- m (NISHIHARA Satoshi) e-mail: mailto:nishis@zephyr.dti.ne.jp URL: http://www.zephyr.dti.ne.jp/~nishis/ ---------------------------------------------------------- '! "-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "! VW252DivingInspectorEnhancements class instanceVariableNames: 'enhancements '! !VW252DivingInspectorEnhancements class methodsFor: 'copyright'! copyright ^'Copyleft 1999 NISHIHARA Satoshi.'! system ^'Goodies'! version ^'001'! ! !VW252DivingInspectorEnhancements class methodsFor: 'class initialization'! induct "VW252DivingInspectorEnhancements induct." (ChangeSet patches includes: 'VW252-diving-inspector') ifFalse: [^Dialog warn: 'Requires official patch: ''VW252-diving-inspector''']. (Inspector findSelector: #browseFieldFull) notNil ifTrue: [^Dialog warn: 'DivingInspector is already Enhanced.']. self browseFieldFullMenuInInspector. self basicUtilsMenuInInspector. Inspector flushMenus! initialize "VW252DivingInspectorEnhancements initialize." "self induct"! install "VW252DivingInspectorEnhancements install." | default done process count | self postfix == #'25' ifFalse: [^nil]. Cursor normal show. default := false. done := false. process := [default := Dialog confirm: 'Do you want to install the Diving-Inspector?' initialAnswer: default. default ifTrue: [self induct]. done := true] newProcess. process priority: Processor activeProcess priority + 0. process resume. count := 0. [done not and: [count < 10]] whileTrue: [count := count + 1. (Delay forSeconds: 1) wait]. process terminate. done ifFalse: [default ifTrue: [self induct]]! obsolete self uninstall. super obsolete! uninduct "VW252DivingInspectorEnhancements uninduct." | aClass aSelector | enhancements notNil ifTrue: [enhancements copy do: [:anArray | aClass := Compiler evaluate: (anArray at: 1) logged: false. aSelector := anArray at: 3. self uninstallEnhanceClass: aClass selector: aSelector]. enhancements := nil]. Inspector flushMenus! uninstall "VW252DivingInspectorEnhancements uninstall." self uninduct! ! !VW252DivingInspectorEnhancements class methodsFor: 'enhancements'! basicUtilsMenuInInspector "VW252DivingInspectorEnhancements basicUtilsMenuInInspector." self installEnhanceClass: Inspector protocol: 'field list' code: 'basicUtilsMenu "Inspect the result of evaluating an expression." "Inspector flushMenus" ^Menu labels: ''browse\browse full\basic inspect\owners\history\show all fields'' withCRs values: #(browseField browseFieldFull basicInspectField ownerOfField history showAllFields)'! browseFieldFullMenuInInspector "VW252DivingInspectorEnhancements browseFieldFullMenuInInspector." self installEnhanceClass: Inspector protocol: 'private-menu messages' code: 'browseFieldFull | newBrowser aClass category meta | aClass := (meta := self fieldValue class isMeta) ifTrue: [self fieldValue] ifFalse: [self fieldValue class]. category := aClass category. newBrowser := Browser new. newBrowser meta: meta. newBrowser categoryList selection: category. newBrowser classList selection: aClass name. newBrowser open. newBrowser categoryList selectionIndexHolder value: newBrowser categoryList selectionIndex. newBrowser classList selectionIndexHolder value: newBrowser classList selectionIndex'! ! !VW252DivingInspectorEnhancements class methodsFor: 'saving'! save "VW252DivingInspectorEnhancements save." | encodingName fileName classCollection aStream | encodingName := #default. fileName := 'divInsEn.st'. classCollection := self saveClasses. aStream := (fileName asFilename withEncoding: encodingName) writeStream. [Cursor write showWhile: [| timeStamp | timeStamp := Date today shortPrintString , ' ' , Time now shortPrintString. aStream cr. aStream nextChunkPut: timeStamp printString. aStream cr; cr. (self comment isNil or: [self comment isEmpty]) ifFalse: [aStream nextChunkPut: self comment printString. aStream cr; cr]. classCollection do: [:aClass | aStream nextChunkPut: aClass definition. aStream cr; cr]. classCollection do: [:aClass | | sourceCodeStream | aStream nextPut: Character newPage. aStream cr. sourceCodeStream := SourceCodeStream on: aStream. aClass fileOutSourceOn: sourceCodeStream. aStream cr]]] valueNowOrOnUnwindDo: [aStream close]. ^classCollection! saveClasses "VW252DivingInspectorEnhancements saveClasses." | patternCollection classCollection | patternCollection := #('*VW252DivingInspectorEnhancements*'). classCollection := Smalltalk organization superclassOrder: self category. classCollection := classCollection select: [:aClass | | string something | string := aClass name asString. something := patternCollection detect: [:it | it match: string] ifNone: [nil]. something notNil]. ^classCollection! ! !VW252DivingInspectorEnhancements class methodsFor: 'private'! installEnhanceClass: aClass protocol: aProtocol code: aCode | aSelector anArray oldCode aCategory | aClass isBehavior ifFalse: [^self]. aSelector := Parser new parseSelector: aCode. aSelector isNil ifTrue: [^self]. enhancements isNil ifTrue: [enhancements := OrderedCollection new]. anArray := enhancements detect: [:array | | bool | bool := aClass name asString = (array at: 1). bool := bool and: [aSelector = (array at: 3)]. bool yourself] ifNone: [nil]. anArray isNil ifTrue: [(aClass includesSelector: aSelector) ifTrue: [oldCode := aClass sourceCodeAt: aSelector. aCategory := aClass organization categoryOfElement: aSelector. aCategory isNil ifTrue: [aCategory := #undefined]] ifFalse: [oldCode := nil. aCategory := aProtocol]. enhancements add: (Array with: aClass name asString with: aCategory asString with: aSelector with: oldCode)]. aClass compile: aCode classified: aProtocol! postfix ^(VisualLauncher selectors includes: #setVisualWorksHome) ifTrue: [#'30'] ifFalse: [#'25']! uninstallEnhanceClass: aClass selector: aSelector | anArray aProtocol oldCode | aClass isBehavior ifFalse: [^self]. (aSelector isKindOf: Symbol) ifFalse: [^self]. enhancements isNil ifTrue: [^self]. anArray := enhancements detect: [:array | | bool | bool := aClass name asString = (array at: 1). bool := bool and: [aSelector = (array at: 3)]. bool yourself] ifNone: [nil]. anArray isNil ifTrue: [^self]. aProtocol := anArray at: 2. oldCode := anArray at: 4. oldCode isNil ifTrue: ["remove method" aClass removeSelector: aSelector] ifFalse: ["restore method" aClass compile: oldCode classified: aProtocol]. enhancements remove: anArray! ! VW252DivingInspectorEnhancements initialize!