Files
gitx/PBDetailController.m
T
Pieter de Bie e2b507313b Delete temporary files when they are deallocated
This will remove a lot of the stray files in the
temporary dir. However, they won't be deleted on exit
of the program. What to do about this?
2008-06-17 05:56:00 +02:00

133 lines
3.3 KiB
Objective-C

//
// PBDetailController.m
// GitX
//
// Created by Pieter de Bie on 16-06-08.
// Copyright 2008 __MyCompanyName__. All rights reserved.
//
#import "PBDetailController.h"
#import "CWQuickLook.h"
#define QLPreviewPanel NSClassFromString(@"QLPreviewPanel")
@implementation PBDetailController
@synthesize selectedTab, webCommit, rawCommit, gitTree;
- awakeFromNib
{
[fileBrowser setTarget:self];
[fileBrowser setDoubleAction:@selector(openSelectedFile:)];
self.selectedTab = [NSNumber numberWithInt:0];
[commitController addObserver:self forKeyPath:@"selection" options:(NSKeyValueObservingOptionNew,NSKeyValueObservingOptionOld) context:@"commitChange"];
[treeController addObserver:self forKeyPath:@"selection" options:0 context:@"treeChange"];
return self;
}
- (void) updateKeys
{
NSArray* selection = [commitController selectedObjects];
// Remove any references in the QLPanel
[[QLPreviewPanel sharedPreviewPanel] setURLs:[NSArray array] currentIndex:0 preservingDisplayState:YES];
// We have to do this manually, as NSTreeController leaks memory?
[treeController setSelectionIndexPaths:[NSArray array]];
if ([selection count] > 0)
realCommit = [selection objectAtIndex:0];
else
realCommit = nil;
self.webCommit = nil;
self.rawCommit = nil;
self.gitTree = nil;
int num = [self.selectedTab intValue];
if (num == 0) // Detailed view
self.webCommit = realCommit;
else if (num == 1)
self.rawCommit = realCommit;
else if (num == 2)
self.gitTree = realCommit.tree;
}
- (void) setSelectedTab: (NSNumber*) number
{
selectedTab = number;
[self updateKeys];
}
- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if ([(NSString *)context isEqualToString: @"commitChange"]) {
[self updateKeys];
return;
}
else if ([(NSString *)context isEqualToString: @"treeChange"]) {
[self updateQuicklookForce: NO];
}
else {
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
}
}
- (IBAction) openSelectedFile: sender
{
NSArray* selectedFiles = [treeController selectedObjects];
if ([selectedFiles count] == 0)
return;
PBGitTree* tree = [selectedFiles objectAtIndex:0];
NSString* name = [tree tmpFileNameForContents];
[[NSWorkspace sharedWorkspace] openTempFile:name];
}
- (IBAction) setDetailedView: sender {
self.selectedTab = [NSNumber numberWithInt:0];
}
- (IBAction) setRawView: sender {
self.selectedTab = [NSNumber numberWithInt:1];
}
- (IBAction) setTreeView: sender {
self.selectedTab = [NSNumber numberWithInt:2];
}
- (IBAction) toggleQuickView: sender
{
id panel = [QLPreviewPanel sharedPreviewPanel];
if ([panel isOpen]) {
[panel closePanel];
} else {
[[QLPreviewPanel sharedPreviewPanel] makeKeyAndOrderFrontWithEffect:1];
[self updateQuicklookForce: YES];
}
}
- (void) updateQuicklookForce: (BOOL) force
{
if (!force && ![[QLPreviewPanel sharedPreviewPanel] isOpen])
return;
NSArray* selectedFiles = [treeController selectedObjects];
if ([selectedFiles count] == 0)
return;
NSMutableArray* fileNames = [NSMutableArray array];
for (PBGitTree* tree in selectedFiles) {
NSString* s = [tree tmpFileNameForContents];
if (s)
[fileNames addObject:[NSURL fileURLWithPath: s]];
}
[[QLPreviewPanel sharedPreviewPanel] setURLs:fileNames currentIndex:0 preservingDisplayState:YES];
}
@end