summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Platform.MacOS/Renderers/TableViewDataSource.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Xamarin.Forms.Platform.MacOS/Renderers/TableViewDataSource.cs')
-rw-r--r--Xamarin.Forms.Platform.MacOS/Renderers/TableViewDataSource.cs131
1 files changed, 0 insertions, 131 deletions
diff --git a/Xamarin.Forms.Platform.MacOS/Renderers/TableViewDataSource.cs b/Xamarin.Forms.Platform.MacOS/Renderers/TableViewDataSource.cs
deleted file mode 100644
index 90335ee2..00000000
--- a/Xamarin.Forms.Platform.MacOS/Renderers/TableViewDataSource.cs
+++ /dev/null
@@ -1,131 +0,0 @@
-using System;
-using AppKit;
-using Foundation;
-
-namespace Xamarin.Forms.Platform.MacOS
-{
- internal class TableViewDataSource : NSTableViewSource
- {
- static int s_sectionCount;
-
- const string HeaderIdentifier = nameof(TextCell);
- const string ItemIdentifier = nameof(ViewCell);
-
- protected ITableViewController Controller => _tableView;
-
- readonly NSTableView _nsTableView;
- readonly TableView _tableView;
-
- public TableViewDataSource(TableViewRenderer tableViewRenderer)
- {
- _tableView = tableViewRenderer.Element;
- _nsTableView = tableViewRenderer.TableView;
- Controller.ModelChanged += (s, e) => { _nsTableView?.ReloadData(); };
- AutomaticallyDeselect = true;
- }
-
- public bool AutomaticallyDeselect { get; set; }
-
- public override void SelectionDidChange(NSNotification notification)
- {
- var row = _nsTableView.SelectedRow;
- if (row == -1)
- return;
-
- int sectionIndex;
- bool isHeader;
- int itemIndexInSection;
-
- GetComputedIndexes(row, out sectionIndex, out itemIndexInSection, out isHeader);
-
- var cell = Controller.Model.GetCell(sectionIndex, itemIndexInSection);
- Controller.Model.RowSelected(cell);
- if (AutomaticallyDeselect)
- _nsTableView.DeselectRow(row);
- }
-
- public override nint GetRowCount(NSTableView tableView)
- {
- nint count = 0;
- s_sectionCount = Controller.Model.GetSectionCount();
- for (int i = 0; i < s_sectionCount; i++)
- {
- count += Controller.Model.GetRowCount(i) + 1;
- }
-
- return count;
- }
-
- public override bool ShouldSelectRow(NSTableView tableView, nint row)
- {
- int sectionIndex;
- bool isHeader;
- int itemIndexInSection;
-
- GetComputedIndexes(row, out sectionIndex, out itemIndexInSection, out isHeader);
-
- return !isHeader;
- }
-
- public override NSView GetViewForItem(NSTableView tableView, NSTableColumn tableColumn, nint row)
- {
- int sectionIndex;
- bool isHeader;
- int itemIndexInSection;
-
- GetComputedIndexes(row, out sectionIndex, out itemIndexInSection, out isHeader);
-
- string id;
- Cell cell;
- if (isHeader)
- {
- id = HeaderIdentifier;
- cell = Controller.Model.GetHeaderCell(sectionIndex) ??
- new TextCell { Text = Controller.Model.GetSectionTitle(sectionIndex) };
- }
- else
- {
- id = ItemIdentifier;
- cell = Controller.Model.GetCell(sectionIndex, itemIndexInSection);
- }
-
- var nativeCell = CellNSView.GetNativeCell(tableView, cell, id, isHeader);
- return nativeCell;
- }
-
- void GetComputedIndexes(nint row, out int sectionIndex, out int itemIndexInSection, out bool isHeader)
- {
- var totalItems = 0;
- isHeader = false;
- sectionIndex = 0;
- itemIndexInSection = 0;
-
- for (int i = 0; i < s_sectionCount; i++)
- {
- var groupCount = Controller.Model.GetRowCount(i);
- var itemsInSection = groupCount + 1;
-
- if (row < totalItems + itemsInSection)
- {
- sectionIndex = i;
- itemIndexInSection = (int)row - totalItems;
- isHeader = itemIndexInSection == 0;
- if (isHeader)
- itemIndexInSection = -1;
- else
- itemIndexInSection = itemIndexInSection - 1;
- break;
- }
- totalItems += itemsInSection;
- }
- }
- }
-
- //TODO: Implement Uneven rows
- internal class UnEvenTableViewModelRenderer : TableViewDataSource
- {
- public UnEvenTableViewModelRenderer(TableViewRenderer model) : base(model)
- {
- }
- }
-} \ No newline at end of file