Hi Eliot, if you would like to merge this as well as Tools-cmm.694, I
hope it will be satisfactory for your de-select + file-out all use case. I'll run with it for a few days too, to make sure, before I commit it. ---------- Forwarded message ---------- From: <[hidden email]> Date: Mon, Apr 18, 2016 at 6:39 PM Subject: [squeak-dev] The Inbox: Morphic-cmm.1116.mcz To: [hidden email] A new version of Morphic was added to project The Inbox: http://source.squeak.org/inbox/Morphic-cmm.1116.mcz ==================== Summary ==================== Name: Morphic-cmm.1116 Author: cmm Time: 18 April 2016, 6:38:47.481742 pm UUID: ae46aa73-c96e-41c2-888f-9d3fe8e1b924 Ancestors: Morphic-mt.1115 - Use the "isControlled" variable to instead indicate whether it came from a mouse move event. This proves useful to at least one model for implementing a desired UI behavior. - For vertical smart-splitters, don't let any single line complain any more than 10-characters worth of occlusion, so that extra long lines of a list will not over-dominate the adjacent widgets. =============== Diff against Morphic-mt.1115 =============== Item was changed: ----- Method: AlternatePluggableListMorphOfMany>>mouseMove: (in category 'event handling') ----- mouseMove: event "The mouse has moved, as characterized by the event provided. Adjust the scrollbar, and alter the selection as appropriate" | oldIndex oldVal row | event position y < self top ifTrue: [scrollBar scrollUp: 1. row := self rowAtLocation: scroller topLeft + (1 @ 1)] ifFalse: [row := event position y > self bottom ifTrue: [scrollBar scrollDown: 1. self rowAtLocation: scroller bottomLeft + (1 @ -1)] ifFalse: [ self rowAtLocation: event position]]. row = 0 ifTrue: [^super mouseDown: event]. model okToChange ifFalse: [^self]. "No change if model is locked" "Set meaning for subsequent dragging of selection" oldIndex := self getCurrentSelectionIndex. oldIndex ~= 0 ifTrue: [oldVal := self listSelectionAt: oldIndex]. "Need to restore the old one, due to how model works, and set new one." oldIndex ~= 0 ifTrue: [self listSelectionAt: oldIndex put: oldVal]. "Inform model of selected item and let it toggle." self changeModelSelection: (self modelIndexFor: row) shifted: true + controlled: true. - controlled: event controlKeyPressed. submorphs do: [:each | each changed]! Item was changed: ----- Method: PluggableListMorph>>charactersOccluded (in category 'geometry') ----- charactersOccluded "Answer the number of characters occluded in my #visibleList by my right edge." | listIndex | listIndex:=0. ^ self visibleList inject: 0 into: [ : sum : each | | eachString totalWidth indexOfLastVisible iconWidth | totalWidth:=0. eachString := each asString "withBlanksTrimmed". iconWidth := (self iconAt: (listIndex := listIndex+1)) ifNil:[0] ifNotNil: [ : icon | icon width+2 ]. indexOfLastVisible := ((1 to: eachString size) detect: [ : stringIndex | (totalWidth:=totalWidth+(self font widthOf: (eachString at: stringIndex))) > (self width - (scrollBar ifNil: [ 0 ] ifNotNil: [ scrollBar width ]) - iconWidth) ] ifNone: [ eachString size + 1 ]) - 1. + sum + ((eachString size - indexOfLastVisible) min: 10) ]! - sum + (eachString size - indexOfLastVisible) ]! |
Free forum by Nabble | Edit this page |