191 lines
6.5 KiB
C++
191 lines
6.5 KiB
C++
/* -*- 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 <pp@ludusdesign.com>
|
|
*/
|
|
|
|
// 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<nsIPrompt> & outPrompt )
|
|
{
|
|
nsCOMPtr<nsIAppShellService> appShellService(do_GetService(kAppShellServiceCID));
|
|
if(!appShellService)
|
|
return PR_FALSE;
|
|
|
|
nsCOMPtr<nsIXULWindow> 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 );
|