Changeset 10459


Ignore:
Timestamp:
Apr 7, 2010, 1:37:08 PM (11 years ago)
Author:
charles
Message:

(trunk qt) #3119 "Showing torrent properties can causes rearranging of torrents if sort != sortByName" -- fixed in trunk for 2.00 by Longinus00

Location:
trunk/qt
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/qt/torrent-filter.cc

    r9868 r10459  
    8686***/
    8787
     88namespace
     89{
     90    template <typename T> int compare( const T a, const T b )
     91    {
     92        if( a < b ) return -1;
     93        if( b < a ) return 1;
     94        return 0;
     95    }
     96}
     97
    8898bool
    8999TorrentFilter :: lessThan( const QModelIndex& left, const QModelIndex& right ) const
     
    91101    const Torrent * a = sourceModel()->data( left, TorrentModel::TorrentRole ).value<const Torrent*>();
    92102    const Torrent * b = sourceModel()->data( right, TorrentModel::TorrentRole ).value<const Torrent*>();
    93     bool less;
     103    int less = 0;
    94104
    95105    switch( myPrefs.get<SortMode>(Prefs::SORT_MODE).mode() )
    96106    {
    97107        case SortMode :: SORT_BY_SIZE:
    98             less = a->sizeWhenDone() < b->sizeWhenDone();
     108            less = compare( a->sizeWhenDone(), b->sizeWhenDone() );
    99109            break;
    100110        case SortMode :: SORT_BY_ACTIVITY:
    101             less = a->downloadSpeed() + a->uploadSpeed() < b->downloadSpeed() + b->uploadSpeed();
     111            less = compare( a->downloadSpeed() + a->uploadSpeed(), b->downloadSpeed() + b->uploadSpeed() );
     112            if( !less )
     113                less = compare( a->uploadedEver(), b->uploadedEver() );
    102114            break;
    103115        case SortMode :: SORT_BY_AGE:
    104             less = a->dateAdded() < b->dateAdded();
     116            less = compare( a->dateAdded().toTime_t(), b->dateAdded().toTime_t() );
    105117            break;
    106118        case SortMode :: SORT_BY_ID:
    107             less = a->id() < b->id();
    108             break;
    109         case SortMode :: SORT_BY_RATIO:
    110             less = a->compareRatio( *b ) < 0;
    111             break;
    112         case SortMode :: SORT_BY_PROGRESS:
    113             less = a->percentDone() < b->percentDone();
    114             break;
    115         case SortMode :: SORT_BY_ETA:
    116             less = a->compareETA( *b ) < 0;
     119            less = compare( a->id(), b->id() );
    117120            break;
    118121        case SortMode :: SORT_BY_STATE:
     
    120123                less = a->hasError();
    121124            else
    122                 less = a->getActivity() < b->getActivity();
     125                less = compare( a->getActivity(), b->getActivity() );
     126            if( less )
     127                break;
     128        case SortMode :: SORT_BY_PROGRESS:
     129            less = compare( a->percentDone(), b->percentDone() );
     130            if( less )
     131                break;
     132        case SortMode :: SORT_BY_RATIO:
     133            less = a->compareRatio( *b );
     134            break;
     135        case SortMode :: SORT_BY_ETA:
     136            less = a->compareETA( *b );
    123137            break;
    124138        case SortMode :: SORT_BY_TRACKER:
    125             less = a->compareTracker( *b ) < 0;
     139            less = a->compareTracker( *b );
    126140            break;
    127141        default:
    128             less = a->name().compare( b->name(), Qt::CaseInsensitive ) > 0;
    129             break;
    130     }
    131 
    132     return less;
     142            break;
     143    }
     144    if( less == 0 )
     145        less = -a->name().compare( b->name(), Qt::CaseInsensitive );
     146    if( less == 0 )
     147        less = compare( a->hashString(), b->hashString() );
     148    return less < 0;
    133149}
    134150
  • trunk/qt/torrent.cc

    r10451 r10459  
    384384    const bool haveB( that.hasETA( ) );
    385385    if( haveA && haveB ) return getETA() - that.getETA();
    386     if( haveA ) return -1;
    387     if( haveB ) return 1;
     386    if( haveA ) return 1;
     387    if( haveB ) return -1;
    388388    return 0;
    389389}
Note: See TracChangeset for help on using the changeset viewer.