On 16-07-15 11:41, Alain Plantec via Pharo-dev wrote:
i think it is better as specific feature of the pane event listener
It feels a bit like feature envy. Too much poking around. BlWellPanelFlowEventListener>>PaneldropAccepted: anEvent |wellPanelFlow droppedMorph localPosition found| wellPanelFlow := anEvent handler. droppedMorph := anEvent contents asDragWell. localPosition := wellPanelFlow globalPointToLocal: anEvent position. wellPanelFlow hasSubmorphs ifFalse: [ wellPanelFlow addMorph: droppedMorph ]. found := wellPanelFlow morphsAt: localPosition. found ifNotNil: [ "We found at least one. The deepest is first, that's the one we want" found := found first. found bounds center x < localPosition x ifTrue: [ "to the right of its center, so after it?" wellPanelFlow addMorph: droppedMorph after: found ] ifFalse: [ wellPanelFlow addMorph: droppedMorph inFrontOf: found ] ] ifNil: [ found := self precedingMorphIn: wellPanelFlow submorphs at: localPosition. found ifNil: [ wellPanelFlow addMorphFront: droppedMorph ] ifNotNil: [ wellPanelFlow addMorph: droppedMorph after: found ] ] BlWellPanelFlowEventListener>>precedingMorphIn: aCollection at: localPosition |precedingMorph| precedingMorph := nil. aCollection do: [ :aMorph | aMorph bounds bottom < localPosition y ifTrue: [ "wrong row" precedingMorph := aMorph ] ifFalse: [ aMorph bounds right < localPosition x ifTrue: [ precedingMorph := aMorph] ifFalse: [ ^aMorph ]] ]. ^precedingMorph