view dstep/appkit/NSTableView.d @ 16:19885b43130e

Huge update, the bridge actually works now
author Jacob Carlborg <doob@me.com>
date Sun, 03 Jan 2010 22:06:11 +0100
parents
children b9de51448c6b
line wrap: on
line source

/**
 * Copyright: Copyright (c) 2009 Jacob Carlborg.
 * Authors: Jacob Carlborg
 * Version: Initial created: Sep 24, 2009 
 * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0)
 */
module dstep.appkit.NSTableView;

import dstep.appkit.AppKitDefines;
import dstep.appkit.NSCell;
import dstep.appkit.NSColor;
import dstep.appkit.NSControl;
import dstep.appkit.NSDragging;
import dstep.appkit.NSEvent;
import dstep.appkit.NSImage;
import dstep.appkit.NSTableColumn;
import dstep.appkit.NSTableHeaderView;
import dstep.appkit.NSText;
import dstep.appkit.NSUserInterfaceValidation;
import dstep.appkit.NSView;
import dstep.applicationservices.coregraphics.CGBase;
import dstep.foundation.NSArray;
import dstep.foundation.NSGeometry;
import dstep.foundation.NSIndexSet;
import dstep.foundation.NSNotification;
import dstep.foundation.NSObjCRuntime;
import dstep.foundation.NSRange;
import dstep.foundation.NSString;
import dstep.objc.bridge.Bridge;
import dstep.objc.objc;

import bindings = dstep.appkit.NSTableView_bindings;

typedef NSUInteger NSTableViewDropOperation;
typedef NSUInteger NSTableViewColumnAutoresizingStyle;
typedef NSInteger NSTableViewSelectionHighlightStyle;

private
{
	NSString NSTableViewSelectionDidChangeNotification_;
	NSString NSTableViewColumnDidMoveNotification_;
	NSString NSTableViewColumnDidResizeNotification_;
	NSString NSTableViewSelectionIsChangingNotification_;
}

NSString NSTableViewSelectionDidChangeNotification ()
{
	if (NSTableViewSelectionDidChangeNotification_)
		return NSTableViewSelectionDidChangeNotification_;

	return NSTableViewSelectionDidChangeNotification_ = new NSString(bindings.NSTableViewSelectionDidChangeNotification);
}

NSString NSTableViewColumnDidMoveNotification ()
{
	if (NSTableViewColumnDidMoveNotification_)
		return NSTableViewColumnDidMoveNotification_;

	return NSTableViewColumnDidMoveNotification_ = new NSString(bindings.NSTableViewColumnDidMoveNotification);
}

NSString NSTableViewColumnDidResizeNotification ()
{
	if (NSTableViewColumnDidResizeNotification_)
		return NSTableViewColumnDidResizeNotification_;

	return NSTableViewColumnDidResizeNotification_ = new NSString(bindings.NSTableViewColumnDidResizeNotification);
}

NSString NSTableViewSelectionIsChangingNotification ()
{
	if (NSTableViewSelectionIsChangingNotification_)
		return NSTableViewSelectionIsChangingNotification_;

	return NSTableViewSelectionIsChangingNotification_ = new NSString(bindings.NSTableViewSelectionIsChangingNotification);
}

enum : NSUInteger
{
	NSTableViewDropOn,
	NSTableViewDropAbove
}

enum : NSUInteger
{
	NSTableViewNoColumnAutoresizing = 0,
	NSTableViewUniformColumnAutoresizingStyle,
	NSTableViewSequentialColumnAutoresizingStyle,
	NSTableViewReverseSequentialColumnAutoresizingStyle,
	NSTableViewLastColumnOnlyAutoresizingStyle,
	NSTableViewFirstColumnOnlyAutoresizingStyle
}

enum
{
	NSTableViewGridNone = 0,
	NSTableViewSolidVerticalGridLineMask = 1 << 0,
	NSTableViewSolidHorizontalGridLineMask = 1 << 1
}

enum : NSInteger
{
	NSTableViewSelectionHighlightStyleRegular = 0,
	NSTableViewSelectionHighlightStyleSourceList = 1
}

