Hi Offray,

If I correctly understand your question you want to auto save something in your 
glamour script. I do not know since I am not expert in Glamour. But I think 
glamour emit some event and you can have some callbacks for this. I saw this 
while browsing the glamour examples. 

Cheers,
Alexandre 



> Le 9 févr. 2015 à 18:14, Offray Vladimir Luna Cárdenas <off...@riseup.net> a 
> écrit :
> 
> Hi all,
> 
> This mail will have two parts, a small first one where I share my advances 
> and little context on the project and the second one, with details where I 
> made specific questions regarding concepts and code and how to make progress. 
> I hope to be fluid and proper balanced and interesting enough to get feedback 
> soon.
> 
> Context
> =======
> 
> I have made a small video at [1] showing my progress on Grafoscopio[2], a 
> tool for the creation of interactive notebooks for open/citizen/garage 
> science and research (for a better view I recommend to see the video in full 
> screen mode).
> 
> As you can see, I have a complete outline of the Agile Visualization book 
> stored as a single "ston document" [3], that can be exported to pandoc's 
> markdown [4] and from there to LaTeX, pdf, html, doc, etc.
> It can contain special tagged nodes and the view and behaviour of them change 
> accordingly to the tag. In the video a node tagged as code is showed as an 
> interactive playground where you can execute an explore the objects deeper.
> 
> My problem is that this kind of special nodes are not saved, as happens with 
> default nodes and the reason is that the special view (which is a 
> sub-browser) is not wired properly to the rest of the browser and that's why 
> I get a nill value after revisiting the code node in the video.
> 
> 
> [1] https://archive.org/details/gfcp-alpha-code-exec-but-non-saving.mp4
> 
> [2] 
> http://mutabit.com/offray/static/blog/output/posts/grafoscopio-idea-and-initial-progress.html
> 
> [3] 
> http://mutabit.com/deltas/repos.fossil/grafoscopio/doc/tip/Docs/En/Books/AgileVisualization/agile-visualization.ston
> 
> [4] 
> http://mutabit.com/deltas/repos.fossil/grafoscopio/doc/tip/Docs/En/Books/AgileVisualization/agile-visualization.markdown
> 
> 
> Details
> =======
> 
> The logic of what I'm doing is something like this:
> 
> i. When a node in tree at the left is selected, it shows the contents of the 
> selected tree.
> 
> ii. If something changes in the node content at the right, the changes are 
> automatically updated.
> 
> iii. If a node is tagged in a special way, a custom browser is called.
> 
> The code that select which sub-browser to show for a particular tagged node 
> is something like this:
> 
> ==[a]==============================
> UI>>buildBrowserNamed: aName
> "Main method for building the interface for trees and its nodes. The name of 
> the browser corresponds to the name of the file
> where tree is stored (or is named 'draft.ston' by default)"
> 
> "... snip"
> 
> (browser transmit)
>   from: #tree port: #selection;
>   to: #nodeBody;
>    when: [:selection | selection notNil];
>   andShow: [ :a :node |
>        self bodyIn: a for: node.
>        self body2ForCodeIn: a for: node.
>        self bodyForTransmediaIn: a for: node ].
> "... snip"
> 
> "Creating a self updatable body pane"
> (browser transmit)
>   from: #tree port: #selection;
>   to: #nodeBody;
>    when: [:selection | selection notNil];
>   andShow: [ :a :node |
>        self bodyIn: a for: node.
>        self body2ForCodeIn: a for: node.
>        self bodyForTransmediaIn: a for: node ].
> (browser transmit )
>     from: #tree port: #selection;
>     from: #nodeBody port: #text;
>     when: [:node :text | text notNil & node notNil];
>     to: #nodeBody port: #neverland;
>     transformed: [:node :text | node body: text asString].
> (browser transmit)
>     from: #tree;
>    to: #nodeHeader;
>    andShow: [ :h | self headerOn: h ].
> (browser transmit )
>     from: #tree port: #selection;
>     from: #nodeHeader port: #text;
>     to: #nodeHeader port: #neverland1;
>     when: [:node :text | text notNil & node notNil];
>     transformed: [:node :text | node header: text asString]
> 
> ===================================
> 
> The last part of the code is responsible for updating the tree contents 
> automatically with
> 
> The "body2ForCodeIn: for:" [b] is the responsible for showing the playground 
> by calling a custom browser that is called "panelAsCodeFor:"[c]. Here is 
> their code:
> 
> 
> ==[b]==============================
> UI>> body2ForCodeIn: constructor for: aNode
>    "Shows the body of a selected node as executable code."
> 
>    aNode tags = 'código'
>        ifFalse: [ ^self ]
>        ifTrue: [constructor custom: (self panelAsCodeFor: aNode)].
> ===================================
> 
> 
> ==[c]==============================
> panelAsCodeFor: aNode
>    "Shows an interactive playground for Smalltalk code in a node body"
> 
>    browser := GLMTabulator new.
>    browser title: 'Código'.
>    browser column: #code.
>    browser transmit
>        to: #code;
>        transformed: [ GTPlayPage new content: aNode body ];
>        andShow: [ :a | a custom: GTPlayground new ].
>    browser sendToOutside: #nodeBody from: #code -> #text.
>    ^ browser.
> ===================================
> 
> So, wiring by "sendToOutside: from:" is not working and I don't know how to 
> tell my code browser to autosave its contents as part of the node body where 
> they belong.
> 
> Any help with this is appreciated.
> 
> Cheers,
> 
> Offray
> 
> _______________________________________________
> Moose-dev mailing list
> moose-...@iam.unibe.ch
> https://www.iam.unibe.ch/mailman/listinfo/moose-dev

Reply via email to