D言語からObjective-CとCocoaAPIを使いたい

NSTableView 関連API を分けてみました。

サンプルコード

Powered by Prism

cocoa/tables.d

/** 
 *      cocoa.tables.d          version 0.0.3
 */  
module cocoa.tables;
import core.attribute : optional, selector;
import cocoa.window;
import cocoa.control;

extern (Objective-C)
extern class NSTableView : NSControl {
    override static NSTableView alloc() @selector("alloc");
    override NSTableView init() @selector("init");
    override NSTableView init(NSRect) @selector("initWithFrame:");
    NSTableViewDataSource dataSource() @selector("dataSource");
    void delegate_(NSTableViewDelegate) @selector("setDelegate:");
    void dataSource(NSTableViewDataSource) @selector("setDataSource:"); // 
    void dataSource(NSArray) @selector("setDataSource:"); // 
    bool staticContents() @selector("usesStaticContents");
    void staticContents(bool) @selector("setUsesStaticContents:");
    NSView viewId(NSUserInterfaceItemIdentifier, NSObject) 
        @selector("makeViewWithIdentifier:owner:");
    NSTextField makeViewWithIdTf(NSUserInterfaceItemIdentifier, NSObject) 
        @selector("makeViewWithIdentifier:owner:");   
    NSTableCellView viewIdTcv(NSUserInterfaceItemIdentifier, NSObject) 
        @selector("makeViewWithIdentifier:owner:");
    void addTableColumn(NSTableColumn) @selector("addTableColumn:");
    void addColumn(NSTableColumn) @selector("addTableColumn:");
    void removeTableColumn(NSTableColumn) @selector("removeTableColumn:");
    void moveColumn(NSInteger, NSInteger) @selector("moveColumn:toColumn:");
    NSInteger numOfColumns() @selector("numberOfColumns");
    NSInteger numOfRows() @selector("numberOfRows");
    // NSInteger numOfRows(NSTableView) @selector("numberOfRowsInTableView:");
    // // NSTableView tableView(NSTableView, NSTableColumn, NSInteger) 
    // //     @selector("tableView:objectValueForTableColumn:row:");
    void reloadData() @selector("reloadData");
    NSTableHeaderView headerView() @selector("headerView");
    void headerView(NSTableHeaderView) @selector("setHeaderView:");
    void beginUpdates() @selector("beginUpdates");
    void rowBgColors(bool) @selector("setUsesAlternatingRowBackgroundColors:");
}

alias NSUserInterfaceItemIdentifier = NSString;

extern (Objective-C)
interface NSTableViewDataSource {
   // Getting Values
    NSInteger numOfRows(NSTableView) @selector("numberOfRowsInTableView:");
    // NSObject tableViewO(NSTableView, NSTableColumn, NSInteger) 
    //     @selector("tableView:objectValueForTableColumn:row:");
    NSString tableViewS(NSTableView, NSTableColumn, NSInteger) 
        @selector("tableView:objectValueForTableColumn:row:");
   // Setting Values
    @optional void tableView(NSTableView, NSObject, NSTableColumn, NSInteger)
        @selector("tableView:setObjectValue:forTableColumn:raw:");
} 

extern (Objective-C)
interface NSTableViewDelegate {
    NSView tableView(NSTableView, NSTableColumn, NSInteger)
        @selector("tableView:viewForTableColumn:row:");
    @optional NSTableRowView tableView(NSTableView, NSInteger)
        @selector("tableView:rowViewForRow:");
}

enum NSTableViewStyle : NSInteger {
    Automatic, 
    FullWidth,
    Inset,
    SourceList,
    Plain
}

extern (Objective-C)
extern class NSTableColumn : NSObject {
    override static NSTableColumn alloc() @selector("alloc");
    override NSTableColumn init() @selector("init");
    NSTableColumn init(NSString) @selector("initWithIdentifier:");
    NSTableView tableView() @selector("tableView");
    void tableView(NSTableView) @selector("setTableView:");
    NSString title() @selector("title");
    void title(NSString) @selector("setTitle:");
    NSUserInterfaceItemIdentifier identifier() @selector("identifier");
    CGFloat width() @selector("width");
    void width(CGFloat) @selector("setWidth:"); // default 100.0
    CGFloat miniWidth() @selector("miniWidth");
    void miniWidth(CGFloat) @selector("setMiniWidth:"); // default 10.0
    CGFloat maxWidth() @selector("maxWidth");
    void maxWidth(CGFloat) @selector("setMaxWidth:"); // default MAXFLOAT
    NSTableColumnResizingOptions resizingMask() @selector("resizingMask");
    void resizingMask(ColumnResize) @selector("setResizingMask:");
    void resizeMask(ColumnResize) @selector("setResizingMask:");
    void sizeToFit() @selector("sizeToFit"); 
}

