Пример #1
0
        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));
        }
Пример #2
0
        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);
        }