Hi Rob,
I guess the best resource at the moment is to just look at existing adapters.
But here are some thoughts to get you started:
(Spec) ComposableModel has as its widget (Spec) Adapter
Adapter has as its widget the actual visual component, which currently means
Morphic.
The simplest example: LabelModel
1. model to adapter
LabelModel is adapted by MorphicLabelAdapter:
you can see on the class side in method `defaultSpec`.
There is only `LabelAdapter` there because there is some extra mapping for some
classes, but you can specify directly the class of the Adapter, so the
following would work just as well:
LabelModel class>>defaultSpec
<spec>
^ #(MorphicLabelAdapter
adapt: #(model))
LabelModel -> LabelAdapter direct event propagation (pushing changes)
in Model world you can call changed:with: to execute code on the Adapter, e.g.
self changed: #emphasis: with: {emphasis}
which in turn will call the #emphasis: method on the LabelAdapter.
LabelModel -> LabelAdapter events (pulling changes)
preferred alternative is to do the opposite; properties of models are often
held in ValueHolders, which can be observed on ValueChange, so the Adapter can
register to event change and react on itself;
you can see this best in MorphicTabAdapter (but you will see that TabAdapter
looks a bit different from the rest, because I was experimenting with cleaning
up Adapters...)
2. adapter to morphic
Every adapter implements #buildWidget method that returns a Morphic Object.
Typically the adapter registers itself as the model of the adapter (so
adapter's model is Spec, and Morphic's model is the adapter). This depends a
lot on the API of morphic. (in TabAdapter I'm overriding adapt: so there's no
buildWidget, and it is in #buildWidgetWith:).
It is all kinds of messy, but if you have other widgets then it will be a good
test how well Spec can handle it... or rather we'll see how it can be
improved...
Peter
On Thu, Apr 27, 2017 at 05:10:39PM -0400, Rob Rothwell wrote:
> Hello,
>
> I have recently been lucky enough to get the Cocoa portion of Mars working
> on Pharo 5.0. While there are some issues, it has a wonderful set of
> examples that allowed me create new Cocoa classes and delegate methods and
> see a straightforward path to learning how to use Coco widgets from Pharo.
>
> I'd like to do that by creating appropriate Spec adapters, but
> unfortunately the new Spec booklet wasn't designed for that!
>
> Can anyone give me any insight into creating (and using) a new Spec
> adapter? Maybe just some high level steps to help me orient my
> investigation into how Spec works?
>
> Thank you,
>
> Rob