The Trunk: ToolBuilder-Morphic-mt.137.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

The Trunk: ToolBuilder-Morphic-mt.137.mcz

commits-2
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].!