view dstep/appkit/NSOutlineView.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.NSOutlineView;

import dstep.appkit.AppKitDefines;
import dstep.appkit.NSButtonCell;
import dstep.appkit.NSTableColumn;
import dstep.appkit.NSTableHeaderView;
import dstep.appkit.NSTableView;
import dstep.applicationservices.coregraphics.CGBase;
import dstep.corefoundation.CFDictionary;
import dstep.foundation.NSGeometry;
import dstep.foundation.NSObjCRuntime;
import dstep.foundation.NSString;
import dstep.objc.bridge.Bridge;
import dstep.objc.objc;

import bindings = dstep.appkit.NSOutlineView_bindings;

private
{
	NSString NSOutlineViewSelectionDidChangeNotification_;
	NSString NSOutlineViewColumnDidMoveNotification_;
	NSString NSOutlineViewColumnDidResizeNotification_;
	NSString NSOutlineViewSelectionIsChangingNotification_;
	NSString NSOutlineViewItemWillExpandNotification_;
	NSString NSOutlineViewItemDidExpandNotification_;
	NSString NSOutlineViewItemWillCollapseNotification_;
	NSString NSOutlineViewItemDidCollapseNotification_;
}

NSString NSOutlineViewSelectionDidChangeNotification ()
{
	if (NSOutlineViewSelectionDidChangeNotification_)
		return NSOutlineViewSelectionDidChangeNotification_;

	return NSOutlineViewSelectionDidChangeNotification_ = new NSString(bindings.NSOutlineViewSelectionDidChangeNotification);
}

NSString NSOutlineViewColumnDidMoveNotification ()
{
	if (NSOutlineViewColumnDidMoveNotification_)
		return NSOutlineViewColumnDidMoveNotification_;

	return NSOutlineViewColumnDidMoveNotification_ = new NSString(bindings.NSOutlineViewColumnDidMoveNotification);
}

NSString NSOutlineViewColumnDidResizeNotification ()
{
	if (NSOutlineViewColumnDidResizeNotification_)
		return NSOutlineViewColumnDidResizeNotification_;

	return NSOutlineViewColumnDidResizeNotification_ = new NSString(bindings.NSOutlineViewColumnDidResizeNotification);
}

NSString NSOutlineViewSelectionIsChangingNotification ()
{
	if (NSOutlineViewSelectionIsChangingNotification_)
		return NSOutlineViewSelectionIsChangingNotification_;

	return NSOutlineViewSelectionIsChangingNotification_ = new NSString(bindings.NSOutlineViewSelectionIsChangingNotification);
}

NSString NSOutlineViewItemWillExpandNotification ()
{
	if (NSOutlineViewItemWillExpandNotification_)
		return NSOutlineViewItemWillExpandNotification_;

	return NSOutlineViewItemWillExpandNotification_ = new NSString(bindings.NSOutlineViewItemWillExpandNotification);
}

NSString NSOutlineViewItemDidExpandNotification ()
{
	if (NSOutlineViewItemDidExpandNotification_)
		return NSOutlineViewItemDidExpandNotification_;

	return NSOutlineViewItemDidExpandNotification_ = new NSString(bindings.NSOutlineViewItemDidExpandNotification);
}

NSString NSOutlineViewItemWillCollapseNotification ()
{
	if (NSOutlineViewItemWillCollapseNotification_)
		return NSOutlineViewItemWillCollapseNotification_;

	return NSOutlineViewItemWillCollapseNotification_ = new NSString(bindings.NSOutlineViewItemWillCollapseNotification);
}

NSString NSOutlineViewItemDidCollapseNotification ()
{
	if (NSOutlineViewItemDidCollapseNotification_)
		return NSOutlineViewItemDidCollapseNotification_;

	return NSOutlineViewItemDidCollapseNotification_ = new NSString(bindings.NSOutlineViewItemDidCollapseNotification);
}

enum
{
	NSOutlineViewDropOnItemIndex = -1
}

