[squeak-dev] Squeak 4.6: ST80Tools-cmm.8.mcz

commits at source.squeak.org commits at source.squeak.org
Fri Jun 5 20:19:19 UTC 2015

Chris Muller uploaded a new version of ST80Tools to project Squeak 4.6:

==================== Summary ====================

Name: ST80Tools-cmm.8
Author: cmm
Time: 21 April 2015, 4:49:40.23 pm
UUID: 1d69716a-4a2c-44e6-9bae-2613b5590947
Ancestors: ST80Tools-mt.7

Fix underscore assignment.

==================== Snapshot ====================

----- Method: ParagraphEditor>>browseChangeSetsWithSelector (in category '*ST80Tools') -----
	"Determine which, if any, change sets have at least one change for the selected selector, independent of class"

	| aSelector |
	self lineSelectAndEmptyCheck: [^ self].
	(aSelector := self selectedSelector) == nil ifTrue: [^ view flash].
	self terminateAndInitializeAround: [ChangeSorter browseChangeSetsWithSelector: aSelector]!

----- Method: ParagraphEditor>>browseItHere (in category '*ST80Tools') -----
	"Retarget the receiver's window to look at the selected class, if appropriate.  3/1/96 sw"
	| aSymbol b |
	(((b := model) isKindOf: Browser) and: [b couldBrowseAnyClass])
		ifFalse: [^ view flash].
	model okToChange ifFalse: [^ view flash].
	self selectionInterval isEmpty ifTrue: [self selectWord].
	(aSymbol := self selectedSymbol) ifNil: [^ view flash].

	self terminateAndInitializeAround:
		[| foundClass |
		foundClass := (Smalltalk at: aSymbol ifAbsent: [nil]).
			foundClass ifNil: [^ view flash].
			(foundClass isKindOf: Class)
					[model selectSystemCategory: foundClass category.
		model classListIndex: (model classList indexOf: foundClass name)]]!

