]> granicus.if.org Git - transmission/commitdiff
avoid setting views in the inspector until necessary
authorMitchell Livingston <livings124@transmissionbt.com>
Tue, 9 Mar 2010 02:26:52 +0000 (02:26 +0000)
committerMitchell Livingston <livings124@transmissionbt.com>
Tue, 9 Mar 2010 02:26:52 +0000 (02:26 +0000)
13 files changed:
macosx/InfoActivityViewController.h
macosx/InfoActivityViewController.m
macosx/InfoFileViewController.h
macosx/InfoFileViewController.m
macosx/InfoGeneralViewController.h
macosx/InfoGeneralViewController.m
macosx/InfoOptionsViewController.h
macosx/InfoOptionsViewController.m
macosx/InfoPeersViewController.h
macosx/InfoPeersViewController.m
macosx/InfoTrackersViewController.h
macosx/InfoTrackersViewController.m
macosx/InfoWindowController.m

index 4ff1af2b26a4cb18a12053fe368fe70b79ba955c..2ba5f2e5281cc97cc4bf13c37f2b352aedbf249d 100644 (file)
@@ -31,6 +31,8 @@
 {
     NSArray * fTorrents;
     
+    BOOL fSet;
+    
     IBOutlet NSTextField * fDateAddedField, * fDateCompletedField, * fDateActivityField,
                         * fStateField, * fProgressField,
                         * fHaveField, * fDownloadedTotalField, * fUploadedTotalField, * fFailedHashField,
index 1954513694cd03d5cf6db098335272f96e1acaea..05bb5128bd2e146a749aae0d5faff9cc1c7ecf69 100644 (file)
 #define PIECES_CONTROL_PROGRESS 0
 #define PIECES_CONTROL_AVAILABLE 1
 
+@interface InfoActivityViewController (Private)
+
+- (void) setupInfo;
+
+@end
+
 @implementation InfoActivityViewController
 
 - (id) init
     [fTorrents release];
     fTorrents = [torrents retain];
     
-    const NSUInteger count = [fTorrents count];
-    if (count != 1)
-    {
-        if (count == 0)
-        {
-            [fHaveField setStringValue: @""];
-            [fDownloadedTotalField setStringValue: @""];
-            [fUploadedTotalField setStringValue: @""];
-            [fFailedHashField setStringValue: @""];
-            [fDateActivityField setStringValue: @""];
-            [fRatioField setStringValue: @""];
-        }
-    
-        [fStateField setStringValue: @""];
-        [fProgressField setStringValue: @""];
-        
-        [fErrorMessageView setString: @""];
-        
-        [fDateAddedField setStringValue: @""];
-        [fDateCompletedField setStringValue: @""];
-        
-        [fPiecesControl setSelected: NO forSegment: PIECES_CONTROL_AVAILABLE];
-        [fPiecesControl setSelected: NO forSegment: PIECES_CONTROL_PROGRESS];
-        [fPiecesControl setEnabled: NO];
-        [fPiecesView setTorrent: nil];
-    }
-    else
-    {
-        Torrent * torrent = [fTorrents objectAtIndex: 0];
-        
-        [fDateAddedField setObjectValue: [torrent dateAdded]];
-        
-        BOOL piecesAvailableSegment = [[NSUserDefaults standardUserDefaults] boolForKey: @"PiecesViewShowAvailability"];
-        [fPiecesControl setSelected: piecesAvailableSegment forSegment: PIECES_CONTROL_AVAILABLE];
-        [fPiecesControl setSelected: !piecesAvailableSegment forSegment: PIECES_CONTROL_PROGRESS];
-        [fPiecesControl setEnabled: YES];
-        [fPiecesView setTorrent: torrent];
-    }
+    fSet = NO;
 }
 
 - (void) updateInfo
 {
+    if (!fSet)
+        [self setupInfo];
+    
     const NSInteger numberSelected = [fTorrents count];
     if (numberSelected == 0)
         return;
 }
 
 @end
