Diff for /chimera/ProgressDlgController.mm between versions 1.5 and 1.10

version 1.5, 2002/02/04 00:14:25 version 1.10, 2002/02/04 05:18:41
Line 8 Line 8
   
 #import "ProgressDlgController.h"  #import "ProgressDlgController.h"
   
   #include "nsCOMPtr.h"
   #include "nsString.h"
 #include "nsIWebBrowserPersist.h"  #include "nsIWebBrowserPersist.h"
 #include "nsIInputStream.h"  #include "nsIInputStream.h"
 #include "nsIURL.h"  #include "nsIURL.h"
#include "nsIDOMDocument.h"#include "nsILocalFile.h"
 #include "nsIDOMHTMLDocument.h"
 #include "nsIWebProgressListener.h"
 #include "nsIComponentManager.h"
 #include "nsIPrefBranch.h"
 
 const char* prefContractID = "@mozilla.org/preferences-service;1";
 
 class nsDownloadListener : public nsIWebProgressListener
 {
 public:
     nsDownloadListener(ProgressDlgController* aController,
                        nsIWebBrowserPersist* aPersist,
                        nsISupports* aSource,
                        NSString* aDestination,
                        const char* aContentType,
                        nsIInputStream* aPostData,
                        BOOL aBypassCache)
     {
         NS_INIT_REFCNT();
         mController = aController;
         mWebPersist = aPersist;
         // The source is either a simple URL or a complete document.
         mURL = do_QueryInterface(aSource);
         if (!mURL)
             mDocument = do_QueryInterface(aSource);
         nsCAutoString dstStr = [aDestination cString];
         NS_NewLocalFile(dstStr.get(), PR_FALSE, getter_AddRefs(mDestination));
         mContentType = aContentType;
         mPostData = aPostData;
         mBypassCache = aBypassCache;
     };
     
     virtual ~nsDownloadListener() {};
 
     NS_DECL_ISUPPORTS
     NS_DECL_NSIWEBPROGRESSLISTENER
   
 public:
     void BeginDownload();
     void InitDialog();
     
 private: // Member variables
     ProgressDlgController* mController; // Controller for our UI.
     nsCOMPtr<nsIWebBrowserPersist> mWebPersist; // Our web persist object.
     nsCOMPtr<nsIURL> mURL; // The URL of our source file. Null if we're saving a complete document.
     nsCOMPtr<nsILocalFile> mDestination; // Our destination URL.
     nsCString mContentType; // Our content type string.
     nsCOMPtr<nsIDOMHTMLDocument> mDocument; // A DOM document.  Null if we're only saving a simple URL.
     nsCOMPtr<nsIInputStream> mPostData;  // For complete documents, this is our post data from session history.
     PRBool mBypassCache; // Whether we should bypass the cache or not.
 };
 
 NS_IMPL_ISUPPORTS1(nsDownloadListener, nsIWebProgressListener)
 
 /* void onProgressChange (in nsIWebProgress aWebProgress, in nsIRequest aRequest, in long aCurSelfProgress, in long aMaxSelfProgress, in long aCurTotalProgress, in long aMaxTotalProgress); */
 NS_IMETHODIMP 
 nsDownloadListener::OnProgressChange(nsIWebProgress *aWebProgress, 
                                          nsIRequest *aRequest, 
                                          PRInt32 aCurSelfProgress, 
                                          PRInt32 aMaxSelfProgress, 
                                          PRInt32 aCurTotalProgress, 
                                          PRInt32 aMaxTotalProgress)
 {
   return NS_OK;
 }
 
 /* void onLocationChange (in nsIWebProgress aWebProgress, in nsIRequest aRequest, in nsIURI location); */
 NS_IMETHODIMP 
 nsDownloadListener::OnLocationChange(nsIWebProgress *aWebProgress, 
                                          nsIRequest *aRequest, 
                                          nsIURI *location)
 {
   return NS_OK;
 }
 
 /* void onStatusChange (in nsIWebProgress aWebProgress, in nsIRequest aRequest, in nsresult aStatus, in wstring aMessage); */
 NS_IMETHODIMP 
 nsDownloadListener::OnStatusChange(nsIWebProgress *aWebProgress, 
                                        nsIRequest *aRequest, 
                                        nsresult aStatus, 
                                        const PRUnichar *aMessage)
 {
   return NS_OK;
 }
 
 /* void onSecurityChange (in nsIWebProgress aWebProgress, in nsIRequest aRequest, in long state); */
 NS_IMETHODIMP 
 nsDownloadListener::OnSecurityChange(nsIWebProgress *aWebProgress, 
                                                       nsIRequest *aRequest, 
                                   PRInt32 state)
 {
   return NS_OK;
 }
 
 // Implementation of nsIWebProgressListener
 /* void onStateChange (in nsIWebProgress aWebProgress, in nsIRequest aRequest, in long aStateFlags, in unsigned long aStatus); */
 NS_IMETHODIMP 
 nsDownloadListener::OnStateChange(nsIWebProgress *aWebProgress, 
                                       nsIRequest *aRequest, 
                                       PRInt32 aStateFlags, 
                                       PRUint32 aStatus)
 {
     return NS_OK;
 }
 
 void
 nsDownloadListener::BeginDownload()
 {
     if (mWebPersist) {
         mWebPersist->SetProgressListener(this);
         PRInt32 flags = nsIWebBrowserPersist::PERSIST_FLAGS_NO_CONVERSION | 
                         nsIWebBrowserPersist::PERSIST_FLAGS_REPLACE_EXISTING_FILES;
         if (mBypassCache)
             flags |= nsIWebBrowserPersist::PERSIST_FLAGS_BYPASS_CACHE;
         else
             flags |= nsIWebBrowserPersist::PERSIST_FLAGS_FROM_CACHE;
             
         if (mURL)
             mWebPersist->SaveURI(mURL, mPostData, mDestination);
         else {
             PRInt32 encodingFlags = 0;
             nsCOMPtr<nsILocalFile> filesFolder;
             
             if (!mContentType.Equals("text/plain")) {
                 // Create a local directory in the same dir as our file.  It
                 // will hold our associated files.
                 filesFolder = do_CreateInstance("@mozilla.org/file/local;1");
                 nsXPIDLString unicodePath;
                 mDestination->GetUnicodePath(getter_Copies(unicodePath));
                 filesFolder->InitWithUnicodePath(unicodePath.get());
                 
                 nsXPIDLCString leafName;
                 filesFolder->GetLeafName(getter_Copies(leafName));
                 nsCAutoString nameMinusExt(leafName.get());
                 PRInt32 index = nameMinusExt.RFind(".");
                 if (index >= 0)
                     nameMinusExt.Left(nameMinusExt, index);
                 nameMinusExt += " Files"; // XXXdwh needs to be localizable!
                 filesFolder->SetLeafName(nameMinusExt.get());
                 PRBool exists = PR_FALSE;
                 filesFolder->Exists(&exists);
                 if (!exists)
                     filesFolder->Create(nsILocalFile::DIRECTORY_TYPE, 0755);
             }
             else
                 encodingFlags |= nsIWebBrowserPersist::ENCODE_FLAGS_FORMATTED |
                                  nsIWebBrowserPersist::ENCODE_FLAGS_ABSOLUTE_LINKS |
                                  nsIWebBrowserPersist::ENCODE_FLAGS_NOFRAMES_CONTENT;
                                  
             mWebPersist->SaveDocument(mDocument, mDestination, filesFolder, mContentType.get(),
                                       encodingFlags, 80);
         }
     }
     
     InitDialog();
 }
 
 void
 nsDownloadListener::InitDialog()
 {
     if (!mURL && !mDocument)
         return;
         
     if (mWebPersist) {
         if (mURL) {
             nsXPIDLCString spec;
             mURL->GetSpec(getter_Copies(spec));
             [mController setSourceURL: spec.get()];
         }
         else {
             nsAutoString spec;
             mDocument->GetURL(spec);
             nsCAutoString spec2; spec2.AssignWithConversion(spec);
             [mController setSourceURL: spec2.get()];
         }
     }
     
     nsXPIDLString path;
     mDestination->GetUnicodePath(getter_Copies(path));
     nsCAutoString pathStr; pathStr.AssignWithConversion(path.get());
     [mController setDestination: pathStr.get()];
     
     
 }
   
 static NSString *SaveFileToolbarIdentifier                      = @"Save File Dialog Toolbar";  static NSString *SaveFileToolbarIdentifier                      = @"Save File Dialog Toolbar";
 static NSString *CancelToolbarItemIdentifier            = @"Cancel Toolbar Item";  static NSString *CancelToolbarItemIdentifier            = @"Cancel Toolbar Item";
