Spec 2.0.0 release

I am glad to announce a new major release for Spec .

Backward compatibility breaker

  • ListModel menus: now the ListModel instances use an instance of MenuModel as argument instead of a Morphic object. An example is provided in ListModel class>>#example


  • Removes unrelated to Spec core packages (i.e. Spec-Tools)
  • Adds SpecTableLayout, thanks @webwarrior-ws
  • Removes hardcoded colours, thanks @Uko

In addition, some bug fixes and clean ups.

This version has been tested with Pharo 4.0 - build 167

Spec license change

Today, Spec is changing its license.

Until today, Spec was released under the MIT license.

But after a disagreement with the Pharo direction, and in order to keep control of Spec future it has been decided to change Spec license.

Now Spec is released under a dual license:

  • GPL v3 license when shipped as part of a programming language, its core libraries and frameworks, or its Integrated Development Environment. For more information about the lincense, see LICENSE-GPL
  • MIT license for other cases. For more information about the license, see LICENSE-MIT

Fix splitters

Glad to announce that with the help of Sean P. DeNigris the problem of splitters in Spec has been tackled.

The problem was revealed when multiple morphs were present after a splitter. In this configuration the two morphs moved in a really strange way.

The fix provides a new algorithm to retrieve the morphs which should be attached to each splitters.

The fix should be into Pharo as soon as the slice is integrated.

Menu Toolbar

Spec provides today a new missing feature: a menu toolbar.

As recently suggested in the mailing list, a menu toolbar is often a requirement to build an application. In order to provide an easy way to add a menu toolbar, Spec reuse MenuModel to generate the toolbar entries.

So now, a MenuModel can be used in two cases: to define a toolbar, or to define a contextual menu.

An example can be opened via

ApplicationWithToolbar new openWithSpec


PFTE Release

I am happy to announce that Benjamin Van Ryseghem and I finished the documentation of Spec for the Pharo For The Enterprise book. This documentation is up-to-date with the latest version of Spec, and is focused towards people wanting to use it and even extend it. We hope that this text will help all the people that are building UIs in Pharo, and it will clear up any doubts that they may have.

The chapter is available in source form from the GitHub project of the Pharo For The Enterprise book.

The easiest way to read the chapter is from the continuous integration server, which produces a html file of the chapter here.

We tried our best to make it understandable and complete, but if you have any doubts or comments please do not hesitate to let us know !! You can find the pier files on GitHub, where you can also report issues or propose fixes.

Now it's time to build some cool user interfaces!

PS from Ben: I would like to personally thank Sean P. DeNigris for his surprise pull requests.

El Sprint Chileno

After a cool sprint yesterday, a couple of Spec issues has been tackled .

Case 12695: Fix InputWidget example and add a new one. These examples are showing how to set up a window modality. Thanks Samir Saleh and Sean P. DeNigris for this fix.

Case 12683: The labels background is changing when the containing model is open as world (with openWorldWithSpec).

Case 12684: Renaming NewValueHolder into ReactiveVariable. But since Pharo 3 is already in beta phase, changing the API was not possible. So instead two hooks were introduced to allow the integration of code from Spec bleeding edge to Pharo 3. For new code (and all code in future versions of Pharo), use the following two hook methods:

  • asReactiveVariable: use wherever you would have used asValueHolder, which will soon be deprecated. For now, it returns a NewValueHolder. In the future it will return a (polymorphic) ReactiveVariable
  • selectionReactiveVariable: as above, returns a SelectionValueHolder for now. This extension method allows the two different packages to coexist without having direct references from the Spec model.

Thanks a lot Sean P. DeNigris for you help and energy.

Improvements in DynamicComposableModel

Right now it is easy to prototype a UI in a workspace or to dynamically build a model on demand at run time, but this prototype can not be reused for composition.

Because of this, the prototyping is quite limited.

But the latest Spec commit introduces few changes on DynamicComposableModel to tackle this issue.

The problem was double: no way to add an instanciated model as a sub widget, and the lookup for the layout was looking for a selector on class side.

The first problem was actually just a method missing since the DynamicComposableModel class manage the widgets in a dictionary.

The second problem was slighty more tedious. To work, it requires from the embedded sub widget to have a layout defined. A new instance variable layout has been introduce to hold the SpecLayout instance used to position the sub widgets. This way, when a layout is requested for the dynamic model, this layout is returned (regardless of the selector requested).

These two fixes add support for a better composition in the dynamic context .

If you want to try, this snippet gives you an example of how to build such unser interface.

First Release

I am glad to announce this super website dedicated to Spec and the things related to this cool framework .

You will find here the Spec documentation as well as a news feed about Spec progresses.

If you want to collaborate, the website can be found on .

Thank you all!