1

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 を押しても通知されません。変更されたテキストを受け入れると、通常のテキスト変更と見分けがつかないように見えるテキスト ポートでポート イベントが発生します。つまり、テキストが受け入れられたかどうかはわかりません。

特別なキーの押下とテキストの受け入れについて通知を受け取るにはどうすればよいですか?

4

1 に答える 1

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 をご覧ください。

于 2011-10-27T17:24:35.080 に答える