/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- * * 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 Communicator client 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): * Pierre Phaneuf */ // Local Includes #include "nsNetSupportDialog.h" // Helper Classes #include "nsAppShellCIDs.h" #include "nsCOMPtr.h" //Interfaces Needed #include "nsIAppShellService.h" #include "nsICommonDialogs.h" #include "nsIDOMWindow.h" #include "nsIServiceManager.h" #include "nsIXULWindow.h" /* Define Class IDs */ static NS_DEFINE_CID(kAppShellServiceCID, NS_APPSHELL_SERVICE_CID); PRBool GetNSIPrompt( nsCOMPtr & outPrompt ) { nsCOMPtr appShellService(do_GetService(kAppShellServiceCID)); if(!appShellService) return PR_FALSE; nsCOMPtr xulWindow; appShellService->GetHiddenWindow(getter_AddRefs(xulWindow)); outPrompt = do_QueryInterface(xulWindow); if(outPrompt) return PR_TRUE; return PR_FALSE; } nsNetSupportDialog::nsNetSupportDialog() { NS_INIT_REFCNT(); } nsNetSupportDialog::~nsNetSupportDialog() { } NS_IMETHODIMP nsNetSupportDialog::Alert(const PRUnichar *text) { nsresult rv = NS_ERROR_FAILURE; nsCOMPtr< nsIPrompt> dialogService; if( GetNSIPrompt( dialogService ) ) rv = dialogService->Alert( text ); return rv; } NS_IMETHODIMP nsNetSupportDialog::Confirm(const PRUnichar *text, PRBool *returnValue) { nsresult rv = NS_ERROR_FAILURE; nsCOMPtr< nsIPrompt> dialogService; if( GetNSIPrompt( dialogService ) ) rv = dialogService->Confirm( text, returnValue ); return rv; } NS_IMETHODIMP nsNetSupportDialog::ConfirmCheck(const PRUnichar *text, const PRUnichar *checkMsg, PRBool *checkValue, PRBool *returnValue) { nsresult rv = NS_ERROR_FAILURE; nsCOMPtr< nsIPrompt> dialogService; if( GetNSIPrompt( dialogService ) ) rv = dialogService->ConfirmCheck( text, checkMsg, checkValue, returnValue ); return rv; } NS_IMETHODIMP nsNetSupportDialog::UniversalDialog (const PRUnichar *inTitleMessage, const PRUnichar *inDialogTitle, /* e.g., alert, confirm, prompt, prompt password */ const PRUnichar *inMsg, /* main message for dialog */ const PRUnichar *inCheckboxMsg, /* message for checkbox */ const PRUnichar *inButton0Text, /* text for first button */ const PRUnichar *inButton1Text, /* text for second button */ const PRUnichar *inButton2Text, /* text for third button */ const PRUnichar *inButton3Text, /* text for fourth button */ const PRUnichar *inEditfield1Msg, /*message for first edit field */ const PRUnichar *inEditfield2Msg, /* message for second edit field */ PRUnichar **inoutEditfield1Value, /* initial and final value for first edit field */ PRUnichar **inoutEditfield2Value, /* initial and final value for second edit field */ const PRUnichar *inIConURL, /* url of icon to be displayed in dialog */ /* examples are "chrome://global/skin/question-icon.gif" for question mark, "chrome://global/skin/alert-icon.gif" for exclamation mark */ PRBool *inoutCheckboxState, /* initial and final state of check box */ PRInt32 inNumberButtons, /* total number of buttons (0 to 4) */ PRInt32 inNumberEditfields, /* total number of edit fields (0 to 2) */ PRInt32 inEditField1Password, /* is first edit field a password field */ PRInt32 *outButtonPressed) /* number of button that was pressed (0 to 3) */ { nsresult rv = NS_ERROR_FAILURE; nsCOMPtr< nsIPrompt> dialogService; if( GetNSIPrompt( dialogService ) ) { rv = dialogService->UniversalDialog( inTitleMessage, inDialogTitle, inMsg, inCheckboxMsg, inButton0Text, inButton1Text, inButton2Text, inButton3Text, inEditfield1Msg, inEditfield2Msg, inoutEditfield1Value, inoutEditfield2Value, inIConURL, inoutCheckboxState, inNumberButtons, inNumberEditfields, inEditField1Password, outButtonPressed); } return rv; } NS_IMETHODIMP nsNetSupportDialog::Prompt(const PRUnichar *text, const PRUnichar *defaultText, PRUnichar **resultText, PRBool *returnValue) { nsresult rv = NS_ERROR_FAILURE; nsCOMPtr< nsIPrompt> dialogService; if( GetNSIPrompt( dialogService ) ) rv = dialogService->Prompt( text, defaultText, resultText, returnValue ); return rv; } NS_IMETHODIMP nsNetSupportDialog::PromptUsernameAndPassword(const PRUnichar *text, PRUnichar **user, PRUnichar **pwd, PRBool *returnValue) { nsresult rv = NS_ERROR_FAILURE; nsCOMPtr< nsIPrompt> dialogService; if( GetNSIPrompt( dialogService ) ) rv = dialogService->PromptUsernameAndPassword( text, user, pwd, returnValue ); return rv; } NS_IMETHODIMP nsNetSupportDialog::PromptPassword(const PRUnichar *text, const PRUnichar *title, PRUnichar **pwd, PRBool *_retval) { nsresult rv = NS_ERROR_FAILURE; nsCOMPtr< nsIPrompt> dialogService; if( GetNSIPrompt( dialogService ) ) rv = dialogService->PromptPassword( text, title, pwd, _retval ); return rv; } nsresult nsNetSupportDialog::Select(const PRUnichar *inDialogTitle, const PRUnichar *inMsg, PRUint32 inCount, const PRUnichar **inList, PRInt32 *outSelection, PRBool *_retval) { nsresult rv = NS_ERROR_FAILURE; nsCOMPtr< nsIPrompt> dialogService; if( GetNSIPrompt( dialogService ) ) rv = dialogService->Select( inDialogTitle, inMsg, inCount, inList, outSelection, _retval); return rv; } NS_IMPL_ISUPPORTS1( nsNetSupportDialog, nsIPrompt );