You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

212 lines
5.2 KiB

/*
* Copyright (C) 2005 Dorian Boissonnade
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
*/
#include "stdafx.h"
#if GECKO_VERSION < 19
#include "Fontpackagehandler.h"
#include "nsIFontPackageService.h"
#include "BrowserFrm.h"
#include "MfcEmbed.h"
NS_IMPL_ISUPPORTS1(CFontPackageHandler, nsIFontPackageHandler);
CFontPackageHandler::CFontPackageHandler(void)
{
}
CFontPackageHandler::~CFontPackageHandler(void)
{
}
NS_IMETHODIMP CFontPackageHandler::NeedFontPackage(const char *aFontPackID)
{
// no FontPackage is passed, return
NS_ENSURE_ARG_POINTER(aFontPackID);
if (!strlen(aFontPackID))
return NS_ERROR_UNEXPECTED;
CMfcEmbedApp *pApp = (CMfcEmbedApp *)AfxGetApp();
if (!pApp->preferences.GetBool("font.askWhenNeeded", true))
return NS_OK;
nsresult rv;
// Should get that from chrome
CString cshandledLanguages;
cshandledLanguages.LoadString(IDS_HANDLED_LANGUAGES);
USES_CONVERSION;
const char* handledLanguages = T2CA(cshandledLanguages);
// aFontPackID is of the form lang:xx or lang:xx-YY
const char *_langCode = strchr(aFontPackID,':');
if (!_langCode || !*(_langCode + 1))
return NS_ERROR_UNEXPECTED;
char *langCode;
langCode = strdup(_langCode + 1);
strlwr(langCode);
// check for xx or xx-yy in handled_languages
// if not handled, return now, don't show the font dialog
if (!strstr(handledLanguages, langCode))
return NS_OK; // XXX should be error?
HWND hWndTop;
HWND hWnd = CWnd::GetSafeOwner_(NULL, &hWndTop);
if (hWnd != hWndTop)
EnableWindow(hWnd, TRUE);
CWnd* parent = CWnd::FromHandle(hWnd);
// check windows version
OSVERSIONINFO vi;
vi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&vi);
if (vi.dwMajorVersion>4)
{
CFontNeededDialog* dlg = new CFontNeededDialog(langCode, parent);
rv = dlg->DoModal();
}
else
{
CDownloadFontDialog* dlg = new CDownloadFontDialog(langCode, parent);
rv = dlg->DoModal();
}
free(langCode);
nsCOMPtr<nsIFontPackageService> fontService(do_GetService(NS_FONTPACKAGESERVICE_CONTRACTID));
NS_ENSURE_TRUE(fontService, NS_ERROR_FAILURE);
fontService->FontPackageHandled(NS_SUCCEEDED(rv), PR_FALSE, aFontPackID);
return rv;
}
// Bo<EFBFBD>te de dialogue CDownloadFontDialog
//IMPLEMENT_DYNAMIC(CDownloadFontDialog, CDialog)
CDownloadFontDialog::CDownloadFontDialog(const char* langcode, CWnd* pParent /*=NULL*/)
: CDialog(CDownloadFontDialog::IDD, pParent)
{
USES_CONVERSION;
m_csFontName.LoadString(IDS_NAME_UNKNOW);
CString cshandledLanguages;
cshandledLanguages.LoadString(IDS_HANDLED_LANGUAGES);
char* handledLanguages = T2A(cshandledLanguages.GetBuffer(0));
int i=0;
char *token = strtok(handledLanguages, ", " );
while( token != NULL )
{
if (strcmp(token, langcode)==0)
{
m_csFontName.LoadString(IDS_NAME_FIRST + i);
m_csFontSize.LoadString(IDS_SIZE_FIRST + i);
break;
}
i++;
token = strtok(NULL, ", ");
}
m_LangCode = langcode;
}
CDownloadFontDialog::~CDownloadFontDialog()
{
}
void CDownloadFontDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_FONTNAME, m_csFontName);
DDX_Text(pDX, IDC_FONTSIZE, m_csFontSize);
}
BEGIN_MESSAGE_MAP(CDownloadFontDialog, CDialog)
ON_BN_CLICKED(IDOK, OnBnClickedOk)
END_MESSAGE_MAP()
// Gestionnaires de messages CDownloadFontDialog
// Bo<EFBFBD>te de dialogue CFontNeededDialog
//IMPLEMENT_DYNAMIC(CFontNeededDialog, CDialog)
CFontNeededDialog::CFontNeededDialog(const char* langcode, CWnd* pParent /*=NULL*/)
: CDialog(CFontNeededDialog::IDD, pParent)
{
USES_CONVERSION;
m_csFontName.LoadString(IDS_NAME_UNKNOW);
CString cshandledLanguages;
cshandledLanguages.LoadString(IDS_HANDLED_LANGUAGES);
char* handledLanguages = T2A(cshandledLanguages.GetBuffer(0));
int i=0;
char *token = strtok(handledLanguages, ", " );
while( token != NULL )
{
if (strcmp(token, langcode)==0)
{
m_csFontName.LoadString(IDS_NAME_FIRST + i);
break;
}
i++;
token = strtok(NULL, ", ");
}
m_LangCode = langcode;
}
CFontNeededDialog::~CFontNeededDialog()
{
}
void CFontNeededDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_FONTNAME, m_csFontName);
}
BEGIN_MESSAGE_MAP(CFontNeededDialog, CDialog)
END_MESSAGE_MAP()
// Gestionnaires de messages CFontNeededDialog
void CDownloadFontDialog::OnBnClickedOk()
{
CBrowserFrame* pFrm = theApp.CreateNewBrowserFrame(nsIWebBrowserChrome::CHROME_ALL, FALSE);
if(!pFrm)
return;
pFrm->OpenURL(
_T("http://www.mozilla.org/projects/intl/fonts/win/redirect/package_") + m_LangCode + _T(".html"));
pFrm->ShowWindow(SW_SHOW);
OnOK();
}
#endif // GECKO_VERSION