Ejemplo n.º 1
0
        private async void RestoreSortIfNeed()
        {
            if (this.InvokeRequired)
            {
                this.BeginInvoke(_RestoreSortIfNeedAction);
                return;
            }

            if (!_LastSortInfo.TryGetSorting(out var columnIndex, out var sortOrder))
            {
                DGV.ClearHeaderSortGlyphDirection();
                return;
            }

            #region [.get comparison routine.]
            var comparison = default(Comparison <DownloadRow>);
            switch (columnIndex)
            {
            case OUTPUTFILENAME_COLUMN_INDEX:
                comparison = (x, y) => string.Compare(x.OutputFileName, y.OutputFileName, true);
                break;

            case OUTPUTDIRECTORY_COLUMN_INDEX:
                comparison = (x, y) => string.Compare(x.OutputDirectory, y.OutputDirectory, true);
                break;

            case STATUS_COLUMN_INDEX:
                comparison = (x, y) => SortHelper.ToInt32(x.Status).CompareTo(SortHelper.ToInt32(y.Status));
                break;

            case DOWNLOAD_PROGRESS_COLUMN_INDEX:
                comparison = (x, y) => x.SuccessDownloadParts.CompareTo(y.SuccessDownloadParts);
                break;

            case DOWNLOAD_BYTES_COLUMN_INDEX:
                comparison = (x, y) => x.DownloadBytesLength.CompareTo(y.DownloadBytesLength);
                break;

            case APPROX_REMAINED_BYTES_COLUMN_INDEX:
                comparison = (x, y) => x.GetApproxRemainedBytes().CompareTo(y.GetApproxRemainedBytes());
                break;

            case APPROX_TOTAL_BYTES_COLUMN_INDEX:
                comparison = (x, y) => x.GetApproxTotalBytes().CompareTo(y.GetApproxTotalBytes());
                break;

            case URL_COLUMN_INDEX:
                comparison = (x, y) => string.Compare(x.Url, y.Url, true);
                break;

            case DOWNLOAD_TIME_COLUMN_INDEX:
            case APPROX_REMAINED_TIME_COLUMN_INDEX:
            case DOWNLOAD_SPEED_COLUMN_INDEX:
                //---comparison = (x, y) => x..CompareTo( y. );
                return;

            default:
                DGV.ClearHeaderSortGlyphDirection();
                throw (new NotImplementedException($"columnIndex: {columnIndex}"));
            }
            #endregion

            var coeff = ((sortOrder == SortOrder.Ascending) ? 1 : -1);
            var row   = GetSelectedDownloadRow();

            _Model.Sort(SortHelper.CreateComparison(comparison, coeff));

            DGV.SetHeaderSortGlyphDirection(columnIndex, sortOrder);
            await Task.Delay(1);

            SelectDownloadRowInternal(row, true);
        }