2011年5月4日水曜日

Cocoa FileManager 右側のペイン 独自View

NSCellなどはそのままに、ViewだけNSMatrixからカスタムNSViewに変える。
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 件のコメント:

コメントを投稿