Luis — 20-Jun-2014/7:40:34-7:00
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 ?
Chris — 23-Jun-2014/9:47:40-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
]
]
Steven White — 23-Jun-2014/10:55:23-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.
Peter K — 24-Jun-2014/22:39:14-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