Cellの描画関係はいつぞやダウンロードした木下誠氏のNSOutlineViewのサンプルからいただいたもの。
#define ICON_SIZE_WIDTH 16 #define ICON_SIZE_HEIGHT 16 #define MARGIN_X 2 - (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView { DirectoryFile* entry = [self objectValue]; NSString* path; NSRect pathRect; NSImage* iconImage; NSSize iconSize; NSPoint iconPoint; // Draw Image iconImage = [entry icon]; iconSize = NSZeroSize; iconPoint.x = cellFrame.origin.x; iconPoint.y = cellFrame.origin.y; if(iconImage) { iconSize.width = ICON_SIZE_WIDTH; iconSize.height = ICON_SIZE_HEIGHT; iconPoint.x += MARGIN_X; if([controlView isFlipped]) { iconPoint.y += iconSize.height; } [iconImage setSize:iconSize]; [iconImage compositeToPoint:iconPoint operation:NSCompositeSourceOver]; } // Draw text path = [entry name]; pathRect.origin.x = cellFrame.origin.x + MARGIN_X; if(iconSize.width > 0) { pathRect.origin.x += iconSize.width + MARGIN_X; } pathRect.origin.y = cellFrame.origin.y; pathRect.size.width = cellFrame.size.width - (pathRect.origin.x - cellFrame.origin.x); pathRect.size.height = cellFrame.size.height; if(path) { [path drawAtPoint:pathRect.origin withAttributes:nil]; } }このメソッドをNSView側から呼び出せばCellがファイルのアイコンとファイル名を描画してくれる。
カスタムNSViewの描画関連。
} #define CONTENT_CELL_HEIGHT 24 #define CONTENT_CELL_WIDTH 200 #define CONTENT_CELL_LEFT_MARGINE 4 - (void)drawRect:(NSRect)dirtyRect { // Drawing code here. NSRect rect=[self bounds]; NSPoint point; NSSize size; point=NSMakePoint(CONTENT_CELL_LEFT_MARGINE, rect.size.height-CONTENT_CELL_HEIGHT); size=NSMakeSize(CONTENT_CELL_WIDTH, CONTENT_CELL_HEIGHT); for (NSInteger i=0; i<[contentFileArray count]; i++) { FileCell* cell=[contentFileArray objectAtIndex:i]; NSRect cellFrameRect=NSMakeRect(point.x, point.y,size.width,size.height); [cell drawWithFrame:cellFrameRect inView:self]; point.y-=CONTENT_CELL_HEIGHT; if (point.y<0) { point.y=rect.size.height-CONTENT_CELL_HEIGHT; point.x+=CONTENT_CELL_WIDTH+CONTENT_CELL_LEFT_MARGINE; } } }要は「yが0になったらxをCONTENT_CELL_WIDTH+CONTENT_CELL_LEFT_MARGINE分だけずらせ、という簡単なもの。まずはちゃんと描画することを確かめるためのコードなんでこの程度。 これがこうなる、と。
ふむふむ、これをこんどはFDcloneのような「1行・2行・3行・5行」切り替えの表示方式にしていく。
そのためにはファイルの属性を取得しなければ・・・。
0 件のコメント:
コメントを投稿