+
+@implementation InfoActivityViewController (Private)
+
+- (void) setupInfo
+{
+    const NSUInteger count = [fTorrents count];
+    if (count != 1)
+    {
+        if (count == 0)
+        {
+            [fHaveField setStringValue: @""];
+            [fDownloadedTotalField setStringValue: @""];
+            [fUploadedTotalField setStringValue: @""];
+            [fFailedHashField setStringValue: @""];
+            [fDateActivityField setStringValue: @""];
+            [fRatioField setStringValue: @""];
+        }
+    
+        [fStateField setStringValue: @""];
+        [fProgressField setStringValue: @""];
+        
+        [fErrorMessageView setString: @""];
+        
+        [fDateAddedField setStringValue: @""];
+        [fDateCompletedField setStringValue: @""];
+        
+        [fPiecesControl setSelected: NO forSegment: PIECES_CONTROL_AVAILABLE];
+        [fPiecesControl setSelected: NO forSegment: PIECES_CONTROL_PROGRESS];
+        [fPiecesControl setEnabled: NO];
+        [fPiecesView setTorrent: nil];
+    }
+    else
+    {
+        Torrent * torrent = [fTorrents objectAtIndex: 0];
+        
+        [fDateAddedField setObjectValue: [torrent dateAdded]];
+        
+        BOOL piecesAvailableSegment = [[NSUserDefaults standardUserDefaults] boolForKey: @"PiecesViewShowAvailability"];
+        [fPiecesControl setSelected: piecesAvailableSegment forSegment: PIECES_CONTROL_AVAILABLE];
+        [fPiecesControl setSelected: !piecesAvailableSegment forSegment: PIECES_CONTROL_PROGRESS];
+        [fPiecesControl setEnabled: YES];
+        [fPiecesView setTorrent: torrent];
+    }
+    
+    fSet = YES;
+}
+
+@end
index e9b1ca37af5b4fd8d355c6d505d8769fbd745336..bd2e7683234adc84a6a6a914219571f7e3a4f19f 100644 (file)
@@ -30,6 +30,8 @@
 {
     NSArray * fTorrents;
     
+    BOOL fSet;
+    
     IBOutlet FileOutlineController * fFileController;
     
     IBOutlet NSSearchField * fFileFilterField;
index f61dde81fab44829033803a9d8effde31f2ccc8e..33b814b4675c64cfdb34033a822c49d56917f58f 100644 (file)
@@ -30,6 +30,8 @@
 
 @interface InfoFileViewController (Private)
 
+- (void) setupInfo;
+
 - (BOOL) canQuickLookFile: (FileListNode *) item;
 
 @end
     [fTorrents release];
     fTorrents = [torrents retain];
     
-    [fFileFilterField setStringValue: @""];
-    
-    if ([fTorrents count] == 1)
-    {
-        Torrent * torrent = [fTorrents objectAtIndex: 0];
-        
-        [fFileController setTorrent: torrent];
-        [fFileFilterField setEnabled: [torrent isFolder]];
-    }
-    else
-    {
-        [fFileController setTorrent: nil];
-        [fFileFilterField setEnabled: NO];
-    }
+    fSet = NO;
 }
 
 - (void) updateInfo
 {
+    if (!fSet)
+        [self setupInfo];
+    
     if ([fTorrents count] == 1)
         [fFileController reloadData];
 }
 
 @implementation InfoFileViewController (Private)
 
