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@0 corner: 1@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@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].! |
Free forum by Nabble | Edit this page |