タイトル小池邦人のプログラミング日記》2001/11/28<Interface Builderに再挑戦する>カテゴリーProjectBuilder/Interface Builder, Carbon/CF, 小池邦人のプログラミング日記
作成日2001/11/28 17:37:10作成者新居雅行
以前、「NibベースのCarbonアプリを作る」という題目で、CarbonアプリとNibファイルやInterface Builderの関係について何回か解説したことがありました。ただし、その時に用いたMac OS Xはパブリックβ版でしたので、最終仕様を確認するには至らなかったわけです。今回は、Mac OS X 10.1と同時に発表されたInterface Builder 2.1を使い、CarbonアプリでのNibファイルの活用を再考してみたいと思います。

11/28現在、ADCメンバーサイトには「CarebonLib_1.5f2_SDK」が登録されています。前回、「余裕ある開発進行状態」を褒め、「完成は来年初頭か?」などと書いてしまったのですが、どうも様相は一変したようです(笑)。β版をすっ飛ばして突然f版が登場いたしました。(昔々、QuickDraw 3Dがd版からα版とβ版をすっ飛ばしてf版になったことがある...)Appleは、近々発表されるだろうと噂されているMac OS 9.2.2に、このバージョンを搭載するつもりでしょうか?もしそうなら、Mac OS 9とMac OS Xで同バージョンのCarbonLibが使えないと、色々と面倒なことが起こります。デベロッパー側としては、Mac OS X 10.1にも1.5準拠のCarbon Framewrokを早急に搭載して欲しいところです。

まずは、おさらいからです。NibベースのCarbonアプリの簡単なサンプルをを得るには、Project Builder 1.1を起動し、アシスタントで「Carbon Application (Nib Based)」を選び、ひな形プロジェクトを作ります。

 

このプロジェクトの「グループとファイルリスト」に表示される「Resources」内の「main.nib」をダブルクリックすれば、Interface Builderが起動し、そこに含まれているオブジェクトがすべて表示されます。初期状態では「MenuBar」と「MainWindow」(メインメニューバーと空のウィンドウ)の2つのオブジェクトが登録されています。これらをアプリケーション側から呼び出すには、以下のような簡単なソースコードを記載するだけでOKです。

 

このルーチンを実行した後にRunApplicationEventLoop()を呼べば、メニュー、ウィンドウ、コントロールなどに対する適切なCarbon Event処理が開始されることになります。

それでは、Project Builder 経由でなくNibファイルを作成するにはどうしたらよいのでしょうか?ダイレクトにInterface Builderを起動し、最初に表示される「Starting Point」ダイアログで「Main Window With Menu Bar」を選択します。

 

この時、Languageメニューから「Japanese」を選んでおけば、出来上がったディフォルトのメニューバーやタイトルは日本語表記となります。ただし、Project Builderは日本語版なのですが、Interface Builderの方は日本語版になっていません。Mac OS X付属アプリの中では珍しいケースです。ぜひ、次期バージョンでは日本語版を提供して欲しいと思います。

昔からのMacintoshデベロッパーは、リソースファイルのメニューやダイアログをNibファイルへと変換したい場合があります。そんな時には、Fileメニューの「Import Resource File」を使います。ファイル選択ダイアログで変換したいオブジェクトを含むリソースファイルを選び、表示された「Resources」ダイアログで変換対象を個別に選びます。

 

Encodingメニューで「Japanese (Mac OS)」を選択しておけば、日本語表記のメニューやコントロールタイトルも文字化けせずに変換されます。ただし、いくつか変換の実験をしてみたところ、コントロールタイプがうまく移行できないケースが見つかりました。

 

この場合には、左上のダイアログのチェックボックスが、右上のような正体不明のコントロールに変換されています。また、これをFileメニューの「Test Interface」で動作確認してみると、左下のようにスライダーとして表示されてしまいます?

個別にコントロールを作成する時にも、いくつかの不都合が見受けられました。まず、Tabコントロールですが、Tabアイテムの名称に日本語を入力しても表示されません(半角英語はOK)。

 

これには困りました。とりあえず英語でダミーを入力しておき、後からAPIを使って日本語に差し替えればOKだろうと考えていました。ところが、Tabアイテムの名称を後から変更する方法が見つかりません(涙)。現在調査中ですが、ひょっとすると不可能なのでしょうか? 加えて、ポップアップメニューのように、メニューリソースを付加する必要があるコントロールのAttributesに、何故だかメニューIDを入力するカラムがありません。

 

これだと、アプリ側でメニューの割り付け処理を行わなければならず、煩雑で美しくありません。リソースはメニューIDが登録可能なのですから、これはNibデータの仕様の不備かもしれません?

Project BuilderからInterface Builderを呼び出す場合、コントロールに表示させたいアイコンやPICT画像は、リソースファイルにしてNibファイルと同階層に置けばOKです。これにより、Interface Builderの「Image」Tabに、アイコンやPICTリソースが表示され、それをドラッグ&ドロップでコントロールに付加できるようになります。

 

しかし、どうもこの仕組みはProject Builderとの連携のみで機能するようです。Porject Builderではなく、CodeWarriorのプロジェクトでNibファイルを使う場合、リソースファイルをそれと同階層に置いても、その中のアイコンやPICTリソースはnterface Builderでは表示されません。

 

アイコンやPICT画像ぐらいは、ドラッグ&ドロップでImage Tabにダイレクトに登録できるようにしてもらいたいものです。ただし、ここで紹介した不都合は、私の操作方法に問題があるため起こっている可能性もあります。うまくいく方法をご存知の方は、ぜひ私宛にご連絡いただければと思います。よろしくお願い致します。

さて、コントロールの配置やコマンド編集などでは非常に高い能力を発揮するInterface Builderなのですが、作成できるオブジェクトの種類が限定されているのが残念でなりません。このままですと、我々デベロッパーは相も変わらずResEditやResorcererなどのリソース編集アプリを併用する必要があります。ResEditに関してはCarbon化されるとは思えませんし、Resorcerer 2.4の方はCarbon化はされてはいますが、Mac OS X 10.0をリファレンスに開発されており、レスポンスが悪い機能や不安定な箇所が多々見受けられます。それ以外にもいくつかライバル製品は存在しているようですが、「これだ!」と言えるMac OS X対応アプリは登場していません。マウスカーソル、アイコン、パタン、PICT画像、文字列など、Macintosh環境には長い年月をかけて積み上げられてきた数多くのリソースが存在します。そうした物の多くは、アプリケーションと密接な関係を保ち、簡単には外せない状態となっています。そうしたリソースの編集が可能になるか、もしくは、それらの代用となる仕組みが確立されるか..。とにかく、我々がリソース編集ソフトを使わなくてもよい時代が来るように、Interface Builderの更なる進化を心から望みたいと思います。

Interface Builder 2.1について、現状の不都合や将来的に改良してほしい点を取り上げてきましたが、今までのリソース編集ツールと比較すると、はるかに使いやすく有用であることは明らかです。Metrowerks社のCodeWarriorなどの他社製の開発環境も、Project Builderに対抗するためには、Interface Builderとのスムーズな連携を強化することが不可欠でしょう。ぜひ負けずに頑張って欲しいと思います。
[小池邦人/オッティモ]
関連リンクオッティモ