Fix for bug 159170; when doing a Save, don't show the 'Leave open' button in the download progress window, and make sure that the window always closes at the end of the saving. r=pinkeron

Also fixed a refounting boo-boo with the downloader factor.
This commit is contained in:
sfraser%netscape.com 2002-07-25 00:00:51 +00:00
parent 09bf449ea4
commit 41894e801f
24 changed files with 172 additions and 112 deletions

View File

@ -68,7 +68,7 @@ DownloadListenerFactory::DownloadListenerFactory()
: mControllerFactory(nil)
{
NS_INIT_ISUPPORTS();
mControllerFactory = [[[ChimeraDownloadControllerFactory alloc] init] retain];
mControllerFactory = [[ChimeraDownloadControllerFactory alloc] init];
}
DownloadListenerFactory::~DownloadListenerFactory()

View File

@ -110,7 +110,7 @@ class CHDownloader;
// protocol, and reuse nsDownloadListener to get download UI.
@protocol DownloadProgressDisplay
- (void)onStartDownload;
- (void)onStartDownload:(BOOL)isFileSave;
- (void)onEndDownload;
- (void)setProgressTo:(long)aCurProgress ofMax:(long)aMaxProgress;
@ -152,10 +152,15 @@ public:
virtual void CreateDownloadDisplay();
protected:
PRBool IsFileSave() { return mIsFileSave; }
void SetIsFileSave(PRBool inIsFileSave) { mIsFileSave = inIsFileSave; }
protected:
DownloadControllerFactory* mControllerFactory;
id <DownloadProgressDisplay> mDownloadDisplay; // something that implements the DownloadProgressDisplay protocol
PRBool mIsFileSave; // true if we're doing a save, rather than a download
};

View File

