public override nfloat GetPreferredWidth(object value, CGSize cellSize, int row, object dataItem) { var column = -1; // TODO: lookup! var args = new MutableCellEventArgs(ColumnHandler?.DataViewHandler as Grid, Widget, row, column, dataItem, CellStates.None, null); var identifier = Callback.OnGetIdentifier(Widget, args) ?? string.Empty; Control widthCell; if (!widthCells.TryGetValue(identifier, out widthCell)) { widthCell = Callback.OnCreateCell(Widget, args); if (widthCell == null) { return(Callback.OnGetPreferredWidth(Widget, args)); } widthCell.AttachNative(); widthCells.Add(identifier, widthCell); } args.SetControl(widthCell); Callback.OnConfigureCell(Widget, args, widthCell); widthCell.GetMacControl()?.InvalidateMeasure(); var result = widthCell.GetPreferredSize(SizeF.PositiveInfinity).Width; widthCell.DataContext = null; return(result); //return Callback.OnGetPreferredWidth(Widget, new CellEventArgs(row, dataItem, CellStates.None)); }
public override NSView GetViewForItem(NSTableView tableView, NSTableColumn tableColumn, int row, NSObject obj, Func <NSObject, int, object> getItem) { var item = getItem(obj, row); var state = CellStates.None; if (tableView.IsRowSelected(row)) { state |= CellStates.Selected; } if (tableColumn.Editable) { state |= CellStates.Editing; } var column = -1; // TODO: get index or lookup when needed. var args = new MutableCellEventArgs(ColumnHandler.DataViewHandler as Grid, Widget, row, column, item, state, null); var identifier = tableColumn.Identifier; var id = Callback.OnGetIdentifier(Widget, args); if (!string.IsNullOrEmpty(id)) { identifier += "_" + id; } var view = tableView.MakeView(identifier, tableView) as EtoCustomCellView; if (view == null) { var control = Callback.OnCreateCell(Widget, args); args.SetControl(control); view = new EtoCustomCellView { Handler = this, Args = args, EtoControl = control, Identifier = identifier, AutoresizingMask = NSViewResizingMask.HeightSizable | NSViewResizingMask.WidthSizable }; if (control != null) { var childView = control.ToNative(true); view.AddSubview(childView); view.Setup(); } } else { view.Args.SetEditable(args.IsEditing); view.Args.SetSelected(args.IsSelected); view.Args.SetItem(args.Item); } var formatArgs = new MacCellFormatArgs(ColumnHandler.Widget, item, row, view); ColumnHandler.DataViewHandler.OnCellFormatting(formatArgs); Callback.OnConfigureCell(Widget, view.Args, view.EtoControl); return(view); }