Changeset 13127


Ignore:
Timestamp:
Jan 3, 2012, 1:53:53 AM (9 years ago)
Author:
livings124
Message:

#4694 Don't call reloadData on the main table on each updateUI call (and each sort) if the order hasn't changed; instead call setNeedsDisplay:. Don't call reloadData when toggling the main window per-torrent status string

Location:
trunk/macosx
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/macosx/Controller.h

    r13108 r13127  
    191191
    192192- (void) sortTorrents;
    193 - (void) sortTorrentsIgnoreSelected;
     193- (void) sortTorrentsIgnoreSelected: (BOOL *) changed;
    194194- (void) setSort: (id) sender;
    195195- (void) setSortByGroup: (id) sender;
  • trunk/macosx/Controller.m

    r13126 r13127  
    16171617    CGFloat dlRate = 0.0, ulRate = 0.0;
    16181618    BOOL completed = NO;
     1619    #warning use a block to do in parallel?
    16191620    for (Torrent * torrent in fTorrents)
    16201621    {
     
    17181719}
    17191720
    1720 #warning remove?
    17211721- (void) torrentRestartedDownloading: (NSNotification *) notification
    17221722{
     
    18331833    NSArray * selectedValues = [fTableView selectedValues];
    18341834   
    1835     [self sortTorrentsIgnoreSelected]; //actually sort
    1836    
    1837     [fTableView selectValues: selectedValues];
    1838 }
    1839 
    1840 - (void) sortTorrentsIgnoreSelected
    1841 {
     1835    BOOL changed;
     1836    [self sortTorrentsIgnoreSelected: &changed]; //actually sort
     1837   
     1838    if (changed)
     1839    {
     1840        [fTableView reloadData];
     1841        [fTableView selectValues: selectedValues];
     1842    }
     1843    else
     1844        [fTableView setNeedsDisplay: YES];
     1845}
     1846
     1847- (void) sortTorrentsIgnoreSelected: (BOOL *) changed
     1848{
     1849    if (changed)
     1850        *changed = NO;
     1851   
    18421852    NSString * sortType = [fDefaults stringForKey: @"Sort"];
    18431853   
     
    18551865                            * ratioDescriptor = [NSSortDescriptor sortDescriptorWithKey: @"ratio" ascending: !asc];
    18561866           
    1857             descriptors = [[NSArray alloc] initWithObjects: stateDescriptor, progressDescriptor, ratioDescriptor,
    1858                                                                 nameDescriptor, nil];
     1867            descriptors = [[NSArray alloc] initWithObjects: stateDescriptor, progressDescriptor, ratioDescriptor, nameDescriptor, nil];
    18591868        }
    18601869        else if ([sortType isEqualToString: SORT_PROGRESS])
     
    18641873                            * ratioDescriptor = [NSSortDescriptor sortDescriptorWithKey: @"ratio" ascending: asc];
    18651874           
    1866             descriptors = [[NSArray alloc] initWithObjects: progressDescriptor, ratioProgressDescriptor, ratioDescriptor,
    1867                                                                 nameDescriptor, nil];
     1875            descriptors = [[NSArray alloc] initWithObjects: progressDescriptor, ratioProgressDescriptor, ratioDescriptor, nameDescriptor, nil];
    18681876        }
    18691877        else if ([sortType isEqualToString: SORT_TRACKER])
     
    18991907        {
    19001908            for (TorrentGroup * group in fDisplayedTorrents)
    1901                 [[group torrents] sortUsingDescriptors: descriptors];
     1909            {
     1910                if (changed)
     1911                {
     1912                    NSArray * sorted = [[group torrents] sortedArrayUsingDescriptors: descriptors];
     1913                    if (![[group torrents] isEqualToArray: sorted])
     1914                    {
     1915                        [[group torrents] setArray: sorted];
     1916                        *changed = YES;
     1917                    }
     1918                }
     1919                else
     1920                    [[group torrents] sortUsingDescriptors: descriptors];
     1921            }
    19021922        }
    19031923        else
    1904             [fDisplayedTorrents sortUsingDescriptors: descriptors];
     1924        {
     1925            if (changed)
     1926            {
     1927                NSArray * sorted = [fDisplayedTorrents sortedArrayUsingDescriptors: descriptors];
     1928                if ((*changed = ![fDisplayedTorrents isEqualToArray: sorted]))
     1929                    [fDisplayedTorrents setArray: sorted];
     1930            }
     1931            else
     1932                [fDisplayedTorrents sortUsingDescriptors: descriptors];
     1933        }
    19051934       
    19061935        [descriptors release];
    19071936    }
    1908    
    1909     [fTableView reloadData];
    19101937}
    19111938
     
    20932120   
    20942121    //actually sort
    2095     [self sortTorrentsIgnoreSelected];
     2122    [self sortTorrentsIgnoreSelected: NULL];
     2123    [fTableView reloadData];
    20962124   
    20972125    //reset expanded/collapsed rows
     
    27812809        [fDefaults setBool: ![fDefaults boolForKey: @"DisplayStatusProgressSelected"] forKey: @"DisplayStatusProgressSelected"];
    27822810   
    2783     [fTableView reloadData];
     2811    [fTableView setNeedsDisplay: YES];
    27842812}
    27852813
  • trunk/macosx/GroupsPrefsController.m

    r13125 r13127  
    209209                    --row;
    210210                [fTableView selectRowIndexes: [NSIndexSet indexSetWithIndex: row] byExtendingSelection: NO];
     211                [fTableView scrollRowToVisible: row];
    211212            }
    212             [fTableView scrollRowToVisible: row];
    213213           
    214214            break;
Note: See TracChangeset for help on using the changeset viewer.