struct _OVFlags
{
	uint _reserved;
	uint reloadingData;
	uint validDataSourceMethods;
	uint numberOfRowsDataExpandEntered;
	uint delayRowEntryFreeDisabled;
	uint delegateHeightOfRowByItem;
	uint compatCollapseForceClearsExpandState;
	uint autoExpandFlashState;
	uint selectionAdjustmentDisabled;
	uint removeChildInProgress;
	uint delegateWillDisplayOutlineCell;
	uint enableExpandNotifications;
	uint autoSaveExpandItems;
	uint autoresizesOutlineColumn;
	uint delegateShouldExpandItem;
	uint delegateShouldCollapseItem;
	uint delegateSelectionShouldChangeInOutlineView;
	uint delegateShouldSelectTableColumn;
	uint delegateShouldSelectItem;
	uint delegateShouldEditTableColumn;
	uint delegateWillDisplayCell;
}

class NSOutlineView : NSTableView
{
	mixin (ObjcWrap);

	void setOutlineTableColumn (NSTableColumn outlineTableColumn)
	{
		return invokeObjcSelf!(void, "setOutlineTableColumn:", NSTableColumn)(outlineTableColumn);
	}

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

	bool isExpandable (Object item)
	{
		return invokeObjcSelf!(bool, "isExpandable:", Object)(item);
	}

	void expandItem (Object item, bool expandChildren)
	{
		return invokeObjcSelf!(void, "expandItem:expandChildren:", Object, bool)(item, expandChildren);
	}

	void expandItem (Object item)
	{
		return invokeObjcSelf!(void, "expandItem:", Object)(item);
	}

	void collapseItem (Object item, bool collapseChildren)
	{
		return invokeObjcSelf!(void, "collapseItem:collapseChildren:", Object, bool)(item, collapseChildren);
	}

	void collapseItem (Object item)
	{
		return invokeObjcSelf!(void, "collapseItem:", Object)(item);
	}

	void reloadItem (Object item, bool reloadChildren)
	{
		return invokeObjcSelf!(void, "reloadItem:reloadChildren:", Object, bool)(item, reloadChildren);
	}

	void reloadItem (Object item)
	{
		return invokeObjcSelf!(void, "reloadItem:", Object)(item);
	}

	Object parentForItem (Object item)
	{
		return invokeObjcSelf!(Object, "parentForItem:", Object)(item);
	}

	Object itemAtRow (NSInteger row)
	{
		return invokeObjcSelf!(Object, "itemAtRow:", NSInteger)(row);
	}

	NSInteger rowForItem (Object item)
	{
		return invokeObjcSelf!(NSInteger, "rowForItem:", Object)(item);
	}

	NSInteger levelForItem (Object item)
	{
		return invokeObjcSelf!(NSInteger, "levelForItem:", Object)(item);
	}

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

	bool isItemExpanded (Object item)
	{
		return invokeObjcSelf!(bool, "isItemExpanded:", Object)(item);
	}

	void setIndentationPerLevel (CGFloat indentationPerLevel)
	{
		return invokeObjcSelf!(void, "setIndentationPerLevel:", CGFloat)(indentationPerLevel);
	}

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

	void setIndentationMarkerFollowsCell (bool drawInCell)
	{
		return invokeObjcSelf!(void, "setIndentationMarkerFollowsCell:", bool)(drawInCell);
	}

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

	void setAutoresizesOutlineColumn (bool resize)
	{
		return invokeObjcSelf!(void, "setAutoresizesOutlineColumn:", bool)(resize);
	}

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

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

	void setDropItem (Object item, NSInteger index)
	{
		return invokeObjcSelf!(void, "setDropItem:dropChildIndex:", Object, NSInteger)(item, index);
	}