struct _TvFlags
{
	uint refusesFirstResponder;
	uint movedPostingDisableCount;
	uint selectionPostingDisableCount;
	uint dataSourceSetObjectValue;
	uint oldAutoresizesAllColumnsToFit;
	uint delegateSelectionShouldChangeInTableView;
	uint delegateShouldSelectTableColumn;
	uint delegateShouldSelectRow;
	uint delegateShouldEditTableColumn;
	uint delegateWillDisplayCell;
	uint compareWidthWithSuperview;
	uint changingLayout;
	uint selectionType;
	uint allowsColumnSelection;
	uint allowsMultipleSelection;
	uint allowsEmptySelection;
	uint oldDrawsGridFlag;
	uint allowsColumnResizing;
	uint allowsColumnReordering;
}

class NSTableView : NSControl, INSUserInterfaceValidations
{
	mixin (ObjcWrap);

	void setDataSource (Object aSource)
	{
		return invokeObjcSelf!(void, "setDataSource:", Object)(aSource);
	}

	Object dataSource ()
	{
		return invokeObjcSelf!(Object, "dataSource");
	}

	void setDelegate (Object delegate_)
	{
		return invokeObjcSelf!(void, "setDelegate:", Object)(delegate_);
	}

	Object delegate_ ()
	{
		return invokeObjcSelf!(Object, "delegate");
	}

	void setHeaderView (NSTableHeaderView headerView)
	{
		return invokeObjcSelf!(void, "setHeaderView:", NSTableHeaderView)(headerView);
	}

	NSTableHeaderView headerView ()
	{
		return invokeObjcSelf!(NSTableHeaderView, "headerView");
	}

	void setCornerView (NSView cornerView)
	{
		return invokeObjcSelf!(void, "setCornerView:", NSView)(cornerView);
	}

	NSView cornerView ()
	{
		return invokeObjcSelf!(NSView, "cornerView");
	}

	void setAllowsColumnReordering (bool flag)
	{
		return invokeObjcSelf!(void, "setAllowsColumnReordering:", bool)(flag);
	}

	bool allowsColumnReordering ()
	{
		return invokeObjcSelf!(bool, "allowsColumnReordering");
	}

	void setAllowsColumnResizing (bool flag)
	{
		return invokeObjcSelf!(void, "setAllowsColumnResizing:", bool)(flag);
	}

	bool allowsColumnResizing ()
	{
		return invokeObjcSelf!(bool, "allowsColumnResizing");
	}

	void setColumnAutoresizingStyle (uint style)
	{
		return invokeObjcSelf!(void, "setColumnAutoresizingStyle:", uint)(style);
	}

	uint columnAutoresizingStyle ()
	{
		return invokeObjcSelf!(uint, "columnAutoresizingStyle");
	}

	void setGridStyleMask (NSUInteger gridType)
	{
		return invokeObjcSelf!(void, "setGridStyleMask:", NSUInteger)(gridType);
	}

	NSUInteger gridStyleMask ()
	{
		return invokeObjcSelf!(NSUInteger, "gridStyleMask");
	}

	void setIntercellSpacing (NSSize aSize)
	{
		return invokeObjcSelf!(void, "setIntercellSpacing:", NSSize)(aSize);
	}

	NSSize intercellSpacing ()
	{
		return invokeObjcSelf!(NSSize, "intercellSpacing");
	}

	void setUsesAlternatingRowBackgroundColors (bool useAlternatingRowColors)
	{
		return invokeObjcSelf!(void, "setUsesAlternatingRowBackgroundColors:", bool)(useAlternatingRowColors);
	}

	bool usesAlternatingRowBackgroundColors ()
	{
		return invokeObjcSelf!(bool, "usesAlternatingRowBackgroundColors");
	}

	void setBackgroundColor (NSColor color)
	{
		return invokeObjcSelf!(void, "setBackgroundColor:", NSColor)(color);
	}

	NSColor backgroundColor ()
	{
		return invokeObjcSelf!(NSColor, "backgroundColor");
	}

	void setGridColor (NSColor color)
	{
		return invokeObjcSelf!(void, "setGridColor:", NSColor)(color);
	}

	NSColor gridColor ()
	{
		return invokeObjcSelf!(NSColor, "gridColor");
	}

