public override NSView GetViewForItem(NSTableView tableView, NSTableColumn tableColumn, int row, NSObject obj, Func <NSObject, int, object> getItem) { var view = tableView.MakeView(tableColumn.Identifier, tableView) as CellView; if (view == null) { view = new CellView { WeakHandler = new WeakReference(this), Identifier = tableColumn.Identifier, }; var col = Array.IndexOf(tableView.TableColumns(), tableColumn); view.BecameFirstResponder += (sender, e) => { var control = (CellView)sender; var r = (int)control.Tag; var item = getItem(control.Item, r); var ee = MacConversions.CreateCellEventArgs(ColumnHandler.Widget, tableView, r, col, item); ColumnHandler.DataViewHandler.OnCellEditing(ee); }; view.EditingEnded += (sender, e) => { var notification = (NSNotification)sender; var control = (CellView)notification.Object; var r = (int)control.Tag; var item = getItem(control.Item, r); SetObjectValue(item, control.ObjectValue); var ee = MacConversions.CreateCellEventArgs(ColumnHandler.Widget, tableView, r, col, item); ColumnHandler.DataViewHandler.OnCellEdited(ee); control.ObjectValue = GetObjectValue(item) ?? new NSString(string.Empty); }; view.ResignedFirstResponder += (sender, e) => { var control = (CellView)sender; var r = (int)control.Tag; var item = getItem(control.Item, r); SetObjectValue(item, control.ObjectValue); var ee = MacConversions.CreateCellEventArgs(ColumnHandler.Widget, tableView, r, col, item); ColumnHandler.DataViewHandler.OnCellEdited(ee); }; view.Bind(editableBinding, tableColumn, "editable", null); } var cell = view.Cell; cell.VerticalAlignment = VerticalAlignment; cell.Alignment = TextAlignment.ToNS(); view.Item = obj; view.Tag = row; var args = new MacCellFormatArgs(ColumnHandler.Widget, getItem(obj, row), row, view); ColumnHandler.DataViewHandler.OnCellFormatting(args); return(view); }
public override NSView GetViewForItem(NSTableView tableView, NSTableColumn tableColumn, int row, NSObject obj, Func <NSObject, int, object> getItem) { var view = tableView.MakeView(tableColumn.Identifier, tableView) as CellView; if (view == null) { view = new CellView { WeakHandler = new WeakReference(this), Cell = new EtoLabelFieldCell { Wraps = false, Scrollable = true, UsesSingleLineMode = false // true prevents proper vertical alignment }, Identifier = tableColumn.Identifier, Selectable = false, DrawsBackground = false, Bezeled = false, Bordered = false, AutoresizingMask = NSViewResizingMask.HeightSizable | NSViewResizingMask.WidthSizable }; var col = Array.IndexOf(tableView.TableColumns(), tableColumn); view.BecameFirstResponder += (sender, e) => { var control = (CellView)sender; var r = (int)control.Tag; var item = getItem(control.Item, r); var ee = MacConversions.CreateCellEventArgs(ColumnHandler.Widget, tableView, r, col, item); ColumnHandler.DataViewHandler.OnCellEditing(ee); }; view.EditingEnded += (sender, e) => { var notification = (NSNotification)sender; var control = (CellView)notification.Object; var r = (int)control.Tag; var item = getItem(control.Item, r); SetObjectValue(item, control.ObjectValue); var ee = MacConversions.CreateCellEventArgs(ColumnHandler.Widget, tableView, r, col, item); ColumnHandler.DataViewHandler.OnCellEdited(ee); control.ObjectValue = GetObjectValue(item) ?? new NSString(string.Empty); }; view.ResignedFirstResponder += (sender, e) => { var control = (CellView)sender; var r = (int)control.Tag; var item = getItem(control.Item, r); SetObjectValue(item, control.ObjectValue); var ee = MacConversions.CreateCellEventArgs(ColumnHandler.Widget, tableView, r, col, item); ColumnHandler.DataViewHandler.OnCellEdited(ee); }; view.Bind(editableBinding, tableColumn, "editable", null); } var cell = (EtoLabelFieldCell)view.Cell; cell.VerticalAlignment = VerticalAlignment; cell.Alignment = TextAlignment.ToNS(); view.Item = obj; view.Tag = row; var args = new MacCellFormatArgs(ColumnHandler.Widget, getItem(obj, row), row, view); ColumnHandler.DataViewHandler.OnCellFormatting(args); return(view); }