Line 26  static NSString *LeaveOpenToolbarItemIde Line 212  static NSString *LeaveOpenToolbarItemIde
   
 @implementation ProgressDlgController  @implementation ProgressDlgController
   
 - (id)init  
 {  
     if ((self = [super init])) {  
         mDownloadIsPaused = NO;  //Get this value from preferences instead of hardcoding NO.  
         mSaveFileDialogShouldStayOpen = NO;  
     }  
     return self;  
 }  
   
 -(void)setWebPersist:(nsIWebBrowserPersist*)aPersist   -(void)setWebPersist:(nsIWebBrowserPersist*)aPersist 
               source:(nsISupports*)aSource                source:(nsISupports*)aSource
          destination:(NSString*)aDestination           destination:(NSString*)aDestination
Line 42  static NSString *LeaveOpenToolbarItemIde Line 219  static NSString *LeaveOpenToolbarItemIde
             postData:(nsIInputStream*)aInputStream              postData:(nsIInputStream*)aInputStream
          bypassCache:(BOOL)aBypassCache           bypassCache:(BOOL)aBypassCache
 {  {
       mDownloadListener = new nsDownloadListener(self, aPersist, aSource,
                                                  aDestination, aContentType,
                                                  aInputStream, aBypassCache);
       NS_ADDREF(mDownloadListener);
   }
   
   -(void) setSourceURL: (const char*)aSource
   {
       [mFromField setStringValue: [NSString stringWithCString: aSource]];
   }
   
   -(void) setDestination: (const char*)aDestination
   {
       [mToField setStringValue: [NSString stringWithCString: aDestination]];
 }  }
   
 - (void)windowDidLoad  - (void)windowDidLoad
 {  {
       mDownloadIsPaused = NO; 
       nsCOMPtr<nsIPrefBranch> prefs(do_GetService(prefContractID));
       PRBool save = PR_FALSE;
       prefs->GetBoolPref("browser.download.progressDnldDialog.keepAlive", 
                           &save);
       mSaveFileDialogShouldStayOpen = save;
   
     [self setupToolbar];      [self setupToolbar];
       if (mDownloadListener)
           mDownloadListener->BeginDownload();
 }  }
   
 - (void)setupToolbar  - (void)setupToolbar
