ps: I like the highligther!
Martín
On Mon, Dec 5, 2011 at 2:52 AM, Martin Dias tinchodias@gmail.com wrote:
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@me.com> 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@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@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@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@iam.unibe.ch >>>>>> https://www.iam.unibe.ch/mailman/listinfo/moose-dev >>>>>> >>>>>> _______________________________________________ >>>>>> Moose-dev mailing list >>>>>> Moose-dev@iam.unibe.ch >>>>>> https://www.iam.unibe.ch/mailman/listinfo/moose-dev >>>>> >>>>> -- >>>>> _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;: >>>>> Alexandre Bergel http://www.bergel.eu >>>>> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;. >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> _______________________________________________ >>>>> Moose-dev mailing list >>>>> Moose-dev@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@iam.unibe.ch >>>> https://www.iam.unibe.ch/mailman/listinfo/moose-dev >>>> >>>> _______________________________________________ >>>> Moose-dev mailing list >>>> Moose-dev@iam.unibe.ch >>>> https://www.iam.unibe.ch/mailman/listinfo/moose-dev >>> >>> -- >>> _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;: >>> Alexandre Bergel http://www.bergel.eu >>> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;. >>> >>> >>> >>> >>> >>> _______________________________________________ >>> Moose-dev mailing list >>> Moose-dev@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@iam.unibe.ch >> https://www.iam.unibe.ch/mailman/listinfo/moose-dev > > -- > _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;: > Alexandre Bergel http://www.bergel.eu > ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;. > > > > > > _______________________________________________ > Moose-dev mailing list > Moose-dev@iam.unibe.ch > https://www.iam.unibe.ch/mailman/listinfo/moose-dev > >
<ROExpandChildrenOnClick.st>_______________________________________________
> Moose-dev mailing list > Moose-dev@iam.unibe.ch > https://www.iam.unibe.ch/mailman/listinfo/moose-dev
-- _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;: Alexandre Bergel http://www.bergel.eu ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
Moose-dev mailing list Moose-dev@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@iam.unibe.ch https://www.iam.unibe.ch/mailman/listinfo/moose-dev
-- _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;: Alexandre Bergel http://www.bergel.eu ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
Moose-dev mailing list Moose-dev@iam.unibe.ch https://www.iam.unibe.ch/mailman/listinfo/moose-dev
Moose-dev mailing list Moose-dev@iam.unibe.ch https://www.iam.unibe.ch/mailman/listinfo/moose-dev
-- _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;: Alexandre Bergel http://www.bergel.eu ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
Moose-dev mailing list Moose-dev@iam.unibe.ch https://www.iam.unibe.ch/mailman/listinfo/moose-dev
-- _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;: Alexandre Bergel http://www.bergel.eu ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
Moose-dev mailing list Moose-dev@iam.unibe.ch https://www.iam.unibe.ch/mailman/listinfo/moose-dev