]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/objstrm.cpp
Added Latex style file
[wxWidgets.git] / src / common / objstrm.cpp
index 94200e50d8789feccdeeeceeb80b0574cce96f9e..b7beef3b716b1d101ba1330d4636794a8ca5b366 100644 (file)
 #pragma implementation "objstrm.h"
 #endif
 
+// For compilers that support precompilation, includes "wx.h".
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+#pragma hdrstop
+#endif
+
+#ifndef WX_PRECOMP
+#include "wx/defs.h"
+#include "wx/setup.h"
+#endif
+
+#if USE_SERIAL
+
 #include "wx/object.h"
 #include "wx/objstrm.h"
 #include "wx/datstrm.h"
@@ -49,13 +63,17 @@ void wxObjectOutputStream::WriteObjectDef(wxObjectStreamInfo& info)
   if (info.duplicate) {
     data_s.WriteString(TAG_DUPLICATE_OBJECT);
     data_s.WriteString(GetObjectName(info.object));
+    printf("info.object (dup %s)\n", info.object->GetClassInfo()->GetClassName());
     return;
   }
 
   if (info.object) {
     data_s.WriteString(info.object->GetClassInfo()->GetClassName());
+    printf("info.object (%s)\n", info.object->GetClassInfo()->GetClassName());
   } else {
     data_s.WriteString(TAG_EMPTY_OBJECT);
+    printf("info.object (NULL)\n");
+    return;
   }
 
   data_s.WriteString(GetObjectName(info.object));
@@ -80,6 +98,9 @@ void wxObjectOutputStream::AddChild(wxObject *obj)
     info->duplicate = FALSE;
     m_saved_objs.Append(obj);
   }
+  if (!obj)
+    info->duplicate = FALSE;
+
   info->n_children = 0;
   info->object = obj;
   info->parent = m_current_info; // Not useful here.
@@ -135,6 +156,7 @@ bool wxObjectOutputStream::SaveObject(wxObject& obj)
   m_stage = 0;
   info.object = &obj;
   info.n_children = 0;
+  info.duplicate = FALSE;
   ProcessObjectDef(&info);
 
   m_stage = 1;
@@ -180,11 +202,25 @@ wxObject *wxObjectInputStream::GetParent() const
   return m_current_info->parent->object;
 }
 
+wxObject *wxObjectInputStream::GetChild()
+{
+  wxObject *obj = GetChild(0);
+
+  m_current_info->children_removed++;
+
+  return obj;
+}
+
 wxObject *wxObjectInputStream::GetChild(int no) const
 {
-  wxNode *node = m_current_info->children.Nth(m_current_info->children_removed+no);
+  wxNode *node;
   wxObjectStreamInfo *info;
 
+  if (m_current_info->children_removed >= m_current_info->n_children)
+    return (wxObject *) NULL;
+
+  node = m_current_info->children.Nth(m_current_info->children_removed+no);
+
   if (!node)
     return (wxObject *) NULL;
 
@@ -210,17 +246,18 @@ bool wxObjectInputStream::ReadObjectDef(wxObjectStreamInfo *info)
     return FALSE;
 
   class_name = data_s.ReadString();
-  info->object_name = data_s.ReadString();
   info->children_removed = 0;
+  info->n_children = 0;
 
   if (class_name == TAG_EMPTY_OBJECT)
     info->object = (wxObject *) NULL;
   else if (class_name == TAG_DUPLICATE_OBJECT) {
+    info->object_name = data_s.ReadString();
     info->object = SolveName(info->object_name);
-    info->n_children = 0;
   } else {
+    info->object_name = data_s.ReadString();
     info->object = wxCreateDynamicObject( WXSTRINGCAST class_name);
-    info->n_children = data_s.Read8();
+    info->n_children = data_s.Read32();
   }
   return TRUE;
 }
@@ -261,6 +298,14 @@ void wxObjectInputStream::ProcessObjectData(wxObjectStreamInfo *info)
     ProcessObjectData((wxObjectStreamInfo *)node->Data());
     node = node->Next();
   }
+
+  m_current_info = info;
+
+  if (info->recall) {
+    m_secondcall = TRUE;
+    info->object->LoadObject(*this);
+    m_secondcall = FALSE;
+  }
 }
 
 wxObject *wxObjectInputStream::LoadObject()
@@ -279,3 +324,6 @@ wxObject *wxObjectInputStream::LoadObject()
 
   return object;
 }
+
+#endif
+