gecko-dev/cmd/winfe/edtrccln.cpp

148 строки
4.2 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
/* edtrccln.h edtor client wrapper */
/* Dynamic Library wrapper for loading on call*/
#include "stdafx.h"
#include "edtrccln.h"
#ifdef WIN32
#define EDITORDLL "EDITOR32.DLL"
#else
#define EDITORDLL "EDITOR16.DLL"
#endif
HINSTANCE CEditorResourceDll::s_dllinstance=NULL;
unsigned int CEditorResourceDll::s_refcount=0;
IMAGEDIALOGCONSTRUCTOR CEditorResourceDll::s_pimagedialog=NULL;
IJPEGDLGCONSTRUCTOR CEditorResourceDll::s_pjpegdialog=NULL;
TAGDIALOGCONSTRUCTOR CEditorResourceDll::s_ptagdialog=NULL;
IMEDLLCONSTRUCTOR CEditorResourceDll::s_pimedll=NULL;
#ifdef XP_WIN32
#define PROC_IImageConversionDialog_Create "IImageConversionDialog_Create"
#define PROC_IIMEDll_Create "IIMEDll_Create"
#define PROC_ITagDialog_Create "ITagDialog_Create"
#define PROC_IJPEGOptionsDlg_Create "IJPEGOptionsDlg_Create"
#else //XP_WIN16
#define PROC_IImageConversionDialog_Create "IIMAGECONVERSIONDIALOG_CREATE"
#define PROC_IIMEDll_Create "IIMEDIALOG_CREATE"
#define PROC_ITagDialog_Create "ITAGDIALOG_CREATE"
#define PROC_IJPEGOptionsDlg_Create "IJPEGOPTIONSDLG_CREATE"
#endif
CEditorResourceDll::CEditorResourceDll()
{
// Running under Win3.1, if the default drive is A or B and the disk
// was removed, this tries to load from the default drive.
// So change to C before loading. (A=1, B=2, C=3)
if( _getdrive() < 3 ){
_chdrive(3);
}
if (s_refcount)
{
s_dllinstance=LoadLibrary(EDITORDLL);
s_refcount++;
return;
}
else
{
s_dllinstance=LoadLibrary(EDITORDLL);
XP_ASSERT(s_dllinstance);
s_refcount++;
if(!s_dllinstance)
return;
//retrieve all proc addresses and place them into holders
s_pimagedialog= (IMAGEDIALOGCONSTRUCTOR)GetProcAddress(s_dllinstance,PROC_IImageConversionDialog_Create);
XP_ASSERT(s_pimagedialog);
s_ptagdialog= (TAGDIALOGCONSTRUCTOR)GetProcAddress(s_dllinstance,PROC_ITagDialog_Create);
XP_ASSERT(s_ptagdialog);
s_pimedll= (IMEDLLCONSTRUCTOR)GetProcAddress(s_dllinstance,PROC_IIMEDll_Create);
XP_ASSERT(s_pimedll);
s_pjpegdialog=(IJPEGDLGCONSTRUCTOR)GetProcAddress(s_dllinstance,PROC_IJPEGOptionsDlg_Create);
XP_ASSERT(s_pjpegdialog);
}
}
CEditorResourceDll::~CEditorResourceDll()
{
#ifdef WIN32
if (!FreeLibrary(s_dllinstance))
XP_ASSERT(0);
#else
FreeLibrary(s_dllinstance);
#endif
s_refcount--;
}
HINSTANCE
CEditorResourceDll::switchResources()
{
XP_ASSERT(s_refcount);
HINSTANCE t_hinstance=AfxGetResourceHandle();
AfxSetResourceHandle(s_dllinstance);
return t_hinstance;
}
IImageConversionDialog *
CEditorResourceDll::CreateImageConversionDialog(HWND pParent/*=NULL*/)
{
XP_ASSERT(s_pimagedialog);
if (!s_pimagedialog)
return NULL;
return (*s_pimagedialog)(pParent);
}
ITagDialog *
CEditorResourceDll::CreateTagDialog(IWFEInterface * wfe, IEDTInterface * edt, HWND hwnd,char * pchar)
{
XP_ASSERT(s_ptagdialog);
if (!s_ptagdialog)
return NULL;
return (*s_ptagdialog)(wfe,edt,pchar,hwnd);
}
IIMEDll *
CEditorResourceDll::CreateImeDll()
{
XP_ASSERT(s_pimedll);
if (!s_pimedll)
return NULL;
return (*s_pimedll)();
}
IJPEGOptionsDlg *
CEditorResourceDll::CreateJpegDialog(HWND pParent/*=NULL*/)
{
XP_ASSERT(s_pjpegdialog);
if (!s_pjpegdialog)
return NULL;
return (*s_pjpegdialog)(pParent);
}