在Moose,如何通知特殊按键?

时间:2011-10-27 09:45:49

标签: smalltalk pharo moose-technology

Moose中,我希望每当用户在任何文本窗格中按下Command-M时都会通知我的浏览器。

我正在听内部端口,等待任何类型的事件。按下Command-m时会出现文本事件,但它不包含按下command-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 个答案:

答案 0 :(得分:2)

通过操作实现自定义用户交互。如果您对影响浏览器感兴趣(而不仅仅是执行了一些外部操作),那么您希望操作的逻辑影响演示文稿所在的端口的值。

例如,如果对于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