[squeak-dev] The Trunk: Morphic-kb.652.mcz

commits at source.squeak.org commits at source.squeak.org
Fri May 24 19:43:02 UTC 2013


Balázs Kósi uploaded a new version of Morphic to project The Trunk:
http://source.squeak.org/trunk/Morphic-kb.652.mcz

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

Name: Morphic-kb.652
Author: kb
Time: 22 May 2013, 4:50:12.27 pm
UUID: 73334963-ccc3-4f41-8fec-fc64d40db333
Ancestors: Morphic-fbs.651

Implementation of pre selection highlight in PluggableListMorph. See the discussion here: http://lists.squeakfoundation.org/pipermail/squeak-dev/2013-May/171143.html

=============== Diff against Morphic-fbs.651 ===============

Item was changed:
  Morph subclass: #LazyListMorph
+ 	instanceVariableNames: 'listItems listIcons font selectedRow selectedRows preSelectedRow listSource maxWidth'
+ 	classVariableNames: 'ListPreSelectionColor ListSelectionColor ListSelectionTextColor'
- 	instanceVariableNames: 'listItems listIcons font selectedRow selectedRows listSource maxWidth'
- 	classVariableNames: 'ListSelectionColor ListSelectionTextColor'
  	poolDictionaries: ''
  	category: 'Morphic-Widgets'!
  
  !LazyListMorph commentStamp: 'efc 8/6/2005 11:34' prior: 0!
  The morph that displays the list in a PluggableListMorph.  It is "lazy" because it will only request the list items that it actually needs to display.
  
  I will cache the maximum width of my items in maxWidth to avoid this potentially expensive and frequent computation.!

Item was added:
+ ----- Method: LazyListMorph class>>listPreSelectionColor (in category 'preferences') -----
+ listPreSelectionColor
+ 	<preference: 'List Pre Selection Color'
+ 		category: 'colors'
+ 		description: 'Governs the color of pre selection highlight in lists'
+ 		type: #Color>
+ 	^ ListPreSelectionColor ifNil: [Color r: 0.9 g: 0.9 b: 0.9]!

Item was changed:
  ----- Method: LazyListMorph>>drawOn: (in category 'drawing') -----
  drawOn: aCanvas
  	| |
  	listItems size = 0 ifTrue: [ ^self ].
   
+ 	self 
+ 		drawPreSelectionOn: aCanvas;
+ 		drawSelectionOn: aCanvas.
- 	self drawSelectionOn: aCanvas.
  
  	(self topVisibleRowForCanvas: aCanvas) to: (self bottomVisibleRowForCanvas: aCanvas) do: [ :row |
  		(listSource itemSelectedAmongMultiple:  row) ifTrue: [
  			self drawBackgroundForMulti: row on: aCanvas. ].
  		self display: (self item: row) atRow: row on: aCanvas.
  	].
  
  	listSource potentialDropRow > 0 ifTrue: [
  		self highlightPotentialDropRow: listSource potentialDropRow on: aCanvas ].!

Item was added:
+ ----- Method: LazyListMorph>>drawPreSelectionOn: (in category 'drawing') -----
+ drawPreSelectionOn: aCanvas
+ 	
+ 	self 
+ 		drawSelectionFor: preSelectedRow
+ 		withColor: self class listPreSelectionColor 
+ 		on: aCanvas!

Item was added:
+ ----- Method: LazyListMorph>>drawSelectionFor:withColor:on: (in category 'drawing') -----
+ drawSelectionFor: index withColor: color on: aCanvas
+ 	
+ 	| selectionDrawBounds |
+ 	index ifNil: [ ^self ].
+ 	index = 0 ifTrue: [ ^self ].
+ 	selectionDrawBounds := self drawBoundsForRow: index.
+ 	selectionDrawBounds := selectionDrawBounds intersect: self bounds.
+ 	aCanvas fillRectangle: selectionDrawBounds color: color.!

