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