	void setRowHeight (CGFloat rowHeight)
	{
		return invokeObjcSelf!(void, "setRowHeight:", CGFloat)(rowHeight);
	}

	CGFloat rowHeight ()
	{
		return invokeObjcSelf!(CGFloat, "rowHeight");
	}

	void noteHeightOfRowsWithIndexesChanged (NSIndexSet indexSet)
	{
		return invokeObjcSelf!(void, "noteHeightOfRowsWithIndexesChanged:", NSIndexSet)(indexSet);
	}

	NSArray tableColumns ()
	{
		return invokeObjcSelf!(NSArray, "tableColumns");
	}

	NSInteger numberOfColumns ()
	{
		return invokeObjcSelf!(NSInteger, "numberOfColumns");
	}

	NSInteger numberOfRows ()
	{
		return invokeObjcSelf!(NSInteger, "numberOfRows");
	}

	void addTableColumn (NSTableColumn column)
	{
		return invokeObjcSelf!(void, "addTableColumn:", NSTableColumn)(column);
	}

	void removeTableColumn (NSTableColumn column)
	{
		return invokeObjcSelf!(void, "removeTableColumn:", NSTableColumn)(column);
	}

	NSInteger columnWithIdentifier (Object identifier)
	{
		return invokeObjcSelf!(NSInteger, "columnWithIdentifier:", Object)(identifier);
	}

	NSTableColumn tableColumnWithIdentifier (Object identifier)
	{
		return invokeObjcSelf!(NSTableColumn, "tableColumnWithIdentifier:", Object)(identifier);
	}

	void tile ()
	{
		return invokeObjcSelf!(void, "tile");
	}

	void sizeToFit ()
	{
		return invokeObjcSelf!(void, "sizeToFit");
	}

	void sizeLastColumnToFit ()
	{
		return invokeObjcSelf!(void, "sizeLastColumnToFit");
	}

	void scrollRowToVisible (NSInteger row)
	{
		return invokeObjcSelf!(void, "scrollRowToVisible:", NSInteger)(row);
	}

	void scrollColumnToVisible (NSInteger column)
	{
		return invokeObjcSelf!(void, "scrollColumnToVisible:", NSInteger)(column);
	}

	void moveColumn (NSInteger column, NSInteger newIndex)
	{
		return invokeObjcSelf!(void, "moveColumn:toColumn:", NSInteger, NSInteger)(column, newIndex);
	}

	void reloadData ()
	{
		return invokeObjcSelf!(void, "reloadData");
	}

	void noteNumberOfRowsChanged ()
	{
		return invokeObjcSelf!(void, "noteNumberOfRowsChanged");
	}

	NSInteger editedColumn ()
	{
		return invokeObjcSelf!(NSInteger, "editedColumn");
	}

	NSInteger editedRow ()
	{
		return invokeObjcSelf!(NSInteger, "editedRow");
	}

	NSInteger clickedColumn ()
	{
		return invokeObjcSelf!(NSInteger, "clickedColumn");
	}

	NSInteger clickedRow ()
	{
		return invokeObjcSelf!(NSInteger, "clickedRow");
	}

	void setDoubleAction (SEL aSelector)
	{
		return invokeObjcSelf!(void, "setDoubleAction:", SEL)(aSelector);
	}

	SEL doubleAction ()
	{
		return invokeObjcSelf!(SEL, "doubleAction");
	}

	void setSortDescriptors (NSArray array)
	{
		return invokeObjcSelf!(void, "setSortDescriptors:", NSArray)(array);
	}

	NSArray sortDescriptors ()
	{
		return invokeObjcSelf!(NSArray, "sortDescriptors");
	}

	void setIndicatorImage (NSImage anImage, NSTableColumn tc)
	{
		return invokeObjcSelf!(void, "setIndicatorImage:inTableColumn:", NSImage, NSTableColumn)(anImage, tc);
	}

	NSImage indicatorImageInTableColumn (NSTableColumn tc)
	{
		return invokeObjcSelf!(NSImage, "indicatorImageInTableColumn:", NSTableColumn)(tc);
	}

	void setHighlightedTableColumn (NSTableColumn tc)
	{
		return invokeObjcSelf!(void, "setHighlightedTableColumn:", NSTableColumn)(tc);
	}