+- (void) setupInfo
+{
+    [fFileFilterField setStringValue: @""];
+    
+    if ([fTorrents count] == 1)
+    {
+        Torrent * torrent = [fTorrents objectAtIndex: 0];
+        
+        [fFileController setTorrent: torrent];
+        [fFileFilterField setEnabled: [torrent isFolder]];
+    }
+    else
+    {
+        [fFileController setTorrent: nil];
+        [fFileFilterField setEnabled: NO];
+    }
+    
+    fSet = YES;
+}
+
 - (BOOL) canQuickLookFile: (FileListNode *) item
 {
     Torrent * torrent = [fTorrents objectAtIndex: 0];
index f4f052f675da1c097448f618fd4fbdabd5b72954..2f5ad738346f76636223bea66c6f11b9d4f8c0f3 100644 (file)
@@ -28,6 +28,8 @@
 {
     NSArray * fTorrents;
     
+    BOOL fSet;
+    
     IBOutlet NSTextField * fPiecesField, * fHashField, * fSecureField,
                         * fDataLocationField,
                         * fCreatorField, * fDateCreatedField;
index bbcec59dceb4f0094b5a41293e12265cc3803af2..4d39190cf685dc1fba347a07c2b725d8234c6da2 100644 (file)
 #import "NSStringAdditions.h"
 #import "Torrent.h"
 
+@interface InfoGeneralViewController (Private)
+
+- (void) setupInfo;
+
+@end
+
 @implementation InfoGeneralViewController
 
 - (id) init
     [fTorrents release];
     fTorrents = [torrents retain];
     
+    fSet = NO;
+}
+
+- (void) updateInfo
+{
+    if (!fSet)
+        [self setupInfo];
+    
+    if ([fTorrents count] != 1)
+        return;
+    
+    Torrent * torrent = [fTorrents objectAtIndex: 0];
+    
+    NSString * location = [torrent dataLocation];
+    [fDataLocationField setStringValue: location ? [location stringByAbbreviatingWithTildeInPath] : @""];
+    [fDataLocationField setToolTip: location ? location : @""];
+    
+    [fRevealDataButton setHidden: !location];
+}
+
+- (void) revealDataFile: (id) sender
+{
+    Torrent * torrent = [fTorrents objectAtIndex: 0];
+    NSString * location = [torrent dataLocation];
+    if (!location)
+        return;
+    
+    if ([NSApp isOnSnowLeopardOrBetter])
+    {
+        NSURL * file = [NSURL fileURLWithPath: location];
+        [[NSWorkspace sharedWorkspace] activateFileViewerSelectingURLs: [NSArray arrayWithObject: file]];
+    }
+    else
+        [[NSWorkspace sharedWorkspace] selectFile: location inFileViewerRootedAtPath: nil];
+}
+
+@end
+
+@implementation InfoGeneralViewController (Private)
+
+- (void) setupInfo
+{
     if ([fTorrents count] == 1)
     {
         Torrent * torrent = [fTorrents objectAtIndex: 0];
         
         [fRevealDataButton setHidden: YES];
     }
-}
-
-- (void) updateInfo
-{   
-    if ([fTorrents count] != 1)
-        return;
     
-    Torrent * torrent = [fTorrents objectAtIndex: 0];
-    
-    NSString * location = [torrent dataLocation];
-    [fDataLocationField setStringValue: location ? [location stringByAbbreviatingWithTildeInPath] : @""];
-    [fDataLocationField setToolTip: location ? location : @""];
-    
-    [fRevealDataButton setHidden: !location];
-}
-
-- (void) revealDataFile: (id) sender
-{
-    Torrent * torrent = [fTorrents objectAtIndex: 0];
-    NSString * location = [torrent dataLocation];
-    if (!location)
-        return;
-    
-    if ([NSApp isOnSnowLeopardOrBetter])
-    {
-        NSURL * file = [NSURL fileURLWithPath: location];
-        [[NSWorkspace sharedWorkspace] activateFileViewerSelectingURLs: [NSArray arrayWithObject: file]];
-    }
-    else
-        [[NSWorkspace sharedWorkspace] selectFile: location inFileViewerRootedAtPath: nil];
+    fSet = YES;
 }
 
 @end
+
index 9f773811f33370a225383ab3bf26159fbeda4c64..8e053708d2a0cfcfd8d3a5b8365fd141e35e41e5 100644 (file)
@@ -28,6 +28,8 @@
 {
     NSArray * fTorrents;
     
+    BOOL fSet;
+    
     IBOutlet NSPopUpButton * fPriorityPopUp, * fRatioPopUp;
     IBOutlet NSButton * fUploadLimitCheck, * fDownloadLimitCheck, * fGlobalLimitCheck;
     IBOutlet NSTextField * fUploadLimitField, * fDownloadLimitField, * fRatioLimitField,
@@ -38,6 +40,7 @@
 }
 
 - (void) setInfoForTorrents: (NSArray *) torrents;
+- (void) updateInfo;
 - (void) updateOptions;
 
 - (void) setUseSpeedLimit: (id) sender;
index 4cf34507bb1756276399e3d81d8bc16ab40b93a9..f625deb81c387c2159c7c9fb5d4df1d8b2161cc1 100644 (file)
 
 #define INVALID -99
 
+@interface InfoOptionsViewController (Private)
+
+- (void) setupInfo;
+
+@end
+
 @implementation InfoOptionsViewController
 
 - (id) init
     [fTorrents release];
     fTorrents = [torrents retain];
     
-    if ([fTorrents count] == 0)
-    {
-        [fUploadLimitCheck setEnabled: NO];
-        [fUploadLimitCheck setState: NSOffState];
-        [fUploadLimitField setEnabled: NO];
-        [fUploadLimitLabel setEnabled: NO];
-        [fUploadLimitField setStringValue: @""];
-        
-        [fDownloadLimitCheck setEnabled: NO];
-        [fDownloadLimitCheck setState: NSOffState];
-        [fDownloadLimitField setEnabled: NO];
-        [fDownloadLimitLabel setEnabled: NO];
-        [fDownloadLimitField setStringValue: @""];
-        
-        [fGlobalLimitCheck setEnabled: NO];
-        [fGlobalLimitCheck setState: NSOffState];
-        
-        [fPriorityPopUp setEnabled: NO];
-        [fPriorityPopUp selectItemAtIndex: -1];
-        
-        [fRatioPopUp setEnabled: NO];
-        [fRatioPopUp selectItemAtIndex: -1];
-        [fRatioLimitField setHidden: YES];
-        [fRatioLimitField setStringValue: @""];
-        
-        [fPeersConnectField setEnabled: NO];
-        [fPeersConnectField setStringValue: @""];
-        [fPeersConnectLabel setEnabled: NO];
-    }
-    else
-        [self updateOptions];
+    fSet = NO;
+}
+
+- (void) updateInfo
+{
+    if (!fSet)
+        [self setupInfo];
+    
+    fSet = YES;
 }
 
 - (void) updateOptions
 
 @implementation InfoOptionsViewController (Private)
 
