// 下階層用テンプレート
#topicpath
----
//ここにコンテンツを記述します。
#contents

**Eclipse3.3になって、キーバインドの設定方法が変わった [#lb0c63a2]

[[キーバインディングを設定する>Eclipse/プラグイン開発のTIPS集/キーバインディングを設定する]] で、Eclipseのキーバインドをどのように設定するか、ちゃんというとあるアクションに対してどうやってキーバインドを関連づけるかについて書きました。

Eclipse3.2までは、org.eclipse.ui.commands 拡張ポイントで''「コマンド」を定義''し、org.eclipse.ui.bindings 拡張ポイントで''キーとコマンドIDを関連づけ''ました。さらに、org.eclipse.ui.actionSets 拡張ポイントのactionタグつまりアクションクラスの設定側で
 <action class="nu.mine.kino.plugin.samples.rcp.actions.HogeAction"
  definitionId="nu.mine.kino.plugin.samples.rcp.command" <- commandのid
  id="nu.mine.kino.plugin.samples.rcp.actions.HogeAction"
  label="アクション。"  menubarPath="sampleMenu/sampleGroup" style="push"
  toolbarPath="sampleGroup"/>
などとして''アクションとコマンドIDを関連づける''ことで、キーバインドを設定しました。

Eclipse3.3からはアクション関連の機構が、アクションクラスを使うのではなく、org.eclipse.ui.handlers 拡張ポイントと、org.eclipse.core.commands.AbstractHandler クラスを拡張するように変更されているようで、キーバインド設定もそのように機構が変更されています。org.eclipse.ui.commands,org.eclipse.ui.bindings 拡張ポイントでコマンドとキーバインドを定義するまでは同じですが、''コマンドIDに関連づけるのがアクションでなく、ハンドラに変更''されています。具体的には以下の通り。

**やってみる [#ba6c6837]

-org.eclipse.ui.handlers 拡張ポイント
 <extension point="org.eclipse.ui.handlers">
   <handler
     commandId="nu.mine.kino.plugin.samples.rcp.command"
     class="nu.mine.kino.plugin.newaction.handlers.SampleHandler">
   </handler>  ↑コマンドIDとハンドラクラスの関連づけ
 </extension>

-AbstractHandlerのサブクラスSampleHandler
 package nu.mine.kino.plugin.newaction.handlers;
 
 public class SampleHandler extends AbstractHandler {
   public Object execute(ExecutionEvent event) throws ExecutionException {
     IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event);
     MessageDialog.openInformation(
         window.getShell(),
         "Newaction Plug-in",
         "Hello, Eclipse world");
     return null;
   }
 }

ちなみにorg.eclipse.ui.commands,org.eclipse.ui.bindings 拡張ポイントは以下のように設定しました。

-org.eclipse.ui.commands 拡張ポイント
 <extension point="org.eclipse.ui.commands">
   <category id="nu.mine.kino.plugin.samples.rcp.category" name="Sample"/>
   <command  categoryId="nu.mine.kino.plugin.samples.rcp.category" 
    id="nu.mine.kino.plugin.samples.rcp.command" name="サンプルコマンド"/>
 </extension>


-org.eclipse.ui.bindings 拡張ポイント
 <extension point="org.eclipse.ui.bindings">
   <key sequence="M1+9" ctrl+9とかCommand+9とか
    commandId="nu.mine.kino.plugin.samples.rcp.command" 
    schemeId="org.eclipse.ui.defaultAcceleratorConfiguration">
   </key>
 </extension>

以上で、キーバインドの設定は完了です。このままだとメニューに表示されないので、キーボードショートカットからしかハンドラを起動できませんが、ctrl+9とかcommand+9で先のハンドラクラスが実行されます。

#ref(handlerExecute.png)

もちろんコマンドとキーバインドの関連については何も変わってないので、キーバインドの設定画面には上記バインドが表示されています。

#ref(keybinding.png)




**TIPS集 [#l8a5f4fe]


**関連リンク [#t7f324d5]
-Eclipse/プラグイン開発のTIPS集/キーバインディングを設定する
-[[Eclipse V3.3 でメニュー項目を構成して追加する方法>http://www.ibm.com/developerworks/jp/opensource/library/os-eclipse-3.3menu/index.html]]


----
この記事は
#vote(おもしろかった[2],そうでもない[0])

- キーバインドの設定はもちろん、メニューバーやツールバー、ポップアップメニューへの追加機構も変わってるですよねー。 -- [[きの]] &new{2009-02-19 (木) 11:30:54};
- CopyやPasteなどで、自分のプラグインがアクティブなときにはキーバインドが自分のプラグインで登録した動作をするようにするやり方で苦心してます。。。アクションのときは登録が簡単だったのに。。。 -- [[YOU]] &new{2009-09-09 (水) 16:32:40};

#comment
#topicpath


SIZE(10){現在のアクセス:&counter;}

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS