public static GObject NewObject(PackageItem pi)
{
Stats.LatestObjectCreation++;
switch (pi.type)
{
case PackageItemType.Image:
return new GImage();
case PackageItemType.MovieClip:
return new GMovieClip();
case PackageItemType.Component:
{
ConstructorInfo extentionConstructor;
if (packageItemExtensions.TryGetValue(pi.owner.id + pi.id, out extentionConstructor))
{
GComponent g = (GComponent)extentionConstructor.Invoke(null);
if (g == null)
throw new Exception("Unable to create instance of '" + extentionConstructor.Name + "'");
return g;
}
XML xml = pi.componentData;
string extention = xml.GetAttribute("extention");
if (extention != null)
{
switch (extention)
{
case "Button":
return new GButton();
case "Label":
return new GLabel();
case "ProgressBar":
return new GProgressBar();
case "Slider":
return new GSlider();
case "ScrollBar":
return new GScrollBar();
case "ComboBox":
return new GComboBox();
default:
return new GComponent();
}
}
else
return new GComponent();
}
}
return null;
}