[Pkg] The Trunk: ToolBuilder-Morphic-mt.137.mcz

commits at source.squeak.org commits at source.squeak.org
Fri Apr 24 09:03:15 UTC 2015


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

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

Name: ToolBuilder-Morphic-mt.137
Author: mt
Time: 24 April 2015, 11:03:07.561 am
UUID: 972227ca-1d2b-fe4b-aec1-a4c0913e50d7
Ancestors: ToolBuilder-Morphic-mt.136

Set up layout hints when building morphic widgets.

=============== Diff against ToolBuilder-Morphic-mt.136 ===============

Item was changed:
  ----- Method: MorphicToolBuilder>>buildPluggableAlternateMultiSelectionList: (in category 'widgets optional') -----
  buildPluggableAlternateMultiSelectionList: aSpec
  	| listMorph listClass |
  	aSpec getSelected ifNotNil: [ ^ self error: 'There is no PluggableAlternateListMorphOfManyByItem' ].
  	listClass := self alternateMultiSelectListClass.
  	listMorph := listClass 
  		on: aSpec model
  		list: aSpec list
  		primarySelection: aSpec getIndex
  		changePrimarySelection: aSpec setIndex
  		listSelection: aSpec getSelectionList
  		changeListSelection: aSpec setSelectionList
  		menu: aSpec menu.
  	listMorph
  		setProperty: #highlightSelector toValue: #highlightMessageList:with: ;
  		setProperty: #itemConversionMethod toValue: #asStringOrText ;
  		setProperty: #balloonTextSelectorForSubMorphs toValue: #balloonTextForClassAndMethodString ;
  		enableDragNDrop: SystemBrowser browseWithDragNDrop ;
  		menuTitleSelector: #messageListSelectorTitle.
  	self 
  		register: listMorph
  		id: aSpec name.
  	listMorph
  		keystrokeActionSelector: aSpec keyPress ;
  		getListElementSelector: aSpec listItem ;
  		getListSizeSelector: aSpec listSize.
  	self 
  		buildHelpFor: listMorph 
  		spec: aSpec. 
  	self 
  		setFrame: aSpec frame 
  		in: listMorph.
+ 	self setLayoutHintsFor: listMorph spec: aSpec.
  	parent ifNotNil: [ self add: listMorph to: parent ].
  	panes ifNotNil: [ aSpec list ifNotNil:[panes add: aSpec list ] ].
  	^ listMorph!

Item was changed:
  ----- Method: MorphicToolBuilder>>buildPluggableButton: (in category 'widgets required') -----
  buildPluggableButton: aSpec
  	| widget label state action enabled |
  	label := aSpec label.
  	state := aSpec state.
  	action := aSpec action.
  	widget := self buttonClass on: aSpec model
  				getState: (state isSymbol ifTrue:[state])
  				action: nil
  				label: (label isSymbol ifTrue:[label]).
  	widget style: aSpec style.
  	aSpec changeLabelWhen
  		ifNotNilDo: [ :event | widget whenChanged: event update: aSpec label].
  	self register: widget id: aSpec name.
  	enabled := aSpec enabled.
  	enabled isSymbol
  		ifTrue:[widget getEnabledSelector: enabled]
  		ifFalse:[widget enabled:enabled].
  	widget action: action.
  	aSpec color isColor
  		ifTrue: [widget
  			onColor: aSpec color
  			offColor: aSpec color]
  		ifFalse: [
  			widget getColorSelector: aSpec color.
  			widget offColor: Color white].
  	self buildHelpFor: widget spec: aSpec. 
  	(label isSymbol or:[label == nil]) ifFalse:[widget label: label].
  	self setFrame: aSpec frame in: widget.
+ 	self setLayoutHintsFor: widget spec: aSpec.
  	parent ifNotNil:[self add: widget to: parent].
  	^widget!

Item was changed:
  ----- Method: MorphicToolBuilder>>buildPluggableCheckBox: (in category 'widgets optional') -----
  buildPluggableCheckBox: spec
  
  	| widget label state action |
  	label := spec label.
  	state := spec state.
  	action := spec action.
  	widget := self checkBoxClass on: spec model
  				getState: (state isSymbol ifTrue:[state])
  				action: (action isSymbol ifTrue:[action])
  				label: (label isSymbol ifTrue:[label]).
  	self register: widget id: spec name.
  
  	widget installButton.
  "	widget getColorSelector: spec color.
  	widget offColor: Color white..
  	self buildHelpFor: widget spec: spec. 
  	(label isSymbol or:[label == nil]) ifFalse:[widget label: label].
  "	self setFrame: spec frame in: widget.
