I have to rebuild a visualization create with Roassal.
I try this function: ((browser paneNamed: #visu) presentations at:3)
update.
It send update on the right GLMRoassalPresentation but it never call the
painting block used to build my visualization.
changeProgramRoot
moduleDependencyGraphRoot := self chooseProgramRoot.
((browser paneNamed: #visu) presentations at:3) update.
moduleDependencyGraph: composite
composite roassal
title: 'Program Dependency Graph';
titleIcon: MooseIcons mooseSystemComplexity;
painting: [ :view | self renderModuleDependencyGraph: view];
act: [self changeProgramRoot. composite roassal view raw
signalUpdate] entitled: 'Program Name'.
The act block is called but not the painting block after the update.
I look at the Roassal examples but don't find a solution for my problem.
What is the way to rebuild a visualization?
--
*Guillaume Larcheveque*
I have implemented a simple preprocessor that can be combined in any
possible way with petitparser.
You can get it on executing the following script (requires a recent version
of Petitparser):
Gofer new
squeaksource3: 'PetitPreprocessor';
package: 'PetitPreprocessor';
load
It transforms any matching regex into a provided string.
example (preprocessor removes T):
'Foo' asParser preProcess: ('T' asRegex) into: ''
I successfully parsed a procedural language with this preprocessor. Because
of the column width limitation in the parsed language, the parser could
encounter a carriage return at any position, followed by the line number
(it's a really old language), then a quote followed by the rest of the
statement. So I used a regular expression to detect these bizarre
constructs to remove them from my input stream.
I wrote this tool because I needed to know the starting and ending position
for parsed expressions in the original stream (not preprocessed). It can
transform the stream and match my grammar and therefore provide me the real
position relative to the original stream simply by sending *info* to a
parser.
Example:
(parser1, ('Foo' asParser) info , parser2) preprocess: myRegex into:
myReplacement
It works in the same way as token, providing an object containing the
relative start and stop position for the parsed data (even into one or
multiple preprocessors of course) so if in the example parser1 consumes
altered data, you will get the right position in the original stream for
your parser.
This solution has been applied on real case and has proved to be really
useful to link parsed preprocessed data (function source code) to the
filesystem.
Feel free to correct any bug you detect or to propose new functionality.
--
*Guillaume Larcheveque*
Hello all,
I construct a small browser in Glamour:
| finder |
finder := GLMFinder new.
finder show: [:a |
a tree
title: 'Tree';
filterOn: [:text :each | text first = each]].
finder openOn: ($a to: $z).
Now, I can enter a text and it allows me to filter the elements of the
input list according to the input text.
My question: Once I enter the query and my list get filtered, is there any
way that I can return to my complete, unfiltered list? Hitting the return
on empty search field does not execute the filter block. Is there a proper
way to achieve the task of "un-filtering" or should I create some hack to
allow the user to see the list of unfiltered elements?
tx,
Usman
Hi,
I developed a small extension which allows to query a moose model to obtain a set of implicit associations derived from low level relationships.
What you can do concretely is for example to select a group of namespace entities, and ask for all implicit associations existing between the selected entities based on a specific relationship existing at a lower abstraction level (i.e.: the method level).
The end result is much similar to the one provided by Moose Chef, with the advantage of being much more generic and flexible.
Each generated association keeps a reference to the concrete relationships on which it is based on.
If you are interested, you can try it out at: http://www.squeaksource.com/Lift.html
The wiki page contains some usage examples.
cheers,
Andrea
_____________________________
Andrea Caracciolo -- caracciolo(a)iam.unibe.ch
Software Composition Group
University of Bern
Hi,
I would like to create a visualization with resizable nodes (with resizable
I mean that I can click and drag a border to change the size of the node).
Is this possible in Roassal or Mondrian?
Cheers,
Fabrizio
Hi,
Roassal add "Roassal Easel" as an item in the root of the World menu. However, this is a rather primitive Easel.
In Glamour, there already exists an Easel similar to the Mondrian one. I now added all these editors in the Moose menu.
In the Moose image, I would prefer to not have the default Roassal easel in the World menu, because it increases confusion. Perhaps one idea would be to move it into Tools (like PetitParser does).
Alex, what do you say?
Cheers,
Doru
--
www.tudorgirba.com
"Yesterday is a fact.
Tomorrow is a possibility.
Today is a challenge."
I remember seeing some discussion on this in the past.
What is the status of the Latent Semantic Indexing (Hapax I believe) in
Moose?
Was it ported to Pharo?
nicolas
MouseEnter event does not fire while entering a node.
This script shows the demonstrates the problem.
view := ROMondrianViewBuilder new.
view shape rectangle size: 20.
view interaction on: ROMouseEnter do: [ :event |
view shape line color: Color blue.
view edgesFrom: [ :i | i \\ 2 ].
].
view nodes: (1 to: 20).
view shape line.
view treeLayout.
view open
tx,
Usman Bhatti
Hi!
The release of Roassal is now official. As you might have seen, Roassal is now distributed with Moose. The plan is to slowly replace Mondrian by Roassal. This may take some time, but we will reach the point that Mondrian can rest in peace.
Roassal remains largely compatible with Mondrian. The visualizations you have scripted with Mondrian should normally work with Roassal without too much pain.
Gofer new
squeaksource: 'Roassal';
package: 'ConfigurationOfRoassal';
load.
(Smalltalk at: #ConfigurationOfRoassal) project lastVersion load.
Having Roassal out implies that I will essentially focus on Roassal instead of Mondrian. Naturally, I will continue to incorporate important bug fixes in Mondrian. But as far I am concerned, no major enhancement of Mondrian is planned.
We learnt a lot with Mondrian. Roassal really goes one step further with better interactions, a clean low level if you wish to build your own domain specific language. To be short, Roassal is simpler and better.
I suggest people to enter bug fixes and requests for enhancement in the Moose google project as we are doing for Mondrian.
Cheers,
Alexandre
--
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
Hi,
I have the following browser:
| browser |
browser := GLMTabulator new.
browser
row: [ :r | r column: #one; column: #two];
row: #three.
browser transmit to: #one; andShow: [:a |
a title: 'One'.
a list display: [ #('Something 1' 'Something 2' 'Something 3' 'Something
4')];
selectionAct: [:list |
(list pane port: #customSelection) value: 1 ]
entitled: 'Open new panel'
].
browser transmit from: #one; to: #two; andShow: [:a |
a title: 'Two'.
a list
display: [ #('A' 'B' 'C' 'D') ]
].
browser transmit from: #two; to: #three; andShow: [:a |
a title: 'Information'.
a text display:[ :x | 'Information related to ',x asString ] .
].
browser transmit to: #three; from: #one port:#customSelection;andShow: [:a
|
a title: 'Three'.
a list
display: [#('A' 'B' 'C' 'D')]
].
browser openOn: 1.
When a value of the list of the pane "two" is selected a new pane is open
in #three. Also, when the action of the pop-up menu of the pane #one is
selected, a new pane is open in #three. My problem is that the new pane
opened after clicking in the pop-up menu is only shown the first time that
it is called. That is, if I click in the menu, then I click in an element
of the pane #two and finally I click again in the menu action the pane
#three is not shown this time. I'm doing something wrong? I can't
understand why this happens.
Thanks!
Cheers,
Santiago
--
Santiago Vidal