Changeset 3698


Ignore:
Timestamp:
Nov 4, 2007, 3:01:34 PM (15 years ago)
Author:
livings124
Message:

by popular demand the return of the advanced bar (now Pieces Bar)

Location:
trunk/macosx
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/macosx/Controller.h

    r3660 r3698  
    208208
    209209- (void) toggleSmallView: (id) sender;
     210- (void) togglePiecesBar: (id) sender;
    210211
    211212- (void) toggleStatusBar: (id) sender;
  • trunk/macosx/Controller.m

    r3695 r3698  
    24962496}
    24972497
     2498- (void) togglePiecesBar: (id) sender
     2499{
     2500    [fDefaults setBool: ![fDefaults boolForKey: @"PiecesBar"] forKey: @"PiecesBar"];
     2501    [fTableView reloadData];
     2502}
     2503
    24982504- (void) toggleStatusBar: (id) sender
    24992505{
     
    28552861   
    28562862    //enable sort and advanced bar items
    2857     if (action == @selector(setSort:) /*|| action == @selector(toggleAdvancedBar:) ||*/)
     2863    if (action == @selector(setSort:))
    28582864        return [fWindow isVisible];
    28592865   
     
    28612867    {
    28622868        [menuItem setState: [fDefaults boolForKey: @"SmallView"] ? NSOnState : NSOffState];
     2869        return [fWindow isVisible];
     2870    }
     2871   
     2872    if (action == @selector(togglePiecesBar:))
     2873    {
     2874        [menuItem setState: [fDefaults boolForKey: @"PiecesBar"] ? NSOnState : NSOffState];
    28632875        return [fWindow isVisible];
    28642876    }
  • trunk/macosx/Defaults.plist

    r3613 r3698  
    11<?xml version="1.0" encoding="UTF-8"?>
    2 <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
     2<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    33<plist version="1.0">
    44<dict>
     
    7171        <key>NatTraversal</key>
    7272        <true/>
     73        <key>PiecesBar</key>
     74        <false/>
    7375        <key>PiecesViewShowAvailability</key>
    7476        <false/>
  • trunk/macosx/English.lproj/MainMenu.nib/classes.nib

    r3660 r3698  
    147147                                <string>id</string>
    148148                                <key>toggleFilterBar</key>
     149                                <string>id</string>
     150                                <key>togglePiecesBar</key>
    149151                                <string>id</string>
    150152                                <key>toggleSmallView</key>
  • trunk/macosx/English.lproj/MainMenu.nib/info.nib

    r3664 r3698  
    1111        <key>IBOpenObjects</key>
    1212        <array>
    13                 <integer>236</integer>
     13                <integer>2185</integer>
    1414        </array>
    1515        <key>IBSystem Version</key>
  • trunk/macosx/TorrentCell.h

    r3195 r3698  
    3535    CTGradient * fWhiteGradient, * fGrayGradient, * fLightGrayGradient, * fBlueGradient, * fDarkBlueGradient,
    3636                * fGreenGradient, * fLightGreenGradient, * fDarkGreenGradient, * fYellowGradient, * fTransparentGradient;
     37   
     38    NSBitmapImageRep * fBitmap;
     39    int8_t * fPieces;
    3740}
    3841
  • trunk/macosx/TorrentCell.m

    r3664 r3698  
    4949#define PADDING_BETWEEN_BAR_AND_STATUS 2.0
    5050
     51#define MAX_PIECES 324
     52#define BLANK_PIECE -99
     53
    5154@interface TorrentCell (Private)
    5255
     56// Used to optimize drawing. They contain packed RGBA pixels for every color needed.
     57static uint32_t kBlue   = OSSwapBigToHostConstInt32(0x50A0FFFF), //80, 160, 255
     58                kBlue1  = OSSwapBigToHostConstInt32(0x84FFFFFF), //204, 255, 255
     59                kBlue2  = OSSwapBigToHostConstInt32(0x6BFFFFFF), //153, 255, 255
     60                kBlue3  = OSSwapBigToHostConstInt32(0x6B84FFFF), //153, 204, 255
     61                kBlue4  = OSSwapBigToHostConstInt32(0x426BFFFF), //102, 153, 255
     62                kGray   = OSSwapBigToHostConstInt32(0x969696FF); //150, 150, 150
     63
    5364- (void) drawBar: (NSRect) barRect;
     65- (void) drawRegularBar: (NSRect) barRect;
     66- (void) drawPiecesBar: (NSRect) barRect;
    5467
    5568- (NSRect) rectForMinimalStatusWithString: (NSAttributedString *) string inBounds: (NSRect) bounds;
     
    89102}
    90103
     104- (id) copyWithZone: (NSZone *) zone
     105{
     106    TorrentCell * copy = [super copyWithZone: zone];
     107   
     108    copy->fBitmap = nil;
     109    copy->fPieces = NULL;
     110   
     111    return copy;
     112}
     113
     114- (void) dealloc
     115{
     116    [fBitmap release];
     117    if (fPieces)
     118        free(fPieces);
     119   
     120    [super dealloc];
     121}
     122
    91123- (NSRect) iconRectForBounds: (NSRect) bounds
    92124{
     
    230262   
    231263    //bar
    232     NSRect barRect = [self barRectForBounds: cellFrame];
    233     [self drawBar: barRect];
     264    [self drawBar: [self barRectForBounds: cellFrame]];
    234265   
    235266    //status
     
    246277
    247278- (void) drawBar: (NSRect) barRect
     279{
     280    if ([fDefaults boolForKey: @"PiecesBar"])
     281    {
     282        NSRect regularBarRect = barRect, piecesBarRect = barRect;
     283        regularBarRect.size.height /= 3;
     284        piecesBarRect.origin.y += regularBarRect.size.height;
     285        piecesBarRect.size.height -= regularBarRect.size.height;
     286       
     287        [self drawRegularBar: regularBarRect];
     288        [self drawPiecesBar: piecesBarRect];
     289    }
     290    else
     291        [self drawRegularBar: barRect];
     292   
     293    [fBarOverlayColor set];
     294    [NSBezierPath strokeRect: NSInsetRect(barRect, 0.5, 0.5)];
     295}
     296
     297- (void) drawRegularBar: (NSRect) barRect
    248298{
    249299    Torrent * torrent = [self representedObject];
     
    377427        }
    378428    }
    379    
    380     [fBarOverlayColor set];
    381     [NSBezierPath strokeRect: NSInsetRect(barRect, 0.5, 0.5)];
     429}
     430
     431- (void) drawPiecesBar: (NSRect) barRect
     432{
     433    if (!fBitmap)
     434        fBitmap = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes: nil
     435            pixelsWide: MAX_PIECES pixelsHigh: barRect.size.height bitsPerSample: 8 samplesPerPixel: 4 hasAlpha: YES
     436            isPlanar: NO colorSpaceName: NSCalibratedRGBColorSpace bytesPerRow: 0 bitsPerPixel: 0];
     437   
     438    uint32_t * p;
     439    uint8_t * bitmapData = [fBitmap bitmapData];
     440    int bytesPerRow = [fBitmap bytesPerRow];
     441   
     442    if (!fPieces)
     443    {
     444        fPieces = malloc(MAX_PIECES);
     445        int i;
     446        for (i = 0; i < MAX_PIECES; i++)
     447            fPieces[i] = BLANK_PIECE;
     448    }
     449   
     450    #warning add flashing orange
     451   
     452    Torrent * torrent = [self representedObject];
     453   
     454    #warning redo like pieces view
     455    int pieceCount = [torrent pieceCount];
     456    float * piecePercent = malloc(pieceCount * sizeof(float));
     457    [torrent getAmountFinished: piecePercent size: pieceCount];
     458   
     459    //lines 2 to 14: blue, green, or gray depending on piece availability
     460    int i, h, index = 0;
     461    float increment = (float)pieceCount / MAX_PIECES, indexValue = 0;
     462    uint32_t color;
     463    BOOL change;
     464    for (i = 0; i < MAX_PIECES; i++)
     465    {
     466        change = NO;
     467        if (piecePercent[index] >= 1.0)
     468        {
     469            if (fPieces[i] != -1)
     470            {
     471                color = kBlue;
     472                fPieces[i] = -1;
     473                change = YES;
     474            }
     475        }
     476        else if (piecePercent[index] <= 0.0)
     477        {
     478            if (fPieces[i] != 0)
     479            {
     480                #warning make nicer color
     481                color = kGray;
     482                fPieces[i] = 0;
     483                change = YES;
     484            }
     485        }
     486        else if (piecePercent[index] <= 0.25)
     487        {
     488            if (fPieces[i] != 1)
     489            {
     490                color = kBlue1;
     491                fPieces[i] = 1;
     492                change = YES;
     493            }
     494        }
     495        else if (piecePercent[index] <= 0.5)
     496        {
     497            if (fPieces[i] != 2)
     498            {
     499                color = kBlue2;
     500                fPieces[i] = 2;
     501                change = YES;
     502            }
     503        }
     504        else if (piecePercent[index] <= 0.75)
     505        {
     506            if (fPieces[i] != 3)
     507            {
     508                color = kBlue3;
     509                fPieces[i] = 3;
     510                change = YES;
     511            }
     512        }
     513        else
     514        {
     515            if (fPieces[i] != 4)
     516            {
     517                color = kBlue4;
     518                fPieces[i] = 4;
     519                change = YES;
     520            }
     521        }
     522       
     523        if (change)
     524        {
     525            //draw vertically
     526            p = (uint32_t *)(bitmapData) + i;
     527            for (h = 0; h < barRect.size.height; h++)
     528            {
     529                p[0] = color;
     530                p = (uint32_t *)((uint8_t *)p + bytesPerRow);
     531            }
     532        }
     533       
     534        indexValue += increment;
     535        index = (int)indexValue;
     536    }
     537   
     538    free(piecePercent);
     539   
     540    //actually draw image
     541    NSImage * bar = [[NSImage alloc] initWithSize: [fBitmap size]];
     542    [bar setFlipped: YES];
     543    [bar addRepresentation: fBitmap];
     544   
     545    [bar drawInRect: barRect fromRect: NSZeroRect operation: NSCompositeSourceOver fraction: 1.0];
     546    [bar release];
     547   
     548    if (!fTransparentGradient)
     549        fTransparentGradient = [[CTGradient progressTransparentGradient] retain];
     550    [fTransparentGradient fillRect: barRect angle: -90];
    382551}
    383552
Note: See TracChangeset for help on using the changeset viewer.