しかし乗りかかった船、いちおうできるところまでやってみないと気持ちが悪い。
そこで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
end
ObjCのコードを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 件のコメント:
コメントを投稿