2011年1月27日木曜日

MacRuby・環境設定ウィンドウその2・Toolbar

引き続き環境設定パネルにToolbarをつける話。しかしよくよく考えてみれば、わざわざToolbarつけてTabView切り替えるほど環境設定する項目がないのね。(^^;)TabViewだけでもいいわけだし。

しかし乗りかかった船、いちおうできるところまでやってみないと気持ちが悪い。

そこで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 件のコメント:

コメントを投稿