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);
        }
Example #2
0
        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);
        }