Hi everyone,
I guess because of a rapid evolution some parts of Roassal are weird. For example RTAbstractLine>>#updateFor:trachelShape: implements the shape drawing, so theoretically RTLine has to only override #trachelShapeClass to return TRLine. Instead RTLine overrides #trachelShapeFor: and does it incorrectly, because width cannot be used as a block but only as a number.
We have to handle this somehow, because 1) RTLine works incorrectly. 2) RTLine ignores the implementation strategy coded into RTAbstractLine.
Uko
Hi,
FM*MultivalueLink has a very confusing printOn: method
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
FM*MultivalueLink>>printOn: aStream
self asArray printOn: aStream
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Converting it to array means that when I see a variable in the inspector it
describes itself as array which is quite confusing.
Maybe it should be wrapped?
printOn: aStream
self printNameOn: aStream.
aStream nextPut: $(.
self asArray printOn: aStream.
aStream nextPut: $)
Thanks,
Peter
Hi!
As promised, here is a first try of multi point chart.
-=-=-=-=-=-=-=-=
b := RTGrapher new.
d := RTMultipleData new.
d barShape color: Color blue.
d points: #( #('hello' 1 2 1) #('world' 2 4 2) #('bonjour' 3 5 4) #('Gutten Morgen' -1 4 -5)).
d addMetric: #second.
d addMetric: #third.
d addMetric: #fourth.
"d barChartWithBarCenteredTitle: #first."
d barChartWithBarTitle: #first rotation: -30.
b add: d.
b
-=-=-=-=-=-=-=-=
Feedback are welcome!
@Thomas: The VisualWorks version will follow very soon.
Cheers,
Alexandre
--
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
Hi,
Consider this script:
view := RTMondrian new.
view shape label.
view nodes: { 1 . 2 }.
view edges objects: { 1 }; connectFrom: [ :x | x + 1 ].
view
The expectation is to create 2 nodes and an edge between them. However, the
script does not create any edges.
The reason is that the collection that is passed to objects: is also used
to search the source and target nodes. This is a problem, because this type
of filtering is rarely needed.
I believe we should keep objects: to only denote the input set of objects
that need to be iterated in order to produce the edges. And, if needed, we
can add another selector specifically only for filtering (like
restrictEdgeSourceToObjects: / restrictEdgeTargetToObjects: ).
What do you think?
Cheers,
Doru
--
www.tudorgirba.com
"Every thing has its own flow"
Hi!
Consider the following screenshot:
What are Client types?
Types are apparently the classes defined in the package.
All classes are the sum of the classes defined in all sub-packages.
This is rather intuitive :-(
Why do we have 'All classes’ ? What does it bring to us?
Cheers,
Alexandre
--
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
Hi!
I relaxed a bit by implementing something that was missing in Grapher.
Consider the following code:
-=-=-=-=-=-=-=-=-=-=-=-=
b := RTGrapher new.
ds := RTDataSet new.
ds points: #(5 10 6 2 -2.5).
b add: ds.
“below is the magic line"
b addDecorator: RTCursorFollower new.
b
-=-=-=-=-=-=-=-=-=-=-=-=
This “magic line” add two bar that follows the mouse cursor. Here is a screenshot:
Here is on a larger example:
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
| methods trachelMethods b ds |
methods := Collection withAllSubclasses flatCollect: #rtmethods.
trachelMethods := TRObject withAllSubclasses flatCollect: #rtmethods.
b := RTGrapher new.
b extent: 200 @ 200.
"Data set 1"
ds := RTDataSet new.
ds interaction popup.
ds dotShape circle color: (Color red alpha: 0.3).
ds points: methods.
ds x: #numberOfLinesOfCode.
ds y: [ :m | m getSource size ].
b add: ds.
"Data set 2"
ds := RTDataSet new.
ds interaction popup.
ds dotShape circle color: (Color blue alpha: 0.3).
ds points: trachelMethods.
ds x: #numberOfLinesOfCode.
ds y: [ :m | m getSource size ].
b add: ds.
b axisX withThousandsSeparator; title: 'LOC'.
b axisY noDecimal; title: 'Size'.
b addDecorator: RTCursorFollower new.
b build.
^ b view
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Maybe this cursor follower should be per default in all produced chart. Any opinion?
Cheers,
Alexandre
--
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
Hi!
I have added a new tab by defining the method:
FAMIXTypeGroup>>mooseFinderUMLIn: composite
<moosePresentationOrder: 20>
composite roassal2
title: 'UML';
titleIcon: MooseIcons mooseSourceText;
initializeView: [ RTUMLClassBuilder new ];
painting: [ :view :each |
each viewUMLOn: view ]
I do not really like the icon although.
Cheers,
Alexandre
--
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
Hi,
I've added RTStyledLabel which supports TextEmphasis.
RTGeneralExample>>styledLabel
~~~~~~~~~~~~~~
| v shape el all |
v := RTView new.
(shape := RTStyledLabel new) color: Color black.
#(normal italic bold underlined struckOut) do: [ :each |
el := shape
emphasis: (TextEmphasis perform: each);
elementOn: each.
v add: el ].
all := shape
emphasis: { TextEmphasis bold. TextEmphasis italic. TextEmphasis
underlined};
elementOn: 'bold + italic + underlined'.
v add: all.
RTVerticalLineLayout on: v elements.
v open
~~~~~~~~~~~~~~~~~~~~~
Peter
Hi,
I would like to build custom magritte view for a FAMIX model, however
it seems that Fame/Metanool are somehow interfering with it..
Imagine a simple model (a class with an attribute):
~~~~~~~~~~~~~~~~~~~~~~~~~~~
cls := FAMIXClass new name: 'Something'.
(attr := FAMIXAttribute new)
name: 'myAttribute';
declaredType: (FAMIXClass new name: 'OtherThing').
cls addAttribute: attr.
~~~~~~~~~~~~~~~~~~~~~~~~~~~
now I can open the magritte description
~~~~~~~~~~~~~~~~~~~~~~~~~~~
attr mooseDescription asMagritteDescription asMagritteMorph openInWindow.
~~~~~~~~~~~~~~~~~~~~~~~~~~~
However this is a meta description, which I don't want...
So second option was to build it manually; I extract descriptions that
I am interested in....
~~~~~~~~~~~~~~~~~~~~~~~~~~~
container := MAContainer new addAll: ({
attr mooseDescription at: 'name'.
attr mooseDescription at: 'declaredType'.
} collect: #asMagritteDescription).
(container asMorphOn: attr) openInWindow.
~~~~~~~~~~~~~~~~~~~~~~~~~~~
However the problem with this is, that the declaredType is presented
as TextField, which is not very useful.
So I'm kind of lost...
basically what I want to do is to have a MAContainer that contains
both the Attribute's name and #declaredType's name.
Is this possible?
Thanks,
Peter