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@0 extent: 0.5@1). rightCngSorter buildWith: builder in: windowSpec rect: (0.5@0 extent: 0.5@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.!