* New function wxObjectInputStream::Recall()

* Fixes in object serializer,dynlib,LoadObject/StoreObject
* Updates for serialization.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@625 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Guilhem Lavaux
1998-08-23 09:23:27 +00:00
parent def172b2af
commit 1d44aaf824
11 changed files with 224 additions and 37 deletions

View File

@@ -118,7 +118,7 @@ wxLibrary *wxLibraries::LoadLibrary(const wxString& name)
return ((wxLibrary *)node->Data());
#ifdef __UNIX__
lib_name.Prepend("lib");
lib_name.Prepend("./lib");
lib_name += ".so";
printf("lib_name = %s\n", WXSTRINGCAST lib_name);

View File

@@ -235,8 +235,13 @@ void wxObject::StoreObject( wxObjectOutputStream& stream )
{
wxString obj_name = wxString(GetClassInfo()->GetClassName()) + "_Serialize";
wxLibrary *lib = wxTheLibraries.LoadLibrary("wxserial");
WXSERIAL(wxObject) *serial =
(WXSERIAL(wxObject) *)lib->CreateObject( obj_name );
WXSERIAL(wxObject) *serial;
if (!lib) {
wxMessageBox("Can't load wxSerial dynamic library.", "Alert !");
return;
}
serial = (WXSERIAL(wxObject) *)lib->CreateObject( obj_name );
if (!serial) {
wxString message;

View File

@@ -56,6 +56,7 @@ void wxObjectOutputStream::WriteObjectDef(wxObjectStreamInfo& info)
data_s.WriteString(info.object->GetClassInfo()->GetClassName());
} else {
data_s.WriteString(TAG_EMPTY_OBJECT);
return;
}
data_s.WriteString(GetObjectName(info.object));
@@ -80,6 +81,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 +139,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 +185,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 NULL;
node = m_current_info->children.Nth(m_current_info->children_removed+no);
if (!node)
return (wxObject *) NULL;
@@ -210,17 +229,18 @@ bool wxObjectInputStream::ReadObjectDef(wxObjectStreamInfo *info)
return FALSE;
class_name = data_s.ReadString();
info->object_name = data_s.ReadString();
info->children_removed = 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 +281,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()