[REBOL] Re: VID dynamic layout
From: tmoeller:fastmail:fm at: 19-Jan-2010 13:46
Hello Henrik,
i think i understand what you try to do but what i don't understand is
the result from it.
I have 2 further questions:
1. Why is the bar in my result still blue, no matter what kind of value
i use? Especially because it mentioned nowhere.
2. is it possible to set the Maximum Value of the bar to 100? I have
Values which might be very small. Using only values lower than one
result in having very small values i i have to transform them before. I
am experiencing problem with values like 0.03 already and have to
convert them to money if they appear in the resultset.
Thanks
Thorsten
On Wed, 13 Jan 2010 10:35 +0100, "Henrik Mikael Kristensen"
<henrikmk-gmail.com> wrote:
> On Wed, Jan 13, 2010 at 9:14 AM, Thorsten Moeller <tmoeller-fastmail.fm>
> wr
> ote:
>
> > lay-spec: [
> > =A0 =A0across space 4x4
> > =A0 =A0backdrop effect compose [gradient 1x0 (white) (silver)
> > =A0 =A0 =A0 =A0]
> > =A0 =A0return
> > =A0 =A0style pgr progress 270 green
> > ]
> >
> >
> > foreach line result [
> > =A0 =A0append lay-spec compose [
> > =A0 =A0 =A0 =A0(make-lbl-name to-word line/3 set-word!) text bold 200 (fo
> rm
> > =A0 =A0 =A0 =A0line/3)
> > =A0 =A0 =A0 =A0pgr
> > =A0 =A0 =A0 =A0return
> > =A0 =A0]
> > ]
> >
> >
> > I thought in the foreach loop there must be somthing like if line > 80
> > [PG1: pgr orange and PG1/data: line/ 16] . That doesn't seem to work.
>
> You can do that. I don't know which column gives you the data, so I'm
> just using line/5 and I'm assuming it's a decimal between 0 and 1:
>
> foreach line result [
> append lay-spec compose [
> (make-lbl-name to-word line/3 set-word!) text bold 200 (form
> line/3)
> pgr (line/5) (
> case [
> line/5 < 0.5 [green]
> line/5 < 0.7 [yellow]
> line/5 < 0.9 [red]
> ]
> )
> return
> ]
> ]
>
> There is at least one other way to do it, and that is to duplicate and
> modify the progress style, so that it knows what color it needs to
> draw, when you give it a specific value. That gives a cleaner and
> smaller layout, by abstracting the color decision away from the
> layout, but it requires that you redo or append to the progress style
> function. If you end up doing a lot of customization, it makes sense
> to move the color evaluation to the style, rather than building a huge
> layout.
>
> You need to dig out the 'init part of the progress style. 'init is run
> as the layout is created:
>
> probe get in get-style 'progress 'init
>
> which gives:
>
> [
> if image? image [
> if none? size [size: image/size]
> if size/y < 0 [size/y: size/x * image/size/y / image/size/x
> effect: insert copy effect 'fit]
> if color [effect: join effect ['colorize color]]
> ]
> if none? size [size: 100x100]
> pane: make bar []
> pane/size: size
> either size/x > size/y [pane/size/x: 1] [pane/size/y: 1]
> if colors [color: first colors pane/color: second colors]
> ]
>
> Now you need to modify that code and build a derivative style. We can
> shave it down a little bit, since you probably don't need images:
>
> stylize/master [
> pgr: progress [
> init: [
> if none? size [size: 100x100]
> pane: make bar []
> pane/size: size
> either size/x > size/y [pane/size/x: 1][pane/size/y: 1]
> ; here we decide it. COLORS is two colors. The first gives
> foreground, the second gives background. (At least I think, swap it
> around if it doesn't work)
> if not number? data [data: 0] ; for safety
> if colors [
> colors/1:
> case [
> data < 0.5 [green]
> data < 0.7 [yellow]
> data < 0.9 [red]
> ]
> ]
> if colors [color: first colors pane/color: second colors]
> ]
> ]
> ]
>
> Then your loop would appear like this:
>
> foreach line result [
> append lay-spec compose [
> (make-lbl-name to-word line/3 set-word!) text bold 200 (form
> line/3)
> pgr (line/5)
> return
> ]
> ]
>
> Nice and clean. Code is untested.
>
> --
> Regards,
> Henrik Mikael Kristensen
> --
> To unsubscribe from the list, just send an email to
> lists at rebol.com with unsubscribe as the subject.
>
--
http://www.fastmail.fm - The way an email service should be