+ 	self setLayoutHintsFor: widget spec: spec.
  	parent ifNotNil:[self add: widget to: parent].
  	^widget!

Item was changed:
  ----- Method: MorphicToolBuilder>>buildPluggableDropDownList: (in category 'widgets optional') -----
  buildPluggableDropDownList: spec
  
  	| widget model listSelector selectionSelector selectionSetter |
  	model := spec model.
  	listSelector := spec listSelector.
  	selectionSelector := spec selectionSelector.
  	selectionSetter := spec selectionSetter.
  	widget := self dropDownListClass new
  		model: model;
  		listSelector: listSelector;
  		selectionSelector: selectionSelector;
  		selectionSetter: selectionSetter;
  		yourself.
  	self register: widget id: spec name.
  
  	widget installDropDownList.
  	self setFrame: spec frame in: widget.
+ 	self setLayoutHintsFor: widget spec: spec.
  	parent ifNotNil:[self add: widget to: parent].
  	^widget!

Item was changed:
  ----- Method: MorphicToolBuilder>>buildPluggableInputField: (in category 'widgets optional') -----
  buildPluggableInputField: aSpec
  	| widget |
  	widget := self buildPluggableText: aSpec.
+ 	widget minimumHeight: 0.
  	widget acceptOnCR: true.
  	widget hideScrollBarsIndefinitely.
  	widget textMorph
  		autoFit: false;
  		wrapFlag: true;
  		width: 999999.
  	^widget!