	NSTableColumn highlightedTableColumn ()
	{
		return invokeObjcSelf!(NSTableColumn, "highlightedTableColumn");
	}

	void setVerticalMotionCanBeginDrag (bool flag)
	{
		return invokeObjcSelf!(void, "setVerticalMotionCanBeginDrag:", bool)(flag);
	}

	bool verticalMotionCanBeginDrag ()
	{
		return invokeObjcSelf!(bool, "verticalMotionCanBeginDrag");
	}

	bool canDragRowsWithIndexes (NSIndexSet rowIndexes, NSPoint mouseDownPoint)
	{
		return invokeObjcSelf!(bool, "canDragRowsWithIndexes:atPoint:", NSIndexSet, NSPoint)(rowIndexes, mouseDownPoint);
	}

	NSImage dragImageForRowsWithIndexes (NSIndexSet dragRows, NSArray tableColumns, NSEvent dragEvent, NSPointPointer dragImageOffset)
	{
		return invokeObjcSelf!(NSImage, "dragImageForRowsWithIndexes:tableColumns:event:offset:", NSIndexSet, NSArray, NSEvent, NSPointPointer)(dragRows, tableColumns, dragEvent, dragImageOffset);
	}

	void setDraggingSourceOperationMask (uint mask, bool isLocal)
	{
		return invokeObjcSelf!(void, "setDraggingSourceOperationMask:forLocal:", uint, bool)(mask, isLocal);
	}

	void setDropRow (NSInteger row, uint op)
	{
		return invokeObjcSelf!(void, "setDropRow:dropOperation:", NSInteger, uint)(row, op);
	}

	void setAllowsMultipleSelection (bool flag)
	{
		return invokeObjcSelf!(void, "setAllowsMultipleSelection:", bool)(flag);
	}

	bool allowsMultipleSelection ()
	{
		return invokeObjcSelf!(bool, "allowsMultipleSelection");
	}

	void setAllowsEmptySelection (bool flag)
	{
		return invokeObjcSelf!(void, "setAllowsEmptySelection:", bool)(flag);
	}

	bool allowsEmptySelection ()
	{
		return invokeObjcSelf!(bool, "allowsEmptySelection");
	}

	void setAllowsColumnSelection (bool flag)
	{
		return invokeObjcSelf!(void, "setAllowsColumnSelection:", bool)(flag);
	}

	bool allowsColumnSelection ()
	{
		return invokeObjcSelf!(bool, "allowsColumnSelection");
	}

	void selectAll (Object sender)
	{
		return invokeObjcSelf!(void, "selectAll:", Object)(sender);
	}

	void deselectAll (Object sender)
	{
		return invokeObjcSelf!(void, "deselectAll:", Object)(sender);
	}

	void selectColumnIndexes (NSIndexSet indexes, bool extend)
	{
		return invokeObjcSelf!(void, "selectColumnIndexes:byExtendingSelection:", NSIndexSet, bool)(indexes, extend);
	}

	void selectRowIndexes (NSIndexSet indexes, bool extend)
	{
		return invokeObjcSelf!(void, "selectRowIndexes:byExtendingSelection:", NSIndexSet, bool)(indexes, extend);
	}

	NSIndexSet selectedColumnIndexes ()
	{
		return invokeObjcSelf!(NSIndexSet, "selectedColumnIndexes");
	}

	NSIndexSet selectedRowIndexes ()
	{
		return invokeObjcSelf!(NSIndexSet, "selectedRowIndexes");
	}

	void deselectColumn (NSInteger column)
	{
		return invokeObjcSelf!(void, "deselectColumn:", NSInteger)(column);
	}

	void deselectRow (NSInteger row)
	{
		return invokeObjcSelf!(void, "deselectRow:", NSInteger)(row);
	}

	NSInteger selectedColumn ()
	{
		return invokeObjcSelf!(NSInteger, "selectedColumn");
	}

	NSInteger selectedRow ()
	{
		return invokeObjcSelf!(NSInteger, "selectedRow");
	}

	bool isColumnSelected (NSInteger column)
	{
		return invokeObjcSelf!(bool, "isColumnSelected:", NSInteger)(column);
	}

