On Dec 20, 2014, at 4:06 AM, Nicolai Hess <nicolaihess@web.de> wrote:The spec part of your question:2014-12-20 5:49 GMT+01:00 Daniel Lyons <fusion@storytotell.org>: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 activityFirst, 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 withactivitiy 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 >>#defaultInputHeightTake a look at Komitters CredentialEditor
Thanks for your time and patience!
���
Daniel Lyons