]> git.saurik.com Git - wxWidgets.git/commitdiff
1. added wxMemoryConfig (private) class
authorVadim Zeitlin <vadim@wxwidgets.org>
Sat, 22 Jan 2000 23:15:52 +0000 (23:15 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sat, 22 Jan 2000 23:15:52 +0000 (23:15 +0000)
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

include/wx/memconf.h [new file with mode: 0644]
src/common/appcmn.cpp
src/common/fileconf.cpp
src/common/fontmap.cpp

diff --git a/include/wx/memconf.h b/include/wx/memconf.h
new file mode 100644 (file)
index 0000000..0d7a222
--- /dev/null
@@ -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_
index d185f5bff00e9efc6876069792f58ffbb871269b..18d3dcafff3abb6e72ccf80e3e324fe2501aa150 100644 (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 );
 }
 
index 49f612750062956e0ae9097c1c3ae6d99388c741..8c96c4d6bd10e5f7bc1ac81e938d946bc7a751a4 100644 (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);
index 4bf7daa110840179eeb4b032475f6d6448d794f8..116565bbcfe8fcd3b12a987a0be31056a416ee5f 100644 (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;
 }