[squeak-dev] The Trunk: ToolBuilder-Morphic-Igor.Stasenko.48.mcz

commits at source.squeak.org commits at source.squeak.org
Wed Jan 20 04:43:43 UTC 2010


Andreas Raab uploaded a new version of ToolBuilder-Morphic to project The Trunk:
http://source.squeak.org/trunk/ToolBuilder-Morphic-Igor.Stasenko.48.mcz

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

Name: ToolBuilder-Morphic-Igor.Stasenko.48
Author: Igor.Stasenko
Time: 17 January 2010, 4:24:22.823 am
UUID: 37836639-4c82-424d-b97e-b2452c7fdecc
Ancestors: ToolBuilder-Morphic-nice.47

- placed a widget classes, used by MorphicToolBuilder
into separate methods.
So, one could subclass the MorphicToolBuilder and use different widgets, while retaining rest of building logic

=============== Diff against ToolBuilder-Morphic-nice.47 ===============

Item was changed:
  ----- Method: MorphicToolBuilder>>buildPluggableWindow: (in category 'pluggable widgets') -----
  buildPluggableWindow: aSpec
  	| widget children label |
  	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 windowClass new.
- 	widget := PluggableSystemWindow new.
  	self register: widget id: aSpec name.
  	widget model: aSpec model.
  	(label := aSpec label) ifNotNil:[
  		label isSymbol 
  			ifTrue:[widget getLabelSelector: label]
  			ifFalse:[widget setLabel: label]].
  	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.
  	widget bounds: (RealEstateAgent 
  		initialFrameFor: widget 
  		initialExtent: (aSpec extent ifNil:[widget initialExtent])
  		world: self currentWorld).
  	widget setUpdatablePanesFrom: panes.
  	^widget!

Item was added:
+ ----- Method: MorphicToolBuilder>>menuItemClass (in category 'widget classes') -----
+ menuItemClass
+ 	^ MenuItemMorph!

Item was added:
+ ----- Method: MorphicToolBuilder>>menuClass (in category 'widget classes') -----
+ menuClass
+ 	^ MenuMorph!

Item was added:
+ ----- Method: MorphicToolBuilder>>windowClass (in category 'widget classes') -----
+ windowClass
+ 	^ PluggableSystemWindow!