	bool isRowSelected (NSInteger row)
	{
		return invokeObjcSelf!(bool, "isRowSelected:", NSInteger)(row);
	}

	NSInteger numberOfSelectedColumns ()
	{
		return invokeObjcSelf!(NSInteger, "numberOfSelectedColumns");
	}

	NSInteger numberOfSelectedRows ()
	{
		return invokeObjcSelf!(NSInteger, "numberOfSelectedRows");
	}

	bool allowsTypeSelect ()
	{
		return invokeObjcSelf!(bool, "allowsTypeSelect");
	}

	void setAllowsTypeSelect (bool value)
	{
		return invokeObjcSelf!(void, "setAllowsTypeSelect:", bool)(value);
	}

	int selectionHighlightStyle ()
	{
		return invokeObjcSelf!(int, "selectionHighlightStyle");
	}

	void setSelectionHighlightStyle (int selectionHighlightStyle)
	{
		return invokeObjcSelf!(void, "setSelectionHighlightStyle:", int)(selectionHighlightStyle);
	}

	NSRect rectOfColumn (NSInteger column)
	{
		return invokeObjcSelf!(NSRect, "rectOfColumn:", NSInteger)(column);
	}

	NSRect rectOfRow (NSInteger row)
	{
		return invokeObjcSelf!(NSRect, "rectOfRow:", NSInteger)(row);
	}

	NSIndexSet columnIndexesInRect (NSRect rect)
	{
		return invokeObjcSelf!(NSIndexSet, "columnIndexesInRect:", NSRect)(rect);
	}

	NSRange rowsInRect (NSRect rect)
	{
		return invokeObjcSelf!(NSRange, "rowsInRect:", NSRect)(rect);
	}

	NSInteger columnAtPoint (NSPoint point)
	{
		return invokeObjcSelf!(NSInteger, "columnAtPoint:", NSPoint)(point);
	}

	NSInteger rowAtPoint (NSPoint point)
	{
		return invokeObjcSelf!(NSInteger, "rowAtPoint:", NSPoint)(point);
	}

	NSRect frameOfCellAtColumn (NSInteger column, NSInteger row)
	{
		return invokeObjcSelf!(NSRect, "frameOfCellAtColumn:row:", NSInteger, NSInteger)(column, row);
	}

	NSCell preparedCellAtColumn (NSInteger column, NSInteger row)
	{
		return invokeObjcSelf!(NSCell, "preparedCellAtColumn:row:", NSInteger, NSInteger)(column, row);
	}

	bool textShouldBeginEditing (NSText textObject)
	{
		return invokeObjcSelf!(bool, "textShouldBeginEditing:", NSText)(textObject);
	}

	bool textShouldEndEditing (NSText textObject)
	{
		return invokeObjcSelf!(bool, "textShouldEndEditing:", NSText)(textObject);
	}

	void textDidBeginEditing (NSNotification notification)
	{
		return invokeObjcSelf!(void, "textDidBeginEditing:", NSNotification)(notification);
	}

	void textDidEndEditing (NSNotification notification)
	{
		return invokeObjcSelf!(void, "textDidEndEditing:", NSNotification)(notification);
	}

	void textDidChange (NSNotification notification)
	{
		return invokeObjcSelf!(void, "textDidChange:", NSNotification)(notification);
	}

	void setAutosaveName (NSString name)
	{
		return invokeObjcSelf!(void, "setAutosaveName:", NSString)(name);
	}

	NSString autosaveName ()
	{
		return invokeObjcSelf!(NSString, "autosaveName");
	}

	void setAutosaveTableColumns (bool save)
	{
		return invokeObjcSelf!(void, "setAutosaveTableColumns:", bool)(save);
	}

	bool autosaveTableColumns ()
	{
		return invokeObjcSelf!(bool, "autosaveTableColumns");
	}

	void editColumn (NSInteger column, NSInteger row, NSEvent theEvent, bool select)
	{
		return invokeObjcSelf!(void, "editColumn:row:withEvent:select:", NSInteger, NSInteger, NSEvent, bool)(column, row, theEvent, select);
	}

	void drawRow (NSInteger row, NSRect clipRect)
	{
		return invokeObjcSelf!(void, "drawRow:clipRect:", NSInteger, NSRect)(row, clipRect);
	}

