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

split View 関係 の API を分離してみました

サンプルコード

Powered by Prism

cocoa/split_views.d

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

extern (Objective-C)
extern class NSSplitView : NSView {
    override static NSSplitView alloc() @selector("alloc");
    override NSSplitView init() @selector("init");
    /* Customizing the Split View Behavior */
	NSSplitViewDelegate delegate_() @selector("delegate");
    /* Arranging Subviews */ 
    bool arrangesAllSubviews() @selector("arrangesAllSubviews");
    NSArray arrangedSubviews() @selector("arrangedSubviews");
    void addArrangedSubview(NSView) @selector("addArrangedSubview:");
    void insertArrangedSubview(NSView, NSInteger) 
        @selector("insertArrangedSubview:atIndex:");
    void removeArrangedSubview(NSView) @selector("removeArrangedSubview:");
    /* Managing Subviews */ 
    void adjustSubviews() @selector("adjustSubviews");
    bool isSubviewCollapsed(NSView) @selector("isSubviewCollapsed:");
    NSLayoutPriority holdingPriorityForSubviewAtIndex(NSInteger)
        @selector("holdingPriorityForSubviewAtIndex:");
    NSLayoutPriority holdPriority(NSInteger) 
		@selector("holdingPriorityForSubviewAtIndex:");
    void holdingPriority(NSLayoutPriority, NSInteger)
        @selector("setHoldingPriority:forSubviewAtIndex:");
    void holdPriority(NSLayoutPriority, NSInteger)
        @selector("setHoldingPriority:forSubviewAtIndex:");
    /* Managing Divider Orientation */ 
    bool vertical() @selector("isVertical"); // default = false
    void vertical(bool) @selector("setVertical:");
    /* Configuring and Drawing Dividers */ 
    NSSplitViewDividerStyle dividerStyle() @selector("dividerStyle");
    void dividerStyle(NSSplitViewDividerStyle) @selector("setDividerStyle:");
    NSColor dividerColor() @selector("dividerColor");
    void dividerColor(NSColor) @selector("setDividerColor:"); // subClass
    CGFloat dividerThickness() @selector("dividerThickness");
    //// void dividerThickness(CGFloat) @selector("setDividerThickness:"); // subClass
    void drawDividerInRect(NSRect) @selector("drawDividerInRect:");
    /* Saving Subview Positions */ 
    NSSplitViewAutosaveName autosaveName() @selector("autosaveName"); // System uses
    void autosaveName(NSSplitViewAutosaveName) @selector("setAutosaveName:");
    /* Constraining Split Position */ 
    CGFloat minPossiblePositionOfDividerAtIndex(NSInteger)
        @selector("minPossiblePositionOfDividerAtIndex:");
    CGFloat maxPossiblePositionOfDividerAtIndex(NSInteger)
        @selector("maxPossiblePositionOfDividerAtIndex:");
    void position(CGFloat, NSInteger) @selector("setPosition:ofDividerAtIndex:");
    /* Managing Notifications */ 
    NSNotificationName nsSplitViewWillResizeSubviewsNotification()
        @selector("NSSplitViewWillResizeSubviewNotification");
    NSNotificationName nsSplitViewDidResizeSubviewsNotification()
        @selector("NSSplitViewDidResizeSubviewsNotification");
}

// alias NSLayoutPriority = float;
alias SplitStyle = NSSplitViewDividerStyle;
enum NSSplitViewDividerStyle : NSInteger {
    Thick        = 1,
    Thin         = 2,
    PaneSplitter = 3
}
alias NSSplitViewAutosaveName = NSString;
alias NSNotificationName = NSString;

extern (Objective-C)
interface NSSplitViewDelegate {
    /* Managing Subviews */
    @optional void splitViewWillResizeSubviews(NSNotification) 
        @selector("splitViewWillResizeSubviews:");
    @optional void splitViewDidResizeSubViews(NSNotification) 
        @selector("splitViewDidResizeSubviews:");
    @optional bool splitView(NSSplitView, NSView)
        @selector("splitView:canCollapseSubview:");
    /* Configuring and Drawing View Dividers */
    @optional NSRect splitView(NSSplitView, NSRect, NSRect, NSInteger) 
        @selector("splitView:effectiveRect:forDrawnRect:ofDividerAtIndex:");
    @optional bool splitView(NSSplitView, NSInteger) 
        @selector("splitView:shouldHideDividerAtIndex:");
    @optional NSRect splitView(NSSplitView, NSInteger)
        @selector("splitView:additionalEffectiveRectOfDividerAtIndex:");
    /* Constraining Split Position */ 
    @optional CGFloat splitView(NSSplitView, CGFloat, NSInteger)
        @selector("splitView:constrainSplitPosition:ofSubviewAt:");
    /* Adjusting Subviews Manually */ 
    @optional CGFloat splitViewMin(NSSplitView, CGFloat, NSInteger)
        @selector("splitView:constrainMinCoordinate:ofSubviewAt:");
    @optional CGFloat splitViewMax(NSSplitView, CGFloat, NSInteger)
        @selector("splitView:constrainMaxCoordinate:ofSubviewAt:");  
    @optional void splitView(NSSplitView, NSSize)
        @selector("splitView:resizeSubviewsWithOldSize:");
    @optional bool splitView(NSSplitView, NSView)
        @selector("splitView:shouldAdjustSizeOfSubview:");
}

