Hi Stef,
Thanks for pushing this.
I definitely understand these issues, and a solution will follow in the near future. It is
just a matter of effort, and until now the main goal was to get things going at the model
level. This is now working quite well, so now it's time to focus on the rendering and
on the API.
The only thing is that the API will only grow from people using it. With Mondrian, we
could do it by having it used by a small amount of people. Glamour is a more complicated
engine, and getting the right API right is not as straightforward. What you have right now
is already the third version.
The rest of the comments are inlined.
I asked several guys around here to have a look at
Glamour and gives you feedback and to see if we can build some cool tools
with glamour. Alain told me that he will have a look too.
Now the problem of benjamin is also really interesting in the sense that we could not
debug it and find the problem ourselves
and that was frustrating: mismatch of block arguments or something like that.
This was a mismatch of the returned type.
This is this aspect of glamour that I would like to
see lowered.
You see even reading your answer and looking at the code I do not get it. :(
then some questions:
why children: [:item :x :level |
> level > 1 ifTrue: [#()] ifFalse: [1
to: item ] ]].
could not be
child: childObject level: level....
Basically, for every item, we want to know how to build the children collection. When you
need to reason about multiple things, you need to pass them as a parameter in the block.
Perhaps we can have something like:
children: aBlock
children: aBlock atLevel: anInteger
children: aBlock atLevelHigherThan: anInteger
I have no idea what is x.
in this case, the second variable is not used inside the block, so I just marked it with x
to document that fact. The object is the presentation object.
So for me there is an overuse of block and blocks have
no name contrary to method so we miss a lot of the hidden context.
So any solution lowering the amount of blocks would be good may be using methods instead
and (in that case having
less scripting and more programming api would help).
The blocks are just a convenience to construct and parameterize your presentations. Of
course, this is only one way, and not the only way :). There really isn't anything
magic about it. But, as I said, I will follow with another mail in the following days.
Doru
I understand that right now you want to script your
browser in a workspace. But when the script gets bigger and gets hosted in a class
then not using method is frustrating. so having an API for scripting is one point but it
would be good to have the counterpart when we
code class because at the end we will code classes.
Stef
Hi Benjamin,
First of all, welcome :).
Second of all, thanks for reminding me that I should update the examples with using the
new API, instead of the old one that uses showOn:. I committed a quick update of the
treeWithChildrenByLevel to give you an idea of the difference.
Coming back to your example, the problem is that the children block does not return a
collection, but an integer. If you want to see the children of a node, you need to specify
a collection with objects that will appear as children. Ideally, they should be of the
same type as the root nodes.
Cheers,
Doru
On 2 Nov 2010, at 19:12, Benjamin wrote:
Hi everybody,
I'm just discovering Glamour, and after having read examples, I've tested to
write my own browser but, as you guessed, it doesn't work and moreover the debugger
doesn't help me at all
Here is my code :
recentSetBrowser
| browser |
browser := GLMTabulator new.
browser column: #one.
browser showOn: #one; using: [
browser tree
title: 'Tree';
children: [:item :x :level |
level > 1 ifTrue: [#()] ifFalse: [item size ]]].
^browser
Here is the example :
treeWithChildrenByLevel
|browser |
browser := GLMTabulator new.
browser column: #one; column: [:c | c row: #two; row: #three].
browser showOn: #one; using: [
browser tree
title: 'Tree';
children: [:item :x :level |
level > 1 ifTrue: [#()] ifFalse: [1 to: item ] ]].
browser showOn: #two; from: #one; using: [ browser text title: 'Selection
preview' ].
browser showOn: #three; from: #one->#selectionPath; using: [
browser text title: 'Selection path preview'].
^ browser
When I run
GLMTest1 new recentSetBrowser openOn: #('lapin' 'chapeau')
the debugger answer :
'MessageNotUnderstood: SmallInteger>>collect:' ...
If someone can help me :)
Benjamin Van Ryseghem
_______________________________________________
Moose-dev mailing list
Moose-dev(a)iam.unibe.ch
https://www.iam.unibe.ch/mailman/listinfo/moose-dev
--
www.tudorgirba.com
"Live like you mean it."
_______________________________________________
Moose-dev mailing list
Moose-dev(a)iam.unibe.ch
https://www.iam.unibe.ch/mailman/listinfo/moose-dev
_______________________________________________
Moose-dev mailing list
Moose-dev(a)iam.unibe.ch
https://www.iam.unibe.ch/mailman/listinfo/moose-dev
--
www.tudorgirba.com
"Beauty is where we see it."