1. added wxMemoryConfig (private) class
2. some minor tweaks to config usage in wxFontMapper git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@5599 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
54
include/wx/memconf.h
Normal file
54
include/wx/memconf.h
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: wx/memconf.h
|
||||||
|
// Purpose: wxMemoryConfig class: a wxConfigBase implementation which only
|
||||||
|
// stores the settings in memory (thus they are lost when the
|
||||||
|
// program terminates)
|
||||||
|
// Author: Vadim Zeitlin
|
||||||
|
// Modified by:
|
||||||
|
// Created: 22.01.00
|
||||||
|
// RCS-ID: $Id$
|
||||||
|
// Copyright: (c) 2000 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
|
||||||
|
// Licence: wxWindows license
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
/*
|
||||||
|
* NB: I don't see how this class may possibly be useful to the application
|
||||||
|
* program (as the settings are lost on program termination), but it is
|
||||||
|
* handy to have it inside wxWindows. So for now let's say that this class
|
||||||
|
* is private and should only be used by wxWindows itself - this might
|
||||||
|
* change in the future.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _WX_MEMCONF_H_
|
||||||
|
#define _WX_MEMCONF_H_
|
||||||
|
|
||||||
|
// no #pragma interface because no implementation file
|
||||||
|
|
||||||
|
#if wxUSE_CONFIG
|
||||||
|
|
||||||
|
#include "wx/fileconf.h" // the base class
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// wxMemoryConfig: a config class which stores settings in non-persistent way
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// notice that we inherit from wxFileConfig which already stores its data in
|
||||||
|
// memory and just disable file reading/writing - this is probably not optimal
|
||||||
|
// and might be changed in future as well (this class will always deriev from
|
||||||
|
// wxConfigBase though)
|
||||||
|
class wxMemoryConfig : public wxFileConfig
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// default (and only) ctor
|
||||||
|
wxMemoryConfig() : wxFileConfig(wxEmptyString, // default app name
|
||||||
|
wxEmptyString, // default vendor name
|
||||||
|
wxEmptyString, // no local config file
|
||||||
|
wxEmptyString, // no system config file
|
||||||
|
0) // don't use any files
|
||||||
|
{
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // wxUSE_CONFIG
|
||||||
|
|
||||||
|
#endif // _WX_MEMCONF_H_
|
@@ -63,14 +63,14 @@ void wxAppBase::ProcessPendingEvents()
|
|||||||
delete node;
|
delete node;
|
||||||
|
|
||||||
// In ProcessPendingEvents(), new handlers might be add
|
// In ProcessPendingEvents(), new handlers might be add
|
||||||
// and we can safely leave the critical section here.
|
// and we can safely leave the critical section here.
|
||||||
wxLEAVE_CRIT_SECT( *wxPendingEventsLocker );
|
wxLEAVE_CRIT_SECT( *wxPendingEventsLocker );
|
||||||
handler->ProcessPendingEvents();
|
handler->ProcessPendingEvents();
|
||||||
wxENTER_CRIT_SECT( *wxPendingEventsLocker );
|
wxENTER_CRIT_SECT( *wxPendingEventsLocker );
|
||||||
|
|
||||||
node = wxPendingEvents->First();
|
node = wxPendingEvents->First();
|
||||||
}
|
}
|
||||||
|
|
||||||
wxLEAVE_CRIT_SECT( *wxPendingEventsLocker );
|
wxLEAVE_CRIT_SECT( *wxPendingEventsLocker );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -764,7 +764,7 @@ bool wxFileConfig::Write(const wxString& key, long lValue)
|
|||||||
|
|
||||||
bool wxFileConfig::Flush(bool /* bCurrentOnly */)
|
bool wxFileConfig::Flush(bool /* bCurrentOnly */)
|
||||||
{
|
{
|
||||||
if ( LineListIsEmpty() || !m_pRootGroup->IsDirty() )
|
if ( LineListIsEmpty() || !m_pRootGroup->IsDirty() || !m_strLocalFile )
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
wxTempFile file(m_strLocalFile);
|
wxTempFile file(m_strLocalFile);
|
||||||
|
@@ -36,6 +36,7 @@
|
|||||||
|
|
||||||
#include "wx/fontmap.h"
|
#include "wx/fontmap.h"
|
||||||
#include "wx/config.h"
|
#include "wx/config.h"
|
||||||
|
#include "wx/memconf.h"
|
||||||
|
|
||||||
#include "wx/msgdlg.h"
|
#include "wx/msgdlg.h"
|
||||||
#include "wx/fontdlg.h"
|
#include "wx/fontdlg.h"
|
||||||
@@ -223,7 +224,18 @@ wxConfigBase *wxFontMapper::GetConfig()
|
|||||||
if ( !m_config )
|
if ( !m_config )
|
||||||
{
|
{
|
||||||
// try the default
|
// try the default
|
||||||
m_config = wxConfig::Get(FALSE/*don't create on demand*/);
|
m_config = wxConfig::Get(FALSE /*don't create on demand*/ );
|
||||||
|
|
||||||
|
if ( !m_config )
|
||||||
|
{
|
||||||
|
// we still want to have a config object because otherwise we would
|
||||||
|
// keep asking the user the same questions in the interactive mode,
|
||||||
|
// so create a dummy config which won't write to any files/registry
|
||||||
|
// but will allow us to remember the results of the questions at
|
||||||
|
// least during this run
|
||||||
|
m_config = new wxMemoryConfig;
|
||||||
|
wxConfig::Set(m_config);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return m_config;
|
return m_config;
|
||||||
@@ -343,8 +355,9 @@ wxFontEncoding wxFontMapper::CharsetToEncoding(const wxString& charset,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
wxLogDebug(wxT("corrupted config data - invalid encoding %ld "
|
wxLogDebug(wxT("corrupted config data: invalid encoding %ld "
|
||||||
"for charset '%s'"), value, charset.c_str());
|
"for charset '%s' ignored"),
|
||||||
|
value, charset.c_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -435,7 +448,7 @@ wxFontEncoding wxFontMapper::CharsetToEncoding(const wxString& charset,
|
|||||||
|
|
||||||
wxASSERT_MSG( count == WXSIZEOF(gs_encodings),
|
wxASSERT_MSG( count == WXSIZEOF(gs_encodings),
|
||||||
wxT("inconsitency detected - forgot to update one of "
|
wxT("inconsitency detected - forgot to update one of "
|
||||||
"the arrays?") );
|
"the arrays?") );
|
||||||
|
|
||||||
wxString *encodingNamesTranslated = new wxString[count];
|
wxString *encodingNamesTranslated = new wxString[count];
|
||||||
|
|
||||||
@@ -459,9 +472,22 @@ wxFontEncoding wxFontMapper::CharsetToEncoding(const wxString& charset,
|
|||||||
|
|
||||||
if ( n != -1 )
|
if ( n != -1 )
|
||||||
{
|
{
|
||||||
// TODO save the result in the config!
|
|
||||||
|
|
||||||
encoding = gs_encodings[n];
|
encoding = gs_encodings[n];
|
||||||
|
|
||||||
|
// save the result in the config now
|
||||||
|
if ( ChangePath(FONTMAPPER_CHARSET_PATH, &pathOld) )
|
||||||
|
{
|
||||||
|
wxConfigBase *config = GetConfig();
|
||||||
|
|
||||||
|
// remember the alt encoding for this charset
|
||||||
|
if ( !config->Write(charset, (long)encoding) )
|
||||||
|
{
|
||||||
|
wxLogError(_("Failed to remember the encoding "
|
||||||
|
"for the charset '%s'."), charset.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
RestorePath(pathOld);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//else: cancelled
|
//else: cancelled
|
||||||
}
|
}
|
||||||
@@ -521,7 +547,12 @@ bool wxFontMapper::GetAltForEncoding(wxFontEncoding encoding,
|
|||||||
// wxFatalError doesn't return
|
// wxFatalError doesn't return
|
||||||
}
|
}
|
||||||
|
|
||||||
wxString configEntry = facename + _T("_") + GetEncodingName(encoding);
|
wxString configEntry, encName = GetEncodingName(encoding);
|
||||||
|
if ( !!facename )
|
||||||
|
{
|
||||||
|
configEntry = facename + _T("_");
|
||||||
|
}
|
||||||
|
configEntry += encName;
|
||||||
|
|
||||||
// do we have a font spec for this encoding?
|
// do we have a font spec for this encoding?
|
||||||
wxString pathOld;
|
wxString pathOld;
|
||||||
@@ -533,6 +564,12 @@ bool wxFontMapper::GetAltForEncoding(wxFontEncoding encoding,
|
|||||||
|
|
||||||
RestorePath(pathOld);
|
RestorePath(pathOld);
|
||||||
|
|
||||||
|
if ( !!fontinfo && !!facename )
|
||||||
|
{
|
||||||
|
// we tried to find a match with facename - now try without it
|
||||||
|
fontinfo = config->Read(encName);
|
||||||
|
}
|
||||||
|
|
||||||
if ( !!fontinfo )
|
if ( !!fontinfo )
|
||||||
{
|
{
|
||||||
if ( info->FromString(fontinfo) )
|
if ( info->FromString(fontinfo) )
|
||||||
@@ -550,6 +587,7 @@ bool wxFontMapper::GetAltForEncoding(wxFontEncoding encoding,
|
|||||||
"a valid font encoding info"), fontinfo.c_str());
|
"a valid font encoding info"), fontinfo.c_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//else: there is no information in config about this encoding
|
||||||
}
|
}
|
||||||
|
|
||||||
// ask the user
|
// ask the user
|
||||||
@@ -606,9 +644,12 @@ bool wxFontMapper::GetAltForEncoding(wxFontEncoding encoding,
|
|||||||
|
|
||||||
// now try the default mappings:
|
// now try the default mappings:
|
||||||
wxFontEncodingArray equiv = wxEncodingConverter::GetAllEquivalents(encoding);
|
wxFontEncodingArray equiv = wxEncodingConverter::GetAllEquivalents(encoding);
|
||||||
for ( unsigned i = (equiv[0] == encoding) ? 1 : 0; i < equiv.GetCount(); i++ )
|
size_t count = equiv.GetCount();
|
||||||
|
for ( size_t i = (equiv[0] == encoding) ? 1 : 0; i < count; i++ )
|
||||||
|
{
|
||||||
if ( TestAltEncoding(configEntry, equiv[i], info) )
|
if ( TestAltEncoding(configEntry, equiv[i], info) )
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user