В Moose, как я могу получить уведомление о нажатии специальной клавиши? - PullRequest
1 голос
/ 27 октября 2011

В 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 Ответ

2 голосов
/ 27 октября 2011

Пользовательское взаимодействие с пользователем достигается с помощью действий.Если вы заинтересованы во влиянии на браузер (а не просто в выполнении какого-либо внешнего действия), то вы хотите, чтобы логика действия влияла на значение порта, в котором находится презентация.

Например,если для 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

...