Hi Dennis,

On Fri, Apr 28, 2017 at 7:09 AM, Rob Rothwell <r.j.rothw...@gmail.com>
wrote:

> Hi Peter,
>
> Thank you very much for that overview!
>
> It looks like even just creating a window with no other widgets is sort of
> "hard-wired" to Morphic through ComposableModel>>defaultWindowModelClass,
> so maybe just overriding that and trying to create a Cocoa window model and
> adapter is the place to start.
>
> I need to find a good starting point because you can't poke at the
> existing code too much since even the debugger is built with Spec!
>

Would your remote IDE [1] be suitable to help Rob to hack around Spec
without blowing up his IDE?
But I think its only available on Pharo 6?

[1]
http://forum.world.st/Ann-PharmIDE-Pharo-remote-IDE-to-develop-farm-of-Pharo-images-remotely-td4930602.html


cheers -ben



>
> It's pretty exciting, though, because it feels like all the right pieces
> are there and a lot of this could mostly be "just work" once I get going.
>
> Thanks again,
>
> Rob
>
> On Thu, Apr 27, 2017 at 6:04 PM, Peter Uhnak <i.uh...@gmail.com> wrote:
>
>> 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
>>
>>
>

Reply via email to