foreach inside view
What I'm trying to accomplish is to view an image of its size and corresponding label of its size close to one another. I didn't use `hgroup` in the code. The problem is that it seems I cannot use foreach inside the view block. do %./r3-gui.r3 dir: %./ bl: copy [] foreach file load dir [ if find [%.gif] suffix? file [ a: load file txt: a/size pair_bl: copy [] append pair_bl a append pair_bl txt append bl pair_bl ] ] view layout [ foreach [c1 c2] bl [ label "c2" ;c2 as string just to simplify example ] ] Within the view block (I'm forgetting about the image now), I was expecting to generate labels or texts with the sizes of the images in the current directory. What should I do to accomplish this? Is this situation mentioned in http://www.learnrebol.com/rebol3_book.html ?
posted by: Luis 20-Jun-2014/7:40:34-7:00
Don't believe FOREACH works like that inside the GUI dialect. Also note the handy COLLECT function: view collect [ foreach file load dir [ keep 'label file: load file keep file/size ] ]
posted by: Chris 23-Jun-2014/9:47:40-7:00
I have tried something similar with success, but, looking back, I think I did it in a non-recommended way. I wanted to display an array of buttons, with each button launching a program. The program that displayed this array did not know, until run time, what those programs were, or how many there were. There is the similarity to your problem I think; you want do display a bunch of images but you can't code a layout in advance because you don't know what images you want to show, or how many there are, until the program runs and discovers that. So what I did, and you might try, is to have the program generate VID code, based on its discovery of what images it wants to display, and then run that VID code through the layout function before viewing it. When I did it, I made a big string, but I think that might not be the recommended way, but it did work. In other words, the program sort of writes itself. That's one of the slick features of REBOL, that it can do that.
posted by: Steven White 23-Jun-2014/10:55:23-7:00
Or if this is of some use: R E B O L [] files: read %. images: [ ] length-counter: 0 foreach file files [ if (find file %.png) [ append images file append images size? file loaded: load file length: loaded/size/2 length-counter: length-counter + length ] ] grid: copy [across space 0] ; the GUI block containing the grid of fields forskip images 2 [append grid compose [ image (load images/1) text (form images/2)return ] ] view center-face layout [ across space 0 display: box 800x800 with [ pane: layout/tight grid pane/offset: 0x0 ] scroller as-pair 16 (length-counter) [ display/pane/offset/y: display/size/y - display/pane/size/y * negate value show display ] ] adapted from http://musiclessonz.com/rebol_tutorial.html
posted by: Peter K 24-Jun-2014/22:39:14-7:00
|