From 8b9ed74a88ca04787d7cd9d91f9a5d0e0a44545f Mon Sep 17 00:00:00 2001 From: "conrad%ingress.com" Date: Wed, 3 May 2000 01:24:54 +0000 Subject: [PATCH] Added nsIPrompt implementation. --- .../powerplant/source/CWebBrowserChrome.cpp | 278 +++++++++++++++++- .../powerplant/source/CWebBrowserChrome.h | 3 + 2 files changed, 278 insertions(+), 3 deletions(-) diff --git a/embedding/browser/powerplant/source/CWebBrowserChrome.cpp b/embedding/browser/powerplant/source/CWebBrowserChrome.cpp index f3bba014bdae..448112d4d935 100644 --- a/embedding/browser/powerplant/source/CWebBrowserChrome.cpp +++ b/embedding/browser/powerplant/source/CWebBrowserChrome.cpp @@ -32,6 +32,12 @@ #include "nsIWebProgress.h" #include "UMacUnicode.h" +#include "ApplIDs.h" + +#include "LStaticText.h" +#include "LIconControl.h" +#include "LCheckBox.h" +#include "LEditText.h" // Interfaces needed to be included @@ -63,6 +69,7 @@ NS_INTERFACE_MAP_BEGIN(CWebBrowserChrome) NS_INTERFACE_MAP_ENTRY(nsIWebBrowserChrome) NS_INTERFACE_MAP_ENTRY(nsIWebProgressListener) NS_INTERFACE_MAP_ENTRY(nsIBaseWindow) + NS_INTERFACE_MAP_ENTRY(nsIPrompt) NS_INTERFACE_MAP_END //***************************************************************************** @@ -192,14 +199,17 @@ NS_IMETHODIMP CWebBrowserChrome::OnLocationChange(nsIURI *location) { NS_ENSURE_TRUE(mBrowserWindow, NS_ERROR_NOT_INITIALIZED); - nsXPIDLCString spec; + char *buf = nsnull; if (location) - location->GetSpec(getter_Copies(spec)); + location->GetSpec(&buf); - nsAutoString tmp(spec); + nsAutoString tmp; tmp.AssignWithConversion(buf); mBrowserWindow->SetLocation(tmp); + if (buf) + Recycle(buf); + return NS_OK; } @@ -382,6 +392,268 @@ NS_IMETHODIMP CWebBrowserChrome::SetTitle(const PRUnichar* aTitle) return NS_OK; } +//***************************************************************************** +// CWebBrowserChrome::nsIPrompt +//***************************************************************************** + +NS_IMETHODIMP CWebBrowserChrome::Alert(const PRUnichar *text) +{ + RegisterClass_(LIconControl); + + StDialogHandler theHandler(dlog_Alert, mBrowserWindow); + LWindow *theDialog = theHandler.GetDialog(); + Str255 aStr; + + UMacUnicode::StringToStr255(text, aStr); + + LStaticText *msgText = dynamic_cast(theDialog->FindPaneByID('Msg ')); + msgText->SetDescriptor(aStr); + + theDialog->Show(); + + while (true) // This is our modal dialog event loop + { + MessageT hitMessage = theHandler.DoDialog(); + + if (hitMessage == msg_OK) + break; + } + + return NS_OK; +} + +NS_IMETHODIMP CWebBrowserChrome::Confirm(const PRUnichar *text, PRBool *_retval) +{ + NS_ENSURE_ARG_POINTER(_retval); + + StDialogHandler theHandler(dlog_Confirm, mBrowserWindow); + LWindow *theDialog = theHandler.GetDialog(); + Str255 aStr; + + UMacUnicode::StringToStr255(text, aStr); + + LStaticText *msgText = dynamic_cast(theDialog->FindPaneByID('Msg ')); + msgText->SetDescriptor(aStr); + + theDialog->Show(); + + while (true) // This is our modal dialog event loop + { + MessageT hitMessage = theHandler.DoDialog(); + + if (hitMessage == msg_OK) + { + *_retval = PR_TRUE; + break; + } + else if (hitMessage == msg_Cancel) + { + *_retval = PR_FALSE; + break; + } + } + + return NS_OK; +} + +NS_IMETHODIMP CWebBrowserChrome::ConfirmCheck(const PRUnichar *text, const PRUnichar *checkMsg, PRBool *checkValue, PRBool *_retval) +{ + NS_ENSURE_ARG_POINTER(checkValue); + NS_ENSURE_ARG_POINTER(_retval); + + StDialogHandler theHandler(dlog_ConfirmCheck, mBrowserWindow); + LWindow *theDialog = theHandler.GetDialog(); + Str255 msgStr, checkBoxStr; + + UMacUnicode::StringToStr255(text, msgStr); + LStaticText *msgText = dynamic_cast(theDialog->FindPaneByID('Msg ')); + msgText->SetDescriptor(msgStr); + UMacUnicode::StringToStr255(checkMsg, checkBoxStr); + LCheckBox *checkBox = dynamic_cast(theDialog->FindPaneByID('Chck')); + checkBox->SetDescriptor(checkBoxStr); + checkBox->SetValue(*checkValue ? 1 : 0); + + theDialog->Show(); + + while (true) // This is our modal dialog event loop + { + MessageT hitMessage = theHandler.DoDialog(); + + if (hitMessage == msg_OK) + { + *_retval = PR_TRUE; + *checkValue = checkBox->GetValue(); + break; + } + else if (hitMessage == msg_Cancel) + { + *_retval = PR_FALSE; + break; + } + } + + return NS_OK; +} + +NS_IMETHODIMP CWebBrowserChrome::Prompt(const PRUnichar *text, const PRUnichar *defaultText, PRUnichar **result, PRBool *_retval) +{ + NS_ENSURE_ARG_POINTER(result); + NS_ENSURE_ARG_POINTER(_retval); + + nsresult resultErr = NS_OK; + + StDialogHandler theHandler(dlog_Prompt, mBrowserWindow); + LWindow *theDialog = theHandler.GetDialog(); + Str255 aStr; + + UMacUnicode::StringToStr255(text, aStr); + LStaticText *msgText = dynamic_cast(theDialog->FindPaneByID('Msg ')); + msgText->SetDescriptor(aStr); + LEditText *responseText = dynamic_cast(theDialog->FindPaneByID('Rslt')); + theDialog->SetLatentSub(responseText); + + theDialog->Show(); + + while (true) // This is our modal dialog event loop + { + MessageT hitMessage = theHandler.DoDialog(); + + if (hitMessage == msg_OK) + { + nsAutoString responseStr; + + *_retval = PR_TRUE; + responseText->GetDescriptor(aStr); + UMacUnicode::Str255ToString(aStr, responseStr); + *result = responseStr.ToNewUnicode(); + if (!result) + resultErr = NS_ERROR_OUT_OF_MEMORY; + break; + } + else if (hitMessage == msg_Cancel) + { + *_retval = PR_FALSE; + break; + } + } + + return resultErr; +} + +NS_IMETHODIMP CWebBrowserChrome::PromptUsernameAndPassword(const PRUnichar *text, PRUnichar **user, PRUnichar **pwd, PRBool *_retval) +{ + NS_ENSURE_ARG_POINTER(user); + NS_ENSURE_ARG_POINTER(pwd); + NS_ENSURE_ARG_POINTER(_retval); + + nsresult resultErr = NS_OK; + + StDialogHandler theHandler(dlog_PromptNameAndPass, mBrowserWindow); + LWindow *theDialog = theHandler.GetDialog(); + Str255 aStr; + + UMacUnicode::StringToStr255(text, aStr); + LStaticText *msgText = dynamic_cast(theDialog->FindPaneByID('Msg ')); + msgText->SetDescriptor(aStr); + LEditText *userText = dynamic_cast(theDialog->FindPaneByID('Name')); + LEditText *pwdText = dynamic_cast(theDialog->FindPaneByID('Pass')); + + theDialog->SetLatentSub(userText); + theDialog->Show(); + + while (true) // This is our modal dialog event loop + { + MessageT hitMessage = theHandler.DoDialog(); + + if (hitMessage == msg_OK) + { + nsAutoString responseStr; + + userText->GetDescriptor(aStr); + UMacUnicode::Str255ToString(aStr, responseStr); + *user = responseStr.ToNewUnicode(); + if (*user == nsnull) + resultErr = NS_ERROR_OUT_OF_MEMORY; + + pwdText->GetDescriptor(aStr); + UMacUnicode::Str255ToString(aStr, responseStr); + *pwd = responseStr.ToNewUnicode(); + if (*pwd == nsnull) + resultErr = NS_ERROR_OUT_OF_MEMORY; + + *_retval = PR_TRUE; + break; + } + else if (hitMessage == msg_Cancel) + { + *_retval = PR_FALSE; + break; + } + } + + return resultErr; +} + +NS_IMETHODIMP CWebBrowserChrome::PromptPassword(const PRUnichar *text, const PRUnichar *title, PRUnichar **pwd, PRBool *_retval) +{ + NS_ENSURE_ARG_POINTER(pwd); + NS_ENSURE_ARG_POINTER(_retval); + + nsresult resultErr = NS_OK; + + StDialogHandler theHandler(dlog_PromptPassword, mBrowserWindow); + LWindow *theDialog = theHandler.GetDialog(); + Str255 aStr; + + UMacUnicode::StringToStr255(text, aStr); + LStaticText *msgText = dynamic_cast(theDialog->FindPaneByID('Msg ')); + msgText->SetDescriptor(aStr); + LEditText *pwdText = dynamic_cast(theDialog->FindPaneByID('Pass')); + + theDialog->SetLatentSub(pwdText); + theDialog->Show(); + + while (true) // This is our modal dialog event loop + { + MessageT hitMessage = theHandler.DoDialog(); + + if (hitMessage == msg_OK) + { + nsAutoString responseStr; + + pwdText->GetDescriptor(aStr); + UMacUnicode::Str255ToString(aStr, responseStr); + *pwd = responseStr.ToNewUnicode(); + if (*pwd == nsnull) + resultErr = NS_ERROR_OUT_OF_MEMORY; + *_retval = PR_TRUE; + break; + } + else if (hitMessage == msg_Cancel) + { + *_retval = PR_FALSE; + break; + } + } + + return resultErr; +} + +NS_IMETHODIMP CWebBrowserChrome::Select(const PRUnichar *inDialogTitle, const PRUnichar *inMsg, PRUint32 inCount, const PRUnichar **inList, PRInt32 *outSelection, PRBool *_retval) +{ + //XXX First Check In + NS_ASSERTION(PR_FALSE, "Not Yet Implemented"); + return NS_OK; +} + +NS_IMETHODIMP CWebBrowserChrome::UniversalDialog(const PRUnichar *inTitleMessage, const PRUnichar *inDialogTitle, const PRUnichar *inMsg, const PRUnichar *inCheckboxMsg, const PRUnichar *inButton0Text, const PRUnichar *inButton1Text, const PRUnichar *inButton2Text, const PRUnichar *inButton3Text, const PRUnichar *inEditfield1Msg, const PRUnichar *inEditfield2Msg, PRUnichar **inoutEditfield1Value, PRUnichar **inoutEditfield2Value, const PRUnichar *inIConURL, PRBool *inoutCheckboxState, PRInt32 inNumberButtons, PRInt32 inNumberEditfields, PRInt32 inEditField1Password, PRInt32 *outButtonPressed) +{ + //XXX First Check In + NS_ASSERTION(PR_FALSE, "Not Yet Implemented"); + return NS_OK; +} + + //***************************************************************************** // CWebBrowserChrome: Helpers //***************************************************************************** diff --git a/embedding/browser/powerplant/source/CWebBrowserChrome.h b/embedding/browser/powerplant/source/CWebBrowserChrome.h index 7fc2c327939f..ed63b7e3e58b 100644 --- a/embedding/browser/powerplant/source/CWebBrowserChrome.h +++ b/embedding/browser/powerplant/source/CWebBrowserChrome.h @@ -31,12 +31,14 @@ #include "nsIBaseWindow.h" #include "nsIWebProgressListener.h" #include "nsIInterfaceRequestor.h" +#include "nsIPrompt.h" class CBrowserWindow; class CWebBrowserChrome : public nsIWebBrowserChrome, public nsIWebProgressListener, public nsIBaseWindow, + public nsIPrompt, public nsIInterfaceRequestor { friend class CBrowserWindow; @@ -46,6 +48,7 @@ public: NS_DECL_NSIWEBBROWSERCHROME NS_DECL_NSIWEBPROGRESSLISTENER NS_DECL_NSIBASEWINDOW + NS_DECL_NSIPROMPT NS_DECL_NSIINTERFACEREQUESTOR protected: