Changeset 502


Ignore:
Timestamp:
Jul 2, 2006, 9:46:18 PM (16 years ago)
Author:
livings124
Message:

Make row dragging work with multiple rows. The order values will all properly adjust too.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/macosx/Controller.m

    r501 r502  
    11831183    else
    11841184    {
     1185        #warning redo selected torrents
     1186   
    11851187        NSIndexSet * indexes = [NSKeyedUnarchiver unarchiveObjectWithData:
    11861188                                [pasteboard dataForType: TorrentTableViewDataType]];
    1187         int oldRow = [indexes firstIndex];
    1188        
    1189         //move torrent in array
    1190         if (newRow == oldRow)
    1191             return;
    1192        
    1193         Torrent * torrent = [[fTorrents objectAtIndex: oldRow] retain];
    1194        
    1195         int low, high;
    1196         if (newRow > oldRow)
    1197         {
    1198             newRow--;
    1199            
    1200             low = oldRow;
    1201             high = newRow;
    1202         }
    1203         else
    1204         {
     1189       
     1190        //move torrent in array
     1191        NSArray * movingTorrents = [[self torrentsAtIndexes: indexes] retain];
     1192        [fTorrents removeObjectsInArray: movingTorrents];
     1193       
     1194        //determine the insertion index now that transfers to move have been removed
     1195        int i, decrease = 0;
     1196        for (i = [indexes firstIndex]; i < newRow && i != NSNotFound; i = [indexes indexGreaterThanIndex: i])
     1197            decrease++;
     1198       
     1199        //insert objects at new location
     1200        for (i = 0; i < [movingTorrents count]; i++)
     1201            [fTorrents insertObject: [movingTorrents objectAtIndex: i] atIndex: newRow - decrease + i];
     1202       
     1203        [movingTorrents release];
     1204       
     1205        //redo order values
     1206        int low = [indexes firstIndex], high = [indexes lastIndex];
     1207        if (newRow < low)
    12051208            low = newRow;
    1206             high = oldRow;
    1207         }
    1208        
    1209         [fTorrents removeObjectAtIndex: oldRow];
    1210         [fTorrents insertObject: torrent atIndex: newRow];
    1211         [torrent release];
    1212        
    1213         //redo order values
    1214         int i;
     1209        else if (newRow > high + 1)
     1210            high = newRow - 1;
     1211        else;
     1212       
    12151213        for (i = low; i <= high; i++)
    12161214            [[fTorrents objectAtIndex: i] setOrderValue: i];
Note: See TracChangeset for help on using the changeset viewer.