The spec part of your question:

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.
>
> Now the Spec version of this I have looks like this:
>
> SpecEditActivity>>initializePresenter
>         super initializePresenter.
>         titleWidget whenTextChanged: [ :newText | activity title: newText
> ].
>         costWidget whenTextChanged: [ :newCost | activity cost: newCost ]
>
> Then on the class side of things, I have this layout:
>
> SpecEditActivity class>>layout
>         <spec>
>         ^ SpecLayout composed
>                 newColumn: [ :column |
>                         column
>                                 newRow: [ :row |
>                                         row
>                                                 add: #titleLabel;
>                                                 add: #titleWidget ];
>                                 newRow: [ :row |
>                                          row
>                                                 add: #costLabel;
>                                                 add: #costWidget ] ];
>                 yourself
>
> I make all the expected "getter" methods.
>
> I can see how to get the model value out: I do something like this:
>
> activityDialog := SpecEditActivity new openDialogWithSpec; yourself.
> activityDialog model activity
>

First, please don't add a method #layout on the class side, this conflicts
with the notion of "Slots" (bug reported, but it is not fixed yet)



>
> I have two questions about the Spec side of the house:
>
> 1. The title/costWidget whenTextChanged: stuff. With Polymorph, I can just
> say, here's an object, here's the getter/setter, deal with it. Does Spec
> have anything like this, or do you have to do this manual data shuffling?
> Is there an example I can learn from?
>

If you just want to show an edit dialog, I would separate the
Acitivty-Model (two textfields) from your domain model "Activity". Then you
don't need this "whenTextChanged". This is only needed if other elements
from the model
depend on the textfield content.

Now you can use spec to only show a dialog and after closing this dialog
you can retrieve the values with

activitiy title: theDialogModel titleWidget text
activity cost:  theDialogModel costWidget text
....



>
> 2. This layout is a bit on the ugly side. I looked at the examples and saw
> usage of the expert layout with asking how tall a line is. Is that the best
> that can be done, or is there something more like Polymorph's label layout
> that can be used instead?
>

you can define the hight of the rows based on the inputfield default height
(based on the current theme) (ComposableModel class >>#defaultInputHeight

Take a look at Komitters CredentialEditor


> Thanks for your time and patience!
>
> —
> Daniel Lyons
>
>
>
>
>

Reply via email to