[squeak-dev] 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 Squeak-dev
mailing list
|