[squeak-dev] The Trunk: Morphic-mt.1218.mcz

commits at source.squeak.org commits at source.squeak.org
Mon Aug 1 12:43:21 UTC 2016


Marcel Taeumel uploaded a new version of Morphic to project The Trunk:
http://source.squeak.org/trunk/Morphic-mt.1218.mcz

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

Name: Morphic-mt.1218
Author: mt
Time: 1 August 2016, 2:42:37.666063 pm
UUID: c5757b59-e3d1-5841-a689-f52f1a38c28e
Ancestors: Morphic-mt.1217

Add the possibility to filter button-only dialogs via keyboard expressions as known from menus.

=============== Diff against Morphic-mt.1217 ===============

Item was changed:
  Morph subclass: #DialogWindow
+ 	instanceVariableNames: 'titleMorph messageMorph paneMorph buttonRow result selectedButton cancelButton timeout preferredPosition keyMap exclusive filter filterEnabled filterMorph'
- 	instanceVariableNames: 'titleMorph messageMorph paneMorph buttonRow result selectedButton cancelButton timeout preferredPosition keyMap exclusive'
  	classVariableNames: 'GradientDialog RoundedDialogCorners UseWiggleAnimation'
  	poolDictionaries: ''
  	category: 'Morphic-Windows'!
  
  !DialogWindow commentStamp: '<historical>' prior: 0!
  A DialogBoxMorph is Morph used in simple yes/no/confirm dialogs. Strongly modal.!

Item was changed:
  ----- Method: DialogWindow>>createBody (in category 'initialization') -----
  createBody
  
  	| body |
  	body := Morph new
  		changeTableLayout;
  		hResizing: #shrinkWrap;
  		vResizing: #shrinkWrap;
  		listDirection: #topToBottom;
  		cellPositioning: #leftCenter;
  		layoutInset: (10 at 5 corner: 10 at 10);
  		cellInset: 5;
  		color: Color transparent;
  		yourself.
+ 	body addAllMorphs: {self createMessage: ''. self createPane. self createButtonRow. self createFilter}.
- 	body addAllMorphs: {self createMessage: ''. self createPane. self createButtonRow}.
  	self addMorphBack: body.!

Item was added:
+ ----- Method: DialogWindow>>createFilter (in category 'initialization') -----
+ createFilter
+ 	
+ 	filterMorph := '' asText asMorph lock.
+ 	filterMorph
+ 		visible: false;
+ 		disableTableLayout: true.
+ 	^ filterMorph!

Item was changed:
  ----- Method: DialogWindow>>drawOverlayOn: (in category 'drawing') -----
  drawOverlayOn: aCanvas
  
  	| title inset |
  	super drawOverlayOn: aCanvas.
  
  	title := self submorphs first.
  
  	self wantsRoundedCorners ifTrue: [
  		inset := (self class roundedDialogCorners and: [self class gradientDialog])
  			"This check compensates a bug in balloon."
  			ifTrue: [0 at 0 corner: 0@ -1] ifFalse: [self borderWidth @ 0].
  
  		"Overdraw lower part of title bar to hide bottom corners."		
  		aCanvas
  			fillRectangle:( (title bottomLeft - (0 @ self submorphs first cornerRadius) corner: title bottomRight) insetBy: inset)
  			color: self color].
  		
  	"Draw a line between the title and the contents."
  	self borderWidth > 0 ifTrue: [			
  		"Redraw the border all around. Needed because rounded borders do not align very well."
  		self wantsRoundedCorners
  			ifTrue: [	aCanvas frameRoundRect: self bounds radius: self cornerRadius width: self borderStyle width color: self borderStyle color]
  			ifFalse: [aCanvas frameRectangle: self bounds width: self borderStyle width color: self borderStyle color]].!

Item was changed:
  ----- Method: DialogWindow>>ensureSelectedButton (in category 'selection') -----
  ensureSelectedButton
  
+ 	self buttons ifEmpty: [^ self].
+ 	self selectedButton ifNil: [self selectButton: self buttons first].
+ 	self selectedButton enabled ifFalse: [self selectNextButton].!
- 	self selectedButton ifNil: [self selectButton: self buttons first].!

Item was added:
+ ----- Method: DialogWindow>>filter (in category 'accessing') -----
+ filter
+ 	^ filter ifNil: ['']!

