On Wed, Feb 13, 2013 at 7:42 PM, Usman Bhatti <usman.bhatti@gmail.com> 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