Etoys Inbox: Skeleton-Richo.5.mcz

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

Etoys Inbox: Skeleton-Richo.5.mcz

commits-2
Spam detection software, running on the system "europa.mgmt.inetu.net", has
identified this incoming email as possible spam.  The original message
has been attached to this so you can view it (if it isn't spam) or label
similar future email.  If you have any questions, see
the administrator of that system for details.

Content preview:  Ricardo Moran uploaded a new version of Skeleton to project
   Etoys Inbox: http://source.squeak.org/etoysinbox/Skeleton-Richo.5.mcz ====================
   Summary ==================== Name: Skeleton-Richo.5 Author: Richo Time: 18
   October 2011, 12:50:19 pm UUID: 2d68a228-e98a-b64c-af4f-48ae0cb56a9c Ancestors:
   Skeleton-kfr.4 [...]

Content analysis details:   (6.5 points, 5.0 required)

 pts rule name              description
---- ---------------------- --------------------------------------------------
 3.5 BAYES_99               BODY: Bayesian spam probability is 99 to 100%
                            [score: 1.0000]
 0.0 MISSING_MID            Missing Message-Id: header
 1.2 INVALID_DATE           Invalid Date: header (not RFC 2822)
 1.0 DATE_IN_PAST_12_24     Date: is 12 to 24 hours before Received: date
 1.7 TVD_FUZZY_SYMBOL       BODY: TVD_FUZZY_SYMBOL
 3.8 TVD_STOCK1             BODY: TVD_STOCK1
 0.1 RDNS_NONE              Delivered to trusted network by a host with no rDNS
-4.8 AWL                    AWL: From: address is in the auto white-list



Ricardo Moran uploaded a new version of Skeleton to project Etoys Inbox:
http://source.squeak.org/etoysinbox/Skeleton-Richo.5.mcz

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

Name: Skeleton-Richo.5
Author: Richo
Time: 18 October 2011, 12:50:19 pm
UUID: 2d68a228-e98a-b64c-af4f-48ae0cb56a9c
Ancestors: Skeleton-kfr.4

Trying to fix the layout problem with the tick morph and the sheet's name.
I renamed SkSheetMorph to SkBasicSheetMorph and I removed all the code that adds page controls and draws its name. So now it is a simple spreadsheet.
I then created a new SkSheetMorph that decorates a SkBasicSheetMorph with the page controls and a title.

I also removed the reference to Connectors in Morph>>#showPointArrowFrom:to:label: because it gave a DNU that I didn't knew how to fix it, and because it doesn't seem to be really important behavior.

=============== Diff against Skeleton-kfr.4 ===============

Item was changed:
  ----- Method: Morph>>showPointArrowFrom:to:label: (in category '*skeleton-base-arrow') -----
  showPointArrowFrom: morph1 to: morph2 label: aString
  "Morph new showPointArrowFrom: (Morph new position: 0@0) to: (Morph  
  new position: 200@200) label: 'test'"
  | p1 p2 arrow label connector |
  p1 := morph1 center.
  p2 := morph2 center.
  arrow := PolygonMorph arrowPrototype.
  arrow
  borderColor: (TranslucentColor
  r: 1.0
  g: 0.3
  b: 0.0
  alpha: 0.6).
  arrow
  setVertices: (Array with: p1 with: p2).
  arrow dashedBorder: {30. 30. Color transparent. 0. -10};
  startStepping.
- (Smalltalk
- at: #NCAAConnectorMorph
- ifAbsent: [])
- ifNotNil: [connector := NCAAConnectorMorph fromMorph: morph1 toMorph: morph2.
- connector line: arrow.
- connector lock.
- label := NCLabelMorph new string: aString.
- label input: morph1.
- label color: Color red.
- label openInWorld.
- arrow := connector].
  arrow openInWorld.
+ arrow addAlarm: #delete after: 500!
- arrow addAlarm: #delete after: 500.
- label ifNotNil: [label addAlarm: #delete after: 500]
- !

Item was changed:
  ----- Method: Player>>setTotalColumns: (in category '*skeleton-spreadsheet') -----
  setTotalColumns: aNumber
+ ^ self sheetMorph area: (0@0 corner: (aNumber max: 2) @ self getTotalRows)!
- ^ self sheetMorph area: (0@0 corner: aNumber @ self getTotalRows)!

Item was changed:
  ----- Method: Player>>setTotalRows: (in category '*skeleton-spreadsheet') -----
  setTotalRows: aNumber
+ ^ self sheetMorph area: (0@0 corner: self getTotalColumns @ (aNumber max: 2))!
- ^ self sheetMorph area: (0@0 corner: self getTotalColumns @ aNumber)!

Item was added:
+ SkGridMorph subclass: #SkBasicSheetMorph
+ instanceVariableNames: 'history model selectionMorph dropZone showFormula'
+ classVariableNames: ''
+ poolDictionaries: ''
+ category: 'Skeleton-Base'!
+
+ !SkBasicSheetMorph commentStamp: 'tak 12/11/2003 19:10' prior: 0!
+ I am a presentation compornent for showing as 2-D grid.
+ The contents what I show is depended on a model.
+ I never access to a cell directly except through model because
+ a cell doesn't know where he locates. Basically, Position information is
+ only in model.
+
+ cellArea Rectangle -- the area of cells for drawing. Actual size of table is cellArea extent.
+ model SkSheet --
+ !

Item was added:
+ ----- Method: SkBasicSheetMorph class>>additionsToViewerCategories (in category 'viewer categories') -----
+ additionsToViewerCategories
+ ^ #(
+ (#spreadsheet (
+ #(command clearTable 'Deletes the contents of all cells')
+ #(command clearRow 'Deletes the contents of the current row cells' )
+ #(command clearColumn 'Deletes the contents of the current columns cells' )
+ #(slot totalRows 'Lets you change the amount of rows in the spreadsheet' Number readWrite Player getTotalRows Player setTotalRows:  )
+ #(slot totalColumns 'Lets you change the amount of columns in the spreadsheet' Number readWrite Player getTotalColumns Player setTotalColumns:  )
+ #(slot rowIndex 'Sets the current row' Number readWrite Player getRowIndex Player setRowIndex:  )
+ #(slot columnIndex 'Sets the current column' Number readWrite Player getColumnIndex Player setColumnIndex:  )
+ #(slot currentCharacters 'Lets you read and modify the characters of the current cell' String readWrite Player getCurrentCharacters Player setCurrentCharacters:  )
+ #(slot currentNumericValue 'Lets you read and modify the numeric value of the current cell' Number readWrite Player getCurrentNumericValue Player setCurrentNumericValue:  )
+ ))
+
+ (#'data i/o' (
+ #(slot writeMode 'Lets you choose a write mode (overwrite or append)' WriteMode readWrite Player getWriteMode Player setWriteMode:  )
+ #(slot csvSeparator 'Lets you choose a character to act as a separator between cells' String readWrite Player getCsvSeparator Player setCsvSeparator:  )
+ #(slot csvFileName 'Sets the name of the file to import/export data' String readWrite Player getCsvFileName Player setCsvFileName:  )
+ #(command importDataFromFile 'Reads the data from the file and loads it in the spreadsheet')
+ #(command exportDataToFile 'Writes the data from the spreadsheet into the file')
+ ))
+
+ )!

