2011年6月15日水曜日

Cocoa ゴミ箱へのDrop

Dragされたファイルがゴミ箱にDropされたかどうかは、

-(void)draggedImage:(NSImage *)image endedAt:(NSPoint)screenPoint operation:(NSDragOperation)operation{

を書けばわかる、ということがわかった。本当はControllerに書きたいところだけどサブクラス化したNSTableViewに書かないといけない。プロトコルの関係で。

このメソッドの中で

-(void)draggedImage:(NSImage *)image endedAt:(NSPoint)screenPoint operation:(NSDragOperation)operation{
   if(operation==NSDragOperationDelete){
      //何らかの処理
   }

}

と書けばいい。ただしNSDragOperationしか渡ってこないので、
NSPasteboard* pboard=[NSPasteboard pasteboardWithName:NSDragPboard];
でPasteBoardを取得して、そこから得たURLを操作する必要がある。

ふー、っと。これでURLをrecycleURLs:で処理すれば無事ゴミ箱へのDropができるわけだが、今のところの問題点は2つ。

1,ゴミ箱に入れたファイルを戻せない。NSUndoManagerとやりとりする必要がある、のか?

2,ゴミ箱に入れたファイルは当然TableViewからも消えるようにしないといけない。いちいちNSURLをデータ用のArryaから検索するより、「ファイルシステムの変更を通知してもらう」形にしたほうが汎用性が高い。NSWorkspaceDidPerformFileOperationNotificationを使う、あるいはNSWorkSpace noteFileSystemChanged:を使うのか・・・

というわけで以降は明日。

0 件のコメント:

コメントを投稿