Esempio n. 1
0
        /// <summary>The view is asking for variable names.</summary>
        public static List <ContextItem> ExamineModelForNames(IModel relativeTo, string objectName, bool properties, bool methods, bool events)
        {
            if (objectName == string.Empty)
            {
                objectName = ".";
            }

            object o = null;
            IModel replacementModel = Apsim.Get(relativeTo, ".Simulations.Replacements") as IModel;

            if (replacementModel != null)
            {
                o = Apsim.Get(replacementModel, objectName) as IModel;
            }

            if (o == null)
            {
                o = Apsim.Get(relativeTo, objectName);
            }

            if (o == null && relativeTo.Parent is Replacements)
            {
                // Model 'relativeTo' could be under replacements. Look for the first simulation and try that.
                IModel simulation = Apsim.Find(relativeTo.Parent.Parent, typeof(Simulation));
                o = Apsim.Get(simulation, objectName) as IModel;
            }

            if (o != null)
            {
                return(NeedContextItemsArgs.ExamineObjectForContextItems(o, properties, methods, events));
            }

            return(new List <ContextItem>());
        }
        /// <summary>
        /// Generates a list of context items for given model.
        /// Uses <see cref="GetNodeFromPath(Model, string)"/> to get the model reference.
        /// </summary>
        /// <param name="relativeTo">Model that the string is relative to.</param>
        /// <param name="objectName">Name of the model that we want context items for.</param>
        /// <returns></returns>
        public static List <ContextItem> ExamineModelForContextItemsV2(Model relativeTo, string objectName, bool properties, bool methods, bool events)
        {
            List <ContextItem> contextItems = new List <ContextItem>();
            object             node         = GetNodeFromPath(relativeTo, objectName);

            if (node != null)
            {
                contextItems = NeedContextItemsArgs.ExamineObjectForContextItems(node, properties, methods, events);
            }
            return(contextItems);
        }