> On Dec 20, 2014, at 4:06 AM, Nicolai Hess <[email protected]> wrote:
> 
> The spec part of your question:
> 
> 2014-12-20 5:49 GMT+01:00 Daniel Lyons <[email protected] 
> <mailto:[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)

Don't add a method to do the layout or don't name it #layout? The tutorial 
doesn't say what to name the method, just that it can be named anything using 
the pragma.

>  
> 
> 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
> ....

OK, but two questions:

1. How do I know when the dialog is finished?
2. That's going to be a lot of manual copying compared to the Polymorph 
version. Is that just life or are there "pluggable" widgets that will talk to 
my model directly?

>  
> 
> 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!

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

— 
Daniel Lyons



Reply via email to