On Wed, Feb 13, 2013 at 7:42 PM, Usman Bhatti <usman.bhatti(a)gmail.com>wrote;wrote:
Scenario : I have an EyeSee chart that is updated from
user input.
Problem: The EyeSee chart does not update. There are two methods (AFAIK)
to update glamour browser pane and its contents: explicitly send update
message to the pane or new transmission to the port of the pane to be
updated. Now, the first method does not work for EyeSee (may be a bug, i
suggested a fix yesterday). The second method requires that transmissions
are triggered but since Merlin is outside Glamour, I have to fake a
transmission on a dummy port (I tried that but when I execute my browser,
the dummy port is nil).
The answer is allowNil. Example that works:
| browser aModel myColor|
browser := GLMDashboard new.
browser title: 'Customizable EyeSee Chart Example'.
browser addPaneNamed: #chart1 extent: 600@600.
myColor := Color green.
browser transmit
to: #chart1; fromOutsidePort: #entity;fromOutsidePort: #metrics;
andShow: [ :a |
a eyesee
title: 'Sample bar chart';
diagram: [:renderer :x :y |
self halt.
(renderer kiviat)
borderWidth: 1;
radius: 150;
models: {#(8 10 1). #(7 2 10). #(3 10 8)};
metrics: {#first. #second. #last. [ :each | each first + 2]};
maxs: {[ :model | 10]. [ :model | 10]. [ :model | 10]. [ :model | 10].};
mins: {[ :model | 1]. [ :model | 1]. [ :model | 1]. [ :model | 1]};
roundedBorder: true;
backgroundColor: (y ifNil: [Color red]);
displayLegend: true;
kiviatBackground: true;
useColors: ESAbstractDiagram strongColorsTransparent];
allowNil;
act: [
| wizardControl wizardPane1 dropListPart|
wizardControl := WizardControl new.
wizardControl renderer: MerlinMorphicWizardRenderer new.
wizardPane1 := WizardSinglePane new.
dropListPart := DropListPart new list: #(red black green); yourself.
wizardPane1 row: dropListPart associatedTo: #color.
wizardControl addPane: wizardPane1.
wizardControl atEndDo: [ :aDictionaryOfOutputs |
myColor := aDictionaryOfOutputs at: #color.
((browser pane) port:#metrics) value: (Color perform: myColor). ].
wizardControl open.
] entitled: 'Parameterize Color'.
].
browser openOn: #(1 2 3 4 5 6 7 8).
I spent several hours looking into ports and their
transmissions but
couldn't obtain a workable solution for my problem. Here is a mock
executable code to see what I am trying to achieve.
| browser aModel myColor|
browser := GLMDashboard new.
browser title: 'Customizable EyeSee Chart Example'.
browser addPaneNamed: #chart1 extent: 600@600.
myColor := Color green.
browser transmit
to: #chart1;
andShow: [ :a |
a eyesee
title: 'Sample bar chart';
diagram: [:renderer :x |
(renderer kiviat)
borderWidth: 1;
radius: 150;
models: {#(8 10 1). #(7 2 10). #(3 10 8)};
metrics: {#first. #second. #last. [ :each | each first + 2]};
maxs: {[ :model | 10]. [ :model | 10]. [ :model | 10]. [ :model | 10].};
mins: {[ :model | 1]. [ :model | 1]. [ :model | 1]. [ :model | 1]};
roundedBorder: true;
backgroundColor: myColor;
displayLegend: true;
kiviatBackground: true;
useColors: ESAbstractDiagram strongColorsTransparent];
act: [
| wizardControl wizardPane1 dropListPart|
wizardControl := WizardControl new.
wizardControl renderer: MerlinMorphicWizardRenderer new.
wizardPane1 := WizardSinglePane new.
dropListPart := DropListPart new list: #(red black green); yourself.
wizardPane1 row: dropListPart associatedTo: #color.
wizardControl addPane: wizardPane1.
wizardControl atEndDo: [ :aDictionaryOfOutputs |
myColor := aDictionaryOfOutputs at: #color.
(browser paneNamed: #chart1) update ].
wizardControl open.
] entitled: 'Parameterize Color'.
].
browser openOn: #(1 2 3 4 5 6 7 8). "can't put color in the input model"
Can you please have a look and see if I am missing something?
regards,
Usman