--- chimera/NSBrowserView.mm 2002/02/03 06:26:15 1.3 +++ chimera/NSBrowserView.mm 2002/02/05 10:16:31 1.16 @@ -37,6 +37,7 @@ #import "NSBrowserView.h" #import "ProgressDlgController.h" +#import "FindDlgController.h" #import "nsCocoaBrowserService.h" // Embedding includes @@ -56,6 +57,11 @@ #include "nsXPIDLString.h" #include "nsCOMPtr.h" +// Printing +#include "nsIWebBrowserPrint.h" +#include "nsIPrintSettings.h" + +// Saving of links/images/docs #include "nsIWebBrowserFocus.h" #include "nsIDOMHTMLDocument.h" #include "nsIDocument.h" @@ -72,6 +78,13 @@ #include "nsIHistoryEntry.h" #include "nsISHEntry.h" +// Cut/copy/paste +#include "nsIClipboardCommands.h" +#include "nsIInterfaceRequestorUtils.h" + +const char* persistContractID = "@mozilla.org/embedding/browser/nsWebBrowserPersist;1"; +const char* dirServiceContractID = "@mozilla.org/file/directory_service;1"; + class nsCocoaBrowserListener : public nsSupportsWeakReference, public nsIInterfaceRequestor, public nsIWebBrowserChrome, @@ -602,7 +615,9 @@ public: mFilterList = aFilterList; } - virtual ~nsHeaderSniffer() {}; + virtual ~nsHeaderSniffer() + { + }; NS_DECL_ISUPPORTS NS_DECL_NSIWEBPROGRESSLISTENER @@ -800,8 +815,9 @@ void nsHeaderSniffer::PerformSave() else sourceData = do_QueryInterface(mURL); + nsCOMPtr webPersist(do_CreateInstance(persistContractID)); ProgressDlgController* progressDialog = [[ProgressDlgController alloc] initWithWindowNibName: @"ProgressDialog"]; - [progressDialog setWebPersist: mPersist + [progressDialog setWebPersist: webPersist source: sourceData.get() destination: [savePanel filename] contentType: mContentType.get() @@ -892,12 +908,19 @@ nsHeaderSniffer::OnSecurityChange(nsIWeb return self; } +- (void)destroyWebBrowser +{ + nsCOMPtr baseWin = do_QueryInterface(_webBrowser); + baseWin->Destroy(); +} + - (void)dealloc { NS_RELEASE(_listener); NS_IF_RELEASE(_webBrowser); - nsCocoaBrowserService::TermEmbedding(); - + + nsCocoaBrowserService::BrowserClosed(); + [super dealloc]; } @@ -1089,9 +1112,6 @@ nsHeaderSniffer::OnSecurityChange(nsIWeb } -const char* persistContractID = "@mozilla.org/embedding/browser/nsWebBrowserPersist;1"; -const char* dirServiceContractID = "@mozilla.org/file/directory_service;1"; - -(void) saveInternal: (nsIURI*)aURI withDocument: (nsIDOMDocument*)aDocument bypassCache: (BOOL)aBypassCache @@ -1140,6 +1160,49 @@ const char* dirServiceContractID = "@moz webPersist->SaveURI(aURI, nsnull, tmpFile); } +-(void)printDocument +{ + nsCOMPtr domWindow; + _webBrowser->GetContentDOMWindow(getter_AddRefs(domWindow)); + nsCOMPtr ir(do_QueryInterface(domWindow)); + nsCOMPtr print; + ir->GetInterface(NS_GET_IID(nsIWebBrowserPrint), getter_AddRefs(print)); + print->Print(nsnull, nsnull); +} + +-(void)printPreview +{ + nsCOMPtr domWindow; + _webBrowser->GetContentDOMWindow(getter_AddRefs(domWindow)); + nsCOMPtr ir(do_QueryInterface(domWindow)); + nsCOMPtr print; + ir->GetInterface(NS_GET_IID(nsIWebBrowserPrint), getter_AddRefs(print)); + print->PrintPreview(nsnull); +} + +-(void)findInPage +{ + FindDlgController* findDialog = [[FindDlgController alloc] initWithWindowNibName: @"FindDialog"]; + nsCOMPtr wbf(do_QueryInterface(_webBrowser)); + nsCOMPtr rootWindow; + nsCOMPtr focusedWindow; + _webBrowser->GetContentDOMWindow(getter_AddRefs(rootWindow)); + wbf->GetFocusedWindow(getter_AddRefs(focusedWindow)); + if (!focusedWindow) + focusedWindow = rootWindow; + nsCOMPtr webFind(do_GetInterface(_webBrowser)); + nsCOMPtr framesFind(do_QueryInterface(webFind)); + framesFind->SetRootSearchFrame(rootWindow); + framesFind->SetCurrentSearchFrame(focusedWindow); + + [findDialog setFind: webFind]; + [findDialog showWindow: findDialog]; +} + +-(void)findAgain +{ +} + -(void)saveDocument: (NSView*)aFilterView filterList: (NSPopUpButton*)aFilterList { nsCOMPtr wbf(do_QueryInterface(_webBrowser)); @@ -1167,5 +1230,36 @@ const char* dirServiceContractID = "@moz filterList: aFilterList]; } + +-(IBAction)cut:(id)aSender +{ + nsCOMPtr clipboard(do_GetInterface(_webBrowser)); + clipboard->CutSelection(); +} + +-(IBAction)copy:(id)aSender +{ + nsCOMPtr clipboard(do_GetInterface(_webBrowser)); + clipboard->CopySelection(); +} + +-(IBAction)paste:(id)aSender +{ + nsCOMPtr clipboard(do_GetInterface(_webBrowser)); + clipboard->Paste(); +} + +-(IBAction)clear:(id)aSender +{ + nsCOMPtr clipboard(do_GetInterface(_webBrowser)); + clipboard->SelectNone(); +} + +-(IBAction)selectAll:(id)aSender +{ + nsCOMPtr clipboard(do_GetInterface(_webBrowser)); + clipboard->SelectAll(); +} + @end