Since you are doing some really edge use of Spec,
it's not covered by Spec easily.
But if on you model you have a method returning your pluginClasses, you could
do maybe:
| layout |
layout := SpecLayout composed.
self pluginClasses do: [ :c |
layout add: {#model. pluginOf:. c} ]
I am not sure it works, but it worth a try :P
Ben
On Oct 4, 2013, at 9:28 PM, Pavel Krivanek <[email protected]> wrote:
> This was the original code for the spec that embeds plugins. As you
> can see, it had to use ugly addMorph:. I do not think that I need to
> do something special. Has the current Spec a better way how to do
> that?
>
> defaultSpec
>
> | spec |
> spec := OrderedCollection with: #ContainerModel.
> spec addAll: {#changeTableLayout.
> #listDirection:. #topToBottom.
> #hResizing:. #spaceFill.
> #vResizing:. #spaceFill.}.
> self pluginClasses do: [:c |
> spec add: #addMorph:.
> spec add: {(self pluginOf: c) defaultSpec}].
> ^ spec asArray.
>
> 2013/10/4 Pavel Krivanek <[email protected]>:
>> In other words... I have a model that has some plugins. I need to
>> generate a spec that embeds specs generated for each plugin. Models
>> for this embedded specs must be the plugins, not the original model.
>>
>> -- Pavel
>>
>> 2013/10/4 Pavel Krivanek <[email protected]>:
>>> well, and the version with "SpecLayout composed" when I do not need
>>> direct fractions?
>>>
>>> ^ SpecLayout composed
>>> newRow:[: r |
>>> r add: #finderButtonModel]
>>> height: 25
>>>
>>> How to send #finderButtonModel to different object than SpecInterpreter
>>> model?
>>>
>>> -- Pavel
>>>
>>> 2013/10/4 Benjamin <[email protected]>:
>>>> ^{ #ContainerModel.
>>>>
>>>> #vShrinkWrap.
>>>>
>>>> #add:. {{self. #finderButtonModel}.
>>>>
>>>> #layout:. #(FrameLayout
>>>>
>>>> rightFraction: 0.125)}.
>>>>
>>>> #add:. {{self. #browserButtonModel}.
>>>>
>>>> #layout:. #(FrameLayout
>>>>
>>>> leftFraction: 0.125
>>>> rightFraction: 0.25)}}
>>>>
>>>> This should work, but looks strange though :P
>>>>
>>>> Ben
>>>>
>>>> On Oct 4, 2013, at 8:13 PM, Pavel Krivanek <[email protected]>
>>>> wrote:
>>>>
>>>> Ben,
>>>>
>>>> how now should look code like this:
>>>>
>>>> defaultSpec
>>>>
>>>> ^{ #ComposableSpec.
>>>> #vResizing:. #shrinkWrap.
>>>> #add:. {{self. #finderButtonModel}.
>>>> #layout:. #(FrameLayout
>>>> rightFraction: 0.125)}.
>>>> #add:. {{self. #browserButtonModel}.
>>>> #layout:. #(FrameLayout
>>>> leftFraction: 0.125
>>>> rightFraction: 0.25)}}
>>>>
>>>> -- Pavel
>>>>
>>>> 2013/10/4 Benjamin <[email protected]>:
>>>>
>>>> For Spec users:
>>>>
>>>> The change is mostly backward compatible :)
>>>> 2 things really changed:
>>>> - direct access to a model's widget is not returning what it used to
>>>> return.
>>>> This is done on purpose since
>>>> it's very often a bad idea to directly access the widget.
>>>> - some behaviour on trees are now only available after the tree build. This
>>>> is because some properties
>>>> have been moved on the adapter directly, which is reachable only after the
>>>> model build.
>>>> You can use `whenBuiltDo:` to add post-build actions.
>>>>
>>>> Enjoy this new Spec :P
>>>>
>>>> Ben
>>>>
>>>> On Oct 4, 2013, at 2:31 PM, Marcus Denker <[email protected]> wrote:
>>>>
>>>> 30448
>>>> -----
>>>>
>>>> 11740 Remove Morphic dependency from Spec
>>>> https://pharo.fogbugz.com/f/cases/11740
>>>>
>>>> A Huge change from Ben...
>>>>
>>>> Diff information:
>>>> http://smalltalkhub.com/mc/Pharo/Pharo30/main/Tools-MarcusDenker.1292.diff
>>>> http://smalltalkhub.com/mc/Pharo/Pharo30/main/Tabs-MarcusDenker.33.diff
>>>> http://smalltalkhub.com/mc/Pharo/Pharo30/main/Spec-Widgets-MarcusDenker.265.diff
>>>> http://smalltalkhub.com/mc/Pharo/Pharo30/main/Spec-Tools-MarcusDenker.150.diff
>>>> http://smalltalkhub.com/mc/Pharo/Pharo30/main/Spec-Tests-MarcusDenker.35.diff
>>>> http://smalltalkhub.com/mc/Pharo/Pharo30/main/Spec-MorphicAdapters-MarcusDenker.9.diff
>>>> http://smalltalkhub.com/mc/Pharo/Pharo30/main/Spec-PolyWidgets-MarcusDenker.7.diff
>>>> http://smalltalkhub.com/mc/Pharo/Pharo30/main/Spec-Layout-MarcusDenker.58.diff
>>>> http://smalltalkhub.com/mc/Pharo/Pharo30/main/Spec-Inspector-MarcusDenker.102.diff
>>>> http://smalltalkhub.com/mc/Pharo/Pharo30/main/Spec-Examples-MarcusDenker.48.diff
>>>> http://smalltalkhub.com/mc/Pharo/Pharo30/main/Spec-Debugger-MarcusDenker.163.diff
>>>> http://smalltalkhub.com/mc/Pharo/Pharo30/main/Spec-Core-MarcusDenker.175.diff
>>>> http://smalltalkhub.com/mc/Pharo/Pharo30/main/Spec-Builder-MarcusDenker.43.diff
>>>> http://smalltalkhub.com/mc/Pharo/Pharo30/main/Spec-Bindings-MarcusDenker.35.diff
>>>> http://smalltalkhub.com/mc/Pharo/Pharo30/main/NautilusRefactoring-MarcusDenker.126.diff
>>>> http://smalltalkhub.com/mc/Pharo/Pharo30/main/Spec-Adapters-MarcusDenker.3.diff
>>>> http://smalltalkhub.com/mc/Pharo/Pharo30/main/Manifest-CriticBrowser-MarcusDenker.124.diff
>>>> http://smalltalkhub.com/mc/Pharo/Pharo30/main/Keymapping-Tools-Spec-MarcusDenker.19.diff
>>>> http://smalltalkhub.com/mc/Pharo/Pharo30/main/KeyChain-MarcusDenker.58.diff
>>>> http://smalltalkhub.com/mc/Pharo/Pharo30/main/HudsonBuildTools20-MarcusDenker.45.diff
>>>>
>>>>
>>>>
>>>>
>