	bool shouldCollapseAutoExpandedItemsForDeposited (bool deposited)
	{
		return invokeObjcSelf!(bool, "shouldCollapseAutoExpandedItemsForDeposited:", bool)(deposited);
	}

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

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

const TNSOutlineViewDataSource = `

	Object outlineView (NSOutlineView outlineView, NSInteger index, Object item)
	{
		return invokeObjcSelf!(Object, "outlineView:child:ofItem:", NSOutlineView, NSInteger, Object)(outlineView, index, item);
	}

	bool outlineView (NSOutlineView outlineView, Object item)
	{
		return invokeObjcSelf!(bool, "outlineView:isItemExpandable:", NSOutlineView, Object)(outlineView, item);
	}

	NSInteger outlineView (NSOutlineView outlineView, Object item)
	{
		return invokeObjcSelf!(NSInteger, "outlineView:numberOfChildrenOfItem:", NSOutlineView, Object)(outlineView, item);
	}

	Object outlineView (NSOutlineView outlineView, NSTableColumn tableColumn, Object item)
	{
		return invokeObjcSelf!(Object, "outlineView:objectValueForTableColumn:byItem:", NSOutlineView, NSTableColumn, Object)(outlineView, tableColumn, item);
	}

	void outlineView (NSOutlineView outlineView, Object object, NSTableColumn tableColumn, Object item)
	{
		return invokeObjcSelf!(void, "outlineView:setObjectValue:forTableColumn:byItem:", NSOutlineView, Object, NSTableColumn, Object)(outlineView, object, tableColumn, item);
	}

	Object outlineView (NSOutlineView outlineView, Object object)
	{
		return invokeObjcSelf!(Object, "outlineView:itemForPersistentObject:", NSOutlineView, Object)(outlineView, object);
	}

	Object outlineView (NSOutlineView outlineView, Object item)
	{
		return invokeObjcSelf!(Object, "outlineView:persistentObjectForItem:", NSOutlineView, Object)(outlineView, item);
	}

	void outlineView (NSOutlineView outlineView, NSArray oldDescriptors)
	{
		return invokeObjcSelf!(void, "outlineView:sortDescriptorsDidChange:", NSOutlineView, NSArray)(outlineView, oldDescriptors);
	}

	bool outlineView (NSOutlineView outlineView, NSArray items, NSPasteboard pasteboard)
	{
		return invokeObjcSelf!(bool, "outlineView:writeItems:toPasteboard:", NSOutlineView, NSArray, NSPasteboard)(outlineView, items, pasteboard);
	}

	uint outlineView (NSOutlineView outlineView, INSDraggingInfo info, Object item, NSInteger index)
	{
		return invokeObjcSelf!(uint, "outlineView:validateDrop:proposedItem:proposedChildIndex:", NSOutlineView, INSDraggingInfo, Object, NSInteger)(outlineView, info, item, index);
	}

	bool outlineView (NSOutlineView outlineView, INSDraggingInfo info, Object item, NSInteger index)
	{
		return invokeObjcSelf!(bool, "outlineView:acceptDrop:item:childIndex:", NSOutlineView, INSDraggingInfo, Object, NSInteger)(outlineView, info, item, index);
	}

	NSArray outlineView (NSOutlineView outlineView, NSURL dropDestination, NSArray items)
	{
		return invokeObjcSelf!(NSArray, "outlineView:namesOfPromisedFilesDroppedAtDestination:forDraggedItems:", NSOutlineView, NSURL, NSArray)(outlineView, dropDestination, items);
	}

	//mixin ObjcBindMethod!(outlineView, "outlineView:child:ofItem:");
	//mixin ObjcBindMethod!(outlineView, "outlineView:isItemExpandable:");
	//mixin ObjcBindMethod!(outlineView, "outlineView:numberOfChildrenOfItem:");
	//mixin ObjcBindMethod!(outlineView, "outlineView:objectValueForTableColumn:byItem:");
	//mixin ObjcBindMethod!(outlineView, "outlineView:setObjectValue:forTableColumn:byItem:");
	//mixin ObjcBindMethod!(outlineView, "outlineView:itemForPersistentObject:");
	//mixin ObjcBindMethod!(outlineView, "outlineView:persistentObjectForItem:");
	//mixin ObjcBindMethod!(outlineView, "outlineView:sortDescriptorsDidChange:");
	//mixin ObjcBindMethod!(outlineView, "outlineView:writeItems:toPasteboard:");
	//mixin ObjcBindMethod!(outlineView, "outlineView:validateDrop:proposedItem:proposedChildIndex:");
	//mixin ObjcBindMethod!(outlineView, "outlineView:acceptDrop:item:childIndex:");
	//mixin ObjcBindMethod!(outlineView, "outlineView:namesOfPromisedFilesDroppedAtDestination:forDraggedItems:");

`;

const TNSOutlineViewNotifications = `

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

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

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

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

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

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

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

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

	//mixin ObjcBindMethod!(outlineViewSelectionDidChange, "outlineViewSelectionDidChange:");
	//mixin ObjcBindMethod!(outlineViewColumnDidMove, "outlineViewColumnDidMove:");
	//mixin ObjcBindMethod!(outlineViewColumnDidResize, "outlineViewColumnDidResize:");
	//mixin ObjcBindMethod!(outlineViewSelectionIsChanging, "outlineViewSelectionIsChanging:");
	//mixin ObjcBindMethod!(outlineViewItemWillExpand, "outlineViewItemWillExpand:");
	//mixin ObjcBindMethod!(outlineViewItemDidExpand, "outlineViewItemDidExpand:");
	//mixin ObjcBindMethod!(outlineViewItemWillCollapse, "outlineViewItemWillCollapse:");
	//mixin ObjcBindMethod!(outlineViewItemDidCollapse, "outlineViewItemDidCollapse:");

`;

const TNSOutlineViewDelegate = `

	void outlineView (NSOutlineView outlineView, Object cell, NSTableColumn tableColumn, Object item)
	{
		return invokeObjcSelf!(void, "outlineView:willDisplayCell:forTableColumn:item:", NSOutlineView, Object, NSTableColumn, Object)(outlineView, cell, tableColumn, item);
	}

	bool outlineView (NSOutlineView outlineView, NSTableColumn tableColumn, Object item)
	{
		return invokeObjcSelf!(bool, "outlineView:shouldEditTableColumn:item:", NSOutlineView, NSTableColumn, Object)(outlineView, tableColumn, item);
	}

	bool selectionShouldChangeInOutlineView (NSOutlineView outlineView)
	{
		return invokeObjcSelf!(bool, "selectionShouldChangeInOutlineView:", NSOutlineView)(outlineView);
	}

	bool outlineView (NSOutlineView outlineView, Object item)
	{
		return invokeObjcSelf!(bool, "outlineView:shouldSelectItem:", NSOutlineView, Object)(outlineView, item);
	}

	NSIndexSet outlineView (NSOutlineView outlineView, NSIndexSet proposedSelectionIndexes)
	{
		return invokeObjcSelf!(NSIndexSet, "outlineView:selectionIndexesForProposedSelection:", NSOutlineView, NSIndexSet)(outlineView, proposedSelectionIndexes);
	}

	bool outlineView (NSOutlineView outlineView, NSTableColumn tableColumn)
	{
		return invokeObjcSelf!(bool, "outlineView:shouldSelectTableColumn:", NSOutlineView, NSTableColumn)(outlineView, tableColumn);
	}

	void outlineView (NSOutlineView outlineView, NSTableColumn tableColumn)
	{
		return invokeObjcSelf!(void, "outlineView:mouseDownInHeaderOfTableColumn:", NSOutlineView, NSTableColumn)(outlineView, tableColumn);
	}

	void outlineView (NSOutlineView outlineView, NSTableColumn tableColumn)
	{
		return invokeObjcSelf!(void, "outlineView:didClickTableColumn:", NSOutlineView, NSTableColumn)(outlineView, tableColumn);
	}

	void outlineView (NSOutlineView outlineView, NSTableColumn tableColumn)
	{
		return invokeObjcSelf!(void, "outlineView:didDragTableColumn:", NSOutlineView, NSTableColumn)(outlineView, tableColumn);
	}

	NSString outlineView (NSOutlineView outlineView, NSCell cell, NSRectPointer rect, NSTableColumn tableColumn, Object item, NSPoint mouseLocation)
	{
		return invokeObjcSelf!(NSString, "outlineView:toolTipForCell:rect:tableColumn:item:mouseLocation:", NSOutlineView, NSCell, NSRectPointer, NSTableColumn, Object, NSPoint)(outlineView, cell, rect, tableColumn, item, mouseLocation);
	}

	CGFloat outlineView (NSOutlineView outlineView, Object item)
	{
		return invokeObjcSelf!(CGFloat, "outlineView:heightOfRowByItem:", NSOutlineView, Object)(outlineView, item);
	}

	NSString outlineView (NSOutlineView outlineView, NSTableColumn tableColumn, Object item)
	{
		return invokeObjcSelf!(NSString, "outlineView:typeSelectStringForTableColumn:item:", NSOutlineView, NSTableColumn, Object)(outlineView, tableColumn, item);
	}

	Object outlineView (NSOutlineView outlineView, Object startItem, Object endItem, NSString searchString)
	{
		return invokeObjcSelf!(Object, "outlineView:nextTypeSelectMatchFromItem:toItem:forString:", NSOutlineView, Object, Object, NSString)(outlineView, startItem, endItem, searchString);
	}

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

	bool outlineView (NSOutlineView outlineView, NSTableColumn tableColumn, Object item)
	{
		return invokeObjcSelf!(bool, "outlineView:shouldShowCellExpansionForTableColumn:item:", NSOutlineView, NSTableColumn, Object)(outlineView, tableColumn, item);
	}

	bool outlineView (NSOutlineView outlineView, NSCell cell, NSTableColumn tableColumn, Object item)
	{
		return invokeObjcSelf!(bool, "outlineView:shouldTrackCell:forTableColumn:item:", NSOutlineView, NSCell, NSTableColumn, Object)(outlineView, cell, tableColumn, item);
	}

	NSCell outlineView (NSOutlineView outlineView, NSTableColumn tableColumn, Object item)
	{
		return invokeObjcSelf!(NSCell, "outlineView:dataCellForTableColumn:item:", NSOutlineView, NSTableColumn, Object)(outlineView, tableColumn, item);
	}

	bool outlineView (NSOutlineView outlineView, Object item)
	{
		return invokeObjcSelf!(bool, "outlineView:isGroupItem:", NSOutlineView, Object)(outlineView, item);
	}

	bool outlineView (NSOutlineView outlineView, Object item)
	{
		return invokeObjcSelf!(bool, "outlineView:shouldExpandItem:", NSOutlineView, Object)(outlineView, item);
	}

	bool outlineView (NSOutlineView outlineView, Object item)
	{
		return invokeObjcSelf!(bool, "outlineView:shouldCollapseItem:", NSOutlineView, Object)(outlineView, item);
	}

	void outlineView (NSOutlineView outlineView, Object cell, NSTableColumn tableColumn, Object item)
	{
		return invokeObjcSelf!(void, "outlineView:willDisplayOutlineCell:forTableColumn:item:", NSOutlineView, Object, NSTableColumn, Object)(outlineView, cell, tableColumn, item);
	}

	//mixin ObjcBindMethod!(outlineView, "outlineView:willDisplayCell:forTableColumn:item:");
	//mixin ObjcBindMethod!(outlineView, "outlineView:shouldEditTableColumn:item:");
	//mixin ObjcBindMethod!(selectionShouldChangeInOutlineView, "selectionShouldChangeInOutlineView:");
	//mixin ObjcBindMethod!(outlineView, "outlineView:shouldSelectItem:");
	//mixin ObjcBindMethod!(outlineView, "outlineView:selectionIndexesForProposedSelection:");
	//mixin ObjcBindMethod!(outlineView, "outlineView:shouldSelectTableColumn:");
	//mixin ObjcBindMethod!(outlineView, "outlineView:mouseDownInHeaderOfTableColumn:");
	//mixin ObjcBindMethod!(outlineView, "outlineView:didClickTableColumn:");
	//mixin ObjcBindMethod!(outlineView, "outlineView:didDragTableColumn:");
	//mixin ObjcBindMethod!(outlineView, "outlineView:toolTipForCell:rect:tableColumn:item:mouseLocation:");
	//mixin ObjcBindMethod!(outlineView, "outlineView:heightOfRowByItem:");
	//mixin ObjcBindMethod!(outlineView, "outlineView:typeSelectStringForTableColumn:item:");
	//mixin ObjcBindMethod!(outlineView, "outlineView:nextTypeSelectMatchFromItem:toItem:forString:");
	//mixin ObjcBindMethod!(outlineView, "outlineView:shouldTypeSelectForEvent:withCurrentSearchString:");
	//mixin ObjcBindMethod!(outlineView, "outlineView:shouldShowCellExpansionForTableColumn:item:");
	//mixin ObjcBindMethod!(outlineView, "outlineView:shouldTrackCell:forTableColumn:item:");
	//mixin ObjcBindMethod!(outlineView, "outlineView:dataCellForTableColumn:item:");
	//mixin ObjcBindMethod!(outlineView, "outlineView:isGroupItem:");
	//mixin ObjcBindMethod!(outlineView, "outlineView:shouldExpandItem:");
	//mixin ObjcBindMethod!(outlineView, "outlineView:shouldCollapseItem:");
	//mixin ObjcBindMethod!(outlineView, "outlineView:willDisplayOutlineCell:forTableColumn:item:");

`;