やっつけ仕事だけどまあまあ便利
やったことは翻訳機能を作って、メニューへの追加の方法を調べてそこに翻訳機能を追加した。
google translate apiを使った翻訳機能
下のスクリーンショットのワークスペースにかかれてあるコードをDoItすれば翻訳された言葉が内容のワークスペースを開くようなクラスを書いた。翻訳の仕方はZnClientを使って、google translate apiを使っているだけ。
クラスブラウザのメニューへの追加方法を調べる
どこにコードを追加いいかわからないので調べる。
クラスブラウザを開いて、適当な文字列を選択し右クリックでメニューを開く。とりあえずCopyの項目ののHaloを開いてインスペクトする。
Macの場合はOption+Shift+右クリックでHaloは開ける。
ボタンやなんかのアクションをするオブジェクトは大体インスタンス変数でselectorを持っていて、アクションをする必要があるときは。selectorの内容を実行するのでselectorを見てみる。
selectorの内容が#perform:orSendTo:となっていてあんまり役にたたなさそうなのでインスタンス変数を眺めているとarugumentsがあったので覗いてみる。
多分#perform:orSendTo:と組み合わせて、RubSmalltalkEditor>>copySelectionが呼ばれるんだろうと想像して、copySelectionが呼ばれている場所を調べる。
少し調べてRubSmalltalkCodeMode class>>menuOn:がクラスブラウザの右クリックで呼ばれることがわかった。
Copyのメニューを2つに増やして試してみる。
ちゃんとCopyの項目が2つに増えたみたいなのでここで良いようだ。
メニューに翻訳機能を追加する
コピーの機能を参考にしてitem,keyText,selectorをそれらしく書き換える。おそらくメニューの項目が押されればselectorで指定されたメソッドが起動するはずだ。今追加したTranslateの項目を押して見る。
まだここで設定したtranslateSelectionは実装していないからデバッガーが立ち上がるはずだ。
デバッガーが立ち上がった。デバッガーからtranslateSelection実装しよう。
RubSmalltalkEditor>>copySelectionを見ながら下の様に実装する。
動いてるようだ。もう少し弄ればsmalltalkのコードを英語風に変換して翻訳するような機能も追加できると思う。