Doru
You know well that Glamour has a component model that it not plain smalltalk
model. So why are you telling me I do not know what?
Now you also know that Glamour overuse blocks with multiple optional block
arguments where the order is important.
So I do not undersand why you are saying that.
Stef
>
> Interesting comparison. It sounds to me as if this "component model" is a bad
> thing and that VW is a gold standard when it comes to describing user
> interfaces. Also, when you say DSL you refer to the way the Smalltalk API was
> design to read like sentences, which might sound like it goes against the
> tradition of Smalltalk. As for blocks, some would go as far as considering
> them to be plain Smalltalk :).
>
> I think a more detailed comparison would be more useful for newcomers. So,
> here is one.
>
> First, the block issue. The funny thing is that if you want to build a
> dynamic browser with Spec you have to rely on blocks, too. Take a look at an
> example from Ben:
>
> ---
> m := DynamicComposableModel new.
> m instantiateModels: #( button ButtonModel list ListModel).
> m list items: #(1 2 3 4 5).
> m button
> label: 'Plip';
> action: [ self halt ].
> m openWithSpecLayout: (SpecLayout composed
> newColumn: [: c | c add: #list ; add: #button height: 26 ];
> yourself).
> ---
>
> Glamour is actually written in plain Smalltalk, and you can simply use
> subclassing, too.
>
> For example, something like this:
> GLMCompositePresentation new
> with: [ :a |
> a list
> display: [ :input | 1 to: input ];
> act: [ :list | self halt ] entitled: 'Plip' ];
> openOn: 42
>
> Could be done like this:
>
>
> "Define a list presentation with an action in distinct classes to make blocks
> disappear"
> GLMGenericAction subclass: #MyPlipAction
> instanceVariableNames: ''
> classVariableNames: ''
> poolDictionaries: ''
> category: 'AAA'.
> GLMListPresentation subclass: #MyListPresentation
> instanceVariableNames: ''
> classVariableNames: ''
> poolDictionaries: ''
> category: 'AAA'.
> MyListPresentation compile:
> 'displayValue
> ^ 1 to: self entity'.
> MyListPresentation compile:
> 'actions
> ^ {MyPlipAction new}'.
> MyPlipAction compile:
> 'actOn: aPresentation
> self halt'.
> MyPlipAction compile:
> 'title
> ^ ''Plip'''.
>
> "Use the list"
> composite := GLMCompositePresentation new.
> composite add: (MyListPresentation new).
> composite openOn: 42.
>
>
> I doubt the blocks are an actual issue. Using blocks has the advantage of
> more compact code, but it is true that it comes with a price: when you store
> the block you cannot edit its code live while debugging (you actually can do
> that, too if you take care).
>
> The main difference between Spec and Glamour is actually conceptual: the
> application space. Spec addresses widgets: with Spec you place widgets on a
> "canvas" and handle the interaction. So, in a sense, this places Spec at the
> same level as Morphic. Glamour is at a higher level and it is specifically
> dedicated to supporting browsing workflows. In its current state, it is not
> useful for laying out widgets, but it can be very concise for expressing
> browsers.
>
> The way this works is via this "component model". Essentially, a browser can
> be described as a set of components that can pass data to each other. Glamour
> lets you model that.
>
> It so happens that the inspector and the debugger are browsers and can be
> expressed at that level. It also so happens that most user interfaces that
> programmers use can be expressed as browsers, too. And Glamour was actually
> validated for hundreds of various browsers (literally), so it seems it can
> support a large set of use cases.
>
> If you want to learn more about Glamour you can read the chapters from:
> - http://deepintopharo.org, or
> - http://www.themoosebook.org/book/internals/glamour
>
> If you want to see where Glamour fits within Moose, you can read this post:
> http://www.humane-assessment.com/blog/moose-custom-analyses-made-easy
>
> Doru
>
>
>
> --
> www.tudorgirba.com
>
> "Every thing has its own flow"