The Trunk: Morphic-mt.788.mcz

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

The Trunk: Morphic-mt.788.mcz

commits-2
Marcel Taeumel uploaded a new version of Morphic to project The Trunk:
http://source.squeak.org/trunk/Morphic-mt.788.mcz

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

Name: Morphic-mt.788
Author: mt
Time: 30 March 2015, 8:53:20.655 am
UUID: 7c0e8d59-6df5-4142-a51f-3d9afe605a7f
Ancestors: Morphic-mt.787, Morphic-dtl.787

Text morphs and pluggable text morphs behave more selection-preserving on setting new contents now. Avoids jerky scrolling behavior when updating contents while scrolling them.

=============== Diff against Morphic-mt.787 ===============

Item was changed:
  ----- Method: PluggableTextMorph>>setText: (in category 'model access') -----
  setText: aText
- scrollBar setValue: 0.0.
  textMorph
  ifNil: [textMorph := self textMorphClass new
  contents: aText wrappedTo: self innerBounds width-6.
  textMorph setEditView: self.
  scroller addMorph: textMorph]
  ifNotNil: [textMorph newContents: aText].
  self hasUnacceptedEdits: false.
  self setScrollDeltas.!

Item was changed:
  ----- Method: PluggableTextMorph>>update: (in category 'updating') -----
  update: aSymbol
  aSymbol ifNil: [^self].
  aSymbol == #flash ifTrue: [^self flash].
+ aSymbol == getTextSelector
+ ifTrue: [
+ self setText: self getText.
+ getSelectionSelector
+ ifNotNil: [self setSelection: self getSelection].
+ ^ self].
- aSymbol == getTextSelector
- ifTrue:
- [self setText: self getText.
- ^self setSelection: self getSelection].
  aSymbol == getSelectionSelector
  ifTrue: [^self setSelection: self getSelection].
  (aSymbol == #autoSelect and: [getSelectionSelector notNil])
  ifTrue:
  [self handleEdit:
  [(textMorph editor)
  abandonChangeText; "no replacement!!"
  setSearch: model autoSelectString;
  againOrSame: true]].
  aSymbol == #clearUserEdits ifTrue: [^self hasUnacceptedEdits: false].
  aSymbol == #wantToChange
  ifTrue:
  [self canDiscardEdits ifFalse: [^self promptForCancel].
  ^self].
  aSymbol == #appendEntry
  ifTrue:
  [self handleEdit: [self appendEntry].
  ^self refreshWorld].
  aSymbol == #clearText
  ifTrue:
  [self handleEdit: [self changeText: Text new].
  ^self refreshWorld].
  aSymbol == #bs
  ifTrue:
  [self handleEdit: [self bsText].
  ^self refreshWorld].
  aSymbol == #codeChangedElsewhere
  ifTrue:
  [self hasEditingConflicts: true.
  ^self changed].
  aSymbol == #saveContents
  ifTrue:
  [^self saveContentsInFile]!

Item was changed:
  ----- Method: TextMorph>>newContents: (in category 'accessing') -----
  newContents: stringOrText
  "Accept new text contents."
+ | newText embeddedMorphs oldSelection |
- | newText embeddedMorphs |
  "If my text is all the same font, use the font for my new contents"
  newText := stringOrText isString ifTrue: [ | textSize |
  (text notNil
   and: [ (textSize := text size) > 0
     and: [ (text runLengthFor: 1) = textSize ]]) ifTrue: [ | attribs |
  attribs := text attributesAt: 1 forStyle: textStyle.
  Text string: stringOrText copy attributes: attribs.
  ]
  ifFalse: [ Text fromString: stringOrText copy ]
  ]
  ifFalse: [ stringOrText copy asText. "should be veryDeepCopy?" ].
 
  (text = newText and: [text runs = newText runs]) ifTrue: [^ self]. "No substantive change"
  text ifNotNil: [(embeddedMorphs := text embeddedMorphs)
  ifNotNil:
  [self removeAllMorphsIn: embeddedMorphs.
  embeddedMorphs do: [:m | m delete]]].
 
+ oldSelection := editor ifNotNil: [:ed | ed selectionInterval].
  text := newText.
 
  "add all morphs off the visible region; they'll be moved into the right
  place when they become visible. (this can make the scrollable area too
  large, though)"
  newText embeddedMorphs do:
  [:m |
  self addMorph: m.
  m position: -1000 @ 0].
  self releaseParagraph.
  "update the paragraph cache"
  self paragraph.
+ oldSelection ifNotNil: [:sel | self selectFrom: sel first to: sel last].
  "re-instantiate to set bounds"
  self world ifNotNil: [self world startSteppingSubmorphsOf: self]!

Item was changed:
  ----- Method: UserDialogBoxMorph class>>confirm:orCancel:at: (in category 'utilities') -----
  confirm: aString orCancel: cancelBlock at: aPointOrNil
+ ^self
+ confirm: aString
+ orCancel: cancelBlock
+ title: 'Please confirm:'
+ at: aPointOrNil!
-
- ^(self new
- title: 'Please confirm:';
- label: aString;
- addSelectedButton: '       Yes       ' translated value: true;
- addButton: '        No        ' translated  value: false;
- addCancelButton: '     Cancel     ' translated  value: nil;
- runModalIn: ActiveWorld forHand: ActiveHand at: aPointOrNil)
- ifNil: [ cancelBlock value ]!

Item was added:
+ ----- Method: UserDialogBoxMorph class>>confirm:orCancel:title:at: (in category 'utilities') -----
+ confirm: aString orCancel: cancelBlock title: titleString at: aPointOrNil
+
+ ^(self new
+ title: titleString;
+ label: aString;
+ addSelectedButton: '       Yes       ' translated value: true;
+ addButton: '        No        ' translated  value: false;
+ addCancelButton: '     Cancel     ' translated  value: nil;
+ runModalIn: ActiveWorld forHand: ActiveHand at: aPointOrNil)
+ ifNil: [ cancelBlock value ]!