public static ObjectWrapper ReadObject(ObjectReader reader, XmlElement elem)
{
string className = elem.GetAttribute ("class");
ClassDescriptor klass;
if (reader.Format == FileFormat.Native)
klass = Registry.LookupClassByName (className);
else
klass = Registry.LookupClassByCName (className);
if (klass == null) {
ErrorWidget we = new ErrorWidget (className, elem.GetAttribute ("id"));
ErrorWidgetWrapper wrap = (ErrorWidgetWrapper) Create (reader.Project, we);
wrap.Read (reader, elem);
return wrap;
}
if (!klass.SupportsGtkVersion (reader.Project.TargetGtkVersion)) {
ErrorWidget we = new ErrorWidget (className, klass.TargetGtkVersion, reader.Project.TargetGtkVersion, elem.GetAttribute ("id"));
ErrorWidgetWrapper wrap = (ErrorWidgetWrapper) Create (reader.Project, we);
wrap.Read (reader, elem);
return wrap;
}
ObjectWrapper wrapper = klass.CreateWrapper ();
wrapper.classDescriptor = klass;
wrapper.proj = reader.Project;
try {
wrapper.OnBeginRead (reader.Format);
wrapper.Read (reader, elem);
} catch (Exception ex) {
Console.WriteLine (ex);
ErrorWidget we = new ErrorWidget (ex, elem.GetAttribute ("id"));
ErrorWidgetWrapper wrap = (ErrorWidgetWrapper) Create (reader.Project, we);
wrap.Read (reader, elem);
return wrap;
} finally {
wrapper.OnEndRead (reader.Format);
}
return wrapper;
}