しかし乗りかかった船、いちおうできるところまでやってみないと気持ちが悪い。
そこでxcatsan師匠のページにあるとおり作業してみる。
結果がこれ。
無事、Toolbarをつけることができた。MacRuby版のソースはこうなる。
class PreferenceController < NSObject attr_accessor :win def awakeFromNib toolbar=NSToolbar.alloc.initWithIdentifier("TOOLBAR") toolbar.setDelegate(self) win.setToolbar(toolbar) end def toolbarDefaultItemIdentifiers(toolbar) ["Hello","Hi!"] end def toolbarAllowedItemIdentifiers(toolbar) ["Hello","Hi!"] end def toolbar(toolbar,itemForItemIdentifier:itemIdentifier,willBeInsertedIntoToolbar:flag) toolbarItem=NSToolbarItem.alloc.initWithItemIdentifier(itemIdentifier) if itemIdentifier.isEqual("Hello") toolbarItem.setLabel("Hello") toolbarItem.setImage(NSImage.imageNamed(NSImageNamePreferencesGeneral)) toolbarItem.setTarget(self) toolbarItem.setAction(NSSelectorFromString("hello:")) elsif itemIdentifier.isEqual("Hi!") toolbarItem.setLabel("Hi!") toolbarItem.setImage(NSImage.imageNamed(NSImageNameAdvanced)) toolbarItem.setTarget(self) toolbarItem.setAction(NSSelectorFromString("hi:")) else toolbarItem=nil end toolbarItem end def toolbarSelectableItemIdentifiers(toolbar) ["Hello","Hi!"] end def hello(sender) puts "hello" end def hi(sender) puts "hi" end def open_window(sender) win.makeKeyAndOrderFront(self) end endObjCのコードをMacRubyに置き換えていくのもかなり慣れてはきたけれど、例えば引数のラベルを間違えたりしてまだまだ時間がかかる。 今回も
toolbar(toolbar,itemForItemIdentifier:itemIdentifier,willBeInsertedIntoToolbar:flag)
を書くときに、「itemForItemIdentifier」を「itemForIdentifier」とtypoしてそれをなかなか発見できず、「デリゲートに必要なメソッドが足りない」と言われて頭を抱えた。
もう一つ引っかかったのがObjCで言うところの
[toolbarItem setAction:@selector(hello:)];この「@selector」ってどうすんの?と悩んだ。幸い
ダイナミックObjective-C 3 Cocoa実現の肝 - クラスとそのメソッドの調査方法をチェック
に「@selector」は「NSSelectorFromString」と同じ、と書かれていて、なんとか書き換えることができた。いやまったく、GoogleというかWebがなけりゃプログラミングできないですね。
さて、次はいよいよオプション選択かな。
0 件のコメント:
コメントを投稿