エンジニアの信尾海翔です。
第八回目のブログでは第七回目に引き続き、Electronについてまとめたいと思います。
今回の内容はElectronのroleについてです。
Electronのrole
Electronにはメニューに機能を実装することができるroleがあります。
前回のブログでもメニュー自体は作成しましたがラベルやクリックしたときの処理は自分で追加しなければいけませんでした。
roleを使うことでアプリケーションのメニューによくある機能を簡単に実装することができます。
ロール例
- undo 処理を取り消す
 - redo 処理を再実行する
 - cut カットする
 - copy コピーする
 - paste ペーストする
 - delete 削除する
 - close ウィンドウを閉じる
 - reload ウィンドウをリロード
 - minimize ウィンドウの最小化
 
…などたくさんの機能が用意されています。
今回は
undo、redo、cut、copy、paste、delete、closeの機能を持つメニューをroleをつかって実際に実装したいと思います。
index.jsに以下を追加、関数createMenuを呼び出します。
function createMenu(){
    menu = new Menu();
    test = new MenuItem({
        label: 'test',
        submenu: [
            {role: 'undo'},
            {role: 'redo'},
            {role: 'cut'},  
            {role: 'copy'},
            {role: 'paste'},
            {role: 'delete'},
        ],
    });
    menu.append(test);
    Menu.setApplicationMenu(menu);
};
index.htmlにはtextareaを追加、今回は文字を入力してメニューの機能を試したいと思います。
メニューのtestをクリックして以下のような画面が表示されていれば成功です。

正しく動作するか確認するため、undo、redoを試してみたいと思います。
undo
textareaに文字を入力、その後メニューのundoをクリックすると入力処理が取り消されます。
undoの横にある「Ctrl+Z」など、各機能の横にあるショートカットを押しても同じ処理が走るようになっています。
undo前

undo後

redo
undoで文字の入力を取り消した後、メニューのredoをクリックすると再度入力処理が走り文字が表示されます。
redoもundoと同じようにショートカットが設定されています。(Ctrl+Y)
redo前

redo後

またroleを追加するときにlabelを指定することでメニューに表示する名前を変更することもできます。
例:undoをアンドゥと表示

余談
よく使われる機能だけならroleだけでも簡単にメニューを実装できてショートカットまで設定されるなど、大変便利なのでどんどん使っていきたいと思います。
また今回は省力しましたが、macOS専用のroleなどもあるようなのでまたいつか勉強してまとめたいと考えています。