Item was added:
+ ----- Method: SkBasicSheetMorph class>>initialize (in category 'class initialization') -----
+ initialize
+ "
+ self initialize.
+ "
+ Vocabulary addStandardVocabulary: (SymbolListType new vocabularyName: #WriteMode;
+ symbols: #(#overwrite #append)).!

Item was added:
+ ----- Method: SkBasicSheetMorph class>>model: (in category 'instance creation') -----
+ model: aSkObject
+ ^ super new model: aSkObject!

Item was added:
+ ----- Method: SkBasicSheetMorph>>acceptDroppingMorph:event: (in category 'drag and drop') -----
+ acceptDroppingMorph: aMorph event: evt
+ | cellPos successed |
+ cellPos _ self screenToCell: aMorph topLeft.
+ (cellPos x < 1
+ or: [cellPos y < 1])
+ ifTrue: [self beep: 'arrow'.
+ ^ aMorph rejectDropMorphEvent: evt].
+ successed _ false.
+ successed _ (aMorph isKindOf: SkGridPartsMorph)
+ ifTrue: [self acceptRuleMorph: aMorph event: evt]
+ ifFalse: [aMorph class = PhraseTileMorph
+ ifTrue: [self acceptPhraseTileMorph: aMorph event: evt]
+ ifFalse: [aMorph class = TileMorph
+ ifTrue: [self acceptTileMorph: aMorph event: evt]]].
+ successed
+ ifTrue: [self beep: 'cassete']
+ ifFalse: [self beep: 'arrow'.
+ aMorph rejectDropMorphEvent: evt]!

Item was added:
+ ----- Method: SkBasicSheetMorph>>acceptPhraseTileMorph:event: (in category 'drag and drop') -----
+ acceptPhraseTileMorph: aMorph event: evt
+ | setter getter |
+ getter _ aMorph operatorTile operatorOrExpression.
+ setter _ ('set'
+ , (getter allButFirst: 3) , ':') asSymbol.
+ self model
+ modelAt: (self screenToCell: aMorph topLeft)
+ for: aMorph actualObject
+ getter: getter
+ setter: setter.
+ ^ true!

Item was added:
+ ----- Method: SkBasicSheetMorph>>acceptRuleMorph:event: (in category 'drag and drop') -----
+ acceptRuleMorph: aMorph event: evt
+ | cellPos card |
+ model parent adopt: aMorph model rule.
+ cellPos _ (self screenToCell: aMorph topLeft)
+ + (aMorph cellOrigin - aMorph area topLeft).
+ self model textAt: cellPos put: '=' , aMorph model codeString.
+ card _ self
+ cardMorphAt: cellPos
+ ifAbsent: [^ false].
+ card model rule = aMorph model rule
+ ifFalse: ["maybe successed"
+ ^ false].
+ aMorph halo
+ ifNotNilDo: [:halo | halo setTarget: card].
+ ^ true!

Item was added:
+ ----- Method: SkBasicSheetMorph>>acceptTileMorph:event: (in category 'drag and drop') -----
+ acceptTileMorph: aMorph event: evt
+ | object |
+ object _ aMorph actualObject.
+ self model
+ at: (self screenToCell: aMorph topLeft)
+ put: object.
+ ^ true!

Item was added:
+ ----- Method: SkBasicSheetMorph>>areaChanged (in category 'layout') -----
+ areaChanged
+ super areaChanged.
+ self
+ submorphsDo: [:m | (m isKindOf: SkGridMorph)
+ ifTrue: [m areaChanged]]!

Item was added:
+ ----- Method: SkBasicSheetMorph>>cardMorphAt:ifAbsent: (in category 'accessing') -----
+ cardMorphAt: aPoint ifAbsent: aBlock
+ ^ self submorphs
+ detect: [:m | m class = SkCardMorph
+ and: [m cellOrigin = aPoint]]
+ ifNone: aBlock!

Item was added:
+ ----- Method: SkBasicSheetMorph>>cellExtentAt: (in category 'layout') -----
+ cellExtentAt: aPoint
+ | cellExtent x y |
+ ^ (model notNil
+ and: [(cellExtent _ model findName: self cellExtentName) class == SkSheet ])
+ ifTrue: [x _ (cellExtent
+ at: aPoint x @ 1
+ ifAbsent: [SkGridMorph standardCellExtent]) x.
+ y _ (cellExtent
+ at: 1 @ aPoint y
+ ifAbsent: [SkGridMorph standardCellExtent]) y.
+ x @ y]
+ ifFalse: [SkGridMorph standardCellExtent]!

Item was added:
+ ----- Method: SkBasicSheetMorph>>cellExtentName (in category 'layout') -----
+ cellExtentName
+ ^ 'CellExtent'!

Item was added:
+ ----- Method: SkBasicSheetMorph>>copySelection (in category 'action') -----
+ copySelection
+ | text |
+ text _ Text
+ streamContents: [:aStream | self selection top
+ to: self selection bottom - 1
+ do: [:y |
+ (self selection left to: self selection right - 1)
+ do: [:x | aStream
+ nextPutAll: (model textAt: x @ y)]
+ separatedBy: [aStream nextPut: Character tab].
+ aStream nextPut: Character cr]].
+ Clipboard clipboardText: text!

Item was added:
+ ----- Method: SkBasicSheetMorph>>cut (in category 'action') -----
+ cut
+ self copySelection.
+ self selection top
+ to: self selection bottom - 1
+ do: [:y | self selection left
+ to: self selection right - 1
+ do: [:x | model textAt: x @ y put: '']]!

Item was added:
+ ----- Method: SkBasicSheetMorph>>drawCell:at: (in category 'drawing') -----
+ drawCell: aCanvas at: aPoint
+ (aPoint x isZero
+ or: [aPoint y isZero])
+ ifTrue: [^ self
+ drawLabel: aCanvas
+ string: (self labelAt: aPoint)
+ at: aPoint].
+ self flag: #TODO.
+ self
+ drawContents: ((showFormula notNil
+ and: [showFormula])
+ ifTrue: [model textAt: aPoint]
+ ifFalse: [ showFormula _ false.model at: aPoint.])
+ on: aCanvas
+ at: aPoint!

Item was added:
+ ----- Method: SkBasicSheetMorph>>drawOn: (in category 'drawing') -----
+ drawOn: aCanvas
+ super drawOn: aCanvas.
+ dropZone
+ ifNotNil: [aCanvas
+ fillRectangle: (self
+ cellAreaToScreen: (dropZone intersect: area))
+ fillStyle: (SkColorSet labelFor: model)
+ borderStyle: self borderStyle].
+ self drawDependMap: aCanvas.
+ self drawBorder: aCanvas.
+ self drawContents: aCanvas!

Item was added:
+ ----- Method: SkBasicSheetMorph>>editContents (in category 'accessing') -----
+ editContents
+ self selection ifNil: [^''].
+ ^ model
+ ifNil: ['']
+ ifNotNil: [model textAt: self selection origin]!

Item was added:
+ ----- Method: SkBasicSheetMorph>>editContents: (in category 'accessing') -----
+ editContents: aText
+ "Accept text"
+ self selection ifNil: [^self].
+ model
+ ifNotNil: [model textAt: self selection origin put: aText].
+ selectionMorph deleteEditor!

Item was added:
+ ----- Method: SkBasicSheetMorph>>fillStyle (in category 'visual properties') -----
+ fillStyle
+ ^ SkColorSet baseFor: model rule!

Item was added:
+ ----- Method: SkBasicSheetMorph>>goto: (in category 'navigation') -----
+ goto: aSkObject
+ | grid |
+ self beep: 'rice'.
+ grid _ aSkObject grid.
+ self replace: grid.
+ grid history: self.
+ ^ grid!

Item was added:
+ ----- Method: SkBasicSheetMorph>>handlesKeyboard: (in category 'event handling') -----
+ handlesKeyboard: evt
+ ^ true!

Item was added:
+ ----- Method: SkBasicSheetMorph>>handlesMouseDown: (in category 'event handling') -----
+ handlesMouseDown: evt
+ ^ true!

Item was added:
+ ----- Method: SkBasicSheetMorph>>handlesMouseOver: (in category 'event handling') -----
+ handlesMouseOver: evt
+ ^ true
+ !

Item was added:
+ ----- Method: SkBasicSheetMorph>>handlesMouseOverDragging: (in category 'event handling') -----
+ handlesMouseOverDragging: evt
+
+ ^ true
+ !

Item was added:
+ ----- Method: SkBasicSheetMorph>>height: (in category 'accessing') -----
+ height: aNumber
+ ^ self setExtentFromHalo: self width @ aNumber!

Item was added:
+ ----- Method: SkBasicSheetMorph>>history: (in category 'navigation') -----
+ history: aSkSheetMorph
+ history
+ ifNil: [history _ aSkSheetMorph]!

Item was added:
+ ----- Method: SkBasicSheetMorph>>initialize (in category 'initialization') -----
+ initialize
+ super initialize.
+ selectionMorph _ SkGridSelectionMorph new holder: self.
+ self
+ area: (1 @ 1 extent: 4 @ 4).
+ self
+ borderStyle: (RaisedBorder color: Color black width: 1).
+ self
+ fillStyle: (SolidFillStyle
+ color: (Color
+ r: 1.0
+ g: 0.935
+ b: 0.839)).
+ self cornerStyle: #rounded.
+ self selection: nil.
+ showFormula _ false!

Item was added:
+ ----- Method: SkBasicSheetMorph>>initializeToStandAlone (in category 'parts bin') -----
+ initializeToStandAlone
+ super initializeToStandAlone.
+ self model: SkSheet new attachProject.
+ self
+ area: (0 @ 0 extent: 3 @ 3)!

Item was added:
+ ----- Method: SkBasicSheetMorph>>isModelStepping (in category 'stepping and presenter') -----
+ isModelStepping
+ ^ model isStepping!

Item was added:
+ ----- Method: SkBasicSheetMorph>>isMorphicModel (in category 'classification') -----
+ isMorphicModel
+ ^true!

Item was added:
+ ----- Method: SkBasicSheetMorph>>keyStroke: (in category 'event handling') -----
+ keyStroke: evt
+ selectionMorph keyStroke: evt!

Item was added:
+ ----- Method: SkBasicSheetMorph>>model (in category 'accessing') -----
+ model
+ ^ model!

Item was added:
+ ----- Method: SkBasicSheetMorph>>model: (in category 'accessing') -----
+ model: anObject
+ model
+ ifNotNil: [model removeDependent: self].
+ anObject
+ ifNotNil: [anObject addDependent: self].
+ model _ anObject.
+ self update: #all.
+ !

Item was added:
+ ----- Method: SkBasicSheetMorph>>mouseDown: (in category 'event handling') -----
+ mouseDown: event
+ self
+ selectSelection: (self screenToCell: event position).
+ event yellowButtonPressed
+ ifTrue: [^ selectionMorph invokeMenu: event].
+ "For easy doublecilck to selection"
+ event hand waitForClicksOrDrag: selectionMorph event: event.
+ event hand mouseFocus: selectionMorph!

Item was added:
+ ----- Method: SkBasicSheetMorph>>mouseEnter: (in category 'event handling') -----
+ mouseEnter: evt
+ | hand tile |
+ hand _ evt hand.
+ hand submorphs size = 1
+ ifFalse: [^ self].
+ tile _ hand firstSubmorph renderedMorph.
+ (self wantsDroppedMorph: tile event: evt)
+ ifFalse: [^ self].
+ self
+ startStepping: #trackDropZones
+ at: Time millisecondClockValue
+ arguments: nil
+ stepTime: 20!

Item was added:
+ ----- Method: SkBasicSheetMorph>>mouseEnterDragging: (in category 'event handling') -----
+ mouseEnterDragging: evt
+ "Test button state elsewhere if at all"
+ ^ self mouseEnter: evt!

Item was added:
+ ----- Method: SkBasicSheetMorph>>mouseLeave: (in category 'event handling') -----
+ mouseLeave: evt
+ dropZone _ nil.
+ self stopSteppingSelector: #trackDropZones!

Item was added:
+ ----- Method: SkBasicSheetMorph>>mouseLeaveDragging: (in category 'event handling') -----
+ mouseLeaveDragging: evt
+ ^ self mouseLeave: evt!

Item was added:
+ ----- Method: SkBasicSheetMorph>>mouseUpTick:onItem: (in category 'event handling') -----
+ mouseUpTick: evt onItem: aMorph
+ aMorph isTicking
+ ifTrue: [model stopStepping.
+ aMorph isTicking: false]
+ ifFalse: [model startStepping.
+ aMorph isTicking: true]!

Item was added:
+ ----- Method: SkBasicSheetMorph>>openLibrary (in category 'action') -----
+ openLibrary
+ (SkObject root at: 'Library') grid openInHand!

Item was added:
+ ----- Method: SkBasicSheetMorph>>paste (in category 'action') -----
+ paste
+ | pos selection isJustACell |
+ selection _ self selection.
+ isJustACell _ selection extent = (1 @ 1).
+ pos _ selection origin.
+ Clipboard clipboardText
+ split: Character cr
+ do: [:line |
+ line
+ split: Character tab
+ do: [:field |
+ (isJustACell
+ or: [selection containsPoint: pos])
+ ifTrue: [model textAt: pos put: field].
+ pos _ pos + (1 @ 0)].
+ pos _ selection left @ (pos y + 1)]!

Item was added:
+ ----- Method: SkBasicSheetMorph>>previousPage (in category 'navigation') -----
+ previousPage
+ self beep: 'rice'.
+ ^ history
+ ifNotNil: [self replace: history]!

Item was added:
+ ----- Method: SkBasicSheetMorph>>privateRemoveMorph: (in category 'private') -----
+ privateRemoveMorph: aMorph
+ aMorph class = SkCardMorph
+ ifTrue: [self beep: 'cork'.
+ self model textAt: aMorph cellOrigin put: ''].
+ super privateRemoveMorph: aMorph!

Item was added:
+ ----- Method: SkBasicSheetMorph>>replace: (in category 'navigation') -----
+ replace: aSkSheetMorph
+ aSkSheetMorph area: self area.
+ aSkSheetMorph position: self position.
+ self owner replaceSubmorph: self by: aSkSheetMorph.
+ ^ aSkSheetMorph!

Item was added:
+ ----- Method: SkBasicSheetMorph>>selectSelection: (in category 'action') -----
+ selectSelection: aPoint
+ "Select at event position"
+ aPoint
+ ifNil: [^ self].
+ self
+ selection: (aPoint extent: 1 @ 1).
+ self changed!

Item was added:
+ ----- Method: SkBasicSheetMorph>>selection (in category 'accessing') -----
+ selection
+ ^ selectionMorph area!

Item was added:
+ ----- Method: SkBasicSheetMorph>>selection: (in category 'accessing') -----
+ selection: aRectangle
+ (submorphs indexOf: selectionMorph) = 1
+ ifFalse: [self addMorphFront: selectionMorph].
+ selectionMorph area: aRectangle!

Item was added:
+ ----- Method: SkBasicSheetMorph>>selectionMorph (in category 'accessing') -----
+ selectionMorph
+ ^ selectionMorph!

Item was added:
+ ----- Method: SkBasicSheetMorph>>setCellExtentFromHalo: (in category 'layout') -----
+ setCellExtentFromHalo: newExtent
+ | eachExtent cellExtent |
+ model
+ ifNil: [^ self].
+ cellExtent _ model
+ at: self cellExtentName
+ ifAbsent: [model
+ at: self cellExtentName
+ put: (SkSheet new parent: model)].
+ eachExtent _ newExtent // self selection extent max: 10 @ 10.
+ self selection left
+ to: self selection right - 1
+ do: [:x | cellExtent at: x @ 1 put: eachExtent].
+ self selection top
+ to: self selection bottom - 1
+ do: [:y | cellExtent at: 1 @ y put: eachExtent].
+ self areaChanged.
+ self changed!

Item was added:
+ ----- Method: SkBasicSheetMorph>>setExtentFromHalo: (in category 'layout') -----
+ setExtentFromHalo: newExtent
+ | card cardMorph direction size |
+ super setExtentFromHalo: newExtent.
+ direction := nil.
+ area height = 1
+ ifTrue:
+ [direction := #right.
+ size := area width - 1]
+ ifFalse:
+ [area width = 1
+ ifTrue:
+ [direction := #down.
+ size := area height - 1]].
+ direction ifNotNil:
+ [card := model new.
+ card direction: direction.
+ card size: size.
+ cardMorph := SkCardMorph model: card.
+ cardMorph position: self position.
+ self owner addMorph: cardMorph.
+ self halo ifNotNilDo: [:helo | helo setTarget: cardMorph].
+ self delete]!

Item was added:
+ ----- Method: SkBasicSheetMorph>>showFormula (in category 'accessing') -----
+ showFormula
+ ^ showFormula!

Item was added:
+ ----- Method: SkBasicSheetMorph>>spawn (in category 'action') -----
+ spawn
+ model inspectAt: self selection topLeft!

Item was added:
+ ----- Method: SkBasicSheetMorph>>spawn: (in category 'action') -----
+ spawn: anObject
+ self spawn!

Item was added:
+ ----- Method: SkBasicSheetMorph>>startStepping (in category 'stepping and presenter') -----
+ startStepping
+ model
+ ifNotNil: [model startStepping].
+ super startStepping.
+ !

Item was added:
+ ----- Method: SkBasicSheetMorph>>step (in category 'stepping and presenter') -----
+ step
+ self changed!

Item was added:
+ ----- Method: SkBasicSheetMorph>>toggleFormula (in category 'accessing') -----
+ toggleFormula
+ showFormula _ showFormula not!

Item was added:
+ ----- Method: SkBasicSheetMorph>>trackDropZones (in category 'event handling') -----
+ trackDropZones
+ | hand target |
+ hand _ self primaryHand.
+ ((self hasOwner: hand) not
+ and: [hand submorphCount > 0])
+ ifTrue: [target _ hand submorphs first.
+ dropZone _ (self screenToCell: target topLeft)
+ extent: ((target respondsTo: #area)
+ ifTrue: [target area extent]
+ ifFalse: [1 @ 1]).
+ (dropZone topLeft x < 1
+ or: [dropZone topLeft y < 1])
+ ifTrue: [dropZone _ nil].
+ self changed]
+ ifFalse: [dropZone _ nil.
+ self stopSteppingSelector: #trackDropZones]!

Item was added:
+ ----- Method: SkBasicSheetMorph>>tryToRenameTo: (in category 'accessing') -----
+ tryToRenameTo: aName
+ ^ model
+ ifNotNilDo: [:m | m name: aName]!

Item was added:
+ ----- Method: SkBasicSheetMorph>>upPage (in category 'navigation') -----
+ upPage
+ self beep: 'rice'.
+ ^ self goto: model up!

Item was added:
+ ----- Method: SkBasicSheetMorph>>update: (in category 'updating') -----
+ update: anObject
+ anObject = #cardList
+ ifTrue: [self updateCardList].
+ anObject = #all
+ ifTrue: [self updateCardList].
+ self changed!

Item was added:
+ ----- Method: SkBasicSheetMorph>>updateCardList (in category 'updating') -----
+ updateCardList
+ | cardList morph |
+ cardList _ model cardList: self visibleArea.
+ self
+ removeAllMorphsIn: (self submorphs
+ select: [:m | m class == SkCardMorph]).
+ cardList
+ do: [:cardInfo |
+ morph _ SkCardMorph model: cardInfo value.
+ morph holder: self.
+ self addMorph: morph.
+ morph cellOrigin: cardInfo key].
+ selectionMorph hide!

Item was added:
+ ----- Method: SkBasicSheetMorph>>veryDeepInner: (in category 'copying') -----
+ veryDeepInner: deepCopier
+ "history is not copied"
+ model _ model veryDeepCopyWith: deepCopier.
+ selectionMorph _ (selectionMorph veryDeepCopyWith: deepCopier) holder: self.
+ dropZone _ dropZone veryDeepCopyWith: deepCopier.
+ showFormula _ showFormula veryDeepCopyWith: deepCopier.
+ super veryDeepInner: deepCopier!

Item was added:
+ ----- Method: SkBasicSheetMorph>>wantsDroppedMorph:event: (in category 'drag and drop') -----
+ wantsDroppedMorph: aMorph event: anEvent
+ ^ aMorph class = PhraseTileMorph
+ or: [aMorph class = TileMorph
+ or: [aMorph isKindOf: SkGridPartsMorph]]!

Item was added:
+ ----- Method: SkBasicSheetMorph>>width: (in category 'accessing') -----
+ width: aNumber
+ ^ self setExtentFromHalo: aNumber @ self height!

Item was changed:
  ----- Method: SkCardMorph>>doubleClick: (in category 'event handling') -----
  doubleClick: evt
  | sheet |
  (holder notNil
  and: [owner = holder])
  ifTrue: [^ holder goto: model].
  self owner = World
  ifTrue: [self delete].
+ sheet _ SkBasicSheetMorph allInstances
- sheet _ SkSheetMorph allInstances
  detect: [:each | each world = World
  and: [each model = model]]
  ifNone: [model grid].
  sheet position: self position;
  openInWorld!

Item was changed:
  ----- Method: SkCardMorph>>replaceToSheet: (in category 'layout') -----
  replaceToSheet: newCellExtent
  "Create new spreadsheet for the model. And I will be deleted"
  | sheetMorph |
  (newCellExtent y > 1
  and: [newCellExtent x > 1])
+ ifTrue: [sheetMorph _ SkBasicSheetMorph new model: model.
- ifTrue: [sheetMorph _ SkSheetMorph new model: model.
  sheetMorph
  area: (0 @ 0 extent: newCellExtent).
  sheetMorph position: self position.
  self owner addMorph: sheetMorph.
  self halo
  ifNotNilDo: [:helo | helo setTarget: sheetMorph].
  ^ self delete]!

Item was changed:
  ----- Method: SkObject class>>grid (in category 'instance creation') -----
  grid
  | case grid |
+ grid _ SkBasicSheetMorph new model: (case _ self new).
- grid _ SkSheetMorph new model: (case _ self new).
  grid area: case defaultArea.
  ^ grid!

Item was changed:
  ----- Method: SkObject>>grid (in category 'initialization') -----
  grid
  | grid |
+ grid _ SkBasicSheetMorph new model: self.
- grid _ SkSheetMorph new model: self.
  grid area: self defaultArea.
  ^ grid!

Item was changed:
+ Morph subclass: #SkSheetMorph
+ instanceVariableNames: 'sheet'
- SkGridMorph subclass: #SkSheetMorph
- instanceVariableNames: 'history model selectionMorph dropZone showFormula'
  classVariableNames: ''
  poolDictionaries: ''
  category: 'Skeleton-Base'!
-
- !SkSheetMorph commentStamp: 'tak 12/11/2003 19:10' prior: 0!
- I am a presentation compornent for showing as 2-D grid.
- The contents what I show is depended on a model.
- I never access to a cell directly except through model because
- a cell doesn't know where he locates. Basically, Position information is
- only in model.
-
- cellArea Rectangle -- the area of cells for drawing. Actual size of table is cellArea extent.
- model SkSheet --
- !

Item was changed:
+ ----- Method: SkSheetMorph class>>additionsToViewerCategories (in category 'as yet unclassified') -----
- ----- Method: SkSheetMorph class>>additionsToViewerCategories (in category 'viewer categories') -----
  additionsToViewerCategories
+ ^(Smalltalk at: #SkRawSheetMorph ifAbsent: [^ #()])
+ additionsToViewerCategories!
- ^ #(
- (#spreadsheet (
- #(command clearTable 'Deletes the contents of all cells')
- #(command clearRow 'Deletes the contents of the current row cells' )
- #(command clearColumn 'Deletes the contents of the current columns cells' )
- #(slot totalRows 'Lets you change the amount of rows in the spreadsheet' Number readWrite Player getTotalRows Player setTotalRows:  )
- #(slot totalColumns 'Lets you change the amount of columns in the spreadsheet' Number readWrite Player getTotalColumns Player setTotalColumns:  )
- #(slot rowIndex 'Sets the current row' Number readWrite Player getRowIndex Player setRowIndex:  )
- #(slot columnIndex 'Sets the current column' Number readWrite Player getColumnIndex Player setColumnIndex:  )
- #(slot currentCharacters 'Lets you read and modify the characters of the current cell' String readWrite Player getCurrentCharacters Player setCurrentCharacters:  )
- #(slot currentNumericValue 'Lets you read and modify the numeric value of the current cell' Number readWrite Player getCurrentNumericValue Player setCurrentNumericValue:  )
- ))
-
- (#'data i/o' (
- #(slot writeMode 'Lets you choose a write mode (overwrite or append)' WriteMode readWrite Player getWriteMode Player setWriteMode:  )
- #(slot csvSeparator 'Lets you choose a character to act as a separator between cells' String readWrite Player getCsvSeparator Player setCsvSeparator:  )
- #(slot csvFileName 'Sets the name of the file to import/export data' String readWrite Player getCsvFileName Player setCsvFileName:  )
- #(command importDataFromFile 'Reads the data from the file and loads it in the spreadsheet')
- #(command exportDataToFile 'Writes the data from the spreadsheet into the file')
- ))
-
- )!

Item was changed:
+ ----- Method: SkSheetMorph class>>descriptionForPartsBin (in category 'as yet unclassified') -----
- ----- Method: SkSheetMorph class>>descriptionForPartsBin (in category 'parts bin') -----
  descriptionForPartsBin
+ ^ self partName: 'Spreadsheet' translated
+ categories: {'Skeleton' translated}
+ documentation: 'A spreadsheet' translated!
- ^ self partName: 'Spread Sheet'
- categories: #('Skeleton')
- documentation: 'A spread sheet'!

Item was removed:
- ----- Method: SkSheetMorph class>>formPreviousPage (in category 'constants') -----
- formPreviousPage
-  ^((ColorForm
- extent: 5@9
- depth: 1
- fromArray: #( 4026531840 3758096384 3489660928 2952790016 1879048192 2952790016 3489660928 3758096384 4026531840)
- offset: 0@0)
- colorsFromArray: #(#(0.0 0.0 0.0) #( )  ))
- " form storeString "!

Item was removed:
- ----- Method: SkSheetMorph class>>formUpPage (in category 'constants') -----
- formUpPage
-  ^((ColorForm
- extent: 9@5
- depth: 2
- fromArray: #( 2859106304 2845474816 2795929600 2326298624 1431650304)
- offset: 0@0)
- colorsFromArray: #(#(0.004 0.004 0.008) #(0.0 0.0 0.004) #( ) #(0.0 0.0 0.0)  ))
- " form storeString "!

Item was removed:
- ----- Method: SkSheetMorph class>>initialize (in category 'class initialization') -----
- initialize
- "
- self initialize.
- "
- Vocabulary addStandardVocabulary: (SymbolListType new vocabularyName: #WriteMode;
- symbols: #(#overwrite #append)).!

Item was removed:
- ----- Method: SkSheetMorph class>>model: (in category 'instance creation') -----
- model: aSkObject
- ^ super new model: aSkObject!

Item was removed:
- ----- Method: SkSheetMorph>>acceptDroppingMorph:event: (in category 'drag and drop') -----
- acceptDroppingMorph: aMorph event: evt
- | cellPos successed |
- cellPos _ self screenToCell: aMorph topLeft.
- (cellPos x < 1
- or: [cellPos y < 1])
- ifTrue: [self beep: 'arrow'.
- ^ aMorph rejectDropMorphEvent: evt].
- successed _ false.
- successed _ (aMorph isKindOf: SkGridPartsMorph)
- ifTrue: [self acceptRuleMorph: aMorph event: evt]
- ifFalse: [aMorph class = PhraseTileMorph
- ifTrue: [self acceptPhraseTileMorph: aMorph event: evt]
- ifFalse: [aMorph class = TileMorph
- ifTrue: [self acceptTileMorph: aMorph event: evt]]].
- successed
- ifTrue: [self beep: 'cassete']
- ifFalse: [self beep: 'arrow'.
- aMorph rejectDropMorphEvent: evt]!

Item was removed:
- ----- Method: SkSheetMorph>>acceptPhraseTileMorph:event: (in category 'drag and drop') -----
- acceptPhraseTileMorph: aMorph event: evt
- | setter getter |
- getter _ aMorph operatorTile operatorOrExpression.
- setter _ ('set'
- , (getter allButFirst: 3) , ':') asSymbol.
- self model
- modelAt: (self screenToCell: aMorph topLeft)
- for: aMorph actualObject
- getter: getter
- setter: setter.
- ^ true!

Item was removed:
- ----- Method: SkSheetMorph>>acceptRuleMorph:event: (in category 'drag and drop') -----
- acceptRuleMorph: aMorph event: evt
- | cellPos card |
- model parent adopt: aMorph model rule.
- cellPos _ (self screenToCell: aMorph topLeft)
- + (aMorph cellOrigin - aMorph area topLeft).
- self model textAt: cellPos put: '=' , aMorph model codeString.
- card _ self
- cardMorphAt: cellPos
- ifAbsent: [^ false].
- card model rule = aMorph model rule
- ifFalse: ["maybe successed"
- ^ false].
- aMorph halo
- ifNotNilDo: [:halo | halo setTarget: card].
- ^ true!

Item was removed:
- ----- Method: SkSheetMorph>>acceptTileMorph:event: (in category 'drag and drop') -----
- acceptTileMorph: aMorph event: evt
- | object |
- object _ aMorph actualObject.
- self model
- at: (self screenToCell: aMorph topLeft)
- put: object.
- ^ true!

Item was added:
+ ----- Method: SkSheetMorph>>addPageControls (in category 'initialization') -----
+ addPageControls
+ | panel prev up title |
+
+ panel := AlignmentMorph newRow
+ color: Color transparent;
+ cellInset: 3;
+ hResizing: #shrinkWrap;
+ vResizing: #shrinkWrap.
+ panel addMorphBack: self tickMorph.
+ prev := SketchMorph withForm: self prevButtonForm.
+ prev
+ on: #mouseDown
+ send: #previousPage
+ to: sheet.
+ prev position: 32 @ 3.
+ prev setBalloonText: 'View the previous sheet.' translated.
+ panel addMorphBack: prev.
+ up := SketchMorph withForm: self upButtonForm.
+ up
+ on: #mouseDown
+ send: #upPage
+ to: sheet.
+ up position: 44 @ 4.
+ up setBalloonText: 'View the definision or the parent rule.' translated.
+ panel addMorphBack: up.
+ title := UpdatingStringMorph new useStringFormat
+ target: self;
+ putSelector: #setNameTo:;
+ getSelector: #externalName.
+ panel addMorphBack: title.
+ self addMorph: panel!

Item was added:
+ ----- Method: SkSheetMorph>>addSheet: (in category 'initialization') -----
+ addSheet: aSheet
+ self addMorph: (sheet := aSheet).
+ self renameTo: sheet externalName!

Item was added:
+ ----- Method: SkSheetMorph>>area: (in category 'sheet delegation') -----
+ area: aRectangle
+ ^ sheet area: aRectangle
+ !

Item was removed:
- ----- Method: SkSheetMorph>>areaChanged (in category 'layout') -----
- areaChanged
- super areaChanged.
- self
- submorphsDo: [:m | (m isKindOf: SkGridMorph)
- ifTrue: [m areaChanged]]!

Item was removed:
- ----- Method: SkSheetMorph>>cardMorphAt:ifAbsent: (in category 'accessing') -----
- cardMorphAt: aPoint ifAbsent: aBlock
- ^ self submorphs
- detect: [:m | m class = SkCardMorph
- and: [m cellOrigin = aPoint]]
- ifNone: aBlock!

Item was removed:
- ----- Method: SkSheetMorph>>cellExtentAt: (in category 'layout') -----
- cellExtentAt: aPoint
- | cellExtent x y |
- ^ (model notNil
- and: [(cellExtent _ model findName: self cellExtentName) class == SkSheet ])
- ifTrue: [x _ (cellExtent
- at: aPoint x @ 1
- ifAbsent: [SkGridMorph standardCellExtent]) x.
- y _ (cellExtent
- at: 1 @ aPoint y
- ifAbsent: [SkGridMorph standardCellExtent]) y.
- x @ y]
- ifFalse: [SkGridMorph standardCellExtent]!

Item was removed:
- ----- Method: SkSheetMorph>>cellExtentName (in category 'layout') -----
- cellExtentName
- ^ 'CellExtent'!

Item was removed:
- ----- Method: SkSheetMorph>>copySelection (in category 'action') -----
- copySelection
- | text |
- text _ Text
- streamContents: [:aStream | self selection top
- to: self selection bottom - 1
- do: [:y |
- (self selection left to: self selection right - 1)
- do: [:x | aStream
- nextPutAll: (model textAt: x @ y)]
- separatedBy: [aStream nextPut: Character tab].
- aStream nextPut: Character cr]].
- Clipboard clipboardText: text!

Item was removed:
- ----- Method: SkSheetMorph>>cut (in category 'action') -----
- cut
- self copySelection.
- self selection top
- to: self selection bottom - 1
- do: [:y | self selection left
- to: self selection right - 1
- do: [:x | model textAt: x @ y put: '']]!

Item was added:
+ ----- Method: SkSheetMorph>>doesNotUnderstand: (in category 'dnu') -----
+ doesNotUnderstand: aMessage
+ "Quick hack to automagically generate missing methods"
+ self flag: #Richo.
+ (sheet respondsTo: aMessage selector)
+ ifTrue: [ | str |
+ str := aMessage createStubMethod allButLast: 24.
+ self class compile: str, '^ sheet ', str classified: #'autogenerated'.
+ ^aMessage sentTo: self.
+ ]
+ ifFalse: [^super doesNotUnderstand: aMessage]!

Item was removed:
- ----- Method: SkSheetMorph>>drawCell:at: (in category 'drawing') -----
- drawCell: aCanvas at: aPoint
- (aPoint x isZero
- or: [aPoint y isZero])
- ifTrue: [^ self
- drawLabel: aCanvas
- string: (self labelAt: aPoint)
- at: aPoint].
- self flag: #TODO.
- self
- drawContents: ((showFormula notNil
- and: [showFormula])
- ifTrue: [model textAt: aPoint]
- ifFalse: [ showFormula _ false.model at: aPoint.])
- on: aCanvas
- at: aPoint!

Item was removed:
- ----- Method: SkSheetMorph>>drawName: (in category 'drawing') -----
- drawName: aCanvas
- | name |
- name := model ruleName asString.
- model isInstance
- ifTrue: [name := name , '*'].
- aCanvas
- clipBy: self bounds
- during: [:canvas | canvas
- drawString: name
- at: self topLeft + (28 @ 6)
- font: self class titleStyle
- color: Color gray]!

Item was removed:
- ----- Method: SkSheetMorph>>drawOn: (in category 'drawing') -----
- drawOn: aCanvas
- super drawOn: aCanvas.
- self drawGrabAreaOn: aCanvas.
- dropZone
- ifNotNil: [aCanvas
- fillRectangle: (self
- cellAreaToScreen: (dropZone intersect: area))
- fillStyle: (SkColorSet labelFor: model)
- borderStyle: self borderStyle].
- self drawDependMap: aCanvas.
- self drawName: aCanvas.
- self drawBorder: aCanvas.
- self drawContents: aCanvas!

Item was removed:
- ----- Method: SkSheetMorph>>editContents (in category 'accessing') -----
- editContents
- self selection ifNil: [^''].
- ^ model
- ifNil: ['']
- ifNotNil: [model textAt: self selection origin]!

Item was removed:
- ----- Method: SkSheetMorph>>editContents: (in category 'accessing') -----
- editContents: aText
- "Accept text"
- self selection ifNil: [^self].
- model
- ifNotNil: [model textAt: self selection origin put: aText].
- selectionMorph deleteEditor!

Item was added:
+ ----- Method: SkSheetMorph>>extent: (in category 'accessing') -----
+ extent: newExtent
+
+ sheet setExtentFromHalo: (newExtent max: (165@77)) -
+ (self layoutInset + self cellInset + (0 @ self pageControls height))!

Item was removed:
- ----- Method: SkSheetMorph>>fillStyle (in category 'visual properties') -----
- fillStyle
- ^ SkColorSet baseFor: model rule!

Item was removed:
- ----- Method: SkSheetMorph>>goto: (in category 'navigation') -----
- goto: aSkObject
- | grid |
- self beep: 'rice'.
- grid _ aSkObject grid.
- self replace: grid.
- grid history: self.
- ^ grid!

Item was removed:
- ----- Method: SkSheetMorph>>handlesKeyboard: (in category 'event handling') -----
- handlesKeyboard: evt
- ^ true!

Item was removed:
- ----- Method: SkSheetMorph>>handlesMouseDown: (in category 'event handling') -----
- handlesMouseDown: evt
- ^ (self grabArea containsPoint: evt position) not!

Item was removed:
- ----- Method: SkSheetMorph>>handlesMouseOver: (in category 'event handling') -----
- handlesMouseOver: evt
- ^ true
- !

Item was removed:
- ----- Method: SkSheetMorph>>handlesMouseOverDragging: (in category 'event handling') -----
- handlesMouseOverDragging: evt
-
- ^ true
- !

Item was removed:
- ----- Method: SkSheetMorph>>height: (in category 'accessing') -----
- height: aNumber
- ^ self setExtentFromHalo: self width @ aNumber!

Item was removed:
- ----- Method: SkSheetMorph>>history: (in category 'navigation') -----
- history: aSkSheetMorph
- history
- ifNil: [history _ aSkSheetMorph]!

Item was changed:
  ----- Method: SkSheetMorph>>initialize (in category 'initialization') -----
  initialize
  super initialize.
+ self layoutPolicy: TableLayout new;
+ cellPositioning: #leftCenter;
+ cornerStyle: #rounded;
+ color: (Color r: 0.645 g: 0.645 b: 1.0);
+ borderWidth: 1;
+ borderColor: (Color r: 0.516 g: 0.516 b: 1.0);
+ listDirection: #topToBottom;
+ hResizing: #shrinkWrap;
+ vResizing: #shrinkWrap.
+ self addSheet: SkBasicSheetMorph newStandAlone;
+ addPageControls!
- self showPageControls.
- selectionMorph _ SkGridSelectionMorph new holder: self.
- self
- area: (1 @ 1 extent: 4 @ 4).
- self
- borderStyle: (RaisedBorder color: Color black width: 1).
- self
- fillStyle: (SolidFillStyle
- color: (Color
- r: 1.0
- g: 0.935
- b: 0.839)).
- self cornerStyle: #rounded.
- self selection: nil.
- showFormula _ false!

Item was removed:
- ----- Method: SkSheetMorph>>initializeToStandAlone (in category 'parts bin') -----
- initializeToStandAlone
- super initializeToStandAlone.
- self model: SkSheet new attachProject.
- self
- area: (0 @ 0 extent: 3 @ 3)!

Item was removed:
- ----- Method: SkSheetMorph>>isModelStepping (in category 'stepping and presenter') -----
- isModelStepping
- ^ model isStepping!

Item was removed:
- ----- Method: SkSheetMorph>>isMorphicModel (in category 'classification') -----
- isMorphicModel
- ^true!

Item was removed:
- ----- Method: SkSheetMorph>>keyStroke: (in category 'event handling') -----
- keyStroke: evt
- selectionMorph keyStroke: evt!

Item was changed:
+ ----- Method: SkSheetMorph>>model (in category 'sheet delegation') -----
- ----- Method: SkSheetMorph>>model (in category 'accessing') -----
  model
+ ^ sheet model!
- ^ model!

Item was removed:
- ----- Method: SkSheetMorph>>model: (in category 'accessing') -----
- model: anObject
- model
- ifNotNil: [model removeDependent: self].
- anObject
- ifNotNil: [anObject addDependent: self].
- model _ anObject.
- self update: #all.
- !

Item was removed:
- ----- Method: SkSheetMorph>>mouseDown: (in category 'event handling') -----
- mouseDown: event
- self
- selectSelection: (self screenToCell: event position).
- event yellowButtonPressed
- ifTrue: [^ selectionMorph invokeMenu: event].
- "For easy doublecilck to selection"
- event hand waitForClicksOrDrag: selectionMorph event: event.
- event hand mouseFocus: selectionMorph!

Item was removed:
- ----- Method: SkSheetMorph>>mouseEnter: (in category 'event handling') -----
- mouseEnter: evt
- | hand tile |
- hand _ evt hand.
- hand submorphs size = 1
- ifFalse: [^ self].
- tile _ hand firstSubmorph renderedMorph.
- (self wantsDroppedMorph: tile event: evt)
- ifFalse: [^ self].
- self
- startStepping: #trackDropZones
- at: Time millisecondClockValue
- arguments: nil
- stepTime: 20!

Item was removed:
- ----- Method: SkSheetMorph>>mouseEnterDragging: (in category 'event handling') -----
- mouseEnterDragging: evt
- "Test button state elsewhere if at all"
- ^ self mouseEnter: evt!

Item was removed:
- ----- Method: SkSheetMorph>>mouseLeave: (in category 'event handling') -----
- mouseLeave: evt
- dropZone _ nil.
- self stopSteppingSelector: #trackDropZones!

Item was removed:
- ----- Method: SkSheetMorph>>mouseLeaveDragging: (in category 'event handling') -----
- mouseLeaveDragging: evt
- ^ self mouseLeave: evt!

Item was removed:
- ----- Method: SkSheetMorph>>mouseUpTick:onItem: (in category 'event handling') -----
- mouseUpTick: evt onItem: aMorph
- aMorph isTicking
- ifTrue: [model stopStepping.
- aMorph isTicking: false]
- ifFalse: [model startStepping.
- aMorph isTicking: true]!

Item was removed:
- ----- Method: SkSheetMorph>>openLibrary (in category 'action') -----
- openLibrary
- (SkObject root at: 'Library') grid openInHand!

Item was added:
+ ----- Method: SkSheetMorph>>pageControls (in category 'accessing') -----
+ pageControls
+ ^ self submorphs detect: [:each | each ~~ sheet]!

Item was removed:
- ----- Method: SkSheetMorph>>paste (in category 'action') -----
- paste
- | pos selection isJustACell |
- selection _ self selection.
- isJustACell _ selection extent = (1 @ 1).
- pos _ selection origin.
- Clipboard clipboardText
- split: Character cr
- do: [:line |
- line
- split: Character tab
- do: [:field |
- (isJustACell
- or: [selection containsPoint: pos])
- ifTrue: [model textAt: pos put: field].
- pos _ pos + (1 @ 0)].
- pos _ selection left @ (pos y + 1)]!

Item was added:
+ ----- Method: SkSheetMorph>>prevButtonForm (in category 'accessing') -----
+ prevButtonForm
+ ^(Form
+ extent: 9@16
+ depth: 16
+ fromArray: #( 0 0 0 0 0 0 0 0 0 831258624 0 0 0 12684 831258624 0 0 0 831279775 831258624 0 0 12684 1386173087 831258624 0 0 831279775 1386173087 831258624 0 12684 1386173087 1386173087 831258624 0 831279775 1386173087 1386173087 831258624 12684 1386173087 1386173087 1386173087 831258624 0 831279775 1386173087 1386173087 831258624 0 12684 1386173087 1386173087 831258624 0 0 831279775 1386173087 831258624 0 0 12684 1386173087 831258624 0 0 0 831279775 831258624 0 0 0 12684 831258624 0 0 0 0 831258624)
+ offset: 522@183)!

Item was removed:
- ----- Method: SkSheetMorph>>previousPage (in category 'navigation') -----
- previousPage
- self beep: 'rice'.
- ^ history
- ifNotNil: [self replace: history]!

Item was removed:
- ----- Method: SkSheetMorph>>privateRemoveMorph: (in category 'private') -----
- privateRemoveMorph: aMorph
- aMorph class = SkCardMorph
- ifTrue: [self beep: 'cork'.
- self model textAt: aMorph cellOrigin put: ''].
- super privateRemoveMorph: aMorph!

Item was removed:
- ----- Method: SkSheetMorph>>replace: (in category 'navigation') -----
- replace: aSkSheetMorph
- aSkSheetMorph area: self area.
- aSkSheetMorph position: self position.
- self delete.
- aSkSheetMorph openInWorld.
- ^ aSkSheetMorph!

Item was added:
+ ----- Method: SkSheetMorph>>replaceSubmorph:by: (in category 'submorphs-add/remove') -----
+ replaceSubmorph: oldMorph by: newMorph
+ "Update page controls if the sheet gets replaced."
+ ^ oldMorph == sheet
+ ifTrue: [self submorphsDo: [:each | each delete];
+ addSheet: newMorph;
+ addPageControls]
+ ifFalse: [super replaceSubmorph: oldMorph by: newMorph]!

Item was changed:
+ ----- Method: SkSheetMorph>>selectSelection: (in category 'sheet delegation') -----
- ----- Method: SkSheetMorph>>selectSelection: (in category 'action') -----
  selectSelection: aPoint
+ ^ sheet selectSelection: aPoint
+ !
- "Select at event position"
- aPoint
- ifNil: [^ self].
- self
- selection: (aPoint extent: 1 @ 1).
- self changed!

Item was changed:
+ ----- Method: SkSheetMorph>>selection (in category 'sheet delegation') -----
- ----- Method: SkSheetMorph>>selection (in category 'accessing') -----
  selection
+ ^ sheet selection
+ !
- ^ selectionMorph area!

Item was removed:
- ----- Method: SkSheetMorph>>selection: (in category 'accessing') -----
- selection: aRectangle
- submorphs first == selectionMorph
- ifFalse: [self addMorphFront: selectionMorph].
- selectionMorph area: aRectangle!

Item was removed:
- ----- Method: SkSheetMorph>>selectionMorph (in category 'accessing') -----
- selectionMorph
- ^ selectionMorph!

Item was removed:
- ----- Method: SkSheetMorph>>setCellExtentFromHalo: (in category 'layout') -----
- setCellExtentFromHalo: newExtent
- | eachExtent cellExtent |
- model
- ifNil: [^ self].
- cellExtent _ model
- at: self cellExtentName
- ifAbsent: [model
- at: self cellExtentName
- put: (SkSheet new parent: model)].
- eachExtent _ newExtent // self selection extent max: 10 @ 10.
- self selection left
- to: self selection right - 1
- do: [:x | cellExtent at: x @ 1 put: eachExtent].
- self selection top
- to: self selection bottom - 1
- do: [:y | cellExtent at: 1 @ y put: eachExtent].
- self areaChanged.
- self changed!

Item was removed:
- ----- Method: SkSheetMorph>>setExtentFromHalo: (in category 'layout') -----
- setExtentFromHalo: newExtent
- | card cardMorph direction size |
- super setExtentFromHalo: newExtent.
- direction := nil.
- area height = 1
- ifTrue:
- [direction := #right.
- size := area width - 1]
- ifFalse:
- [area width = 1
- ifTrue:
- [direction := #down.
- size := area height - 1]].
- direction ifNotNil:
- [card := model new.
- card direction: direction.
- card size: size.
- cardMorph := SkCardMorph model: card.
- cardMorph position: self position.
- self owner addMorph: cardMorph.
- self halo ifNotNilDo: [:helo | helo setTarget: cardMorph].
- self delete]!

Item was added:
+ ----- Method: SkSheetMorph>>setNameTo: (in category 'renaming') -----
+ setNameTo: aName
+ sheet tryToRenameTo: aName.
+ super setNameTo: aName!

Item was removed:
- ----- Method: SkSheetMorph>>showFormula (in category 'accessing') -----
- showFormula
- ^ showFormula!

Item was removed:
- ----- Method: SkSheetMorph>>showPageControls (in category 'initialization') -----
- showPageControls
- | panel prev up |
- panel _ Morph new extent: 80@20; color: Color transparent.
- panel
- on: #mouseDown
- send: #yourself
- to: self.
- panel addMorph: self tickMorph.
- prev _ (PolygonMorph new setVertices: {0 @ 7. 7 @ 0. 7 @ 14}) borderWidth: 1;
- borderColor: Color darkGray;
- color: Color transparent.
- prev
- on: #mouseDown
- send: #previousPage
- to: self.
- prev position: 24 @ 3.
- prev setBalloonText: 'View the previous sheet.' translated.
- panel addMorph: prev.
- up _ prev copy heading: 90.
- up
- on: #mouseDown
- send: #upPage
- to: self.
- up position: 36 @ 4.
- up setBalloonText: 'View the definision or the parent rule.' translated.
-
- panel addMorph: up.
- self addMorph: panel!

Item was removed:
- ----- Method: SkSheetMorph>>spawn (in category 'action') -----
- spawn
- model inspectAt: self selection topLeft!

Item was removed:
- ----- Method: SkSheetMorph>>spawn: (in category 'action') -----
- spawn: anObject
- self spawn!

Item was removed:
- ----- Method: SkSheetMorph>>startStepping (in category 'stepping and presenter') -----
- startStepping
- model
- ifNotNil: [model startStepping].
- super startStepping.
- !

Item was changed:
+ ----- Method: SkSheetMorph>>step (in category 'stepping') -----
- ----- Method: SkSheetMorph>>step (in category 'stepping and presenter') -----
  step
+ sheet step!
- self changed!

Item was changed:
+ ----- Method: SkSheetMorph>>tickMorph (in category 'accessing') -----
- ----- Method: SkSheetMorph>>tickMorph (in category 'initialization') -----
  tickMorph
  | tick |
  tick _ SkPluggableTickMorph new.
+ tick on: sheet isTickingSel: #isModelStepping.
- tick position: self position + 1.
- tick on: self isTickingSel: #isModelStepping.
  tick
  on: #mouseUp
  send: #mouseUpTick:onItem:
+ to: sheet.
- to: self.
  tick stepTime: 500.
  tick startStepping.
  tick setBalloonText: 'Press to toggle ticking state.' translated.
  ^ tick!

Item was removed:
- ----- Method: SkSheetMorph>>toggleFormula (in category 'accessing') -----
- toggleFormula
- showFormula _ showFormula not!

Item was removed:
- ----- Method: SkSheetMorph>>trackDropZones (in category 'event handling') -----
- trackDropZones
- | hand target |
- hand _ self primaryHand.
- ((self hasOwner: hand) not
- and: [hand submorphCount > 0])
- ifTrue: [target _ hand submorphs first.
- dropZone _ (self screenToCell: target topLeft)
- extent: ((target respondsTo: #area)
- ifTrue: [target area extent]
- ifFalse: [1 @ 1]).
- (dropZone topLeft x < 1
- or: [dropZone topLeft y < 1])
- ifTrue: [dropZone _ nil].
- self changed]
- ifFalse: [dropZone _ nil.
- self stopSteppingSelector: #trackDropZones]!

Item was removed:
- ----- Method: SkSheetMorph>>tryToRenameTo: (in category 'accessing') -----
- tryToRenameTo: aName
- ^ model
- ifNotNilDo: [:m | m name: aName]!

Item was added:
+ ----- Method: SkSheetMorph>>upButtonForm (in category 'accessing') -----
+ upButtonForm
+ ^ self prevButtonForm copy rotateBy: 90!

Item was removed:
- ----- Method: SkSheetMorph>>upPage (in category 'navigation') -----
- upPage
- self beep: 'rice'.
- ^ self goto: model up!

Item was removed:
- ----- Method: SkSheetMorph>>update: (in category 'updating') -----
- update: anObject
- anObject = #cardList
- ifTrue: [self updateCardList].
- anObject = #all
- ifTrue: [self updateCardList].
- self changed!

Item was removed:
- ----- Method: SkSheetMorph>>updateCardList (in category 'updating') -----
- updateCardList
- | cardList morph |
- cardList _ model cardList: self visibleArea.
- self
- removeAllMorphsIn: (self submorphs
- select: [:m | m class == SkCardMorph]).
- cardList
- do: [:cardInfo |
- morph _ SkCardMorph model: cardInfo value.
- morph holder: self.
- self addMorph: morph.
- morph cellOrigin: cardInfo key].
- selectionMorph hide!

Item was removed:
- ----- Method: SkSheetMorph>>veryDeepInner: (in category 'copying') -----
- veryDeepInner: deepCopier
- "history is not copied"
- model _ model veryDeepCopyWith: deepCopier.
- selectionMorph _ (selectionMorph veryDeepCopyWith: deepCopier) holder: self.
- dropZone _ dropZone veryDeepCopyWith: deepCopier.
- showFormula _ showFormula veryDeepCopyWith: deepCopier.
- super veryDeepInner: deepCopier!

Item was added:
+ ----- Method: SkSheetMorph>>visibleArea (in category 'sheet delegation') -----
+ visibleArea
+ ^ sheet visibleArea
+ !

Item was removed:
- ----- Method: SkSheetMorph>>wantsDroppedMorph:event: (in category 'drag and drop') -----
- wantsDroppedMorph: aMorph event: anEvent
- ^ aMorph class = PhraseTileMorph
- or: [aMorph class = TileMorph
- or: [aMorph isKindOf: SkGridPartsMorph]]!

Item was removed:
- ----- Method: SkSheetMorph>>width: (in category 'accessing') -----
- width: aNumber
- ^ self setExtentFromHalo: aNumber @ self height!

Item was changed:
  ----- Method: SkValueCell>>slotName (in category 'accessing') -----
  slotName
  "See Player>>tearOffFancyWatcherFor:"
  | info watcherWording anInterface |
  info _ model slotInfoForGetter: getter.
  info
  ifNil: [anInterface _ Vocabulary eToyVocabulary
  methodInterfaceAt: getter
  ifAbsent: [].
+ watcherWording _ anInterface wording]
- watcherWording _ anInterface elementWording]
  ifNotNil: [watcherWording _ Utilities inherentSelectorForGetter: getter].
  ^ model tileReferringToSelf bePossessive labelMorph contents , ' ' , watcherWording!


_______________________________________________
etoys-dev mailing list
[hidden email]
http://lists.squeakland.org/mailman/listinfo/etoys-dev
Reply | Threaded
Open this post in threaded view
|

Re: Etoys Inbox: Skeleton-Richo.5.mcz

Ricardo Moran
Hi, it seems my commit notifications are being marked as spam :S

But anyway, I'm glad to know you took the time to clean the Skeleton project. It's one step closer to inclusion :)
I tried to fix the layout problem that Karl mentioned before and this is my first shot. I think the result is nice, although I had to create a new morph subclass (which I don't really like much).

Cheers,
Richo


On Tue, Oct 18, 2011 at 12:50 PM, <[hidden email]> wrote:
Spam detection software, running on the system "europa.mgmt.inetu.net", has
identified this incoming email as possible spam.  The original message
has been attached to this so you can view it (if it isn't spam) or label
similar future email.  If you have any questions, see
the administrator of that system for details.

Content preview:  Ricardo Moran uploaded a new version of Skeleton to project
  Etoys Inbox: http://source.squeak.org/etoysinbox/Skeleton-Richo.5.mcz ====================
  Summary ==================== Name: Skeleton-Richo.5 Author: Richo Time: 18
  October 2011, 12:50:19 pm UUID: 2d68a228-e98a-b64c-af4f-48ae0cb56a9c Ancestors:
  Skeleton-kfr.4 [...]

Content analysis details:   (6.5 points, 5.0 required)

 pts rule name              description
---- ---------------------- --------------------------------------------------
 3.5 BAYES_99               BODY: Bayesian spam probability is 99 to 100%
                           [score: 1.0000]
 0.0 MISSING_MID            Missing Message-Id: header
 1.2 INVALID_DATE           Invalid Date: header (not RFC 2822)
 1.0 DATE_IN_PAST_12_24     Date: is 12 to 24 hours before Received: date
 1.7 TVD_FUZZY_SYMBOL       BODY: TVD_FUZZY_SYMBOL
 3.8 TVD_STOCK1             BODY: TVD_STOCK1
 0.1 RDNS_NONE              Delivered to trusted network by a host with no rDNS
-4.8 AWL                    AWL: From: address is in the auto white-list




---------- Forwarded message ----------
From: [hidden email]
To: [hidden email]
Date: Tue, 18 Oct 2011 15:50:20.809 0000
Subject: Etoys Inbox: Skeleton-Richo.5.mcz
Ricardo Moran uploaded a new version of Skeleton to project Etoys Inbox:
http://source.squeak.org/etoysinbox/Skeleton-Richo.5.mcz

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

Name: Skeleton-Richo.5
Author: Richo
Time: 18 October 2011, 12:50:19 pm
UUID: 2d68a228-e98a-b64c-af4f-48ae0cb56a9c
Ancestors: Skeleton-kfr.4

Trying to fix the layout problem with the tick morph and the sheet's name.
I renamed SkSheetMorph to SkBasicSheetMorph and I removed all the code that adds page controls and draws its name. So now it is a simple spreadsheet.
I then created a new SkSheetMorph that decorates a SkBasicSheetMorph with the page controls and a title.

I also removed the reference to Connectors in Morph>>#showPointArrowFrom:to:label: because it gave a DNU that I didn't knew how to fix it, and because it doesn't seem to be really important behavior.

=============== Diff against Skeleton-kfr.4 ===============

Item was changed:
 ----- Method: Morph>>showPointArrowFrom:to:label: (in category '*skeleton-base-arrow') -----
 showPointArrowFrom: morph1 to: morph2 label: aString
       "Morph new showPointArrowFrom: (Morph new position: 0@0) to: (Morph
       new position: 200@200) label: 'test'"
       | p1 p2 arrow label connector |
       p1 := morph1 center.
       p2 := morph2 center.
       arrow := PolygonMorph arrowPrototype.
       arrow
               borderColor: (TranslucentColor
                               r: 1.0
                               g: 0.3
                               b: 0.0
                               alpha: 0.6).
       arrow
               setVertices: (Array with: p1 with: p2).
       arrow dashedBorder: {30. 30. Color transparent. 0. -10};
                startStepping.
-       (Smalltalk
-               at: #NCAAConnectorMorph
-               ifAbsent: [])
-               ifNotNil: [connector := NCAAConnectorMorph fromMorph: morph1 toMorph: morph2.
-                       connector line: arrow.
-                       connector lock.
-                       label := NCLabelMorph new string: aString.
-                       label input: morph1.
-                       label color: Color red.
-                       label openInWorld.
-                       arrow := connector].
       arrow openInWorld.
+       arrow addAlarm: #delete after: 500!
-       arrow addAlarm: #delete after: 500.
-       label ifNotNil: [label addAlarm: #delete after: 500]
- !

Item was changed:
 ----- Method: Player>>setTotalColumns: (in category '*skeleton-spreadsheet') -----
 setTotalColumns: aNumber
+       ^ self sheetMorph area: (0@0 corner: (aNumber max: 2) @ self getTotalRows)!
-       ^ self sheetMorph area: (0@0 corner: aNumber @ self getTotalRows)!

Item was changed:
 ----- Method: Player>>setTotalRows: (in category '*skeleton-spreadsheet') -----
 setTotalRows: aNumber
+       ^ self sheetMorph area: (0@0 corner: self getTotalColumns @ (aNumber max: 2))!
-       ^ self sheetMorph area: (0@0 corner: self getTotalColumns @ aNumber)!

Item was added:
+ SkGridMorph subclass: #SkBasicSheetMorph
+       instanceVariableNames: 'history model selectionMorph dropZone showFormula'
+       classVariableNames: ''
+       poolDictionaries: ''
+       category: 'Skeleton-Base'!
+
+ !SkBasicSheetMorph commentStamp: 'tak 12/11/2003 19:10' prior: 0!
+ I am a presentation compornent for showing as 2-D grid.
+ The contents what I show is depended on a model.
+ I never access to a cell directly except through model because
+ a cell doesn't know where he locates. Basically, Position information is
+ only in model.
+
+ cellArea              Rectangle -- the area of cells for drawing. Actual size of table is cellArea extent.
+ model         SkSheet --
+ !

Item was added:
+ ----- Method: SkBasicSheetMorph class>>additionsToViewerCategories (in category 'viewer categories') -----
+ additionsToViewerCategories
+ ^ #(
+ (#spreadsheet (
+ #(command clearTable 'Deletes the contents of all cells')
+ #(command clearRow 'Deletes the contents of the current row cells' )
+ #(command clearColumn 'Deletes the contents of the current columns cells' )
+ #(slot totalRows 'Lets you change the amount of rows in the spreadsheet' Number readWrite Player getTotalRows Player setTotalRows:  )
+ #(slot totalColumns 'Lets you change the amount of columns in the spreadsheet' Number readWrite Player getTotalColumns Player setTotalColumns:  )
+ #(slot rowIndex 'Sets the current row' Number readWrite Player getRowIndex Player setRowIndex:  )
+ #(slot columnIndex 'Sets the current column' Number readWrite Player getColumnIndex Player setColumnIndex:  )
+ #(slot currentCharacters 'Lets you read and modify the characters of the current cell' String readWrite Player getCurrentCharacters Player setCurrentCharacters:  )
+ #(slot currentNumericValue 'Lets you read and modify the numeric value of the current cell' Number readWrite Player getCurrentNumericValue Player setCurrentNumericValue:  )
+ ))
+
+ (#'data i/o' (
+ #(slot writeMode 'Lets you choose a write mode (overwrite or append)' WriteMode readWrite Player getWriteMode Player setWriteMode:  )
+ #(slot csvSeparator 'Lets you choose a character to act as a separator between cells' String readWrite Player getCsvSeparator Player setCsvSeparator:  )
+ #(slot csvFileName 'Sets the name of the file to import/export data' String readWrite Player getCsvFileName Player setCsvFileName:  )
+ #(command importDataFromFile 'Reads the data from the file and loads it in the spreadsheet')
+ #(command exportDataToFile 'Writes the data from the spreadsheet into the file')
+ ))
+
+ )!

Item was added:
+ ----- Method: SkBasicSheetMorph class>>initialize (in category 'class initialization') -----
+ initialize
+       "
+       self initialize.
+       "
+       Vocabulary addStandardVocabulary: (SymbolListType new vocabularyName: #WriteMode;
+                        symbols: #(#overwrite #append)).!

Item was added:
+ ----- Method: SkBasicSheetMorph class>>model: (in category 'instance creation') -----
+ model: aSkObject
+       ^ super new model: aSkObject!

Item was added:
+ ----- Method: SkBasicSheetMorph>>acceptDroppingMorph:event: (in category 'drag and drop') -----
+ acceptDroppingMorph: aMorph event: evt
+       | cellPos successed |
+       cellPos _ self screenToCell: aMorph topLeft.
+       (cellPos x < 1
+                       or: [cellPos y < 1])
+               ifTrue: [self beep: 'arrow'.
+                       ^ aMorph rejectDropMorphEvent: evt].
+       successed _ false.
+       successed _ (aMorph isKindOf: SkGridPartsMorph)
+                               ifTrue: [self acceptRuleMorph: aMorph event: evt]
+                               ifFalse: [aMorph class = PhraseTileMorph
+                                               ifTrue: [self acceptPhraseTileMorph: aMorph event: evt]
+                                               ifFalse: [aMorph class = TileMorph
+                                                               ifTrue: [self acceptTileMorph: aMorph event: evt]]].
+       successed
+               ifTrue: [self beep: 'cassete']
+               ifFalse: [self beep: 'arrow'.
+                       aMorph rejectDropMorphEvent: evt]!

Item was added:
+ ----- Method: SkBasicSheetMorph>>acceptPhraseTileMorph:event: (in category 'drag and drop') -----
+ acceptPhraseTileMorph: aMorph event: evt
+       | setter getter |
+       getter _ aMorph operatorTile operatorOrExpression.
+       setter _ ('set'
+                               , (getter allButFirst: 3) , ':') asSymbol.
+       self model
+               modelAt: (self screenToCell: aMorph topLeft)
+               for: aMorph actualObject
+               getter: getter
+               setter: setter.
+       ^ true!

Item was added:
+ ----- Method: SkBasicSheetMorph>>acceptRuleMorph:event: (in category 'drag and drop') -----
+ acceptRuleMorph: aMorph event: evt
+       | cellPos card |
+       model parent adopt: aMorph model rule.
+       cellPos _ (self screenToCell: aMorph topLeft)
+                               + (aMorph cellOrigin - aMorph area topLeft).
+       self model textAt: cellPos put: '=' , aMorph model codeString.
+       card _ self
+                               cardMorphAt: cellPos
+                               ifAbsent: [^ false].
+       card model rule = aMorph model rule
+               ifFalse: ["maybe successed"
+                       ^ false].
+       aMorph halo
+               ifNotNilDo: [:halo | halo setTarget: card].
+       ^ true!

Item was added:
+ ----- Method: SkBasicSheetMorph>>acceptTileMorph:event: (in category 'drag and drop') -----
+ acceptTileMorph: aMorph event: evt
+       | object |
+       object _ aMorph actualObject.
+       self model
+               at: (self screenToCell: aMorph topLeft)
+               put: object.
+       ^ true!

Item was added:
+ ----- Method: SkBasicSheetMorph>>areaChanged (in category 'layout') -----
+ areaChanged
+       super areaChanged.
+       self
+               submorphsDo: [:m | (m isKindOf: SkGridMorph)
+                               ifTrue: [m areaChanged]]!

Item was added:
+ ----- Method: SkBasicSheetMorph>>cardMorphAt:ifAbsent: (in category 'accessing') -----
+ cardMorphAt: aPoint ifAbsent: aBlock
+       ^ self submorphs
+               detect: [:m | m class = SkCardMorph
+                               and: [m cellOrigin = aPoint]]
+               ifNone: aBlock!

Item was added:
+ ----- Method: SkBasicSheetMorph>>cellExtentAt: (in category 'layout') -----
+ cellExtentAt: aPoint
+       | cellExtent x y |
+       ^ (model notNil
+                       and: [(cellExtent _ model findName: self cellExtentName) class == SkSheet ])
+               ifTrue: [x _ (cellExtent
+                                               at: aPoint x @ 1
+                                               ifAbsent: [SkGridMorph standardCellExtent]) x.
+                       y _ (cellExtent
+                                               at: 1 @ aPoint y
+                                               ifAbsent: [SkGridMorph standardCellExtent]) y.
+                       x @ y]
+               ifFalse: [SkGridMorph standardCellExtent]!

Item was added:
+ ----- Method: SkBasicSheetMorph>>cellExtentName (in category 'layout') -----
+ cellExtentName
+       ^ 'CellExtent'!

Item was added:
+ ----- Method: SkBasicSheetMorph>>copySelection (in category 'action') -----
+ copySelection
+       | text |
+       text _ Text
+                               streamContents: [:aStream | self selection top
+                                               to: self selection bottom - 1
+                                               do: [:y |
+                                                       (self selection left to: self selection right - 1)
+                                                               do: [:x | aStream
+                                                                               nextPutAll: (model textAt: x @ y)]
+                                                               separatedBy: [aStream nextPut: Character tab].
+                                                       aStream nextPut: Character cr]].
+       Clipboard clipboardText: text!

Item was added:
+ ----- Method: SkBasicSheetMorph>>cut (in category 'action') -----
+ cut
+       self copySelection.
+       self selection top
+               to: self selection bottom - 1
+               do: [:y | self selection left
+                               to: self selection right - 1
+                               do: [:x | model textAt: x @ y put: '']]!

Item was added:
+ ----- Method: SkBasicSheetMorph>>drawCell:at: (in category 'drawing') -----
+ drawCell: aCanvas at: aPoint
+       (aPoint x isZero
+                       or: [aPoint y isZero])
+               ifTrue: [^ self
+                               drawLabel: aCanvas
+                               string: (self labelAt: aPoint)
+                               at: aPoint].
+       self flag: #TODO.
+       self
+               drawContents: ((showFormula notNil
+                                       and: [showFormula])
+                               ifTrue: [model textAt: aPoint]
+                               ifFalse: [ showFormula _ false.model at: aPoint.])
+               on: aCanvas
+               at: aPoint!

Item was added:
+ ----- Method: SkBasicSheetMorph>>drawOn: (in category 'drawing') -----
+ drawOn: aCanvas
+       super drawOn: aCanvas.
+       dropZone
+               ifNotNil: [aCanvas
+                               fillRectangle: (self
+                                               cellAreaToScreen: (dropZone intersect: area))
+                               fillStyle: (SkColorSet labelFor: model)
+                               borderStyle: self borderStyle].
+       self drawDependMap: aCanvas.
+       self drawBorder: aCanvas.
+       self drawContents: aCanvas!

Item was added:
+ ----- Method: SkBasicSheetMorph>>editContents (in category 'accessing') -----
+ editContents
+ self selection ifNil: [^''].
+       ^ model
+               ifNil: ['']
+               ifNotNil: [model textAt: self selection origin]!

Item was added:
+ ----- Method: SkBasicSheetMorph>>editContents: (in category 'accessing') -----
+ editContents: aText
+       "Accept text"
+       self selection ifNil: [^self].
+       model
+               ifNotNil: [model textAt: self selection origin put: aText].
+       selectionMorph deleteEditor!

Item was added:
+ ----- Method: SkBasicSheetMorph>>fillStyle (in category 'visual properties') -----
+ fillStyle
+       ^ SkColorSet baseFor: model rule!

Item was added:
+ ----- Method: SkBasicSheetMorph>>goto: (in category 'navigation') -----
+ goto: aSkObject
+       | grid |
+       self beep: 'rice'.
+       grid _ aSkObject grid.
+       self replace: grid.
+       grid history: self.
+       ^ grid!

Item was added:
+ ----- Method: SkBasicSheetMorph>>handlesKeyboard: (in category 'event handling') -----
+ handlesKeyboard: evt
+       ^ true!

Item was added:
+ ----- Method: SkBasicSheetMorph>>handlesMouseDown: (in category 'event handling') -----
+ handlesMouseDown: evt
+       ^ true!

Item was added:
+ ----- Method: SkBasicSheetMorph>>handlesMouseOver: (in category 'event handling') -----
+ handlesMouseOver: evt
+       ^ true
+ !

Item was added:
+ ----- Method: SkBasicSheetMorph>>handlesMouseOverDragging: (in category 'event handling') -----
+ handlesMouseOverDragging: evt
+
+       ^ true
+ !

Item was added:
+ ----- Method: SkBasicSheetMorph>>height: (in category 'accessing') -----
+ height: aNumber
+       ^ self setExtentFromHalo: self width @ aNumber!

Item was added:
+ ----- Method: SkBasicSheetMorph>>history: (in category 'navigation') -----
+ history: aSkSheetMorph
+       history
+               ifNil: [history _ aSkSheetMorph]!

Item was added:
+ ----- Method: SkBasicSheetMorph>>initialize (in category 'initialization') -----
+ initialize
+       super initialize.
+       selectionMorph _ SkGridSelectionMorph new holder: self.
+       self
+               area: (1 @ 1 extent: 4 @ 4).
+       self
+               borderStyle: (RaisedBorder color: Color black width: 1).
+       self
+               fillStyle: (SolidFillStyle
+                               color: (Color
+                                               r: 1.0
+                                               g: 0.935
+                                               b: 0.839)).
+       self cornerStyle: #rounded.
+       self selection: nil.
+       showFormula _ false!

Item was added:
+ ----- Method: SkBasicSheetMorph>>initializeToStandAlone (in category 'parts bin') -----
+ initializeToStandAlone
+       super initializeToStandAlone.
+       self model: SkSheet new attachProject.
+       self
+               area: (0 @ 0 extent: 3 @ 3)!

Item was added:
+ ----- Method: SkBasicSheetMorph>>isModelStepping (in category 'stepping and presenter') -----
+ isModelStepping
+       ^ model isStepping!

Item was added:
+ ----- Method: SkBasicSheetMorph>>isMorphicModel (in category 'classification') -----
+ isMorphicModel
+       ^true!

Item was added:
+ ----- Method: SkBasicSheetMorph>>keyStroke: (in category 'event handling') -----
+ keyStroke: evt
+       selectionMorph keyStroke: evt!

Item was added:
+ ----- Method: SkBasicSheetMorph>>model (in category 'accessing') -----
+ model
+       ^ model!

Item was added:
+ ----- Method: SkBasicSheetMorph>>model: (in category 'accessing') -----
+ model: anObject
+       model
+               ifNotNil: [model removeDependent: self].
+       anObject
+               ifNotNil: [anObject addDependent: self].
+       model _ anObject.
+       self update: #all.
+ !

Item was added:
+ ----- Method: SkBasicSheetMorph>>mouseDown: (in category 'event handling') -----
+ mouseDown: event
+       self
+               selectSelection: (self screenToCell: event position).
+       event yellowButtonPressed
+               ifTrue: [^ selectionMorph invokeMenu: event].
+       "For easy doublecilck to selection"
+       event hand waitForClicksOrDrag: selectionMorph event: event.
+       event hand mouseFocus: selectionMorph!

Item was added:
+ ----- Method: SkBasicSheetMorph>>mouseEnter: (in category 'event handling') -----
+ mouseEnter: evt
+       | hand tile |
+       hand _ evt hand.
+       hand submorphs size = 1
+               ifFalse: [^ self].
+       tile _ hand firstSubmorph renderedMorph.
+       (self wantsDroppedMorph: tile event: evt)
+               ifFalse: [^ self].
+       self
+               startStepping: #trackDropZones
+               at: Time millisecondClockValue
+               arguments: nil
+               stepTime: 20!

Item was added:
+ ----- Method: SkBasicSheetMorph>>mouseEnterDragging: (in category 'event handling') -----
+ mouseEnterDragging: evt
+       "Test button state elsewhere if at all"
+       ^ self mouseEnter: evt!

Item was added:
+ ----- Method: SkBasicSheetMorph>>mouseLeave: (in category 'event handling') -----
+ mouseLeave: evt
+       dropZone _ nil.
+       self stopSteppingSelector: #trackDropZones!

Item was added:
+ ----- Method: SkBasicSheetMorph>>mouseLeaveDragging: (in category 'event handling') -----
+ mouseLeaveDragging: evt
+       ^ self mouseLeave: evt!

Item was added:
+ ----- Method: SkBasicSheetMorph>>mouseUpTick:onItem: (in category 'event handling') -----
+ mouseUpTick: evt onItem: aMorph
+       aMorph isTicking
+               ifTrue: [model stopStepping.
+                       aMorph isTicking: false]
+               ifFalse: [model startStepping.
+                       aMorph isTicking: true]!

Item was added:
+ ----- Method: SkBasicSheetMorph>>openLibrary (in category 'action') -----
+ openLibrary
+       (SkObject root at: 'Library') grid openInHand!

Item was added:
+ ----- Method: SkBasicSheetMorph>>paste (in category 'action') -----
+ paste
+       | pos selection isJustACell |
+       selection _ self selection.
+       isJustACell _ selection extent = (1 @ 1).
+       pos _ selection origin.
+       Clipboard clipboardText
+               split: Character cr
+               do: [:line |
+                       line
+                               split: Character tab
+                               do: [:field |
+                                       (isJustACell
+                                                       or: [selection containsPoint: pos])
+                                               ifTrue: [model textAt: pos put: field].
+                                       pos _ pos + (1 @ 0)].
+                       pos _ selection left @ (pos y + 1)]!

Item was added:
+ ----- Method: SkBasicSheetMorph>>previousPage (in category 'navigation') -----
+ previousPage
+       self beep: 'rice'.
+       ^ history
+               ifNotNil: [self replace: history]!

Item was added:
+ ----- Method: SkBasicSheetMorph>>privateRemoveMorph: (in category 'private') -----
+ privateRemoveMorph: aMorph
+       aMorph class = SkCardMorph
+               ifTrue: [self beep: 'cork'.
+                       self model textAt: aMorph cellOrigin put: ''].
+       super privateRemoveMorph: aMorph!

Item was added:
+ ----- Method: SkBasicSheetMorph>>replace: (in category 'navigation') -----
+ replace: aSkSheetMorph
+       aSkSheetMorph area: self area.
+       aSkSheetMorph position: self position.
+       self owner replaceSubmorph: self by: aSkSheetMorph.
+       ^ aSkSheetMorph!

Item was added:
+ ----- Method: SkBasicSheetMorph>>selectSelection: (in category 'action') -----
+ selectSelection: aPoint
+       "Select at event position"
+       aPoint
+               ifNil: [^ self].
+       self
+               selection: (aPoint extent: 1 @ 1).
+       self changed!

Item was added:
+ ----- Method: SkBasicSheetMorph>>selection (in category 'accessing') -----
+ selection
+       ^ selectionMorph area!

Item was added:
+ ----- Method: SkBasicSheetMorph>>selection: (in category 'accessing') -----
+ selection: aRectangle
+       (submorphs indexOf: selectionMorph) = 1
+               ifFalse: [self addMorphFront: selectionMorph].
+       selectionMorph area: aRectangle!

Item was added:
+ ----- Method: SkBasicSheetMorph>>selectionMorph (in category 'accessing') -----
+ selectionMorph
+       ^ selectionMorph!

Item was added:
+ ----- Method: SkBasicSheetMorph>>setCellExtentFromHalo: (in category 'layout') -----
+ setCellExtentFromHalo: newExtent
+       | eachExtent cellExtent |
+       model
+               ifNil: [^ self].
+       cellExtent _ model
+                               at: self cellExtentName
+                               ifAbsent: [model
+                                               at: self cellExtentName
+                                               put: (SkSheet new parent: model)].
+       eachExtent _ newExtent // self selection extent max: 10 @ 10.
+       self selection left
+               to: self selection right - 1
+               do: [:x | cellExtent at: x @ 1 put: eachExtent].
+       self selection top
+               to: self selection bottom - 1
+               do: [:y | cellExtent at: 1 @ y put: eachExtent].
+       self areaChanged.
+       self changed!

Item was added:
+ ----- Method: SkBasicSheetMorph>>setExtentFromHalo: (in category 'layout') -----
+ setExtentFromHalo: newExtent
+       | card cardMorph direction size |
+       super setExtentFromHalo: newExtent.
+       direction := nil.
+       area height = 1
+               ifTrue:
+                       [direction := #right.
+                       size := area width - 1]
+               ifFalse:
+                       [area width = 1
+                               ifTrue:
+                                       [direction := #down.
+                                       size := area height - 1]].
+       direction ifNotNil:
+                       [card := model new.
+                       card direction: direction.
+                       card size: size.
+                       cardMorph := SkCardMorph model: card.
+                       cardMorph position: self position.
+                       self owner addMorph: cardMorph.
+                       self halo ifNotNilDo: [:helo | helo setTarget: cardMorph].
+                       self delete]!

Item was added:
+ ----- Method: SkBasicSheetMorph>>showFormula (in category 'accessing') -----
+ showFormula
+       ^ showFormula!

Item was added:
+ ----- Method: SkBasicSheetMorph>>spawn (in category 'action') -----
+ spawn
+       model inspectAt: self selection topLeft!

Item was added:
+ ----- Method: SkBasicSheetMorph>>spawn: (in category 'action') -----
+ spawn: anObject
+       self spawn!

Item was added:
+ ----- Method: SkBasicSheetMorph>>startStepping (in category 'stepping and presenter') -----
+ startStepping
+       model
+               ifNotNil: [model startStepping].
+       super startStepping.
+ !

Item was added:
+ ----- Method: SkBasicSheetMorph>>step (in category 'stepping and presenter') -----
+ step
+       self changed!

Item was added:
+ ----- Method: SkBasicSheetMorph>>toggleFormula (in category 'accessing') -----
+ toggleFormula
+       showFormula _ showFormula not!

Item was added:
+ ----- Method: SkBasicSheetMorph>>trackDropZones (in category 'event handling') -----
+ trackDropZones
+       | hand target |
+       hand _ self primaryHand.
+       ((self hasOwner: hand) not
+                       and: [hand submorphCount > 0])
+               ifTrue: [target _ hand submorphs first.
+                       dropZone _ (self screenToCell: target topLeft)
+                                               extent: ((target respondsTo: #area)
+                                                               ifTrue: [target area extent]
+                                                               ifFalse: [1 @ 1]).
+                       (dropZone topLeft x < 1
+                                       or: [dropZone topLeft y < 1])
+                               ifTrue: [dropZone _ nil].
+                       self changed]
+               ifFalse: [dropZone _ nil.
+                       self stopSteppingSelector: #trackDropZones]!

Item was added:
+ ----- Method: SkBasicSheetMorph>>tryToRenameTo: (in category 'accessing') -----
+ tryToRenameTo: aName
+       ^ model
+               ifNotNilDo: [:m | m name: aName]!

Item was added:
+ ----- Method: SkBasicSheetMorph>>upPage (in category 'navigation') -----
+ upPage
+       self beep: 'rice'.
+       ^ self goto: model up!

Item was added:
+ ----- Method: SkBasicSheetMorph>>update: (in category 'updating') -----
+ update: anObject
+       anObject = #cardList
+               ifTrue: [self updateCardList].
+       anObject = #all
+               ifTrue: [self updateCardList].
+       self changed!

Item was added:
+ ----- Method: SkBasicSheetMorph>>updateCardList (in category 'updating') -----
+ updateCardList
+       | cardList morph |
+       cardList _ model cardList: self visibleArea.
+       self
+               removeAllMorphsIn: (self submorphs
+                               select: [:m | m class == SkCardMorph]).
+       cardList
+               do: [:cardInfo |
+                       morph _ SkCardMorph model: cardInfo value.
+                       morph holder: self.
+                       self addMorph: morph.
+                       morph cellOrigin: cardInfo key].
+       selectionMorph hide!

Item was added:
+ ----- Method: SkBasicSheetMorph>>veryDeepInner: (in category 'copying') -----
+ veryDeepInner: deepCopier
+       "history is not copied"
+       model _ model veryDeepCopyWith: deepCopier.
+       selectionMorph _ (selectionMorph veryDeepCopyWith: deepCopier) holder: self.
+       dropZone _ dropZone veryDeepCopyWith: deepCopier.
+       showFormula _ showFormula veryDeepCopyWith: deepCopier.
+       super veryDeepInner: deepCopier!

Item was added:
+ ----- Method: SkBasicSheetMorph>>wantsDroppedMorph:event: (in category 'drag and drop') -----
+ wantsDroppedMorph: aMorph event: anEvent
+       ^ aMorph class = PhraseTileMorph
+               or: [aMorph class = TileMorph
+                               or: [aMorph isKindOf: SkGridPartsMorph]]!

Item was added:
+ ----- Method: SkBasicSheetMorph>>width: (in category 'accessing') -----
+ width: aNumber
+       ^ self setExtentFromHalo: aNumber @ self height!

Item was changed:
 ----- Method: SkCardMorph>>doubleClick: (in category 'event handling') -----
 doubleClick: evt
       | sheet |
       (holder notNil
                       and: [owner = holder])
               ifTrue: [^ holder goto: model].
       self owner = World
               ifTrue: [self delete].
+       sheet _ SkBasicSheetMorph allInstances
-       sheet _ SkSheetMorph allInstances
                               detect: [:each | each world = World
                                               and: [each model = model]]
                               ifNone: [model grid].
       sheet position: self position;
                openInWorld!

Item was changed:
 ----- Method: SkCardMorph>>replaceToSheet: (in category 'layout') -----
 replaceToSheet: newCellExtent
       "Create new spreadsheet for the model. And I will be deleted"
       | sheetMorph |
       (newCellExtent y > 1
                       and: [newCellExtent x > 1])
+               ifTrue: [sheetMorph _ SkBasicSheetMorph new model: model.
-               ifTrue: [sheetMorph _ SkSheetMorph new model: model.
                       sheetMorph
                               area: (0 @ 0 extent: newCellExtent).
                       sheetMorph position: self position.
                       self owner addMorph: sheetMorph.
                       self halo
                               ifNotNilDo: [:helo | helo setTarget: sheetMorph].
                       ^ self delete]!

Item was changed:
 ----- Method: SkObject class>>grid (in category 'instance creation') -----
 grid
       | case grid |
+       grid _ SkBasicSheetMorph new model: (case _ self new).
-       grid _ SkSheetMorph new model: (case _ self new).
       grid area: case defaultArea.
       ^ grid!

Item was changed:
 ----- Method: SkObject>>grid (in category 'initialization') -----
 grid
       | grid |
+       grid _ SkBasicSheetMorph new model: self.
-       grid _ SkSheetMorph new model: self.
       grid area: self defaultArea.
       ^ grid!

Item was changed:
+ Morph subclass: #SkSheetMorph
+       instanceVariableNames: 'sheet'
- SkGridMorph subclass: #SkSheetMorph
-       instanceVariableNames: 'history model selectionMorph dropZone showFormula'
       classVariableNames: ''
       poolDictionaries: ''
       category: 'Skeleton-Base'!
-
- !SkSheetMorph commentStamp: 'tak 12/11/2003 19:10' prior: 0!
- I am a presentation compornent for showing as 2-D grid.
- The contents what I show is depended on a model.
- I never access to a cell directly except through model because
- a cell doesn't know where he locates. Basically, Position information is
- only in model.
-
- cellArea              Rectangle -- the area of cells for drawing. Actual size of table is cellArea extent.
- model         SkSheet --
- !

Item was changed:
+ ----- Method: SkSheetMorph class>>additionsToViewerCategories (in category 'as yet unclassified') -----
- ----- Method: SkSheetMorph class>>additionsToViewerCategories (in category 'viewer categories') -----
 additionsToViewerCategories
+       ^(Smalltalk at: #SkRawSheetMorph ifAbsent: [^ #()])
+               additionsToViewerCategories!
- ^ #(
- (#spreadsheet (
- #(command clearTable 'Deletes the contents of all cells')
- #(command clearRow 'Deletes the contents of the current row cells' )
- #(command clearColumn 'Deletes the contents of the current columns cells' )
- #(slot totalRows 'Lets you change the amount of rows in the spreadsheet' Number readWrite Player getTotalRows Player setTotalRows:  )
- #(slot totalColumns 'Lets you change the amount of columns in the spreadsheet' Number readWrite Player getTotalColumns Player setTotalColumns:  )
- #(slot rowIndex 'Sets the current row' Number readWrite Player getRowIndex Player setRowIndex:  )
- #(slot columnIndex 'Sets the current column' Number readWrite Player getColumnIndex Player setColumnIndex:  )
- #(slot currentCharacters 'Lets you read and modify the characters of the current cell' String readWrite Player getCurrentCharacters Player setCurrentCharacters:  )
- #(slot currentNumericValue 'Lets you read and modify the numeric value of the current cell' Number readWrite Player getCurrentNumericValue Player setCurrentNumericValue:  )
- ))
-
- (#'data i/o' (
- #(slot writeMode 'Lets you choose a write mode (overwrite or append)' WriteMode readWrite Player getWriteMode Player setWriteMode:  )
- #(slot csvSeparator 'Lets you choose a character to act as a separator between cells' String readWrite Player getCsvSeparator Player setCsvSeparator:  )
- #(slot csvFileName 'Sets the name of the file to import/export data' String readWrite Player getCsvFileName Player setCsvFileName:  )
- #(command importDataFromFile 'Reads the data from the file and loads it in the spreadsheet')
- #(command exportDataToFile 'Writes the data from the spreadsheet into the file')
- ))
-
- )!

Item was changed:
+ ----- Method: SkSheetMorph class>>descriptionForPartsBin (in category 'as yet unclassified') -----
- ----- Method: SkSheetMorph class>>descriptionForPartsBin (in category 'parts bin') -----
 descriptionForPartsBin
+       ^ self partName:        'Spreadsheet' translated
+               categories:             {'Skeleton' translated}
+               documentation:  'A spreadsheet' translated!
-       ^ self partName:        'Spread Sheet'
-               categories:             #('Skeleton')
-               documentation:  'A spread sheet'!

Item was removed:
- ----- Method: SkSheetMorph class>>formPreviousPage (in category 'constants') -----
- formPreviousPage
-  ^((ColorForm
-       extent: 5@9
-       depth: 1
-       fromArray: #( 4026531840 3758096384 3489660928 2952790016 1879048192 2952790016 3489660928 3758096384 4026531840)
-       offset: 0@0)
-       colorsFromArray: #(#(0.0 0.0 0.0) #( )  ))
- " form storeString "!

Item was removed:
- ----- Method: SkSheetMorph class>>formUpPage (in category 'constants') -----
- formUpPage
-  ^((ColorForm
-       extent: 9@5
-       depth: 2
-       fromArray: #( 2859106304 2845474816 2795929600 2326298624 1431650304)
-       offset: 0@0)
-       colorsFromArray: #(#(0.004 0.004 0.008) #(0.0 0.0 0.004) #( ) #(0.0 0.0 0.0)  ))
- " form storeString "!

Item was removed:
- ----- Method: SkSheetMorph class>>initialize (in category 'class initialization') -----
- initialize
-       "
-       self initialize.
-       "
-       Vocabulary addStandardVocabulary: (SymbolListType new vocabularyName: #WriteMode;
-                        symbols: #(#overwrite #append)).!

Item was removed:
- ----- Method: SkSheetMorph class>>model: (in category 'instance creation') -----
- model: aSkObject
-       ^ super new model: aSkObject!

Item was removed:
- ----- Method: SkSheetMorph>>acceptDroppingMorph:event: (in category 'drag and drop') -----
- acceptDroppingMorph: aMorph event: evt
-       | cellPos successed |
-       cellPos _ self screenToCell: aMorph topLeft.
-       (cellPos x < 1
-                       or: [cellPos y < 1])
-               ifTrue: [self beep: 'arrow'.
-                       ^ aMorph rejectDropMorphEvent: evt].
-       successed _ false.
-       successed _ (aMorph isKindOf: SkGridPartsMorph)
-                               ifTrue: [self acceptRuleMorph: aMorph event: evt]
-                               ifFalse: [aMorph class = PhraseTileMorph
-                                               ifTrue: [self acceptPhraseTileMorph: aMorph event: evt]
-                                               ifFalse: [aMorph class = TileMorph
-                                                               ifTrue: [self acceptTileMorph: aMorph event: evt]]].
-       successed
-               ifTrue: [self beep: 'cassete']
-               ifFalse: [self beep: 'arrow'.
-                       aMorph rejectDropMorphEvent: evt]!

Item was removed:
- ----- Method: SkSheetMorph>>acceptPhraseTileMorph:event: (in category 'drag and drop') -----
- acceptPhraseTileMorph: aMorph event: evt
-       | setter getter |
-       getter _ aMorph operatorTile operatorOrExpression.
-       setter _ ('set'
-                               , (getter allButFirst: 3) , ':') asSymbol.
-       self model
-               modelAt: (self screenToCell: aMorph topLeft)
-               for: aMorph actualObject
-               getter: getter
-               setter: setter.
-       ^ true!

Item was removed:
- ----- Method: SkSheetMorph>>acceptRuleMorph:event: (in category 'drag and drop') -----
- acceptRuleMorph: aMorph event: evt
-       | cellPos card |
-       model parent adopt: aMorph model rule.
-       cellPos _ (self screenToCell: aMorph topLeft)
-                               + (aMorph cellOrigin - aMorph area topLeft).
-       self model textAt: cellPos put: '=' , aMorph model codeString.
-       card _ self
-                               cardMorphAt: cellPos
-                               ifAbsent: [^ false].
-       card model rule = aMorph model rule
-               ifFalse: ["maybe successed"
-                       ^ false].
-       aMorph halo
-               ifNotNilDo: [:halo | halo setTarget: card].
-       ^ true!

Item was removed:
- ----- Method: SkSheetMorph>>acceptTileMorph:event: (in category 'drag and drop') -----
- acceptTileMorph: aMorph event: evt
-       | object |
-       object _ aMorph actualObject.
-       self model
-               at: (self screenToCell: aMorph topLeft)
-               put: object.
-       ^ true!

Item was added:
+ ----- Method: SkSheetMorph>>addPageControls (in category 'initialization') -----
+ addPageControls
+       | panel prev up title |
+
+       panel := AlignmentMorph newRow
+                               color: Color transparent;
+                               cellInset: 3;
+                               hResizing: #shrinkWrap;
+                               vResizing: #shrinkWrap.
+       panel addMorphBack: self tickMorph.
+       prev := SketchMorph withForm: self prevButtonForm.
+       prev
+               on: #mouseDown
+               send: #previousPage
+               to: sheet.
+       prev position: 32 @ 3.
+       prev setBalloonText: 'View the previous sheet.' translated.
+       panel addMorphBack: prev.
+       up := SketchMorph withForm: self upButtonForm.
+       up
+               on: #mouseDown
+               send: #upPage
+               to: sheet.
+       up position: 44 @ 4.
+       up setBalloonText: 'View the definision or the parent rule.' translated.
+       panel addMorphBack: up.
+       title := UpdatingStringMorph new useStringFormat
+               target: self;
+               putSelector: #setNameTo:;
+               getSelector: #externalName.
+       panel addMorphBack: title.
+       self addMorph: panel!

Item was added:
+ ----- Method: SkSheetMorph>>addSheet: (in category 'initialization') -----
+ addSheet: aSheet
+       self addMorph: (sheet := aSheet).
+       self renameTo: sheet externalName!

Item was added:
+ ----- Method: SkSheetMorph>>area: (in category 'sheet delegation') -----
+ area: aRectangle
+       ^ sheet area: aRectangle
+       !

Item was removed:
- ----- Method: SkSheetMorph>>areaChanged (in category 'layout') -----
- areaChanged
-       super areaChanged.
-       self
-               submorphsDo: [:m | (m isKindOf: SkGridMorph)
-                               ifTrue: [m areaChanged]]!

Item was removed:
- ----- Method: SkSheetMorph>>cardMorphAt:ifAbsent: (in category 'accessing') -----
- cardMorphAt: aPoint ifAbsent: aBlock
-       ^ self submorphs
-               detect: [:m | m class = SkCardMorph
-                               and: [m cellOrigin = aPoint]]
-               ifNone: aBlock!

Item was removed:
- ----- Method: SkSheetMorph>>cellExtentAt: (in category 'layout') -----
- cellExtentAt: aPoint
-       | cellExtent x y |
-       ^ (model notNil
-                       and: [(cellExtent _ model findName: self cellExtentName) class == SkSheet ])
-               ifTrue: [x _ (cellExtent
-                                               at: aPoint x @ 1
-                                               ifAbsent: [SkGridMorph standardCellExtent]) x.
-                       y _ (cellExtent
-                                               at: 1 @ aPoint y
-                                               ifAbsent: [SkGridMorph standardCellExtent]) y.
-                       x @ y]
-               ifFalse: [SkGridMorph standardCellExtent]!

Item was removed:
- ----- Method: SkSheetMorph>>cellExtentName (in category 'layout') -----
- cellExtentName
-       ^ 'CellExtent'!

Item was removed:
- ----- Method: SkSheetMorph>>copySelection (in category 'action') -----
- copySelection
-       | text |
-       text _ Text
-                               streamContents: [:aStream | self selection top
-                                               to: self selection bottom - 1
-                                               do: [:y |
-                                                       (self selection left to: self selection right - 1)
-                                                               do: [:x | aStream
-                                                                               nextPutAll: (model textAt: x @ y)]
-                                                               separatedBy: [aStream nextPut: Character tab].
-                                                       aStream nextPut: Character cr]].
-       Clipboard clipboardText: text!

Item was removed:
- ----- Method: SkSheetMorph>>cut (in category 'action') -----
- cut
-       self copySelection.
-       self selection top
-               to: self selection bottom - 1
-               do: [:y | self selection left
-                               to: self selection right - 1
-                               do: [:x | model textAt: x @ y put: '']]!

Item was added:
+ ----- Method: SkSheetMorph>>doesNotUnderstand: (in category 'dnu') -----
+ doesNotUnderstand: aMessage
+       "Quick hack to automagically generate missing methods"
+       self flag: #Richo.
+       (sheet respondsTo: aMessage selector)
+               ifTrue: [ | str |
+                       str := aMessage createStubMethod allButLast: 24.
+                       self class compile: str, '^ sheet ', str classified: #'autogenerated'.
+                       ^aMessage sentTo: self.
+                       ]
+               ifFalse: [^super doesNotUnderstand: aMessage]!

Item was removed:
- ----- Method: SkSheetMorph>>drawCell:at: (in category 'drawing') -----
- drawCell: aCanvas at: aPoint
-       (aPoint x isZero
-                       or: [aPoint y isZero])
-               ifTrue: [^ self
-                               drawLabel: aCanvas
-                               string: (self labelAt: aPoint)
-                               at: aPoint].
-       self flag: #TODO.
-       self
-               drawContents: ((showFormula notNil
-                                       and: [showFormula])
-                               ifTrue: [model textAt: aPoint]
-                               ifFalse: [ showFormula _ false.model at: aPoint.])
-               on: aCanvas
-               at: aPoint!

Item was removed:
- ----- Method: SkSheetMorph>>drawName: (in category 'drawing') -----
- drawName: aCanvas
-       | name |
-       name := model ruleName asString.
-       model isInstance
-               ifTrue: [name := name , '*'].
-       aCanvas
-               clipBy: self bounds
-               during: [:canvas | canvas
-                               drawString: name
-                               at: self topLeft + (28 @ 6)
-                               font: self class titleStyle
-                               color: Color gray]!

Item was removed:
- ----- Method: SkSheetMorph>>drawOn: (in category 'drawing') -----
- drawOn: aCanvas
-       super drawOn: aCanvas.
-       self drawGrabAreaOn: aCanvas.
-       dropZone
-               ifNotNil: [aCanvas
-                               fillRectangle: (self
-                                               cellAreaToScreen: (dropZone intersect: area))
-                               fillStyle: (SkColorSet labelFor: model)
-                               borderStyle: self borderStyle].
-       self drawDependMap: aCanvas.
-       self drawName: aCanvas.
-       self drawBorder: aCanvas.
-       self drawContents: aCanvas!

Item was removed:
- ----- Method: SkSheetMorph>>editContents (in category 'accessing') -----
- editContents
- self selection ifNil: [^''].
-       ^ model
-               ifNil: ['']
-               ifNotNil: [model textAt: self selection origin]!

Item was removed:
- ----- Method: SkSheetMorph>>editContents: (in category 'accessing') -----
- editContents: aText
-       "Accept text"
-       self selection ifNil: [^self].
-       model
-               ifNotNil: [model textAt: self selection origin put: aText].
-       selectionMorph deleteEditor!

Item was added:
+ ----- Method: SkSheetMorph>>extent: (in category 'accessing') -----
+ extent: newExtent
+
+       sheet setExtentFromHalo: (newExtent max: (165@77)) -
+                                                               (self layoutInset + self cellInset + (0 @ self pageControls height))!

Item was removed:
- ----- Method: SkSheetMorph>>fillStyle (in category 'visual properties') -----
- fillStyle
-       ^ SkColorSet baseFor: model rule!

Item was removed:
- ----- Method: SkSheetMorph>>goto: (in category 'navigation') -----
- goto: aSkObject
-       | grid |
-       self beep: 'rice'.
-       grid _ aSkObject grid.
-       self replace: grid.
-       grid history: self.
-       ^ grid!

Item was removed:
- ----- Method: SkSheetMorph>>handlesKeyboard: (in category 'event handling') -----
- handlesKeyboard: evt
-       ^ true!

Item was removed:
- ----- Method: SkSheetMorph>>handlesMouseDown: (in category 'event handling') -----
- handlesMouseDown: evt
-       ^ (self grabArea containsPoint: evt position) not!

Item was removed:
- ----- Method: SkSheetMorph>>handlesMouseOver: (in category 'event handling') -----
- handlesMouseOver: evt
-       ^ true
- !

Item was removed:
- ----- Method: SkSheetMorph>>handlesMouseOverDragging: (in category 'event handling') -----
- handlesMouseOverDragging: evt
-
-       ^ true
- !

Item was removed:
- ----- Method: SkSheetMorph>>height: (in category 'accessing') -----
- height: aNumber
-       ^ self setExtentFromHalo: self width @ aNumber!

Item was removed:
- ----- Method: SkSheetMorph>>history: (in category 'navigation') -----
- history: aSkSheetMorph
-       history
-               ifNil: [history _ aSkSheetMorph]!

Item was changed:
 ----- Method: SkSheetMorph>>initialize (in category 'initialization') -----
 initialize
       super initialize.
+       self layoutPolicy:      TableLayout new;
+               cellPositioning: #leftCenter;
+               cornerStyle: #rounded;
+               color: (Color r: 0.645 g: 0.645 b: 1.0);
+               borderWidth: 1;
+               borderColor: (Color r: 0.516 g: 0.516 b: 1.0);
+               listDirection: #topToBottom;
+               hResizing: #shrinkWrap;
+               vResizing: #shrinkWrap.
+       self addSheet: SkBasicSheetMorph newStandAlone;
+               addPageControls!
-       self showPageControls.
-       selectionMorph _ SkGridSelectionMorph new holder: self.
-       self
-               area: (1 @ 1 extent: 4 @ 4).
-       self
-               borderStyle: (RaisedBorder color: Color black width: 1).
-       self
-               fillStyle: (SolidFillStyle
-                               color: (Color
-                                               r: 1.0
-                                               g: 0.935
-                                               b: 0.839)).
-       self cornerStyle: #rounded.
-       self selection: nil.
-       showFormula _ false!

Item was removed:
- ----- Method: SkSheetMorph>>initializeToStandAlone (in category 'parts bin') -----
- initializeToStandAlone
-       super initializeToStandAlone.
-       self model: SkSheet new attachProject.
-       self
-               area: (0 @ 0 extent: 3 @ 3)!

Item was removed:
- ----- Method: SkSheetMorph>>isModelStepping (in category 'stepping and presenter') -----
- isModelStepping
-       ^ model isStepping!

Item was removed:
- ----- Method: SkSheetMorph>>isMorphicModel (in category 'classification') -----
- isMorphicModel
-       ^true!

Item was removed:
- ----- Method: SkSheetMorph>>keyStroke: (in category 'event handling') -----
- keyStroke: evt
-       selectionMorph keyStroke: evt!

Item was changed:
+ ----- Method: SkSheetMorph>>model (in category 'sheet delegation') -----
- ----- Method: SkSheetMorph>>model (in category 'accessing') -----
 model
+       ^ sheet model!
-       ^ model!

Item was removed:
- ----- Method: SkSheetMorph>>model: (in category 'accessing') -----
- model: anObject
-       model
-               ifNotNil: [model removeDependent: self].
-       anObject
-               ifNotNil: [anObject addDependent: self].
-       model _ anObject.
-       self update: #all.
- !

Item was removed:
- ----- Method: SkSheetMorph>>mouseDown: (in category 'event handling') -----
- mouseDown: event
-       self
-               selectSelection: (self screenToCell: event position).
-       event yellowButtonPressed
-               ifTrue: [^ selectionMorph invokeMenu: event].
-       "For easy doublecilck to selection"
-       event hand waitForClicksOrDrag: selectionMorph event: event.
-       event hand mouseFocus: selectionMorph!

Item was removed:
- ----- Method: SkSheetMorph>>mouseEnter: (in category 'event handling') -----
- mouseEnter: evt
-       | hand tile |
-       hand _ evt hand.
-       hand submorphs size = 1
-               ifFalse: [^ self].
-       tile _ hand firstSubmorph renderedMorph.
-       (self wantsDroppedMorph: tile event: evt)
-               ifFalse: [^ self].
-       self
-               startStepping: #trackDropZones
-               at: Time millisecondClockValue
-               arguments: nil
-               stepTime: 20!

Item was removed:
- ----- Method: SkSheetMorph>>mouseEnterDragging: (in category 'event handling') -----
- mouseEnterDragging: evt
-       "Test button state elsewhere if at all"
-       ^ self mouseEnter: evt!

Item was removed:
- ----- Method: SkSheetMorph>>mouseLeave: (in category 'event handling') -----
- mouseLeave: evt
-       dropZone _ nil.
-       self stopSteppingSelector: #trackDropZones!

Item was removed:
- ----- Method: SkSheetMorph>>mouseLeaveDragging: (in category 'event handling') -----
- mouseLeaveDragging: evt
-       ^ self mouseLeave: evt!

Item was removed:
- ----- Method: SkSheetMorph>>mouseUpTick:onItem: (in category 'event handling') -----
- mouseUpTick: evt onItem: aMorph
-       aMorph isTicking
-               ifTrue: [model stopStepping.
-                       aMorph isTicking: false]
-               ifFalse: [model startStepping.
-                       aMorph isTicking: true]!

Item was removed:
- ----- Method: SkSheetMorph>>openLibrary (in category 'action') -----
- openLibrary
-       (SkObject root at: 'Library') grid openInHand!

Item was added:
+ ----- Method: SkSheetMorph>>pageControls (in category 'accessing') -----
+ pageControls
+       ^ self submorphs detect: [:each | each ~~ sheet]!

Item was removed:
- ----- Method: SkSheetMorph>>paste (in category 'action') -----
- paste
-       | pos selection isJustACell |
-       selection _ self selection.
-       isJustACell _ selection extent = (1 @ 1).
-       pos _ selection origin.
-       Clipboard clipboardText
-               split: Character cr
-               do: [:line |
-                       line
-                               split: Character tab
-                               do: [:field |
-                                       (isJustACell
-                                                       or: [selection containsPoint: pos])
-                                               ifTrue: [model textAt: pos put: field].
-                                       pos _ pos + (1 @ 0)].
-                       pos _ selection left @ (pos y + 1)]!

Item was added:
+ ----- Method: SkSheetMorph>>prevButtonForm (in category 'accessing') -----
+ prevButtonForm
+       ^(Form
+       extent: 9@16
+       depth: 16
+       fromArray: #( 0 0 0 0 0 0 0 0 0 831258624 0 0 0 12684 831258624 0 0 0 831279775 831258624 0 0 12684 1386173087 831258624 0 0 831279775 1386173087 831258624 0 12684 1386173087 1386173087 831258624 0 831279775 1386173087 1386173087 831258624 12684 1386173087 1386173087 1386173087 831258624 0 831279775 1386173087 1386173087 831258624 0 12684 1386173087 1386173087 831258624 0 0 831279775 1386173087 831258624 0 0 12684 1386173087 831258624 0 0 0 831279775 831258624 0 0 0 12684 831258624 0 0 0 0 831258624)
+       offset: 522@183)!

Item was removed:
- ----- Method: SkSheetMorph>>previousPage (in category 'navigation') -----
- previousPage
-       self beep: 'rice'.
-       ^ history
-               ifNotNil: [self replace: history]!

Item was removed:
- ----- Method: SkSheetMorph>>privateRemoveMorph: (in category 'private') -----
- privateRemoveMorph: aMorph
-       aMorph class = SkCardMorph
-               ifTrue: [self beep: 'cork'.
-                       self model textAt: aMorph cellOrigin put: ''].
-       super privateRemoveMorph: aMorph!

Item was removed:
- ----- Method: SkSheetMorph>>replace: (in category 'navigation') -----
- replace: aSkSheetMorph
-       aSkSheetMorph area: self area.
-       aSkSheetMorph position: self position.
-       self delete.
-       aSkSheetMorph openInWorld.
-       ^ aSkSheetMorph!

Item was added:
+ ----- Method: SkSheetMorph>>replaceSubmorph:by: (in category 'submorphs-add/remove') -----
+ replaceSubmorph: oldMorph by: newMorph
+       "Update page controls if the sheet gets replaced."
+       ^ oldMorph == sheet
+               ifTrue: [self submorphsDo: [:each | each delete];
+                                       addSheet: newMorph;
+                                       addPageControls]
+               ifFalse: [super replaceSubmorph: oldMorph by: newMorph]!

Item was changed:
+ ----- Method: SkSheetMorph>>selectSelection: (in category 'sheet delegation') -----
- ----- Method: SkSheetMorph>>selectSelection: (in category 'action') -----
 selectSelection: aPoint
+       ^ sheet selectSelection: aPoint
+       !
-       "Select at event position"
-       aPoint
-               ifNil: [^ self].
-       self
-               selection: (aPoint extent: 1 @ 1).
-       self changed!

Item was changed:
+ ----- Method: SkSheetMorph>>selection (in category 'sheet delegation') -----
- ----- Method: SkSheetMorph>>selection (in category 'accessing') -----
 selection
+       ^ sheet selection
+       !
-       ^ selectionMorph area!

Item was removed:
- ----- Method: SkSheetMorph>>selection: (in category 'accessing') -----
- selection: aRectangle
-       submorphs first == selectionMorph
-               ifFalse: [self addMorphFront: selectionMorph].
-       selectionMorph area: aRectangle!

Item was removed:
- ----- Method: SkSheetMorph>>selectionMorph (in category 'accessing') -----
- selectionMorph
-       ^ selectionMorph!

Item was removed:
- ----- Method: SkSheetMorph>>setCellExtentFromHalo: (in category 'layout') -----
- setCellExtentFromHalo: newExtent
-       | eachExtent cellExtent |
-       model
-               ifNil: [^ self].
-       cellExtent _ model
-                               at: self cellExtentName
-                               ifAbsent: [model
-                                               at: self cellExtentName
-                                               put: (SkSheet new parent: model)].
-       eachExtent _ newExtent // self selection extent max: 10 @ 10.
-       self selection left
-               to: self selection right - 1
-               do: [:x | cellExtent at: x @ 1 put: eachExtent].
-       self selection top
-               to: self selection bottom - 1
-               do: [:y | cellExtent at: 1 @ y put: eachExtent].
-       self areaChanged.
-       self changed!

Item was removed:
- ----- Method: SkSheetMorph>>setExtentFromHalo: (in category 'layout') -----
- setExtentFromHalo: newExtent
-       | card cardMorph direction size |
-       super setExtentFromHalo: newExtent.
-       direction := nil.
-       area height = 1
-               ifTrue:
-                       [direction := #right.
-                       size := area width - 1]
-               ifFalse:
-                       [area width = 1
-                               ifTrue:
-                                       [direction := #down.
-                                       size := area height - 1]].
-       direction ifNotNil:
-                       [card := model new.
-                       card direction: direction.
-                       card size: size.
-                       cardMorph := SkCardMorph model: card.
-                       cardMorph position: self position.
-                       self owner addMorph: cardMorph.
-                       self halo ifNotNilDo: [:helo | helo setTarget: cardMorph].
-                       self delete]!

Item was added:
+ ----- Method: SkSheetMorph>>setNameTo: (in category 'renaming') -----
+ setNameTo: aName
+       sheet tryToRenameTo: aName.
+       super setNameTo: aName!

Item was removed:
- ----- Method: SkSheetMorph>>showFormula (in category 'accessing') -----
- showFormula
-       ^ showFormula!

Item was removed:
- ----- Method: SkSheetMorph>>showPageControls (in category 'initialization') -----
- showPageControls
-       | panel prev up |
-       panel _ Morph new extent: 80@20; color: Color transparent.
-       panel
-               on: #mouseDown
-               send: #yourself
-               to: self.
-       panel addMorph: self tickMorph.
-       prev _ (PolygonMorph new setVertices: {0 @ 7. 7 @ 0. 7 @ 14}) borderWidth: 1;
- borderColor: Color darkGray;
-                                color: Color transparent.
-       prev
-               on: #mouseDown
-               send: #previousPage
-               to: self.
-       prev position: 24 @ 3.
-       prev setBalloonText: 'View the previous sheet.' translated.
-       panel addMorph: prev.
-       up _ prev copy heading: 90.
-       up
-               on: #mouseDown
-               send: #upPage
-               to: self.
-       up position: 36 @ 4.
-       up setBalloonText: 'View the definision or the parent rule.' translated.
-
-       panel addMorph: up.
-       self addMorph: panel!

Item was removed:
- ----- Method: SkSheetMorph>>spawn (in category 'action') -----
- spawn
-       model inspectAt: self selection topLeft!

Item was removed:
- ----- Method: SkSheetMorph>>spawn: (in category 'action') -----
- spawn: anObject
-       self spawn!

Item was removed:
- ----- Method: SkSheetMorph>>startStepping (in category 'stepping and presenter') -----
- startStepping
-       model
-               ifNotNil: [model startStepping].
-       super startStepping.
- !

Item was changed:
+ ----- Method: SkSheetMorph>>step (in category 'stepping') -----
- ----- Method: SkSheetMorph>>step (in category 'stepping and presenter') -----
 step
+       sheet step!
-       self changed!

Item was changed:
+ ----- Method: SkSheetMorph>>tickMorph (in category 'accessing') -----
- ----- Method: SkSheetMorph>>tickMorph (in category 'initialization') -----
 tickMorph
       | tick |
       tick _ SkPluggableTickMorph new.
+       tick on: sheet isTickingSel: #isModelStepping.
-       tick position: self position + 1.
-       tick on: self isTickingSel: #isModelStepping.
       tick
               on: #mouseUp
               send: #mouseUpTick:onItem:
+               to: sheet.
-               to: self.
       tick stepTime: 500.
       tick startStepping.
       tick setBalloonText: 'Press to toggle ticking state.' translated.
       ^ tick!

Item was removed:
- ----- Method: SkSheetMorph>>toggleFormula (in category 'accessing') -----
- toggleFormula
-       showFormula _ showFormula not!

Item was removed:
- ----- Method: SkSheetMorph>>trackDropZones (in category 'event handling') -----
- trackDropZones
-       | hand target |
-       hand _ self primaryHand.
-       ((self hasOwner: hand) not
-                       and: [hand submorphCount > 0])
-               ifTrue: [target _ hand submorphs first.
-                       dropZone _ (self screenToCell: target topLeft)
-                                               extent: ((target respondsTo: #area)
-                                                               ifTrue: [target area extent]
-                                                               ifFalse: [1 @ 1]).
-                       (dropZone topLeft x < 1
-                                       or: [dropZone topLeft y < 1])
-                               ifTrue: [dropZone _ nil].
-                       self changed]
-               ifFalse: [dropZone _ nil.
-                       self stopSteppingSelector: #trackDropZones]!

Item was removed:
- ----- Method: SkSheetMorph>>tryToRenameTo: (in category 'accessing') -----
- tryToRenameTo: aName
-       ^ model
-               ifNotNilDo: [:m | m name: aName]!

Item was added:
+ ----- Method: SkSheetMorph>>upButtonForm (in category 'accessing') -----
+ upButtonForm
+       ^ self prevButtonForm copy rotateBy: 90!

Item was removed:
- ----- Method: SkSheetMorph>>upPage (in category 'navigation') -----
- upPage
-       self beep: 'rice'.
-       ^ self goto: model up!

Item was removed:
- ----- Method: SkSheetMorph>>update: (in category 'updating') -----
- update: anObject
-       anObject = #cardList
-               ifTrue: [self updateCardList].
-       anObject = #all
-               ifTrue: [self updateCardList].
-       self changed!

Item was removed:
- ----- Method: SkSheetMorph>>updateCardList (in category 'updating') -----
- updateCardList
-       | cardList morph |
-       cardList _ model cardList: self visibleArea.
-       self
-               removeAllMorphsIn: (self submorphs
-                               select: [:m | m class == SkCardMorph]).
-       cardList
-               do: [:cardInfo |
-                       morph _ SkCardMorph model: cardInfo value.
-                       morph holder: self.
-                       self addMorph: morph.
-                       morph cellOrigin: cardInfo key].
-       selectionMorph hide!

Item was removed:
- ----- Method: SkSheetMorph>>veryDeepInner: (in category 'copying') -----
- veryDeepInner: deepCopier
-       "history is not copied"
-       model _ model veryDeepCopyWith: deepCopier.
-       selectionMorph _ (selectionMorph veryDeepCopyWith: deepCopier) holder: self.
-       dropZone _ dropZone veryDeepCopyWith: deepCopier.
-       showFormula _ showFormula veryDeepCopyWith: deepCopier.
-       super veryDeepInner: deepCopier!

Item was added:
+ ----- Method: SkSheetMorph>>visibleArea (in category 'sheet delegation') -----
+ visibleArea
+       ^ sheet visibleArea
+       !

Item was removed:
- ----- Method: SkSheetMorph>>wantsDroppedMorph:event: (in category 'drag and drop') -----
- wantsDroppedMorph: aMorph event: anEvent
-       ^ aMorph class = PhraseTileMorph
-               or: [aMorph class = TileMorph
-                               or: [aMorph isKindOf: SkGridPartsMorph]]!

Item was removed:
- ----- Method: SkSheetMorph>>width: (in category 'accessing') -----
- width: aNumber
-       ^ self setExtentFromHalo: aNumber @ self height!

Item was changed:
 ----- Method: SkValueCell>>slotName (in category 'accessing') -----
 slotName
       "See Player>>tearOffFancyWatcherFor:"
       | info watcherWording anInterface |
       info _ model slotInfoForGetter: getter.
       info
               ifNil: [anInterface _ Vocabulary eToyVocabulary
                                               methodInterfaceAt: getter
                                               ifAbsent: [].
+                       watcherWording _ anInterface wording]
-                       watcherWording _ anInterface elementWording]
               ifNotNil: [watcherWording _ Utilities inherentSelectorForGetter: getter].
       ^ model tileReferringToSelf bePossessive labelMorph contents , ' ' , watcherWording!


_______________________________________________
etoys-dev mailing list
[hidden email]
http://lists.squeakland.org/mailman/listinfo/etoys-dev



_______________________________________________
etoys-dev mailing list
[hidden email]
http://lists.squeakland.org/mailman/listinfo/etoys-dev
Reply | Threaded
Open this post in threaded view
|

Re: Etoys Inbox: Skeleton-Richo.5.mcz

Karl Ramberg
On Tue, Oct 18, 2011 at 5:59 PM, Ricardo Moran <[hidden email]> wrote:
> Hi, it seems my commit notifications are being marked as spam :S
> But anyway, I'm glad to know you took the time to clean the Skeleton
> project. It's one step closer to inclusion :)
> I tried to fix the layout problem that Karl mentioned before and this is my
> first shot. I think the result is nice, although I had to create a new morph
> subclass (which I don't really like much).
> Cheers,
> Richo

Layout is much nicer :-)

Karl

>
> On Tue, Oct 18, 2011 at 12:50 PM, <[hidden email]> wrote:
>>
>> Spam detection software, running on the system "europa.mgmt.inetu.net",
>> has
>> identified this incoming email as possible spam.  The original message
>> has been attached to this so you can view it (if it isn't spam) or label
>> similar future email.  If you have any questions, see
>> the administrator of that system for details.
>>
>> Content preview:  Ricardo Moran uploaded a new version of Skeleton to
>> project
>>   Etoys Inbox: http://source.squeak.org/etoysinbox/Skeleton-Richo.5.mcz
>> ====================
>>   Summary ==================== Name: Skeleton-Richo.5 Author: Richo Time:
>> 18
>>   October 2011, 12:50:19 pm UUID: 2d68a228-e98a-b64c-af4f-48ae0cb56a9c
>> Ancestors:
>>   Skeleton-kfr.4 [...]
>>
>> Content analysis details:   (6.5 points, 5.0 required)
>>
>>  pts rule name              description
>> ---- ----------------------
>> --------------------------------------------------
>>  3.5 BAYES_99               BODY: Bayesian spam probability is 99 to 100%
>>                            [score: 1.0000]
>>  0.0 MISSING_MID            Missing Message-Id: header
>>  1.2 INVALID_DATE           Invalid Date: header (not RFC 2822)
>>  1.0 DATE_IN_PAST_12_24     Date: is 12 to 24 hours before Received: date
>>  1.7 TVD_FUZZY_SYMBOL       BODY: TVD_FUZZY_SYMBOL
>>  3.8 TVD_STOCK1             BODY: TVD_STOCK1
>>  0.1 RDNS_NONE              Delivered to trusted network by a host with no
>> rDNS
>> -4.8 AWL                    AWL: From: address is in the auto white-list
>>
>>
>>
>>
>> ---------- Forwarded message ----------
>> From: [hidden email]
>> To: [hidden email]
>> Date: Tue, 18 Oct 2011 15:50:20.809 0000
>> Subject: Etoys Inbox: Skeleton-Richo.5.mcz
>> Ricardo Moran uploaded a new version of Skeleton to project Etoys Inbox:
>> http://source.squeak.org/etoysinbox/Skeleton-Richo.5.mcz
>>
>> ==================== Summary ====================
>>
>> Name: Skeleton-Richo.5
>> Author: Richo
>> Time: 18 October 2011, 12:50:19 pm
>> UUID: 2d68a228-e98a-b64c-af4f-48ae0cb56a9c
>> Ancestors: Skeleton-kfr.4
>>
>> Trying to fix the layout problem with the tick morph and the sheet's name.
>> I renamed SkSheetMorph to SkBasicSheetMorph and I removed all the code
>> that adds page controls and draws its name. So now it is a simple
>> spreadsheet.
>> I then created a new SkSheetMorph that decorates a SkBasicSheetMorph with
>> the page controls and a title.
>>
>> I also removed the reference to Connectors in
>> Morph>>#showPointArrowFrom:to:label: because it gave a DNU that I didn't
>> knew how to fix it, and because it doesn't seem to be really important
>> behavior.
>>
>> =============== Diff against Skeleton-kfr.4 ===============
>>
>> Item was changed:
>>  ----- Method: Morph>>showPointArrowFrom:to:label: (in category
>> '*skeleton-base-arrow') -----
>>  showPointArrowFrom: morph1 to: morph2 label: aString
>>        "Morph new showPointArrowFrom: (Morph new position: 0@0) to: (Morph
>>        new position: 200@200) label: 'test'"
>>        | p1 p2 arrow label connector |
>>        p1 := morph1 center.
>>        p2 := morph2 center.
>>        arrow := PolygonMorph arrowPrototype.
>>        arrow
>>                borderColor: (TranslucentColor
>>                                r: 1.0
>>                                g: 0.3
>>                                b: 0.0
>>                                alpha: 0.6).
>>        arrow
>>                setVertices: (Array with: p1 with: p2).
>>        arrow dashedBorder: {30. 30. Color transparent. 0. -10};
>>                 startStepping.
>> -       (Smalltalk
>> -               at: #NCAAConnectorMorph
>> -               ifAbsent: [])
>> -               ifNotNil: [connector := NCAAConnectorMorph fromMorph:
>> morph1 toMorph: morph2.
>> -                       connector line: arrow.
>> -                       connector lock.
>> -                       label := NCLabelMorph new string: aString.
>> -                       label input: morph1.
>> -                       label color: Color red.
>> -                       label openInWorld.
>> -                       arrow := connector].
>>        arrow openInWorld.
>> +       arrow addAlarm: #delete after: 500!
>> -       arrow addAlarm: #delete after: 500.
>> -       label ifNotNil: [label addAlarm: #delete after: 500]
>> - !
>>
>> Item was changed:
>>  ----- Method: Player>>setTotalColumns: (in category
>> '*skeleton-spreadsheet') -----
>>  setTotalColumns: aNumber
>> +       ^ self sheetMorph area: (0@0 corner: (aNumber max: 2) @ self
>> getTotalRows)!
>> -       ^ self sheetMorph area: (0@0 corner: aNumber @ self getTotalRows)!
>>
>> Item was changed:
>>  ----- Method: Player>>setTotalRows: (in category '*skeleton-spreadsheet')
>> -----
>>  setTotalRows: aNumber
>> +       ^ self sheetMorph area: (0@0 corner: self getTotalColumns @
>> (aNumber max: 2))!
>> -       ^ self sheetMorph area: (0@0 corner: self getTotalColumns @
>> aNumber)!
>>
>> Item was added:
>> + SkGridMorph subclass: #SkBasicSheetMorph
>> +       instanceVariableNames: 'history model selectionMorph dropZone
>> showFormula'
>> +       classVariableNames: ''
>> +       poolDictionaries: ''
>> +       category: 'Skeleton-Base'!
>> +
>> + !SkBasicSheetMorph commentStamp: 'tak 12/11/2003 19:10' prior: 0!
>> + I am a presentation compornent for showing as 2-D grid.
>> + The contents what I show is depended on a model.
>> + I never access to a cell directly except through model because
>> + a cell doesn't know where he locates. Basically, Position information is
>> + only in model.
>> +
>> + cellArea              Rectangle -- the area of cells for drawing. Actual
>> size of table is cellArea extent.
>> + model         SkSheet --
>> + !
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph class>>additionsToViewerCategories (in
>> category 'viewer categories') -----
>> + additionsToViewerCategories
>> + ^ #(
>> + (#spreadsheet (
>> + #(command clearTable 'Deletes the contents of all cells')
>> + #(command clearRow 'Deletes the contents of the current row cells' )
>> + #(command clearColumn 'Deletes the contents of the current columns
>> cells' )
>> + #(slot totalRows 'Lets you change the amount of rows in the spreadsheet'
>> Number readWrite Player getTotalRows Player setTotalRows:  )
>> + #(slot totalColumns 'Lets you change the amount of columns in the
>> spreadsheet' Number readWrite Player getTotalColumns Player setTotalColumns:
>>  )
>> + #(slot rowIndex 'Sets the current row' Number readWrite Player
>> getRowIndex Player setRowIndex:  )
>> + #(slot columnIndex 'Sets the current column' Number readWrite Player
>> getColumnIndex Player setColumnIndex:  )
>> + #(slot currentCharacters 'Lets you read and modify the characters of the
>> current cell' String readWrite Player getCurrentCharacters Player
>> setCurrentCharacters:  )
>> + #(slot currentNumericValue 'Lets you read and modify the numeric value
>> of the current cell' Number readWrite Player getCurrentNumericValue Player
>> setCurrentNumericValue:  )
>> + ))
>> +
>> + (#'data i/o' (
>> + #(slot writeMode 'Lets you choose a write mode (overwrite or append)'
>> WriteMode readWrite Player getWriteMode Player setWriteMode:  )
>> + #(slot csvSeparator 'Lets you choose a character to act as a separator
>> between cells' String readWrite Player getCsvSeparator Player
>> setCsvSeparator:  )
>> + #(slot csvFileName 'Sets the name of the file to import/export data'
>> String readWrite Player getCsvFileName Player setCsvFileName:  )
>> + #(command importDataFromFile 'Reads the data from the file and loads it
>> in the spreadsheet')
>> + #(command exportDataToFile 'Writes the data from the spreadsheet into
>> the file')
>> + ))
>> +
>> + )!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph class>>initialize (in category 'class
>> initialization') -----
>> + initialize
>> +       "
>> +       self initialize.
>> +       "
>> +       Vocabulary addStandardVocabulary: (SymbolListType new
>> vocabularyName: #WriteMode;
>> +                        symbols: #(#overwrite #append)).!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph class>>model: (in category 'instance
>> creation') -----
>> + model: aSkObject
>> +       ^ super new model: aSkObject!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>acceptDroppingMorph:event: (in category
>> 'drag and drop') -----
>> + acceptDroppingMorph: aMorph event: evt
>> +       | cellPos successed |
>> +       cellPos _ self screenToCell: aMorph topLeft.
>> +       (cellPos x < 1
>> +                       or: [cellPos y < 1])
>> +               ifTrue: [self beep: 'arrow'.
>> +                       ^ aMorph rejectDropMorphEvent: evt].
>> +       successed _ false.
>> +       successed _ (aMorph isKindOf: SkGridPartsMorph)
>> +                               ifTrue: [self acceptRuleMorph: aMorph
>> event: evt]
>> +                               ifFalse: [aMorph class = PhraseTileMorph
>> +                                               ifTrue: [self
>> acceptPhraseTileMorph: aMorph event: evt]
>> +                                               ifFalse: [aMorph class =
>> TileMorph
>> +                                                               ifTrue:
>> [self acceptTileMorph: aMorph event: evt]]].
>> +       successed
>> +               ifTrue: [self beep: 'cassete']
>> +               ifFalse: [self beep: 'arrow'.
>> +                       aMorph rejectDropMorphEvent: evt]!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>acceptPhraseTileMorph:event: (in
>> category 'drag and drop') -----
>> + acceptPhraseTileMorph: aMorph event: evt
>> +       | setter getter |
>> +       getter _ aMorph operatorTile operatorOrExpression.
>> +       setter _ ('set'
>> +                               , (getter allButFirst: 3) , ':') asSymbol.
>> +       self model
>> +               modelAt: (self screenToCell: aMorph topLeft)
>> +               for: aMorph actualObject
>> +               getter: getter
>> +               setter: setter.
>> +       ^ true!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>acceptRuleMorph:event: (in category
>> 'drag and drop') -----
>> + acceptRuleMorph: aMorph event: evt
>> +       | cellPos card |
>> +       model parent adopt: aMorph model rule.
>> +       cellPos _ (self screenToCell: aMorph topLeft)
>> +                               + (aMorph cellOrigin - aMorph area
>> topLeft).
>> +       self model textAt: cellPos put: '=' , aMorph model codeString.
>> +       card _ self
>> +                               cardMorphAt: cellPos
>> +                               ifAbsent: [^ false].
>> +       card model rule = aMorph model rule
>> +               ifFalse: ["maybe successed"
>> +                       ^ false].
>> +       aMorph halo
>> +               ifNotNilDo: [:halo | halo setTarget: card].
>> +       ^ true!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>acceptTileMorph:event: (in category
>> 'drag and drop') -----
>> + acceptTileMorph: aMorph event: evt
>> +       | object |
>> +       object _ aMorph actualObject.
>> +       self model
>> +               at: (self screenToCell: aMorph topLeft)
>> +               put: object.
>> +       ^ true!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>areaChanged (in category 'layout')
>> -----
>> + areaChanged
>> +       super areaChanged.
>> +       self
>> +               submorphsDo: [:m | (m isKindOf: SkGridMorph)
>> +                               ifTrue: [m areaChanged]]!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>cardMorphAt:ifAbsent: (in category
>> 'accessing') -----
>> + cardMorphAt: aPoint ifAbsent: aBlock
>> +       ^ self submorphs
>> +               detect: [:m | m class = SkCardMorph
>> +                               and: [m cellOrigin = aPoint]]
>> +               ifNone: aBlock!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>cellExtentAt: (in category 'layout')
>> -----
>> + cellExtentAt: aPoint
>> +       | cellExtent x y |
>> +       ^ (model notNil
>> +                       and: [(cellExtent _ model findName: self
>> cellExtentName) class == SkSheet ])
>> +               ifTrue: [x _ (cellExtent
>> +                                               at: aPoint x @ 1
>> +                                               ifAbsent: [SkGridMorph
>> standardCellExtent]) x.
>> +                       y _ (cellExtent
>> +                                               at: 1 @ aPoint y
>> +                                               ifAbsent: [SkGridMorph
>> standardCellExtent]) y.
>> +                       x @ y]
>> +               ifFalse: [SkGridMorph standardCellExtent]!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>cellExtentName (in category 'layout')
>> -----
>> + cellExtentName
>> +       ^ 'CellExtent'!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>copySelection (in category 'action')
>> -----
>> + copySelection
>> +       | text |
>> +       text _ Text
>> +                               streamContents: [:aStream | self selection
>> top
>> +                                               to: self selection bottom
>> - 1
>> +                                               do: [:y |
>> +                                                       (self selection
>> left to: self selection right - 1)
>> +                                                               do: [:x |
>> aStream
>> +
>>       nextPutAll: (model textAt: x @ y)]
>> +
>> separatedBy: [aStream nextPut: Character tab].
>> +                                                       aStream nextPut:
>> Character cr]].
>> +       Clipboard clipboardText: text!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>cut (in category 'action') -----
>> + cut
>> +       self copySelection.
>> +       self selection top
>> +               to: self selection bottom - 1
>> +               do: [:y | self selection left
>> +                               to: self selection right - 1
>> +                               do: [:x | model textAt: x @ y put: '']]!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>drawCell:at: (in category 'drawing')
>> -----
>> + drawCell: aCanvas at: aPoint
>> +       (aPoint x isZero
>> +                       or: [aPoint y isZero])
>> +               ifTrue: [^ self
>> +                               drawLabel: aCanvas
>> +                               string: (self labelAt: aPoint)
>> +                               at: aPoint].
>> +       self flag: #TODO.
>> +       self
>> +               drawContents: ((showFormula notNil
>> +                                       and: [showFormula])
>> +                               ifTrue: [model textAt: aPoint]
>> +                               ifFalse: [ showFormula _ false.model at:
>> aPoint.])
>> +               on: aCanvas
>> +               at: aPoint!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>drawOn: (in category 'drawing') -----
>> + drawOn: aCanvas
>> +       super drawOn: aCanvas.
>> +       dropZone
>> +               ifNotNil: [aCanvas
>> +                               fillRectangle: (self
>> +                                               cellAreaToScreen:
>> (dropZone intersect: area))
>> +                               fillStyle: (SkColorSet labelFor: model)
>> +                               borderStyle: self borderStyle].
>> +       self drawDependMap: aCanvas.
>> +       self drawBorder: aCanvas.
>> +       self drawContents: aCanvas!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>editContents (in category 'accessing')
>> -----
>> + editContents
>> + self selection ifNil: [^''].
>> +       ^ model
>> +               ifNil: ['']
>> +               ifNotNil: [model textAt: self selection origin]!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>editContents: (in category 'accessing')
>> -----
>> + editContents: aText
>> +       "Accept text"
>> +       self selection ifNil: [^self].
>> +       model
>> +               ifNotNil: [model textAt: self selection origin put:
>> aText].
>> +       selectionMorph deleteEditor!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>fillStyle (in category 'visual
>> properties') -----
>> + fillStyle
>> +       ^ SkColorSet baseFor: model rule!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>goto: (in category 'navigation') -----
>> + goto: aSkObject
>> +       | grid |
>> +       self beep: 'rice'.
>> +       grid _ aSkObject grid.
>> +       self replace: grid.
>> +       grid history: self.
>> +       ^ grid!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>handlesKeyboard: (in category 'event
>> handling') -----
>> + handlesKeyboard: evt
>> +       ^ true!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>handlesMouseDown: (in category 'event
>> handling') -----
>> + handlesMouseDown: evt
>> +       ^ true!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>handlesMouseOver: (in category 'event
>> handling') -----
>> + handlesMouseOver: evt
>> +       ^ true
>> + !
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>handlesMouseOverDragging: (in category
>> 'event handling') -----
>> + handlesMouseOverDragging: evt
>> +
>> +       ^ true
>> + !
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>height: (in category 'accessing') -----
>> + height: aNumber
>> +       ^ self setExtentFromHalo: self width @ aNumber!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>history: (in category 'navigation')
>> -----
>> + history: aSkSheetMorph
>> +       history
>> +               ifNil: [history _ aSkSheetMorph]!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>initialize (in category
>> 'initialization') -----
>> + initialize
>> +       super initialize.
>> +       selectionMorph _ SkGridSelectionMorph new holder: self.
>> +       self
>> +               area: (1 @ 1 extent: 4 @ 4).
>> +       self
>> +               borderStyle: (RaisedBorder color: Color black width: 1).
>> +       self
>> +               fillStyle: (SolidFillStyle
>> +                               color: (Color
>> +                                               r: 1.0
>> +                                               g: 0.935
>> +                                               b: 0.839)).
>> +       self cornerStyle: #rounded.
>> +       self selection: nil.
>> +       showFormula _ false!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>initializeToStandAlone (in category
>> 'parts bin') -----
>> + initializeToStandAlone
>> +       super initializeToStandAlone.
>> +       self model: SkSheet new attachProject.
>> +       self
>> +               area: (0 @ 0 extent: 3 @ 3)!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>isModelStepping (in category 'stepping
>> and presenter') -----
>> + isModelStepping
>> +       ^ model isStepping!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>isMorphicModel (in category
>> 'classification') -----
>> + isMorphicModel
>> +       ^true!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>keyStroke: (in category 'event
>> handling') -----
>> + keyStroke: evt
>> +       selectionMorph keyStroke: evt!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>model (in category 'accessing') -----
>> + model
>> +       ^ model!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>model: (in category 'accessing') -----
>> + model: anObject
>> +       model
>> +               ifNotNil: [model removeDependent: self].
>> +       anObject
>> +               ifNotNil: [anObject addDependent: self].
>> +       model _ anObject.
>> +       self update: #all.
>> + !
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>mouseDown: (in category 'event
>> handling') -----
>> + mouseDown: event
>> +       self
>> +               selectSelection: (self screenToCell: event position).
>> +       event yellowButtonPressed
>> +               ifTrue: [^ selectionMorph invokeMenu: event].
>> +       "For easy doublecilck to selection"
>> +       event hand waitForClicksOrDrag: selectionMorph event: event.
>> +       event hand mouseFocus: selectionMorph!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>mouseEnter: (in category 'event
>> handling') -----
>> + mouseEnter: evt
>> +       | hand tile |
>> +       hand _ evt hand.
>> +       hand submorphs size = 1
>> +               ifFalse: [^ self].
>> +       tile _ hand firstSubmorph renderedMorph.
>> +       (self wantsDroppedMorph: tile event: evt)
>> +               ifFalse: [^ self].
>> +       self
>> +               startStepping: #trackDropZones
>> +               at: Time millisecondClockValue
>> +               arguments: nil
>> +               stepTime: 20!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>mouseEnterDragging: (in category 'event
>> handling') -----
>> + mouseEnterDragging: evt
>> +       "Test button state elsewhere if at all"
>> +       ^ self mouseEnter: evt!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>mouseLeave: (in category 'event
>> handling') -----
>> + mouseLeave: evt
>> +       dropZone _ nil.
>> +       self stopSteppingSelector: #trackDropZones!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>mouseLeaveDragging: (in category 'event
>> handling') -----
>> + mouseLeaveDragging: evt
>> +       ^ self mouseLeave: evt!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>mouseUpTick:onItem: (in category 'event
>> handling') -----
>> + mouseUpTick: evt onItem: aMorph
>> +       aMorph isTicking
>> +               ifTrue: [model stopStepping.
>> +                       aMorph isTicking: false]
>> +               ifFalse: [model startStepping.
>> +                       aMorph isTicking: true]!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>openLibrary (in category 'action')
>> -----
>> + openLibrary
>> +       (SkObject root at: 'Library') grid openInHand!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>paste (in category 'action') -----
>> + paste
>> +       | pos selection isJustACell |
>> +       selection _ self selection.
>> +       isJustACell _ selection extent = (1 @ 1).
>> +       pos _ selection origin.
>> +       Clipboard clipboardText
>> +               split: Character cr
>> +               do: [:line |
>> +                       line
>> +                               split: Character tab
>> +                               do: [:field |
>> +                                       (isJustACell
>> +                                                       or: [selection
>> containsPoint: pos])
>> +                                               ifTrue: [model textAt: pos
>> put: field].
>> +                                       pos _ pos + (1 @ 0)].
>> +                       pos _ selection left @ (pos y + 1)]!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>previousPage (in category 'navigation')
>> -----
>> + previousPage
>> +       self beep: 'rice'.
>> +       ^ history
>> +               ifNotNil: [self replace: history]!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>privateRemoveMorph: (in category
>> 'private') -----
>> + privateRemoveMorph: aMorph
>> +       aMorph class = SkCardMorph
>> +               ifTrue: [self beep: 'cork'.
>> +                       self model textAt: aMorph cellOrigin put: ''].
>> +       super privateRemoveMorph: aMorph!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>replace: (in category 'navigation')
>> -----
>> + replace: aSkSheetMorph
>> +       aSkSheetMorph area: self area.
>> +       aSkSheetMorph position: self position.
>> +       self owner replaceSubmorph: self by: aSkSheetMorph.
>> +       ^ aSkSheetMorph!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>selectSelection: (in category 'action')
>> -----
>> + selectSelection: aPoint
>> +       "Select at event position"
>> +       aPoint
>> +               ifNil: [^ self].
>> +       self
>> +               selection: (aPoint extent: 1 @ 1).
>> +       self changed!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>selection (in category 'accessing')
>> -----
>> + selection
>> +       ^ selectionMorph area!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>selection: (in category 'accessing')
>> -----
>> + selection: aRectangle
>> +       (submorphs indexOf: selectionMorph) = 1
>> +               ifFalse: [self addMorphFront: selectionMorph].
>> +       selectionMorph area: aRectangle!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>selectionMorph (in category
>> 'accessing') -----
>> + selectionMorph
>> +       ^ selectionMorph!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>setCellExtentFromHalo: (in category
>> 'layout') -----
>> + setCellExtentFromHalo: newExtent
>> +       | eachExtent cellExtent |
>> +       model
>> +               ifNil: [^ self].
>> +       cellExtent _ model
>> +                               at: self cellExtentName
>> +                               ifAbsent: [model
>> +                                               at: self cellExtentName
>> +                                               put: (SkSheet new parent:
>> model)].
>> +       eachExtent _ newExtent // self selection extent max: 10 @ 10.
>> +       self selection left
>> +               to: self selection right - 1
>> +               do: [:x | cellExtent at: x @ 1 put: eachExtent].
>> +       self selection top
>> +               to: self selection bottom - 1
>> +               do: [:y | cellExtent at: 1 @ y put: eachExtent].
>> +       self areaChanged.
>> +       self changed!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>setExtentFromHalo: (in category
>> 'layout') -----
>> + setExtentFromHalo: newExtent
>> +       | card cardMorph direction size |
>> +       super setExtentFromHalo: newExtent.
>> +       direction := nil.
>> +       area height = 1
>> +               ifTrue:
>> +                       [direction := #right.
>> +                       size := area width - 1]
>> +               ifFalse:
>> +                       [area width = 1
>> +                               ifTrue:
>> +                                       [direction := #down.
>> +                                       size := area height - 1]].
>> +       direction ifNotNil:
>> +                       [card := model new.
>> +                       card direction: direction.
>> +                       card size: size.
>> +                       cardMorph := SkCardMorph model: card.
>> +                       cardMorph position: self position.
>> +                       self owner addMorph: cardMorph.
>> +                       self halo ifNotNilDo: [:helo | helo setTarget:
>> cardMorph].
>> +                       self delete]!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>showFormula (in category 'accessing')
>> -----
>> + showFormula
>> +       ^ showFormula!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>spawn (in category 'action') -----
>> + spawn
>> +       model inspectAt: self selection topLeft!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>spawn: (in category 'action') -----
>> + spawn: anObject
>> +       self spawn!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>startStepping (in category 'stepping
>> and presenter') -----
>> + startStepping
>> +       model
>> +               ifNotNil: [model startStepping].
>> +       super startStepping.
>> + !
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>step (in category 'stepping and
>> presenter') -----
>> + step
>> +       self changed!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>toggleFormula (in category 'accessing')
>> -----
>> + toggleFormula
>> +       showFormula _ showFormula not!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>trackDropZones (in category 'event
>> handling') -----
>> + trackDropZones
>> +       | hand target |
>> +       hand _ self primaryHand.
>> +       ((self hasOwner: hand) not
>> +                       and: [hand submorphCount > 0])
>> +               ifTrue: [target _ hand submorphs first.
>> +                       dropZone _ (self screenToCell: target topLeft)
>> +                                               extent: ((target
>> respondsTo: #area)
>> +                                                               ifTrue:
>> [target area extent]
>> +                                                               ifFalse:
>> [1 @ 1]).
>> +                       (dropZone topLeft x < 1
>> +                                       or: [dropZone topLeft y < 1])
>> +                               ifTrue: [dropZone _ nil].
>> +                       self changed]
>> +               ifFalse: [dropZone _ nil.
>> +                       self stopSteppingSelector: #trackDropZones]!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>tryToRenameTo: (in category
>> 'accessing') -----
>> + tryToRenameTo: aName
>> +       ^ model
>> +               ifNotNilDo: [:m | m name: aName]!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>upPage (in category 'navigation') -----
>> + upPage
>> +       self beep: 'rice'.
>> +       ^ self goto: model up!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>update: (in category 'updating') -----
>> + update: anObject
>> +       anObject = #cardList
>> +               ifTrue: [self updateCardList].
>> +       anObject = #all
>> +               ifTrue: [self updateCardList].
>> +       self changed!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>updateCardList (in category 'updating')
>> -----
>> + updateCardList
>> +       | cardList morph |
>> +       cardList _ model cardList: self visibleArea.
>> +       self
>> +               removeAllMorphsIn: (self submorphs
>> +                               select: [:m | m class == SkCardMorph]).
>> +       cardList
>> +               do: [:cardInfo |
>> +                       morph _ SkCardMorph model: cardInfo value.
>> +                       morph holder: self.
>> +                       self addMorph: morph.
>> +                       morph cellOrigin: cardInfo key].
>> +       selectionMorph hide!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>veryDeepInner: (in category 'copying')
>> -----
>> + veryDeepInner: deepCopier
>> +       "history is not copied"
>> +       model _ model veryDeepCopyWith: deepCopier.
>> +       selectionMorph _ (selectionMorph veryDeepCopyWith: deepCopier)
>> holder: self.
>> +       dropZone _ dropZone veryDeepCopyWith: deepCopier.
>> +       showFormula _ showFormula veryDeepCopyWith: deepCopier.
>> +       super veryDeepInner: deepCopier!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>wantsDroppedMorph:event: (in category
>> 'drag and drop') -----
>> + wantsDroppedMorph: aMorph event: anEvent
>> +       ^ aMorph class = PhraseTileMorph
>> +               or: [aMorph class = TileMorph
>> +                               or: [aMorph isKindOf: SkGridPartsMorph]]!
>>
>> Item was added:
>> + ----- Method: SkBasicSheetMorph>>width: (in category 'accessing') -----
>> + width: aNumber
>> +       ^ self setExtentFromHalo: aNumber @ self height!
>>
>> Item was changed:
>>  ----- Method: SkCardMorph>>doubleClick: (in category 'event handling')
>> -----
>>  doubleClick: evt
>>        | sheet |
>>        (holder notNil
>>                        and: [owner = holder])
>>                ifTrue: [^ holder goto: model].
>>        self owner = World
>>                ifTrue: [self delete].
>> +       sheet _ SkBasicSheetMorph allInstances
>> -       sheet _ SkSheetMorph allInstances
>>                                detect: [:each | each world = World
>>                                                and: [each model = model]]
>>                                ifNone: [model grid].
>>        sheet position: self position;
>>                 openInWorld!
>>
>> Item was changed:
>>  ----- Method: SkCardMorph>>replaceToSheet: (in category 'layout') -----
>>  replaceToSheet: newCellExtent
>>        "Create new spreadsheet for the model. And I will be deleted"
>>        | sheetMorph |
>>        (newCellExtent y > 1
>>                        and: [newCellExtent x > 1])
>> +               ifTrue: [sheetMorph _ SkBasicSheetMorph new model: model.
>> -               ifTrue: [sheetMorph _ SkSheetMorph new model: model.
>>                        sheetMorph
>>                                area: (0 @ 0 extent: newCellExtent).
>>                        sheetMorph position: self position.
>>                        self owner addMorph: sheetMorph.
>>                        self halo
>>                                ifNotNilDo: [:helo | helo setTarget:
>> sheetMorph].
>>                        ^ self delete]!
>>
>> Item was changed:
>>  ----- Method: SkObject class>>grid (in category 'instance creation')
>> -----
>>  grid
>>        | case grid |
>> +       grid _ SkBasicSheetMorph new model: (case _ self new).
>> -       grid _ SkSheetMorph new model: (case _ self new).
>>        grid area: case defaultArea.
>>        ^ grid!
>>
>> Item was changed:
>>  ----- Method: SkObject>>grid (in category 'initialization') -----
>>  grid
>>        | grid |
>> +       grid _ SkBasicSheetMorph new model: self.
>> -       grid _ SkSheetMorph new model: self.
>>        grid area: self defaultArea.
>>        ^ grid!
>>
>> Item was changed:
>> + Morph subclass: #SkSheetMorph
>> +       instanceVariableNames: 'sheet'
>> - SkGridMorph subclass: #SkSheetMorph
>> -       instanceVariableNames: 'history model selectionMorph dropZone
>> showFormula'
>>        classVariableNames: ''
>>        poolDictionaries: ''
>>        category: 'Skeleton-Base'!
>> -
>> - !SkSheetMorph commentStamp: 'tak 12/11/2003 19:10' prior: 0!
>> - I am a presentation compornent for showing as 2-D grid.
>> - The contents what I show is depended on a model.
>> - I never access to a cell directly except through model because
>> - a cell doesn't know where he locates. Basically, Position information is
>> - only in model.
>> -
>> - cellArea              Rectangle -- the area of cells for drawing. Actual
>> size of table is cellArea extent.
>> - model         SkSheet --
>> - !
>>
>> Item was changed:
>> + ----- Method: SkSheetMorph class>>additionsToViewerCategories (in
>> category 'as yet unclassified') -----
>> - ----- Method: SkSheetMorph class>>additionsToViewerCategories (in
>> category 'viewer categories') -----
>>  additionsToViewerCategories
>> +       ^(Smalltalk at: #SkRawSheetMorph ifAbsent: [^ #()])
>> +               additionsToViewerCategories!
>> - ^ #(
>> - (#spreadsheet (
>> - #(command clearTable 'Deletes the contents of all cells')
>> - #(command clearRow 'Deletes the contents of the current row cells' )
>> - #(command clearColumn 'Deletes the contents of the current columns
>> cells' )
>> - #(slot totalRows 'Lets you change the amount of rows in the spreadsheet'
>> Number readWrite Player getTotalRows Player setTotalRows:  )
>> - #(slot totalColumns 'Lets you change the amount of columns in the
>> spreadsheet' Number readWrite Player getTotalColumns Player setTotalColumns:
>>  )
>> - #(slot rowIndex 'Sets the current row' Number readWrite Player
>> getRowIndex Player setRowIndex:  )
>> - #(slot columnIndex 'Sets the current column' Number readWrite Player
>> getColumnIndex Player setColumnIndex:  )
>> - #(slot currentCharacters 'Lets you read and modify the characters of the
>> current cell' String readWrite Player getCurrentCharacters Player
>> setCurrentCharacters:  )
>> - #(slot currentNumericValue 'Lets you read and modify the numeric value
>> of the current cell' Number readWrite Player getCurrentNumericValue Player
>> setCurrentNumericValue:  )
>> - ))
>> -
>> - (#'data i/o' (
>> - #(slot writeMode 'Lets you choose a write mode (overwrite or append)'
>> WriteMode readWrite Player getWriteMode Player setWriteMode:  )
>> - #(slot csvSeparator 'Lets you choose a character to act as a separator
>> between cells' String readWrite Player getCsvSeparator Player
>> setCsvSeparator:  )
>> - #(slot csvFileName 'Sets the name of the file to import/export data'
>> String readWrite Player getCsvFileName Player setCsvFileName:  )
>> - #(command importDataFromFile 'Reads the data from the file and loads it
>> in the spreadsheet')
>> - #(command exportDataToFile 'Writes the data from the spreadsheet into
>> the file')
>> - ))
>> -
>> - )!
>>
>> Item was changed:
>> + ----- Method: SkSheetMorph class>>descriptionForPartsBin (in category
>> 'as yet unclassified') -----
>> - ----- Method: SkSheetMorph class>>descriptionForPartsBin (in category
>> 'parts bin') -----
>>  descriptionForPartsBin
>> +       ^ self partName:        'Spreadsheet' translated
>> +               categories:             {'Skeleton' translated}
>> +               documentation:  'A spreadsheet' translated!
>> -       ^ self partName:        'Spread Sheet'
>> -               categories:             #('Skeleton')
>> -               documentation:  'A spread sheet'!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph class>>formPreviousPage (in category
>> 'constants') -----
>> - formPreviousPage
>> -  ^((ColorForm
>> -       extent: 5@9
>> -       depth: 1
>> -       fromArray: #( 4026531840 3758096384 3489660928 2952790016
>> 1879048192 2952790016 3489660928 3758096384 4026531840)
>> -       offset: 0@0)
>> -       colorsFromArray: #(#(0.0 0.0 0.0) #( )  ))
>> - " form storeString "!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph class>>formUpPage (in category 'constants')
>> -----
>> - formUpPage
>> -  ^((ColorForm
>> -       extent: 9@5
>> -       depth: 2
>> -       fromArray: #( 2859106304 2845474816 2795929600 2326298624
>> 1431650304)
>> -       offset: 0@0)
>> -       colorsFromArray: #(#(0.004 0.004 0.008) #(0.0 0.0 0.004) #( )
>> #(0.0 0.0 0.0)  ))
>> - " form storeString "!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph class>>initialize (in category 'class
>> initialization') -----
>> - initialize
>> -       "
>> -       self initialize.
>> -       "
>> -       Vocabulary addStandardVocabulary: (SymbolListType new
>> vocabularyName: #WriteMode;
>> -                        symbols: #(#overwrite #append)).!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph class>>model: (in category 'instance
>> creation') -----
>> - model: aSkObject
>> -       ^ super new model: aSkObject!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>acceptDroppingMorph:event: (in category
>> 'drag and drop') -----
>> - acceptDroppingMorph: aMorph event: evt
>> -       | cellPos successed |
>> -       cellPos _ self screenToCell: aMorph topLeft.
>> -       (cellPos x < 1
>> -                       or: [cellPos y < 1])
>> -               ifTrue: [self beep: 'arrow'.
>> -                       ^ aMorph rejectDropMorphEvent: evt].
>> -       successed _ false.
>> -       successed _ (aMorph isKindOf: SkGridPartsMorph)
>> -                               ifTrue: [self acceptRuleMorph: aMorph
>> event: evt]
>> -                               ifFalse: [aMorph class = PhraseTileMorph
>> -                                               ifTrue: [self
>> acceptPhraseTileMorph: aMorph event: evt]
>> -                                               ifFalse: [aMorph class =
>> TileMorph
>> -                                                               ifTrue:
>> [self acceptTileMorph: aMorph event: evt]]].
>> -       successed
>> -               ifTrue: [self beep: 'cassete']
>> -               ifFalse: [self beep: 'arrow'.
>> -                       aMorph rejectDropMorphEvent: evt]!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>acceptPhraseTileMorph:event: (in category
>> 'drag and drop') -----
>> - acceptPhraseTileMorph: aMorph event: evt
>> -       | setter getter |
>> -       getter _ aMorph operatorTile operatorOrExpression.
>> -       setter _ ('set'
>> -                               , (getter allButFirst: 3) , ':') asSymbol.
>> -       self model
>> -               modelAt: (self screenToCell: aMorph topLeft)
>> -               for: aMorph actualObject
>> -               getter: getter
>> -               setter: setter.
>> -       ^ true!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>acceptRuleMorph:event: (in category 'drag
>> and drop') -----
>> - acceptRuleMorph: aMorph event: evt
>> -       | cellPos card |
>> -       model parent adopt: aMorph model rule.
>> -       cellPos _ (self screenToCell: aMorph topLeft)
>> -                               + (aMorph cellOrigin - aMorph area
>> topLeft).
>> -       self model textAt: cellPos put: '=' , aMorph model codeString.
>> -       card _ self
>> -                               cardMorphAt: cellPos
>> -                               ifAbsent: [^ false].
>> -       card model rule = aMorph model rule
>> -               ifFalse: ["maybe successed"
>> -                       ^ false].
>> -       aMorph halo
>> -               ifNotNilDo: [:halo | halo setTarget: card].
>> -       ^ true!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>acceptTileMorph:event: (in category 'drag
>> and drop') -----
>> - acceptTileMorph: aMorph event: evt
>> -       | object |
>> -       object _ aMorph actualObject.
>> -       self model
>> -               at: (self screenToCell: aMorph topLeft)
>> -               put: object.
>> -       ^ true!
>>
>> Item was added:
>> + ----- Method: SkSheetMorph>>addPageControls (in category
>> 'initialization') -----
>> + addPageControls
>> +       | panel prev up title |
>> +
>> +       panel := AlignmentMorph newRow
>> +                               color: Color transparent;
>> +                               cellInset: 3;
>> +                               hResizing: #shrinkWrap;
>> +                               vResizing: #shrinkWrap.
>> +       panel addMorphBack: self tickMorph.
>> +       prev := SketchMorph withForm: self prevButtonForm.
>> +       prev
>> +               on: #mouseDown
>> +               send: #previousPage
>> +               to: sheet.
>> +       prev position: 32 @ 3.
>> +       prev setBalloonText: 'View the previous sheet.' translated.
>> +       panel addMorphBack: prev.
>> +       up := SketchMorph withForm: self upButtonForm.
>> +       up
>> +               on: #mouseDown
>> +               send: #upPage
>> +               to: sheet.
>> +       up position: 44 @ 4.
>> +       up setBalloonText: 'View the definision or the parent rule.'
>> translated.
>> +       panel addMorphBack: up.
>> +       title := UpdatingStringMorph new useStringFormat
>> +               target: self;
>> +               putSelector: #setNameTo:;
>> +               getSelector: #externalName.
>> +       panel addMorphBack: title.
>> +       self addMorph: panel!
>>
>> Item was added:
>> + ----- Method: SkSheetMorph>>addSheet: (in category 'initialization')
>> -----
>> + addSheet: aSheet
>> +       self addMorph: (sheet := aSheet).
>> +       self renameTo: sheet externalName!
>>
>> Item was added:
>> + ----- Method: SkSheetMorph>>area: (in category 'sheet delegation') -----
>> + area: aRectangle
>> +       ^ sheet area: aRectangle
>> +       !
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>areaChanged (in category 'layout') -----
>> - areaChanged
>> -       super areaChanged.
>> -       self
>> -               submorphsDo: [:m | (m isKindOf: SkGridMorph)
>> -                               ifTrue: [m areaChanged]]!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>cardMorphAt:ifAbsent: (in category
>> 'accessing') -----
>> - cardMorphAt: aPoint ifAbsent: aBlock
>> -       ^ self submorphs
>> -               detect: [:m | m class = SkCardMorph
>> -                               and: [m cellOrigin = aPoint]]
>> -               ifNone: aBlock!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>cellExtentAt: (in category 'layout') -----
>> - cellExtentAt: aPoint
>> -       | cellExtent x y |
>> -       ^ (model notNil
>> -                       and: [(cellExtent _ model findName: self
>> cellExtentName) class == SkSheet ])
>> -               ifTrue: [x _ (cellExtent
>> -                                               at: aPoint x @ 1
>> -                                               ifAbsent: [SkGridMorph
>> standardCellExtent]) x.
>> -                       y _ (cellExtent
>> -                                               at: 1 @ aPoint y
>> -                                               ifAbsent: [SkGridMorph
>> standardCellExtent]) y.
>> -                       x @ y]
>> -               ifFalse: [SkGridMorph standardCellExtent]!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>cellExtentName (in category 'layout') -----
>> - cellExtentName
>> -       ^ 'CellExtent'!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>copySelection (in category 'action') -----
>> - copySelection
>> -       | text |
>> -       text _ Text
>> -                               streamContents: [:aStream | self selection
>> top
>> -                                               to: self selection bottom
>> - 1
>> -                                               do: [:y |
>> -                                                       (self selection
>> left to: self selection right - 1)
>> -                                                               do: [:x |
>> aStream
>> -
>>       nextPutAll: (model textAt: x @ y)]
>> -
>> separatedBy: [aStream nextPut: Character tab].
>> -                                                       aStream nextPut:
>> Character cr]].
>> -       Clipboard clipboardText: text!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>cut (in category 'action') -----
>> - cut
>> -       self copySelection.
>> -       self selection top
>> -               to: self selection bottom - 1
>> -               do: [:y | self selection left
>> -                               to: self selection right - 1
>> -                               do: [:x | model textAt: x @ y put: '']]!
>>
>> Item was added:
>> + ----- Method: SkSheetMorph>>doesNotUnderstand: (in category 'dnu') -----
>> + doesNotUnderstand: aMessage
>> +       "Quick hack to automagically generate missing methods"
>> +       self flag: #Richo.
>> +       (sheet respondsTo: aMessage selector)
>> +               ifTrue: [ | str |
>> +                       str := aMessage createStubMethod allButLast: 24.
>> +                       self class compile: str, '^ sheet ', str
>> classified: #'autogenerated'.
>> +                       ^aMessage sentTo: self.
>> +                       ]
>> +               ifFalse: [^super doesNotUnderstand: aMessage]!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>drawCell:at: (in category 'drawing') -----
>> - drawCell: aCanvas at: aPoint
>> -       (aPoint x isZero
>> -                       or: [aPoint y isZero])
>> -               ifTrue: [^ self
>> -                               drawLabel: aCanvas
>> -                               string: (self labelAt: aPoint)
>> -                               at: aPoint].
>> -       self flag: #TODO.
>> -       self
>> -               drawContents: ((showFormula notNil
>> -                                       and: [showFormula])
>> -                               ifTrue: [model textAt: aPoint]
>> -                               ifFalse: [ showFormula _ false.model at:
>> aPoint.])
>> -               on: aCanvas
>> -               at: aPoint!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>drawName: (in category 'drawing') -----
>> - drawName: aCanvas
>> -       | name |
>> -       name := model ruleName asString.
>> -       model isInstance
>> -               ifTrue: [name := name , '*'].
>> -       aCanvas
>> -               clipBy: self bounds
>> -               during: [:canvas | canvas
>> -                               drawString: name
>> -                               at: self topLeft + (28 @ 6)
>> -                               font: self class titleStyle
>> -                               color: Color gray]!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>drawOn: (in category 'drawing') -----
>> - drawOn: aCanvas
>> -       super drawOn: aCanvas.
>> -       self drawGrabAreaOn: aCanvas.
>> -       dropZone
>> -               ifNotNil: [aCanvas
>> -                               fillRectangle: (self
>> -                                               cellAreaToScreen:
>> (dropZone intersect: area))
>> -                               fillStyle: (SkColorSet labelFor: model)
>> -                               borderStyle: self borderStyle].
>> -       self drawDependMap: aCanvas.
>> -       self drawName: aCanvas.
>> -       self drawBorder: aCanvas.
>> -       self drawContents: aCanvas!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>editContents (in category 'accessing') -----
>> - editContents
>> - self selection ifNil: [^''].
>> -       ^ model
>> -               ifNil: ['']
>> -               ifNotNil: [model textAt: self selection origin]!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>editContents: (in category 'accessing')
>> -----
>> - editContents: aText
>> -       "Accept text"
>> -       self selection ifNil: [^self].
>> -       model
>> -               ifNotNil: [model textAt: self selection origin put:
>> aText].
>> -       selectionMorph deleteEditor!
>>
>> Item was added:
>> + ----- Method: SkSheetMorph>>extent: (in category 'accessing') -----
>> + extent: newExtent
>> +
>> +       sheet setExtentFromHalo: (newExtent max: (165@77)) -
>> +                                                               (self
>> layoutInset + self cellInset + (0 @ self pageControls height))!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>fillStyle (in category 'visual properties')
>> -----
>> - fillStyle
>> -       ^ SkColorSet baseFor: model rule!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>goto: (in category 'navigation') -----
>> - goto: aSkObject
>> -       | grid |
>> -       self beep: 'rice'.
>> -       grid _ aSkObject grid.
>> -       self replace: grid.
>> -       grid history: self.
>> -       ^ grid!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>handlesKeyboard: (in category 'event
>> handling') -----
>> - handlesKeyboard: evt
>> -       ^ true!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>handlesMouseDown: (in category 'event
>> handling') -----
>> - handlesMouseDown: evt
>> -       ^ (self grabArea containsPoint: evt position) not!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>handlesMouseOver: (in category 'event
>> handling') -----
>> - handlesMouseOver: evt
>> -       ^ true
>> - !
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>handlesMouseOverDragging: (in category
>> 'event handling') -----
>> - handlesMouseOverDragging: evt
>> -
>> -       ^ true
>> - !
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>height: (in category 'accessing') -----
>> - height: aNumber
>> -       ^ self setExtentFromHalo: self width @ aNumber!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>history: (in category 'navigation') -----
>> - history: aSkSheetMorph
>> -       history
>> -               ifNil: [history _ aSkSheetMorph]!
>>
>> Item was changed:
>>  ----- Method: SkSheetMorph>>initialize (in category 'initialization')
>> -----
>>  initialize
>>        super initialize.
>> +       self layoutPolicy:      TableLayout new;
>> +               cellPositioning: #leftCenter;
>> +               cornerStyle: #rounded;
>> +               color: (Color r: 0.645 g: 0.645 b: 1.0);
>> +               borderWidth: 1;
>> +               borderColor: (Color r: 0.516 g: 0.516 b: 1.0);
>> +               listDirection: #topToBottom;
>> +               hResizing: #shrinkWrap;
>> +               vResizing: #shrinkWrap.
>> +       self addSheet: SkBasicSheetMorph newStandAlone;
>> +               addPageControls!
>> -       self showPageControls.
>> -       selectionMorph _ SkGridSelectionMorph new holder: self.
>> -       self
>> -               area: (1 @ 1 extent: 4 @ 4).
>> -       self
>> -               borderStyle: (RaisedBorder color: Color black width: 1).
>> -       self
>> -               fillStyle: (SolidFillStyle
>> -                               color: (Color
>> -                                               r: 1.0
>> -                                               g: 0.935
>> -                                               b: 0.839)).
>> -       self cornerStyle: #rounded.
>> -       self selection: nil.
>> -       showFormula _ false!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>initializeToStandAlone (in category 'parts
>> bin') -----
>> - initializeToStandAlone
>> -       super initializeToStandAlone.
>> -       self model: SkSheet new attachProject.
>> -       self
>> -               area: (0 @ 0 extent: 3 @ 3)!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>isModelStepping (in category 'stepping and
>> presenter') -----
>> - isModelStepping
>> -       ^ model isStepping!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>isMorphicModel (in category
>> 'classification') -----
>> - isMorphicModel
>> -       ^true!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>keyStroke: (in category 'event handling')
>> -----
>> - keyStroke: evt
>> -       selectionMorph keyStroke: evt!
>>
>> Item was changed:
>> + ----- Method: SkSheetMorph>>model (in category 'sheet delegation') -----
>> - ----- Method: SkSheetMorph>>model (in category 'accessing') -----
>>  model
>> +       ^ sheet model!
>> -       ^ model!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>model: (in category 'accessing') -----
>> - model: anObject
>> -       model
>> -               ifNotNil: [model removeDependent: self].
>> -       anObject
>> -               ifNotNil: [anObject addDependent: self].
>> -       model _ anObject.
>> -       self update: #all.
>> - !
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>mouseDown: (in category 'event handling')
>> -----
>> - mouseDown: event
>> -       self
>> -               selectSelection: (self screenToCell: event position).
>> -       event yellowButtonPressed
>> -               ifTrue: [^ selectionMorph invokeMenu: event].
>> -       "For easy doublecilck to selection"
>> -       event hand waitForClicksOrDrag: selectionMorph event: event.
>> -       event hand mouseFocus: selectionMorph!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>mouseEnter: (in category 'event handling')
>> -----
>> - mouseEnter: evt
>> -       | hand tile |
>> -       hand _ evt hand.
>> -       hand submorphs size = 1
>> -               ifFalse: [^ self].
>> -       tile _ hand firstSubmorph renderedMorph.
>> -       (self wantsDroppedMorph: tile event: evt)
>> -               ifFalse: [^ self].
>> -       self
>> -               startStepping: #trackDropZones
>> -               at: Time millisecondClockValue
>> -               arguments: nil
>> -               stepTime: 20!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>mouseEnterDragging: (in category 'event
>> handling') -----
>> - mouseEnterDragging: evt
>> -       "Test button state elsewhere if at all"
>> -       ^ self mouseEnter: evt!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>mouseLeave: (in category 'event handling')
>> -----
>> - mouseLeave: evt
>> -       dropZone _ nil.
>> -       self stopSteppingSelector: #trackDropZones!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>mouseLeaveDragging: (in category 'event
>> handling') -----
>> - mouseLeaveDragging: evt
>> -       ^ self mouseLeave: evt!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>mouseUpTick:onItem: (in category 'event
>> handling') -----
>> - mouseUpTick: evt onItem: aMorph
>> -       aMorph isTicking
>> -               ifTrue: [model stopStepping.
>> -                       aMorph isTicking: false]
>> -               ifFalse: [model startStepping.
>> -                       aMorph isTicking: true]!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>openLibrary (in category 'action') -----
>> - openLibrary
>> -       (SkObject root at: 'Library') grid openInHand!
>>
>> Item was added:
>> + ----- Method: SkSheetMorph>>pageControls (in category 'accessing') -----
>> + pageControls
>> +       ^ self submorphs detect: [:each | each ~~ sheet]!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>paste (in category 'action') -----
>> - paste
>> -       | pos selection isJustACell |
>> -       selection _ self selection.
>> -       isJustACell _ selection extent = (1 @ 1).
>> -       pos _ selection origin.
>> -       Clipboard clipboardText
>> -               split: Character cr
>> -               do: [:line |
>> -                       line
>> -                               split: Character tab
>> -                               do: [:field |
>> -                                       (isJustACell
>> -                                                       or: [selection
>> containsPoint: pos])
>> -                                               ifTrue: [model textAt: pos
>> put: field].
>> -                                       pos _ pos + (1 @ 0)].
>> -                       pos _ selection left @ (pos y + 1)]!
>>
>> Item was added:
>> + ----- Method: SkSheetMorph>>prevButtonForm (in category 'accessing')
>> -----
>> + prevButtonForm
>> +       ^(Form
>> +       extent: 9@16
>> +       depth: 16
>> +       fromArray: #( 0 0 0 0 0 0 0 0 0 831258624 0 0 0 12684 831258624 0
>> 0 0 831279775 831258624 0 0 12684 1386173087 831258624 0 0 831279775
>> 1386173087 831258624 0 12684 1386173087 1386173087 831258624 0 831279775
>> 1386173087 1386173087 831258624 12684 1386173087 1386173087 1386173087
>> 831258624 0 831279775 1386173087 1386173087 831258624 0 12684 1386173087
>> 1386173087 831258624 0 0 831279775 1386173087 831258624 0 0 12684 1386173087
>> 831258624 0 0 0 831279775 831258624 0 0 0 12684 831258624 0 0 0 0 831258624)
>> +       offset: 522@183)!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>previousPage (in category 'navigation')
>> -----
>> - previousPage
>> -       self beep: 'rice'.
>> -       ^ history
>> -               ifNotNil: [self replace: history]!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>privateRemoveMorph: (in category 'private')
>> -----
>> - privateRemoveMorph: aMorph
>> -       aMorph class = SkCardMorph
>> -               ifTrue: [self beep: 'cork'.
>> -                       self model textAt: aMorph cellOrigin put: ''].
>> -       super privateRemoveMorph: aMorph!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>replace: (in category 'navigation') -----
>> - replace: aSkSheetMorph
>> -       aSkSheetMorph area: self area.
>> -       aSkSheetMorph position: self position.
>> -       self delete.
>> -       aSkSheetMorph openInWorld.
>> -       ^ aSkSheetMorph!
>>
>> Item was added:
>> + ----- Method: SkSheetMorph>>replaceSubmorph:by: (in category
>> 'submorphs-add/remove') -----
>> + replaceSubmorph: oldMorph by: newMorph
>> +       "Update page controls if the sheet gets replaced."
>> +       ^ oldMorph == sheet
>> +               ifTrue: [self submorphsDo: [:each | each delete];
>> +                                       addSheet: newMorph;
>> +                                       addPageControls]
>> +               ifFalse: [super replaceSubmorph: oldMorph by: newMorph]!
>>
>> Item was changed:
>> + ----- Method: SkSheetMorph>>selectSelection: (in category 'sheet
>> delegation') -----
>> - ----- Method: SkSheetMorph>>selectSelection: (in category 'action')
>> -----
>>  selectSelection: aPoint
>> +       ^ sheet selectSelection: aPoint
>> +       !
>> -       "Select at event position"
>> -       aPoint
>> -               ifNil: [^ self].
>> -       self
>> -               selection: (aPoint extent: 1 @ 1).
>> -       self changed!
>>
>> Item was changed:
>> + ----- Method: SkSheetMorph>>selection (in category 'sheet delegation')
>> -----
>> - ----- Method: SkSheetMorph>>selection (in category 'accessing') -----
>>  selection
>> +       ^ sheet selection
>> +       !
>> -       ^ selectionMorph area!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>selection: (in category 'accessing') -----
>> - selection: aRectangle
>> -       submorphs first == selectionMorph
>> -               ifFalse: [self addMorphFront: selectionMorph].
>> -       selectionMorph area: aRectangle!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>selectionMorph (in category 'accessing')
>> -----
>> - selectionMorph
>> -       ^ selectionMorph!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>setCellExtentFromHalo: (in category
>> 'layout') -----
>> - setCellExtentFromHalo: newExtent
>> -       | eachExtent cellExtent |
>> -       model
>> -               ifNil: [^ self].
>> -       cellExtent _ model
>> -                               at: self cellExtentName
>> -                               ifAbsent: [model
>> -                                               at: self cellExtentName
>> -                                               put: (SkSheet new parent:
>> model)].
>> -       eachExtent _ newExtent // self selection extent max: 10 @ 10.
>> -       self selection left
>> -               to: self selection right - 1
>> -               do: [:x | cellExtent at: x @ 1 put: eachExtent].
>> -       self selection top
>> -               to: self selection bottom - 1
>> -               do: [:y | cellExtent at: 1 @ y put: eachExtent].
>> -       self areaChanged.
>> -       self changed!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>setExtentFromHalo: (in category 'layout')
>> -----
>> - setExtentFromHalo: newExtent
>> -       | card cardMorph direction size |
>> -       super setExtentFromHalo: newExtent.
>> -       direction := nil.
>> -       area height = 1
>> -               ifTrue:
>> -                       [direction := #right.
>> -                       size := area width - 1]
>> -               ifFalse:
>> -                       [area width = 1
>> -                               ifTrue:
>> -                                       [direction := #down.
>> -                                       size := area height - 1]].
>> -       direction ifNotNil:
>> -                       [card := model new.
>> -                       card direction: direction.
>> -                       card size: size.
>> -                       cardMorph := SkCardMorph model: card.
>> -                       cardMorph position: self position.
>> -                       self owner addMorph: cardMorph.
>> -                       self halo ifNotNilDo: [:helo | helo setTarget:
>> cardMorph].
>> -                       self delete]!
>>
>> Item was added:
>> + ----- Method: SkSheetMorph>>setNameTo: (in category 'renaming') -----
>> + setNameTo: aName
>> +       sheet tryToRenameTo: aName.
>> +       super setNameTo: aName!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>showFormula (in category 'accessing') -----
>> - showFormula
>> -       ^ showFormula!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>showPageControls (in category
>> 'initialization') -----
>> - showPageControls
>> -       | panel prev up |
>> -       panel _ Morph new extent: 80@20; color: Color transparent.
>> -       panel
>> -               on: #mouseDown
>> -               send: #yourself
>> -               to: self.
>> -       panel addMorph: self tickMorph.
>> -       prev _ (PolygonMorph new setVertices: {0 @ 7. 7 @ 0. 7 @ 14})
>> borderWidth: 1;
>> - borderColor: Color darkGray;
>> -                                color: Color transparent.
>> -       prev
>> -               on: #mouseDown
>> -               send: #previousPage
>> -               to: self.
>> -       prev position: 24 @ 3.
>> -       prev setBalloonText: 'View the previous sheet.' translated.
>> -       panel addMorph: prev.
>> -       up _ prev copy heading: 90.
>> -       up
>> -               on: #mouseDown
>> -               send: #upPage
>> -               to: self.
>> -       up position: 36 @ 4.
>> -       up setBalloonText: 'View the definision or the parent rule.'
>> translated.
>> -
>> -       panel addMorph: up.
>> -       self addMorph: panel!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>spawn (in category 'action') -----
>> - spawn
>> -       model inspectAt: self selection topLeft!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>spawn: (in category 'action') -----
>> - spawn: anObject
>> -       self spawn!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>startStepping (in category 'stepping and
>> presenter') -----
>> - startStepping
>> -       model
>> -               ifNotNil: [model startStepping].
>> -       super startStepping.
>> - !
>>
>> Item was changed:
>> + ----- Method: SkSheetMorph>>step (in category 'stepping') -----
>> - ----- Method: SkSheetMorph>>step (in category 'stepping and presenter')
>> -----
>>  step
>> +       sheet step!
>> -       self changed!
>>
>> Item was changed:
>> + ----- Method: SkSheetMorph>>tickMorph (in category 'accessing') -----
>> - ----- Method: SkSheetMorph>>tickMorph (in category 'initialization')
>> -----
>>  tickMorph
>>        | tick |
>>        tick _ SkPluggableTickMorph new.
>> +       tick on: sheet isTickingSel: #isModelStepping.
>> -       tick position: self position + 1.
>> -       tick on: self isTickingSel: #isModelStepping.
>>        tick
>>                on: #mouseUp
>>                send: #mouseUpTick:onItem:
>> +               to: sheet.
>> -               to: self.
>>        tick stepTime: 500.
>>        tick startStepping.
>>        tick setBalloonText: 'Press to toggle ticking state.' translated.
>>        ^ tick!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>toggleFormula (in category 'accessing')
>> -----
>> - toggleFormula
>> -       showFormula _ showFormula not!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>trackDropZones (in category 'event
>> handling') -----
>> - trackDropZones
>> -       | hand target |
>> -       hand _ self primaryHand.
>> -       ((self hasOwner: hand) not
>> -                       and: [hand submorphCount > 0])
>> -               ifTrue: [target _ hand submorphs first.
>> -                       dropZone _ (self screenToCell: target topLeft)
>> -                                               extent: ((target
>> respondsTo: #area)
>> -                                                               ifTrue:
>> [target area extent]
>> -                                                               ifFalse:
>> [1 @ 1]).
>> -                       (dropZone topLeft x < 1
>> -                                       or: [dropZone topLeft y < 1])
>> -                               ifTrue: [dropZone _ nil].
>> -                       self changed]
>> -               ifFalse: [dropZone _ nil.
>> -                       self stopSteppingSelector: #trackDropZones]!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>tryToRenameTo: (in category 'accessing')
>> -----
>> - tryToRenameTo: aName
>> -       ^ model
>> -               ifNotNilDo: [:m | m name: aName]!
>>
>> Item was added:
>> + ----- Method: SkSheetMorph>>upButtonForm (in category 'accessing') -----
>> + upButtonForm
>> +       ^ self prevButtonForm copy rotateBy: 90!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>upPage (in category 'navigation') -----
>> - upPage
>> -       self beep: 'rice'.
>> -       ^ self goto: model up!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>update: (in category 'updating') -----
>> - update: anObject
>> -       anObject = #cardList
>> -               ifTrue: [self updateCardList].
>> -       anObject = #all
>> -               ifTrue: [self updateCardList].
>> -       self changed!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>updateCardList (in category 'updating')
>> -----
>> - updateCardList
>> -       | cardList morph |
>> -       cardList _ model cardList: self visibleArea.
>> -       self
>> -               removeAllMorphsIn: (self submorphs
>> -                               select: [:m | m class == SkCardMorph]).
>> -       cardList
>> -               do: [:cardInfo |
>> -                       morph _ SkCardMorph model: cardInfo value.
>> -                       morph holder: self.
>> -                       self addMorph: morph.
>> -                       morph cellOrigin: cardInfo key].
>> -       selectionMorph hide!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>veryDeepInner: (in category 'copying') -----
>> - veryDeepInner: deepCopier
>> -       "history is not copied"
>> -       model _ model veryDeepCopyWith: deepCopier.
>> -       selectionMorph _ (selectionMorph veryDeepCopyWith: deepCopier)
>> holder: self.
>> -       dropZone _ dropZone veryDeepCopyWith: deepCopier.
>> -       showFormula _ showFormula veryDeepCopyWith: deepCopier.
>> -       super veryDeepInner: deepCopier!
>>
>> Item was added:
>> + ----- Method: SkSheetMorph>>visibleArea (in category 'sheet delegation')
>> -----
>> + visibleArea
>> +       ^ sheet visibleArea
>> +       !
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>wantsDroppedMorph:event: (in category 'drag
>> and drop') -----
>> - wantsDroppedMorph: aMorph event: anEvent
>> -       ^ aMorph class = PhraseTileMorph
>> -               or: [aMorph class = TileMorph
>> -                               or: [aMorph isKindOf: SkGridPartsMorph]]!
>>
>> Item was removed:
>> - ----- Method: SkSheetMorph>>width: (in category 'accessing') -----
>> - width: aNumber
>> -       ^ self setExtentFromHalo: aNumber @ self height!
>>
>> Item was changed:
>>  ----- Method: SkValueCell>>slotName (in category 'accessing') -----
>>  slotName
>>        "See Player>>tearOffFancyWatcherFor:"
>>        | info watcherWording anInterface |
>>        info _ model slotInfoForGetter: getter.
>>        info
>>                ifNil: [anInterface _ Vocabulary eToyVocabulary
>>                                                methodInterfaceAt: getter
>>                                                ifAbsent: [].
>> +                       watcherWording _ anInterface wording]
>> -                       watcherWording _ anInterface elementWording]
>>                ifNotNil: [watcherWording _ Utilities
>> inherentSelectorForGetter: getter].
>>        ^ model tileReferringToSelf bePossessive labelMorph contents , ' '
>> , watcherWording!
>>
>>
>> _______________________________________________
>> etoys-dev mailing list
>> [hidden email]
>> http://lists.squeakland.org/mailman/listinfo/etoys-dev
>>
>
>
> _______________________________________________
> etoys-dev mailing list
> [hidden email]
> http://lists.squeakland.org/mailman/listinfo/etoys-dev
>
>
_______________________________________________
etoys-dev mailing list
[hidden email]
http://lists.squeakland.org/mailman/listinfo/etoys-dev