ファイル名その他は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 件のコメント:
コメントを投稿