]> granicus.if.org Git - transmission/commitdiff
some maintenance on the pieces view
authorMitchell Livingston <livings124@transmissionbt.com>
Mon, 9 Jun 2008 21:20:01 +0000 (21:20 +0000)
committerMitchell Livingston <livings124@transmissionbt.com>
Mon, 9 Jun 2008 21:20:01 +0000 (21:20 +0000)
macosx/Controller.m
macosx/InfoWindowController.m
macosx/PiecesView.h
macosx/PiecesView.m
macosx/TorrentCell.m

index 66f28a76af3351feee2f5646d4d3cecc06169dbc..046230f157a2df71c6c5e7114a2c5f002c424c03 100644 (file)
@@ -208,15 +208,15 @@ static void sleepCallback(void * controller, io_service_t y, natural_t messageTy
                                 [fDefaults boolForKey: @"NatTraversal"],
                                 [fDefaults integerForKey: @"BindPort"],
                                 TR_ENCRYPTION_PREFERRED, /* reset in prefs */
-                                FALSE, /* reset in prefs */
+                                NO, /* reset in prefs */
                                 -1, /* reset in prefs */
-                                FALSE, /* reset in prefs */
+                                NO, /* reset in prefs */
                                 -1, /* reset in prefs */
                                 [fDefaults integerForKey: @"PeersTotal"],
                                 [fDefaults integerForKey: @"MessageLevel"],
                                 YES,
                                 [fDefaults boolForKey: @"Blocklist"],
-                                [fDefaults integerForKey: @"PeerSocketTOS"], /* hidden - default should be TR_DEFAULT_PEER_SOCKET_TOS */
+                                [fDefaults integerForKey: @"PeerSocketTOS"], /* hidden pref - default is TR_DEFAULT_PEER_SOCKET_TOS */
                                 [fDefaults boolForKey: @"RPC"],
                                 [fDefaults integerForKey: @"RPCPort"],
                                 NULL, /* reset in prefs */
index 99752ba5cbe4308222e6b993793ab06e1dd6439a..cdb459947a5782a86ff508c560782d3892fda052 100644 (file)
@@ -737,7 +737,7 @@ typedef enum
             identifier = TAB_ACTIVITY_IDENT;
             title = NSLocalizedString(@"Activity", "Inspector -> title");
             
-            [fPiecesView updateView: YES];
+            [fPiecesView resetView];
             break;
         case TAB_TRACKER_TAG:
             identifier = TAB_TRACKER_IDENT;
@@ -1142,7 +1142,7 @@ typedef enum
     [fPiecesControl setSelected: !available forSegment: PIECES_CONTROL_PROGRESS];
     
     [[NSUserDefaults standardUserDefaults] setBool: available forKey: @"PiecesViewShowAvailability"];
-    [fPiecesView updateView: YES];
+    [fPiecesView resetView];
 }
 
 - (void) revealTorrentFile: (id) sender
@@ -1365,7 +1365,7 @@ typedef enum
         
         [fDateCompletedField setObjectValue: [torrent dateCompleted]];
         
-        [fPiecesView updateView: NO];
+        [fPiecesView updateView];
     }
 }
 
index f1472cca5f91ceb6741722cca695453022646d49..35ed48921a2991f36f26bb4f646dee532a4c327b 100644 (file)
@@ -39,6 +39,8 @@
 }
 
 - (void) setTorrent: (Torrent *) torrent;
-- (void) updateView: (BOOL) first;
+
+- (void) resetView;
+- (void) updateView;
 
 @end
index 12458da5a0f4b22e45cdb638cb4934b32996977b..f03afe279b0f554ae0b33e3458aa4a1ac1a5a7a8 100644 (file)
 
 @implementation PiecesView
 
