Setting a drop-down at run time
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
posted by: Steven White 4-Sep-2018/18:09:04-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
posted by: Nick 4-Sep-2018/22:54:02-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.
posted by: Steven White 5-Sep-2018/10:27:06-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.
posted by: Nick 5-Sep-2018/10:59:04-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
posted by: Steven White 6-Sep-2018/9:06:07-7:00
|