2014-12-20 5:49 GMT+01:00 Daniel Lyons <[email protected]>:
> Supposing I have a domain model, Activity, which looks like this:
>
> Object subclass: #Activity
> instanceVariableNames: 'title cost'
> classVariableNames: ''
> category: 'PERT'
>
> Then I have the expected accessors for title and cost.
>
> I make a Polymorph dialog for editing one of these things like so:
>
> PolymorphEditActivity>>edit: anActivity
> | builder content dialog |
> activity := anActivity.
> builder := Smalltalk ui theme builder.
>
> content := builder newLabelGroup: {
> 'Title' -> (builder newTextEntryFor: self activity
> getText: #title setText: #title: help: 'The title of the activity').
> 'Cost' -> (builder newTextEntryFor: self activity getText:
> #cost setText: #cost: help: 'The cost of the activity')
> }.
> dialog := builder newPluggableDialogWindow: 'Edit activity' for:
> content.
> ^ builder openModal: dialog.
>
> *First question*: how do I return a value from the dialog?
>
You don't need the return something, you don't even need to use a separate
instvar in the PolymorphEditActivity.
If "anActivity" is a Activity with the accessor #title / #title:
#cost/#cost:, the PluggableDialogWindow will change this
attributes only if the dialog is closed with "OK"
| anActivity builder content dialog |
anActivity := Activity new.
anActivity title: 'what'.
anActivity cost: '100'.
builder := Smalltalk ui theme builder.
content := builder
newLabelGroup:
{('Title'
->
(builder
newTextEntryFor: anActivity
getText: #title
setText: #title:
help: 'The title of the activity')).
('Cost'
->
(builder
newTextEntryFor: anActivity
getText: #cost
setText: #cost:
help: 'The cost of the activity'))}.
dialog := builder newPluggableDialogWindow: 'Edit activity' for:
content.
builder openModal: dialog.
anActivity inspect