Save/Open パネルの Modal 処理

Save/Open パネルを表示して、ファイルを保存・読み込みする処理は、Document-based Application だと、組み込まれていてファイルを扱う処理を書けばすむが、そうでない場合は、パネルの表示あたりの処理が必要になる。

panel = NSSavePanel.new

もしくは

panel = NSOpenPanel.new

で、Panel オブジェクトを作る。

様々な設定に関しては、RubyCocoa と変わらないので、このページ(SavePanel)やこのページ(OpenPanel)を参照してください。

処理の部分は、RubyCocoa のメモを書いているときは、10.5 や 10.6 だったのでよかったが、10.7 からは、推奨される処理が変わったのでその辺りをメモしてみる。ただし、これが正しいかどうかはよくわかっていない。一応、動いている。

panel.beginSheetModalForWindow(window,completionHandler:Proc.new { |result|

if result == 1

ここに処理を書く。

end

})

このメソッドを使うと、window で指定したウィンドウから、Modal パネルとして Save/Open パネルが現れるので、その間は他の処理は受け付けない。Modal パネルにしたくない場合は、beginWithCompletionHandler: を使うと、Save/Open パネルが独立して開く。

保存や読み込みのファイル名を得るには、

NSSavePanel

filename = panel.filename

dir = panel.directory

fileURL = panel.URL

dirURL = pane.directoryURL

NSOpenPanel

filenames = panel.filenames

fileURLs = panel.URLs

などとするが、10.7 からは、URL で扱うことが推奨されている。