public ColumnMetaData()
 {
     Name            = new StringBuilder();
     SortState       = SortStateEnum.Unsorted;
     TextAlign       = MyGuiDrawAlignEnum.HORISONTAL_LEFT_AND_VERTICAL_CENTER;
     HeaderTextAlign = MyGuiDrawAlignEnum.HORISONTAL_LEFT_AND_VERTICAL_CENTER;
 }
        public void SortByColumn(int columnIdx, SortStateEnum?sortState = null, bool switchSort = true)
        {
            columnIdx         = MathHelper.Clamp(columnIdx, 0, m_columnsMetaData.Count - 1);
            m_sortColumn      = columnIdx;
            m_sortColumnState = sortState.HasValue ? sortState.Value : m_sortColumnState;
            var colMeta           = m_columnsMetaData[columnIdx];
            var originalSortState = colMeta.SortState;

            m_columnsMetaData[m_lastSortedColumnIdx].SortState = SortStateEnum.Unsorted;

            var comparison = colMeta.AscendingComparison;

            if (comparison == null)
            {
                return;
            }

            SortStateEnum targetSortState = originalSortState;

            if (switchSort)
            {
                targetSortState = ((originalSortState == SortStateEnum.Ascending)
                    ? SortStateEnum.Descending
                    : SortStateEnum.Ascending);
            }

            if (sortState.HasValue)
            {
                targetSortState = sortState.Value;
            }
            else
            if (m_sortColumnState.HasValue)
            {
                targetSortState = m_sortColumnState.Value;
            }


            if (targetSortState == SortStateEnum.Ascending)
            {
                m_rows.Sort((a, b) => comparison(a.Cells[columnIdx], b.Cells[columnIdx]));
            }
            else
            {
                m_rows.Sort((a, b) => comparison(b.Cells[columnIdx], a.Cells[columnIdx]));
            }

            m_lastSortedColumnIdx = columnIdx;
            colMeta.SortState     = targetSortState;
            SelectedRowIndex      = null;
        }
 public ColumnMetaData()
 {
     Name = new StringBuilder();
     SortState = SortStateEnum.Unsorted;
     TextAlign = MyGuiDrawAlignEnum.HORISONTAL_LEFT_AND_VERTICAL_CENTER;
     HeaderTextAlign = MyGuiDrawAlignEnum.HORISONTAL_LEFT_AND_VERTICAL_CENTER;
 }
        public void SortByColumn(int columnIdx, SortStateEnum? sortState = null, bool switchSort = true)
        {
            columnIdx = MathHelper.Clamp(columnIdx, 0, m_columnsMetaData.Count - 1);
            m_sortColumn = columnIdx;
            m_sortColumnState = sortState.HasValue ? sortState.Value : m_sortColumnState;            
            var colMeta = m_columnsMetaData[columnIdx];
            var originalSortState = colMeta.SortState;

            m_columnsMetaData[m_lastSortedColumnIdx].SortState = SortStateEnum.Unsorted;

            var comparison = colMeta.AscendingComparison;
            if (comparison == null)
                return;

            SortStateEnum targetSortState = originalSortState;

            if (switchSort)
            {
                targetSortState = ((originalSortState == SortStateEnum.Ascending)
                    ? SortStateEnum.Descending
                    : SortStateEnum.Ascending);
            }

            if (sortState.HasValue)
                targetSortState = sortState.Value;
            else
                if (m_sortColumnState.HasValue)
                    targetSortState = m_sortColumnState.Value;


            if (targetSortState == SortStateEnum.Ascending)
                m_rows.Sort((a, b) => comparison(a.Cells[columnIdx], b.Cells[columnIdx]));
            else
                m_rows.Sort((a, b) => comparison(b.Cells[columnIdx], a.Cells[columnIdx]));

            m_lastSortedColumnIdx = columnIdx;
            colMeta.SortState = targetSortState;
            SelectedRowIndex = null;
        }