Steven White — 4-Sep-2018/18:09:04-7:00
I know how to set the values of a drop-down list when making a layout, and I know how to access the value that was selected, but it seems I do not know how to set the values of a drop-down list after the layout has been created and viewed. In the sample below, I have two drop-downs. The top one is for a main category of something-or-other, and the one beneath is for sub-categories of the main category. I want the sub-category drop-down to change depending on which main category was selected. That is what I seem to be unable to do, and I wonder if anyone can assist.
Thank you.
R E B O L []
CATEGORIES: [
"ActiveDirectory" ["ResetPassword" "UnlockAccount"]
"Laptop" ["LoginFailure" "XXX" "yyy"]
"Phones" ["NewCord" "xxx" "yyy"]
]
SUBCATS: []
LOAD-SUBCAT: does [
SUBCATS: copy []
SUBCATS: select CATEGORIES MAIN-CATEGORY/text
MAIN-SUBCAT/data: SUBCATS ;; This seems to be the problem spot
show MAIN-SUBCAT
set-face DEBUG-TEXT mold SUBCATS ;; for debugging
]
MAIN-WINDOW: layout [
MAIN-CATEGORY: drop-down 120 data (extract CATEGORIES 2) [LOAD-SUBCAT]
MAIN-SUBCAT: drop-down 120
button "Quit" [quit]
DEBUG-TEXT: info 200 ;; for debugging
box 200x100 ;; So drop-down will show
]
view center-face MAIN-WINDOW
Nick — 4-Sep-2018/22:54:02-7:00
Try this:
CATEGORIES: [
"ActiveDirectory" ["ResetPassword" "UnlockAccount"]
"Laptop" ["LoginFailure" "XXX" "yyy"]
"Phones" ["NewCord" "xxx" "yyy"]
]
SUBCATS: []
LOAD-SUBCAT: does [
SUBCATS: copy select CATEGORIES get-face MAIN-CATEGORY
ms/reset
ms/list-data: SUBCATS
set-face ms subcats/1
]
MAIN-WINDOW: layout [
MAIN-CATEGORY: drop-down 120 data (extract CATEGORIES 2) [LOAD-SUBCAT]
ms: drop-down 120
button "Quit" [quit]
box 200x100 ;; So drop-down will show
]
view center-face MAIN-WINDOW
Steven White — 5-Sep-2018/10:27:06-7:00
Thank you, that did work perfectly. I wonder if i might ask a couple questions about it since I have to explain it and can't.
Regarding "ms/list-data: SUBCATS" if I had to guess at an explanation I would say that "list-data" is the item in a drop-down face that refers to drop-down values, and code like "MAIN-CATEGORY: drop-down 120 data (extract CATEGORIES 2)" is what loads "list-data" at the time a layout is generated. If one later wants to set a drop-down manually, then "list-data" is the item that must be set. How you discovered that is amazing to me.
But, the line "ms/reset" is unfamiliar. If I had to guess, I would guess that it is a function in a drop-down face in the way that "get-face" and "set-face" are functions in certain other faces. Its use is to clear out a drop-down in some way. Maybe it clears "list-data."
If you have any insights or links to documentation, that would be very helpful to me. I hate to leave behind code with documentation that basically says, "this works but I have no idea why."
Thank you.
Nick — 5-Sep-2018/10:59:04-7:00
I think the most important thing to get about questions like this, is that the answers are not necessarily found in documentation, but in exploring the widgets with Rebol's built-in help. I changed the second drop-down label to 'ms' because I wanted a short label to type at the command line. I put a 'probe at the end of the load-subcat function, and then pressed the ESC key in the console, where I could explore the properties of the 'ms object:
? ms
That lists all the values, functions, etc. in the 'ms object. Then, you can see where the values are stored, experiment with the built-in functions, etc.
? ms/list-data
You can see the 'reset function in the 'access property.
I just took a few minutes to experiment. That's what I do any time I don't know exactly what to do in Rebol.
Steven White — 6-Sep-2018/9:06:07-7:00
Good point. VID is an artifact of a past era and if we want to find out some things about it, we are on our own to study it. So I tried to encapsulate your above advice into my little VID reference in case others might find it helpful.
Thank you.
http://cobolrebol.com/pages/documentation/VIDforCOBOL.html#section-11