	void highlightSelectionInClipRect (NSRect clipRect)
	{
		return invokeObjcSelf!(void, "highlightSelectionInClipRect:", NSRect)(clipRect);
	}

	void drawGridInClipRect (NSRect clipRect)
	{
		return invokeObjcSelf!(void, "drawGridInClipRect:", NSRect)(clipRect);
	}

	void drawBackgroundInClipRect (NSRect clipRect)
	{
		return invokeObjcSelf!(void, "drawBackgroundInClipRect:", NSRect)(clipRect);
	}

	bool validateUserInterfaceItem (INSValidatedUserInterfaceItem anItem)
	{
		return invokeObjcSelf!(bool, "validateUserInterfaceItem:", INSValidatedUserInterfaceItem)(anItem);
	}
}

const TNSTableViewNotifications = `

	void tableViewSelectionDidChange (NSNotification notification)
	{
		return invokeObjcSelf!(void, "tableViewSelectionDidChange:", NSNotification)(notification);
	}

	void tableViewColumnDidMove (NSNotification notification)
	{
		return invokeObjcSelf!(void, "tableViewColumnDidMove:", NSNotification)(notification);
	}

	void tableViewColumnDidResize (NSNotification notification)
	{
		return invokeObjcSelf!(void, "tableViewColumnDidResize:", NSNotification)(notification);
	}

	void tableViewSelectionIsChanging (NSNotification notification)
	{
		return invokeObjcSelf!(void, "tableViewSelectionIsChanging:", NSNotification)(notification);
	}

	//mixin ObjcBindMethod!(tableViewSelectionDidChange, "tableViewSelectionDidChange:");
	//mixin ObjcBindMethod!(tableViewColumnDidMove, "tableViewColumnDidMove:");
	//mixin ObjcBindMethod!(tableViewColumnDidResize, "tableViewColumnDidResize:");
	//mixin ObjcBindMethod!(tableViewSelectionIsChanging, "tableViewSelectionIsChanging:");

`;

const TNSTableDataSource = `

	NSInteger numberOfRowsInTableView (NSTableView tableView)
	{
		return invokeObjcSelf!(NSInteger, "numberOfRowsInTableView:", NSTableView)(tableView);
	}

	Object tableView (NSTableView tableView, NSTableColumn tableColumn, NSInteger row)
	{
		return invokeObjcSelf!(Object, "tableView:objectValueForTableColumn:row:", NSTableView, NSTableColumn, NSInteger)(tableView, tableColumn, row);
	}

	void tableView (NSTableView tableView, Object object, NSTableColumn tableColumn, NSInteger row)
	{
		return invokeObjcSelf!(void, "tableView:setObjectValue:forTableColumn:row:", NSTableView, Object, NSTableColumn, NSInteger)(tableView, object, tableColumn, row);
	}

	void tableView (NSTableView tableView, NSArray oldDescriptors)
	{
		return invokeObjcSelf!(void, "tableView:sortDescriptorsDidChange:", NSTableView, NSArray)(tableView, oldDescriptors);
	}

	bool tableView (NSTableView tableView, NSIndexSet rowIndexes, NSPasteboard pboard)
	{
		return invokeObjcSelf!(bool, "tableView:writeRowsWithIndexes:toPasteboard:", NSTableView, NSIndexSet, NSPasteboard)(tableView, rowIndexes, pboard);
	}

	uint tableView (NSTableView tableView, INSDraggingInfo info, NSInteger row, uint dropOperation)
	{
		return invokeObjcSelf!(uint, "tableView:validateDrop:proposedRow:proposedDropOperation:", NSTableView, INSDraggingInfo, NSInteger, uint)(tableView, info, row, dropOperation);
	}

	bool tableView (NSTableView tableView, INSDraggingInfo info, NSInteger row, uint dropOperation)
	{
		return invokeObjcSelf!(bool, "tableView:acceptDrop:row:dropOperation:", NSTableView, INSDraggingInfo, NSInteger, uint)(tableView, info, row, dropOperation);
	}

	NSArray tableView (NSTableView tableView, NSURL dropDestination, NSIndexSet indexSet)
	{
		return invokeObjcSelf!(NSArray, "tableView:namesOfPromisedFilesDroppedAtDestination:forDraggedRowsWithIndexes:", NSTableView, NSURL, NSIndexSet)(tableView, dropDestination, indexSet);
	}

	bool tableView (NSTableView tableView, NSArray rows, NSPasteboard pboard)
	{
		return invokeObjcSelf!(bool, "tableView:writeRows:toPasteboard:", NSTableView, NSArray, NSPasteboard)(tableView, rows, pboard);
	}

	//mixin ObjcBindMethod!(numberOfRowsInTableView, "numberOfRowsInTableView:");
	//mixin ObjcBindMethod!(tableView, "tableView:objectValueForTableColumn:row:");
	//mixin ObjcBindMethod!(tableView, "tableView:setObjectValue:forTableColumn:row:");
	//mixin ObjcBindMethod!(tableView, "tableView:sortDescriptorsDidChange:");
	//mixin ObjcBindMethod!(tableView, "tableView:writeRowsWithIndexes:toPasteboard:");
	//mixin ObjcBindMethod!(tableView, "tableView:validateDrop:proposedRow:proposedDropOperation:");
	//mixin ObjcBindMethod!(tableView, "tableView:acceptDrop:row:dropOperation:");
	//mixin ObjcBindMethod!(tableView, "tableView:namesOfPromisedFilesDroppedAtDestination:forDraggedRowsWithIndexes:");
	//mixin ObjcBindMethod!(tableView, "tableView:writeRows:toPasteboard:");

`;