Item was changed:
  ----- Method: MorphicToolBuilder>>buildPluggableList: (in category 'pluggable widgets') -----
  buildPluggableList: aSpec
  	| widget listClass getIndex setIndex |
  	aSpec getSelected ifNil:[
+ 		listClass := self listClass.
- 		listClass := PluggableListMorphPlus.
  		getIndex := aSpec getIndex.
  		setIndex := aSpec setIndex.
  	] ifNotNil:[
+ 		listClass := self listByItemClass.
- 		listClass := PluggableListMorphByItemPlus.
  		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.
  	widget doubleClickSelector: aSpec doubleClick.
  	widget dragItemSelector: aSpec dragItem.
  	widget dropItemSelector: aSpec dropItem.
  	widget wantsDropSelector: aSpec dropAccept.
  	widget autoDeselect: aSpec autoDeselect.
  	self setFrame: aSpec frame in: widget.
  	parent ifNotNil:[self add: widget to: parent].
  	panes ifNotNil:[
  		aSpec list ifNotNil:[panes add: aSpec list].
  	].
  	^widget!

Item was added:
+ ----- Method: MorphicToolBuilder>>codePaneClass (in category 'widget classes') -----
+ codePaneClass
+ 	^ PluggableTextMorphPlus!

Item was changed:
  ----- Method: MorphicToolBuilder>>buildPluggableText: (in category 'pluggable widgets') -----
  buildPluggableText: aSpec
  	| widget |
+ 	widget := self textPaneClass on: aSpec model
- 	widget := PluggableTextMorphPlus on: aSpec model
  				text: aSpec getText 
  				accept: aSpec setText
  				readSelection: aSpec selection 
  				menu: aSpec menu.
  	widget askBeforeDiscardingEdits: aSpec askBeforeDiscardingEdits.
  	widget font: Preferences standardCodeFont.
  	self register: widget id: aSpec name.
  	widget getColorSelector: aSpec color.
  	self setFrame: aSpec frame in: widget.
  	parent ifNotNil:[self add: widget to: parent].
  	widget borderColor: Color lightGray.
  	widget color: Color white.
  	^widget!

Item was changed:
  ----- Method: MorphicToolBuilder>>buildPluggableMultiSelectionList: (in category 'pluggable widgets') -----
  buildPluggableMultiSelectionList: aSpec
  	| widget listClass |
  	aSpec getSelected ifNotNil:[^self error:'There is no PluggableListMorphOfManyByItem'].
+ 	listClass := self multiSelectListClass.
- 	listClass := PluggableListMorphOfMany.
  	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.
  	self setFrame: aSpec frame in: widget.
  	parent ifNotNil:[self add: widget to: parent].
  	panes ifNotNil:[
  		aSpec list ifNotNil:[panes add: aSpec list].
  	].
  	^widget!

Item was added:
+ ----- Method: MorphicToolBuilder>>textPaneClass (in category 'widget classes') -----
+ textPaneClass
+ 	^ PluggableTextMorphPlus!

Item was changed:
  ----- Method: MorphicToolBuilder>>buildPluggableCodePane: (in category 'pluggable widgets') -----
  buildPluggableCodePane: aSpec
  	"Install the default styler for code panes.
  	Implementation note: We should just be doing something like, e.g.,
  		^(self buildPluggableText: aSpec) useDefaultStyler
  	Unfortunately, this will retrieve and layout the initial text twice which
  	can make for a noticable performance difference when looking at some
  	larger piece of code. So instead we copy the implementation from 
  	buildPlugggableText: here and insert #useDefaultStyler at the right point"
  	| widget |
+ 	widget := self codePaneClass new.
- 	widget := PluggableTextMorphPlus new.
  	widget useDefaultStyler.
  	widget on: aSpec model
  				text: aSpec getText 
  				accept: aSpec setText
  				readSelection: aSpec selection 
  				menu: aSpec menu.
  	widget font: Preferences standardCodeFont.
  	self register: widget id: aSpec name.
  	widget getColorSelector: aSpec color.
  	self setFrame: aSpec frame in: widget.
  	parent ifNotNil:[self add: widget to: parent].
  	widget borderColor: Color lightGray.
  	widget color: Color white.
  	^widget!

Item was added:
+ ----- Method: MorphicToolBuilder>>multiSelectListClass (in category 'widget classes') -----
+ multiSelectListClass
+ 	^ PluggableListMorphOfMany!

Item was added:
+ ----- Method: MorphicToolBuilder>>treeClass (in category 'widget classes') -----
+ treeClass
+ 	^ PluggableTreeMorph!

Item was changed:
  ----- Method: MorphicToolBuilder>>buildPluggablePanel: (in category 'pluggable widgets') -----
  buildPluggablePanel: aSpec
  	| widget children |
+ 	widget := self panelClass new.
- 	widget := PluggablePanelMorph new.
  	self register: widget id: aSpec name.
  	widget model: aSpec model.
  	widget color: Color transparent.
  	widget clipSubmorphs: true.
  	children := aSpec children.
  	children isSymbol ifTrue:[
  		widget getChildrenSelector: children.
  		widget update: children.
  		children := #().
  	].
  	self buildAll: children in: widget.
  	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 |
  		(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.
  	^widget!

Item was added:
+ ----- Method: MorphicToolBuilder>>listClass (in category 'widget classes') -----
+ listClass
+ 	^ PluggableListMorphPlus!

Item was changed:
  ----- Method: MorphicToolBuilder>>buildPluggableMenu: (in category 'building') -----
  buildPluggableMenu: menuSpec 
  	| prior menu |
  	prior := parentMenu.
+ 	parentMenu := menu := self menuClass new.
- 	parentMenu := menu := MenuMorph new.
  	menuSpec label ifNotNil:[parentMenu addTitle: menuSpec label].
  	menuSpec items do:[:each| each buildWith: self].
  	parentMenu := prior.
  	^menu!

Item was changed:
  ----- Method: MorphicToolBuilder>>buildPluggableTree: (in category 'pluggable widgets') -----
  buildPluggableTree: aSpec
  	| widget |
+ 	widget := self treeClass new.
- 	widget := PluggableTreeMorph new.
  	self register: widget id: aSpec name.
  	widget model: aSpec model.
  	widget getSelectedPathSelector: aSpec getSelectedPath.
  	widget setSelectedSelector: aSpec setSelected.
  	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 getRootsSelector: aSpec roots.
  	widget autoDeselect: aSpec autoDeselect.
  	widget dropItemSelector: aSpec dropItem.
  	widget wantsDropSelector: aSpec dropAccept.
  	self setFrame: aSpec frame in: widget.
  	parent ifNotNil:[self add: widget to: parent].
  "	panes ifNotNil:[
  		aSpec roots ifNotNil:[panes add: aSpec roots].
  	].	"
  	^widget!

Item was added:
+ ----- Method: MorphicToolBuilder>>buttonClass (in category 'widget classes') -----
+ buttonClass
+ 	^ PluggableButtonMorphPlus!

Item was changed:
  ----- Method: MorphicToolBuilder>>buildPluggableButton: (in category 'pluggable widgets') -----
  buildPluggableButton: aSpec
  	| widget label state action enabled |
  	label := aSpec label.
  	state := aSpec state.
  	action := aSpec action.
+ 	widget := self buttonClass on: aSpec model
- 	widget := PluggableButtonMorphPlus on: aSpec model
  				getState: (state isSymbol ifTrue:[state])
  				action: nil
  				label: (label isSymbol ifTrue:[label]).
  	self register: widget id: aSpec name.
  	enabled := aSpec enabled.
  	enabled isSymbol
  		ifTrue:[widget getEnabledSelector: enabled]
  		ifFalse:[widget enabled:enabled].
  	widget action: action.
  	widget getColorSelector: aSpec color.
  	widget offColor: Color white..
  	aSpec help ifNotNil:[widget setBalloonText: aSpec help].
  	(label isSymbol or:[label == nil]) ifFalse:[widget label: label].
  	self setFrame: aSpec frame in: widget.
  	parent ifNotNil:[self add: widget to: parent].
  	^widget!

Item was added:
+ ----- Method: MorphicToolBuilder>>panelClass (in category 'widget classes') -----
+ panelClass
+ 	^ PluggablePanelMorph!

Item was added:
+ ----- Method: MorphicToolBuilder>>listByItemClass (in category 'widget classes') -----
+ listByItemClass
+ 	^ PluggableListMorphByItemPlus!

Item was changed:
  ----- Method: MorphicToolBuilder>>buildPluggableMenuItem: (in category 'building') -----
  buildPluggableMenuItem: itemSpec
  	| item action label menu |
+ 	item := self menuItemClass new.
- 	item := MenuItemMorph new.
  	label := itemSpec label.
  	itemSpec checked ifTrue:[label := '<on>', label] ifFalse:[label := '<off>', label].
  	item contents: label.
  	item isEnabled: itemSpec enabled.
  	(action := itemSpec action) ifNotNil:[
  		item 
  			target: action receiver;
  			selector: action selector;
  			arguments: action arguments.
  	].
  	(menu := itemSpec subMenu) ifNotNil:[
  		item subMenu: (menu buildWith: self).
  	].
  	parentMenu ifNotNil:[parentMenu addMorphBack: item].
  	itemSpec separator ifTrue:[parentMenu addLine].
  	^item!




More information about the Squeak-dev mailing list