----- Method: ParagraphEditor>>debug:receiver:in: (in category '*ST80Tools') -----
debug: aCompiledMethod receiver: anObject in: evalContext

	| guineaPig debugger debuggerWindow context |
	guineaPig :=
			valueWithReceiver: anObject
			 arguments: (evalContext ifNil: [ #() ] ifNotNil: [ { evalContext } ]).
		 guineaPig := nil "spot the return from aCompiledMethod"] newProcess.
	context := guineaPig suspendedContext.
	debugger := Debugger new
		process: guineaPig
		controller: ((Smalltalk isMorphic not and: [ScheduledControllers inActiveControllerProcess]) ifTrue:
						[ScheduledControllers activeController])
		context: context.
	debuggerWindow := debugger openFullNoSuspendLabel: 'Debug it'.
	"Now step into the expression.  But if it is quick (is implemented as a primtiive, e.g. `0')
	 it will return immediately back to the block that is sent newProcess above.  Guard
	 against that with the check for home being thisContext."
	[debugger interruptedContext method == aCompiledMethod]
			[(guineaPig isNil
			  and: [debugger interruptedContext home == thisContext]) ifTrue:
				[debuggerWindow controller closeAndUnschedule.
				 UIManager default inform: 'Nothing to debug; expression is optimized'.
			debugger send]!

----- Method: ParagraphEditor>>debugIt (in category '*ST80Tools') -----

	| method receiver context |
	(model respondsTo: #doItReceiver) 
			[receiver := model doItReceiver.
			context := model doItContext]
			[receiver := context := nil].
	self lineSelectAndEmptyCheck: [^self].
	method := self compileSelectionFor: receiver in: context.
	method notNil ifTrue:
		[self debug: method receiver: receiver in: context].!

----- Method: StringHolderView>>canHaveUnacceptedEdits (in category '*ST80Tools-multi-window support') -----
	"Answer if the receiver is an object that can hold unaccepted edits (such as a text editor widget)"


----- Method: StringHolderView>>unacceptedEditState (in category '*ST80Tools-multi-window support') -----
	^hasUnacceptedEdits ifTrue: [displayContents text]!

----- Method: StringHolderView>>unacceptedEditState: (in category '*ST80Tools-multi-window support') -----
unacceptedEditState: stateOrNil
	(hasUnacceptedEdits := stateOrNil notNil) ifTrue:
		[self editString: stateOrNil]!

----- Method: ScreenController>>browseRecentLog (in category '*ST80Tools') -----
	"Open a changelist browser on changes submitted since the last snapshot.  1/17/96 sw"

	ChangeList browseRecentLog!

----- Method: ScreenController>>chooseDirtyBrowser (in category '*ST80Tools') -----
	"Put up a list of browsers with unsubmitted edits and activate the one selected by the user, if any."
	"ScheduledControllers screenController chooseDirtyBrowser"

	ScheduledControllers findWindowSatisfying:
		[:c | (c model isKindOf: Browser) and: [c model canDiscardEdits not]].

----- Method: ScreenController>>openChangeManager (in category '*ST80Tools') -----
	"Open a dual change sorter.  For looking at two change sets at once."
	DualChangeSorter new open!

----- Method: ScreenController>>openFile (in category '*ST80Tools') -----
	FileList openFileDirectly!

----- Method: ScreenController>>openFileList (in category '*ST80Tools') -----
	"Create and schedule a FileList view for specifying files to access."

	FileList openInMVC!

----- Method: ScreenController>>openPackageBrowser (in category '*ST80Tools') -----
	"Create and schedule a Browser view for browsing code."

	PackagePaneBrowser openBrowser!

----- Method: ScreenController>>openSelectorBrowser (in category '*ST80Tools') -----
	"Create and schedule a selector fragment window."

	SelectorBrowser new open!

----- Method: ScreenController>>openSimpleChangeSorter (in category '*ST80Tools') -----
	ChangeSorter new open!

----- Method: FileList class>>openInMVC (in category '*ST80Tools-instance creation') -----
	"Open a view of an instance of me on the default directory."

	| dir aFileList topView volListView templateView fileListView fileContentsView underPane pHeight |
	dir := FileDirectory default.
	aFileList := self new directory: dir.
	topView := StandardSystemView new.
		model: aFileList;
		label: dir pathName;
		minimumSize: 200 at 200.
	topView borderWidth: 1.

	volListView := PluggableListView on: aFileList
		list: #volumeList
		selected: #volumeListIndex
		changeSelected: #volumeListIndex:
		menu: #volumeMenu:.
	volListView autoDeselect: false.
	volListView window: (0 at 0 extent: 80 at 45).
	topView addSubView: volListView.

	templateView := PluggableTextView on: aFileList
		text: #pattern
		accept: #pattern:.
	templateView askBeforeDiscardingEdits: false.
	templateView window: (0 at 0 extent: 80 at 15).
	topView addSubView: templateView below: volListView.

	aFileList wantsOptionalButtons
			[underPane := aFileList optionalButtonViewForMVC.
			underPane isNil
				ifTrue: [pHeight := 60]
				ifFalse: [
					topView addSubView: underPane toRightOf: volListView.
					pHeight := 60 - aFileList optionalButtonHeight]]
			[underPane := nil.
			pHeight := 60].

	fileListView := PluggableListView on: aFileList
		list: #fileList
		selected: #fileListIndex
		changeSelected: #fileListIndex:
		menu: #fileListMenu:.
	fileListView window: (0 at 0 extent: 120 at pHeight).
	underPane isNil
		ifTrue: [topView addSubView: fileListView toRightOf: volListView]
		ifFalse: [topView addSubView: fileListView below: underPane].
	fileListView controller terminateDuringSelect: true.  "Pane to left may change under scrollbar"

	fileContentsView := PluggableTextView on: aFileList
		text: #contents accept: #put:
		readSelection: #contentsSelection menu: #fileContentsMenu:shifted:.
	fileContentsView window: (0 at 0 extent: 200 at 140).
	topView addSubView: fileContentsView below: templateView.

	topView controller open!

----- Method: FileList>>optionalButtonViewForMVC (in category '*ST80Tools-initialization') -----
	"Answer a view of optional buttons"

	| aView bHeight windowWidth offset previousView aButtonView wid services sel allServices |
	aView := View new model: self.
	bHeight := self optionalButtonHeight.
	windowWidth := 120.
	aView window: (0 @ 0 extent: windowWidth @ bHeight).
	offset := 0.
	allServices := self universalButtonServices.
	services := allServices copyFrom: 1 to: (allServices size min: 5).
	previousView := nil.
		do: [:service | sel := service selector.
		aButtonView := sel asString numArgs = 0
			ifTrue: [PluggableButtonView
					on: service provider
					getState: (service extraSelector == #none
							ifFalse: [service extraSelector])
					action: sel]
			ifFalse: [PluggableButtonView
					on: service provider
					getState: (service extraSelector == #none
							ifFalse: [service extraSelector])
					action: sel
					getArguments: #fullName
					from: self].
		service selector = services last selector
			ifTrue: [wid := windowWidth - offset]
			ifFalse: [aButtonView
					borderWidthLeft: 0
					right: 1
					top: 0
					bottom: 0.
				wid := windowWidth // services size - 2].
		aButtonView label: service buttonLabel asParagraph;
			window: (offset @ 0 extent: wid @ bHeight).
		offset := offset + wid.
		service selector = services first selector
			ifTrue: [aView addSubView: aButtonView]
			ifFalse: [aView addSubView: aButtonView toRightOf: previousView].
		previousView := aButtonView].
	^ aView!

More information about the Squeak-dev mailing list