Item was changed:
  ----- Method: LazyListMorph>>drawSelectionOn: (in category 'drawing') -----
  drawSelectionOn: aCanvas
  	
+ 	self 
+ 		drawSelectionFor: selectedRow 
+ 		withColor: self class listSelectionColor 
+ 		on: aCanvas!
- 	| selectionDrawBounds |
- 	selectedRow ifNil: [ ^self ].
- 	selectedRow = 0 ifTrue: [ ^self ].
- 	selectionDrawBounds := self drawBoundsForRow: selectedRow.
- 	selectionDrawBounds := selectionDrawBounds intersect: self bounds.
- 	aCanvas fillRectangle: selectionDrawBounds color: self class listSelectionColor.!

Item was changed:
  ----- Method: LazyListMorph>>initialize (in category 'initialization') -----
  initialize
  	super initialize.
  	self color: Color black.
  	font := Preferences standardListFont.
  	listItems := #().
  	listIcons := #().
  	selectedRow := nil.
  	selectedRows := PluggableSet integerSet.
+ 	preSelectedRow := nil.
  	self adjustHeight.!

Item was changed:
  ----- Method: LazyListMorph>>listChanged (in category 'list management') -----
  listChanged
  	"set newList to be the list of strings to display"
  	| size |
  	size := self getListSize.
  	listItems := Array new: size withAll: nil.
  	listIcons := Array new: size withAll: nil.
  	maxWidth := nil.
  	selectedRow := nil.
  	selectedRows := PluggableSet integerSet.
+ 	preSelectedRow := nil.
  	self adjustHeight.
  	self adjustWidth.
  	self changed.
  !

Item was added:
+ ----- Method: LazyListMorph>>preSelectedRow: (in category 'list management') -----
+ preSelectedRow: index
+ 	" Show the user which row is about to become selected, thus providing feedback if there is a delay between the selection gesture and the actual selection of the row. "
+ 	
+ 	preSelectedRow := index.
+ 	self changed.!

Item was changed:
  ----- Method: LazyListMorph>>selectRow: (in category 'list management') -----
  selectRow: index
+ 	" Select the index-th row. Clear the pre selection highlight. "
- 	"select the index-th row"
  	selectedRows add: index.
+ 	preSelectedRow := nil.
  	self changed.!

Item was changed:
  ----- Method: LazyListMorph>>selectedRow: (in category 'list management') -----
  selectedRow: index
+ 	" Select the index-th row. Clear the pre selection highlight. If nil, remove the current selection. "
- 	"select the index-th row.  if nil, remove the current selection"
  	selectedRow := index.
+ 	preSelectedRow := nil.
  	self changed.!

Item was changed:
  ----- Method: LazyListMorph>>unselectRow: (in category 'list management') -----
  unselectRow: index
  	"unselect the index-th row"
  	selectedRows remove: index ifAbsent: [].
+ 	preSelectedRow := nil.
  	self changed.!

Item was changed:
  ----- Method: PluggableListMorph>>changeModelSelection: (in category 'model access') -----
  changeModelSelection: anInteger
+ 	" Change the model's selected item index to be anInteger. Enable the pre selection highlight. Deferring the model's selection action, to let the pre selection highlight take effect. "
- 	"Change the model's selected item index to be anInteger."
  
+ 	self rowAboutToBecomeSelected: (self uiIndexFor: anInteger).
+ 	setIndexSelector ifNotNil: [
+ 		([ model perform: setIndexSelector with: anInteger ] future: 1) value ].!
- 	setIndexSelector ifNotNil:
- 		[model perform: setIndexSelector with: anInteger].!

Item was added:
+ ----- Method: PluggableListMorph>>rowAboutToBecomeSelected: (in category 'selection') -----
+ rowAboutToBecomeSelected: anInteger
+ 
+ 	self listMorph preSelectedRow: anInteger!



More information about the Squeak-dev mailing list