@ -55,6 +55,7 @@
CHDownloader::CHDownloader(DownloadControllerFactory* inControllerFactory)
: mControllerFactory(inControllerFactory)
, mDownloadDisplay(nil)
, mIsFileSave(PR_FALSE)
{
NS_INIT_ISUPPORTS();
[mControllerFactory retain];

View File

@ -65,6 +65,7 @@ class nsDownloadListener;
BOOL mDownloadIsPaused;
BOOL mSaveFileDialogShouldStayOpen;
BOOL mIsFileSave;
BOOL mDownloadIsComplete;
long mCurrentProgress; // if progress bar is indeterminate, can still calc stats.

View File

@ -90,11 +90,13 @@ static NSString *LeaveOpenToolbarItemIdentifier = @"Leave Open Toggle Toolbar
mDownloadIsPaused = NO;
mDownloadIsComplete = NO;
nsCOMPtr<nsIPref> prefs(do_GetService(NS_PREF_CONTRACTID));
PRBool save = PR_FALSE;
prefs->GetBoolPref("browser.download.progressDnldDialog.keepAlive", &save);
mSaveFileDialogShouldStayOpen = save;
if (!mIsFileSave) {
nsCOMPtr<nsIPref> prefs(do_GetService(NS_PREF_CONTRACTID));
PRBool save = PR_FALSE;
prefs->GetBoolPref("browser.download.progressDnldDialog.keepAlive", &save);
mSaveFileDialogShouldStayOpen = save;
}
[self setupToolbar];
[mProgressBar setUsesThreadedAnimation:YES];
[mProgressBar startAnimation:self]; // move to onStateChange
@ -149,6 +151,7 @@ static NSString *LeaveOpenToolbarItemIdentifier = @"Leave Open Toggle Toolbar
return (mDownloadIsComplete);
return YES; // turn it on otherwise.
}
- (NSToolbarItem *) toolbar:(NSToolbar *)toolbar
itemForItemIdentifier:(NSString *)itemIdent
willBeInsertedIntoToolbar:(BOOL)willBeInserted
@ -187,23 +190,25 @@ static NSString *LeaveOpenToolbarItemIdentifier = @"Leave Open Toggle Toolbar
[toolbarItem setTarget:self];
[toolbarItem setAction:@selector(openFile)];
} else if ( [itemIdent isEqual:LeaveOpenToolbarItemIdentifier] ) {
if ( mSaveFileDialogShouldStayOpen ) {
[toolbarItem setLabel:NSLocalizedString(@"Leave Open",@"Leave Open")];
[toolbarItem setPaletteLabel:NSLocalizedString(@"Toggle Close Behavior",@"Toggle Close Behavior")];
[toolbarItem setToolTip:NSLocalizedString(@"LeaveOpenToolTip",@"Window will stay open when download finishes.")];
[toolbarItem setImage:[NSImage imageNamed:@"saveLeaveOpenYES"]];
[toolbarItem setTarget:self];
[toolbarItem setAction:@selector(toggleLeaveOpen)];
} else {
[toolbarItem setLabel:NSLocalizedString(@"Close When Done",@"Close When Done")];
[toolbarItem setPaletteLabel:NSLocalizedString(@"Toggle Close Behavior",@"Toggle Close Behavior")];
[toolbarItem setToolTip:NSLocalizedString(@"CloseWhenDoneToolTip",@"Window will close automatically when download finishes.")];
[toolbarItem setImage:[NSImage imageNamed:@"saveLeaveOpenNO"]];
[toolbarItem setTarget:self];
[toolbarItem setAction:@selector(toggleLeaveOpen)];
}
if ( willBeInserted ) {
leaveOpenToggleToolbarItem = toolbarItem; //establish reference
if ( !mIsFileSave ) {
if ( mSaveFileDialogShouldStayOpen ) {
[toolbarItem setLabel:NSLocalizedString(@"Leave Open",@"Leave Open")];
[toolbarItem setPaletteLabel:NSLocalizedString(@"Toggle Close Behavior",@"Toggle Close Behavior")];
[toolbarItem setToolTip:NSLocalizedString(@"LeaveOpenToolTip",@"Window will stay open when download finishes.")];
[toolbarItem setImage:[NSImage imageNamed:@"saveLeaveOpenYES"]];
[toolbarItem setTarget:self];
[toolbarItem setAction:@selector(toggleLeaveOpen)];
} else {
[toolbarItem setLabel:NSLocalizedString(@"Close When Done",@"Close When Done")];
[toolbarItem setPaletteLabel:NSLocalizedString(@"Toggle Close Behavior",@"Toggle Close Behavior")];
[toolbarItem setToolTip:NSLocalizedString(@"CloseWhenDoneToolTip",@"Window will close automatically when download finishes.")];
[toolbarItem setImage:[NSImage imageNamed:@"saveLeaveOpenNO"]];
[toolbarItem setTarget:self];
[toolbarItem setAction:@selector(toggleLeaveOpen)];
}
if ( willBeInserted ) {
leaveOpenToggleToolbarItem = toolbarItem; //establish reference
}
}
} else {
toolbarItem = nil;
@ -459,8 +464,9 @@ static NSString *LeaveOpenToolbarItemIdentifier = @"Leave Open Toggle Toolbar
// DownloadProgressDisplay protocol methods
- (void)onStartDownload
- (void)onStartDownload:(BOOL)isFileSave;
{
mIsFileSave = isFileSave;
[self showWindow: self];
[self setupDownloadTimer];
}

View File

@ -72,9 +72,11 @@ nsDownloadListener::Init(nsIURI *aSource, nsILocalFile *aTarget, const PRUnichar
{
mWebPersist = aPersist;
mWebPersist->SetProgressListener(this); // we form a cycle here, since we're a listener.
// we'll break this cycle in DownloadDone()
// we'll break this cycle in DownloadDone()
}
SetIsFileSave(aPersist != NULL);
mDestination = aTarget;
mURI = aSource;
mStartTime = startTime;
@ -250,7 +252,7 @@ void
nsDownloadListener::InitDialog()
{
// dialog has to be shown before the outlets get hooked up
[mDownloadDisplay onStartDownload];
[mDownloadDisplay onStartDownload:(BOOL)IsFileSave()];
if (mURI)
{

View File

@ -65,6 +65,7 @@ class nsDownloadListener;
BOOL mDownloadIsPaused;
BOOL mSaveFileDialogShouldStayOpen;
BOOL mIsFileSave;
BOOL mDownloadIsComplete;
long mCurrentProgress; // if progress bar is indeterminate, can still calc stats.

View File

@ -90,11 +90,13 @@ static NSString *LeaveOpenToolbarItemIdentifier = @"Leave Open Toggle Toolbar
mDownloadIsPaused = NO;
mDownloadIsComplete = NO;
nsCOMPtr<nsIPref> prefs(do_GetService(NS_PREF_CONTRACTID));
PRBool save = PR_FALSE;
prefs->GetBoolPref("browser.download.progressDnldDialog.keepAlive", &save);
mSaveFileDialogShouldStayOpen = save;
if (!mIsFileSave) {
nsCOMPtr<nsIPref> prefs(do_GetService(NS_PREF_CONTRACTID));
PRBool save = PR_FALSE;
prefs->GetBoolPref("browser.download.progressDnldDialog.keepAlive", &save);
mSaveFileDialogShouldStayOpen = save;
}
[self setupToolbar];
[mProgressBar setUsesThreadedAnimation:YES];
[mProgressBar startAnimation:self]; // move to onStateChange
@ -149,6 +151,7 @@ static NSString *LeaveOpenToolbarItemIdentifier = @"Leave Open Toggle Toolbar
return (mDownloadIsComplete);
return YES; // turn it on otherwise.
}
- (NSToolbarItem *) toolbar:(NSToolbar *)toolbar
itemForItemIdentifier:(NSString *)itemIdent
willBeInsertedIntoToolbar:(BOOL)willBeInserted
@ -187,23 +190,25 @@ static NSString *LeaveOpenToolbarItemIdentifier = @"Leave Open Toggle Toolbar
[toolbarItem setTarget:self];
[toolbarItem setAction:@selector(openFile)];
} else if ( [itemIdent isEqual:LeaveOpenToolbarItemIdentifier] ) {
if ( mSaveFileDialogShouldStayOpen ) {
[toolbarItem setLabel:NSLocalizedString(@"Leave Open",@"Leave Open")];
[toolbarItem setPaletteLabel:NSLocalizedString(@"Toggle Close Behavior",@"Toggle Close Behavior")];
[toolbarItem setToolTip:NSLocalizedString(@"LeaveOpenToolTip",@"Window will stay open when download finishes.")];
[toolbarItem setImage:[NSImage imageNamed:@"saveLeaveOpenYES"]];
[toolbarItem setTarget:self];
[toolbarItem setAction:@selector(toggleLeaveOpen)];
} else {
[toolbarItem setLabel:NSLocalizedString(@"Close When Done",@"Close When Done")];
[toolbarItem setPaletteLabel:NSLocalizedString(@"Toggle Close Behavior",@"Toggle Close Behavior")];
[toolbarItem setToolTip:NSLocalizedString(@"CloseWhenDoneToolTip",@"Window will close automatically when download finishes.")];
[toolbarItem setImage:[NSImage imageNamed:@"saveLeaveOpenNO"]];
[toolbarItem setTarget:self];
[toolbarItem setAction:@selector(toggleLeaveOpen)];
}
if ( willBeInserted ) {
leaveOpenToggleToolbarItem = toolbarItem; //establish reference
if ( !mIsFileSave ) {
if ( mSaveFileDialogShouldStayOpen ) {
[toolbarItem setLabel:NSLocalizedString(@"Leave Open",@"Leave Open")];
[toolbarItem setPaletteLabel:NSLocalizedString(@"Toggle Close Behavior",@"Toggle Close Behavior")];
[toolbarItem setToolTip:NSLocalizedString(@"LeaveOpenToolTip",@"Window will stay open when download finishes.")];
[toolbarItem setImage:[NSImage imageNamed:@"saveLeaveOpenYES"]];
[toolbarItem setTarget:self];
[toolbarItem setAction:@selector(toggleLeaveOpen)];
} else {
[toolbarItem setLabel:NSLocalizedString(@"Close When Done",@"Close When Done")];
[toolbarItem setPaletteLabel:NSLocalizedString(@"Toggle Close Behavior",@"Toggle Close Behavior")];
[toolbarItem setToolTip:NSLocalizedString(@"CloseWhenDoneToolTip",@"Window will close automatically when download finishes.")];
[toolbarItem setImage:[NSImage imageNamed:@"saveLeaveOpenNO"]];
[toolbarItem setTarget:self];
[toolbarItem setAction:@selector(toggleLeaveOpen)];
}
if ( willBeInserted ) {
leaveOpenToggleToolbarItem = toolbarItem; //establish reference
}
}
} else {
toolbarItem = nil;
@ -459,8 +464,9 @@ static NSString *LeaveOpenToolbarItemIdentifier = @"Leave Open Toggle Toolbar
// DownloadProgressDisplay protocol methods
- (void)onStartDownload
- (void)onStartDownload:(BOOL)isFileSave;
{
mIsFileSave = isFileSave;
[self showWindow: self];
[self setupDownloadTimer];
}

View File

@ -72,9 +72,11 @@ nsDownloadListener::Init(nsIURI *aSource, nsILocalFile *aTarget, const PRUnichar
{
mWebPersist = aPersist;
mWebPersist->SetProgressListener(this); // we form a cycle here, since we're a listener.
// we'll break this cycle in DownloadDone()
// we'll break this cycle in DownloadDone()
}
SetIsFileSave(aPersist != NULL);
mDestination = aTarget;
mURI = aSource;
mStartTime = startTime;
@ -250,7 +252,7 @@ void
nsDownloadListener::InitDialog()
{
// dialog has to be shown before the outlets get hooked up
[mDownloadDisplay onStartDownload];
[mDownloadDisplay onStartDownload:(BOOL)IsFileSave()];
if (mURI)
{

View File

@ -68,7 +68,7 @@ DownloadListenerFactory::DownloadListenerFactory()
: mControllerFactory(nil)
{
NS_INIT_ISUPPORTS();
mControllerFactory = [[[ChimeraDownloadControllerFactory alloc] init] retain];
mControllerFactory = [[ChimeraDownloadControllerFactory alloc] init];
}
DownloadListenerFactory::~DownloadListenerFactory()

View File

@ -110,7 +110,7 @@ class CHDownloader;
// protocol, and reuse nsDownloadListener to get download UI.
@protocol DownloadProgressDisplay
- (void)onStartDownload;
- (void)onStartDownload:(BOOL)isFileSave;
- (void)onEndDownload;
- (void)setProgressTo:(long)aCurProgress ofMax:(long)aMaxProgress;
@ -152,10 +152,15 @@ public:
virtual void CreateDownloadDisplay();
protected:
PRBool IsFileSave() { return mIsFileSave; }
void SetIsFileSave(PRBool inIsFileSave) { mIsFileSave = inIsFileSave; }
protected:
DownloadControllerFactory* mControllerFactory;
id <DownloadProgressDisplay> mDownloadDisplay; // something that implements the DownloadProgressDisplay protocol
PRBool mIsFileSave; // true if we're doing a save, rather than a download
};

View File

@ -55,6 +55,7 @@
CHDownloader::CHDownloader(DownloadControllerFactory* inControllerFactory)
: mControllerFactory(inControllerFactory)
, mDownloadDisplay(nil)
, mIsFileSave(PR_FALSE)
{
NS_INIT_ISUPPORTS();
[mControllerFactory retain];

View File

@ -68,7 +68,7 @@ DownloadListenerFactory::DownloadListenerFactory()
: mControllerFactory(nil)
{
NS_INIT_ISUPPORTS();
mControllerFactory = [[[ChimeraDownloadControllerFactory alloc] init] retain];
mControllerFactory = [[ChimeraDownloadControllerFactory alloc] init];
}
DownloadListenerFactory::~DownloadListenerFactory()

View File

@ -110,7 +110,7 @@ class CHDownloader;
// protocol, and reuse nsDownloadListener to get download UI.
@protocol DownloadProgressDisplay
- (void)onStartDownload;
- (void)onStartDownload:(BOOL)isFileSave;
- (void)onEndDownload;
- (void)setProgressTo:(long)aCurProgress ofMax:(long)aMaxProgress;
@ -152,10 +152,15 @@ public:
virtual void CreateDownloadDisplay();
protected:
PRBool IsFileSave() { return mIsFileSave; }
void SetIsFileSave(PRBool inIsFileSave) { mIsFileSave = inIsFileSave; }
protected:
DownloadControllerFactory* mControllerFactory;
id <DownloadProgressDisplay> mDownloadDisplay; // something that implements the DownloadProgressDisplay protocol
PRBool mIsFileSave; // true if we're doing a save, rather than a download
};

View File

@ -55,6 +55,7 @@
CHDownloader::CHDownloader(DownloadControllerFactory* inControllerFactory)
: mControllerFactory(inControllerFactory)
, mDownloadDisplay(nil)
, mIsFileSave(PR_FALSE)
{
NS_INIT_ISUPPORTS();
[mControllerFactory retain];

View File

@ -65,6 +65,7 @@ class nsDownloadListener;
BOOL mDownloadIsPaused;
BOOL mSaveFileDialogShouldStayOpen;
BOOL mIsFileSave;
BOOL mDownloadIsComplete;
long mCurrentProgress; // if progress bar is indeterminate, can still calc stats.

View File

@ -90,11 +90,13 @@ static NSString *LeaveOpenToolbarItemIdentifier = @"Leave Open Toggle Toolbar
mDownloadIsPaused = NO;
mDownloadIsComplete = NO;
nsCOMPtr<nsIPref> prefs(do_GetService(NS_PREF_CONTRACTID));
PRBool save = PR_FALSE;
prefs->GetBoolPref("browser.download.progressDnldDialog.keepAlive", &save);
mSaveFileDialogShouldStayOpen = save;
if (!mIsFileSave) {
nsCOMPtr<nsIPref> prefs(do_GetService(NS_PREF_CONTRACTID));
PRBool save = PR_FALSE;
prefs->GetBoolPref("browser.download.progressDnldDialog.keepAlive", &save);
mSaveFileDialogShouldStayOpen = save;
}
[self setupToolbar];
[mProgressBar setUsesThreadedAnimation:YES];
[mProgressBar startAnimation:self]; // move to onStateChange
@ -149,6 +151,7 @@ static NSString *LeaveOpenToolbarItemIdentifier = @"Leave Open Toggle Toolbar
return (mDownloadIsComplete);
return YES; // turn it on otherwise.
}
- (NSToolbarItem *) toolbar:(NSToolbar *)toolbar
itemForItemIdentifier:(NSString *)itemIdent
willBeInsertedIntoToolbar:(BOOL)willBeInserted
@ -187,23 +190,25 @@ static NSString *LeaveOpenToolbarItemIdentifier = @"Leave Open Toggle Toolbar
[toolbarItem setTarget:self];
[toolbarItem setAction:@selector(openFile)];
} else if ( [itemIdent isEqual:LeaveOpenToolbarItemIdentifier] ) {
if ( mSaveFileDialogShouldStayOpen ) {
[toolbarItem setLabel:NSLocalizedString(@"Leave Open",@"Leave Open")];
[toolbarItem setPaletteLabel:NSLocalizedString(@"Toggle Close Behavior",@"Toggle Close Behavior")];
[toolbarItem setToolTip:NSLocalizedString(@"LeaveOpenToolTip",@"Window will stay open when download finishes.")];
[toolbarItem setImage:[NSImage imageNamed:@"saveLeaveOpenYES"]];
[toolbarItem setTarget:self];
[toolbarItem setAction:@selector(toggleLeaveOpen)];
} else {
[toolbarItem setLabel:NSLocalizedString(@"Close When Done",@"Close When Done")];
[toolbarItem setPaletteLabel:NSLocalizedString(@"Toggle Close Behavior",@"Toggle Close Behavior")];
[toolbarItem setToolTip:NSLocalizedString(@"CloseWhenDoneToolTip",@"Window will close automatically when download finishes.")];
[toolbarItem setImage:[NSImage imageNamed:@"saveLeaveOpenNO"]];
[toolbarItem setTarget:self];
[toolbarItem setAction:@selector(toggleLeaveOpen)];
}
if ( willBeInserted ) {
leaveOpenToggleToolbarItem = toolbarItem; //establish reference
if ( !mIsFileSave ) {
if ( mSaveFileDialogShouldStayOpen ) {
[toolbarItem setLabel:NSLocalizedString(@"Leave Open",@"Leave Open")];
[toolbarItem setPaletteLabel:NSLocalizedString(@"Toggle Close Behavior",@"Toggle Close Behavior")];
[toolbarItem setToolTip:NSLocalizedString(@"LeaveOpenToolTip",@"Window will stay open when download finishes.")];
[toolbarItem setImage:[NSImage imageNamed:@"saveLeaveOpenYES"]];
[toolbarItem setTarget:self];
[toolbarItem setAction:@selector(toggleLeaveOpen)];
} else {
[toolbarItem setLabel:NSLocalizedString(@"Close When Done",@"Close When Done")];
[toolbarItem setPaletteLabel:NSLocalizedString(@"Toggle Close Behavior",@"Toggle Close Behavior")];
[toolbarItem setToolTip:NSLocalizedString(@"CloseWhenDoneToolTip",@"Window will close automatically when download finishes.")];
[toolbarItem setImage:[NSImage imageNamed:@"saveLeaveOpenNO"]];
[toolbarItem setTarget:self];
[toolbarItem setAction:@selector(toggleLeaveOpen)];
}
if ( willBeInserted ) {
leaveOpenToggleToolbarItem = toolbarItem; //establish reference
}
}
} else {
toolbarItem = nil;
@ -459,8 +464,9 @@ static NSString *LeaveOpenToolbarItemIdentifier = @"Leave Open Toggle Toolbar
// DownloadProgressDisplay protocol methods
- (void)onStartDownload
- (void)onStartDownload:(BOOL)isFileSave;
{
mIsFileSave = isFileSave;
[self showWindow: self];
[self setupDownloadTimer];
}

View File

@ -72,9 +72,11 @@ nsDownloadListener::Init(nsIURI *aSource, nsILocalFile *aTarget, const PRUnichar
{
mWebPersist = aPersist;
mWebPersist->SetProgressListener(this); // we form a cycle here, since we're a listener.
// we'll break this cycle in DownloadDone()
// we'll break this cycle in DownloadDone()
}
SetIsFileSave(aPersist != NULL);
mDestination = aTarget;
mURI = aSource;
mStartTime = startTime;
@ -250,7 +252,7 @@ void
nsDownloadListener::InitDialog()
{
// dialog has to be shown before the outlets get hooked up
[mDownloadDisplay onStartDownload];
[mDownloadDisplay onStartDownload:(BOOL)IsFileSave()];
if (mURI)
{

View File

@ -65,6 +65,7 @@ class nsDownloadListener;
BOOL mDownloadIsPaused;
BOOL mSaveFileDialogShouldStayOpen;
BOOL mIsFileSave;
BOOL mDownloadIsComplete;
long mCurrentProgress; // if progress bar is indeterminate, can still calc stats.

View File

@ -90,11 +90,13 @@ static NSString *LeaveOpenToolbarItemIdentifier = @"Leave Open Toggle Toolbar
mDownloadIsPaused = NO;
mDownloadIsComplete = NO;
nsCOMPtr<nsIPref> prefs(do_GetService(NS_PREF_CONTRACTID));
PRBool save = PR_FALSE;
prefs->GetBoolPref("browser.download.progressDnldDialog.keepAlive", &save);
mSaveFileDialogShouldStayOpen = save;
if (!mIsFileSave) {
nsCOMPtr<nsIPref> prefs(do_GetService(NS_PREF_CONTRACTID));
PRBool save = PR_FALSE;
prefs->GetBoolPref("browser.download.progressDnldDialog.keepAlive", &save);
mSaveFileDialogShouldStayOpen = save;
}
[self setupToolbar];
[mProgressBar setUsesThreadedAnimation:YES];
[mProgressBar startAnimation:self]; // move to onStateChange
@ -149,6 +151,7 @@ static NSString *LeaveOpenToolbarItemIdentifier = @"Leave Open Toggle Toolbar
return (mDownloadIsComplete);
return YES; // turn it on otherwise.
}
- (NSToolbarItem *) toolbar:(NSToolbar *)toolbar
itemForItemIdentifier:(NSString *)itemIdent
willBeInsertedIntoToolbar:(BOOL)willBeInserted
@ -187,23 +190,25 @@ static NSString *LeaveOpenToolbarItemIdentifier = @"Leave Open Toggle Toolbar
[toolbarItem setTarget:self];
[toolbarItem setAction:@selector(openFile)];
} else if ( [itemIdent isEqual:LeaveOpenToolbarItemIdentifier] ) {
if ( mSaveFileDialogShouldStayOpen ) {
[toolbarItem setLabel:NSLocalizedString(@"Leave Open",@"Leave Open")];
[toolbarItem setPaletteLabel:NSLocalizedString(@"Toggle Close Behavior",@"Toggle Close Behavior")];
[toolbarItem setToolTip:NSLocalizedString(@"LeaveOpenToolTip",@"Window will stay open when download finishes.")];
[toolbarItem setImage:[NSImage imageNamed:@"saveLeaveOpenYES"]];
[toolbarItem setTarget:self];
[toolbarItem setAction:@selector(toggleLeaveOpen)];
} else {
[toolbarItem setLabel:NSLocalizedString(@"Close When Done",@"Close When Done")];
[toolbarItem setPaletteLabel:NSLocalizedString(@"Toggle Close Behavior",@"Toggle Close Behavior")];
[toolbarItem setToolTip:NSLocalizedString(@"CloseWhenDoneToolTip",@"Window will close automatically when download finishes.")];
[toolbarItem setImage:[NSImage imageNamed:@"saveLeaveOpenNO"]];
[toolbarItem setTarget:self];
[toolbarItem setAction:@selector(toggleLeaveOpen)];
}
if ( willBeInserted ) {
leaveOpenToggleToolbarItem = toolbarItem; //establish reference
if ( !mIsFileSave ) {
if ( mSaveFileDialogShouldStayOpen ) {
[toolbarItem setLabel:NSLocalizedString(@"Leave Open",@"Leave Open")];
[toolbarItem setPaletteLabel:NSLocalizedString(@"Toggle Close Behavior",@"Toggle Close Behavior")];
[toolbarItem setToolTip:NSLocalizedString(@"LeaveOpenToolTip",@"Window will stay open when download finishes.")];
[toolbarItem setImage:[NSImage imageNamed:@"saveLeaveOpenYES"]];
[toolbarItem setTarget:self];
[toolbarItem setAction:@selector(toggleLeaveOpen)];
} else {
[toolbarItem setLabel:NSLocalizedString(@"Close When Done",@"Close When Done")];
[toolbarItem setPaletteLabel:NSLocalizedString(@"Toggle Close Behavior",@"Toggle Close Behavior")];
[toolbarItem setToolTip:NSLocalizedString(@"CloseWhenDoneToolTip",@"Window will close automatically when download finishes.")];
[toolbarItem setImage:[NSImage imageNamed:@"saveLeaveOpenNO"]];
[toolbarItem setTarget:self];
[toolbarItem setAction:@selector(toggleLeaveOpen)];
}
if ( willBeInserted ) {
leaveOpenToggleToolbarItem = toolbarItem; //establish reference
}
}
} else {
toolbarItem = nil;
@ -459,8 +464,9 @@ static NSString *LeaveOpenToolbarItemIdentifier = @"Leave Open Toggle Toolbar
// DownloadProgressDisplay protocol methods
- (void)onStartDownload
- (void)onStartDownload:(BOOL)isFileSave;
{
mIsFileSave = isFileSave;
[self showWindow: self];
[self setupDownloadTimer];
}

View File

@ -72,9 +72,11 @@ nsDownloadListener::Init(nsIURI *aSource, nsILocalFile *aTarget, const PRUnichar
{
mWebPersist = aPersist;
mWebPersist->SetProgressListener(this); // we form a cycle here, since we're a listener.
// we'll break this cycle in DownloadDone()
// we'll break this cycle in DownloadDone()
}
SetIsFileSave(aPersist != NULL);
mDestination = aTarget;
mURI = aSource;
mStartTime = startTime;
@ -250,7 +252,7 @@ void
nsDownloadListener::InitDialog()
{
// dialog has to be shown before the outlets get hooked up
[mDownloadDisplay onStartDownload];
[mDownloadDisplay onStartDownload:(BOOL)IsFileSave()];
if (mURI)
{

View File

@ -68,7 +68,7 @@ DownloadListenerFactory::DownloadListenerFactory()
: mControllerFactory(nil)
{
NS_INIT_ISUPPORTS();
mControllerFactory = [[[ChimeraDownloadControllerFactory alloc] init] retain];
mControllerFactory = [[ChimeraDownloadControllerFactory alloc] init];
}
DownloadListenerFactory::~DownloadListenerFactory()

View File

@ -110,7 +110,7 @@ class CHDownloader;
// protocol, and reuse nsDownloadListener to get download UI.
@protocol DownloadProgressDisplay
- (void)onStartDownload;
- (void)onStartDownload:(BOOL)isFileSave;
- (void)onEndDownload;
- (void)setProgressTo:(long)aCurProgress ofMax:(long)aMaxProgress;
@ -152,10 +152,15 @@ public:
virtual void CreateDownloadDisplay();
protected:
PRBool IsFileSave() { return mIsFileSave; }
void SetIsFileSave(PRBool inIsFileSave) { mIsFileSave = inIsFileSave; }
protected:
DownloadControllerFactory* mControllerFactory;
id <DownloadProgressDisplay> mDownloadDisplay; // something that implements the DownloadProgressDisplay protocol
PRBool mIsFileSave; // true if we're doing a save, rather than a download
};

View File

@ -55,6 +55,7 @@
CHDownloader::CHDownloader(DownloadControllerFactory* inControllerFactory)
: mControllerFactory(inControllerFactory)
, mDownloadDisplay(nil)
, mIsFileSave(PR_FALSE)
{
NS_INIT_ISUPPORTS();
[mControllerFactory retain];