単語リストプログラム その6

さて、前回でファイルビューにパーツを配置したけど、今回は、それを outlet と結びつけたり、テーブルと Array Controller をバインドしたりする。

前回の最後で配置されたパーツは次の通り。

まず、outlet に table1、table2、previewCheck、previewText の4つを追加する。まあ、名前は何でもいいけど、このサンプルではそうするということ。

class AppController < OSX::NSObject

include OSX

ib_outlet :window, :tabView, :table1, :table2, :previewCheck, :previewText

end

これらを、パーツと結びつける。テーブルとテキストビューはちょっとわかりにくいので、今回はスクリーンショットをのせる。次回からは、これと同様に結びつけるだけなので、スクリーンショットはつけないつもり。

チェックボックス

左のテーブル

右のテーブル

Text View

あと、Table View は、delegate と dataSource を AppController に結びつける。

こんな感じになればいい。Table View は、どちらも同様に結びつける。

Table View

App Controller

次に、Array Controller を追加して、テーブルとバインドする。Library の Cocoa -> Objects & Controllers で Array Controller を選び、nib ファイルに2つ追加する。

名前は File Array 1 と File Array 2 としておく。

追加した Array Controller も outlet に fileAryCtl1、fileAryCtl2 として追加して、結びつけておく。

class AppController < OSX::NSObject

include OSX

ib_outlet :window, :tabView, :table1, :table2, :previewCheck, :previewText

ib_outlet :fileAryCtl1, :fileAryCtl2

end

Array Controller の設定は基本的に同じなので、File Array 1 の方だけここにのせる。

まず、File Array 1 を選んで Inspector の Attribute で、Avoid Empty Selection と Select Inserted Objects のチェックを外す。前者は外さないと常にどれかが選択された状態になり、後者はファイルを追加したときに追加したファイルが選択された状態になる。どちらもこのサンプルでは必要ないので外す。

そして、Object Controller の下の方の+ボタンをクリックして Key を追加していく。3つ追加して fileName、encoding、fullPath とする。別の名前でもいいが Key は小文字で始める。同様の設定を File Array 2 にもする。

次はバインディング。まず、File Name のコラムを選択する。

Inspector の Binding で、Value を開き、Bind to: に File Array 1 を選んでチェックを入れる。Controller Key は arrangedObjects になっていると思うがなっていなければそうする。Model Key Path には fileName を選ぶ。

Encoding のコラムの場合も選択してから、Inspector の Binding を設定する。

Encoding のコラムには Pop Up Button Cell が入っているので、Value ではなく、Selected Index を開いて Model Key Path には encoding を選ぶ。

同様のバインディングを File Array 2 と右側のテーブルでも行う。

あとは、3つのボタンのうち Delete だけは Array Controller の remove: を直接使うことにして、それと結びつける。File Array 2 の方も右側の Delete ボタンに同様に結びつける。

ついでに、テーブルで何も選択されていない場合は Delete をクリックできなくする方法があるのでそれを使う。

Delete ボタンを選んで、Bindings の Enabled を開き、Bind to: に対応する File Array を選んで、Controller Key に canRemove を設定する。これで、テーブルで何も選択されていない場合は Delete ボタンがグレーアウトしてクリックできなくなる。

ここまでの設定がうまくいったか確認したい場合は、スクリプトに awakeFromNib を定義して、そこで Array Controller に値を入れてみればいい。これで両方のテーブルにデータが表示されて、Delete ボタンをクリックすることでデータが削除できれば成功。

class AppController < OSX::NSObject

include OSX

ib_outlet :window, :tabView, :table1, :table2, :previewCheck, :previewText

ib_outlet :fileAryCtl1, :fileAryCtl2

def awakeFromNib

@fileAryCtl1.addObjects([{"fileName" => "test1","encoding" => 0},{"fileName" => "test2","encoding" => 1}])

@fileAryCtl2.addObjects([{"fileName" => "test3","encoding" => 2},{"fileName" => "test4","encoding" => 3}])

end

end

これで、とりあえずの設定は終わり。次回は、スクリプトを書いて、ファイルリストテーブルに選んだファイルを表示するところまで行けたらいいなぁ。

単語リストプログラム その7 - ファイルリストテーブルに選んだファイルを表示