The Trunk: Tools-topa.554.mcz

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

The Trunk: Tools-topa.554.mcz

commits-2
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]]]!