diff --git a/embedding/tests/winEmbed/WebBrowser.cpp b/embedding/tests/winEmbed/WebBrowser.cpp deleted file mode 100644 index f8c118de016a..000000000000 --- a/embedding/tests/winEmbed/WebBrowser.cpp +++ /dev/null @@ -1,170 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * The contents of this file are subject to the Netscape Public - * License Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.mozilla.org/NPL/ - * - * Software distributed under the License is distributed on an "AS - * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or - * implied. See the License for the specific language governing - * rights and limitations under the License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is Netscape - * Communications Corporation. Portions created by Netscape are - * Copyright (C) 1998 Netscape Communications Corporation. All - * Rights Reserved. - * - * Contributor(s): - * Doug Turner - */ - -#include "WebBrowser.h" - -#include "nsCWebBrowser.h" -#include "nsWidgetsCID.h" -#include "nsIGenericFactory.h" -#include "nsString.h" -#include "nsXPIDLString.h" -#include "nsIURI.h" -#include "nsIWebProgress.h" -#include "nsIWebNavigation.h" -#include "nsIDocShell.h" -#include "nsIContentViewer.h" -#include "nsIContentViewerFile.h" -#include "nsIDocShell.h" -#include "nsIWebNavigation.h" -#include "nsIEditorShell.h" -#include "nsIDOMWindow.h" -#include "nsIScriptGlobalObject.h" -#include "nsIInterfaceRequestor.h" - -#include "nsIDocShellTreeItem.h" -#include "nsIDocShellTreeOwner.h" - -nsresult -ConvertDocShellToDOMWindow(nsIDocShell* aDocShell, nsIDOMWindow** aDOMWindow) -{ - if (!aDOMWindow) - return NS_ERROR_FAILURE; - - *aDOMWindow = nsnull; - - nsCOMPtr scriptGlobalObject(do_GetInterface(aDocShell)); - - nsCOMPtr domWindow(do_QueryInterface(scriptGlobalObject)); - if (!domWindow) - return NS_ERROR_FAILURE; - - *aDOMWindow = domWindow.get(); - NS_ADDREF(*aDOMWindow); - - return NS_OK; -} - - - -WebBrowser::WebBrowser(){} -WebBrowser::~WebBrowser() -{ - PRBool duh; - if (mEditor) // not good place for it! - mEditor->SaveDocument(PR_FALSE, PR_FALSE, &duh); -} - -nsresult -WebBrowser::Init(nsNativeWidget widget, nsIWebBrowserChrome* aTopWindow) -{ - nsresult rv; - - mWebBrowser = do_CreateInstance(NS_WEBBROWSER_PROGID, &rv); - - if (!mWebBrowser) - return NS_ERROR_FAILURE; - - mBaseWindow = do_QueryInterface(mWebBrowser); - - mTopWindow = aTopWindow; - mWebBrowser->SetTopLevelWindow(aTopWindow); - - nsCOMPtr dsti = do_QueryInterface(mWebBrowser); - dsti->SetItemType(nsIDocShellTreeItem::typeChromeWrapper); - - rv = mBaseWindow->InitWindow( widget, - nsnull, - 0, - 0, - 100, - 100); - - mBaseWindow->Create(); - mBaseWindow->SetVisibility(PR_TRUE); - - - return rv; -} - -nsresult -WebBrowser::GetWebBrowser(nsIWebBrowser **outBrowser) -{ - *outBrowser = mWebBrowser; - NS_IF_ADDREF(*outBrowser); - return NS_OK; -} - -nsresult -WebBrowser::GoTo(char* url) -{ - nsCOMPtr webNav(do_QueryInterface(mWebBrowser)); - return webNav->LoadURI(NS_ConvertASCIItoUCS2(url).GetUnicode()); -} - -nsresult -WebBrowser::Edit(char* url) -{ - nsresult rv; - mEditor = do_CreateInstance("component://netscape/editor/editorshell", &rv); - - if (NS_FAILED(rv)) return rv; - - nsCOMPtr rootDocShell; - mWebBrowser->GetDocShell(getter_AddRefs(rootDocShell)); - - nsCOMPtr domWindow; - ConvertDocShellToDOMWindow(rootDocShell, getter_AddRefs(domWindow)); - - mEditor->Init(); - mEditor->SetEditorType(NS_ConvertASCIItoUCS2("html").GetUnicode()); - mEditor->SetWebShellWindow(domWindow); - mEditor->SetContentWindow(domWindow); - return mEditor->LoadUrl(NS_ConvertASCIItoUCS2(url).GetUnicode()); -} - -nsresult -WebBrowser::Print(void) -{ - nsCOMPtr rootDocShell; - mWebBrowser->GetDocShell(getter_AddRefs(rootDocShell)); - - - nsIContentViewer *pContentViewer = nsnull; - nsresult res = rootDocShell->GetContentViewer(&pContentViewer); - - if (NS_SUCCEEDED(res)) - { - nsCOMPtr spContentViewerFile = do_QueryInterface(pContentViewer); - spContentViewerFile->Print(PR_TRUE, nsnull); - NS_RELEASE(pContentViewer); - } - return NS_OK; -} - - -nsresult -WebBrowser::SetPositionAndSize(int x, int y, int cx, int cy) -{ - return mBaseWindow->SetPositionAndSize(x, y, cx, cy, true); -} - diff --git a/embedding/tests/winEmbed/WebBrowser.h b/embedding/tests/winEmbed/WebBrowser.h deleted file mode 100644 index cde9262c3874..000000000000 --- a/embedding/tests/winEmbed/WebBrowser.h +++ /dev/null @@ -1,56 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * The contents of this file are subject to the Netscape Public - * License Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.mozilla.org/NPL/ - * - * Software distributed under the License is distributed on an "AS - * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or - * implied. See the License for the specific language governing - * rights and limitations under the License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is Netscape - * Communications Corporation. Portions created by Netscape are - * Copyright (C) 1998 Netscape Communications Corporation. All - * Rights Reserved. - * - * Contributor(s): - * Doug Turner - */ - -#ifndef __WebBrowser__ -#define __WebBrowser__ - -#include "nsCOMPtr.h" -#include "nsIWidget.h" -#include "nsIBaseWindow.h" -#include "nsIWebBrowser.h" -#include "nsIEditorShell.h" -#include "nsIWebBrowserChrome.h" - -class WebBrowser -{ -public: - nsresult Init(nsNativeWidget widget, nsIWebBrowserChrome* aTopWindow); - nsresult SetPositionAndSize(int x, int y, int cx, int cy); - nsresult GoTo(char* url); - nsresult Edit(char* url); - nsresult Print(void); - - nsresult GetWebBrowser(nsIWebBrowser **outBrowser); - - WebBrowser(); - virtual ~WebBrowser(); - -protected: - nsCOMPtr mWebBrowser; - nsCOMPtr mBaseWindow; - nsCOMPtr mTopWindow; - //for editing - nsCOMPtr mEditor; -}; - -#endif /* __WebBrowser__ */ diff --git a/embedding/tests/winEmbed/WebBrowserChrome.cpp b/embedding/tests/winEmbed/WebBrowserChrome.cpp index 079098c12bed..5fdea724630b 100644 --- a/embedding/tests/winEmbed/WebBrowserChrome.cpp +++ b/embedding/tests/winEmbed/WebBrowserChrome.cpp @@ -29,8 +29,9 @@ #include "nsIDocShellTreeItem.h" #include "nsIRequest.h" #include "nsIChannel.h" +#include "nsCWebBrowser.h" +#include "nsWidgetsCID.h" -#include "WebBrowser.h" #include "WebBrowserChrome.h" nsVoidArray WebBrowserChrome::sBrowserList; @@ -38,12 +39,11 @@ nsVoidArray WebBrowserChrome::sBrowserList; WebBrowserChrome::WebBrowserChrome() { NS_INIT_REFCNT(); - sBrowserList.AppendElement(this); + mNativeWindow = nsnull; } WebBrowserChrome::~WebBrowserChrome() { - sBrowserList.RemoveElement(this); } //***************************************************************************** @@ -58,7 +58,7 @@ NS_INTERFACE_MAP_BEGIN(WebBrowserChrome) NS_INTERFACE_MAP_ENTRY(nsIInterfaceRequestor) NS_INTERFACE_MAP_ENTRY(nsIWebBrowserChrome) NS_INTERFACE_MAP_ENTRY(nsIBaseWindow) -// NS_INTERFACE_MAP_ENTRY(nsIWebProgressListener) + NS_INTERFACE_MAP_ENTRY(nsIWebProgressListener) //optional // NS_INTERFACE_MAP_ENTRY(nsIPrompt) NS_INTERFACE_MAP_END @@ -93,9 +93,8 @@ NS_IMETHODIMP WebBrowserChrome::SetOverLink(const PRUnichar* aLink) NS_IMETHODIMP WebBrowserChrome::GetWebBrowser(nsIWebBrowser** aWebBrowser) { NS_ENSURE_ARG_POINTER(aWebBrowser); - NS_ENSURE_TRUE(mBrowser, NS_ERROR_NOT_INITIALIZED); - - *aWebBrowser = mBrowser; + NS_ENSURE_TRUE(mWebBrowser, NS_ERROR_NOT_INITIALIZED); + *aWebBrowser = mWebBrowser; NS_IF_ADDREF(*aWebBrowser); return NS_OK; @@ -104,9 +103,9 @@ NS_IMETHODIMP WebBrowserChrome::GetWebBrowser(nsIWebBrowser** aWebBrowser) NS_IMETHODIMP WebBrowserChrome::SetWebBrowser(nsIWebBrowser* aWebBrowser) { NS_ENSURE_ARG(aWebBrowser); // Passing nsnull is NOT OK - NS_ENSURE_TRUE(mBrowser, NS_ERROR_NOT_INITIALIZED); - - mBrowser = aWebBrowser; + NS_ENSURE_TRUE(mWebBrowser, NS_ERROR_NOT_INITIALIZED); + NS_ERROR("Who be calling me"); + mWebBrowser = aWebBrowser; return NS_OK; } @@ -123,18 +122,38 @@ NS_IMETHODIMP WebBrowserChrome::SetChromeMask(PRUint32 aChromeMask) } +// in winEmbed.cpp +extern nativeWindow CreateNativeWindow(nsIWebBrowserChrome* chrome); + NS_IMETHODIMP WebBrowserChrome::GetNewBrowser(PRUint32 chromeMask, nsIWebBrowser **aWebBrowser) { NS_ENSURE_ARG_POINTER(aWebBrowser); *aWebBrowser = nsnull; - extern WebBrowser * CreateWebBrowser(); - WebBrowser *aBrowser = CreateWebBrowser(); + mWebBrowser = do_CreateInstance(NS_WEBBROWSER_PROGID); + + if (!mWebBrowser) + return NS_ERROR_FAILURE; - if (!aBrowser) - return NS_ERROR_FAILURE; + mWebBrowser->SetTopLevelWindow(NS_STATIC_CAST(nsIWebBrowserChrome*, this)); - return aBrowser->GetWebBrowser(aWebBrowser); + nsCOMPtr dsti = do_QueryInterface(mWebBrowser); + dsti->SetItemType(nsIDocShellTreeItem::typeChromeWrapper); + + + mBaseWindow = do_QueryInterface(mWebBrowser); + mNativeWindow = CreateNativeWindow(NS_STATIC_CAST(nsIWebBrowserChrome*, this)); + + if (!mNativeWindow) + return NS_ERROR_FAILURE; + + mBaseWindow->InitWindow( mNativeWindow, + nsnull, + 0, 0, 450, 450); + mBaseWindow->Create(); + + NS_IF_ADDREF(*aWebBrowser = mWebBrowser); + return NS_OK; } @@ -145,28 +164,13 @@ NS_IMETHODIMP WebBrowserChrome::FindNamedBrowserItem(const PRUnichar* aName, NS_ENSURE_ARG_POINTER(aBrowserItem); *aBrowserItem = nsnull; + if (!mWebBrowser) + return NS_ERROR_FAILURE; - PRInt32 cnt = sBrowserList.Count(); + nsCOMPtr docShellAsItem(do_QueryInterface(mWebBrowser)); + NS_ENSURE_TRUE(docShellAsItem, NS_ERROR_FAILURE); - for (int i = 0; i < cnt; cnt++) - { - WebBrowserChrome* aChrome = (WebBrowserChrome*) sBrowserList.ElementAt(cnt); - if (aChrome == this || !aChrome) - continue; - - nsCOMPtr webBrowser; - aChrome->GetWebBrowser(getter_AddRefs(webBrowser)); - - nsCOMPtr docShellAsItem(do_QueryInterface(webBrowser)); - NS_ENSURE_TRUE(docShellAsItem, NS_ERROR_FAILURE); - - docShellAsItem->FindItemWithName(aName, NS_STATIC_CAST(nsIWebBrowserChrome*, this), aBrowserItem); - - if (*aBrowserItem) - break; - } - - return NS_OK; // Return OK even if we didn't find it??? + return docShellAsItem->FindItemWithName(aName, NS_STATIC_CAST(nsIWebBrowserChrome*, this), aBrowserItem); } NS_IMETHODIMP WebBrowserChrome::SizeBrowserTo(PRInt32 aCX, PRInt32 aCY) @@ -180,6 +184,11 @@ NS_IMETHODIMP WebBrowserChrome::ShowAsModal(void) return NS_ERROR_NOT_IMPLEMENTED; } +NS_IMETHODIMP WebBrowserChrome::ExitModalEventLoop(nsresult aStatus) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + NS_IMETHODIMP WebBrowserChrome::SetPersistence(PRBool aPersistX, PRBool aPersistY, @@ -211,6 +220,10 @@ NS_IMETHODIMP WebBrowserChrome::OnProgressChange(nsIWebProgress *progress, nsIRe NS_IMETHODIMP WebBrowserChrome::OnStateChange(nsIWebProgress *progress, nsIRequest *request, PRInt32 progressStateFlags, PRUint32 status) { + + if ((progressStateFlags & flag_stop) && (progressStateFlags & flag_is_request)) + { + } return NS_ERROR_NOT_IMPLEMENTED; } @@ -255,37 +268,37 @@ NS_IMETHODIMP WebBrowserChrome::Destroy() NS_IMETHODIMP WebBrowserChrome::SetPosition(PRInt32 x, PRInt32 y) { - return NS_ERROR_NOT_IMPLEMENTED; + return mBaseWindow->SetPosition(x, y); } NS_IMETHODIMP WebBrowserChrome::GetPosition(PRInt32* x, PRInt32* y) { - return NS_ERROR_NOT_IMPLEMENTED; + return mBaseWindow->GetPosition(x, y); } NS_IMETHODIMP WebBrowserChrome::SetSize(PRInt32 cx, PRInt32 cy, PRBool fRepaint) { - return NS_ERROR_NOT_IMPLEMENTED; + return mBaseWindow->SetSize(cx, cy, fRepaint); } NS_IMETHODIMP WebBrowserChrome::GetSize(PRInt32* cx, PRInt32* cy) { - return NS_ERROR_NOT_IMPLEMENTED; + return mBaseWindow->GetSize(cx, cy); } NS_IMETHODIMP WebBrowserChrome::SetPositionAndSize(PRInt32 x, PRInt32 y, PRInt32 cx, PRInt32 cy, PRBool fRepaint) { - return NS_ERROR_NOT_IMPLEMENTED; + return mBaseWindow->SetPositionAndSize(x, y, cx, cy, fRepaint); } NS_IMETHODIMP WebBrowserChrome::GetPositionAndSize(PRInt32* x, PRInt32* y, PRInt32* cx, PRInt32* cy) { - return NS_ERROR_NOT_IMPLEMENTED; + return mBaseWindow->GetPositionAndSize(x, y, cx, cy); } NS_IMETHODIMP WebBrowserChrome::Repaint(PRBool aForce) { - return NS_ERROR_NOT_IMPLEMENTED; + return mBaseWindow->Repaint(aForce); } NS_IMETHODIMP WebBrowserChrome::GetParentWidget(nsIWidget** aParentWidget) @@ -306,24 +319,24 @@ NS_IMETHODIMP WebBrowserChrome::GetParentNativeWindow(nativeWindow* aParentNativ { NS_ENSURE_ARG_POINTER(aParentNativeWindow); - NS_ASSERTION(PR_FALSE, "Not Yet Implemented"); + *aParentNativeWindow = mNativeWindow; return NS_OK; } NS_IMETHODIMP WebBrowserChrome::SetParentNativeWindow(nativeWindow aParentNativeWindow) { - NS_ASSERTION(PR_FALSE, "You can't call this"); - return NS_ERROR_NOT_IMPLEMENTED; + mNativeWindow = aParentNativeWindow; + return NS_OK; } NS_IMETHODIMP WebBrowserChrome::GetVisibility(PRBool* aVisibility) { - return NS_ERROR_NOT_IMPLEMENTED; + return mBaseWindow->GetVisibility(aVisibility); } NS_IMETHODIMP WebBrowserChrome::SetVisibility(PRBool aVisibility) { - return NS_ERROR_NOT_IMPLEMENTED; + return mBaseWindow->SetVisibility(aVisibility); } NS_IMETHODIMP WebBrowserChrome::GetMainWidget(nsIWidget** aMainWidget) @@ -333,13 +346,13 @@ NS_IMETHODIMP WebBrowserChrome::GetMainWidget(nsIWidget** aMainWidget) NS_IMETHODIMP WebBrowserChrome::SetFocus() { - return NS_ERROR_NOT_IMPLEMENTED; + return mBaseWindow->SetFocus(); } NS_IMETHODIMP WebBrowserChrome::FocusAvailable(nsIBaseWindow* aCurrentFocus, PRBool* aTookFocus) { - return NS_ERROR_NOT_IMPLEMENTED; + return mBaseWindow->FocusAvailable(aCurrentFocus, aTookFocus); } NS_IMETHODIMP WebBrowserChrome::GetTitle(PRUnichar** aTitle) diff --git a/embedding/tests/winEmbed/WebBrowserChrome.h b/embedding/tests/winEmbed/WebBrowserChrome.h index dc268fc03e66..b732d2bf46c5 100644 --- a/embedding/tests/winEmbed/WebBrowserChrome.h +++ b/embedding/tests/winEmbed/WebBrowserChrome.h @@ -23,8 +23,15 @@ #define __WebBrowserChrome__ #include "nsCOMPtr.h" +#include "nsIGenericFactory.h" +#include "nsString.h" #include "nsIWebBrowserChrome.h" + +#include "nsIDocShell.h" +#include "nsIContentViewer.h" +#include "nsIContentViewerFile.h" #include "nsIBaseWindow.h" +#include "nsIWebNavigation.h" #include "nsIWebProgressListener.h" #include "nsIInterfaceRequestor.h" #include "nsIPrompt.h" @@ -32,6 +39,7 @@ #include "nsVoidArray.h" + class WebBrowserChrome : public nsIWebBrowserChrome, public nsIWebProgressListener, public nsIBaseWindow, @@ -51,9 +59,13 @@ public: NS_DECL_NSIINTERFACEREQUESTOR protected: - - nsCOMPtr mBrowser; - + + nativeWindow mNativeWindow; + + nsCOMPtr mWebBrowser; + nsCOMPtr mBaseWindow; + nsCOMPtr mTopWindow; + static nsVoidArray sBrowserList; }; diff --git a/embedding/tests/winEmbed/makefile.win b/embedding/tests/winEmbed/makefile.win index da2cc07c22ee..7bc1b75972f0 100644 --- a/embedding/tests/winEmbed/makefile.win +++ b/embedding/tests/winEmbed/makefile.win @@ -29,7 +29,7 @@ RESFILE = $(MODULE).res OBJS = \ .\$(OBJDIR)\winEmbed.obj \ - .\$(OBJDIR)\WebBrowser.obj \ + .\$(OBJDIR)\WebBrowserChrome.obj \ .\$(OBJDIR)\StdAfx.obj \ $(NULL) diff --git a/embedding/tests/winEmbed/resource.h b/embedding/tests/winEmbed/resource.h index 79ce42efc7a8..80e18ccc5d04 100644 --- a/embedding/tests/winEmbed/resource.h +++ b/embedding/tests/winEmbed/resource.h @@ -20,14 +20,20 @@ #define MOZ_Print 32772 #define MOZ_NewBrowser 32773 #define MOZ_NewEditor 32774 +#define MOZ_Save 32775 +#define MOZ_Cut 32776 +#define MOZ_Copy 32777 +#define MOZ_Paste 32778 +#define MOZ_Delete 32779 +#define MOZ_SelectAll 32780 #define IDC_STATIC -1 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 129 -#define _APS_NEXT_COMMAND_VALUE 32775 +#define _APS_NEXT_RESOURCE_VALUE 130 +#define _APS_NEXT_COMMAND_VALUE 32781 #define _APS_NEXT_CONTROL_VALUE 1002 #define _APS_NEXT_SYMED_VALUE 110 #endif diff --git a/embedding/tests/winEmbed/winEmbed.cpp b/embedding/tests/winEmbed/winEmbed.cpp index b6ac62466ac5..240480eb2e2f 100644 --- a/embedding/tests/winEmbed/winEmbed.cpp +++ b/embedding/tests/winEmbed/winEmbed.cpp @@ -27,16 +27,15 @@ #include "resource.h" +#include "nsIContentViewerEdit.h" + #include "nsEmbedAPI.h" -#include "WebBrowser.h" #include "WebBrowserChrome.h" -WebBrowser* CreateWebBrowser(); - - - #define MAX_LOADSTRING 100 +#define IDC_Status 100 + // Global Variables: HINSTANCE hInst; TCHAR szTitle[MAX_LOADSTRING]; @@ -51,6 +50,55 @@ LRESULT CALLBACK GetURI(HWND, UINT, WPARAM, LPARAM); char gLastURI[100]; +// utility function +nsresult ResizeEmbedding(nsIWebBrowserChrome* chrome) +{ + if (!chrome) + return NS_ERROR_FAILURE; + + nsCOMPtr baseWindow = do_QueryInterface(chrome); + + HWND hWnd; + baseWindow->GetParentNativeWindow((void**)&hWnd); + + if (!hWnd) + return NS_ERROR_NULL_POINTER; + + RECT rect; + GetClientRect(hWnd, &rect); + rect.top += 32; + rect.bottom -= 32; + baseWindow->SetPositionAndSize(rect.left, + rect.top, + rect.right - rect.left, + rect.bottom - rect.top, + PR_TRUE); + + baseWindow->SetVisibility(PR_TRUE); + return NS_OK; +} + + +nsresult OpenWebPage(char* url) +{ + WebBrowserChrome * chrome = new WebBrowserChrome(); + if (!chrome) + return NS_ERROR_FAILURE; + + NS_ADDREF(chrome); // native window will hold the addref. + + nsCOMPtr newBrowser; + chrome->GetNewBrowser(0, getter_AddRefs(newBrowser)); + if (!newBrowser) + return NS_ERROR_FAILURE; + + // Place it where we want it. + ResizeEmbedding(NS_STATIC_CAST(nsIWebBrowserChrome*, chrome)); + + nsCOMPtr webNav(do_QueryInterface(newBrowser)); + return webNav->LoadURI(NS_ConvertASCIItoUCS2(url).GetUnicode()); +} + int main () { @@ -69,10 +117,7 @@ int main () // put up at lease on browser window .... ///////////////////////////////////////////////////////////// - WebBrowser* newBrowser = CreateWebBrowser(); - if (!newBrowser) - return -1; - newBrowser->GoTo("http://people.netscape.com/dougt"); + OpenWebPage("http://people.netscape.com/dougt"); ///////////////////////////////////////////////////////////// @@ -83,7 +128,7 @@ int main () DispatchMessage(&msg); } -// Close down Embedding APIs + // Close down Embedding APIs NS_TermEmbedding(); return msg.wParam; @@ -127,57 +172,31 @@ ATOM MyRegisterClass(HINSTANCE hInstance) -WebBrowser * CreateWebBrowser() +nativeWindow CreateNativeWindow(nsIWebBrowserChrome* chrome) { + HWND mainWindow; - STARTUPINFO StartupInfo; - StartupInfo.dwFlags = 0; - GetStartupInfo( &StartupInfo ); + mainWindow = CreateWindow( szWindowClass, + szTitle, + WS_OVERLAPPEDWINDOW, + 0, + 0, + 450, + 450, + NULL, + NULL, + GetModuleHandle(NULL), + NULL); - HINSTANCE hInstance = GetModuleHandle(NULL); - int nCmdShow = StartupInfo.dwFlags & STARTF_USESHOWWINDOW ? StartupInfo.wShowWindow : SW_SHOWDEFAULT; - - - WebBrowser *browser = new WebBrowser(); - if (! browser) - return NULL; - - HWND hWnd; - - hWnd = CreateWindow( szWindowClass, - szTitle, - WS_OVERLAPPEDWINDOW, - 0, - 0, - 450, - 450, - NULL, - NULL, - hInstance, - NULL); - - if (!hWnd) - { - return NULL; - } - - SetWindowLong( hWnd, GWL_USERDATA, (LONG)browser); // save the browser LONG_PTR. - - WebBrowserChrome* chrome = nsnull;//new WebBrowserChrome(); - - if ( NS_FAILED( browser->Init(hWnd, chrome) ) ) // this will own hWnd + if (!mainWindow) return NULL; - RECT rect; - GetClientRect(hWnd, &rect); - rect.top += 32; + SetWindowLong( mainWindow, GWL_USERDATA, (LONG)chrome); // save the browser LONG_PTR. - browser->SetPositionAndSize(rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top); + ShowWindow(mainWindow, SW_SHOWDEFAULT); + UpdateWindow(mainWindow); - ShowWindow(hWnd, nCmdShow); - UpdateWindow(hWnd); - - return browser; + return mainWindow; } // @@ -197,7 +216,7 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) HDC hdc; TCHAR szHello[MAX_LOADSTRING]; LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING); - WebBrowser *browser = (WebBrowser *) GetWindowLong(hWnd, GWL_USERDATA); + nsIWebBrowserChrome *chrome = (nsIWebBrowserChrome *) GetWindowLong(hWnd, GWL_USERDATA); switch (message) { @@ -207,49 +226,99 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) // Parse the menu selections: switch (wmId) { - case IDM_EXIT: - if (browser) - delete browser; - DestroyWindow(hWnd); - break; - case MOZ_NewBrowser: gLastURI[0] = 0; if (DialogBox(hInst, (LPCTSTR)MOZ_GetURI, hWnd, (DLGPROC)GetURI)) - { - WebBrowser* newBrowser = CreateWebBrowser(); - if (!newBrowser) - break; - newBrowser->GoTo(gLastURI); - } + OpenWebPage(gLastURI); break; case MOZ_NewEditor: gLastURI[0] = 0; - if (DialogBox(hInst, (LPCTSTR)MOZ_GetURI, hWnd, (DLGPROC)GetURI)) - { - WebBrowser* newBrowser = CreateWebBrowser(); - if (!newBrowser) - break; - newBrowser->Edit(gLastURI); - } break; case MOZ_Open: gLastURI[0] = 0; - if (browser && DialogBox(hInst, (LPCTSTR)MOZ_GetURI, hWnd, (DLGPROC)GetURI)) + if (chrome && DialogBox(hInst, (LPCTSTR)MOZ_GetURI, hWnd, (DLGPROC)GetURI)) { - browser->GoTo(gLastURI); + nsCOMPtr wb; + chrome->GetWebBrowser(getter_AddRefs(wb)); + nsCOMPtr webNav(do_QueryInterface(wb)); + webNav->LoadURI(NS_ConvertASCIItoUCS2(gLastURI).GetUnicode()); } break; - + + case MOZ_Save: + + if (chrome) + { + nsCOMPtr wb; + chrome->GetWebBrowser(getter_AddRefs(wb)); + + nsCOMPtr rootDocShell; + wb->GetDocShell(getter_AddRefs(rootDocShell)); + + + nsCOMPtr pContentViewer; + nsresult res = rootDocShell->GetContentViewer(getter_AddRefs(pContentViewer)); + + if (NS_SUCCEEDED(res)) + { + nsCOMPtr spContentViewerFile = do_QueryInterface(pContentViewer); + spContentViewerFile->Save(); + } + } + break; + case MOZ_Print: - if (browser) - browser->Print(); - // editor->SetTextProperty(NS_ConvertASCIItoUCS2("font").GetUnicode(), - // NS_ConvertASCIItoUCS2("color").GetUnicode(), - // NS_ConvertASCIItoUCS2("BLUE").GetUnicode()); + if (chrome) + { + nsCOMPtr wb; + chrome->GetWebBrowser(getter_AddRefs(wb)); + + nsCOMPtr rootDocShell; + wb->GetDocShell(getter_AddRefs(rootDocShell)); + + + nsCOMPtr pContentViewer; + nsresult res = rootDocShell->GetContentViewer(getter_AddRefs(pContentViewer)); + + if (NS_SUCCEEDED(res)) + { + nsCOMPtr spContentViewerFile = do_QueryInterface(pContentViewer); + spContentViewerFile->Print(PR_TRUE, nsnull); + } + } + break; + + case MOZ_Cut: + case MOZ_Copy: + case MOZ_Paste: + case MOZ_SelectAll: + if (chrome) + { + nsCOMPtr wb; + chrome->GetWebBrowser(getter_AddRefs(wb)); + + nsCOMPtr rootDocShell; + wb->GetDocShell(getter_AddRefs(rootDocShell)); + + + nsCOMPtr pContentViewer; + nsresult res = rootDocShell->GetContentViewer(getter_AddRefs(pContentViewer)); + + if (NS_SUCCEEDED(res)) + { + nsCOMPtr spContentViewerEdit = do_QueryInterface(pContentViewer); + if (message == MOZ_Cut) + spContentViewerEdit->CopySelection(); + else if (message == MOZ_Copy) + spContentViewerEdit->CutSelection(); + else if (message == MOZ_SelectAll) + spContentViewerEdit->SelectAll(); + } + } + break; default: @@ -257,12 +326,8 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) } break; - case WM_SIZE: - RECT rect; - GetClientRect(hWnd, &rect); - rect.top += 32; - if (browser) - browser->SetPositionAndSize(rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top); + case WM_SIZE: + ResizeEmbedding(chrome); break; case WM_PAINT: @@ -284,6 +349,7 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) case WM_DESTROY: PostQuitMessage(0); + NS_RELEASE(chrome); break; default: return DefWindowProc(hWnd, message, wParam, lParam); diff --git a/embedding/tests/winEmbed/winEmbed.rc b/embedding/tests/winEmbed/winEmbed.rc index d03d481c3820..af1a84ea7cb6 100644 --- a/embedding/tests/winEmbed/winEmbed.rc +++ b/embedding/tests/winEmbed/winEmbed.rc @@ -44,11 +44,21 @@ BEGIN POPUP "&File" BEGIN MENUITEM "New Browser...", MOZ_NewBrowser - MENUITEM "New Editor...", MOZ_NewEditor - MENUITEM "Change Current URL...", MOZ_Open + MENUITEM "Goto...", MOZ_Open + MENUITEM SEPARATOR + MENUITEM "Save...", MOZ_Save MENUITEM "Print Page", MOZ_Print MENUITEM "E&xit", IDM_EXIT END + POPUP "&Edit" + BEGIN + MENUITEM "Cut", MOZ_Cut + MENUITEM "Copy", MOZ_Copy + MENUITEM "Paste", MOZ_Paste, GRAYED + MENUITEM "Delete", MOZ_Delete, GRAYED + MENUITEM SEPARATOR + MENUITEM "Select All", MOZ_SelectAll + END END @@ -62,10 +72,10 @@ STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU CAPTION "Enter A URL" FONT 8, "System" BEGIN - ICON IDI_WINEMBED,IDC_MYICON,8,4,20,20 + EDITTEXT MOZ_EDIT_URI,34,33,182,14,ES_AUTOHSCROLL DEFPUSHBUTTON "OK",IDOK,182,55,30,11,WS_GROUP PUSHBUTTON "Cancel",IDNO,146,55,30,11,WS_GROUP - EDITTEXT MOZ_EDIT_URI,34,33,182,14,ES_AUTOHSCROLL + ICON IDI_WINEMBED,IDC_MYICON,8,4,20,20 LTEXT "URL:",IDC_STATIC,13,34,17,8 END