в checklistbox state-rows будучи вызванным в обработчике 'selected' возвращает предыдущее состояние, а не текущее. (define clb (make-widget "checklistbox")) (let ((rows (make-attribute 'rows))) (document:id c (clb rows '("a" #t "b" #f "c" #t) (when selected (let ((slist (c state-rows))) (format #t "slist=~S~%" (c state-rows))))))) --- При первом же клике печатается: slist=(#t #f #t) Что соответствует предыдущему состоянию а не текущему. Кроме того: для того чтобы можно было использовать этот виджет в alterator-pkg мне явно не хватает current (чтобы узнать какой элемент был кликнут).
(In reply to comment #0) > Кроме того: для того чтобы можно было использовать этот виджет в alterator-pkg > мне явно не хватает current (чтобы узнать какой элемент был кликнут). При множественном выборе может быть "кликнуто" сразу несколько элементов, поэтому для *listbox c множественным выбором -- current-rows, а с единичным -- current
state-rows исправил, но обрати на вывод от (let ((rows (make-attribute 'rows))) (document:id c (clb rows '("a" #t "b" #f "c" #t) (when selected (format #t "current-rows=~S~%" (c current-rows)) (format #t "state-rows=~S~%" (c state-rows)) )))) ставим исправленный browser все выделяем и начинаем снимать выделение по порядку сверху вниз alListBox::postData< (state-rows . ( #f #t #t)) (current-rows . ( 1 2))> current-rows=(1 2) state-rows=(#f #t #t) alListBox::postData< (state-rows . ( #f #f #t)) (current-rows . ( 2))> current-rows=(2) state-rows=(#f #f #t) alListBox::postData< (state-rows . ( #f #f #f)) (current-rows . ())> current-rows=(2) state-rows=(#f #f #f) последний current-rows остается "2"
alterator-browser-qt-2.9.83-alt1