private void OnChangeHeight(float delta) { if (delta > 0) { int rowsCount = this.RowsCount; // append more visible cells at the end for (int cellIndex = this.LastVisibleCellIndex + 1; cellIndex < rowsCount && IsCellVisible(cellIndex); ++cellIndex) { TableViewCell cell = TableCellForRow(cellIndex); m_visibleCells.AddLastItem(cell); } } else if (delta < 0) { // wipe invisible cells while (this.VisibleCellsCount > 0 && !IsCellVisible(this.LastVisibleCellIndex)) { RemoveVisibleCell(this.LastVisibleCell); } } }
private void AddCell() { // the "head" index will be moved after new element is added if (m_cellsEntries.RealLength == m_cellsEntries.Capacity) { // "shift" content to compensate the lost cell int headIndex = m_cellsEntries.HeadIndex; ShiftContent(m_cellsEntries[headIndex].Height); } int cellIndex = m_cellsEntries.Length; float cellHeight = Delegate.HeightForTableCell(cellIndex); m_cellsEntries.Add(new TableViewCellEntry(m_totalHeight, cellHeight)); if (IsCellVisible(cellIndex, m_scrollPos)) { TableViewCell cell = TableCellForRow(cellIndex); m_visibleCells.AddLastItem(cell); } m_totalHeight += cellHeight; }
private bool IsCellSelected(TableViewCell cell) { return(IsCellSelected(cell.CellIndex)); }
private void SetCellSelected(TableViewCell cell, bool flag) { SetCellSelected(cell.CellIndex, flag); }
protected virtual bool OnMouseDoubleClick(Event evt, TableViewCell cell) { return(false); }
protected virtual bool OnMouseDown(Event evt, TableViewCell cell) { return(this.SelectionMode != TableViewSelectionMode.None && OnCellSelected(cell)); }
protected void OnScroll(float oldPos, float newPos) { float delta = newPos - oldPos; int firstVisibleCellIndex = FirstVisibleCellIndex; int lastVisibleCellIndex = LastVisibleCellIndex; if (delta > 0) { int rowsCount = RowsCount; // wipe invisible rows while (!IsCellVisible(firstVisibleCellIndex, newPos) && VisibleCellsCount > 0) { RemoveVisibleCell(FirstVisibleCell); ++firstVisibleCellIndex; } if (VisibleCellsCount > 0) // not all rows were wiped: just append more visible cells at the end { for (int cellIndex = lastVisibleCellIndex + 1; cellIndex < rowsCount && IsCellVisible(cellIndex, newPos); ++cellIndex) { TableViewCell cell = TableCellForRow(cellIndex); m_visibleCells.AddLastItem(cell); } } else { int rowIndex = FindFirstVisibleRow(newPos, lastVisibleCellIndex + 1, rowsCount - 1); while (rowIndex < rowsCount && IsCellVisible(rowIndex, newPos)) { TableViewCell cell = TableCellForRow(rowIndex); m_visibleCells.AddLastItem(cell); ++rowIndex; } } } else if (delta < 0) { while (this.VisibleCellsCount > 0 && !IsCellVisible(lastVisibleCellIndex, newPos)) { RemoveVisibleCell(LastVisibleCell); --lastVisibleCellIndex; } if (VisibleCellsCount > 0) // not all rows were wiped: just prepend more visible cells at the beginning { for (int cellIndex = firstVisibleCellIndex - 1; cellIndex >= m_cellsEntries.HeadIndex && IsCellVisible(cellIndex, newPos); --cellIndex) { TableViewCell cell = TableCellForRow(cellIndex); m_visibleCells.AddFirstItem(cell); } } else { int rowIndex = FindLastVisibleRow(newPos, m_cellsEntries.HeadIndex, firstVisibleCellIndex - 1); while (rowIndex >= m_cellsEntries.HeadIndex && IsCellVisible(rowIndex, newPos)) { TableViewCell cell = TableCellForRow(rowIndex); m_visibleCells.AddFirstItem(cell); --rowIndex; } } } if (ScrollDelegate != null) { ScrollDelegate.OnTableScroll(this, oldPos); } }
private void RemoveVisibleCell(TableViewCell cell) { m_visibleCells.RemoveItem(cell); RecycleCell(cell); }