2007年01月07日

2007年01月07日:ORTEP に Mac の GUI をつける

 年末から細切れの時間をかき集めて作業していたプログラムがだいたい仕上がって来た。モノはORTEP IIIに Mac 用の GUI をつけたもの。実は 2000 年ごろに Mac OS 9 上の CodeWarrior で作ったことがあって、今でも一応 Classic 環境で動く。Fortran で書かれたコマンドラインのプログラムを Mac に移植するのは当時なかなか大変で、MacF2C を使って C にトランスレートしたあと CodeWarrior に付属の疑似コンソールラッパーみたいなのとリンクして作ったものだった。GUI をつけるのもまた大仕事で、Fortran のメインプログラムを改造したり大騒ぎしたあげく、結局「テキストデータを Fortran のメインプログラムに渡して、その結果をウィンドウに描画する」という最低限のところで力尽きてしまった。これでも一応実用にはなったのだが。

 OS X の環境だと全然違う。まず Fortran のメインプログラム本体は、手を加えずに g77 でコンパイルして単体の実行ファイルにしてしまう。GUI 側のプログラムでデータファイルを読み込む時は、まず Perl のスクリプトを通して plist 形式に変換してしまい、NSPropertyListSerialization クラスの propertyListFromData メソッドで NSMutableDictionary 形式の内部データで保持しておく。この形にしておくと、GUI で値を編集するのに都合がよい。画面描画の時は逆に Perl の eval で読める形に内部データを書き出した後、Perl スクリプトで ORTEP のソースを生成し、それを ORTEP 実行ファイルに渡して HGPLOT ファイルに変換、これを GUI 側で読み出して NSBezierPath を作成する。データ編集の GUI は Interface Builder で作るが、コントロールにユニークなタグを振って、NSDictionary のキーとタグの一覧表を別の plist で記述するようにした。これで、いちいちそれぞれのコントロールに対してコードを書かなくてもよくなった。

 結局、データファイル中のほとんどのパラメータを GUI で編集できるようになった。作り始めてから2週間ぐらいでここまで来れるのだから、今更ではあるがやっぱり Mac OS X + Cocoa の生産性はすばらしいものがあるな。

Posted at 2007年01月07日 02:05:48
email.png