-- (id) initWithCoder: (NSCoder *) decoder
-{
-    if ((self = [super initWithCoder: decoder]))
-    {
-        fPieces = malloc(MAX_ACROSS * MAX_ACROSS);
-    }
-    
-    return self;
-}
-
 - (void) awakeFromNib
 {
         NSBezierPath * bp = [NSBezierPath bezierPathWithRect: [self bounds]];
@@ -70,7 +60,7 @@
 
 - (void) dealloc
 {
-    free(fPieces);
+    tr_free(fPieces);
     
     [fBack release];
     
     [fBlue4Color release];
     [fBlueColor release];
     
-    [fTorrent release];
     [super dealloc];
 }
 
 - (void) setTorrent: (Torrent *) torrent
 {
-    [fTorrent release];
+    //reset the view to blank
+    NSImage * newBack = [fBack copy];
+    [self setImage: newBack];
+    [newBack release];
+    
+    tr_free(fPieces);
+    fPieces = NULL;
     
-    if (torrent)
+    fTorrent = torrent;
+    if (fTorrent)
     {
-        fTorrent = [torrent retain];
-        
         //determine relevant values
-        fNumPieces = MAX_ACROSS * MAX_ACROSS;
-        int pieceCount = [fTorrent pieceCount];
-        if (pieceCount < fNumPieces)
-        {
-            fNumPieces = pieceCount;
-            
-            fAcross = sqrt(fNumPieces);
-            if (fAcross * fAcross < fNumPieces)
-                fAcross++;
-        }
-        else
-            fAcross = MAX_ACROSS;
+        fNumPieces = MIN([fTorrent pieceCount], MAX_ACROSS * MAX_ACROSS);
+        fAcross = ceil(sqrt(fNumPieces));
         
         float width = [self bounds].size.width;
         fWidth = (width - (fAcross + 1) * BETWEEN) / fAcross;
         fExtraBorder = (width - ((fWidth + BETWEEN) * fAcross + BETWEEN)) / 2;
         
-        [self updateView: YES];
+        [self updateView];
     }
     else
-    {
-        fTorrent = nil;
-        
-        NSImage * newBack = [fBack copy];
-        [self setImage: newBack];
-        [newBack release];
-        
         [self setNeedsDisplay];
-    }
 }
 
-- (void) updateView: (BOOL) first
+- (void) resetView
+{
+    tr_free(fPieces);
+    fPieces = NULL;
+    
+    [self updateView];
+}
+
+- (void) updateView
 {
     if (!fTorrent)
         return;
     
-    if (first)
+    //determine if first time
+    BOOL first = NO;
+    if (!fPieces)
     {
-        NSImage * newBack = [fBack copy];
-        [self setImage: newBack];
-        [newBack release];
+        fPieces = (int8_t *)tr_malloc(fNumPieces * sizeof(int8_t));
+        first = YES;
     }
+    
     NSImage * image = [self image];
 
-    int8_t * pieces;
-    float * piecesPercent;
+    int8_t * pieces = NULL;
+    float * piecesPercent = NULL;
     
     BOOL showAvailablity = [[NSUserDefaults standardUserDefaults] boolForKey: @"PiecesViewShowAvailability"];
     if (showAvailablity)
     {   
-        pieces = malloc(fNumPieces * sizeof(int8_t));
+        pieces = (int8_t *)tr_malloc(fNumPieces * sizeof(int8_t));
         [fTorrent getAvailability: pieces size: fNumPieces];
     }
     else
     {   
-        piecesPercent = malloc(fNumPieces * sizeof(float));
+        piecesPercent = (float *)tr_malloc(fNumPieces * sizeof(float));
         [fTorrent getAmountFinished: piecesPercent size: fNumPieces];
     }
     
     int i, j, piece, index = -1;
     float piecePercent;
     NSRect rect = NSMakeRect(0, 0, fWidth, fWidth);
-    NSColor * pieceColor;
+    
     BOOL change = NO;
         
     for (i = 0; i < fAcross; i++)
                 break;
             }
             
-            pieceColor = nil;
+            NSColor * pieceColor = nil;
             
             if (showAvailablity)
             {
                     change = YES;
                 }
                 
-                [pieceColor set];
-                
                 rect.origin = NSMakePoint(j * (fWidth + BETWEEN) + BETWEEN + fExtraBorder,
                                     [image size].width - (i + 1) * (fWidth + BETWEEN) - fExtraBorder);
+                
+                [pieceColor set];
                 NSRectFill(rect);
             }
         }
         [self setNeedsDisplay];
     }
     
-    if (showAvailablity)
-        free(pieces);
-    else
-        free(piecesPercent);
+    tr_free(pieces);
+    tr_free(piecesPercent);
 }
 
 - (BOOL) acceptsFirstMouse: (NSEvent *) event
index 0cfae2f1a4626f4a4479b25e8e7c81df7f35adc4..02feba8863c3e63bc875d123fa2e59aa083d8e2b 100644 (file)
@@ -54,7 +54,8 @@
 #define PADDING_BETWEEN_BAR_AND_STATUS 2.0
 
 #define PIECES_TOTAL_PERCENT 0.6
-#define MAX_PIECES 324
+
+#define MAX_PIECES (18*18)
 
 @interface TorrentCell (Private)