Item was changed:
  ----- Method: MorphicToolBuilder>>buildPluggableList: (in category 'widgets required') -----
  buildPluggableList: aSpec
  	| widget listClass getIndex setIndex |
  	aSpec getSelected ifNil:[
  		listClass := self listClass.
  		getIndex := aSpec getIndex.
  		setIndex := aSpec setIndex.
  	] ifNotNil:[
  		listClass := self listByItemClass.
  		getIndex := aSpec getSelected.
  		setIndex := aSpec setSelected.
  	].
  	widget := listClass on: aSpec model
  				list: aSpec list
  				selected: getIndex
  				changeSelected: setIndex
  				menu: aSpec menu
  				keystroke: aSpec keyPress.
  	self register: widget id: aSpec name.
  	
  	"Override default scroll bar policies if needed. Widget will use preference values otherwise."
  	aSpec hScrollBarPolicy ifNotNil: [:policy |
  		policy caseOf: {
  			[#always] -> [widget alwaysShowHScrollBar].
  			[#never] -> [widget hideHScrollBarIndefinitely].
  			[#whenNeeded] -> [widget showHScrollBarOnlyWhenNeeded]. } ].
  	aSpec vScrollBarPolicy ifNotNil: [:policy |
  		policy caseOf: {
  			[#always] -> [widget alwaysShowVScrollBar].
  			[#never] -> [widget hideVScrollBarIndefinitely].
  			[#whenNeeded] -> [widget showVScrollBarOnlyWhenNeeded]. } ].	
  	
  	widget getListElementSelector: aSpec listItem.
  	widget getListSizeSelector: aSpec listSize.
  	widget getIconSelector: aSpec icon.
  	widget getHelpSelector: aSpec help.
  	widget doubleClickSelector: aSpec doubleClick.
  	
  	widget dragItemSelector: aSpec dragItem.
  	widget dropItemSelector: aSpec dropItem.
  	widget wantsDropSelector: aSpec dropAccept.
  	
  	widget autoDeselect: aSpec autoDeselect.
  	widget keystrokePreviewSelector: aSpec keystrokePreview.
  	
  	widget 
  		borderWidth: 1; 
  		borderColor: Color lightGray;
  		color: (aSpec color 
  			ifNil: [Color white]
  			ifNotNil: [aSpec color]).
  			
  	self setFrame: aSpec frame in: widget.
+ 	self setLayoutHintsFor: widget spec: aSpec.
+ 	
  	parent ifNotNil:[self add: widget to: parent].
  	panes ifNotNil:[
  		aSpec list ifNotNil:[panes add: aSpec list].
  	].
  	^widget!

Item was changed:
  ----- Method: MorphicToolBuilder>>buildPluggableMultiSelectionList: (in category 'widgets optional') -----
  buildPluggableMultiSelectionList: aSpec
  	| widget listClass |
  	aSpec getSelected ifNotNil:[^self error:'There is no PluggableListMorphOfManyByItem'].
  	listClass := self multiSelectListClass.
  	widget := listClass on: aSpec model
  		list: aSpec list
  		primarySelection: aSpec getIndex
  		changePrimarySelection: aSpec setIndex
  		listSelection: aSpec getSelectionList
  		changeListSelection: aSpec setSelectionList
  		menu: aSpec menu.
  	self register: widget id: aSpec name.
  	widget keystrokeActionSelector: aSpec keyPress.
  	widget getListElementSelector: aSpec listItem.
  	widget getListSizeSelector: aSpec listSize.
  	self buildHelpFor: widget spec: aSpec. 
  	self setFrame: aSpec frame in: widget.
+ 	self setLayoutHintsFor: widget spec: aSpec.
  	parent ifNotNil:[self add: widget to: parent].
  	panes ifNotNil:[
  		aSpec list ifNotNil:[panes add: aSpec list].
  	].
  	^widget!

Item was changed:
  ----- Method: MorphicToolBuilder>>buildPluggablePanel: (in category 'widgets required') -----
  buildPluggablePanel: aSpec
  	| widget children frame |
  	widget := self panelClass new.
  	self register: widget id: aSpec name.
  	widget model: aSpec model.
  	widget color: Color transparent.
  	children := aSpec children.
  	children isSymbol ifTrue:[
  		widget getChildrenSelector: children.
  		widget update: children.
  		children := #().
  	].
  	self buildAll: children in: widget.
  	self buildHelpFor: widget spec: aSpec. 
  	self setFrame: aSpec frame in: widget.
  	parent ifNotNil:[self add: widget to: parent].
  	self setLayout: aSpec layout in: widget.
  	widget layoutInset: 0.
  	widget borderWidth: 0.
  	widget submorphsDo:[:sm|
  		(frame := sm layoutFrame) ifNotNil:[
  			(frame rightFraction = 0 or:[frame rightFraction = 1]) 
  				ifFalse:[frame rightOffset:1].
  			(frame bottomFraction = 0 or:[frame bottomFraction = 1]) 
  				ifFalse:[frame bottomOffset: 1]]].
  	widget color: Color transparent.
+ 	self setLayoutHintsFor: widget spec: aSpec.
+ 	
  	^widget!

Item was changed:
  ----- Method: MorphicToolBuilder>>buildPluggableScrollPane: (in category 'widgets optional') -----
  buildPluggableScrollPane: spec
  
  	| widget |
  	widget := self scrollPaneClass new.
  	widget model: spec model.
  	self register: widget id: spec name.
  	
  	spec children
  		ifNotNil: [:obj |
  			"Create panel morph to scroll it."
  			widget morph: (self pluggablePanelSpec new
  				children: obj;
  				layout: spec layout;
  				frame: (0 at 0 corner: 1 at 1);
  				buildWith: self).
  			spec layout ~~ #proportional ifTrue: [
  				"Fix #spaceFill resizing because it does not make sense in scroll pane."
  				widget morph
  					hResizing: #shrinkWrap;
  					vResizing: #shrinkWrap.
  				widget morph submorphsDo: [:m |
  					m
  						extent: 100 at 100;
  						flag: #refactor; "mt: Restore orginial properties?"
  						hResizing: #rigid;
  						vResizing: #rigid]
  				]]
  		ifNil: [spec morph
  			ifNotNil: [:m | widget morph: m]
  			ifNil: [widget morphClass: spec morphClass]].
  	
  	self setFrame: spec frame in: widget.
+ 	self setLayoutHintsFor: widget spec: spec.
+ 	
  	parent ifNotNil: [self add: widget to: parent].
  	
  	widget borderWidth: spec borderWidth.
  	
  	spec hScrollBarPolicy caseOf: {
  		[#always] -> [widget alwaysShowHScrollBar].
  		[#never] -> [widget hideHScrollBarIndefinitely].
  		[#whenNeeded] -> [widget showHScrollBarOnlyWhenNeeded]}.
  	spec vScrollBarPolicy caseOf: {
  		[#always] -> [widget alwaysShowVScrollBar].
  		[#never] -> [widget hideVScrollBarIndefinitely].
  		[#whenNeeded] -> [widget showVScrollBarOnlyWhenNeeded]}.
  	
  	^ widget!

Item was changed:
  ----- Method: MorphicToolBuilder>>buildPluggableText: (in category 'widgets required') -----
  buildPluggableText: aSpec
  	| widget |
  	widget := self textPaneClass new.
  	aSpec stylerClass ifNotNil: [:c | widget styler: (c new view: widget)].	
  	widget
  		on: aSpec model
  		text: aSpec getText 
  		accept: aSpec setText
  		readSelection: aSpec selection 
  		menu: aSpec menu.
  	aSpec font ifNotNil: [:f | widget font: f].
  	
  	widget readOnly: aSpec readOnly.
  	widget editTextSelector: aSpec editText.
  	widget wantsFrameAdornments: aSpec indicateUnacceptedChanges.
  	widget askBeforeDiscardingEdits: aSpec askBeforeDiscardingEdits.
  	widget font: Preferences standardCodeFont.
  
  	widget textMorph isAutoFit ifTrue: [
  		widget hideHScrollBarIndefinitely ].
  	
  	self register: widget id: aSpec name.
  	widget getColorSelector: aSpec color.
+ 	self buildHelpFor: widget spec: aSpec.
+ 	 
- 	self buildHelpFor: widget spec: aSpec. 
  	self setFrame: aSpec frame in: widget.
+ 	self setLayoutHintsFor: widget spec: aSpec.
+ 	
  	parent ifNotNil:[self add: widget to: parent].
  	widget borderColor: Color lightGray.
  	widget color: Color white.
  	^widget!

Item was changed:
  ----- Method: MorphicToolBuilder>>buildPluggableTree: (in category 'widgets required') -----
  buildPluggableTree: aSpec
  	| widget |
  	widget := self treeClass new.
  	self register: widget id: aSpec name.
  	widget model: aSpec model.
  	widget getSelectedPathSelector: aSpec getSelectedPath.
  	widget setSelectedSelector: aSpec setSelected.
  	widget getSelectedSelector: aSpec getSelected.
  	widget setSelectedParentSelector: aSpec setSelectedParent.
  	widget getChildrenSelector: aSpec getChildren.
  	widget hasChildrenSelector: aSpec hasChildren.
  	widget getLabelSelector: aSpec label.
  	widget getIconSelector: aSpec icon.
  	widget getHelpSelector: aSpec help.
  	widget getMenuSelector: aSpec menu.
  	widget keystrokeActionSelector: aSpec keyPress.
  	widget nodeClass: aSpec nodeClass.
  	widget getRootsSelector: aSpec roots.
  	widget autoDeselect: aSpec autoDeselect.
  	widget dropItemSelector: aSpec dropItem.
  	widget wantsDropSelector: aSpec dropAccept.
  	widget dragItemSelector: aSpec dragItem.
  	widget columns: aSpec columns.
+ 	
  	self setFrame: aSpec frame in: widget.
+ 	self setLayoutHintsFor: widget spec: aSpec.
+ 	
  	parent ifNotNil:[self add: widget to: parent].
  "	panes ifNotNil:[
  		aSpec roots ifNotNil:[panes add: aSpec roots].
  	].	"
  	^widget!

Item was changed:
  ----- Method: MorphicToolBuilder>>buildPluggableWindow: (in category 'widgets required') -----
  buildPluggableWindow: aSpec
  	| widget children |
  	aSpec layout == #proportional ifFalse:[
  		"This needs to be implemented - probably by adding a single pane and then the rest"
  		^self error: 'Not implemented'.
  	].
  	widget := (self windowClassFor: aSpec) new.
  	self register: widget id: aSpec name.
  	widget model: aSpec model.
  	aSpec label ifNotNil:
  		[:label|
  		label isSymbol 
  			ifTrue:[widget getLabelSelector: label]
  			ifFalse:[widget setLabel: label]].
  	aSpec multiWindowStyle notNil ifTrue:
  		[widget savedMultiWindowState: (SavedMultiWindowState on: aSpec model)].
  	children := aSpec children.
  	children isSymbol ifTrue:[
  		widget getChildrenSelector: children.
  		widget update: children.
  		children := #().
  	].
  	widget closeWindowSelector: aSpec closeAction.
  	panes := OrderedCollection new.
  	self buildAll: children in: widget.
  	self buildHelpFor: widget spec: aSpec. 
  	widget bounds: (RealEstateAgent 
  		initialFrameFor: widget 
  		initialExtent: (aSpec extent ifNil:[widget initialExtent])
  		world: self currentWorld).
+ 		
+ 	self setLayoutHintsFor: widget spec: aSpec.
+ 		
  	widget setUpdatablePanesFrom: panes.
  	^widget!

Item was added:
+ ----- Method: MorphicToolBuilder>>setLayoutHintsFor:spec: (in category 'private') -----
+ setLayoutHintsFor: widget spec: aSpec
+ 
+ 	aSpec minimumWidth >= 0
+ 		ifTrue: [widget minimumWidth: aSpec minimumWidth].
+ 	aSpec minimumHeight >= 0
+ 		ifTrue: [widget minimumHeight: aSpec minimumHeight].!



More information about the Packages mailing list