Tobias Pape uploaded a new version of Tools to project The Trunk:
http://source.squeak.org/trunk/Tools-topa.554.mcz ==================== Summary ==================== Name: Tools-topa.554 Author: topa Time: 16 March 2015, 11:34:16.536 pm UUID: 08589814-1c33-4bf7-afde-abf466afbbfe Ancestors: Tools-mt.553 Finding Morphs from Tools: Unify two hacks and lose a third. Certain tools _have to_ access the morphs representing them, especially the one representing the code pane of them. Hacks where in place, including duplicated code. This code is now centralized. (pattern is: find a dependent (!) that is a a (e.g.) PluggableTextMorph with a certain getTextSelector). Even more, the debugger relied on the exact layout of the call stack for its "run to here" feature. This now uses the same hack as above. =============== Diff against Tools-mt.553 =============== Item was removed: - ----- Method: Browser>>codeTextMorph (in category 'drag and drop') ----- - codeTextMorph - ^ self dependents - detect: [:dep | (dep isKindOf: PluggableTextMorph) - and: [dep getTextSelector == #contents]] - ifNone: []! Item was changed: ----- Method: CodeHolder>>installTextualCodingPane (in category 'diffs') ----- installTextualCodingPane "Install text into the code pane" | aWindow codePane aPane boundsToUse | (aWindow := self containingWindow) ifNil: [self error: 'where''s that window?']. + codePane := self codeTextMorph ifNil: [self error: 'no code pane']. - codePane := aWindow findDeepSubmorphThat: - [:m | ((m isKindOf: PluggableTextMorph) and: [m getTextSelector == #contents])] - ifAbsent: [self error: 'no code pane']. aPane := self buildMorphicCodePaneWith: nil. boundsToUse := (codePane bounds origin- (1@1)) corner: (codePane owner bounds corner " (1@1"). aWindow replacePane: codePane with: aPane. aPane vResizing: #spaceFill; hResizing: #spaceFill; borderWidth: 0. aPane bounds: boundsToUse. aPane owner clipSubmorphs: false. self contentsChanged! Item was removed: - ----- Method: CodeHolder>>textPaneWithSelector: (in category 'categories & search pane') ----- - textPaneWithSelector: aSelector - "If, among my window's paneMorphs, there is a text pane defined with aSelector as its retriever, answer it, else answer nil" - - | aWindow | - ^ (aWindow := self containingWindow) ifNotNil: - [aWindow paneMorphSatisfying: - [:aMorph | (aMorph isKindOf: PluggableTextMorph) and: - [aMorph getTextSelector == aSelector]]]! Item was changed: ----- Method: Debugger>>codePaneMenu:shifted: (in category 'code pane menu') ----- codePaneMenu: aMenu shifted: shifted aMenu + add: 'run to here' target: self selector: #runToSelection: argument: self codePaneSelectionInterval; - add: 'run to here' target: self selector: #runToSelection: argument: thisContext sender receiver selectionInterval; add: 'run until...' target: self selector: #runUntil; addLine. super codePaneMenu: aMenu shifted: shifted. + ^aMenu. + ! - ^aMenu.! Item was added: + ----- Method: Debugger>>codePaneSelectionInterval (in category 'code pane') ----- + codePaneSelectionInterval + + ^ self codeTextMorph + ifNotNil: [:cp | cp selectionInterval] + ifNil: [Interval from: 0 to: 0]! Item was changed: ----- Method: Debugger>>getSelectedText (in category 'tally support') ----- getSelectedText | m interval text | + m := self codeTextMorph ifNil: [^ '']. - m := self getTextMorphWithSelection. interval := m selectionInterval. text := m text. ^ text copyFrom: interval first to: interval last ! Item was removed: - ----- Method: Debugger>>getTextMorphWithSelection (in category 'tally support') ----- - getTextMorphWithSelection - "This is extremely ugly... We I need to get a reference of the code pane, which is not easily accessible" - ^self dependents - detect: [:m| (m isKindOf: PluggableTextMorph) - and: [m selectionInterval first > 1]] - ifNone: [nil]! Item was changed: ----- Method: Debugger>>tally (in category 'tally support') ----- tally + self codeTextMorph ifNotNil: [:o| o tallyIt] ifNil: [Beeper beep] - self getTextMorphWithSelection ifNotNil: [:o| o tallyIt] ifNil: [Beeper beep] ! Item was changed: ----- Method: FileList>>availableGraphicsExtent (in category 'private') ----- availableGraphicsExtent + + ^ self codeTextMorph ifNotNil: [:m | m innerBounds extent - (6@22)] + ! - self dependents do: [:each | - ((each isKindOf: PluggableTextMorph) and: [each getTextSelector == #contents]) ifTrue: [^each innerBounds extent - (6@22)]]. - ^nil! Item was changed: ----- Method: StringHolder>>codeTextMorph (in category '*Tools') ----- codeTextMorph + + ^ self someTextPaneWithSelector: #contents! - ^ self dependents - detect: [:dep | (dep isKindOf: PluggableTextMorph) - and: [dep getTextSelector == #contents]] - ifNone: []! Item was added: + ----- Method: StringHolder>>dependentTextPaneWithSelector: (in category '*Tools') ----- + dependentTextPaneWithSelector: aSelector + + ^ self dependents detect: + [:aMorph | (aMorph isKindOf: PluggableTextMorph) and: + [aMorph getTextSelector == aSelector]] + ifNone: [nil] + ! Item was added: + ----- Method: StringHolder>>someTextPaneWithSelector: (in category '*Tools') ----- + someTextPaneWithSelector: aSelector + " Try to find the text pane for aSelector in my dependents or my window. Not beautiful tho" + ^ (self dependentTextPaneWithSelector: aSelector) + ifNil: [self textPaneWithSelector: aSelector]! Item was added: + ----- Method: StringHolder>>textPaneWithSelector: (in category '*Tools') ----- + textPaneWithSelector: aSelector + "If, among my window's paneMorphs, there is a text pane defined with aSelector as its retriever, answer it, else answer nil" + + | aWindow | + ^ (aWindow := self containingWindow) ifNotNil: + [aWindow paneMorphSatisfying: + [:aMorph | (aMorph isKindOf: PluggableTextMorph) and: + [aMorph getTextSelector == aSelector]]]! |
Free forum by Nabble | Edit this page |