propose to the user to use the replacement encoding if one was found
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@12900 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -805,6 +805,29 @@ bool wxFontMapper::GetAltForEncoding(wxFontEncoding encoding,
|
|||||||
}
|
}
|
||||||
#endif // wxUSE_CONFIG
|
#endif // wxUSE_CONFIG
|
||||||
|
|
||||||
|
// now try to map this encoding to a compatible one which we have on this
|
||||||
|
// system
|
||||||
|
wxFontEncodingArray equiv = wxEncodingConverter::GetAllEquivalents(encoding);
|
||||||
|
size_t count = equiv.GetCount();
|
||||||
|
bool foundEquivEncoding = FALSE;
|
||||||
|
wxFontEncoding equivEncoding;
|
||||||
|
if ( count )
|
||||||
|
{
|
||||||
|
for ( size_t i = 0; i < count && !foundEquivEncoding; i++ )
|
||||||
|
{
|
||||||
|
// don't test for encoding itself, we already know we don't have it
|
||||||
|
if ( equiv[i] == encoding )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if ( TestAltEncoding(configEntry, equiv[i], info) )
|
||||||
|
{
|
||||||
|
equivEncoding = equiv[i];
|
||||||
|
|
||||||
|
foundEquivEncoding = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ask the user
|
// ask the user
|
||||||
#if wxUSE_FONTDLG
|
#if wxUSE_FONTDLG
|
||||||
if ( interactive )
|
if ( interactive )
|
||||||
@@ -813,29 +836,40 @@ bool wxFontMapper::GetAltForEncoding(wxFontEncoding encoding,
|
|||||||
if ( !title )
|
if ( !title )
|
||||||
title << wxTheApp->GetAppName() << _(": unknown encoding");
|
title << wxTheApp->GetAppName() << _(": unknown encoding");
|
||||||
|
|
||||||
// the message
|
// built the message
|
||||||
wxString msg;
|
wxString encDesc = GetEncodingDescription(encoding),
|
||||||
|
msg;
|
||||||
|
if ( foundEquivEncoding )
|
||||||
|
{
|
||||||
|
// ask the user if he wants to override found alternative encoding
|
||||||
|
msg.Printf(_("No font for displaying text in encoding '%s' found,\nbut an alternative encoding '%s' is available.\nDo you want to use this encoding (otherwise you will have to choose another one)?"),
|
||||||
|
encDesc.c_str(), GetEncodingDescription(equivEncoding).c_str());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
msg.Printf(_("No font for displaying text in encoding '%s' found.\nWould you like to select a font to be used for this encoding\n(otherwise the text in this encoding will not be shown correctly)?"),
|
msg.Printf(_("No font for displaying text in encoding '%s' found.\nWould you like to select a font to be used for this encoding\n(otherwise the text in this encoding will not be shown correctly)?"),
|
||||||
GetEncodingDescription(encoding).c_str());
|
encDesc.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
wxWindow *parent = m_windowParent;
|
// the question is different in 2 cases so the answer has to be
|
||||||
if ( !parent )
|
// interpreted differently as well
|
||||||
parent = wxTheApp->GetTopWindow();
|
int answer = foundEquivEncoding ? wxNO : wxYES;
|
||||||
|
|
||||||
if ( wxMessageBox(msg, title,
|
if ( wxMessageBox(msg, title,
|
||||||
wxICON_QUESTION | wxYES_NO, parent) == wxYES )
|
wxICON_QUESTION | wxYES_NO,
|
||||||
|
m_windowParent) == answer )
|
||||||
{
|
{
|
||||||
wxFontData data;
|
wxFontData data;
|
||||||
data.SetEncoding(encoding);
|
data.SetEncoding(encoding);
|
||||||
data.EncodingInfo() = *info;
|
data.EncodingInfo() = *info;
|
||||||
wxFontDialog dialog(parent, &data);
|
wxFontDialog dialog(m_windowParent, &data);
|
||||||
if ( dialog.ShowModal() == wxID_OK )
|
if ( dialog.ShowModal() == wxID_OK )
|
||||||
{
|
{
|
||||||
wxFontData retData = dialog.GetFontData();
|
wxFontData retData = dialog.GetFontData();
|
||||||
wxFont font = retData.GetChosenFont();
|
wxFont font = retData.GetChosenFont();
|
||||||
|
|
||||||
*info = retData.EncodingInfo();
|
*info = retData.EncodingInfo();
|
||||||
info -> encoding = retData.GetEncoding();
|
info->encoding = retData.GetEncoding();
|
||||||
|
|
||||||
#if wxUSE_CONFIG
|
#if wxUSE_CONFIG
|
||||||
// remember this in the config
|
// remember this in the config
|
||||||
@@ -853,12 +887,19 @@ bool wxFontMapper::GetAltForEncoding(wxFontEncoding encoding,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// the user doesn't want to select a font for this encoding,
|
// the user doesn't want to select a font for this encoding
|
||||||
|
// or selected to use equivalent encoding
|
||||||
|
//
|
||||||
// remember it to avoid asking the same question again later
|
// remember it to avoid asking the same question again later
|
||||||
#if wxUSE_CONFIG
|
#if wxUSE_CONFIG
|
||||||
if ( ChangePath(FONTMAPPER_FONT_FROM_ENCODING_PATH, &pathOld) )
|
if ( ChangePath(FONTMAPPER_FONT_FROM_ENCODING_PATH, &pathOld) )
|
||||||
{
|
{
|
||||||
GetConfig()->Write(configEntry, FONTMAPPER_FONT_DONT_ASK);
|
GetConfig()->Write
|
||||||
|
(
|
||||||
|
configEntry,
|
||||||
|
foundEquivEncoding ? info->ToString().c_str()
|
||||||
|
: FONTMAPPER_FONT_DONT_ASK
|
||||||
|
);
|
||||||
|
|
||||||
RestorePath(pathOld);
|
RestorePath(pathOld);
|
||||||
}
|
}
|
||||||
@@ -868,19 +909,7 @@ bool wxFontMapper::GetAltForEncoding(wxFontEncoding encoding,
|
|||||||
//else: we're in non-interactive mode
|
//else: we're in non-interactive mode
|
||||||
#endif // wxUSE_FONTDLG
|
#endif // wxUSE_FONTDLG
|
||||||
|
|
||||||
// now try the default mappings:
|
return foundEquivEncoding;
|
||||||
wxFontEncodingArray equiv = wxEncodingConverter::GetAllEquivalents(encoding);
|
|
||||||
size_t count = equiv.GetCount();
|
|
||||||
if ( count )
|
|
||||||
{
|
|
||||||
for ( size_t i = (equiv[0] == encoding) ? 1 : 0; i < count; i++ )
|
|
||||||
{
|
|
||||||
if ( TestAltEncoding(configEntry, equiv[i], info) )
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return FALSE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxFontMapper::GetAltForEncoding(wxFontEncoding encoding,
|
bool wxFontMapper::GetAltForEncoding(wxFontEncoding encoding,
|
||||||
|
Reference in New Issue
Block a user