タイトルAppleScript Working》3 _ AppleScript Studioでテーブルコントロールを使う(1)カテゴリーユーザインタフェース, AppleScript, AppleScript Working
作成日2002/2/6 15:15:36作成者新居雅行
   この記事のPDFファイル(651KB)は以下のアドレスにあります。
   ダウンロードには、MDOnlineのアカウントが必要です。
   pdfs/MDOnline020007.pdf
 ‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
AppleScript Studioでのプログラミングの話題の続きとして、テーブルの使い方を解説しよう。NSTableViewというクラスがCocoaでは用意されており、表形式の表示やデータ入力に使えるようになっている。昔の開発環境だと、単純な機能であったが、NSTableViewは汎用的なデータの保存のために複雑になっているため、ある程度はどの概念を理解していないと、AppleScriptのプログラミングでも理解できないことも多い。今回はテーブルにデータを追加し、データを取り出すというところまでのプログラムの作成方法を解説しよう。

――――NSTableViewとデータソース
よくあるRAD開発システムの場合、テーブルだとたいがいは「表と列を指定して値をセットしたり取り出す」ということができるようになっている。しかしながら、Cocoaで用意されたテーブルのコントロールであるNSTableViewは、さまざまな処理に対応できるのであるが、特に、表に表示するデータの保存についても自由にカスタマイズできるという点が大きな違いだ。もちろん、柔軟性は高いのであるが、逆に言えば、簡単に使うことができないとも言える。
AppleScript Studioは、Cocoaのコンポーネントを使えることが大きな特徴であり、もちろん、テーブルにはNSTableViewを使う。しかしながら、そのままの状態だと単純に使いにくいこともあるので、データをテーブルなどに保存するためのオブジェクトも用意されている。その使い方さえ知っておけば、よくあるテーブルコントロールと同じように使えるのである。
まず、NSTableViewでは、データの保存を「データソース(Data Source)」という別のオブジェクトで行う。つまり、テーブル自体にはデータを記憶することはできず、その背後に用意されたデータソースにデータを保存する。Cocoaではそのデータソースを構築するためのプロトコルとしてNSTableDataSourceというクラスが定義されている。ここでは、つまりはリクエストがあれば表形式のデータを取り出すなどのメソッドを用意したクラスを定義するためのもとになる定義が行われていて、これに従って、プログラマがデータを保存する定義を用意するというのが基本となる。
CocoaではNSOutlineViewなどでも、同じような手法、つまりデータソースという別のオブジェクトを使う方法を使ってのデータの保存を行っている。AppleScript Studioでは、テーブルやアウトラインで使えるデータソースを、オブジェクトとして用意してくれている。ASKDataSourceというコンポーネントがある。このコンポーネントを、とりあえず用意しておき、テーブルやアウトラインからこれを使うように設定することで、データの保存ができる。ASKDataSourceへの読み書きは、AppleScriptのプログラムで行える。
いずれにしても、ユーザインタフェースのコンポーネントと、データの保存のコンポーネントが別々に用意されているということを知っておくのが第一歩だ。

――――Interface Builderでのテーブルとデータソースの設定
実際に、テーブルをウインドウに配置したときに、データソースをどのように用意するのかを解説しよう。Project Builderで、AppleScript Applicationのテンプレートを使ってプロジェクトを用意すると、そこには、MainMenu.nibというnibファイルがあるのでそこに設定を追加しよう。MainMenu.nibをダブルクリックして開き、そこにあるWindowにテーブルを配置したとする。テーブルを配置するには、ツールパレットの左から5番目のアイコンを選択して、パレットのタイトルを「Cocoa-Data」としておく、そして、そこに表示される左下のものがテーブルのコンポーネントである。

◇テーブルのコンポーネントと、配置したテーブル
 

テーブルを配置した後には、「Cupertino」などのデータが表示されるが、これはレイアウトの参考のためだけのもので、実際にこのデータが表示されるわけではない。
このNSTableViewのコンポーネントは、少し複雑な構成になっている。単に1つのオブジェクトではなく、まず、NSScrollViewというスクロールを行うコンポーネントがまずあって、その中にNSTableViewが含まれている。だから、単に配置したコンポーネントを選択すると、それは、NSScrollViewである。ダブルクリックすると、NSTableViewが選択されるのが基本である。Infoパレットのタイトルに、選択されているオブジェクトのクラス名がでてくるので、をよく見ながら作業をするというのがコツだ。ここでは、AppleScriptのNameとして、NSScrollViewにはscView1、NSTableViewには、table1という名前を付けてある。
それから、列の見出しであるが、プログラムで設定等もできるが、固定的なものだと、最初からつけておくのが一般的だろう。そのとき、コントロールをダブルクリックして、NSTableViewの方を選択し、さらに、列をクリックすると、Infoパレットには、NSTableColumnというクラス名がでてくる。つまり、テーブルの中の1つ1つの列が実はさらに別のオブジェクトとして管理されているのである。そして、列見出しの部分をダブルクリックすると、列見出しをキー入力できるようになるので、そこで任意にキータイプすれば良い。
次に、データソースを用意しよう。ツールパレットの左から8番目にAppleScriptのロゴのアイコンがあり、これをクリックすると、青い立方体のアイコンだけがツールパレットにでてくる。これを単にMainMenu.nibのウインドウの中にドラッグして、オブジェクトを追加する。ASKDataSourceという名前になっているが、名前を変えたりはできないので、とにかくここに作っておくのである。ちなみに、アプリケーションを起動すると、MainMenu.nibファイルがロードされるnibファイルであると設定されている。したがって、MainMenu.nibに設定されているオブジェクトのインスタンス化が自動的に行われるので、ここに作ったASKDataSourceはオブジェクトとして存在するのである。

◇データソースのオブジェクトを追加する
 

こうしてデータソースが確保されるのであるが、テーブルがそのデータソースを使うという設定を、Interface Builder上で行っておく必要がある。テーブルをダブルクリックして、NSTableViewが選択された状態で、テーブルの中のどこからでもいいので、controlキーを押しながらドラッグし、ASKDataSourceのところまでドラッグ&ドロップを行う。

◇NSTableViewとASKDataSouceを結ぶ
 

すると、Infoパレットに、NSTableViewのConnectionsの設定が表示される。ここで、dataSourceというアウトレットが選択されていることを確認して、Connectionボタンをクリックする。(WebObjectsがインストールされているのなら、左上にあるポップアップメニューで、Outletsを選択する。)

◇dataSourceとASKDataSourceを接続する
 

これで、NSTableViewはデータソースを持つことができるようになった。
(この項、続く)
関連リンク