Changeset 211


Ignore:
Timestamp:
Apr 7, 2006, 1:09:19 PM (16 years ago)
Author:
titer
Message:

Multiple selection

Location:
trunk/macosx
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/macosx/Controller.h

    r209 r211  
    8989
    9090- (void) quitSheetDidEnd:   (NSWindow *)sheet returnCode:(int)returnCode
    91                             contextInfo:(void  *)contextInfo;
     91                            contextInfo:(void *)contextInfo;
    9292                       
     93- (void) resumeTorrent:             (id) sender;
     94- (void) resumeAllTorrents:         (id) sender;
     95- (void) resumeTorrentWithIndex:    (NSIndexSet *) indexSet;
    9396- (void) stopTorrent:               (id) sender;
    9497- (void) stopAllTorrents:           (id) sender;
    95 - (void) stopTorrentWithIndex:      (int) index;
    96 - (void) resumeTorrent:             (id) sender;
    97 - (void) resumeAllTorrents:         (id) sender;
    98 - (void) resumeTorrentWithIndex:    (int) index;
     98- (void) stopTorrentWithIndex:      (NSIndexSet *) indexSet;
    9999
    100100- (void) removeTorrent:             (id) sender;
     
    102102- (void) removeTorrentDeleteData:   (id) sender;
    103103- (void) removeTorrentDeleteBoth:   (id) sender;
    104 - (void) removeTorrentWithIndex:    (int) idx
     104- (void) removeTorrentWithIndex:    (NSIndexSet *) indexSet
    105105                deleteTorrent:      (BOOL) deleteTorrent
    106106                deleteData:         (BOOL) deleteData;
    107107               
    108108- (void) removeSheetDidEnd:(NSWindow *)sheet returnCode:(int)returnCode
    109                         contextInfo:(NSDictionary  *)dict;
    110 - (void) confirmRemoveTorrentWithIndex: (int) idx
     109                        contextInfo:(NSDictionary *)dict;
     110- (void) confirmRemoveTorrentWithIndex: (NSIndexSet *) indexSet
    111111            deleteTorrent: (BOOL) deleteTorrent
    112112            deleteData: (BOOL) deleteData;
  • trunk/macosx/Controller.m

    r209 r211  
    399399- (void) resumeTorrent: (id) sender
    400400{
    401     [self resumeTorrentWithIndex: [fTableView selectedRow]];
     401    [self resumeTorrentWithIndex: [fTableView selectedRowIndexes]];
    402402}
    403403
    404404- (void) resumeAllTorrents: (id) sender
    405405{
    406     Torrent * torrent;
    407     NSEnumerator * enumerator = [fTorrents objectEnumerator];
    408     while( ( torrent = [enumerator nextObject] ) )
    409     {
    410         [torrent start];
    411     }
     406    [self resumeTorrentWithIndex: [NSIndexSet indexSetWithIndexesInRange:
     407                                                                        NSMakeRange(0, [fTorrents count])]];
     408}
     409
     410- (void) resumeTorrentWithIndex: (NSIndexSet *) indexSet
     411{
     412        Torrent * torrent;
     413    unsigned int i;
     414       
     415    for (i = [indexSet firstIndex]; i != NSNotFound; i = [indexSet indexGreaterThanIndex: i])
     416        {
     417                torrent = [fTorrents objectAtIndex: i];
     418                [torrent start];
     419        }
     420       
    412421    [self updateUI: nil];
    413422    [self updateTorrentHistory];
    414423}
    415424
    416 - (void) resumeTorrentWithIndex: (int) idx
    417 {
    418     Torrent * torrent = [fTorrents objectAtIndex: idx];
    419     [torrent start];
     425- (void) stopTorrent: (id) sender
     426{
     427    [self stopTorrentWithIndex: [fTableView selectedRowIndexes]];
     428}
     429
     430- (void) stopAllTorrents: (id) sender
     431{
     432    [self stopTorrentWithIndex: [NSIndexSet indexSetWithIndexesInRange:
     433                                                                        NSMakeRange(0, [fTorrents count])]];
     434}
     435
     436- (void) stopTorrentWithIndex: (NSIndexSet *) indexSet
     437{
     438        Torrent * torrent;
     439    unsigned int i;
     440       
     441    for (i = [indexSet firstIndex]; i != NSNotFound; i = [indexSet indexGreaterThanIndex: i])
     442        {
     443                torrent = [fTorrents objectAtIndex: i];
     444                [torrent stop];
     445        }
     446       
    420447    [self updateUI: nil];
    421448    [self updateTorrentHistory];
    422449}
    423450
    424 - (void) stopTorrent: (id) sender
    425 {
    426     [self stopTorrentWithIndex: [fTableView selectedRow]];
    427 }
    428 
    429 - (void) stopAllTorrents: (id) sender
    430 {
    431     Torrent * torrent;
    432     NSEnumerator * enumerator = [fTorrents objectEnumerator];
    433     while( ( torrent = [enumerator nextObject] ) )
    434     {
    435         [torrent stop];
    436     }
    437     [self updateUI: nil];
    438     [self updateTorrentHistory];
    439 }
    440 
    441 - (void) stopTorrentWithIndex: (int) idx
    442 {
    443     Torrent * torrent = [fTorrents objectAtIndex: idx];
    444     [torrent stop];
    445     [self updateUI: nil];
    446     [self updateTorrentHistory];
    447 }
    448 
    449 - (void) removeTorrentWithIndex: (int) idx
     451- (void) removeTorrentWithIndex: (NSIndexSet *) indexSet
    450452                  deleteTorrent: (BOOL) deleteTorrent
    451453                     deleteData: (BOOL) deleteData
    452454{
    453     Torrent * torrent = [fTorrents objectAtIndex: idx];
    454 
    455     if( [torrent isActive] && [fDefaults boolForKey: @"CheckRemove"] )
     455        int active = 0;
     456    unsigned int i;
     457    for (i = [indexSet firstIndex]; i != NSNotFound; i = [indexSet indexGreaterThanIndex: i])
     458                if ([[fTorrents objectAtIndex: i] isActive])
     459                        active++;
     460
     461    if( active > 0 && [fDefaults boolForKey: @"CheckRemove"] )
    456462    {
    457463        NSDictionary * dict = [NSDictionary dictionaryWithObjectsAndKeys:
    458             [NSNumber numberWithInt: idx], @"Index",
     464            [fTableView selectedRowIndexes], @"Index",
    459465            [NSNumber numberWithBool: deleteTorrent], @"DeleteTorrent",
    460466            [NSNumber numberWithBool: deleteData], @"DeleteData",
     
    462468        [dict retain];
    463469
    464         NSBeginAlertSheet(@"Confirm Remove",
     470                NSString * title, * message;
     471               
     472                int selected = [fTableView numberOfSelectedRows];
     473                if (selected == 1)
     474                {
     475                        title = [NSString stringWithFormat: @"Comfirm Removal of %@",
     476                                                [[fTorrents objectAtIndex: [fTableView selectedRow]] name]];
     477                        message = @"This torrent is active. Do you really want to remove it?";
     478                }
     479                else
     480                {
     481                        title = [NSString stringWithFormat: @"Comfirm Removal of %d Torrents", active];
     482                        if (selected == active)
     483                                message = [NSString stringWithFormat:
     484                                        @"There are %d active torrents. Do you really want to remove them?", active];
     485                        else
     486                                message = [NSString stringWithFormat:
     487                                        @"There are %d torrents (%d active). Do you really want to remove them?", selected, active];
     488                }
     489
     490        NSBeginAlertSheet(title,
    465491            @"Remove", @"Cancel", nil, fWindow, self,
    466             @selector(removeSheetDidEnd:returnCode:contextInfo:),  NULL, dict,
    467             @"This torrent is active. Do you really want to remove it?");
     492            @selector(removeSheetDidEnd:returnCode:contextInfo:),
     493                        nil, dict, message);
    468494    }
    469495    else
    470496    {
    471         [self confirmRemoveTorrentWithIndex: idx
     497        [self confirmRemoveTorrentWithIndex: indexSet
    472498                deleteTorrent: deleteTorrent
    473499                deleteData: deleteData];
     
    476502
    477503- (void) removeSheetDidEnd:(NSWindow *)sheet returnCode:(int)returnCode
    478                         contextInfo:(NSDictionary  *)dict
     504                        contextInfo:(NSDictionary *)dict
    479505{
    480506    [NSApp stopModal];
     
    482508    if( returnCode == NSAlertDefaultReturn )
    483509    {
    484         [self confirmRemoveTorrentWithIndex:
    485             [[dict objectForKey:@"Index"] intValue]
     510        [self confirmRemoveTorrentWithIndex: [dict objectForKey:@"Index"]
    486511            deleteTorrent: [[dict objectForKey:@"DeleteTorrent"] boolValue]
    487512            deleteData: [[dict objectForKey:@"DeleteData"] boolValue]];
     
    491516}
    492517
    493 - (void) confirmRemoveTorrentWithIndex: (int) idx
     518- (void) confirmRemoveTorrentWithIndex: (NSIndexSet *) indexSet
    494519            deleteTorrent: (BOOL) deleteTorrent
    495520            deleteData: (BOOL) deleteData
    496521{
    497     Torrent * torrent = [fTorrents objectAtIndex: idx];
    498 
    499     /* Pause if not paused already */
    500     [torrent stop];
    501 
    502     if( deleteData )
    503     {
    504         [torrent trashData];
    505     }
    506     if( deleteTorrent )
    507     {
    508         [torrent trashTorrent];
    509     }
    510 
    511     [fTorrents removeObject: torrent];
    512     [torrent release];
     522    Torrent * torrent;
     523        unsigned int i;
     524       
     525    for (i = [indexSet lastIndex]; i != NSNotFound; i = [indexSet indexLessThanIndex: i])
     526        {
     527                torrent = [fTorrents objectAtIndex: i];
     528       
     529                [torrent stop];
     530
     531                if( deleteData )
     532                        [torrent trashData];
     533                       
     534                if( deleteTorrent )
     535                        [torrent trashTorrent];
     536               
     537                [fTorrents removeObject: torrent];
     538                [torrent release];
     539        }
    513540
    514541    [self updateUI: nil];
     
    518545- (void) removeTorrent: (id) sender
    519546{
    520     [self removeTorrentWithIndex: [fTableView selectedRow] deleteTorrent: NO deleteData: NO ];
     547    [self removeTorrentWithIndex: [fTableView selectedRowIndexes] deleteTorrent: NO deleteData: NO ];
    521548}
    522549
    523550- (void) removeTorrentDeleteFile: (id) sender
    524551{
    525     [self removeTorrentWithIndex: [fTableView selectedRow] deleteTorrent: YES deleteData: NO];
     552    [self removeTorrentWithIndex: [fTableView selectedRowIndexes] deleteTorrent: YES deleteData: NO];
    526553}
    527554
    528555- (void) removeTorrentDeleteData: (id) sender
    529556{
    530     [self removeTorrentWithIndex: [fTableView selectedRow] deleteTorrent: NO deleteData: YES];
     557    [self removeTorrentWithIndex: [fTableView selectedRowIndexes] deleteTorrent: NO deleteData: YES];
    531558}
    532559
    533560- (void) removeTorrentDeleteBoth: (id) sender
    534561{
    535     [self removeTorrentWithIndex: [fTableView selectedRow] deleteTorrent: YES deleteData: YES];
     562    [self removeTorrentWithIndex: [fTableView selectedRowIndexes] deleteTorrent: YES deleteData: YES];
    536563}
    537564
     
    550577- (void) updateInfoPanel
    551578{
    552     int row = [fTableView selectedRow];
    553 
    554     if( row < 0 )
     579        int numberSelected = [fTableView numberOfSelectedRows];
     580    if( numberSelected != 1 )
    555581    {
    556582        [fInfoImageView setImage: fAppIcon];
    557         [fInfoName setStringValue: @"No Torrent Selected"];
     583               
     584        [fInfoName setStringValue: numberSelected == 0
     585                                ? @"No Torrent Selected"
     586                                : [[NSString stringWithInt: numberSelected]
     587                                        stringByAppendingString: @" Torrents Selected"]];
     588                                       
    558589        [fInfoSize setStringValue: @""];
    559590        [fInfoTracker setStringValue: @""];
     
    569600        return;
    570601    }
     602       
     603        int row = [fTableView selectedRow];
    571604
    572605    Torrent * torrent = [fTorrents objectAtIndex: row];
     
    664697}
    665698
    666 
    667699- (void) tableView: (NSTableView *) t willDisplayCell: (id) cell
    668700    forTableColumn: (NSTableColumn *) tableColumn row: (int) rowIndex
     
    671703
    672704    if( OSX_VERSION >= 10.3 && [fWindow isKeyWindow] &&
    673             rowIndex == [fTableView selectedRow] )
     705                                        [fTableView isRowSelected: rowIndex] )
    674706        [cell setTextColor: [NSColor whiteColor]];
    675707    else
     
    762794    {
    763795        [item release];
    764         return NULL;
     796        return nil;
    765797    }
    766798
     
    808840    //enable remove item
    809841    if (action == @selector(removeTorrent:))
    810         return [fTableView selectedRow] >= 0;
     842        return [fTableView numberOfSelectedRows] > 0;
    811843
    812844    Torrent * torrent;
     
    858890    }
    859891
    860     Torrent * torrent;
    861     NSEnumerator * enumerator;
    862 
    863892    //enable resume all item
    864893    if (action == @selector(resumeAllTorrents:))
    865894    {
    866         enumerator = [fTorrents objectEnumerator];
     895                Torrent * torrent;
     896        NSEnumerator * enumerator = [fTorrents objectEnumerator];
    867897        while( ( torrent = [enumerator nextObject] ) )
    868898            if( [torrent isPaused] )
     
    874904    if (action == @selector(stopAllTorrents:))
    875905    {
    876         enumerator = [fTorrents objectEnumerator];
     906        Torrent * torrent;
     907        NSEnumerator * enumerator = [fTorrents objectEnumerator];
    877908        while( ( torrent = [enumerator nextObject] ) )
    878909            if( [torrent isActive] )
     
    881912    }
    882913
    883     int row = [fTableView selectedRow];
    884     torrent = ( row < 0 ) ? nil : [fTorrents objectAtIndex: row];
    885 
    886914    if (action == @selector(revealFromMenu:))
    887915    {
    888         return ( torrent != nil );
     916        return [fTableView numberOfSelectedRows] > 0;
    889917    }
    890918
     
    895923        || action == @selector(removeTorrentDeleteBoth:))
    896924    {
     925                BOOL active = NO;
     926                Torrent * torrent;
     927                NSIndexSet * indexSet = [fTableView selectedRowIndexes];
     928                unsigned int i;
     929               
     930                for (i = [indexSet firstIndex]; i != NSNotFound; i = [indexSet indexGreaterThanIndex: i])
     931                {
     932                        torrent = [fTorrents objectAtIndex: i];
     933                        if ([torrent isActive])
     934                        {
     935                                active = YES;
     936                                break;
     937                        }
     938                }
     939       
    897940        //append or remove ellipsis when needed
    898         if( torrent && [torrent isActive] &&
    899             [fDefaults boolForKey: @"CheckRemove"] )
     941        if( active && [fDefaults boolForKey: @"CheckRemove"] )
    900942        {
    901943            if (![[menuItem title] hasSuffix:NS_ELLIPSIS])
     
    907949                [menuItem setTitle:[[menuItem title] substringToIndex:[[menuItem title] length]-[NS_ELLIPSIS length]]];
    908950        }
    909         return ( torrent != nil );
    910     }
    911 
    912     //enable and change pause / remove item
    913     if( action == @selector(resumeTorrent:) ||
    914         action == @selector(stopTorrent:) )
    915     {
    916         if( !torrent || [torrent isActive] )
    917         {
    918             [menuItem setTitle: @"Pause"];
    919             [menuItem setAction: @selector( stopTorrent: )];
    920         }
    921         else
    922         {
    923             [menuItem setTitle: @"Resume"];
    924             [menuItem setAction: @selector( resumeTorrent: )];
    925         }
    926         return ( torrent != nil );
     951        return [fTableView numberOfSelectedRows] > 0;
     952    }
     953
     954    //enable pause item
     955    if( action == @selector(stopTorrent:) )
     956    {
     957                Torrent * torrent;
     958                NSIndexSet * indexSet = [fTableView selectedRowIndexes];
     959                unsigned int i;
     960               
     961                for (i = [indexSet firstIndex]; i != NSNotFound; i = [indexSet indexGreaterThanIndex: i])
     962                {
     963                        torrent = [fTorrents objectAtIndex: i];
     964                        if ([torrent isActive])
     965                                return YES;
     966                }
     967                return NO;
     968        }
     969       
     970        //enable resume item
     971    if( action == @selector(resumeTorrent:) )
     972    {
     973                Torrent * torrent;
     974                NSIndexSet * indexSet = [fTableView selectedRowIndexes];
     975                unsigned int i;
     976               
     977                for (i = [indexSet firstIndex]; i != NSNotFound; i = [indexSet indexGreaterThanIndex: i])
     978                {
     979                        torrent = [fTorrents objectAtIndex: i];
     980                        if ([torrent isPaused])
     981                                return YES;
     982                }
     983                return NO;
    927984    }
    928985
  • trunk/macosx/English.lproj/MainMenu.nib/info.nib

    r194 r211  
    88        <dict>
    99                <key>29</key>
    10                 <string>92 768 371 44 0 0 1280 832 </string>
     10                <string>79 778 371 44 0 0 1152 842 </string>
    1111                <key>456</key>
    1212                <string>212 488 144 118 0 0 1152 842 </string>
     
    2828        <key>IBOpenObjects</key>
    2929        <array>
    30                 <integer>273</integer>
     30                <integer>21</integer>
    3131        </array>
    3232        <key>IBSystem Version</key>
  • trunk/macosx/TorrentTableView.m

    r191 r211  
    3333}
    3434
    35 - (void) pauseOrResume: (int) row
    36 {
    37     Torrent * torrent = [fTorrents objectAtIndex: row];
    38 
    39     if( [torrent isPaused] )
    40     {
    41         [fController resumeTorrentWithIndex: row];
    42     }
    43     else if( [torrent isActive] )
    44     {
    45         [fController stopTorrentWithIndex: row];
    46     }
    47     else;
    48 }
    49 
    5035- (NSRect) pauseRectForRow: (int) row
    5136{
     
    10085             ![self pointInRevealRect: fClickPoint] )
    10186    {
    102         if( row >= 0 )
    103         {
    104             if( OSX_VERSION >= 10.3 )
    105                 [self selectRowIndexes: [NSIndexSet indexSetWithIndex: row]
    106                     byExtendingSelection: NO];
    107             else
    108                 [self selectRow: row byExtendingSelection: NO];
    109         }
    110         else
    111         {
    112             [self deselectAll: self];
    113         }
     87        [super mouseDown: e];
    11488    }
    11589    else;
     
    132106            && [self pointInPauseRect: fClickPoint] )
    133107    {
    134         [self pauseOrResume: row];
     108        torrent = [fTorrents objectAtIndex: row];
     109
     110                if( [torrent isPaused] )
     111                        [fController resumeTorrentWithIndex: [NSIndexSet indexSetWithIndex: row]];
     112                else if( [torrent isActive] )
     113                        [fController stopTorrentWithIndex: [NSIndexSet indexSetWithIndex: row]];
     114                else;
    135115    }
    136116    else if( sameRow && [self pointInRevealRect: point]
     
    140120        [torrent reveal];
    141121    }
    142     else;
     122        else;
     123   
     124        [super mouseUp: e];
    143125
    144126    fClickPoint = NSMakePoint( 0, 0 );
     
    158140        if( OSX_VERSION >= 10.3 )
    159141            [self selectRowIndexes: [NSIndexSet indexSetWithIndex: row]
    160                 byExtendingSelection: NO];
     142                byExtendingSelection: [self isRowSelected: row]];
    161143        else
    162             [self selectRow: row byExtendingSelection: NO];
     144            [self selectRow: row byExtendingSelection: [self isRowSelected: row]];
    163145        return fContextRow;
    164146    }
Note: See TracChangeset for help on using the changeset viewer.