[Mono-osx] Monomac appkit.cs
Miguel de Icaza
miguel at novell.com
Thu Apr 22 13:20:51 EDT 2010
Hello James,
Thanks!
On Thu, Apr 22, 2010 at 12:58 PM, James Clancey <james.clancey at gmail.com>wrote:
> Sorry I forgot to include the enums. Here they are. I will start working on
> correcting my errors today.
>
> Thanks
>
> public enum NSTableViewColumnAutoresizingStyle {
> NSTableViewNoColumnAutoresizing = 0,
> NSTableViewUniformColumnAutoresizingStyle,
> NSTableViewSequentialColumnAutoresizingStyle,
> NSTableViewReverseSequentialColumnAutoresizingStyle,
> NSTableViewLastColumnOnlyAutoresizingStyle,
> NSTableViewFirstColumnOnlyAutoresizingStyle
> }
> public enum NSTableViewSelectionHighlightStyle {
> NSTableViewSelectionHighlightStyleNone = -1,
> NSTableViewSelectionHighlightStyleRegular = 0,
> NSTableViewSelectionHighlightStyleSourceList = 1,
> }
> public enum NSTableViewDraggingDestinationFeedbackStyle {
> NSTableViewDraggingDestinationFeedbackStyleNone = -1,
> NSTableViewDraggingDestinationFeedbackStyleRegular = 0,
> NSTableViewDraggingDestinationFeedbackStyleSourceList = 1,
> }
> public enum NSTableViewDropOperation {
> NSTableViewDropOn,
> NSTableViewDropAbove
> }
>
> On Thu, Apr 22, 2010 at 5:43 AM, Miguel de Icaza <miguel at novell.com>wrote:
>
>> Hello James,
>>
>> Here is a build-able copy of the NSTableview with the associated classes
>>>
>>
>> Some feedback on the file:
>>
>> [BaseType (typeof (NSObject))]
>>> interface NSTableColumn {
>>> [Export ("initWithIdentifier:")]
>>> IntPtr InitWithIdentifier (NSObject identifier);
>>>
>>
>> All constructors need to become "IntPtr Constructor", the name of the
>> constructor is erased, that will become:
>>
>> public NSTableColumn (NSObject identifier)
>>
>> [Export ("headerCell")]
>>> NSObject HeaderCell { get; set; }
>>>
>>
>> This should be an NSCell.
>>
>>
>>> [Export ("dataCell")]
>>> NSObject DataCell { get; set; }
>>>
>>
>> So is this.
>>
>> //[Export ("sortDescriptorPrototype")]
>>> //NSSortDescriptor SortDescriptorPrototype { get; set; }
>>>
>>
>> Could you also send your NSSortDescriptor?
>>
>>
>>> [Export ("resizingMask")]
>>> uint ResizingMask { get; set; }
>>>
>>
>> We tend not to expose uint or ints for masks. In this case, notice that
>> the docs point to the possible values:
>>
>>
>> http://developer.apple.com/mac/library/documentation/cocoa/reference/ApplicationKit/Classes/NSTableColumn_Class/Reference/Reference.html#//apple_ref/doc/constant_group/Resizing_Modes
>>
>> You need to edit AppKit/Enums.cs to add the following:
>>
>> [Flags]
>> public enum NSTableResizingMask {
>> // The actual values.
>> }
>>
>> Then replace the int or uint value with this enum.
>>
>> [Export ("tableColumns")]
>>> NSArray TableColumns ();
>>>
>>
>> You need to lookup the actual type of tableColumns in the documentation,
>> and make this strongly typed. I looked this up and the array contains
>> NSTableColumn elements, so you have to change that to:
>>
>> NSTableColumn [] TableColumns
>>
>> [Export ("numberOfColumns")]
>>> int NumberOfColumns ();
>>>
>>
>> Per the framework design guidelines, rename this to ColumnCount and make
>> it a property:
>>
>> int ColumnCount { get; }
>>
>> [Export ("numberOfRows")]
>>> int NumberOfRows ();
>>>
>>
>> same here:
>>
>> int RowCount { get; }
>>
>> [Export ("addTableColumn:")]
>>> void AddTableColumn (NSTableColumn tableColumn);
>>>
>>> [Export ("removeTableColumn:")]
>>> void RemoveTableColumn (NSTableColumn tableColumn);
>>>
>>> [Export ("moveColumn:toColumn:")]
>>> void MoveColumntoColumn (int oldIndex, int newIndex);
>>>
>>
>> The identifier is a bad choice from the FDG perspective, use instead:
>>
>> void MoveColumn
>>
>>
>>> [Export ("columnWithIdentifier:")]
>>> int ColumnWithIdentifier (NSObject identifier);
>>>
>>
>> Since C# supports method overloads there is no need to distinguish
>> functionality based on the method name, so we need to group this and the
>> next one into the same method, I suggest FindColumn.
>>
>>
>>> [Export ("tableColumnWithIdentifier:")]
>>> NSTableColumn TableColumnWithIdentifier (NSObject identifier);
>>>
>>
>> Per above, rename FindColumn.
>>
>> [Export ("reloadDataForRowIndexes:columnIndexes:")]
>>> void ReloadDataForRowIndexescolumnIndexes (NSIndexSet rowIndexes,
>>> NSIndexSet columnIndexes );
>>>
>>
>> Notice that the name generated by the parser here is terrible. The name
>> contains the second part of the selector, but C# has no need for it.
>>
>> So this method should be renamed "ReloadData", it is just an overload that
>> is more specific than the general one.
>>
>>
>>>
>>> [Export ("editedColumn")]
>>> int EditedColumn ();
>>>
>>> [Export ("editedRow")]
>>> int EditedRow ();
>>>
>>> [Export ("clickedColumn")]
>>> int ClickedColumn ();
>>>
>>
>>> [Export ("clickedRow")]
>>> int ClickedRow ();
>>>
>>
>> All those four need to become read-only properties.
>>
>>
>>> [Export ("setIndicatorImage:inTableColumn:")]
>>> void SetIndicatorImageinTableColumn (NSImage anImage, NSTableColumn
>>> tableColumn);
>>>
>>
>> Again: ugly identifier caused by the selector. It shoudl become:
>>
>> SetIndicatorImage (NSImage anImage, NSTableColumn inTableColumn)
>>
>>
>>> [Export ("indicatorImageInTableColumn:")]
>>> NSImage IndicatorImageInTableColumn (NSTableColumn tableColumn);
>>>
>>
>> This should become GetIndicatorImage (...)
>>
>>
>>> [Export ("canDragRowsWithIndexes:atPoint:")]
>>> bool CanDragRowsWithIndexesatPoint (NSIndexSet rowIndexes, PointF
>>> mouseDownPoint );
>>>
>>
>> Same, should become CanDragRows, the indexes: and atPoint: are not
>> relevant to the method name.
>>
>> [Export ("setDraggingSourceOperationMask:forLocal:")]
>>> void SetDraggingSourceOperationMaskforLocal (NSDragOperation mask, bool
>>> isLocal );
>>>
>>
>> Same, should become SetDraggingSourceOperationMask
>>
>>
>>> [Export ("setDropRow:dropOperation:")]
>>> void SetDropRowdropOperation (int row, NSTableViewDropOperation
>>> dropOperation);
>>>
>>
>> Same, should become SetDropRowDropOperation
>>
>> [Export ("selectAll:")]
>>> void SelectAll (NSObject sender);
>>>
>>> [Export ("deselectAll:")]
>>> void DeselectAll (NSObject sender);
>>>
>>> [Export ("selectColumnIndexes:byExtendingSelection:")]
>>> void SelectColumnIndexesbyExtendingSelection (NSIndexSet indexes, bool
>>> extend );
>>>
>>
>> Same, should become SelectColumns (NSIndexSet columnIndexes, bool
>> extendSelection)
>>
>> Notice that we can make our parameter names more meaningful in the cases
>> where we drop parts of the method name.
>>
>> C# 4.0 will take allow developers to take advantage of this, like this:
>>
>> SelectColumns (columnIndexes = x, extendSelection = true)
>>
>>
>>
>>> [Export ("selectRowIndexes:byExtendingSelection:")]
>>> void SelectRowIndexesbyExtendingSelection (NSIndexSet indexes, bool
>>> extend );
>>>
>>
>> Same, now: SelectRows
>>
>> [Export ("selectedColumnIndexes")]
>>> NSIndexSet SelectedColumnIndexes ();
>>>
>>
>> Should become a read-only property.
>>
>>
>>> [Export ("selectedRowIndexes")]
>>> NSIndexSet SelectedRowIndexes ();
>>>
>>
>> Should become a read-only property.
>>
>>
>>> [Export ("selectedColumn")]
>>> int SelectedColumn ();
>>>
>>> [Export ("selectedRow")]
>>> int SelectedRow ();
>>>
>>
>> Should become read-only properties.
>>
>>
>>> [Export ("numberOfSelectedColumns")]
>>> int NumberOfSelectedColumns ();
>>>
>>
>> -> SelectedColumnCount
>>
>>
>>> [Export ("numberOfSelectedRows")]
>>> int NumberOfSelectedRows ();
>>>
>>
>> -> SelectedRowCount
>>
>>
>>> [Export ("rectOfColumn:")]
>>> RectangleF RectOfColumn (int column);
>>>
>>
>> -> RectForColumn
>>
>>
>>> [Export ("rectOfRow:")]
>>> RectangleF RectOfRow (int row);
>>>
>>
>> -> RectOfRow.
>>
>> [Export ("columnIndexesInRect:")]
>>> NSIndexSet ColumnIndexesInRect (RectangleF rect);
>>>
>>
>> -> GetColumnIndexesInRect
>>
>> [Export ("columnAtPoint:")]
>>>
>> int ColumnAtPoint (PointF point);
>>>
>>
>> -> GetColumn (PointF atPoint)
>>
>> [Export ("rowAtPoint:")]
>>> int RowAtPoint (PointF point);
>>>
>>
>> -> GetRow (PointF atPoint)
>>
>>
>>> [Export ("frameOfCellAtColumn:row:")]
>>> RectangleF FrameOfCellAtColumnrow (int column, int row);
>>>
>>
>> ->GetCellFrame (int column, int row)
>>
>>
>>> [Export ("preparedCellAtColumn:row:")]
>>> NSCell PreparedCellAtColumnrow (int column, int row );
>>>
>>
>> ->GetCell (int column, int row)
>>
>> [Export ("shouldFocusCell:atColumn:row:")]
>>> bool ShouldFocusCellatColumnrow (NSCell cell, int column, int row );
>>>
>>
>> -> ShouldFocusCell
>>
>>
>>> [Export ("performClickOnCellAtColumn:row:")]
>>> void PerformClickOnCellAtColumnrow (int column, int row );
>>>
>>
>> -> PerformClick
>>
>>
>>> [Export ("editColumn:row:withEvent:select:")]
>>> void EditColumnrowwithEventselect (int column, int row, NSEvent theEvent,
>>> bool select);
>>>
>>
>> -> EditColumn
>>
>>
>>> [Export ("drawRow:clipRect:")]
>>> void DrawRowclipRect (int row, RectangleF clipRect);
>>>
>>
>> -> DrawRow
>>
>>
>>> [Export ("highlightSelectionInClipRect:")]
>>> void HighlightSelectionInClipRect (RectangleF clipRect);
>>>
>>
>> -> HighlightSelection (RectangleF inCliprect)
>>
>>
>>> [Export ("drawGridInClipRect:")]
>>> void DrawGridInClipRect (RectangleF clipRect);
>>>
>>
>> -> DrawGrid
>>
>>
>>> [Export ("drawBackgroundInClipRect:")]
>>> void DrawBackgroundInClipRect (RectangleF clipRect );
>>>
>>
>> -> DrawBackground
>>
>>
>>> //Detected properties
>>> [Export ("dataSource")][NullAllowed]
>>> NSTableViewDataSource DataSource { get; set; }
>>>
>>> [Export ("delegate")][NullAllowed]
>>> NSTableViewDelegate Delegate { get; set; }
>>>
>>
>> Apply the standard delegate transformation, make the above weakly typed
>> (replace return value with NSObject) rename it to "WeakDelegate"
>> and add a new:
>>
>> [Wrap ("WeakDelegate")]
>> NSTableViewDelegate Delegate { get; set; }
>>
>> This is necessary to allow developers to set delegates in the Objective-C
>> style, when they out out of the strongly typed version that we offer.
>>
>> At this point, you will want to read how to turn the Objective-C delegate
>> into C# events, you will need to decorate the interface with the
>> Events/Delegates property for this.
>>
>> [Export ("gridStyleMask")]
>>> uint GridStyleMask { get; set; }
>>>
>>
>> Needs to become strongly typed, with an enum.
>>
>> [Export ("sortDescriptors")]
>>> NSArray SortDescriptors { get; set; }
>>>
>>
>> The NSArray needs to become strongly typed, what are the elements of this?
>>
>> The NSTableViewDelegate will need plenty of updates by sprinkling the
>> proper EventArgs on each method:
>>
>> [BaseType (typeof (NSObject))]
>>> [Model]
>>> interface NSTableViewDelegate {
>>> [Export ("tableView:willDispayCell:forTableColumn:row:")]
>>> void TableViewwillDisplayCellforTableColumnrow (NSTableView tableView,
>>> NSObject cell, NSTableColumn tableColumn, int
>>>
>>
>> In delegates, the first parameter is usually the sender, so the first part
>> of the selector name is useless, so we need to extract the actual meaning of
>> this method, which is "WillDisplayCell"
>>
>> So that needs to become "WillDisplayCell"
>>
>> The following return values, so in addition to the EventArgs that you need
>> to sprinkle, you need to look in the docs what is the default return value
>> if these methods are not implemented, and then do:
>>
>> [DefaultValue (...)]
>>
>> When no docs are available, we need to make an educated guess:
>>
>> [Export ("tableView:shouldEditTableColumn:row:")]
>>> bool TableViewshouldEditTableColumnrow (NSTableView tableView,
>>> NSTableColumn tableColumn, int row);
>>>
>>
>> -> ShouldEditTableColumn
>>
>> In this case, the docs say nothing about what happens if the user does not
>> implement the method, so we are going to assume that the default should be
>> "no", so we do: DefaultValoue (false)
>>
>>
>>> [Export ("selectionShouldChangeInTableView:")]
>>> bool SelectionShouldChangeInTableView (NSTableView tableView);
>>>
>>
>> -> ShouldSelectionChange
>>
>> [Export ("tableView:shouldSelectRow:")]
>>> bool TableViewshouldSelectRow (NSTableView tableView, int row);
>>>
>>
>> -> ShouldSelectRow
>>
>>
>>> [Export ("tableView:selectionIndexesForProposedSelection:")]
>>> NSIndexSet TableViewselectionIndexesForProposedSelection (NSTableView
>>> tableView, NSIndexSet proposedSelectionIndexes);
>>>
>>
>> -> GetSelectionIndexes
>>
>>
>>>
>>> [Export ("tableView:shouldSelectTableColumn:")]
>>> bool TableViewshouldSelectTableColumn (NSTableView tableView,
>>> NSTableColumn tableColumn);
>>>
>>
>> -> ShouldSelectTableColumn
>>
>>
>>> [Export ("tableView:mouseDownInHeaderOfTableColumn:")]
>>> void TableViewmouseDownInHeaderOfTableColumn (NSTableView tableView,
>>> NSTableColumn tableColumn);
>>>
>>
>> -> MouseDown
>>
>> [Export ("tableView:didClickTableColumn:")]
>>> void TableViewdidClickTableColumn (NSTableView tableView, NSTableColumn
>>> tableColumn);
>>>
>>
>> -> DidClickTableColumn
>>
>> [Export ("tableView:didDragTableColumn:")]
>>> void TableViewdidDragTableColumn (NSTableView tableView, NSTableColumn
>>> tableColumn);
>>>
>>
>> DidDragTabelColumn
>>
>>
>>> [Export ("tableView:heightOfRow:")]
>>> float TableViewheightOfRow (NSTableView tableView, int row );
>>>
>>
>> -> GetRowHeight
>>
>>
>>> [Export ("tableView:typeSelectStringForTableColumn:row:")]
>>> string TableViewtypeSelectStringForTableColumnrow (NSTableView
>>> tableView, NSTableColumn tableColumn, int row );
>>>
>>
>> -> GetSelectString
>>
>>
>>> [Export ("tableView:nextTypeSelectMatchFromRow:toRow:forString:")]
>>> int TableViewnextTypeSelectMatchFromRowtoRowforString (NSTableView
>>> tableView, int startRow, int endRow, string
>>>
>>
>> -> GetNextTypeSelectMatch
>>
>> [Export ("tableView:shouldTypeSelectForEvent:withCurrentSearchString:")]
>>> bool TableViewshouldTypeSelectForEventwithCurrentSearchString
>>> (NSTableView tableView, NSEvent theEvent, string searchString );
>>>
>>
>> -> ShouldTypeSelect
>>
>>
>>> [Export ("tableView:shouldShowCellExpansionForTableColumn:row:")]
>>> bool TableViewshouldShowCellExpansionForTableColumnrow (NSTableView
>>> tableView, NSTableColumn tableColumn, int row );
>>>
>>
>> -> ShouldShowCellExpansion
>>
>>
>>> [Export ("tableView:shouldTrackCell:forTableColumn:row:")]
>>> bool TableViewshouldTrackCellforTableColumnrow (NSTableView tableView,
>>> NSCell cell, NSTableColumn tableColumn, int row
>>>
>>
>> -> ShouldTrackCell
>>
>> [Export ("tableView:dataCellForTableColumn:row:")]
>>> NSCell TableViewdataCellForTableColumnrow (NSTableView tableView,
>>> NSTableColumn tableColumn, int row );
>>>
>>
>> -> GetCell
>>
>>
>>>
>>> [Export ("tableView:isGroupRow:")]
>>> bool TableViewisGroupRow (NSTableView tableView, int row );
>>>
>>
>> -> IsGroupRow
>>
>>
>>> [Export ("tableView:sizeToFitWidthOfColumn:")]
>>> float TableViewsizeToFitWidthOfColumn (NSTableView tableView, int
>>> column );
>>>
>>
>> -> GetSizeToFitColumnWidth
>>
>>
>>> [Export ("tableView:shouldReorderColumn:toColumn:")]
>>> bool TableViewshouldReorderColumntoColumn (NSTableView tableView, int
>>> columnIndex, int newColumnIndex );
>>>
>>
>> -> ShouldReorder
>>
>>
>>> [Export ("tableViewSelectionDidChange:")]
>>> void TableViewSelectionDidChange (NSNotification notification);
>>>
>>
>> -> SelectionDidChange
>>
>>
>>> [Export ("tableViewColumnDidMove:")]
>>> void TableViewColumnDidMove (NSNotification notification);
>>>
>>
>> -> ColumnDidMove
>>
>>
>>> [Export ("tableViewColumnDidResize:")]
>>> void TableViewColumnDidResize (NSNotification notification);
>>>
>>
>> -> ColumnDidResize
>>
>> [Export ("tableViewSelectionIsChanging:")]
>>> void TableViewSelectionIsChanging (NSNotification notification);
>>>
>>
>> -> SelectionIsChanging
>>
>>
>>> [BaseType (typeof (NSObject))]
>>> [Model]
>>> interface NSTableViewDataSource {
>>> [Export ("numberOfRowsInTableView:")]
>>> int NumberOfRowsInTableView (NSTableView tableView);
>>>
>>
>> -> GetRowCount
>>
>>
>>> [Export ("tableView:objectValueForTableColumn:row:")]
>>> NSObject TableViewobjectValueForTableColumnrow (NSTableView tableView,
>>> NSTableColumn tableColumn, int row);
>>>
>>
>> -> GetObjectValue
>>
>>
>>>
>>> [Export ("tableView:setObjectValue:forTableColumn:row:")]
>>> void TableViewsetObjectValueforTableColumnrow (NSTableView tableView,
>>> NSObject theObject, NSTableColumn tableColumn,
>>>
>>
>> -> SetObjectValue
>>
>> [Export ("tableView:sortDescriptorsDidChange:")]
>>> void TableViewsortDescriptorsDidChange (NSTableView tableView, NSArray
>>> oldDescriptors );
>>>
>>
>> -> SortDescriptorChanged
>>
>>
>>> [Export ("tableView:writeRowsWithIndexes:toPasteboard:")]
>>> bool TableViewwriteRowsWithIndexestoPasteboard (NSTableView tableView,
>>> NSIndexSet rowIndexes, NSPasteboard pboard );
>>>
>>
>> -> WriteRows
>>
>> [Export ("tableView:validateDrop:proposedRow:proposedDropOperation:")]
>>> NSDragOperation TableViewvalidateDropproposedRowproposedDropOperation
>>> (NSTableView tableView, NSDraggingInfo info, int row,
>>> NSTableViewDropOperation dropOperation);
>>>
>>
>> -> ValidateDrop
>>
>> [Export ("tableView:acceptDrop:row:dropOperation:")]
>>> bool TableViewacceptDroprowdropOperation (NSTableView tableView,
>>> NSDraggingInfo info, int row, NSTableViewDropOperation dropOperation);
>>>
>>
>> -> AcceptDrop
>>
>>
>>> [Export
>>> ("tableView:namesOfPromisedFilesDroppedAtDestination:forDraggedRowsWithIndexes:")]
>>> NSArray
>>> TableViewnamesOfPromisedFilesDroppedAtDestinationforDraggedRowsWithIndexes
>>> (NSTableView tableView, NSUrl dropDestination, NSIndexSet indexSet );
>>>
>>
>> -> FilesDropped
>>
>> [BaseType (typeof (NSTextFieldCell))]
>>> interface NSTableHeaderCell {
>>> [Export ("drawSortIndicatorWithFrame:inView:ascending:priority:")]
>>> void DrawSortIndicatorWithFrameinViewascendingpriority (RectangleF
>>> cellFrame, NSView controlView, bool ascending, int priority );
>>>
>>
>> -> DrawSortIndicator
>>
>>
>>> [Export ("sortIndicatorRectForBounds:")]
>>> RectangleF SortIndicatorRectForBounds (RectangleF theRect );
>>>
>>
>> GetSortIndicatorRect
>>
>> [BaseType (typeof (NSView))]
>>> interface NSTableHeaderView {
>>> [Export ("draggedColumn")]
>>> int DraggedColumn ();
>>>
>>> [Export ("draggedDistance")]
>>> float DraggedDistance ();
>>>
>>> [Export ("resizedColumn")]
>>> int ResizedColumn ();
>>>
>>
>> Those three need to become read-only properties
>>
>>
>>> [Export ("headerRectOfColumn:")]
>>> RectangleF HeaderRectOfColumn (int column);
>>>
>>
>> -> GetHeaderRect
>>
>>
>>>
>>> [Export ("columnAtPoint:")]
>>> int ColumnAtPoint (PointF point);
>>>
>>
>> -> GetColumn
>>
>> Miguel.
>>
>
>
> _______________________________________________
> Mono-osx mailing list
> Mono-osx at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-osx
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.ximian.com/pipermail/mono-osx/attachments/20100422/b7664275/attachment-0001.html
More information about the Mono-osx
mailing list