alias ColumnResize = NSTableColumnResizingOptions;

enum NSTableColumnResizingOptions : NSUInteger {
    No   = 0,
    Auto = 1 << 0,
    User = 1 << 1
}

extern (Objective-C)
extern class NSTableHeaderView : NSView {
    override static NSTableHeaderView alloc() @selector("alloc");
    override NSTableHeaderView init() @selector("init");
    NSTableView tableView() @selector("tableView");
    NSInteger draggedColumn() @selector("draggedColumn");
    CGFloat draggedDistance() @selector("draggedDistance");
    NSInteger resizedColumn() @selector("resizedColumn");
    NSInteger columnAtPoint(NSPoint) @selector("columnAtPoint:");
    NSRect headerRect(NSInteger) @selector("headerRectOfColumn:");
} 

extern (Objective-C)
extern class NSObjectController : NSController {
    override static NSObjectController alloc() @selector("alloc");
    override NSObjectController init() @selector("init");
}

extern (Objective-C)
extern class NSController : NSObject { 
    override static NSObjectController alloc() @selector("alloc");
    override NSObjectController init() @selector("init");
}

extern (Objective-C)
interface NSControlTextEditingDelegate {
    NSView tableView(NSTableView, NSTableColumn, NSInteger) 
        @selector("tableView:viewForTableColumn:row:");
    // NSTableRowView tableView(NSTableView, NSInteger)
    //     @selector("tableView:rowViewForRow:");
}

extern (Objective-C)
extern class NSCoder : NSObject {}

extern (Objective-C)
extern class NSTableCellView : NSView {
    override static NSTableCellView alloc() @selector("alloc");
    override NSTableCellView init() @selector("init");
    NSObject objectValue() @selector("objectValue");
    NSString strValue() @selector("objectValue");
    NSString str() @selector("objectValue");
    void strValue(NSString) @selector("setObjectValue:"); // auto binding
    NSTextField textField() @selector("textField");
    NSImageView imageView() @selector("imageView");
    // NSNumber objectValue() @selector("objectValue");
    // NSImage  objectValue() @selector("objectValue");
}
/*
    extern (Objective-C) 
    extern class NSTableRowView : NSView {

    }

    extern (Objective-C)
    extern class NSTableHeaderCell : NSTextFieldCell {
        void drawSort(NSRect, NSView, bool, NSInteger) 
            @selector("drawSortIndicatorWithFrame:inView:ascending:priority:");
        NSRect sort(NSRect) @selector("sortIndicatorRectForBounds:");
    }
*/
extern (Objective-C)
extern class NSTableRowView : NSView {
    bool emphasized() @selector("emphasized");
}

NSArray toArrayJson(string path) {
    NSData jStrData = NSData.data(path.toNs);
    NSArray jArray = NSJSONSerialization.toJsArray(
        jStrData, NSJSONReading.MutableContainers, null);
    return jArray;
}

NSDictionary toDicJson(string path) {
    NSData jStrData = NSData.data(path.toNs);
    NSDictionary jDic = NSJSONSerialization.toJsDic(
        jStrData, NSJSONReading.MutableContainers, null);
    return jDic;
}

extern (Objective-C)
extern class NSJSONSerialization : NSObject {
    // Creating JSON Object from JSON data
    static NSObject toJsObj(NSData, NSJSONReading, NSError) 
        @selector("JSONObjectWithData:options:error:");
    static NSDictionary toJsDic(NSData, NSJSONReading, NSError) 
        @selector("JSONObjectWithData:options:error:");
    static NSArray toJsArray(NSData, NSJSONReading, NSError) 
        @selector("JSONObjectWithData:options:error:");
    static NSObject toJsObj(NSInputStream, NSJSONReading, NSError)
        @selector("JSONObjectWithStream:options:error:");
    // Creating JSON data from JSON Object
    static NSData toJsData(NSObject, NSJSONWriting, NSError) 
        @selector("dataWithJSONObject:options:error:");
    static NSInteger writeJsObj(NSObject, NSOutputStream, NSJSONWriting, NSError)
        @selector("writeJSONObject:toStream:options:error:");
}