extern (Objective-C)
extern class NSSplitViewController : NSViewController {
    /* Configuring and Managing a Split View Controller */ 
    NSSplitView splitView() @selector("splitView");
    void splitView(NSSplitView) @selector("splitView:");
    NSSplitViewItem splitViewItemForViewController(NSViewController)
        @selector("splitViewItemForViewController:");
    NSArray splitViewItems() @selector("splitViewItems");
    /* Modifying a Split View Controller */ 
    void addSplitViewItem(NSSplitViewItem) @selector("addSplitViewItem:");
    void insertSplitViewItem(NSSplitViewItem, NSInteger)
        @selector("insertSplitViewItem:atIndex:");
    void removeSplitviewItem(NSSplitViewItem) @selector("removeSplitViewItem:");
    /* Managing Sidebars */
    CGFloat miniThicknessSidebars() @selector("minimumThicknessForInlineSidebars");
    void miniThicknessSidebars(CGFloat) @selector("setMinimumThicknessForInlineSidebars:");
    CGFloat nsSplitViewControllerAutomaticDimension()
        @selector("NSSplitViewControllerAutomaticDimension");
    void nsSplitViewControllerAutomaticDimension(CGFloat)
        @selector("setNSSplitViewControllerAutomaticDimension:");
    /* Managing Inspectors */
    /* Responding to View Events */
    override void viewDidLoad() @selector("viewDidLoad");
    /* Supporting Protocol Requirements */ 
}

extern (Objective-C)
extern class NSSplitViewItem : NSObject {
    /* Creating s Split View Item */
/+
    static sidebarWithViewController(NSViewController) 
            @selector("sidebarWithViewController:");
    static contentListWithViewController(NSViewController)
            @selector("contentListWithViewController:");
    static splitViewItemWithViewController(NSViewController)
            @selector("splitViewItemWithViewController:");
    static inspectorWithViewController(NSViewController)
            @selector("inspectorWithViewController:");
+/
    /* Managing the Item Thickness */
    CGFloat automaticMaximumThickness() @selector("automaticMaximumThickness");
    CGFloat perferredThicknessFraction() @selector("perferredThicknessFraction");
    CGFloat minimumThickness() @selector("minimumThickness");
    CGFloat nsSplitViewItemUnspecifiedDimension()
            @selector("NSSplitViewItemUnspecifiedDimension");
    /* Getting Auto LayoutBehaviors */ 
    NSLayoutPriority holdingPriority() @selector("holdingPriority");
    /* Getting the Item Behavior */
    NSSplitViewItemBehavior behavior() @selector("behavior");
    /* Collapsing and Expanding the Item */ 
    bool collapsed() @selector("isCollapsed");  // "collapsed" ??
    bool canCollapse() @selector("canCollapse");
    NSSplitViewItemCollapseBehavior collapseBehavior() @selector("collapseBehavior");
    bool sprintLoaded() @selector("isSpringLoaded"); // ??
    bool canCollapseFromWindowResize() @selector("canCollapseFromWindowResize");
    /* Customizing Appearance */  
    bool allowsFullHeightLayout() @selector("allowsFullHeightLayout");
    NSTitlebarSeparatorStyle titlebarSeparatorStyle() @selector("titlebarSeparatorStyole");
    /* Getting the View Controller */  
    NSViewController viewController() @selector("viewController");
}

enum NSLayoutPriority : float {
    Required                    = 1000,
    DefaultHigh                 =  750,
    DragThatCanResizeWindow     =  510,
    WindowSizeStayPut           =  500,
    DragThatCannotResizeWindow  =  490,
    DefaultLow                  =  250,
    FittingSizeCompression      =   50,
}

enum NSSplitViewItemBehavior : NSInteger {
    Default,
    Sidebar,
    contentList,
    Inspector,
}

enum NSSplitViewItemCollapseBehavior : NSInteger {
    Default,
    PreferResizingSplitViewWithFixedSiblings,
    ResizingSiblingsWithFixedSplitView,
    UseConstraints,
}

enum NSTitlebarSeparatorStyle : NSInteger {
    Automatic,
    Line,
    None,
    Shadow,
}