diff options
Diffstat (limited to 'Xwt.XamMac/Xwt.Mac.CellViews/CellViewBackend.cs')
-rw-r--r-- | Xwt.XamMac/Xwt.Mac.CellViews/CellViewBackend.cs | 75 |
1 files changed, 44 insertions, 31 deletions
diff --git a/Xwt.XamMac/Xwt.Mac.CellViews/CellViewBackend.cs b/Xwt.XamMac/Xwt.Mac.CellViews/CellViewBackend.cs index b7b3d9a6..6418facf 100644 --- a/Xwt.XamMac/Xwt.Mac.CellViews/CellViewBackend.cs +++ b/Xwt.XamMac/Xwt.Mac.CellViews/CellViewBackend.cs @@ -30,79 +30,92 @@ namespace Xwt.Mac { public class CellViewBackend: ICellViewBackend, ICanvasCellViewBackend { - NSTableView table; - int column; + WidgetEvent enabledEvents; public CellViewBackend (NSTableView table, int column) { - this.table = table; - this.column = column; + Table = table; + Column = column; } - public ICellViewFrontend Frontend { get; private set; } - public virtual void InitializeBackend (object frontend, ApplicationContext context) { Frontend = (ICellViewFrontend)frontend; + Context = context; } - public NSCell CurrentCell { get; set; } + public ICellViewFrontend Frontend { get; private set; } - public int Column { - get { - return column; - } - } + public ICellViewEventSink EventSink { get; private set; } - public int CurrentRow { get; set; } + public ApplicationContext Context { get; private set; } - internal ITablePosition CurrentPosition { get; set; } + internal NSView CurrentCellView { get; private set; } + public int Column { get; private set; } + + public NSTableView Table { get; internal set; } + + internal ITablePosition CurrentPosition { get; private set; } + + internal void Load (ICellRenderer cell) + { + CurrentCellView = (NSView)cell; + CurrentPosition = cell.CellContainer.TablePosition; + EventSink = Frontend.Load (cell.CellContainer); + } + public virtual void EnableEvent (object eventId) { + if (eventId is WidgetEvent) + enabledEvents |= (WidgetEvent)eventId; } - + public virtual void DisableEvent (object eventId) { + if (eventId is WidgetEvent) + enabledEvents &= ~(WidgetEvent)eventId; + } + + public bool GetIsEventEnabled (WidgetEvent eventId) + { + return enabledEvents.HasFlag (eventId); } public void QueueDraw () { - // nothing to be done here, NSTableView should handle this + CurrentCellView.NeedsDisplay = true; + } + + public void QueueResize () + { + CurrentCellView.NeedsDisplay = true; + ((ICellRenderer)CurrentCellView).CellContainer.InvalidateRowHeight (); } public Rectangle CellBounds { get { - if (CurrentPosition is TableRow) { - var r = table.GetCellFrame (column, ((TableRow)CurrentPosition).Row); - r = ((ICellRenderer)CurrentCell).CellContainer.GetCellRect (r, CurrentCell); - return new Rectangle (r.X, r.Y, r.Width, r.Height); - } - return Rectangle.Zero; + return CurrentCellView.ConvertRectToView (CurrentCellView.Frame, Table).ToXwtRect (); } } public Rectangle BackgroundBounds { get { - // TODO - return CellBounds; + return CurrentCellView.ConvertRectToView (CurrentCellView.Frame, ((ICellRenderer)CurrentCellView).CellContainer.Superview).ToXwtRect (); } } public bool Selected { get { - if (CurrentPosition is TableRow) { - return table.IsRowSelected (((TableRow)CurrentPosition).Row); - } - // TODO - return false; + if (CurrentPosition is TableRow) + return Table.IsRowSelected (((TableRow)CurrentPosition).Row); + return Table.IsRowSelected (Table.RowForView (CurrentCellView)); } } public bool HasFocus { get { - // TODO - return false; + return CurrentCellView?.Window != null && CurrentCellView.Window.FirstResponder == CurrentCellView; } } |