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:
parent
e680a37841
commit
1d910ac1fc
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;
|
||||
|
||||
// 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 );
|
||||
handler->ProcessPendingEvents();
|
||||
wxENTER_CRIT_SECT( *wxPendingEventsLocker );
|
||||
|
||||
node = wxPendingEvents->First();
|
||||
}
|
||||
|
||||
|
||||
wxLEAVE_CRIT_SECT( *wxPendingEventsLocker );
|
||||
}
|
||||
|
||||
|
@ -764,7 +764,7 @@ bool wxFileConfig::Write(const wxString& key, long lValue)
|
||||
|
||||
bool wxFileConfig::Flush(bool /* bCurrentOnly */)
|
||||
{
|
||||
if ( LineListIsEmpty() || !m_pRootGroup->IsDirty() )
|
||||
if ( LineListIsEmpty() || !m_pRootGroup->IsDirty() || !m_strLocalFile )
|
||||
return TRUE;
|
||||
|
||||
wxTempFile file(m_strLocalFile);
|
||||
|
@ -36,6 +36,7 @@
|
||||
|
||||
#include "wx/fontmap.h"
|
||||
#include "wx/config.h"
|
||||
#include "wx/memconf.h"
|
||||
|
||||
#include "wx/msgdlg.h"
|
||||
#include "wx/fontdlg.h"
|
||||
@ -223,7 +224,18 @@ wxConfigBase *wxFontMapper::GetConfig()
|
||||
if ( !m_config )
|
||||
{
|
||||
// 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;
|
||||
@ -343,8 +355,9 @@ wxFontEncoding wxFontMapper::CharsetToEncoding(const wxString& charset,
|
||||
}
|
||||
else
|
||||
{
|
||||
wxLogDebug(wxT("corrupted config data - invalid encoding %ld "
|
||||
"for charset '%s'"), value, charset.c_str());
|
||||
wxLogDebug(wxT("corrupted config data: invalid encoding %ld "
|
||||
"for charset '%s' ignored"),
|
||||
value, charset.c_str());
|
||||
}
|
||||
}
|
||||
|
||||
@ -435,7 +448,7 @@ wxFontEncoding wxFontMapper::CharsetToEncoding(const wxString& charset,
|
||||
|
||||
wxASSERT_MSG( count == WXSIZEOF(gs_encodings),
|
||||
wxT("inconsitency detected - forgot to update one of "
|
||||
"the arrays?") );
|
||||
"the arrays?") );
|
||||
|
||||
wxString *encodingNamesTranslated = new wxString[count];
|
||||
|
||||
@ -459,9 +472,22 @@ wxFontEncoding wxFontMapper::CharsetToEncoding(const wxString& charset,
|
||||
|
||||
if ( n != -1 )
|
||||
{
|
||||
// TODO save the result in the config!
|
||||
|
||||
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
|
||||
}
|
||||
@ -521,7 +547,12 @@ bool wxFontMapper::GetAltForEncoding(wxFontEncoding encoding,
|
||||
// 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?
|
||||
wxString pathOld;
|
||||
@ -533,6 +564,12 @@ bool wxFontMapper::GetAltForEncoding(wxFontEncoding encoding,
|
||||
|
||||
RestorePath(pathOld);
|
||||
|
||||
if ( !!fontinfo && !!facename )
|
||||
{
|
||||
// we tried to find a match with facename - now try without it
|
||||
fontinfo = config->Read(encName);
|
||||
}
|
||||
|
||||
if ( !!fontinfo )
|
||||
{
|
||||
if ( info->FromString(fontinfo) )
|
||||
@ -550,6 +587,7 @@ bool wxFontMapper::GetAltForEncoding(wxFontEncoding encoding,
|
||||
"a valid font encoding info"), fontinfo.c_str());
|
||||
}
|
||||
}
|
||||
//else: there is no information in config about this encoding
|
||||
}
|
||||
|
||||
// ask the user
|
||||
@ -606,9 +644,12 @@ bool wxFontMapper::GetAltForEncoding(wxFontEncoding encoding,
|
||||
|
||||
// now try the default mappings:
|
||||
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) )
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user