2011年6月26日日曜日

Cocoa ファイルの種類

漫然とした1日。家族の用事やらなにやらであっという間に過ぎる。

プログラミングに対する集中力もなく、ちょっと調べては自分のプロジェクトを眺め、少し考えてはまたちょっと調べ、という感じでこれといって成果のない1日となった。ま、そんな日もあるさ。

IKImageBrowserViewでフォルダアイコンをダブルクリックしたらフォルダ内へ移動、はすぐできあがった。そりゃそうだ、NSTableViewでさんざんやったんだから。

delegateの

-(void)imageBrowser:(IKImageBrowserView*)aBrowser cellWasDoubleClickedAtIndex:(NSUInteger)index

を定義してダブルクリックの処理をしたので、フォルダでない場合は自分で書いてやらないと何も起こらない。とりあえず

[[NSWorkspace sharedWorkspace]openFile:[item fullPath]];

みたいな感じでファイルオープンだけするようにして、ここから少し考えた。ここの処理で、ファイルの種類によってあれこれやるのもおもしろいかな、と。単純にアプリケーションなら、「開く」か「実行」か、画像なら開くアプリの選択、とか。

IKImageBrowserViewで画像を自前で開けば、WindowsのVixみたいなアプリにもできるな、とか。

どこまで突き進むかわからないけれど、まずはクリックしたファイルの種類を判定するところから。

NSString* uti=[[NSWorkspace sharedWorkspace] typeOfFile:[item fullPath] error:nil];
UTIってなによ、な素人なわけだが、とにかくこれでファイルのUTIが取得できた。[item fullPath]はファイルのURLを収めたモデルクラス(のメソッド)。

NSString* loca=[[NSWorkspace sharedWorkspace] localizedDescriptionForType:uti];
これでいわゆる「ファイルの種類」を表す文字列が取得できた。ついでにEseのTableViewで表示できるようにしてみる。


えーと日本語で表示されないのは、アプリをローカライズしてないからかな?

それで以下のメソッドで「このタイプのファイル?」と問い合わせればBOOLで答えてもらえるみたい。

[[NSWorkspace sharedWorkspace] type:uti conformsToType:@"public.image"]);

上の例は画像かどうか問い合せてみた。NSLogを取ってみると、画像ならPNGでもJpegでもちゃんと「YES」を返してくれる模様。

そんなんでファイルの種類を得ることができたので、今度は

1,ファイルの種類を判定する専用のクラス
2,ファイルの種類に基づいてOpenする動作を割り当てるクラス

を細分化して書いてみようかなー、と考えてところで本日は終了。
QLPreviewPanelをちゃんと開くための作業をしようと思っていたけれど、なかなかうまく進まないものだ。

0 件のコメント:

コメントを投稿