ページ

2009年1月25日日曜日

アプリケーションを開くを改造する(2)

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

続いてアプリケーションのアイコンを表示する。

まずは Interface Builder を使って名称の左側に NSImageView を配置する。


ここへアプリケーションのアイコン画像を当てはめるのだが Cocoa Bindings を使おう。いくつかあるうちの Value を使う。


"Bind to:" でユーザデフォルトへ接続し、"Model Key Path" にはユーザデフォルトのキー(例では Application5)を指定する。ただしユーザデフォルトの値はアプリケーションプログラムのパスなので、このままではアイコン画像は表示できない。そこで Value Transformer を使い、アプリケーションパスをアイコン画像(NSImage)に変換してやる。

Value Transformer は以前検証したことがある。下記を参照の事。
Cocoaの日々 - NSValueTransformer

定義したクラスは次の通り。
ApplicationTransformer.h

@interface ApplicationIconTransformer : NSValueTransformer {
}@end


ApplicationTransformer.m
@implementation ApplicationIconTransformer

+ (Class)transformedValueClass
{
return [NSImage class];
}

- (id)transformedValue:(id)value
{
if (!value) {
return nil;
}
return [[NSWorkspace sharedWorkspace] iconForFile:value];
}
@end


NSWorkspace#iconForFile: を使い、アプリケーションパスからアイコン画像(NSImage)を取り出し、これを変換後の値として返している。たったこれだけでモデルとビューの接続が完了する。

さて実行してみよう。


いい感じだ。
コードらしいコードを書いていないのだが、アプリを選択すると即時にアイコン画像が反映される。
あいかわらず Cocoa Bindingsは楽だ。