const TNSTableViewDelegate = `

	void tableView (NSTableView tableView, Object cell, NSTableColumn tableColumn, NSInteger row)
	{
		return invokeObjcSelf!(void, "tableView:willDisplayCell:forTableColumn:row:", NSTableView, Object, NSTableColumn, NSInteger)(tableView, cell, tableColumn, row);
	}

	bool tableView (NSTableView tableView, NSTableColumn tableColumn, NSInteger row)
	{
		return invokeObjcSelf!(bool, "tableView:shouldEditTableColumn:row:", NSTableView, NSTableColumn, NSInteger)(tableView, tableColumn, row);
	}

	bool selectionShouldChangeInTableView (NSTableView tableView)
	{
		return invokeObjcSelf!(bool, "selectionShouldChangeInTableView:", NSTableView)(tableView);
	}

	bool tableView (NSTableView tableView, NSInteger row)
	{
		return invokeObjcSelf!(bool, "tableView:shouldSelectRow:", NSTableView, NSInteger)(tableView, row);
	}

	NSIndexSet tableView (NSTableView tableView, NSIndexSet proposedSelectionIndexes)
	{
		return invokeObjcSelf!(NSIndexSet, "tableView:selectionIndexesForProposedSelection:", NSTableView, NSIndexSet)(tableView, proposedSelectionIndexes);
	}

	bool tableView (NSTableView tableView, NSTableColumn tableColumn)
	{
		return invokeObjcSelf!(bool, "tableView:shouldSelectTableColumn:", NSTableView, NSTableColumn)(tableView, tableColumn);
	}

	void tableView (NSTableView tableView, NSTableColumn tableColumn)
	{
		return invokeObjcSelf!(void, "tableView:mouseDownInHeaderOfTableColumn:", NSTableView, NSTableColumn)(tableView, tableColumn);
	}

	void tableView (NSTableView tableView, NSTableColumn tableColumn)
	{
		return invokeObjcSelf!(void, "tableView:didClickTableColumn:", NSTableView, NSTableColumn)(tableView, tableColumn);
	}

	void tableView (NSTableView tableView, NSTableColumn tableColumn)
	{
		return invokeObjcSelf!(void, "tableView:didDragTableColumn:", NSTableView, NSTableColumn)(tableView, tableColumn);
	}

	NSString tableView (NSTableView tableView, NSCell cell, NSRectPointer rect, NSTableColumn tableColumn, NSInteger row, NSPoint mouseLocation)
	{
		return invokeObjcSelf!(NSString, "tableView:toolTipForCell:rect:tableColumn:row:mouseLocation:", NSTableView, NSCell, NSRectPointer, NSTableColumn, NSInteger, NSPoint)(tableView, cell, rect, tableColumn, row, mouseLocation);
	}

	CGFloat tableView (NSTableView tableView, NSInteger row)
	{
		return invokeObjcSelf!(CGFloat, "tableView:heightOfRow:", NSTableView, NSInteger)(tableView, row);
	}

	NSString tableView (NSTableView tableView, NSTableColumn tableColumn, NSInteger row)
	{
		return invokeObjcSelf!(NSString, "tableView:typeSelectStringForTableColumn:row:", NSTableView, NSTableColumn, NSInteger)(tableView, tableColumn, row);
	}

	NSInteger tableView (NSTableView tableView, NSInteger startRow, NSInteger endRow, NSString searchString)
	{
		return invokeObjcSelf!(NSInteger, "tableView:nextTypeSelectMatchFromRow:toRow:forString:", NSTableView, NSInteger, NSInteger, NSString)(tableView, startRow, endRow, searchString);
	}

	bool tableView (NSTableView tableView, NSEvent event, NSString searchString)
	{
		return invokeObjcSelf!(bool, "tableView:shouldTypeSelectForEvent:withCurrentSearchString:", NSTableView, NSEvent, NSString)(tableView, event, searchString);
	}

	bool tableView (NSTableView tableView, NSTableColumn tableColumn, NSInteger row)
	{
		return invokeObjcSelf!(bool, "tableView:shouldShowCellExpansionForTableColumn:row:", NSTableView, NSTableColumn, NSInteger)(tableView, tableColumn, row);
	}

	bool tableView (NSTableView tableView, NSCell cell, NSTableColumn tableColumn, NSInteger row)
	{
		return invokeObjcSelf!(bool, "tableView:shouldTrackCell:forTableColumn:row:", NSTableView, NSCell, NSTableColumn, NSInteger)(tableView, cell, tableColumn, row);
	}

	NSCell tableView (NSTableView tableView, NSTableColumn tableColumn, NSInteger row)
	{
		return invokeObjcSelf!(NSCell, "tableView:dataCellForTableColumn:row:", NSTableView, NSTableColumn, NSInteger)(tableView, tableColumn, row);
	}

	bool tableView (NSTableView tableView, NSInteger row)
	{
		return invokeObjcSelf!(bool, "tableView:isGroupRow:", NSTableView, NSInteger)(tableView, row);
	}

	//mixin ObjcBindMethod!(tableView, "tableView:willDisplayCell:forTableColumn:row:");
	//mixin ObjcBindMethod!(tableView, "tableView:shouldEditTableColumn:row:");
	//mixin ObjcBindMethod!(selectionShouldChangeInTableView, "selectionShouldChangeInTableView:");
	//mixin ObjcBindMethod!(tableView, "tableView:shouldSelectRow:");
	//mixin ObjcBindMethod!(tableView, "tableView:selectionIndexesForProposedSelection:");
	//mixin ObjcBindMethod!(tableView, "tableView:shouldSelectTableColumn:");
	//mixin ObjcBindMethod!(tableView, "tableView:mouseDownInHeaderOfTableColumn:");
	//mixin ObjcBindMethod!(tableView, "tableView:didClickTableColumn:");
	//mixin ObjcBindMethod!(tableView, "tableView:didDragTableColumn:");
	//mixin ObjcBindMethod!(tableView, "tableView:toolTipForCell:rect:tableColumn:row:mouseLocation:");
	//mixin ObjcBindMethod!(tableView, "tableView:heightOfRow:");
	//mixin ObjcBindMethod!(tableView, "tableView:typeSelectStringForTableColumn:row:");
	//mixin ObjcBindMethod!(tableView, "tableView:nextTypeSelectMatchFromRow:toRow:forString:");
	//mixin ObjcBindMethod!(tableView, "tableView:shouldTypeSelectForEvent:withCurrentSearchString:");
	//mixin ObjcBindMethod!(tableView, "tableView:shouldShowCellExpansionForTableColumn:row:");
	//mixin ObjcBindMethod!(tableView, "tableView:shouldTrackCell:forTableColumn:row:");
	//mixin ObjcBindMethod!(tableView, "tableView:dataCellForTableColumn:row:");
	//mixin ObjcBindMethod!(tableView, "tableView:isGroupRow:");

`;