2011年6月7日火曜日

Cocoa NSTableView ドラッグアンドドロップ(3)

NSTableViewの、Drop受け入れ処理を少し書く。具体的には

-(NSDragOperation)tableView:(NSTableView*)aTableView validateDrop:(id)info proposedRow:(NSInteger)row proposedDropOperation:(NSTableViewDropOperation)dropOperation

ですな。
    DirectoryFile* item=[fileArray objectAtIndex:row];
    if([item isDirectory]) [aTableView setDropRow:row dropOperation:NSTableViewDropOn];
    else [aTableView setDropRow:row dropOperation:NSTableViewDropAbove];
    if ([info draggingSource] == tableView) {

        return NSDragOperationMove;
    }
    else{
         return NSDragOperationCopy;
    }
    
    return NSDragOperationEvery;

プロポーズされた行がディレクトリならNSTableViewDropOn、そうでないならNSTableViewDropAboveとしてやるだけで、

NSTableViewDropOn

NSTableViewDropAbove


ついでに同じディレクトリ内のDropならNSDragOperationMove、他のディレクトリならNSDragOperationCopyとしておくと、Copyの時はカーソルのわきに緑の「+」マークがつく。さすがにSimpleCapでもキャプチャできなかったけど。

ただ、コピーか移動かの選択はいちいちダイアログを出して確認する仕様にするつもりなので、見た目の派手さをとって全部NSDragOperationCopyにしておくという手もあるな。

いちいちダイアログ、というのは面倒なように見える。が、マウス派にとってにはけっこう重宝する手法で、移動は⌘キーだっけoptionキーだっけ、とキーボード上で指を彷徨わせる必要がなくなる。(^^;)

なによりも、とりあえずDropしてから移動かコピーを選ぶというのは安心感がある。何をかくそう、Windows上で長年愛用しているファイラ「まめFile」がこの仕様。このソフトのおかげでエクスプローラは全く使わなくて済んでいる。OSXではFinderがよくできているためか、手になじむFileManagerがなかなかみつからない。よさそうなのはたいていシェアウェアのようだし。

というわけで自分用FileManagerは当然「まめFie」の動作を一部まねしている。本当にまねしたいのはXFaceの「Thunar」なんだけど。

0 件のコメント:

コメントを投稿