Item was added:
+ ----- Method: DialogWindow>>filter: (in category 'accessing') -----
+ filter: aString
+ 	filter := aString.
+ 	self updateFilter.!

Item was added:
+ ----- Method: DialogWindow>>filterEnabled (in category 'accessing') -----
+ filterEnabled
+ 	^ filterEnabled ifNil: [false]!

Item was added:
+ ----- Method: DialogWindow>>filterEnabled: (in category 'accessing') -----
+ filterEnabled: aBoolean
+ 
+ 	filterEnabled := aBoolean.
+ 	self updateFilter.!

Item was changed:
  ----- Method: DialogWindow>>keyStroke: (in category 'events') -----
  keyStroke: evt
  	| char |
  	self stopAutoTrigger.
  	char := evt keyCharacter.
  
  	char = Character escape ifTrue: [ ^ self cancelDialog ].
  	(char = Character cr or: [char = Character enter]) ifTrue: [ ^ self closeDialog ].
  
  	((char = Character arrowLeft or: [char = Character arrowUp])
  		or: [ evt shiftPressed and: [ char = Character tab ] ])
  			ifTrue: [ ^ self selectPreviousButton ].
  	((char = Character arrowRight or: [char = Character arrowDown])
  		or: [ char = Character tab ])
  			ifTrue: [ ^ self selectNextButton ].
+ 	
+ 	self filterEnabled ifTrue: [
+ 		char = Character backspace ifTrue: [self filter: (self filter ifEmpty: [''] ifNotEmpty: [:f | f allButLast])].
+ 		(char isAlphaNumeric or: [char = Character space])
+ 			ifTrue: [self filter: self filter, char asString]].
+ 	
- 			
  	keyMap
  		at: char asLowercase
  		ifPresent: [ : foundButton | foundButton performAction ]
  		ifAbsent: [ "do nothing" ].!

Item was changed:
  ----- Method: DialogWindow>>selectNextButton (in category 'selection') -----
  selectNextButton
  
  	self selectedButton ifNil: [^ self].
+ 	(self buttons anySatisfy: [:ea | ea enabled]) ifFalse: [^ self].
+ 	
+ 	self selectedButtonIndex: self selectedButtonIndex \\ self buttons size + 1.
+ 	self selectedButton enabled ifFalse: [self selectNextButton].!
- 	self selectedButtonIndex: self selectedButtonIndex \\ self buttons size + 1.!

Item was changed:
  ----- Method: DialogWindow>>selectPreviousButton (in category 'selection') -----
  selectPreviousButton
  
  	self selectedButton ifNil: [^ self].
+ 	(self buttons anySatisfy: [:ea | ea enabled]) ifFalse: [^ self].
+ 	
+ 	self selectedButtonIndex: self selectedButtonIndex - 2 \\ self buttons size + 1.
+ 	self selectedButton enabled ifFalse: [self selectPreviousButton].!
- 	self selectedButtonIndex: self selectedButtonIndex - 2 \\ self buttons size + 1.!

Item was changed:
  ----- Method: DialogWindow>>setMessageParameters (in category 'initialization') -----
  setMessageParameters
  	
  	messageMorph ifNotNil: [
  		| fontToUse colorToUse |
  		fontToUse := self userInterfaceTheme font ifNil: [TextStyle defaultFont].
  		colorToUse := self userInterfaceTheme textColor ifNil: [Color black].
  	
  		messageMorph contents
  			addAttribute: (TextFontReference toFont: fontToUse);
  			addAttribute: (TextColor color: colorToUse).
+ 		messageMorph textColor: colorToUse.
  		messageMorph releaseParagraph; changed].!

Item was added:
+ ----- Method: DialogWindow>>updateFilter (in category 'updating') -----
+ updateFilter
+ 
+ 	self buttons do: [:ea |
+ 		ea enabled: (self filter isEmpty or: [ea label asString includesSubstring: self filter caseSensitive: false])].
+ 	
+ 	filterMorph
+ 		visible: self filter notEmpty;
+ 		disableTableLayout: self filter isEmpty;
+ 		contents: '<', self filter, '>';
+ 		textColor: self messageMorph textColor.
+ 		
+ 	self ensureSelectedButton.!



More information about the Squeak-dev mailing list