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:
Vadim Zeitlin 2000-01-22 23:15:52 +00:00
parent e680a37841
commit 1d910ac1fc
4 changed files with 106 additions and 11 deletions

54
include/wx/memconf.h Normal file
View 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_

View File

@ -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 );
}

View File

@ -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);

View File

@ -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;
}