mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-09 03:15:11 +00:00
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:
parent
09bf449ea4
commit
41894e801f
@ -68,7 +68,7 @@ DownloadListenerFactory::DownloadListenerFactory()
|
||||
: mControllerFactory(nil)
|
||||
{
|
||||
NS_INIT_ISUPPORTS();
|
||||
mControllerFactory = [[[ChimeraDownloadControllerFactory alloc] init] retain];
|
||||
mControllerFactory = [[ChimeraDownloadControllerFactory alloc] init];
|
||||
}
|
||||
|
||||
DownloadListenerFactory::~DownloadListenerFactory()
|
||||
|
@ -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
|
||||
};
|
||||
|
||||
|
@ -55,6 +55,7 @@
|
||||
CHDownloader::CHDownloader(DownloadControllerFactory* inControllerFactory)
|
||||
: mControllerFactory(inControllerFactory)
|
||||
, mDownloadDisplay(nil)
|
||||
, mIsFileSave(PR_FALSE)
|
||||
{
|
||||
NS_INIT_ISUPPORTS();
|
||||
[mControllerFactory retain];
|
||||
|
@ -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.
|
||||
|
||||
|
@ -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];
|
||||
}
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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.
|
||||
|
||||
|
@ -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];
|
||||
}
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -68,7 +68,7 @@ DownloadListenerFactory::DownloadListenerFactory()
|
||||
: mControllerFactory(nil)
|
||||
{
|
||||
NS_INIT_ISUPPORTS();
|
||||
mControllerFactory = [[[ChimeraDownloadControllerFactory alloc] init] retain];
|
||||
mControllerFactory = [[ChimeraDownloadControllerFactory alloc] init];
|
||||
}
|
||||
|
||||
DownloadListenerFactory::~DownloadListenerFactory()
|
||||
|
@ -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
|
||||
};
|
||||
|
||||
|
@ -55,6 +55,7 @@
|
||||
CHDownloader::CHDownloader(DownloadControllerFactory* inControllerFactory)
|
||||
: mControllerFactory(inControllerFactory)
|
||||
, mDownloadDisplay(nil)
|
||||
, mIsFileSave(PR_FALSE)
|
||||
{
|
||||
NS_INIT_ISUPPORTS();
|
||||
[mControllerFactory retain];
|
||||
|
@ -68,7 +68,7 @@ DownloadListenerFactory::DownloadListenerFactory()
|
||||
: mControllerFactory(nil)
|
||||
{
|
||||
NS_INIT_ISUPPORTS();
|
||||
mControllerFactory = [[[ChimeraDownloadControllerFactory alloc] init] retain];
|
||||
mControllerFactory = [[ChimeraDownloadControllerFactory alloc] init];
|
||||
}
|
||||
|
||||
DownloadListenerFactory::~DownloadListenerFactory()
|
||||
|
@ -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
|
||||
};
|
||||
|
||||
|
@ -55,6 +55,7 @@
|
||||
CHDownloader::CHDownloader(DownloadControllerFactory* inControllerFactory)
|
||||
: mControllerFactory(inControllerFactory)
|
||||
, mDownloadDisplay(nil)
|
||||
, mIsFileSave(PR_FALSE)
|
||||
{
|
||||
NS_INIT_ISUPPORTS();
|
||||
[mControllerFactory retain];
|
||||
|
@ -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.
|
||||
|
||||
|
@ -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];
|
||||
}
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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.
|
||||
|
||||
|
@ -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];
|
||||
}
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -68,7 +68,7 @@ DownloadListenerFactory::DownloadListenerFactory()
|
||||
: mControllerFactory(nil)
|
||||
{
|
||||
NS_INIT_ISUPPORTS();
|
||||
mControllerFactory = [[[ChimeraDownloadControllerFactory alloc] init] retain];
|
||||
mControllerFactory = [[ChimeraDownloadControllerFactory alloc] init];
|
||||
}
|
||||
|
||||
DownloadListenerFactory::~DownloadListenerFactory()
|
||||
|
@ -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
|
||||
};
|
||||
|
||||
|
@ -55,6 +55,7 @@
|
||||
CHDownloader::CHDownloader(DownloadControllerFactory* inControllerFactory)
|
||||
: mControllerFactory(inControllerFactory)
|
||||
, mDownloadDisplay(nil)
|
||||
, mIsFileSave(PR_FALSE)
|
||||
{
|
||||
NS_INIT_ISUPPORTS();
|
||||
[mControllerFactory retain];
|
||||
|
Loading…
Reference in New Issue
Block a user