Files
Mozilla/mozilla/embedding/browser/activex/src/control/PromptService.cpp
dougt%netscape.com e289284076 166917. Clean up xpcom SDK includes. r=rpotts@netscape.com, sr=alecf@netscape.com, a=rjesup@wgate.com
git-svn-id: svn://10.0.0.236/trunk@129050 18797224-902f-48f8-a5cc-f745e15eee43
2002-09-07 17:13:19 +00:00

885 lines
23 KiB
C++

/* -*- 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):
*/
#include "StdAfx.h"
#include "MozillaBrowser.h"
#include "PromptService.h"
#include "nsCOMPtr.h"
#include "nsIPromptService.h"
#include "nsIFactory.h"
#include "nsIDOMWindow.h"
#include "nsReadableUtils.h"
class PromptDlg
{
public:
PromptDlg();
virtual ~PromptDlg();
nsresult ConfirmCheck(
HWND hwndParent,
const PRUnichar *dialogTitle,
const PRUnichar *text,
const PRUnichar *checkMsg, PRBool *checkValue,
PRBool *_retval);
nsresult ConfirmEx(
HWND hwndParent,
const PRUnichar *dialogTitle,
const PRUnichar *text,
PRUint32 buttonFlags,
const PRUnichar *button0Title,
const PRUnichar *button1Title,
const PRUnichar *button2Title,
const PRUnichar *checkMsg, PRBool *checkValue,
PRInt32 *buttonPressed);
nsresult Prompt(HWND hwndParent, const PRUnichar *dialogTitle,
const PRUnichar *text, PRUnichar **value,
const PRUnichar *checkMsg, PRBool *checkValue,
PRBool *_retval);
nsresult PromptUsernameAndPassword(HWND hwndParent,
const PRUnichar *dialogTitle,
const PRUnichar *text,
PRUnichar **username, PRUnichar **password,
const PRUnichar *checkMsg, PRBool *checkValue,
PRBool *_retval);
nsresult PromptPassword(HWND hwndParent,
const PRUnichar *dialogTitle,
const PRUnichar *text,
PRUnichar **password,
const PRUnichar *checkMsg, PRBool *checkValue,
PRBool *_retval);
protected:
static BOOL CALLBACK ConfirmProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
static BOOL CALLBACK PromptProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
TCHAR *mTitle;
TCHAR *mMessage;
TCHAR *mCheckMessage;
BOOL mCheckValue;
TCHAR *mButtonTitles[3];
TCHAR *mUsername;
TCHAR *mPassword;
TCHAR *mValue;
enum {
PROMPT_USERPASS,
PROMPT_PASS,
PROMPT_VALUE
} mPromptMode;
};
PromptDlg::PromptDlg() :
mMessage(NULL),
mCheckMessage(NULL),
mCheckValue(FALSE),
mUsername(NULL),
mPassword(NULL),
mValue(NULL),
mTitle(NULL),
mPromptMode(PROMPT_USERPASS)
{
for (int i = 0; i < 3; i++)
{
mButtonTitles[i] = NULL;
}
}
PromptDlg::~PromptDlg()
{
if (mTitle)
free(mTitle);
if (mMessage)
free(mMessage);
if (mCheckMessage)
free(mCheckMessage);
if (mUsername)
free(mUsername);
if (mPassword)
free(mPassword);
if (mValue)
free(mValue);
for (int i = 0; i < 3; i++)
{
if (mButtonTitles[i])
{
free(mButtonTitles[i]);
}
}
}
nsresult PromptDlg::ConfirmCheck(
HWND hwndParent,
const PRUnichar *dialogTitle,
const PRUnichar *text,
const PRUnichar *checkMsg, PRBool *checkValue,
PRBool *_retval)
{
NS_ENSURE_ARG_POINTER(_retval);
PRInt32 buttonPressed = 0;
PRUint32 buttonFlags = nsIPromptService::BUTTON_TITLE_YES +
(nsIPromptService::BUTTON_TITLE_NO << 8);
// Use the extended confirmation dialog with Yes & No buttons
nsresult rv = ConfirmEx(hwndParent, dialogTitle, text,
buttonFlags, NULL, NULL, NULL,
checkMsg, checkValue, &buttonPressed);
if (NS_SUCCEEDED(rv))
{
*_retval = (buttonPressed == 0) ? PR_TRUE : PR_FALSE;
}
return rv;
}
nsresult PromptDlg::ConfirmEx(
HWND hwndParent,
const PRUnichar *dialogTitle,
const PRUnichar *text,
PRUint32 buttonFlags,
const PRUnichar *button0Title,
const PRUnichar *button1Title,
const PRUnichar *button2Title,
const PRUnichar *checkMsg, PRBool *checkValue,
PRInt32 *buttonPressed)
{
NS_ENSURE_ARG_POINTER(dialogTitle);
NS_ENSURE_ARG_POINTER(text);
NS_ENSURE_ARG_POINTER(buttonPressed);
HINSTANCE hInstResource = _Module.m_hInstResource;
USES_CONVERSION;
// Duplicate all strings, turning them into TCHARs
mTitle = _tcsdup(W2T(dialogTitle));
mMessage = _tcsdup(W2T(text));
if (checkMsg)
{
NS_ENSURE_ARG_POINTER(checkValue);
mCheckMessage = _tcsdup(W2T(checkMsg));
mCheckValue = (*checkValue == PR_TRUE) ? TRUE : FALSE;
}
// Turn the button flags into strings. The nsIPromptService flags
// are scary bit shifted values which explains the masks and bit
// shifting happening in this loop.
for (int i = 0; i < 3; i++)
{
PRUint32 titleId = buttonFlags & 255;
TCHAR **title = &mButtonTitles[i];
switch (titleId)
{
case nsIPromptService::BUTTON_TITLE_OK:
case nsIPromptService::BUTTON_TITLE_CANCEL:
case nsIPromptService::BUTTON_TITLE_YES:
case nsIPromptService::BUTTON_TITLE_NO:
case nsIPromptService::BUTTON_TITLE_SAVE:
case nsIPromptService::BUTTON_TITLE_DONT_SAVE:
case nsIPromptService::BUTTON_TITLE_REVERT:
{
const int kTitleSize = 256;
int stringId = IDS_CONFIRMEX_OK + titleId - nsIPromptService::BUTTON_TITLE_OK;
*title = (TCHAR *) malloc(sizeof(TCHAR) * kTitleSize);
::LoadString(hInstResource, stringId, *title, kTitleSize - 1);
break;
}
case nsIPromptService::BUTTON_TITLE_IS_STRING:
{
const PRUnichar *srcTitle =
(i == 0) ? button0Title :
(i == 1) ? button1Title : button2Title;
if (srcTitle)
{
*title = _tcsdup(W2T(srcTitle));
}
break;
}
default:
// ANYTHING ELSE GETS IGNORED
break;
}
buttonFlags >>= 8;
}
// Must have at least one button the user can click on!
NS_ENSURE_ARG_POINTER(mButtonTitles[0]);
INT result = DialogBoxParam(hInstResource,
MAKEINTRESOURCE(IDD_CONFIRMEX), hwndParent, ConfirmProc, (LPARAM) this);
if (checkValue)
*checkValue = mCheckValue;
if (buttonPressed)
*buttonPressed = result;
return NS_OK;
}
nsresult
PromptDlg::Prompt(HWND hwndParent, const PRUnichar *dialogTitle,
const PRUnichar *text, PRUnichar **value,
const PRUnichar *checkMsg, PRBool *checkValue,
PRBool *_retval)
{
NS_ENSURE_ARG_POINTER(text);
NS_ENSURE_ARG_POINTER(_retval);
HINSTANCE hInstResource = _Module.m_hInstResource;
USES_CONVERSION;
// Duplicate all strings, turning them into TCHARs
if (dialogTitle)
mTitle = _tcsdup(W2T(dialogTitle));
mMessage = _tcsdup(W2T(text));
if (checkMsg)
{
NS_ENSURE_ARG_POINTER(checkValue);
mCheckMessage = _tcsdup(W2T(checkMsg));
mCheckValue = (*checkValue == PR_TRUE) ? TRUE : FALSE;
}
if (value)
{
mValue = _tcsdup(W2T(*value));
}
mPromptMode = PROMPT_VALUE;
INT result = DialogBoxParam(hInstResource,
MAKEINTRESOURCE(IDD_PROMPT), hwndParent, PromptProc, (LPARAM) this);
if (result == IDOK)
{
if (value)
{
if (*value)
nsMemory::Free(*value);
nsAutoString v(T2W(mValue));
*value = ToNewUnicode(v);
}
if (checkValue)
*checkValue = mCheckValue;
*_retval = TRUE;
}
else
{
*_retval = FALSE;
}
return NS_OK;
}
nsresult
PromptDlg::PromptUsernameAndPassword(HWND hwndParent,
const PRUnichar *dialogTitle,
const PRUnichar *text,
PRUnichar **username, PRUnichar **password,
const PRUnichar *checkMsg, PRBool *checkValue,
PRBool *_retval)
{
NS_ENSURE_ARG_POINTER(text);
NS_ENSURE_ARG_POINTER(_retval);
HINSTANCE hInstResource = _Module.m_hInstResource;
USES_CONVERSION;
// Duplicate all strings, turning them into TCHARs
if (dialogTitle)
mTitle = _tcsdup(W2T(dialogTitle));
mMessage = _tcsdup(W2T(text));
if (checkMsg)
{
NS_ENSURE_ARG_POINTER(checkValue);
mCheckMessage = _tcsdup(W2T(checkMsg));
mCheckValue = (*checkValue == PR_TRUE) ? TRUE : FALSE;
}
if (username)
{
mUsername = _tcsdup(W2T(*username));
}
if (password)
{
mPassword = _tcsdup(W2T(*password));
}
mPromptMode = PROMPT_USERPASS;
INT result = DialogBoxParam(hInstResource,
MAKEINTRESOURCE(IDD_PROMPTUSERPASS), hwndParent, PromptProc, (LPARAM) this);
if (result == IDOK)
{
if (username)
{
if (*username)
nsMemory::Free(*username);
nsAutoString user(T2W(mUsername));
*username = ToNewUnicode(user);
}
if (password)
{
if (*password)
nsMemory::Free(*password);
nsAutoString pass(T2W(mPassword));
*password = ToNewUnicode(pass);
}
if (checkValue)
*checkValue = mCheckValue;
*_retval = TRUE;
}
else
{
*_retval = FALSE;
}
return NS_OK;
}
nsresult
PromptDlg::PromptPassword(HWND hwndParent,
const PRUnichar *dialogTitle,
const PRUnichar *text,
PRUnichar **password,
const PRUnichar *checkMsg, PRBool *checkValue,
PRBool *_retval)
{
NS_ENSURE_ARG_POINTER(text);
NS_ENSURE_ARG_POINTER(_retval);
HINSTANCE hInstResource = _Module.m_hInstResource;
USES_CONVERSION;
// Duplicate all strings, turning them into TCHARs
if (dialogTitle)
mTitle = _tcsdup(W2T(dialogTitle));
mMessage = _tcsdup(W2T(text));
if (checkMsg)
{
NS_ENSURE_ARG_POINTER(checkValue);
mCheckMessage = _tcsdup(W2T(checkMsg));
mCheckValue = (*checkValue == PR_TRUE) ? TRUE : FALSE;
}
if (password)
{
mPassword = _tcsdup(W2T(*password));
}
mPromptMode = PROMPT_PASS;
INT result = DialogBoxParam(hInstResource,
MAKEINTRESOURCE(IDD_PROMPTUSERPASS), hwndParent, PromptProc, (LPARAM) this);
if (result == IDOK)
{
if (password)
{
if (*password)
nsMemory::Free(*password);
nsAutoString pass(T2W(mPassword));
*password = ToNewUnicode(pass);
}
if (checkValue)
*checkValue = mCheckValue;
*_retval = TRUE;
}
else
{
*_retval = FALSE;
}
return NS_OK;}
BOOL CALLBACK
PromptDlg::PromptProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
PromptDlg *pThis = (PromptDlg *) GetWindowLong(hwndDlg, DWL_USER);
switch (uMsg)
{
case WM_INITDIALOG:
// Initialise pThis
SetWindowLong(hwndDlg, DWL_USER, lParam);
pThis = (PromptDlg *) lParam;
// Set dialog title & message text
if (pThis->mTitle)
SetWindowText(hwndDlg, pThis->mTitle);
SetDlgItemText(hwndDlg, IDC_MESSAGE, pThis->mMessage);
// Set check message text
if (pThis->mCheckMessage)
{
SetDlgItemText(hwndDlg, IDC_CHECKMSG, pThis->mCheckMessage);
CheckDlgButton(hwndDlg, IDC_CHECKMSG, pThis->mCheckValue ? BST_CHECKED : BST_UNCHECKED);
}
else
{
ShowWindow(GetDlgItem(hwndDlg, IDC_CHECKMSG), SW_HIDE);
}
switch (pThis->mPromptMode)
{
case PROMPT_PASS:
EnableWindow(GetDlgItem(hwndDlg, IDC_USERNAME), FALSE);
if (pThis->mPassword)
{
SetDlgItemText(hwndDlg, IDC_PASSWORD, pThis->mPassword);
}
break;
case PROMPT_USERPASS:
if (pThis->mUsername)
{
SetDlgItemText(hwndDlg, IDC_USERNAME, pThis->mUsername);
}
if (pThis->mPassword)
{
SetDlgItemText(hwndDlg, IDC_PASSWORD, pThis->mPassword);
}
break;
case PROMPT_VALUE:
if (pThis->mValue)
{
SetDlgItemText(hwndDlg, IDC_VALUE, pThis->mValue);
}
break;
}
return TRUE;
case WM_COMMAND:
if (HIWORD(wParam) == BN_CLICKED)
{
int id = LOWORD(wParam);
if (id == IDOK)
{
if (pThis->mCheckMessage)
{
pThis->mCheckValue =
(IsDlgButtonChecked(hwndDlg, IDC_CHECKMSG) == BST_CHECKED) ?
TRUE : FALSE;
}
const int bufferSize = 256;
TCHAR buffer[bufferSize];
switch (pThis->mPromptMode)
{
case PROMPT_USERPASS:
if (pThis->mUsername)
{
free(pThis->mUsername);
}
memset(buffer, 0, sizeof(buffer));
GetDlgItemText(hwndDlg, IDC_USERNAME, buffer, bufferSize);
pThis->mUsername = _tcsdup(buffer);
// DROP THROUGH !!!!
case PROMPT_PASS:
if (pThis->mPassword)
{
free(pThis->mPassword);
}
memset(buffer, 0, sizeof(buffer));
GetDlgItemText(hwndDlg, IDC_PASSWORD, buffer, bufferSize);
pThis->mPassword = _tcsdup(buffer);
break;
case PROMPT_VALUE:
if (pThis->mValue)
{
free(pThis->mValue);
}
memset(buffer, 0, sizeof(buffer));
GetDlgItemText(hwndDlg, IDC_VALUE, buffer, bufferSize);
pThis->mValue = _tcsdup(buffer);
break;
}
EndDialog(hwndDlg, IDOK);
}
else if (id == IDCANCEL)
{
EndDialog(hwndDlg, IDCANCEL);
}
}
return TRUE;
}
return FALSE;
}
BOOL CALLBACK
PromptDlg::ConfirmProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
PromptDlg *pThis = (PromptDlg *) GetWindowLong(hwndDlg, DWL_USER);
int i;
switch (uMsg)
{
case WM_INITDIALOG:
// Initialise pThis
SetWindowLong(hwndDlg, DWL_USER, lParam);
pThis = (PromptDlg *) lParam;
// Set dialog title & message text
SetWindowText(hwndDlg, pThis->mTitle);
SetDlgItemText(hwndDlg, IDC_MESSAGE, pThis->mMessage);
// Set check message text
if (pThis->mCheckMessage)
{
SetDlgItemText(hwndDlg, IDC_CHECKMSG, pThis->mCheckMessage);
CheckDlgButton(hwndDlg, IDC_CHECKMSG, pThis->mCheckValue ? BST_CHECKED : BST_UNCHECKED);
}
else
{
ShowWindow(GetDlgItem(hwndDlg, IDC_CHECKMSG), SW_HIDE);
}
// Set the button text or hide them
for (i = 0; i < 3; i++)
{
int id = IDC_BUTTON0 + i;
if (pThis->mButtonTitles[i])
{
SetDlgItemText(hwndDlg, id, pThis->mButtonTitles[i]);
}
else
{
ShowWindow(GetDlgItem(hwndDlg, id), SW_HIDE);
}
}
return TRUE;
case WM_COMMAND:
if (HIWORD(wParam) == BN_CLICKED)
{
int id = LOWORD(wParam);
if (id == IDC_BUTTON0 ||
id == IDC_BUTTON1 ||
id == IDC_BUTTON2)
{
if (pThis->mCheckMessage)
{
pThis->mCheckValue =
(IsDlgButtonChecked(hwndDlg, IDC_CHECKMSG) == BST_CHECKED) ?
TRUE : FALSE;
}
EndDialog(hwndDlg, id - IDC_BUTTON0);
}
}
return FALSE;
}
return FALSE;
}
//*****************************************************************************
// CPromptService
//*****************************************************************************
class CPromptService: public nsIPromptService
{
public:
CPromptService();
virtual ~CPromptService();
CMozillaBrowser *GetOwningBrowser(nsIDOMWindow *parent);
NS_DECL_ISUPPORTS
NS_DECL_NSIPROMPTSERVICE
};
//*****************************************************************************
NS_IMPL_ISUPPORTS1(CPromptService, nsIPromptService)
CPromptService::CPromptService()
{
NS_INIT_ISUPPORTS();
}
CPromptService::~CPromptService()
{
}
CMozillaBrowser *CPromptService::GetOwningBrowser(nsIDOMWindow *parent)
{
if (parent == nsnull)
{
// return the first element from the list if there is one
if (CMozillaBrowser::sBrowserList.Count() > 0)
{
return (CMozillaBrowser *) CMozillaBrowser::sBrowserList[0];
}
return NULL;
}
// Search for the browser with a content window matching the one provided
PRInt32 i;
for (i = 0; i < CMozillaBrowser::sBrowserList.Count(); i++)
{
CMozillaBrowser *p = (CMozillaBrowser *) CMozillaBrowser::sBrowserList[i];
if (p->mWebBrowser)
{
nsCOMPtr<nsIDOMWindow> domWindow;
p->mWebBrowser->GetContentDOMWindow(getter_AddRefs(domWindow));
if (domWindow.get() == parent)
{
return p;
}
}
}
return NULL;
}
///////////////////////////////////////////////////////////////////////////////
// nsIPrompt
NS_IMETHODIMP CPromptService::Alert(nsIDOMWindow *parent, const PRUnichar *dialogTitle,
const PRUnichar *text)
{
CMozillaBrowser *pOwner = GetOwningBrowser(parent);
if (pOwner)
{
USES_CONVERSION;
pOwner->MessageBox(W2T(text), W2T(dialogTitle), MB_OK | MB_ICONEXCLAMATION);
}
return NS_OK;
}
NS_IMETHODIMP CPromptService::AlertCheck(nsIDOMWindow *parent, const PRUnichar *dialogTitle,
const PRUnichar *text,
const PRUnichar *checkMsg, PRBool *checkValue)
{
CMozillaBrowser *pOwner = GetOwningBrowser(parent);
if (pOwner)
{
// TODO show dialog with check box
USES_CONVERSION;
pOwner->MessageBox(W2T(text), W2T(dialogTitle), MB_OK | MB_ICONEXCLAMATION);
}
return NS_OK;
}
NS_IMETHODIMP CPromptService::Confirm(nsIDOMWindow *parent, const PRUnichar *dialogTitle,
const PRUnichar *text,
PRBool *_retval)
{
CMozillaBrowser *pOwner = GetOwningBrowser(parent);
if (pOwner)
{
USES_CONVERSION;
int nAnswer = pOwner->MessageBox(W2T(text), W2T(dialogTitle),
MB_YESNO | MB_ICONQUESTION);
*_retval = (nAnswer == IDYES) ? PR_TRUE : PR_FALSE;
}
return NS_OK;
}
NS_IMETHODIMP CPromptService::ConfirmCheck(nsIDOMWindow *parent, const PRUnichar *dialogTitle,
const PRUnichar *text,
const PRUnichar *checkMsg, PRBool *checkValue,
PRBool *_retval)
{
CMozillaBrowser *pOwner = GetOwningBrowser(parent);
if (pOwner)
{
PromptDlg dlg;
return dlg.ConfirmCheck(pOwner->m_hWnd, dialogTitle,
text, checkMsg, checkValue, _retval);
}
return NS_OK;
}
NS_IMETHODIMP CPromptService::ConfirmEx(nsIDOMWindow *parent, const PRUnichar *dialogTitle,
const PRUnichar *text,
PRUint32 buttonFlags,
const PRUnichar *button0Title,
const PRUnichar *button1Title,
const PRUnichar *button2Title,
const PRUnichar *checkMsg, PRBool *checkValue,
PRInt32 *buttonPressed)
{
CMozillaBrowser *pOwner = GetOwningBrowser(parent);
if (pOwner)
{
PromptDlg dlg;
return dlg.ConfirmEx(pOwner->m_hWnd, dialogTitle,
text, buttonFlags, button0Title, button1Title, button2Title,
checkMsg, checkValue, buttonPressed);
}
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP CPromptService::Prompt(nsIDOMWindow *parent, const PRUnichar *dialogTitle,
const PRUnichar *text, PRUnichar **value,
const PRUnichar *checkMsg, PRBool *checkValue,
PRBool *_retval)
{
CMozillaBrowser *pOwner = GetOwningBrowser(parent);
if (pOwner)
{
PromptDlg dlg;
return dlg.Prompt(pOwner->m_hWnd,
dialogTitle, text, value, checkMsg, checkValue, _retval);
}
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP CPromptService::PromptUsernameAndPassword(nsIDOMWindow *parent,
const PRUnichar *dialogTitle,
const PRUnichar *text,
PRUnichar **username, PRUnichar **password,
const PRUnichar *checkMsg, PRBool *checkValue,
PRBool *_retval)
{
CMozillaBrowser *pOwner = GetOwningBrowser(parent);
if (pOwner)
{
PromptDlg dlg;
return dlg.PromptUsernameAndPassword(pOwner->m_hWnd,
dialogTitle, text, username, password, checkMsg, checkValue, _retval);
}
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP CPromptService::PromptPassword(nsIDOMWindow *parent,
const PRUnichar *dialogTitle,
const PRUnichar *text,
PRUnichar **password,
const PRUnichar *checkMsg, PRBool *checkValue,
PRBool *_retval)
{
CMozillaBrowser *pOwner = GetOwningBrowser(parent);
if (pOwner)
{
PromptDlg dlg;
return dlg.PromptPassword(pOwner->m_hWnd,
dialogTitle, text, password, checkMsg, checkValue, _retval);
}
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP CPromptService::Select(nsIDOMWindow *parent,
const PRUnichar *dialogTitle,
const PRUnichar *text, PRUint32 count,
const PRUnichar **selectList, PRInt32 *outSelection,
PRBool *_retval)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
//*****************************************************************************
// CPromptServiceFactory
//*****************************************************************************
class CPromptServiceFactory : public nsIFactory
{
public:
NS_DECL_ISUPPORTS
NS_DECL_NSIFACTORY
CPromptServiceFactory();
virtual ~CPromptServiceFactory();
};
//*****************************************************************************
NS_IMPL_ISUPPORTS1(CPromptServiceFactory, nsIFactory)
CPromptServiceFactory::CPromptServiceFactory()
{
NS_INIT_ISUPPORTS();
}
CPromptServiceFactory::~CPromptServiceFactory()
{
}
NS_IMETHODIMP CPromptServiceFactory::CreateInstance(nsISupports *aOuter, const nsIID & aIID, void **aResult)
{
NS_ENSURE_ARG_POINTER(aResult);
*aResult = NULL;
CPromptService *inst = new CPromptService;
if (!inst)
return NS_ERROR_OUT_OF_MEMORY;
nsresult rv = inst->QueryInterface(aIID, aResult);
if (rv != NS_OK) {
// We didn't get the right interface, so clean up
delete inst;
}
return rv;
}
NS_IMETHODIMP CPromptServiceFactory::LockFactory(PRBool lock)
{
return NS_OK;
}
//*****************************************************************************
nsresult NS_NewPromptServiceFactory(nsIFactory** aFactory)
{
NS_ENSURE_ARG_POINTER(aFactory);
*aFactory = nsnull;
CPromptServiceFactory *result = new CPromptServiceFactory;
if (!result)
return NS_ERROR_OUT_OF_MEMORY;
NS_ADDREF(result);
*aFactory = result;
return NS_OK;
}