+- (void) setupInfo
+{
+    if ([fTorrents count] == 0)
+    {
+        [fUploadLimitCheck setEnabled: NO];
+        [fUploadLimitCheck setState: NSOffState];
+        [fUploadLimitField setEnabled: NO];
+        [fUploadLimitLabel setEnabled: NO];
+        [fUploadLimitField setStringValue: @""];
+        
+        [fDownloadLimitCheck setEnabled: NO];
+        [fDownloadLimitCheck setState: NSOffState];
+        [fDownloadLimitField setEnabled: NO];
+        [fDownloadLimitLabel setEnabled: NO];
+        [fDownloadLimitField setStringValue: @""];
+        
+        [fGlobalLimitCheck setEnabled: NO];
+        [fGlobalLimitCheck setState: NSOffState];
+        
+        [fPriorityPopUp setEnabled: NO];
+        [fPriorityPopUp selectItemAtIndex: -1];
+        
+        [fRatioPopUp setEnabled: NO];
+        [fRatioPopUp selectItemAtIndex: -1];
+        [fRatioLimitField setHidden: YES];
+        [fRatioLimitField setStringValue: @""];
+        
+        [fPeersConnectField setEnabled: NO];
+        [fPeersConnectField setStringValue: @""];
+        [fPeersConnectLabel setEnabled: NO];
+    }
+    else
+        [self updateOptions];
+}
+
 @end
index 4baa9abbf75273ef8f7e1d1de5f0e7db4679c796..4372a69ce628d5fc9be457308ae3dcc5e8da6cbf 100644 (file)
@@ -28,6 +28,8 @@
 {
     NSArray * fTorrents;
     
+    BOOL fSet;
+    
     NSMutableArray * fPeers, * fWebSeeds;
     
     IBOutlet NSTableView * fPeerTable, * fWebSeedTable;
index edc0d7ab122d082938e74929ea1190ced954654b..7087cc12c0c15fe5995996144117de6d9db3b269 100644 (file)
@@ -30,7 +30,7 @@
 
 @interface InfoPeersViewController (Private)
 
-- (void) resetInfo;
+- (void) setupInfo;
 
 - (void) setWebSeedTableHidden: (BOOL) hide animate: (BOOL) animate;
 - (NSArray *) peerSortDescriptors;
     [fTorrents release];
     fTorrents = [torrents retain];
     
-    [self resetInfo];
+    fSet = NO;
 }
 
 - (void) updateInfo
 {
+    if (!fSet)
+        [self setupInfo];
+    
     if ([fTorrents count] == 0)
         return;
     
 
 @implementation InfoPeersViewController (Private)
 
-- (void) resetInfo
+- (void) setupInfo
 {
     BOOL hasWebSeeds = NO;
     
         [fWebSeedTable reloadData];
     }
     [self setWebSeedTableHidden: !hasWebSeeds animate: YES];
+    
+    fSet = YES;
 }
 
 - (void) setWebSeedTableHidden: (BOOL) hide animate: (BOOL) animate
