ページ

2008年9月2日火曜日

ツールバー(その4)

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

今回はコード解説。

AppController.m を用意し、ターゲットの NSWindowをアウトレットに接続しておく。

@interface AppController : NSObject {

IBOutlet NSWindow* _window;
}



まず awakeFromNib でツールバーのインスタンスを作成し、NSWindowへ設定する。Delegateは自身(AppController)とする。
- (void)awakeFromNib
{
NSToolbar *toolbar = [[[NSToolbar alloc] initWithIdentifier:@"TOOLBAR"] autorelease];

[toolbar setDelegate:self];

[_window setToolbar:toolbar];
}


その上で必要な Delegateメソッドを実装していく。

まずは toolbarDefaultItemIdentifiers: から。
- (NSArray *)toolbarDefaultItemIdentifiers:(NSToolbar*)toolbar
{
return [NSArray arrayWithObjects:@"HELLO", nil];
}


デフォルトで表示するツールバーアイテム(NSToolbarItem)の識別子(ItemIdentifier)のリストを返す。フレームワーク(cocoa)がこれを元にツールバーを構成していく。

同じく toolbarAllowedItemIdentifiers: も実装しておく。
- (NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar*)toolbar
{
return [NSArray arrayWithObjects:@"HELLO", nil];
}



そして toolbar:itemForItemIdentifier:willBeInsertedIntoToolbar:
引数で渡された ItemIdentifier を元にして必要なツールバーアイテムのインスタンスを作成し、これを返す。

- (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *)itemIdentifier willBeInsertedIntoToolbar:(BOOL)flag
{
NSToolbarItem *toolbarItem = [[[NSToolbarItem alloc] initWithItemIdentifier:itemIdentifier] autorelease];

if ([itemIdentifier isEqual:@"HELLO"]) {
[toolbarItem setLabel:@"Hello"];
[toolbarItem setImage:[NSImage imageNamed:@"hello"]];

[toolbarItem setTarget:self];
[toolbarItem setAction:@selector(hello:)];

} else {
toolbarItem = nil;
}
return toolbarItem;
}



最後にツールバーアイテムがクリックされた時のアクションターゲット hello:
- (void)hello:(id)sender
{
NSLog(@"hello");
}


サンプルではログに "hello" と表示している。