A first version of fuel's graph visualization, without expandables yet:
"install"
Gofer it
squeaksource: 'Roassal';
package: 'ConfigurationOfRoassal';
load.
(Smalltalk at: #ConfigurationOfRoassal) loadDevelopment.
Gofer it
url: 'http://ss3.gemstone.com/ss/Fuel';
version: 'Fuel-MartinDias.497';
version: 'FuelPreview-MartinDias.2';
load.
"use:
- on mouse over, shows printString
- on right click, opens inspector
"
(FLAnalyzer newDefault showPreview
analysisFor: (SortedCollection sortBlock: [:a :b | a > b ]))
open
Martín
On Wed, Nov 30, 2011 at 10:12 AM, Alexandre Bergel
<alexandre.bergel(a)me.com>wrote;wrote:
Hi Martin!
> So it would be useful to ask the tool things
like:
> - paint / iterate the nodes such [:object | object class ==
UnexpectedClass]
Having some iterators you mean?
- suggest me a "bottleneck" edge
An iterator could easily do the thing. I will provide the infrastructure.
I inserted visitor. I built a ROHighlighter that highlight some nodes.
You can use it like: ROHighlighter for: b in: view.
where b is a block.
Look for the users of ROHighlighter to see some examples.
Let me know if you need more.
> - show me the shape of the whole graph and I
could discover what is
wrong at a glance
Yep, this is on my todo list. Having a small portion of the window that
shows the
whole graph.
I still need to work on this.
Cheers,
Alexandre
>
>>
>>
>> On 24 Nov 2011, at 20:16, Alexandre Bergel wrote:
>>
>>> Cool!
>>>
>>> Here is a new version of your script:
>>> -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
>>> | view initialNodes |
>>> view := ROView new.
>>> initialNodes := (ROLabelElement spritesFor: (Array with:
Integer))
asOrderedCollection.
>>> initialNodes do: [:n |
>>> n + ROLabel.
>>> n @ (ROExpandChildrenOnClick newCalculatingChildrenWith:
[:aClass | aClass subclasses])].
>>> view addAll: initialNodes.
>>> ROTreeLayout on: initialNodes.
>>> view @RODraggable @ RODraggableWithVelocity.
>>> view open
>>> -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
>>>
>>> I also fixed a few things in your class:
>>> <ROExpandChildrenOnClick.st>
>>>
>>> Let me know how it goes.
>>>
>>> Cheers,
>>> Alexandre
>>>
>>>
>>> On 24 Nov 2011, at 15:48, Martin Dias wrote:
>>>
>>>> I downloaded Roassal, I like it!
>>>>
>>>> Modifying an example, I obtained something like an expandable tree,
but I don't know how to re-layout after click. Could you help me?
>>>>
>>>> I paste the script and I attach a class (which is needed).
>>>>
>>>> | view initialNodes |
>>>> view := ROView new.
>>>> initialNodes := (ROElement spritesFor: (Array with: Integer))
asOrderedCollection.
>>>> initialNodes do: [:n |
>>>> n + ROLabel.
>>>> n @ (ROExpandChildrenOnClick newCalculatingChildrenWith:
[:aClass | aClass subclasses])].
>>>> view addAll: initialNodes.
>>>> ROTreeLayout on: initialNodes.
>>>> view open
>>>>
>>>> Thanks!
>>>> Martín
>>>>
>>>>
>>>> On Tue, Nov 15, 2011 at 9:41 AM, Alexandre Bergel <
alexandre.bergel(a)me.com> wrote:
>>>>> I fail to see what these
principles are :). Mondrian is nothing but
a very simple graph model with a builder
api and some rendering logic.
zOrder is just a smart way of drawing edges such that you can see them
properly even in the case of nested graphs. But, the model does not have to
be static.
>>>>
>>>> Although quite effective visually, the zOrder gives an ordering that
may be different from the one specified by the user.
>>>>
>>>> You could have:
>>>> view node: 'A' forIt: [ view node: 'B' ]
>>>>
>>>> But the ordering of drawing A and B is driven by the zOrder. The
elements to displayed are cached in the MONode. However, the lookup when
you define an edge itself follows the node nesting.
>>>>
>>>> I agree with you that the model that does not have to be static, but
over the year we have put a great deal of effort in making Mondrian fast.
Now, we are trying to make it dynamic in addition. This is a non-trivial
piece of work.
>>>>
>>>> Also, I have the intuition that we need a dedicated DSL to define
the kind of visualization Martin is looking for.
>>>>
>>>>> I took a quick look at Roassal. It looks quite interesting.
>>>>
>>>> Thanks!
>>>>
>>>>> I have some questions/remarks:
>>>>> - What is the performance for large views when compared with
Mondrian?
>>>>
>>>> I haven't addressed the need for performance. One cool thing about
Roassal, is that I do not rely on the Morph scrollbar. This gives more
control about what exactly is displayed. Also, I have flying cameras, which
is neat.
>>>>
>>>>> - It is at a lower level of abstraction than Mondrian, but higher
than actual rendering. The first thing I thought of when looking at it was
that perhaps it would be interesting to have it as a backend for Mondrian.
Like this we can potentially have the best of both worlds and we can reuse
the engineering effort. And then I saw ROMondrianViewBuilder which is a
good start :).
>>>>
>>>> Ideally, I would like Roassal to be a low level for Mondrian. This
is indeed what I tried with ROMondrianViewBuilder as you can see. I guess
that for Martin problem, we need something like
ROHierarchicalGraphViewBuilder.
>>>>
>>>>> - I like the decoration. This is what we had in Mondrian, but that
got lost in translation.
>>>>
>>>> Yes!
>>>> I also would like to have decorators to manage caches. Having caches
within MOGraphElement and its subclasses complexify the whole thing.
>>>>
>>>>> - The rendering logic is tightly coupled with Morphic. It does not
have to be, right?
>>>>
>>>> Is not really tight to Morphic.
>>>> Classes such as ROLine, ROBox, ROCircle do not directly talk to a
form, but to a ROCanvas instead. I will probably add ROFormCanvas,
ROHTML5Canvas in the near future
>>>>
>>>>> - I did not see how the decision of drawing edge appears to be. For
example, in the mondrian2 you have the edges drawn on top of the nodes.
But, I am not sure if this is because of the declaration order of because
of something else.
>>>>
>>>> The view had an ordered collection of elements, which is
sequentially displayed.
>>>> The strategy of displaying edges
should not be hardcoded in the
ROView.
>>>> Consider the script:
>>>>
>>>> -=-=-=-=-=-=-=-=-=-=-=-=
>>>> | view |
>>>> view := ROMondrianViewBuilder new.
>>>> view nodes: Collection withAllSubclasses.
>>>> view shape line.
>>>> view edgesFrom: #superclass.
>>>> view treeLayout.
>>>> view open
>>>> -=-=-=-=-=-=-=-=-=-=-=-=
>>>>
>>>> We could have
>>>> -=-=-=-=-=-=-=-=-=-=-=-=
>>>> ...
>>>> view treeLayout.
>>>> view moveEdgesToTheBack.
>>>> view open
>>>> -=-=-=-=-=-=-=-=-=-=-=-=
>>>>
>>>> Maybe... Not really elegant. But the order should not be hardcoded
>>>>
>>>> Alexandre
>>>>
>>>>
>>>>>
>>>>> Cheers,
>>>>> Doru
>>>>>
>>>>>
>>>>>
>>>>>> Alexandre
>>>>>>
>>>>>>
>>>>>>
>>>>>>> On 14 Nov 2011, at 17:30, Alexandre Bergel wrote:
>>>>>>>
>>>>>>>> Martin, are you happy with what Mondrian offers
currently? Is
there anything else you would like to see?
>>>>>>>>
>>>>>>>> Alexandre
>>>>>>>>
>>>>>>>>
>>>>>>>> On 8 Nov 2011, at 15:50, Martin Dias wrote:
>>>>>>>>
>>>>>>>>> Johan and Alexandre: Thank you, was funny to play
with Mondrian
Easel and to see AspectMaps.
>>>>>>>>> Doru: You was
right, I had in mind something like a tree. I
made a proof script using blocks for
recursion... look:
>>>>>>>>>
>>>>>>>>> | blockForClass blockForExpandable blockForLeaf |
>>>>>>>>> blockForClass := [:aClass |
>>>>>>>>> blockForLeaf value: aClass.
>>>>>>>>> aClass subclasses do: [:aSubclass |
>>>>>>>>> (aSubclass subclasses isEmpty
>>>>>>>>> ifTrue: [blockForLeaf]
>>>>>>>>> ifFalse: [blockForExpandable])
>>>>>>>>> value: aSubclass ] ].
>>>>>>>>> blockForLeaf := [:aClass |
>>>>>>>>> view shape label text: #name.
>>>>>>>>> view node: aClass.
>>>>>>>>> view edgesFrom: #superclass.
>>>>>>>>> view horizontalTreeLayout ].
>>>>>>>>> blockForExpandable := [:aClass |
>>>>>>>>> view interaction
>>>>>>>>> whenClickingUpdateNode: [:x | blockForClass
value: x ]
>>>>>>>>> withLayoutUpdate: true.
>>>>>>>>> view shape rectangle
>>>>>>>>> dashedBorder;
>>>>>>>>> size: 10;
>>>>>>>>> borderColor: Color lightGray.
>>>>>>>>> view node: aClass.
>>>>>>>>> view edgesFrom: #superclass.
>>>>>>>>> view horizontalTreeLayout ].
>>>>>>>>> blockForClass value: Collection.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Tue, Nov 8, 2011 at 4:16 AM, Tudor Girba <
tudor(a)tudorgirba.com> wrote:
>>>>>>>>> Hi,
>>>>>>>>>
>>>>>>>>> I think Martin was asking for a script that would add
nodes to
the parent graph, not to the inner graph of a selected node.
>>>>>>>>>
>>>>>>>>> The idea is to have an expandable graph that would
behave
similarly to a tree morph widget (when you expand a node, the whole tree
becomes larger).
>>>>>>>>>
>>>>>>>>> Cheers,
>>>>>>>>> Doru
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On 8 Nov 2011, at 04:28, Alexandre Bergel wrote:
>>>>>>>>>
>>>>>>>>>>> During Smalltalks conference, we started with
Mariano and
Doru to do an experiment: to use Mondrian to visualize the graph that
is
being serialized with Fuel.
>>>>>>>>>>
>>>>>>>>>> Cool!
>>>>>>>>>>
>>>>>>>>>>> 1) Is it fine how I installed Mondrian?
>>>>>>>>>>>
>>>>>>>>>>> Gofer it
>>>>>>>>>>> squeaksource: 'Mondrian';
>>>>>>>>>>> package: 'ConfigurationOfMondrian';
>>>>>>>>>>> load.
>>>>>>>>>>> (ConfigurationOfMondrian project
latestVersion) load.
>>>>>>>>>>
>>>>>>>>>> Yes.
>>>>>>>>>>
>>>>>>>>>>> 2) For large graphs, I would like to show
them lazily, maybe
drawing some expandable nodes (+). Do you understand what I
mean? Is that
possible?
>>>>>>>>>>
>>>>>>>>>> Try this in an easel:
>>>>>>>>>> -=-=-=-=-=-=-=-=-=-=-=-=
>>>>>>>>>> view shape rectangle size: 20.
>>>>>>>>>> view interaction action: #inspect.
>>>>>>>>>> view interaction
>>>>>>>>>> whenEnteringUpdateNode: [:node |
>>>>>>>>>> view interaction forwarder.
>>>>>>>>>> view nodes: (Set allSubclasses).
>>>>>>>>>> view interaction forwarder.
>>>>>>>>>> view edgesFrom: #superclass..
>>>>>>>>>> view treeLayout
>>>>>>>>>> ]
>>>>>>>>>> whenLeavingUpdateNode: [:node | ]
>>>>>>>>>> withLayoutUpdate: true.
>>>>>>>>>> view nodes: (1 to: 3)
>>>>>>>>>> -=-=-=-=-=-=-=-=-=-=-=-=
>>>>>>>>>>
>>>>>>>>>> Cheers,
>>>>>>>>>> Alexandre
>>>>>>>>>> --
>>>>>>>>>>
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
>>>>>>>>>> Alexandre Bergel
http://www.bergel.eu
>>>>>>>>>>
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> _______________________________________________
>>>>>>>>>> Moose-dev mailing list
>>>>>>>>>> Moose-dev(a)iam.unibe.ch
>>>>>>>>>>
https://www.iam.unibe.ch/mailman/listinfo/moose-dev
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>>
www.tudorgirba.com
>>>>>>>>>
>>>>>>>>> "Not knowing how to do something is not an
argument for how it
cannot be done."
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> _______________________________________________
>>>>>>>>> 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
>>>>>>>>
>>>>>>>> --
>>>>>>>> _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
>>>>>>>> Alexandre Bergel
http://www.bergel.eu
>>>>>>>> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> Moose-dev mailing list
>>>>>>>> Moose-dev(a)iam.unibe.ch
>>>>>>>>
https://www.iam.unibe.ch/mailman/listinfo/moose-dev
>>>>>>>
>>>>>>> --
>>>>>>>
www.tudorgirba.com
>>>>>>>
>>>>>>> "Reasonable is what we are accustomed with."
>>>>>>>
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> 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
>>>>>>
>>>>>> --
>>>>>> _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
>>>>>> Alexandre Bergel
http://www.bergel.eu
>>>>>> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> Moose-dev mailing list
>>>>>> Moose-dev(a)iam.unibe.ch
>>>>>>
https://www.iam.unibe.ch/mailman/listinfo/moose-dev
>>>>>
>>>>> --
>>>>>
www.tudorgirba.com
>>>>>
>>>>> Innovation comes in least expected form.
>>>>> That is, if it is expected, it already happened.
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Moose-dev mailing list
>>>>> Moose-dev(a)iam.unibe.ch
>>>>>
https://www.iam.unibe.ch/mailman/listinfo/moose-dev
>>>>
>>>> --
>>>> _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
>>>> Alexandre Bergel
http://www.bergel.eu
>>>> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> Moose-dev mailing list
>>>> Moose-dev(a)iam.unibe.ch
>>>>
https://www.iam.unibe.ch/mailman/listinfo/moose-dev
>>>>
>>>>
<ROExpandChildrenOnClick.st>_______________________________________________
>> Moose-dev mailing list
>> Moose-dev(a)iam.unibe.ch
>>
https://www.iam.unibe.ch/mailman/listinfo/moose-dev
>
> --
> _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
> Alexandre Bergel
http://www.bergel.eu
> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
>
>
>
>
>
> _______________________________________________
> Moose-dev mailing list
> Moose-dev(a)iam.unibe.ch
>
https://www.iam.unibe.ch/mailman/listinfo/moose-dev
--
www.tudorgirba.com
"The coherence of a trip is given by the clearness of the goal."
_______________________________________________
Moose-dev mailing list
Moose-dev(a)iam.unibe.ch
https://www.iam.unibe.ch/mailman/listinfo/moose-dev
--
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel
http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
_______________________________________________
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
--
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel
http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
_______________________________________________
Moose-dev mailing list
Moose-dev(a)iam.unibe.ch
https://www.iam.unibe.ch/mailman/listinfo/moose-dev
--
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel
http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
_______________________________________________
Moose-dev mailing list
Moose-dev(a)iam.unibe.ch
https://www.iam.unibe.ch/mailman/listinfo/moose-dev