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 で扱うことが推奨されている。