]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/fileconf.cpp
Fixed notebook redraw problems when using XP theme with Classic appearance.
[wxWidgets.git] / src / common / fileconf.cpp
index d93a06078db20c86e73d0fb6176c7c50a2a4e0f0..071b90f243423f33a7478da46acdfd8945410338 100644 (file)
@@ -10,7 +10,7 @@
 // Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
 
 // Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
 
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
 #pragma implementation "fileconf.h"
 #endif
 
 #pragma implementation "fileconf.h"
 #endif
 
@@ -108,9 +108,9 @@ static wxString GetAppName(const wxString& appname);
 
 #ifdef WXMAKINGDLL_BASE
     WX_DEFINE_SORTED_USER_EXPORTED_ARRAY(wxFileConfigEntry *, ArrayEntries,
 
 #ifdef WXMAKINGDLL_BASE
     WX_DEFINE_SORTED_USER_EXPORTED_ARRAY(wxFileConfigEntry *, ArrayEntries,
-                                         WXDLLIMPEXP_LOCAL);
+                                         WXDLLIMPEXP_BASE);
     WX_DEFINE_SORTED_USER_EXPORTED_ARRAY(wxFileConfigGroup *, ArrayGroups,
     WX_DEFINE_SORTED_USER_EXPORTED_ARRAY(wxFileConfigGroup *, ArrayGroups,
-                                         WXDLLIMPEXP_LOCAL);
+                                         WXDLLIMPEXP_BASE);
 #else
     WX_DEFINE_SORTED_ARRAY(wxFileConfigEntry *, ArrayEntries);
     WX_DEFINE_SORTED_ARRAY(wxFileConfigGroup *, ArrayGroups);
 #else
     WX_DEFINE_SORTED_ARRAY(wxFileConfigEntry *, ArrayEntries);
     WX_DEFINE_SORTED_ARRAY(wxFileConfigGroup *, ArrayGroups);
@@ -494,10 +494,21 @@ wxFileConfig::wxFileConfig(wxInputStream &inStream, wxMBConv& conv)
         wxString strTmp;
 
         char buf[1024];
         wxString strTmp;
 
         char buf[1024];
-        while ( !inStream.Read(buf, WXSIZEOF(buf)).Eof() )
-            strTmp.append(wxConvertMB2WX(buf), inStream.LastRead());
+        do
+        {
+            inStream.Read(buf, WXSIZEOF(buf));
+
+            const wxStreamError err = inStream.GetLastError();
+
+            if ( err != wxSTREAM_NO_ERROR && err != wxSTREAM_EOF )
+            {
+                wxLogError(_("Error reading config options."));
+                break;
+            }
 
 
-        strTmp.append(wxConvertMB2WX(buf), inStream.LastRead());
+            strTmp.append(wxConvertMB2WX(buf), inStream.LastRead());
+        }
+        while ( !inStream.Eof() );
 
         strTrans = wxTextBuffer::Translate(strTmp);
     }
 
         strTrans = wxTextBuffer::Translate(strTmp);
     }
@@ -623,7 +634,11 @@ void wxFileConfig::Parse(wxTextBuffer& buffer, bool bLocal)
       SetPath(strGroup);
 
       if ( bLocal )
       SetPath(strGroup);
 
       if ( bLocal )
+      {
+        if ( m_pCurrentGroup->Parent() )
+          m_pCurrentGroup->Parent()->SetLastGroup(m_pCurrentGroup);
         m_pCurrentGroup->SetLine(m_linesTail);
         m_pCurrentGroup->SetLine(m_linesTail);
+      }
 
       // check that there is nothing except comments left on this line
       bool bCont = TRUE;
 
       // check that there is nothing except comments left on this line
       bool bCont = TRUE;
@@ -678,19 +693,6 @@ void wxFileConfig::Parse(wxTextBuffer& buffer, bool bLocal)
         if ( pEntry == NULL ) {
           // new entry
           pEntry = m_pCurrentGroup->AddEntry(strKey, n);
         if ( pEntry == NULL ) {
           // new entry
           pEntry = m_pCurrentGroup->AddEntry(strKey, n);
-
-          // <JACS>
-          // Take the opportunity to set some pointers now
-          // that we know there are items in this group.
-          // Otherwise, items added to a newly read file
-          // can be put in the wrong place.
-          m_pCurrentGroup->SetLastEntry(pEntry);
-          if (m_pCurrentGroup->Parent())
-              m_pCurrentGroup->Parent()->SetLastGroup(m_pCurrentGroup);
-          // </JACS>
-
-          if ( bLocal )
-            pEntry->SetLine(m_linesTail);
         }
         else {
           if ( bLocal && pEntry->IsImmutable() ) {
         }
         else {
           if ( bLocal && pEntry->IsImmutable() ) {
@@ -708,11 +710,12 @@ void wxFileConfig::Parse(wxTextBuffer& buffer, bool bLocal)
             wxLogWarning(_("file '%s', line %d: key '%s' was first found at line %d."),
                          buffer.GetName(), n + 1, strKey.c_str(), pEntry->Line());
 
             wxLogWarning(_("file '%s', line %d: key '%s' was first found at line %d."),
                          buffer.GetName(), n + 1, strKey.c_str(), pEntry->Line());
 
-            if ( bLocal )
-              pEntry->SetLine(m_linesTail);
           }
         }
 
           }
         }
 
+        if ( bLocal )
+          pEntry->SetLine(m_linesTail);
+
         // skip whitespace
         while ( wxIsspace(*pEnd) )
           pEnd++;
         // skip whitespace
         while ( wxIsspace(*pEnd) )
           pEnd++;
@@ -1098,8 +1101,11 @@ bool wxFileConfig::DeleteAll()
 {
   CleanUp();
 
 {
   CleanUp();
 
-  if ( wxRemove(m_strLocalFile) == -1 )
-    wxLogSysError(_("can't delete user configuration file '%s'"), m_strLocalFile.c_str());
+  if ( wxFile::Exists(m_strLocalFile) && wxRemove(m_strLocalFile) == -1 )
+  {
+      wxLogSysError(_("can't delete user configuration file '%s'"), m_strLocalFile.c_str());
+      return FALSE;
+  }
 
   m_strLocalFile = m_strGlobalFile = wxT("");
   Init();
 
   m_strLocalFile = m_strGlobalFile = wxT("");
   Init();
@@ -1844,8 +1850,6 @@ void wxFileConfigEntry::SetValue(const wxString& strValue, bool bUser)
         else // this entry didn't exist in the local file
         {
             // add a new line to the file
         else // this entry didn't exist in the local file
         {
             // add a new line to the file
-            wxASSERT( m_nLine == wxNOT_FOUND );   // consistency check
-
             wxFileConfigLineList *line = Group()->GetLastEntryLine();
             m_pLine = Group()->Config()->LineListInsert(strLine, line);
 
             wxFileConfigLineList *line = Group()->GetLastEntryLine();
             m_pLine = Group()->Config()->LineListInsert(strLine, line);