Squeak 4.6: ST80Tools-cmm.8.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Squeak 4.6: ST80Tools-cmm.8.mcz

commits-2
Chris Muller uploaded a new version of ST80Tools to project Squeak 4.6:
http://source.squeak.org/squeak46/ST80Tools-cmm.8.mcz

==================== 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') -----
browseChangeSetsWithSelector
        "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') -----
browseItHere
        "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)
                                ifTrue:
                                        [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 :=
                [aCompiledMethod
                        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]
                whileFalse:
                        [(guineaPig isNil
                          and: [debugger interruptedContext home == thisContext]) ifTrue:
                                [debuggerWindow controller closeAndUnschedule.
                                 UIManager default inform: 'Nothing to debug; expression is optimized'.
                                 ^self].
                        debugger send]!

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

        | method receiver context |
        (model respondsTo: #doItReceiver)
                ifTrue:
                        [receiver := model doItReceiver.
                        context := model doItContext]
                ifFalse:
                        [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') -----
canHaveUnacceptedEdits
        "Answer if the receiver is an object that can hold unaccepted edits (such as a text editor widget)"

        ^true!

----- Method: StringHolderView>>unacceptedEditState (in category '*ST80Tools-multi-window support') -----
unacceptedEditState
        ^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') -----
browseRecentLog
        "Open a changelist browser on changes submitted since the last snapshot.  1/17/96 sw"

        ChangeList browseRecentLog!

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

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

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

        FileList openInMVC!

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

        PackagePaneBrowser openBrowser!

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

        SelectorBrowser new open!

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

----- Method: FileList class>>openInMVC (in category '*ST80Tools-instance creation') -----
openInMVC
        "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.
        topView
                model: aFileList;
                label: dir pathName;
                minimumSize: 200@200.
        topView borderWidth: 1.

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

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

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

        fileListView := PluggableListView on: aFileList
                list: #fileList
                selected: #fileListIndex
                changeSelected: #fileListIndex:
                menu: #fileListMenu:.
        fileListView window: (0@0 extent: 120@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@0 extent: 200@140).
        topView addSubView: fileContentsView below: templateView.

        topView controller open!

----- Method: FileList>>optionalButtonViewForMVC (in category '*ST80Tools-initialization') -----
optionalButtonViewForMVC
        "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.
        services
                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!