● ToolBox API徒然草(2005/03/15)

  このニュースは、MOSAの会員にのみ配布されているデベロッパー向けの
  デジタルマガジンMOSADeNのに掲載された記事です。ほぼ一ヶ月遅れで
  ここに掲載されて行きます

 〜 Navigation Service APIの活用(その4) 〜


今回は、「フォルダ選択」や「ファイル読み込み」に用いられるNavigation Service APIを説明します。具体的には、ダイアログのブラウザからファイルやフォルダを選択することができる、NavChooseFolder()とNavGetFile()についての解説となります。

まず最初に、ユーザが選択したフォルダのFSSPecを得るためのnavMyChooseFolder()ルーチンを紹介します。ダイアログを表示するまでの手順は、navMyPutFile()の時とほぼ同じですが、異なるのは、opt.preferenceKeyに別の識別値'IMGE'を代入している点と、複数ファイルの選択を禁止するために、opt.dialogOptionFlagsのkNavAllowMultipleFilesビットをクリアしている点です。代入する識別値をnavMyPutFile()の時と変えているのは、作業の対象となるファイルの種類が異なるためです。前回はドキュメントファイルが対象でしたが、今回は画像ファイルが対象であり、作業内容に準じたディフォルト表示位置をシステム側に憶えておいてもらうために、異なる識別値を設定しているわけです。



続いて「ファイル読み込み」に用いられるavMyGetFile()ルーチンです。こちらは、「ドキュメント読み込み」と「画像ファイルの登録」という2つの用途に使われるため、 最初の引数(kind)の内容により、ダイアログ表示までの準備手順を分岐しています。具体的には、kindがゼロならばドキュメントオープン用として、kindが1であれば画像ファイル登録用として働きます。また、このルーチンからは複数のFSSpecやファイルタイプが返されますので、それらを格納するための配列と、その個数の格納場所である*ctも同時に引数として渡します。この時の配列の最大数(読み込みファイル最大数)については、ヘッダーファイルにMAX_BUF(200個まで)として定義されています。



用途により分岐させている箇所の目的は、ブラウザに表示させるファイル種類を切り替えることです。その準備として、表示対象とするファイルタイプを配列list1(OSType)へと順次代入していきます。ドキュメントの場合にはMY_DOCをひとつだけセットしていますが、画像ファイルの場合は、まず第一にQuickTime Importerが読み込み可能な画像ファイルタイプ(JPEG,PICT,TIFFなど)をnavGetImportTypeList()ルーチンを使い代入します。しかし、これだけですと、ファイルタイプが設定されていない(NULLの)画像ファイルはブラウザへは表示されません。やっかいなことに、Mac OS X環境では、ファイルタイプが設定されていないため、その種類をファイル名の拡張子から判断しなければならない画像ファイルが沢山存在します。それらをちゃんと表示するためには、NULLを含めたいくつかの特殊なファイルタイプも配列へ追加しておく必要があります。こうして配列へ代入したファイルタイプは、navMakeTypeList()ルーチンによりNavTypeListHandleへと作り直されて、NavGetFile()に渡されます。

画像ファイルのFSSpecを得る処理が、navMyChooseFolder()の場合と大きく異なるのは、ユーザにブラウザ上での複数ファイルの選択を許しているためです(最大数の制限はある)。まずは、AECountItems()によりファイル選択数を調べ、その個数分のファイルタイプとFSSpecを順次配列に格納します。ファイルタイプの方は、先んじてFSpGetFInfo()で得ておき、その値がNULLであるかどうかをnavCheckImportExtention()ルーチンに渡して調べるようにします。もしそれがNULLであれば、navCheckImportExtention()がファイル名の拡張子を調べることで正しく作り直します。例えば拡張子が.jpgであれば、ファイルタイプは'JPEG'と設定し直されるわけです。

次回は、navMyGetFile()で呼ばれているnavGetImportTypeList()、navMakeTypeList()、navCheckImportExtention()の3つの自作ルーチンを解説することで、ファイル選択時の悩みの種である「ファイルタイプ」と「拡張子」の共存問題について考えてみます。


copyright 2005 Ottimo, Inc. All rights reserved
無断転載・引用禁止
Contact us: koike@ottimo.co.jp