[squeak-dev] The Inbox: Tools-ct.959.mcz

Marcel Taeumel marcel.taeumel at hpi.de
Mon Mar 23 10:57:04 UTC 2020


> Allow simple change sorters to become become dual sorters

What do you mean by that? Are you referring to the "inspect/explore" buttons in the Inspector and Object Explorer?

Best,
Marcel
Am 16.03.2020 21:03:29 schrieb commits at source.squeak.org <commits at source.squeak.org>:
Christoph Thiede uploaded a new version of Tools to project The Inbox:
http://source.squeak.org/inbox/Tools-ct.959.mcz

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

Name: Tools-ct.959
Author: ct
Time: 16 March 2020, 9:03:12.729937 pm
UUID: cae0b2d6-e131-7a40-b6a9-62a90172de94
Ancestors: Tools-mt.955

Proposal: Allow simple change sorters to become become dual sorters, and dual change sorters to be split into two separate change sorters. This commit also refactors DualChangeSorter in general.

=============== Diff against Tools-mt.955 ===============

Item was added:
+ ----- Method: ChangeSorter>>addModelItemsToWindowMenu: (in category 'as yet unclassified') -----
+ addModelItemsToWindowMenu: aMenu
+ "Add model-related item to the window menu"
+
+ super addModelItemsToWindowMenu: aMenu.
+ aMenu addLine.
+ aMenu add: 'Become dual sorter' translated target: self action: #becomeDualSorter.!

Item was added:
+ ----- Method: ChangeSorter>>becomeDualSorter (in category 'as yet unclassified') -----
+ becomeDualSorter
+ "Switch the contents of the receiver's view to represent a DualChangeSorter. Kind of mitosis: We're doing the anaphase right now."
+
+ | dualSorter |
+ dualSorter := DualChangeSorter withLeft: self right: nil.
+ dualSorter initializeSides.
+ self changed: #close.
+ ToolBuilder open: dualSorter.!

Item was added:
+ ----- Method: DualChangeSorter class>>new (in category 'instance creation') -----
+ new
+
+ ^ super new
+ initializeSides;
+ yourself!

Item was added:
+ ----- Method: DualChangeSorter class>>withLeft:right: (in category 'instance creation') -----
+ withLeft: leftChangeSorter right: rightChangeSorter
+
+ ^ self basicNew
+ leftChangeSorter: leftChangeSorter;
+ rightChangeSorter: rightChangeSorter;
+ yourself!

Item was added:
+ ----- Method: DualChangeSorter>>addModelItemsToWindowMenu: (in category 'user interface') -----
+ addModelItemsToWindowMenu: aMenu
+ "Add model-related item to the window menu"
+
+ super addModelItemsToWindowMenu: aMenu.
+ aMenu addLine.
+ aMenu add: 'Split sides' translated target: self action: #splitSides.!

Item was changed:
----- Method: DualChangeSorter>>buildWith: (in category 'toolbuilder') -----
buildWith: builder
- | windowSpec window |
- leftCngSorter := ChangeSorter new myChangeSet: ChangeSet current.
- leftCngSorter parent: self.
- rightCngSorter := ChangeSorter new myChangeSet:
- ChangeSet secondaryChangeSet.
- rightCngSorter parent: self.

+ | windowSpec window |
windowSpec := builder pluggableWindowSpec new.
windowSpec model: self.
windowSpec label: 'Change Sorter'.
windowSpec children: OrderedCollection new.
windowSpec label: #labelString.
leftCngSorter buildWith: builder in: windowSpec rect: (0 at 0 extent: 0.5 at 1).
rightCngSorter buildWith: builder in: windowSpec rect: (0.5 at 0 extent: 0.5 at 1).
window := builder build: windowSpec.
leftCngSorter addDependent: window. "so it will get changed: #relabel"
rightCngSorter addDependent: window. "so it will get changed: #relabel"
^window!

Item was added:
+ ----- Method: DualChangeSorter>>initializeSides (in category 'initialization') -----
+ initializeSides
+
+ leftCngSorter ifNil: [
+ leftCngSorter := ChangeSorter new myChangeSet: ChangeSet current].
+ leftCngSorter parent: self.
+ rightCngSorter ifNil: [
+ rightCngSorter := ChangeSorter new myChangeSet: ChangeSet secondaryChangeSet].
+ rightCngSorter parent: self.!

Item was changed:
+ ----- Method: DualChangeSorter>>isLeftSide: (in category 'accessing') -----
- ----- Method: DualChangeSorter>>isLeftSide: (in category 'other') -----
isLeftSide: theOne
"Which side am I?"
^ theOne == leftCngSorter!

Item was changed:
+ ----- Method: DualChangeSorter>>labelString (in category 'toolbuilder') -----
- ----- Method: DualChangeSorter>>labelString (in category 'other') -----
labelString
"The window label"
^'Changes go to "', ChangeSet current name, '"'.!

Item was added:
+ ----- Method: DualChangeSorter>>leftChangeSorter: (in category 'initialization') -----
+ leftChangeSorter: aChangeSorter
+
+ leftCngSorter := aChangeSorter!

Item was changed:
+ ----- Method: DualChangeSorter>>modelWakeUp (in category 'updating') -----
- ----- Method: DualChangeSorter>>modelWakeUp (in category 'other') -----
modelWakeUp
"A window with me as model is being entered. Make sure I am up-to-date with the changeSets."

"Dumb way"
leftCngSorter canDiscardEdits
ifTrue: [leftCngSorter update] "does both"
ifFalse: [rightCngSorter update].
!

Item was changed:
+ ----- Method: DualChangeSorter>>okToChange (in category 'updating') -----
- ----- Method: DualChangeSorter>>okToChange (in category 'initialization') -----
okToChange
^ leftCngSorter okToChange & rightCngSorter okToChange!

Item was changed:
+ ----- Method: DualChangeSorter>>other: (in category 'accessing') -----
- ----- Method: DualChangeSorter>>other: (in category 'other') -----
other: theOne
"Return the other side's ChangeSorter"
^ theOne == leftCngSorter
ifTrue: [rightCngSorter]
ifFalse: [leftCngSorter]!

Item was added:
+ ----- Method: DualChangeSorter>>rightChangeSorter: (in category 'initialization') -----
+ rightChangeSorter: aChangeSorter
+
+ rightCngSorter := aChangeSorter!

Item was added:
+ ----- Method: DualChangeSorter>>splitSides (in category 'menu commands') -----
+ splitSides
+ "Split the receiver into two independent views. Kind of mitosis: We're doing cytokinesis right now."
+
+ {leftCngSorter. rightCngSorter} do: [:sorter |
+ ToolBuilder open: sorter].
+ self changed: #close.!


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20200323/181ff8c2/attachment.html>


More information about the Squeak-dev mailing list