Hello,
In the browser code below, I would like to trigger the transmission to the
#one pane when the user selects update list. According to my understanding,
Glamour does not transmit when a pane port is populated with the same
object as the port got before. One way would be to give the outer port a
dummy value before reseting the value to the same object but that will be a
bit hackish.
Is there a way to trigger transmission when the old value and the new
values on the port are the same?
|browser |
browser := GLMTabulator new.
browser row: #one size: 30; row: #two.
browser transmit to: #one; transformation:[:x | x * 10 ];
andShow: [:a |
a dropDownList
display: [:x | (1 to: x) ];
selectedIndex: 2 ].
browser transmit from: #one; to: #two; andShow: [:a |
a list
display: [:x | 1 to: x ];
act: [browser entity: 5] entitled: 'Update List' ].
browser openOn:5
tx,
Usman
Hi everybody!
I'm a Pharo newcomer and I'm currently working on a view builder for
Roassal (http://www.smalltalkhub.com/#!/~ObjectProfile/Roassal). The idea
of the builder is to allow the user to explore any data structure
interactively, via a tiny DSL.
A simple example: you can start by placing a class as your first node, and
then you can browse the class hierarchy via mouse clicks, with the right
click revealing the superclass, and the left click revealing the
subclasses, all in an animated fashion, forming the class hierarchy tree as
you expand your nodes and coloring them accordingly.
The project is available at
http://www.smalltalkhub.com/#!/~smaass/RoassalExploraBuilder. It features
some examples (file system, class hierarchy, circular linked list), but is
still in an early stage so any feedback will be greatly appreciated!
Cheers!
Hi everybody,
I have implemented a Famix-Generator which analyses .NET assemblies and produces mse files for CodeCity as well as the MOOSE platform.
If you want to give it a try, you can download it from my site (german, I am sorry - I will change that in near future):
http://www.sharpmetrics.net/index.php/famix-generator
The generator creates famix artifacts for namespaces, types (classes, interfaces, enums und structs), methods, methods calls and local variables. the tool is not complete (missing features, bugs?), I will enhance it during the next weeks or months.. ;-)
(BTW you need a .NET 4.0 installed on your machine. It does not run on the Mono plattform, right now.)
Cheers
Thomas
I've hacked Glamour in two places recently to great effect, and I wonder
what the community thinks about these new features.
Both involve allowing arbitrary morphs in place of assumed images or text.
1) I found myself wanting to have act: icons that changed state, acting
like a toggle. In my case I wanted to use a
PluggableThreePhaseButtonMorph.
A one line mode to GLMMorphicRender>>renderAction: did the trick
renderAction: anAction
^(UITheme current
newButtonIn: nil
for: anAction
getState: nil
action: #morphicActOn:
arguments: {}
getEnabled: nil
>>>>> label: (anAction icon isMorph ifFalse:[AlphaImageMorph new image:
anAction icon]ifTrue:[anAction icon]) <<<<<<<<
help: (anAction title, Character tab asString, anAction
shortcutAsString) trimBoth)
valueOfProperty: #noBorder ifAbsentPut: [true]; "this is a hack
to tell the GLMUITheme to not draw the border and the fill"
valueOfProperty: #noFill ifAbsentPut: [true];
setProperty: #wantsKeyboardFocusNavigation toValue: false; "to
disable the focus"
yourself
2) I also needed to embed morphs in table presentations to allow editing of
the cell text.
Again, a single change to GLMTreeMorphNodeModel>>rowMorphForColumn:
rowMorphForColumn: aGlamourColumn
| content |
content := self containerTree glamourPresentation column:
aGlamourColumn valueFor: self item.
>>>>> ^content isString ifTrue:[StringMorph contents: content]
ifFalse:[content] <<<<<<<<
This lead me to customize a subclass of PluggableTextMorph to use blocks
instead of the model>>selector approach for pluggable behavior, especially
so it would work nicely in a Glamour script and all the context to be
referenced on the getText/setText etc operations.
These are obviously hacks but since both cases are wanting a morph and
seemingly don't really need a morph of the original type (Image or String)
they should be generalized to allow arbitrary morphs.
This also led me to imagine embedding full presentations or visualizations
into table cells, but that's beyond my understanding of the framework at
this point.
Reminds me of the old XEROX Analyst spreadsheet.
Regards,
Sam
Sam S. Adams, CTO - Contextual Computing
IBM Distinguished Engineer, IBM Research
Mobile: 919-696-6064, email: ssadams(a)us.ibm.com
Assistant: Linda R. Morrison. (720) 395-0460 Fax: (845) 491-4318, Tie:
676-0460, linda.r.morrison(a)us.ibm.com
<<Hebrews 11:6, Proverbs 3:5-6, Romans 1:16-17, 1 Corinthians 1:10>>
It would be great to have this :-)
For example, we have just produced a dependency analyzer and I would like to use it in an inspector. Here an example:
| b |
b := RTDependencyAnalyzerBuilder new.
b shape circle
size: 10;
fillColor: (Color red alpha: 0.3);
if: [ :cls | ('TR*' match: cls name) ] fillColor: (Color purple alpha: 0.3).
b addClasses: RTObject withAllSubclasses. “Roassal2 classes"
b addClasses: TRObject withAllSubclasses. “Trachel classes"
b
dependencyFromAllClassesMatching: [ :cls | ('RT*' match: cls name) ]
toAllClassesMatching: [ :cls | ('TR*' match: cls name) ].
b open
Here a screenshot:
Blue lines are dependencies between Roassal classes to Trachel classes.
Purple = trachel
Red = Roassal
If some want to try this, I will be more than happy to share (actually it is available on Roassal2 @ Smalltalkhub).
Alexandre
--
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
fails quite spectacular on Moose 5.
It starts with some error in the FFI stuff.
To reproduce just find ConfigurationOfFFI and then run
ConfigurationOfFFI load you get thrown into the emergency evaluator.
Regards
Friedrich