enum NSJSONReading : NSUInteger {  // NSJSONReadingOptions
    MutableContainers         = 1UL << 0,	// 返された配列・辞書が変更可能
    MutableLeaves             = 1UL << 1, // グラフ内のリーフ文字列が変更可能
    FragmentsAllowed          = 1UL << 2, // オブジェクトの許可
    JSON5Allowed              = 1UL << 3, // JSON5構文をサポート
    TopLevelDictionaryAssumed = 1UL << 4  // 辞書の想定を指定
}

enum NSJSONWriting : NSUInteger {  // NSJSONWritingOptions
    PrettyPrinted          = 1UL << 0, // 空白・インデントを使用
    SortedKeys             = 1UL << 1, // キーを辞書順に並べ替え
    FragmentsAllowed       = 1UL << 2, // 配列・辞書でないオブジェクトを許可
    WithoutEscapingSlashes = 1UL << 3  // スラッシュ文字の前にエスケープ文字を付けない
}

extern (Objective-C)
extern class NSData : NSObject {
    // Creating Data
    static NSData data() @selector("data");
    static NSData bytes(void*, NSUInteger) @selector("dataWithBytes:length:");
    static NSData noCopy(void*, NSUInteger) @selector("dataWithBytesNoCopy:length:");
    static NSData noCopy(void*, NSUInteger, bool) 
        @selector("dataWithBytesNoCopy:length:freeWhenDone:");
    static NSData data(NSData) @selector("dataWithData:");
    NSData init(void*, NSUInteger) @selector("initWithBytes:length:");
    NSData initNoCopy(void*, NSUInteger) @selector("initWithBytesNoCopy:length:");
    // NSData initNoCopy(void*, NSUInteger, void*) 
    // 	@selector("initWithBytesNoCopy:length:deallocator:");
    NSData init(NSData) @selector("initWithData:");
    // Reading Data from a File
    static NSData data(NSString path) @selector("dataWithContentsOfFile:");
    static NSData data(NSString, NSDataReading, NSError) 
        @selector("dataWithContentsOfFile:options:NSError:");
    static NSData data(NSURL url) @selector("dataWithContentsOfURL:");
    // Writing Data to File
    NSData writeFile(NSString path, bool) @selector("writeToFiel:atomically:");
    NSData writeFile(NSString, NSDataWriting, NSError) 
        @selector("writeToFile:options:error:");
}

enum NSDataReading : NSUInteger {  // NSDataReadingOptions
    MappedIfSafe    = 1UL << 0, // ファイルを仮想メモリにマップ
    Uncached        = 1UL << 1, // キャッシュに保存すべきでない
    MappedAlways    = 1UL << 3  // ファイルをマップする
}

enum NSDataWriting : NSUInteger {
    Atomic                 = 1UL << 0,		// 補助ファイル使用
    WithoutOverwriting     = 1UL << 1, 	// ファイルが存在する時はエラー
    FileProtectionNone     = 0x10000000,
    ProtectNone            = 0x10000000,   // 暗号化しない
    FileProtectionComplete = 0x20000000,
    ProtectComplete        = 0x20000000,	// ロックが解除されている間のみ
    FileProtectionCompleteUnlessOpen  = 0x30000000,
    ProtectUnlessOpen      = 0x30000000,	// ロック解除または開いているとき
    FileProtectionCompleteUntilFirstUserAuthentication  = 0x40000000,
    ProtectFirstUse        = 0x40000000,	// 最初に解除したとき
    FileProtectionMask     = 0xf0000000	// システムが使用
}

extern (Objective-C)
extern class NSInputStream : NSStream {}

extern (Objective-C)
extern class NSOutputStream : NSStream {}

extern (Objective-C)
extern class NSStream : NSObject {}
                

cocoa/control.d

cocoa/window.d