2011年5月7日土曜日

Cocoa FileManager Cellの選択

本日は「クリックしたファイル名が反転表示される」ところまで。


ファイル名その他はNSCellのサブクラスを使って描画している。そりゃNSViewを使えばマウスのイベント処理とか楽なんだけど、おそらく表示する数が多くなると処理が重く、メモリも食うと思われ・・・って試したことないな。今度試すか。(^^;)Tabん時も同じ展開だった気がする。

とりあえず現在はCell。マウスイベントの処理もできるようなんだけど、Cellを乗っけているViewでのmouseDownでもけっこう簡単に処理できるのでそっちからやってみる。

-(void)mouseDown:(NSEvent *)theEvent{
    NSRect rect=[self bounds];
    NSPoint point = [self convertPointFromBase:[theEvent locationInWindow]];
   
    
    NSInteger cellRow,cellCollunm;
    cellRow=(rect.size.height-point.y)/maxCellSize.height;
    cellCollunm=point.x/maxCellSize.width;
   
    NSInteger max=(rect.size.height/maxCellSize.height);
 
    NSInteger index=cellRow+cellCollunm*max;
    if(index< [contentFileArray count] && index!=activeCellIndex){
        FileCell*cell=[contentFileArray objectAtIndex:index];
        if(NSPointInRect(point, [cell cellFrameRect])){
            if(activeCellIndex>-1){
                cell=[contentFileArray objectAtIndex:activeCellIndex];
                cell.cellState=CELL_STATE_NORMAL;
            }
            cell=[contentFileArray objectAtIndex:index];
            cell.cellState=CELL_STATE_SELECTED;
            activeCellIndex=index;
            [self setNeedsDisplay:YES];
        }
    }    
}

マウスのポインタの位置からクリックされたCellを判別して、そのcellStateを変えてsetNeedDisplay、というごく簡単な流れ。

Cellは自分のstateによって背景色や文字色を変えているだけ。今の段階ではこれでいいだろう、と。選択された段階でもう1回クリックされたら、今度はファイル名変更、というのがOSXでの一般的な動作だから、それをやってみるか・・・。それともダブルクリックで実行、のほうが簡単かな。

このViewとCellはFileManagerの一番ユーザ側のUIになるから、できるようにしたいことややってみたいことがたくさんあって、ちょっとめまいがする気分。ひとつずつていねいに調べて実現していくしかないなあ。

0 件のコメント:

コメントを投稿