Example #1
0
        /// <summary>
        /// Loads contributions from this plug-in
        /// </summary>
        internal protected virtual void loadContributions()
        {
            Debug.WriteLine("loading contributions from " + name);
            XmlElement root = doc.DocumentElement;

            Uri baseUri = new Uri(root.BaseURI);

            // load contributions
            foreach (XmlElement contrib in root.SelectNodes("contribution"))
            {
                try {
                    string type = contrib.Attributes["type"].Value;
                    if (type == "contribution")
                    {
                        continue;                                                       // ignore
                    }
                    ContributionFactory factory = PluginManager.theInstance.getContributionFactory(type);
                    Contribution        c       = factory.load(this, contrib);
                    contributions.Add(c);
                    PluginManager.theInstance.addContribution(c);
                    c.init(this, baseUri);
                } catch (Exception e) {
                    throw new Exception("failed to load contribution " + contrib.Attributes["id"].Value, e);
                }
            }
        }
Example #2
0
        internal protected virtual void loadContributionFactories()
        {
            XmlElement root = doc.DocumentElement;

            // locate contribution factories first,
            // because we'll need them to load contributions.
            foreach (XmlElement contrib in root.SelectNodes("contribution"))
            {
                string type = contrib.Attributes["type"].Value;
                if (type == "contribution")
                {
                    // load a contribution factory

                    string contributionName = XmlUtil.selectSingleNode(contrib, "name").InnerText;

                    ContributionFactory factory =
                        (ContributionFactory)PluginUtil.loadObjectFromManifest(contrib);

                    // register it
                    PluginManager.theInstance.addContributionFactory(
                        contributionName,
                        factory);
                }
            }
        }
Example #3
0
        /// <summary>
        /// Registers a <c>ContributionFactory</c>.
        /// This method has to be called before the initialization.
        /// Normally, this method is called by <c>Plugin</c> but the caller
        /// can invoke this method before calling the init method.
        /// </summary>
        public void addContributionFactory(string name, ContributionFactory factory)
        {
            if (contributionFactories.Contains(name))
            {
                throw new Exception(string.Format(
                                        "contribution type \"{0}\" is already registered.", name));
            }

            contributionFactories.Add(name, factory);
        }
Example #4
0
        public ContributionFactory getContributionFactory(string name)
        {
            ContributionFactory factory = (ContributionFactory)
                                          contributionFactories[name];

            if (factory == null)
            {
                throw new Exception(name + " is an unknown contribution");
            }
            //! throw new Exception(name+"は未知のコントリビューションです");
            else
            {
                return(factory);
            }
        }
        protected override Contribution createPrimitiveContrib(XmlElement sprite, XmlNode color, XmlElement contrib)
        {
            sprite.AppendChild(color.Clone());
            PluginManager       manager = PluginManager.theInstance;
            ContributionFactory factory = manager.getContributionFactory("land");
            XmlNode             temp    = contrib.Clone();

            foreach (XmlNode cn in temp.ChildNodes)
            {
                if (cn.Name.Equals("sptite") || cn.Name.Equals("picture"))
                {
                    temp.RemoveChild(cn);
                }
            }
            temp.AppendChild(sprite);
            contrib.AppendChild(temp);
            return(factory.load(parent, (XmlElement)temp));
        }