Как получить значение переключателя в Rebol? - PullRequest
2 голосов
/ 19 июня 2011

Я пробовал это, но цвета неизвестны (я искал по всему интернету, удивительно, ни один человек не задокументировал это!):

V: view layout [
    across
    label "Colours:"
    r: radio of 'colours l: label "Red" 
    radio of 'colours label "Green" 
    radio of 'colours label "Blue"
    return
    label "Fruits:"
    radio of 'fruits label "Apples"
    radio of 'fruits label "Oranges"
    button "close" [unview]
]

probe colors

Ответы [ 3 ]

2 голосов
/ 19 июня 2011

Я полагаю, что радиокнопки были разработаны так, что вы назвали и проверили каждую кнопку:

mycolours: view layout [
    red: radio of 'colours label "Red"
    green: radio of 'colours label "Green"
    blue: radio of 'colours label "Blue"
]

probe red/data
probe green/data
probe blue/data

Чтобы получить ответ от слова «цвета», вам придется перебирать лица, чтобы найти лица с этим отношением.Вот быстрый и грязный итератор ( walk-vid ):

walk-vid: use [level][
    level: 0

    func [[catch] face [object!] callback [function!] /deep][
        unless in face 'pane [throw make error! "Not a face"]
        either deep [level: level + 1][level: 0 bind second :callback 'level]

        do [callback face]
        case [
            block? face/pane [
                foreach pane face/pane [walk-vid/deep pane :callback]
            ]
            object? face/pane [
                walk-vid/deep face/pane :callback
            ]
        ]
        either deep [level: level - 1][level: 0]
        face
    ]
]

Итак, итерируйте грани, найдите связь, найдите выбранное лицо.Давайте сделаем функцию для этого:

which-radio: func [face [object!] group [word!] /local selected][
    walk-vid face func [face][all [face/related = group face/data selected: face]]
    selected
]

Таким образом, чтобы обернуть:

probe which-radio mycolours 'colours

Чтобы сделать жизнь проще, вы можете добавить значение лица / текста к переключателю (меткине привязан к кнопке):

radio of 'colours "Red" label "Red"
0 голосов
/ 02 сентября 2013

В R3GUI переключатели сгруппированы по близости, и вы можете получить их значения, назвав каждую кнопку.

view [ 
   r1: radio "one"
   r2: radio "two"
   r3: radio "three"
   button "show" on-action [ print get-face reduce [ r1 r2 r3 ]]
]
0 голосов
/ 02 сентября 2013

VID диалект не предоставляет такую ​​функцию из коробки, но его легко добавить.

REBOL []

stylize/master [
    radio: radio with [
        get-all: has [list][
            if related [
                list: make block! 3
                foreach item parent-face/pane [
                    all [
                        item/related
                        item/related = related
                        append list to-logic item/data
                    ]
                ]
                list
            ]
        ]
    ]
]

view layout [
    across
    label "Colours:"
    r: radio of 'colours l: label "Red" 
    radio of 'colours label "Green" 
    radio of 'colours label "Blue"
    return
    label "Fruits:"
    f: radio of 'fruits label "Apples"
    radio of 'fruits label "Oranges"
    button "close" [unview]
]

print ["colours:" mold r/get-all]
print ["fruits:" mold f/get-all]

Предположим, что вы хотите изменить все стили переключателей, в противном случае вам нужно будет удалить / master уточнение.

...