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 件のコメント:
コメントを投稿