Changeset 2698


Ignore:
Timestamp:
Aug 10, 2007, 3:20:01 AM (15 years ago)
Author:
livings124
Message:

use the actual Torrent class to access values for the torrent cell class, rather than creating a dictionary and using that on each reload

Location:
trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Transmission.xcodeproj/project.pbxproj

    r2697 r2698  
    314314                4DFBC2DE09C0970D00D5C571 /* Torrent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Torrent.m; path = macosx/Torrent.m; sourceTree = "<group>"; };
    315315                8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; name = Info.plist; path = macosx/Info.plist; sourceTree = "<group>"; };
    316                 8D1107320486CEB800E47090 /* Transmission.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = Transmission.app; sourceTree = BUILT_PRODUCTS_DIR; };
     316                8D1107320486CEB800E47090 /* Transmission.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Transmission.app; sourceTree = BUILT_PRODUCTS_DIR; };
    317317                A200B8390A2263BA007BBB1E /* InfoWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = InfoWindowController.h; path = macosx/InfoWindowController.h; sourceTree = "<group>"; };
    318318                A200B83A0A2263BA007BBB1E /* InfoWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = InfoWindowController.m; path = macosx/InfoWindowController.m; sourceTree = "<group>"; };
  • trunk/macosx/Controller.m

    r2697 r2698  
    21172117}
    21182118
    2119 - (id) tableView: (NSTableView *) tableView objectValueForTableColumn: (NSTableColumn *) tableColumn row: (int) row
     2119/*- (id) tableView: (NSTableView *) tableView objectValueForTableColumn: (NSTableColumn *) tableColumn row: (int) row
    21202120{
    21212121    return [[fDisplayedTorrents objectAtIndex: row] infoForCurrentView];
    2122 }
     2122}*/
    21232123
    21242124- (BOOL) tableView: (NSTableView *) tableView writeRowsWithIndexes: (NSIndexSet *) indexes
  • trunk/macosx/Torrent.h

    r2654 r2698  
    8686
    8787- (void) update;
    88 - (NSDictionary *) infoForCurrentView;
    8988
    9089- (void) startTransfer;
     
    153152- (float) progress;
    154153- (float) progressDone;
     154- (float) progressLeft;
    155155- (int) eta;
    156156
     
    224224- (NSNumber *) ratioSortKey;
    225225
     226- (NSImage *) advancedBar;
     227
    226228- (int) torrentID;
    227229- (const tr_info_t *) torrentInfo;
  • trunk/macosx/Torrent.m

    r2670 r2698  
    5252            withParent: (NSMutableDictionary *) parent previousPath: (NSString *) previousPath
    5353            flatList: (NSMutableArray *) flatList fileSize: (uint64_t) size index: (int) index;
    54 - (NSImage *) advancedBar;
    5554
    5655- (void) quickPause;
     
    486485}
    487486
    488 - (NSDictionary *) infoForCurrentView
    489 {
    490     NSMutableDictionary * info = [NSMutableDictionary dictionaryWithObjectsAndKeys:
    491                                     [self name], @"Name",
    492                                     [NSNumber numberWithFloat: [self progress]], @"Progress",
    493                                     [NSNumber numberWithFloat: (float)fStat->left/[self size]], @"Left",
    494                                     [NSNumber numberWithBool: [self isActive]], @"Active",
    495                                     [NSNumber numberWithBool: [self isSeeding]], @"Seeding",
    496                                     [NSNumber numberWithBool: [self isChecking]], @"Checking",
    497                                     [NSNumber numberWithBool: fWaitToStart], @"Waiting",
    498                                     [NSNumber numberWithBool: [self isError]], @"Error", nil];
    499    
    500     if ([self isSeeding])
    501         [info setObject: [NSNumber numberWithFloat: [self progressStopRatio]] forKey: @"ProgressStopRatio"];
    502    
    503     if (![fDefaults boolForKey: @"SmallView"])
    504     {
    505         [info setObject: [self iconFlipped] forKey: @"Icon"];
    506         [info setObject: [self progressString] forKey: @"ProgressString"];
    507         [info setObject: [self statusString] forKey: @"StatusString"];
    508     }
    509     else
    510     {
    511         [info setObject: [self iconSmall] forKey: @"Icon"];
    512         [info setObject: [self remainingTimeString] forKey: @"RemainingTimeString"];
    513         [info setObject: [self shortStatusString] forKey: @"ShortStatusString"];
    514     }
    515    
    516     if ([fDefaults boolForKey: @"UseAdvancedBar"])
    517         [info setObject: [self advancedBar] forKey: @"AdvancedBar"];
    518    
    519     return info;
    520 }
    521 
    522487- (void) startTransfer
    523488{
     
    1021986}
    1022987
     988- (float) progressLeft
     989{
     990    return fStat->left/[self size];
     991}
     992
    1023993- (int) eta
    1024994{
     
    14491419{
    14501420    return [NSNumber numberWithFloat: [self ratio]];
     1421}
     1422
     1423#warning move?
     1424- (NSImage *) advancedBar
     1425{
     1426    uint32_t * p;
     1427    uint8_t * bitmapData = [fBitmap bitmapData];
     1428    int bytesPerRow = [fBitmap bytesPerRow];
     1429   
     1430    int pieceCount = [self pieceCount];
     1431    int8_t * piecesAvailablity = malloc(pieceCount);
     1432    [self getAvailability: piecesAvailablity size: pieceCount];
     1433   
     1434    //lines 2 to 14: blue, green, or gray depending on piece availability
     1435    int i, h, index = 0;
     1436    float increment = (float)pieceCount / MAX_PIECES, indexValue = 0;
     1437    uint32_t color;
     1438    BOOL change;
     1439    for (i = 0; i < MAX_PIECES; i++)
     1440    {
     1441        change = NO;
     1442        if (piecesAvailablity[index] < 0)
     1443        {
     1444            if (fPieces[i] != -1)
     1445            {
     1446                color = kBlue;
     1447                fPieces[i] = -1;
     1448                change = YES;
     1449            }
     1450        }
     1451        else if (piecesAvailablity[index] == 0)
     1452        {
     1453            if (fPieces[i] != 0)
     1454            {
     1455                color = kGray;
     1456                fPieces[i] = 0;
     1457                change = YES;
     1458            }
     1459        }
     1460        else if (piecesAvailablity[index] <= 4)
     1461        {
     1462            if (fPieces[i] != 1)
     1463            {
     1464                color = kGreen1;
     1465                fPieces[i] = 1;
     1466                change = YES;
     1467            }
     1468        }
     1469        else if (piecesAvailablity[index] <= 8)
     1470        {
     1471            if (fPieces[i] != 2)
     1472            {
     1473                color = kGreen2;
     1474                fPieces[i] = 2;
     1475                change = YES;
     1476            }
     1477        }
     1478        else
     1479        {
     1480            if (fPieces[i] != 3)
     1481            {
     1482                color = kGreen3;
     1483                fPieces[i] = 3;
     1484                change = YES;
     1485            }
     1486        }
     1487       
     1488        if (change)
     1489        {
     1490            //point to pixel (i, 2) and draw "vertically"
     1491            p = (uint32_t *)(bitmapData + 2 * bytesPerRow) + i;
     1492            for (h = 2; h < BAR_HEIGHT; h++)
     1493            {
     1494                p[0] = color;
     1495                p = (uint32_t *)((uint8_t *)p + bytesPerRow);
     1496            }
     1497        }
     1498       
     1499        indexValue += increment;
     1500        index = (int)indexValue;
     1501    }
     1502   
     1503    //determine percentage finished and available
     1504    int have = rintf((float)MAX_PIECES * [self progress]), avail;
     1505    if ([self progress] >= 1.0 || ![self isActive] || [self totalPeersConnected] <= 0)
     1506        avail = 0;
     1507    else
     1508    {
     1509        float * piecesFinished = malloc(pieceCount * sizeof(float));
     1510        [self getAmountFinished: piecesFinished size: pieceCount];
     1511       
     1512        float available = 0;
     1513        for (i = 0; i < pieceCount; i++)
     1514            if (piecesAvailablity[i] > 0)
     1515                available += 1.0 - piecesFinished[i];
     1516       
     1517        avail = rintf(MAX_PIECES * available / (float)pieceCount);
     1518        if (have + avail > MAX_PIECES) //case if both end in .5 and all pieces are available
     1519            avail--;
     1520       
     1521        free(piecesFinished);
     1522    }
     1523   
     1524    free(piecesAvailablity);
     1525   
     1526    //first two lines: dark blue to show progression, green to show available
     1527    p = (uint32_t *)bitmapData;
     1528    for (i = 0; i < have; i++)
     1529    {
     1530        p[i] = kBlue2;
     1531        p[i + bytesPerRow / 4] = kBlue2;
     1532    }
     1533    for (; i < avail + have; i++)
     1534    {
     1535        p[i] = kGreen3;
     1536        p[i + bytesPerRow / 4] = kGreen3;
     1537    }
     1538    for (; i < MAX_PIECES; i++)
     1539    {
     1540        p[i] = kWhite;
     1541        p[i + bytesPerRow / 4] = kWhite;
     1542    }
     1543   
     1544    //actually draw image
     1545    NSImage * bar = [[NSImage alloc] initWithSize: [fBitmap size]];
     1546    [bar addRepresentation: fBitmap];
     1547    [bar setScalesWhenResized: YES];
     1548   
     1549    return [bar autorelease];
    14511550}
    14521551
     
    16811780}
    16821781
    1683 #warning move?
    1684 - (NSImage *) advancedBar
    1685 {
    1686     uint32_t * p;
    1687     uint8_t * bitmapData = [fBitmap bitmapData];
    1688     int bytesPerRow = [fBitmap bytesPerRow];
    1689    
    1690     int pieceCount = [self pieceCount];
    1691     int8_t * piecesAvailablity = malloc(pieceCount);
    1692     [self getAvailability: piecesAvailablity size: pieceCount];
    1693    
    1694     //lines 2 to 14: blue, green, or gray depending on piece availability
    1695     int i, h, index = 0;
    1696     float increment = (float)pieceCount / (float)MAX_PIECES, indexValue = 0;
    1697     uint32_t color;
    1698     BOOL change;
    1699     for (i = 0; i < MAX_PIECES; i++)
    1700     {
    1701         change = NO;
    1702         if (piecesAvailablity[index] < 0)
    1703         {
    1704             if (fPieces[i] != -1)
    1705             {
    1706                 color = kBlue;
    1707                 fPieces[i] = -1;
    1708                 change = YES;
    1709             }
    1710         }
    1711         else if (piecesAvailablity[index] == 0)
    1712         {
    1713             if (fPieces[i] != 0)
    1714             {
    1715                 color = kGray;
    1716                 fPieces[i] = 0;
    1717                 change = YES;
    1718             }
    1719         }
    1720         else if (piecesAvailablity[index] <= 4)
    1721         {
    1722             if (fPieces[i] != 1)
    1723             {
    1724                 color = kGreen1;
    1725                 fPieces[i] = 1;
    1726                 change = YES;
    1727             }
    1728         }
    1729         else if (piecesAvailablity[index] <= 8)
    1730         {
    1731             if (fPieces[i] != 2)
    1732             {
    1733                 color = kGreen2;
    1734                 fPieces[i] = 2;
    1735                 change = YES;
    1736             }
    1737         }
    1738         else
    1739         {
    1740             if (fPieces[i] != 3)
    1741             {
    1742                 color = kGreen3;
    1743                 fPieces[i] = 3;
    1744                 change = YES;
    1745             }
    1746         }
    1747        
    1748         if (change)
    1749         {
    1750             //point to pixel (i, 2) and draw "vertically"
    1751             p = (uint32_t *)(bitmapData + 2 * bytesPerRow) + i;
    1752             for (h = 2; h < BAR_HEIGHT; h++)
    1753             {
    1754                 p[0] = color;
    1755                 p = (uint32_t *)((uint8_t *)p + bytesPerRow);
    1756             }
    1757         }
    1758        
    1759         indexValue += increment;
    1760         index = (int)indexValue;
    1761     }
    1762    
    1763     //determine percentage finished and available
    1764     int have = rintf((float)MAX_PIECES * [self progress]), avail;
    1765     if ([self progress] >= 1.0 || ![self isActive] || [self totalPeersConnected] <= 0)
    1766         avail = 0;
    1767     else
    1768     {
    1769         float * piecesFinished = malloc(pieceCount * sizeof(float));
    1770         [self getAmountFinished: piecesFinished size: pieceCount];
    1771        
    1772         float available = 0;
    1773         for (i = 0; i < pieceCount; i++)
    1774             if (piecesAvailablity[i] > 0)
    1775                 available += 1.0 - piecesFinished[i];
    1776        
    1777         avail = rintf((float)MAX_PIECES * available / (float)pieceCount);
    1778         if (have + avail > MAX_PIECES) //case if both end in .5 and all pieces are available
    1779             avail--;
    1780        
    1781         free(piecesFinished);
    1782     }
    1783    
    1784     free(piecesAvailablity);
    1785    
    1786     //first two lines: dark blue to show progression, green to show available
    1787     p = (uint32_t *)bitmapData;
    1788     for (i = 0; i < have; i++)
    1789     {
    1790         p[i] = kBlue2;
    1791         p[i + bytesPerRow / 4] = kBlue2;
    1792     }
    1793     for (; i < avail + have; i++)
    1794     {
    1795         p[i] = kGreen3;
    1796         p[i + bytesPerRow / 4] = kGreen3;
    1797     }
    1798     for (; i < MAX_PIECES; i++)
    1799     {
    1800         p[i] = kWhite;
    1801         p[i + bytesPerRow / 4] = kWhite;
    1802     }
    1803    
    1804     //actually draw image
    1805     NSImage * bar = [[NSImage alloc] initWithSize: [fBitmap size]];
    1806     [bar addRepresentation: fBitmap];
    1807     [bar setScalesWhenResized: YES];
    1808    
    1809     return [bar autorelease];
    1810 }
    1811 
    18121782- (void) quickPause
    18131783{
  • trunk/macosx/TorrentCell.m

    r2675 r2698  
    7676- (void) buildSimpleBar: (float) width point: (NSPoint) point
    7777{
    78     NSDictionary * info = [self objectValue];
     78    Torrent * torrent = [self representedObject];
    7979   
    8080    NSRect barBounds, completeBounds;
     
    8585    completeBounds = barBounds;
    8686   
    87     float progress = [[info objectForKey: @"Progress"] floatValue];
     87    float progress = [torrent progress];
    8888    completeBounds.size.width = progress * width;
    8989   
     
    9595        [fWhiteGradient fillRect: barBounds angle: -90];
    9696       
    97         left = [[info objectForKey: @"Left"] floatValue];
     97        left = [torrent progressLeft];
    9898        if ((progress + left) < 1.0)
    9999        {
     
    108108    }
    109109   
    110     if ([[info objectForKey: @"Active"] boolValue])
    111     {
    112         if ([[info objectForKey: @"Checking"] boolValue])
     110    if ([torrent isActive])
     111    {
     112        if ([torrent isChecking])
    113113        {
    114114            if (!fYellowGradient)
     
    116116            [fYellowGradient fillRect: completeBounds angle: -90];
    117117        }
    118         else if ([[info objectForKey: @"Seeding"] boolValue])
     118        else if ([torrent isSeeding])
    119119        {
    120120            NSRect ratioBounds = completeBounds;
    121             ratioBounds.size.width *= [[info objectForKey: @"ProgressStopRatio"] floatValue];
     121            ratioBounds.size.width *= [torrent progressStopRatio];
    122122           
    123123            if (ratioBounds.size.width < completeBounds.size.width)
     
    141141    else
    142142    {
    143         if ([[info objectForKey: @"Waiting"] boolValue])
     143        if ([torrent waitingToStart])
    144144        {
    145145            if (left == INVALID)
    146                 left = [[info objectForKey: @"Left"] floatValue];
     146                left = [torrent progressLeft];
    147147           
    148148            if (left <= 0.0)
     
    173173- (void) buildAdvancedBar: (float) width point: (NSPoint) point
    174174{
    175     NSDictionary * info = [self objectValue];
     175    Torrent * torrent = [self representedObject];
    176176   
    177177    //place actual advanced bar
    178     NSImage * image = [info objectForKey: @"AdvancedBar"];
     178    NSImage * image = [torrent advancedBar];
    179179    [image setSize: NSMakeSize(width, BAR_HEIGHT)];
    180180    [image compositeToPoint: point operation: NSCompositeSourceOver];
     
    212212    const float LINE_PADDING = 2.0, EXTRA_NAME_SHIFT = 1.0; //standard padding is defined in TorrentCell.h
    213213   
    214     NSDictionary * info = [self objectValue];
     214    Torrent * torrent = [self representedObject];
    215215   
    216216    if (![fDefaults boolForKey: @"SmallView"]) //regular size
    217217    {
    218218        //icon
    219         NSImage * icon = [info objectForKey: @"Icon"];
     219        NSImage * icon = [torrent iconFlipped];
    220220        NSSize iconSize = [icon size];
    221221       
     
    227227       
    228228        //error badge
    229         if ([[info objectForKey: @"Error"] boolValue])
     229        if ([torrent isError])
    230230        {
    231231            if (!fErrorImage)
     
    248248        pen.y = cellFrame.origin.y + PADDING;
    249249       
    250         NSString * nameString = [info objectForKey: @"Name"];
     250        NSString * nameString = [torrent name];
    251251        NSSize nameSize = [nameString sizeWithAttributes: nameAttributes];
    252252        [nameString drawInRect: NSMakeRect(pen.x, pen.y, mainWidth, nameSize.height) withAttributes: nameAttributes];
     
    255255        pen.y += nameSize.height + LINE_PADDING - 1.0;
    256256       
    257         NSString * progressString = [info objectForKey: @"ProgressString"];
     257        NSString * progressString = [torrent progressString];
    258258        NSSize progressSize = [progressString sizeWithAttributes: statusAttributes];
    259259        [progressString drawInRect: NSMakeRect(pen.x, pen.y, mainWidth, progressSize.height) withAttributes: statusAttributes];
     
    274274        pen.y += LINE_PADDING;
    275275       
    276         NSString * statusString = [info objectForKey: @"StatusString"];
     276        NSString * statusString = [torrent statusString];
    277277        NSSize statusSize = [statusString sizeWithAttributes: statusAttributes];
    278278        [statusString drawInRect: NSMakeRect(pen.x, pen.y, mainWidth, statusSize.height) withAttributes: statusAttributes];
     
    282282        //icon
    283283        NSImage * icon;
    284         if ([[info objectForKey: @"Error"] boolValue])
     284        if ([torrent isError])
    285285        {
    286286            if (!fErrorImage)
     
    292292        }
    293293        else
    294             icon = [info objectForKey: @"Icon"];
     294            icon = [torrent iconSmall];
    295295        NSSize iconSize = [icon size];
    296296       
     
    308308        pen.y = cellFrame.origin.y + LINE_PADDING;
    309309
    310         NSString * nameString = [info objectForKey: @"Name"];
     310        NSString * nameString = [torrent name];
    311311        NSSize nameSize = [nameString sizeWithAttributes: nameAttributes];
    312312       
    313         NSString * statusString = ![fDefaults boolForKey: @"SmallStatusRegular"] && [[info objectForKey: @"Active"] boolValue]
    314                                         ? [info objectForKey: @"RemainingTimeString"]
    315                                         : [info objectForKey: @"ShortStatusString"];
     313        NSString * statusString = ![fDefaults boolForKey: @"SmallStatusRegular"] && [torrent isActive]
     314                                    ? [torrent remainingTimeString] : [torrent shortStatusString];
    316315        NSSize statusSize = [statusString sizeWithAttributes: statusAttributes];
    317316       
  • trunk/macosx/TorrentTableView.m

    r2677 r2698  
    7777       
    7878        fDefaults = [NSUserDefaults standardUserDefaults];
     79       
     80        [self setDelegate: self];
    7981    }
    8082   
     
    101103{
    102104    fTorrents = torrents;
     105}
     106
     107- (void) tableView: (NSTableView *) tableView willDisplayCell: (id) cell
     108        forTableColumn: (NSTableColumn *) tableColumn row: (int) row
     109{
     110    [cell setRepresentedObject: [fTorrents objectAtIndex: row]];
    103111}
    104112
Note: See TracChangeset for help on using the changeset viewer.