index 319e0d46d6264c600cb3f4dd1e432edb0878dc19..ffe70db6ed9f4cd22de1f08259a03cc952c37c10 100644 (file)
@@ -32,6 +32,8 @@
 {
     NSArray * fTorrents;
     
+    BOOL fSet;
+    
     NSMutableArray * fTrackers;
     
     IBOutlet TrackerTableView * fTrackerTable;
index 3ce31a1c30776a70301327c2626e9ad173f1b3f9..5c5a787509994c55cf13f94cd05cc5c451917808 100644 (file)
@@ -36,6 +36,8 @@
 
 @interface InfoTrackersViewController (Private)
 
+- (void) setupInfo;
+
 - (void) addTrackers;
 - (void) removeTrackers;
 
     [fTorrents release];
     fTorrents = [torrents retain];
     
-    const NSUInteger numberSelected = [fTorrents count];
-    if (numberSelected != 1)
-    {
-        if (numberSelected == 0)
-        {
-            [fTrackers release];
-            fTrackers = nil;
-            
-            [fTrackerTable setTrackers: nil];
-            [fTrackerTable reloadData];
-        }
-        
-        [fTrackerTable setTorrent: nil];
-        
-        [fTrackerAddRemoveControl setEnabled: NO forSegment: TRACKER_ADD_TAG];
-        [fTrackerAddRemoveControl setEnabled: NO forSegment: TRACKER_REMOVE_TAG];
-    }
-    else
-    {
-        [fTrackerTable setTorrent: [fTorrents objectAtIndex: 0]];
-        
-        [fTrackerAddRemoveControl setEnabled: YES forSegment: TRACKER_ADD_TAG];
-        [fTrackerAddRemoveControl setEnabled: NO forSegment: TRACKER_REMOVE_TAG];
-    }
-    
-    [fTrackerTable deselectAll: self];
+    fSet = NO;
 }
 
 - (void) updateInfo
 {
+    if (!fSet)
+        [self setupInfo];
+    
     if ([fTorrents count] == 0)
         return;
     
 
 @implementation InfoTrackersViewController (Private)
 
+- (void) setupInfo
+{
+    const NSUInteger numberSelected = [fTorrents count];
+    if (numberSelected != 1)
+    {
+        if (numberSelected == 0)
+        {
+            [fTrackers release];
+            fTrackers = nil;
+            
+            [fTrackerTable setTrackers: nil];
+            [fTrackerTable reloadData];
+        }
+        
+        [fTrackerTable setTorrent: nil];
+        
+        [fTrackerAddRemoveControl setEnabled: NO forSegment: TRACKER_ADD_TAG];
+        [fTrackerAddRemoveControl setEnabled: NO forSegment: TRACKER_REMOVE_TAG];
+    }
+    else
+    {
+        [fTrackerTable setTorrent: [fTorrents objectAtIndex: 0]];
+        
+        [fTrackerAddRemoveControl setEnabled: YES forSegment: TRACKER_ADD_TAG];
+        [fTrackerAddRemoveControl setEnabled: NO forSegment: TRACKER_REMOVE_TAG];
+    }
+    
+    [fTrackerTable deselectAll: self];
+    
+    fSet = YES;
+}
+
 #warning doesn't like blank addresses
 - (void) addTrackers
 {
index 4f9e6e5c9274fbdd26b9c5b86c41b8770fc49c12..6e31d4153028241a1068325c4185f81e1fa0a602 100644 (file)
@@ -77,13 +77,14 @@ typedef enum
     //window location and size
     NSPanel * window = (NSPanel *)[self window];
     
-    CGFloat windowHeight = [window frame].size.height;
+    const CGFloat windowHeight = NSHeight([window frame]);
     
+    #warning check if this is still needed
     [window setFrameAutosaveName: @"InspectorWindow"];
     [window setFrameUsingName: @"InspectorWindow"];
     
     NSRect windowRect = [window frame];
-    windowRect.origin.y -= windowHeight - windowRect.size.height;
+    windowRect.origin.y -= windowHeight - NSHeight(windowRect);
     windowRect.size.height = windowHeight;
     [window setFrame: windowRect display: NO];
     
@@ -196,6 +197,9 @@ typedef enum
         case TAB_FILE_TAG:
             [fFileViewController updateInfo];
             break;
+        case TAB_OPTIONS_TAG:
+            [fOptionsViewController updateInfo];
+            break;
     }
 }
 
