This is a blog about Rebol, it's a fantastic free programming language, it permits easily to create complete software with few lines of code. It's cross-platform, so if you write it on Windows, it will work on Linux and Mac, and vice-versa. You can produce also wonderful GUI with just 3 lines of code!
Tuesday, 15 January 2013
Scrolling list example
The following script creates a scrolling list table with headers.
Here the source:
Title: "Scrolling LIST Example"
Author: "Gregg Irwin"
Shows an example of how to use a LIST style face with
an associated scroller.
] main-lst:sld:; The list and slider faces c-1:; A face we use for some sizing calculations none ml-cnt:; Used to track the result list slider value. visible-rows:; How many result items are visible at one time. 0 ; Generate some random data to put in the list items:makeblock!400 repeat i 400 [ append/only items reduce [
] lay:layout [
style col-hdr text 50 center black mint -20
col-hdr "C1" col-hdr "C2" col-hdr "C3" col-hdr "C4" return
pad -2x0 ; The first block for a LIST specifies the sub-layout of a "row", ; which can be any valid layout, not just a simple "line" of data. ; The SUPPLY block for a list is the code that gets called to display ; data, in this case as the list is scrolled. Here COUNT tells us ; which ~visible~ row data is being requested for. We add that to the ; offset (ML-CNT) set as the slider is moved. INDEX tells us which ; ~face~ in the sub-layout the data is going to. ; COUNT is defined in the list style itself, as a local variable in ; the 'pane function. main-lst: list 207x300 [
across space 1x0 origin 0x0
style cell text 50x20 black mint +25 center middle c-1: cell cell cell cell
] supply [ count: count + ml-cnt item:pick items count face/text:either item [pick item index][none]
] sld: scroller 16x300 [; use SLIDER for older versions of View if ml-cnt <> (val:to-integer value *subtractlength? items visible-rows) [ ml-cnt: val show main-lst
] visible-rows:tointeger! (main-lst/size/y / c-1/size/y) ; Original code to set thumb and step size: ; ; REDRAG sets the size of the thumb/dragger and the paging step size. ; sld/redrag divide visible-rows max 1 length? items ; ; Set the arrow and page step sizes to what *we* want them to be. ; sld/step: max .001 divide 1 max 1 length? items ; Per Ladslav's suggestion, it is now this: either visible-rows >=length? items [ sld/step:0
][ sld/step:1/ ((length? items) - visible-rows)
sld/redrag (max1 visible-rows) /length? items
] ; I'm leaving the original code in the script for comparison purposes.
; We don't need to set the page size here if we've set a good value ; in REDRAG. If we don't use REDRAG correctly, the page step size ; will be off as well. i.e. You need to do one or the other. ;sld/page: sld/step * visible-rows