GitWindowController: Store multiple views

This keeps the subviews in memory, which means that switching views will
be faster if a view has already been opened. This also allows you to type
a commit message, switch to the history view, and then switch back to
continue typing.
This commit is contained in:
Pieter de Bie
2008-11-26 17:28:40 +01:00
parent 3dd6385440
commit 0a2ddc36f7
2 changed files with 19 additions and 7 deletions
+6 -1
View File
@@ -9,11 +9,16 @@
#import <Cocoa/Cocoa.h>
#import "PBGitRepository.h"
@class PBViewController;
@interface PBGitWindowController : NSWindowController {
__weak PBGitRepository* repository;
int selectedViewIndex;
IBOutlet NSView* contentView;
NSViewController* viewController;
PBViewController *historyViewController;
PBViewController *commitViewController;
PBViewController* viewController;
}
@property (assign) __weak PBGitRepository *repository;
+13 -6
View File
@@ -10,7 +10,6 @@
#import "PBGitHistoryController.h"
#import "PBGitCommitController.h"
@implementation PBGitWindowController
@@ -35,7 +34,11 @@
- (void)windowWillClose:(NSNotification *)notification
{
[viewController removeView];
NSLog(@"Window will close!");
if (historyViewController)
[historyViewController removeView];
if (commitViewController)
[commitViewController removeView];
}
- (void) setSelectedViewIndex: (int) i
@@ -49,16 +52,20 @@
{
[self willChangeValueForKey:@"viewController"];
if ([viewController view] != nil)
[(PBViewController *)viewController removeView];
if (viewController != nil)
[[viewController view] removeFromSuperview];
switch (whichViewTag)
{
case 0: // swap in the "CustomImageViewController - NSImageView"
viewController = [[PBGitHistoryController alloc] initWithRepository:repository superController:self];
if (!historyViewController)
historyViewController = [[PBGitHistoryController alloc] initWithRepository:repository superController:self];
viewController = historyViewController;
break;
case 1:
viewController = [[PBGitCommitController alloc] initWithRepository:repository superController:self];
if (!commitViewController)
commitViewController = [[PBGitCommitController alloc] initWithRepository:repository superController:self];
viewController = commitViewController;
break;
}