On Mon, May 16, 2016 at 05:42:54AM +0200, Tudor Girba wrote: > Hi, > > > On May 16, 2016, at 1:00 AM, Ben Coman <b...@openinworld.com> wrote: > > On Mon, May 16, 2016 at 6:28 AM, Alistair Grant <akgrant0...@gmail.com> > wrote: > > Hi Andrei, > > On Mon, May 16, 2016 at 12:08:01AM +0200, Andrei Chis wrote: > > Hi Alistair, > > Try something like this. Now 100% sure it will work. > > gtInspectIn: composite > <gtInspectorPresentationOrder: 30> > > ^ composite text > title: 'Meme'; > format: [self asText]. > > The display block should return the object to be displayed, which > is this case > is self. > > > Yep, that fixes the problem! Thanks for your reply. > > > Just curious if this also works... > > ^ composite text > title: 'Meme'; > format: #asText
This also works, and looking at the definition of #format I'm guessing that this is closer to the original intended usage (see below)? > It works because the format block takes an optional argument with the input > entity. However, the semantics are not going to be quite the same. In > isolation, the behavior will be identical. However, the difference comes when > you try to reuse a presentation. > > Let’s look at an example. This is how an AST node displays the source: > > RBProgramNode>>gtInspectorSourceCodeIn: composite > <gtInspectorPresentationOrder: 30> > ^ composite pharoMethod > title: 'Source code’; > display: [ self source ]; > ... > > Like this, the block closure can simply delegate to the corresponding ast node > to display the source: > > BlockClosure>>gtInspectorSourceCodeIn: composite > <gtInspectorPresentationOrder: 40> > self sourceNode gtInspectorSourceCodeIn: composite > > And a keymap object which holds a block in an action instance variable, can > simply delegate to the block closure object to display the source: > > KMKeymap>>gtInspectorSourceCodeIn: composite > <gtInspectorPresentationOrder: 30> > ^ self action gtInspectorSourceCodeIn: composite > > > If the ProgramNode definition would have been implemented like: > display: [ :each | each source ] > > then when inspecting the block object, we would have gotten the block object > as > each, and not the AST node. > > Does this explanation make sense? So using this code is going to be more flexible than ^ composite text title: 'Meme'; format: [self asText] since the format object isn't supplied the optional arguments. Thanks, Alistair