Exemplo n.º 1
0
 protected virtual void loadTemplate(GraphicObject template = null)
 {
     if (template == null)
     {
         if (!Interface.DefaultTemplates.ContainsKey(this.GetType().FullName))
         {
             throw new Exception(string.Format("No default template found for '{0}'", this.GetType().FullName));
         }
         this.SetChild(CurrentInterface.Load(Interface.DefaultTemplates[this.GetType().FullName]));
     }
     else
     {
         this.SetChild(template);
     }
 }
Exemplo n.º 2
0
        public override void ReadXml(System.Xml.XmlReader reader)
        {
            //Template could be either an attribute containing path or expressed inlined
            //as a Template Element
            using (System.Xml.XmlReader subTree = reader.ReadSubtree())
            {
                subTree.Read();

                string template = reader.GetAttribute("Template");
                string tmp      = subTree.ReadOuterXml();

                //Load template from path set as attribute in templated control
                if (string.IsNullOrEmpty(template))
                {
                    //seek for template tag first
                    using (XmlReader xr = new XmlTextReader(tmp, XmlNodeType.Element, null)) {
                        //load template first if inlined

                        xr.Read();                          //read first child
                        xr.Read();                          //skip root node

                        while (!xr.EOF)
                        {
                            if (!xr.IsStartElement())
                            {
                                xr.Read();
                                continue;
                            }
                            if (xr.Name == "ItemTemplate")
                            {
                                string dataType = "default", datas = "", itemTmp;
                                while (xr.MoveToNextAttribute())
                                {
                                    if (xr.Name == "DataType")
                                    {
                                        dataType = xr.Value;
                                    }
                                    else if (xr.Name == "Data")
                                    {
                                        datas = xr.Value;
                                    }
                                }
                                xr.MoveToElement();
                                itemTmp = xr.ReadInnerXml();

                                if (ItemTemplates == null)
                                {
                                    ItemTemplates = new Dictionary <string, ItemTemplate> ();
                                }

                                using (IMLReader iTmp = new IMLReader(null, itemTmp)) {
                                    ItemTemplates [dataType] =
                                        new ItemTemplate(iTmp.RootType, iTmp.GetLoader(), dataType, datas);
                                }
                                if (!string.IsNullOrEmpty(datas))
                                {
                                    ItemTemplates [dataType].CreateExpandDelegate(this);
                                }

                                continue;
                            }
                            if (xr.Name == "Template")
                            {
                                xr.Read();

                                Type t = Type.GetType("Crow." + xr.Name);
                                if (t == null)
                                {
                                    Assembly a = Assembly.GetEntryAssembly();
                                    foreach (Type expT in a.GetExportedTypes())
                                    {
                                        if (expT.Name == xr.Name)
                                        {
                                            t = expT;
                                        }
                                    }
                                }
                                GraphicObject go = (GraphicObject)Activator.CreateInstance(t);
                                (go as IXmlSerializable).ReadXml(xr);

                                loadTemplate(go);
                                continue;
                            }
                            xr.ReadInnerXml();
                        }
                    }
                }
                else
                {
                    loadTemplate(CurrentInterface.Load(template));
                }

                //if no template found, load default one
                if (this.child == null)
                {
                    loadTemplate();
                }

                //normal xml read
                using (XmlReader xr = new XmlTextReader(tmp, XmlNodeType.Element, null)) {
                    xr.Read();
                    base.ReadXml(xr);
                }
            }
        }