@@ -277,21 +281,30 @@ typedef enum
     {
         case TAB_GENERAL_TAG:
             if (!fGeneralViewController)
+            {
                 fGeneralViewController = [[InfoGeneralViewController alloc] init];
+                [fGeneralViewController setInfoForTorrents: fTorrents];
+            }
             
             identifier = TAB_INFO_IDENT;
             title = NSLocalizedString(@"General Info", "Inspector -> title");
             break;
         case TAB_ACTIVITY_TAG:
             if (!fActivityViewController)
+            {
                 fActivityViewController = [[InfoActivityViewController alloc] init];
+                [fActivityViewController setInfoForTorrents: fTorrents];
+            }
             
             identifier = TAB_ACTIVITY_IDENT;
             title = NSLocalizedString(@"Activity", "Inspector -> title");
             break;
         case TAB_TRACKERS_TAG:
             if (!fTrackersViewController)
+            {
                 fTrackersViewController = [[InfoTrackersViewController alloc] init];
+                [fTrackersViewController setInfoForTorrents: fTorrents];
+            }
             
             identifier = TAB_TRACKER_IDENT;
             title = NSLocalizedString(@"Trackers", "Inspector -> title");
@@ -299,7 +312,10 @@ typedef enum
             break;
         case TAB_PEERS_TAG:
             if (!fPeersViewController)
+            {
                 fPeersViewController = [[InfoPeersViewController alloc] init];
+                [fPeersViewController setInfoForTorrents: fTorrents];
+            }
             
             identifier = TAB_PEERS_IDENT;
             title = NSLocalizedString(@"Peers", "Inspector -> title");
@@ -307,7 +323,10 @@ typedef enum
             break;
         case TAB_FILE_TAG:
             if (!fFileViewController)
+            {
                 fFileViewController = [[InfoFileViewController alloc] init];
+                [fFileViewController setInfoForTorrents: fTorrents];
+            }
             
             identifier = TAB_FILES_IDENT;
             title = NSLocalizedString(@"Files", "Inspector -> title");
@@ -315,7 +334,10 @@ typedef enum
             break;
         case TAB_OPTIONS_TAG:
             if (!fOptionsViewController)
+            {
                 fOptionsViewController = [[InfoOptionsViewController alloc] init];
+                [fOptionsViewController setInfoForTorrents: fTorrents];
+            }
             
             identifier = TAB_OPTIONS_IDENT;
             title = NSLocalizedString(@"Options", "Inspector -> title");
@@ -336,14 +358,6 @@ typedef enum
     
     NSView * view = [self tabViewForTag: fCurrentTabTag];
     
-    //if view was just loaded - has to be a better way
-    [fGeneralViewController setInfoForTorrents: fTorrents];
-    [fActivityViewController setInfoForTorrents: fTorrents];
-    [fTrackersViewController setInfoForTorrents: fTorrents];
-    [fPeersViewController setInfoForTorrents: fTorrents];
-    [fFileViewController setInfoForTorrents: fTorrents];
-    [fOptionsViewController setInfoForTorrents: fTorrents];
-    
     [self updateInfoStats];
     
     NSRect windowRect = [window frame], viewRect = [view frame];