145 lines
3.3 KiB
Objective-C
145 lines
3.3 KiB
Objective-C
//
|
|
// SUStatusController.m
|
|
// Sparkle
|
|
//
|
|
// Created by Andy Matuschak on 3/14/06.
|
|
// Copyright 2006 Andy Matuschak. All rights reserved.
|
|
//
|
|
|
|
#import "SUUpdater.h"
|
|
|
|
#import "SUAppcast.h"
|
|
#import "SUAppcastItem.h"
|
|
#import "SUVersionComparisonProtocol.h"
|
|
#import "SUStatusController.h"
|
|
#import "SUHost.h"
|
|
|
|
|
|
@implementation SUStatusController
|
|
|
|
- (id)initWithHost:(SUHost *)aHost
|
|
{
|
|
self = [super initWithHost:aHost windowNibName:@"SUStatus"];
|
|
if (self)
|
|
{
|
|
host = [aHost retain];
|
|
[self setShouldCascadeWindows:NO];
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (void)dealloc
|
|
{
|
|
[host release];
|
|
[title release];
|
|
[statusText release];
|
|
[buttonTitle release];
|
|
[super dealloc];
|
|
}
|
|
|
|
- (NSString *)description { return [NSString stringWithFormat:@"%@ <%@, %@>", [self class], [host bundlePath], [host installationPath]]; }
|
|
|
|
- (void)awakeFromNib
|
|
{
|
|
if ([host isBackgroundApplication]) {
|
|
[[self window] setLevel:NSFloatingWindowLevel];
|
|
}
|
|
|
|
[[self window] center];
|
|
[[self window] setFrameAutosaveName:@"SUStatusFrame"];
|
|
[progressBar setUsesThreadedAnimation:YES];
|
|
}
|
|
|
|
- (NSString *)windowTitle
|
|
{
|
|
return [NSString stringWithFormat:SULocalizedString(@"Updating %@", nil), [host name]];
|
|
}
|
|
|
|
- (NSImage *)applicationIcon
|
|
{
|
|
return [host icon];
|
|
}
|
|
|
|
- (void)beginActionWithTitle:(NSString *)aTitle maxProgressValue:(double)aMaxProgressValue statusText:(NSString *)aStatusText
|
|
{
|
|
[self willChangeValueForKey:@"title"];
|
|
title = [aTitle copy];
|
|
[self didChangeValueForKey:@"title"];
|
|
|
|
[self setMaxProgressValue:aMaxProgressValue];
|
|
[self setStatusText:aStatusText];
|
|
}
|
|
|
|
- (void)setButtonTitle:(NSString *)aButtonTitle target: (id)target action:(SEL)action isDefault:(BOOL)isDefault
|
|
{
|
|
[self willChangeValueForKey:@"buttonTitle"];
|
|
if (buttonTitle != aButtonTitle)
|
|
{
|
|
[buttonTitle release];
|
|
buttonTitle = [aButtonTitle copy];
|
|
}
|
|
[self didChangeValueForKey:@"buttonTitle"];
|
|
|
|
[self window];
|
|
[actionButton sizeToFit];
|
|
// Except we're going to add 15 px for padding.
|
|
[actionButton setFrameSize:NSMakeSize([actionButton frame].size.width + 15, [actionButton frame].size.height)];
|
|
// Now we have to move it over so that it's always 15px from the side of the window.
|
|
[actionButton setFrameOrigin:NSMakePoint([[self window] frame].size.width - 15 - [actionButton frame].size.width, [actionButton frame].origin.y)];
|
|
// Redisplay superview to clean up artifacts
|
|
[[actionButton superview] display];
|
|
|
|
[actionButton setTarget:target];
|
|
[actionButton setAction:action];
|
|
[actionButton setKeyEquivalent:isDefault ? @"\r" : @""];
|
|
|
|
// 06/05/2008 Alex: Avoid a crash when cancelling during the extraction
|
|
[self setButtonEnabled: (target != nil)];
|
|
}
|
|
|
|
- (BOOL)progressBarShouldAnimate
|
|
{
|
|
return YES;
|
|
}
|
|
|
|
- (void)setButtonEnabled:(BOOL)enabled
|
|
{
|
|
[actionButton setEnabled:enabled];
|
|
}
|
|
|
|
- (double)progressValue
|
|
{
|
|
return progressValue;
|
|
}
|
|
|
|
- (void)setProgressValue:(double)value
|
|
{
|
|
progressValue = value;
|
|
}
|
|
|
|
- (double)maxProgressValue
|
|
{
|
|
return maxProgressValue;
|
|
}
|
|
|
|
- (void)setMaxProgressValue:(double)value
|
|
{
|
|
if (value < 0.0) value = 0.0;
|
|
maxProgressValue = value;
|
|
[self setProgressValue:0.0];
|
|
[progressBar setIndeterminate:(value == 0.0)];
|
|
[progressBar startAnimation:self];
|
|
[progressBar setUsesThreadedAnimation: YES];
|
|
}
|
|
|
|
- (void)setStatusText:(NSString *)aStatusText
|
|
{
|
|
if (statusText != aStatusText)
|
|
{
|
|
[statusText release];
|
|
statusText = [aStatusText copy];
|
|
}
|
|
}
|
|
|
|
@end
|