В Moose, как я могу получить уведомление о нажатии специальной клавиши?
В Moose я хочу, чтобы мой браузер уведомлялся всякий раз, когда пользователь нажимает Command-M на любой текстовой панели.
Я слушаю внутренний порт, ожидая любого события. Хотя есть текстовое событие, которое появляется при нажатии Command-m, оно не содержит факта, что команда-m была нажата.
Чтобы проверить, в Moose, измените GLMExplicitBrowser>>innerPortEvent:
добавив это первое утверждение:
(aPortEvent port name asString beginsWith: 'select') ifFalse:[ aPortEvent inspect.].
Теперь запустите следующее в рабочей области:
|browser |
browser := GLMBasicExamples new textSelection.
browser openOn: (1 to: 100).
((browser paneNamed: #start) port: #selection) value: 2.
((browser paneNamed: #end) port: #selection) value: 5.
Вы получите уведомление, когда текст меняется. Если вы нажмете Command-M, вы не получите уведомление. Если вы примете измененный текст, вы получите событие порта для текстового порта, которое кажется неотличимым от обычных текстовых изменений. То есть: вы не можете видеть, был ли текст принят или нет!
Как я могу получать уведомления о специальных нажатиях клавиш и принятии текста?
1 ответ
Пользовательское взаимодействие с пользователем достигается с помощью действий. Если вы заинтересованы во влиянии на браузер (а не просто в выполнении какого-либо внешнего действия), то вы хотите, чтобы логика действия влияла на значение порта, в котором находится презентация.
Например, если для Command-M вы ожидаете получить список всех методов в системе, вы бы определили действие как:
a text
"..."
populate: #selection
on: $m
entitled: 'Implementors'
with: [ :text :entity | "logic that retrieves the list of methods" ]
Вы можете увидеть больше информации по адресу: http://www.themoosebook.org/book/internals/glamour/actions