Line 63  static NSString *LeaveOpenToolbarItemIde Line 262  static NSString *LeaveOpenToolbarItemIde
   
 - (NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar *)toolbar  - (NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar *)toolbar
 {  {
       NSLog(@"toolbarAllowedItemIdentifiers:");
     return [NSArray arrayWithObjects: CancelToolbarItemIdentifier,      return [NSArray arrayWithObjects: CancelToolbarItemIdentifier,
         PauseResumeToolbarItemIdentifier,          PauseResumeToolbarItemIdentifier,
         ShowFileToolbarItemIdentifier,          ShowFileToolbarItemIdentifier,
Line 77  static NSString *LeaveOpenToolbarItemIde Line 277  static NSString *LeaveOpenToolbarItemIde
   
 - (NSArray *)toolbarDefaultItemIdentifiers:(NSToolbar *)toolbar  - (NSArray *)toolbarDefaultItemIdentifiers:(NSToolbar *)toolbar
 {  {
       NSLog(@"toolbarDefaultItemIdentifiers:");
     return [NSArray arrayWithObjects: CancelToolbarItemIdentifier,      return [NSArray arrayWithObjects: CancelToolbarItemIdentifier,
         PauseResumeToolbarItemIdentifier,          PauseResumeToolbarItemIdentifier,
         NSToolbarFlexibleSpaceItemIdentifier,          NSToolbarFlexibleSpaceItemIdentifier,
         LeaveOpenToolbarItemIdentifier,          LeaveOpenToolbarItemIdentifier,
           NSToolbarFlexibleSpaceItemIdentifier,
         ShowFileToolbarItemIdentifier,          ShowFileToolbarItemIdentifier,
         OpenFileToolbarItemIdentifier,          OpenFileToolbarItemIdentifier,
         nil];          nil];
Line 90  static NSString *LeaveOpenToolbarItemIde Line 292  static NSString *LeaveOpenToolbarItemIde
       itemForItemIdentifier:(NSString *)itemIdent        itemForItemIdentifier:(NSString *)itemIdent
   willBeInsertedIntoToolbar:(BOOL)willBeInserted    willBeInsertedIntoToolbar:(BOOL)willBeInserted
 {  {
       NSLog(@"toolbar:itemForItemIdentifier:%@ willBeInsertedIntoToolbar:%d", itemIdent, willBeInserted);
     NSToolbarItem *toolbarItem = [[[NSToolbarItem alloc] initWithItemIdentifier:itemIdent] autorelease];      NSToolbarItem *toolbarItem = [[[NSToolbarItem alloc] initWithItemIdentifier:itemIdent] autorelease];
   
     if ( [itemIdent isEqual:CancelToolbarItemIdentifier] ) {      if ( [itemIdent isEqual:CancelToolbarItemIdentifier] ) {
Line 106  static NSString *LeaveOpenToolbarItemIde Line 309  static NSString *LeaveOpenToolbarItemIde
         [toolbarItem setImage:[NSImage imageNamed:@"savePause"]];          [toolbarItem setImage:[NSImage imageNamed:@"savePause"]];
         [toolbarItem setTarget:self];          [toolbarItem setTarget:self];
         [toolbarItem setAction:@selector(pauseAndResumeDownload)];          [toolbarItem setAction:@selector(pauseAndResumeDownload)];
        pauseResumeToggleToolbarItem = toolbarItem; //establish reference        if ( willBeInserted ) {
             pauseResumeToggleToolbarItem = toolbarItem; //establish reference
         }
     } else if ( [itemIdent isEqual:ShowFileToolbarItemIdentifier] ) {      } else if ( [itemIdent isEqual:ShowFileToolbarItemIdentifier] ) {
         [toolbarItem setLabel:@"Show File"];          [toolbarItem setLabel:@"Show File"];
         [toolbarItem setPaletteLabel:@"Show File"];          [toolbarItem setPaletteLabel:@"Show File"];
Line 137  static NSString *LeaveOpenToolbarItemIde Line 342  static NSString *LeaveOpenToolbarItemIde
             [toolbarItem setTarget:self];              [toolbarItem setTarget:self];
             [toolbarItem setAction:@selector(toggleLeaveOpen)];              [toolbarItem setAction:@selector(toggleLeaveOpen)];
         }          }
        leaveOpenToggleToolbarItem = toolbarItem; //establish reference        if ( willBeInserted ) {
             leaveOpenToggleToolbarItem = toolbarItem; //establish reference
         }
     } else {      } else {
         toolbarItem = nil;          toolbarItem = nil;
     }      }
Line 183  static NSString *LeaveOpenToolbarItemIde Line 390  static NSString *LeaveOpenToolbarItemIde
 -(void)toggleLeaveOpen  -(void)toggleLeaveOpen
 {  {
     if ( ! mSaveFileDialogShouldStayOpen ) {      if ( ! mSaveFileDialogShouldStayOpen ) {
         //Do logic to set the preference and make it take effect  
         mSaveFileDialogShouldStayOpen = YES;          mSaveFileDialogShouldStayOpen = YES;
         [leaveOpenToggleToolbarItem setLabel:@"Leave Open"];          [leaveOpenToggleToolbarItem setLabel:@"Leave Open"];
         [leaveOpenToggleToolbarItem setPaletteLabel:@"Toggle Close Behavior"];          [leaveOpenToggleToolbarItem setPaletteLabel:@"Toggle Close Behavior"];
         [leaveOpenToggleToolbarItem setToolTip:@"Window will stay open when download finishes."];          [leaveOpenToggleToolbarItem setToolTip:@"Window will stay open when download finishes."];
         [leaveOpenToggleToolbarItem setImage:[NSImage imageNamed:@"saveLeaveOpenYES"]];          [leaveOpenToggleToolbarItem setImage:[NSImage imageNamed:@"saveLeaveOpenYES"]];
     } else {      } else {
         //Do logic to set the preference and make it take effect  
         mSaveFileDialogShouldStayOpen = NO;          mSaveFileDialogShouldStayOpen = NO;
         [leaveOpenToggleToolbarItem setLabel:@"Close When Done"];          [leaveOpenToggleToolbarItem setLabel:@"Close When Done"];
         [leaveOpenToggleToolbarItem setPaletteLabel:@"Toggle Close Behavior"];          [leaveOpenToggleToolbarItem setPaletteLabel:@"Toggle Close Behavior"];
         [leaveOpenToggleToolbarItem setToolTip:@"Window will close automatically when download finishes."];          [leaveOpenToggleToolbarItem setToolTip:@"Window will close automatically when download finishes."];
         [leaveOpenToggleToolbarItem setImage:[NSImage imageNamed:@"saveLeaveOpenNO"]];          [leaveOpenToggleToolbarItem setImage:[NSImage imageNamed:@"saveLeaveOpenNO"]];
     }      }
       
       nsCOMPtr<nsIPrefBranch> prefs(do_GetService(prefContractID));
       prefs->SetBoolPref("browser.download.progressDnldDialog.keepAlive", mSaveFileDialogShouldStayOpen);
   }
   
   - (void)windowWillClose:(NSNotification *)notification
   {
       [self autorelease];
   }
   
   - (void)dealloc
   {
       NS_IF_RELEASE(mDownloadListener);
       [super dealloc];
 }  }
   
 @end  @end

Removed from v.1.5  
changed lines
  Added in v.1.10


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>